@getopenpay/openpay-js-react 0.3.16 → 0.3.17-alpha.76078a6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/{Resource-ZHf3WzhQ-CXO-0aM2.js → Resource-Bk4gNtfP-BXLa911W.js} +3 -3
  3. package/dist/{SimpleSpanProcessor-C2RLPQpG-XmLthHn2.js → SimpleSpanProcessor-BNp26sEO-WIIErKWy.js} +7 -7
  4. package/dist/{detect-resources-DT-mJXgd-BYQgu6Ql.js → detect-resources-CEexM088-B-79sdKq.js} +7 -7
  5. package/dist/{diag-api-CK5inj4K-dVgEuDsq.js → diag-api-CGv70wVC-J2GHYXfs.js} +2 -2
  6. package/dist/{index-DUNJmiru-CLY8kuUk.js → index-BD2LXVVl-CebiJPc5.js} +2 -2
  7. package/dist/{index-DpRS6M62-DNEfb2H-.js → index-BF4sv0q7-Cq9yrXiJ.js} +2 -2
  8. package/dist/{index-BUomB0PZ-Dd0GFlz2.js → index-BHjITcON-Bjh2Kjox.js} +5 -5
  9. package/dist/{index-DlFj36kO-DQ8H346Q.js → index-BVMEomhC-Dn62TL4-.js} +2 -2
  10. package/dist/{index-Dr5x0s5I-BYVh9unV.js → index-BqbJEc8O-CT-I09OB.js} +6 -6
  11. package/dist/{index-Dml0aEQD-CeapLryJ.js → index-CimwnGaC-Cb5TA79q.js} +5 -5
  12. package/dist/{index-BcnFiKMK-DCby6mkW.js → index-ClALWloL-CTcpU7i8.js} +5 -5
  13. package/dist/{index-DofLDiKM.js → index-DESttwng.js} +15 -12
  14. package/dist/{index-xNUSAw4J-CdpHClBz.js → index-DITJWBQK-CYzmuA-u.js} +2 -2
  15. package/dist/{index-CeMHmEK0-CyiHDol_.js → index-wnqPyWe4-Bpw7QQs-.js} +6 -6
  16. package/dist/index.d.ts +1 -0
  17. package/dist/index.js +1 -1
  18. package/dist/{metrics-api-CvzxMpC0-B9qnWUhg.js → metrics-api-DVCwppyM-Co9i4pid.js} +2 -2
  19. package/dist/{sdk-info-BlaoCnDc-BQBaw5N_.js → sdk-info-C5su89EP-nV5DYrig.js} +2 -2
  20. package/dist/{url-gBuEZQ4W-Z3svunxV.js → url-DXg43Cx7-1jmenlwG.js} +2 -2
  21. package/dist/{utils-DEDfJmJQ-zyu0HvrD.js → utils-BxVLW1B2-FE6P6O2E.js} +4 -4
  22. package/dist/{utils-C40-BLFS-B1GCVmd5.js → utils-CGIdnpL9-DftREnBE.js} +2 -2
  23. package/package.json +1 -1
@@ -6640,14 +6640,17 @@ const Vd = re(
6640
6640
  if (!i || !i.next_action_metadata)
6641
6641
  throw Error("Failed to fetch necessary setup data for Loop");
6642
6642
  const s = i.next_action_metadata;
6643
- let c = s.authorization_amount, l = s.min_authorization_amount, u;
6644
- o ? (u = 0, c = Math.max(c, l)) : (u = (a ? a.amountAtom : r.amount_total_atom) * s.token_price, l = Math.max(l, u), c = Math.max(c, l));
6645
- const d = u, f = Le(), h = {
6646
- paymentUsdAmount: d,
6643
+ let c = s.authorization_amount, l = s.min_authorization_amount;
6644
+ const u = s.allow_customer_to_choose_auth;
6645
+ let d;
6646
+ o ? (d = 0, c = Math.max(c, l)) : (d = (a ? a.amountAtom : r.amount_total_atom) * s.token_price, l = Math.max(l, d), c = Math.max(c, l));
6647
+ const f = d, h = Le(), p = {
6648
+ paymentUsdAmount: f,
6647
6649
  suggestedAuthorizationUsdAmount: c,
6648
- customerRefId: f,
6649
- minAuthorizationUsdAmount: l
6650
- }, p = {
6650
+ customerRefId: h,
6651
+ minAuthorizationUsdAmount: l,
6652
+ allowCustomerToChooseAuth: u
6653
+ }, m = {
6651
6654
  apiKey: t.metadata.api_token,
6652
6655
  entityId: t.metadata.entity_id,
6653
6656
  merchantId: t.metadata.merchant_id,
@@ -6655,8 +6658,8 @@ const Vd = re(
6655
6658
  };
6656
6659
  return {
6657
6660
  isAvailable: !0,
6658
- widgetProps: h,
6659
- initLoopConnectProps: p
6661
+ widgetProps: p,
6662
+ initLoopConnectProps: m
6660
6663
  };
6661
6664
  }
6662
6665
  ), Kd = re(
@@ -7392,7 +7395,7 @@ let kn;
7392
7395
  const Ap = async (e, t) => {
7393
7396
  if (typeof window > "u")
7394
7397
  return;
7395
- const r = await import("./index-BcnFiKMK-DCby6mkW.js"), { ConsoleSpanExporter: o, SimpleSpanProcessor: i, WebTracerProvider: a } = r, s = await import("./index-CeMHmEK0-CyiHDol_.js"), { FetchInstrumentation: c } = s, l = await import("./index-xNUSAw4J-CdpHClBz.js"), { ZoneContextManager: u } = l, d = await import("./index-Dr5x0s5I-BYVh9unV.js"), { registerInstrumentations: f } = d, h = await import("./index-BUomB0PZ-Dd0GFlz2.js"), { Resource: p } = h, m = await import("./detect-resources-DT-mJXgd-BYQgu6Ql.js").then((ie) => ie.d), { detectResourcesSync: _ } = m, w = await import("./index-DUNJmiru-CLY8kuUk.js"), { OTLPTraceExporter: b } = w, E = await import("./index-DpRS6M62-DNEfb2H-.js"), { B3Propagator: v, B3InjectEncoding: k } = E, O = await import("./index-DlFj36kO-DQ8H346Q.js"), { BatchSpanProcessor: A } = O;
7398
+ const r = await import("./index-ClALWloL-CTcpU7i8.js"), { ConsoleSpanExporter: o, SimpleSpanProcessor: i, WebTracerProvider: a } = r, s = await import("./index-wnqPyWe4-Bpw7QQs-.js"), { FetchInstrumentation: c } = s, l = await import("./index-DITJWBQK-CYzmuA-u.js"), { ZoneContextManager: u } = l, d = await import("./index-BqbJEc8O-CT-I09OB.js"), { registerInstrumentations: f } = d, h = await import("./index-BHjITcON-Bjh2Kjox.js"), { Resource: p } = h, m = await import("./detect-resources-CEexM088-B-79sdKq.js").then((ie) => ie.d), { detectResourcesSync: _ } = m, w = await import("./index-BD2LXVVl-CebiJPc5.js"), { OTLPTraceExporter: b } = w, E = await import("./index-BF4sv0q7-Cq9yrXiJ.js"), { B3Propagator: v, B3InjectEncoding: k } = E, O = await import("./index-BVMEomhC-Dn62TL4-.js"), { BatchSpanProcessor: A } = O;
7396
7399
  dr(`Initializing tracer with version ${e} and baseUrl ${t}`);
7397
7400
  const J = Ip(t);
7398
7401
  dr(`Using collector URL ${J}`);
@@ -7865,7 +7868,7 @@ const Op = (e, t, r) => {
7865
7868
  (a = q()) == null || a.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), xl(), this.registeredElements = null, delete window.ojs, g("form_destroyed");
7866
7869
  }, this.updateCallbacks = (a) => {
7867
7870
  this.formCallbacks.setCallbacks(a);
7868
- }, jt.assignAsSingleton(this), this.ojsVersion = "0.3.16", this.ojsReleaseVersion = "local_build", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = wp.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${Le()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new xp(), this.deviceToken = Mo(), Rl();
7871
+ }, jt.assignAsSingleton(this), this.ojsVersion = "0.3.17", this.ojsReleaseVersion = "local_build", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = wp.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${Le()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new xp(), this.deviceToken = Mo(), Rl();
7869
7872
  const { framework: o, version: i } = Pp();
7870
7873
  _o(this.baseUrl).then((a) => {
7871
7874
  if (!wr.current.isSuccess) {
@@ -8067,4 +8070,4 @@ export {
8067
8070
  Ae as y,
8068
8071
  pu as z
8069
8072
  };
8070
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA0fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlU3RhdGUsIHVzZVJlZiwgdXNlTWVtbywgdXNlRWZmZWN0LCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMkMSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbihmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0pKEVycm9yKTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiWklQX0NPREVcIl0gPSBcInppcENvZGVcIjtcbiAgRmllbGROYW1lMltcIkNJVFlcIl0gPSBcImNpdHlcIjtcbiAgRmllbGROYW1lMltcIlNUQVRFXCJdID0gXCJzdGF0ZVwiO1xuICBGaWVsZE5hbWUyW1wiQ09VTlRSWVwiXSA9IFwiY291bnRyeVwiO1xuICBGaWVsZE5hbWUyW1wiQUREUkVTU1wiXSA9IFwiYWRkcmVzc1wiO1xuICBGaWVsZE5hbWUyW1wiUEhPTkVcIl0gPSBcInBob25lXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0gei51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDREVfQlJJREdFXCJdID0gXCJjZGUtYnJpZGdlXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbnoubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIGhpZGVJY29uOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6LmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgb2JmdXNjYXRlZFZhbHVlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHoub3B0aW9uYWwoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6Lm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJhZGRyZXNzXCIgLyogQUREUkVTUyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nLFxuICBwYXltZW50Um91dGVJZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogei5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbnoub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6Lm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBSZXF1aXJlZFN0cmluZ1xufSk7XG56LmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHouc3RyaW5nKCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPciQxKHouYXJyYXkoei5zdHJpbmcoKSkpXG59KTtcbmNvbnN0IEZpZWxkVmFsaWRhdGlvbkVycm9yID0gei5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogei5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBzdWNjZXNzOiB6LmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6LmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHouYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbnouZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHoub2JqZWN0KHsgc3VjY2Vzczogei5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZXNzXCIgLyogU1VDQ0VTUyAqLywgXCJmYWlsdXJlXCIgLyogRkFJTFVSRSAqLywgXCJjYW5jZWxsZWRcIiAvKiBDQU5DRUxMRUQgKi9dKSxcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuei5vYmplY3Qoe1xuICBocmVmOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogei5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHouc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHouc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY29uc2VudF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBwYXltZW50X3Nlc3Npb246IG51bGxPclVuZGVmT3IkMSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwodHJ1ZSksIGhyZWY6IHouc3RyaW5nKCkgfSksXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG56Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogei5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbCksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSkpLFxuICBwb3N0X2NoZWNrb3V0X3JlZGlyZWN0X3RvOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSlcbn0pO1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6Lm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xuei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG56Lm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56LmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogei5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0gei5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKTtcbmNvbnN0IEJyYW5kID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBxdWFudGl0eTogei5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6LmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6LmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZXM6IHouYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjcmVhdGVkOiB6LmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogei5hcnJheShJbnZvaWNlTWluaW1hbCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPcih6LmFycmF5KHouc3RyaW5nKCkpKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcHJldmlldzogQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IG51bGxPclVuZGVmT3IoQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsKSxcbiAgY291cG9uczogei5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcIm9wZW5cIiksXG4gIGxvY2FsZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpLFxuICBmaW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3M6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogei5udWxsYWJsZSh6LnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSksXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHouc3RyaW5nKClcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpXG5dKTtcbmNvbnN0IENvbXBsZXRlZEZvcm1QcmVmaWxsID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnoudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xuei5vYmplY3Qoe1xuICBsb2dvOiB6LnN0cmluZygpLFxuICBpY29uOiB6LnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6LnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHBtX2lkOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6LmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHouc3RyaW5nKCksXG4gIGN1c3RvbWVyX2NvdW50cnk6IHouc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogei5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuei5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0gei5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHoub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0gei5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6LmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG56Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG4gIHVzZV91bmlmaWVkX2NjX2Zsb3c6IG51bGxPclVuZGVmT3Ioei5ib29sZWFuKCkpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgY2NfcG1faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoucmVjb3JkKHouYW55KCkpO1xuei5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUxOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTM6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNpdHk6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHN0YXRlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB6aXBfY29kZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogbnVsbE9yVW5kZWZPcih6LmJvb2xlYW4oKSlcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIG1lc3NhZ2U6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBlcnJvcl9jb2RlOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgZXZlbnRzOiB6LmFycmF5KFxuICAgIHoub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56LmFueSgpLm9wdGlvbmFsKCk7XG56Lm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7fSk7XG56Lm9iamVjdCh7XG4gIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiB6LnN0cmluZygpLFxuICBfdW5pZmllZF9jY19wY2NzX2lkOiB6LnN0cmluZygpXG59KS5jYXRjaGFsbCh6LmFueSgpKTtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuei5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG5jb25zdCBab2RGaWVsZEVycm9yID0gei5vYmplY3Qoe1xuICBjb2RlOiB6LnN0cmluZygpLFxuICBtZXNzYWdlOiB6LnN0cmluZygpLFxuICBwYXRoOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbnouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/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+IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKHRpbWVvdXRDb25maWcudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5fc3ViamVjdC5waXBlKHRpbWVvdXQodGltZW91dFBhcmFtcykpKTtcbiAgICB9O1xuICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfTtcbiAgICB0aGlzLl9zdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuXG56LmVudW0oW1wiZGV2XCIsIFwic3RnXCIsIFwicHJvZFwiXSk7XG5jb25zdCBjb25udG9CYXNlVXJscyA9IHtcbiAgcHJvZDogXCJodHRwczovL2Nvbm50by5nZXRvcGVucGF5LmNvbVwiLFxuICBzdGc6IFwiaHR0cHM6Ly9jb25udG8ub3BlbnBheXN0YWdpbmcuY29tXCIsXG4gIGRldjogXCJodHRwOi8vbG9jYWxob3N0OjgwMDBcIlxufTtcbmNvbnN0IGdldENvbm50b1VybCA9IChlbnYpID0+IHtcbiAgcmV0dXJuIGNvbm50b0Jhc2VVcmxzW2Vudl07XG59O1xuXG5mdW5jdGlvbiBhc3NlcnROZXZlcih2YWx1ZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke3ZhbHVlfWApO1xufVxuY29uc3QgZ2V0V2luZG93U2FmZSA9ICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIHJldHVybiB3aW5kb3c7XG59O1xuXG5jb25zdCBtZXRyaWNzUHVibGlzaGVyID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbmNvbnN0IE1FVFJJQ1NfUVVFVUVfS0VZID0gXCJvcF9tZXRyaWNzX3F1ZXVlXCI7XG5jb25zdCBNQVhfUkVUUllfQVRURU1QVFMgPSAzO1xuY29uc3QgQkFUQ0hfU0laRSA9IDM7XG5jb25zdCBCQVRDSF9JTlRFUlZBTF9NUyA9IDFlMztcbmNvbnN0IHsgbG9nX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwib3AtbWV0cmljc1wiKTtcbmNsYXNzIE1ldHJpY3NRdWV1ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IDA7XG4gICAgdGhpcy5vZmZsaW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBsb2dfXyhcIk5ldHdvcmsgb2ZmbGluZSwgbWV0cmljcyB3aWxsIGJlIHF1ZXVlZFwiKTtcbiAgICAgIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfTtcbiAgICB0aGlzLm9ubGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbG9nX18oXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpO1xuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9O1xuICAgIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gIH1cbiAgYWRkRXZlbnQoZXZlbnROYW1lLCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcykge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnROYW1lLFxuICAgICAgcHJvcGVydGllczogcHJvcGVydGllcyB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiBjb250ZXh0UHJvcGVydGllcyB8fCB7fSxcbiAgICAgIG5vbmNlOiB2NCgpLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBldmVudC50aW1lc3RhbXA7XG4gICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkUXVldWUgPSBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZT8uZ2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkUXVldWUpIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IEpTT04ucGFyc2Uoc3RvcmVkUXVldWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSwgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWV1ZSkpO1xuICB9XG4gIHNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IHNhZmVXaW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgaWYgKHNhZmVXaW5kb3cgJiYgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBzYWZlV2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICB9LCBCQVRDSF9JTlRFUlZBTF9NUyk7XG4gICAgfVxuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBpZiAodGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIGdldFdpbmRvd1NhZmUoKT8uY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lb3V0KTtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgfVxuICBwcm9jZXNzUXVldWUoKSB7XG4gICAgaWYgKCFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gdHJ1ZTtcbiAgICB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBjb250ZXh0ID0gbWV0cmljc1B1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgbG9nX18oXCJNZXRyaWNzIGNvbnRleHQgbm90IGF2YWlsYWJsZSwgd2lsbCByZXRyeSBsYXRlclwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYmF0Y2ggPSB0aGlzLnF1ZXVlLnNsaWNlKDAsIEJBVENIX1NJWkUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXRjaFBheWxvYWQgPSB7XG4gICAgICAgIGV2ZW50czogYmF0Y2gubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBldmVudF9uYW1lOiBldmVudC5ldmVudE5hbWUsXG4gICAgICAgICAgICBkZXZpY2VfdG9rZW46IGNvbnRleHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICAgICAgLi4uZXZlbnQuY29udGV4dFByb3BlcnRpZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIG5vbmNlOiBldmVudC5ub25jZSxcbiAgICAgICAgICAgICAgZGF0ZXRpbWU6IGV2ZW50LmRhdGV0aW1lLFxuICAgICAgICAgICAgICB0aW1lc3RhbXA6IGV2ZW50LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgdGltZV9kaWZmX2Zyb21fcHJldmlvdXNfZXZlbnQ6IGV2ZW50LnRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQsXG4gICAgICAgICAgICAgIGNoZWNrb3V0X3NlY3VyZV90b2tlbjogY29udGV4dC5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgICAuLi5ldmVudC5wcm9wZXJ0aWVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgICBjb25zdCBjb25udG9VcmwgPSBnZXRDb25udG9VcmwoY29udGV4dC5lbnZpcm9ubWVudCk7XG4gICAgICBjb25zdCBtZXRyaWNzUm91dGVyID0gbmV3IFVSTChcIi9tZXRyaWNzL3B1YmxpYy9jYXB0dXJlXCIsIGNvbm50b1VybCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKG1ldHJpY3NSb3V0ZXIudG9TdHJpbmcoKSwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYmF0Y2hQYXlsb2FkKVxuICAgICAgfSk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dfXyhcIkVycm9yIHNlbmRpbmcgbWV0cmljcyBiYXRjaDpcIiwgZXJyb3IpO1xuICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKSB7XG4gICAgYmF0Y2guZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LmF0dGVtcHRDb3VudCsrO1xuICAgIH0pO1xuICAgIGNvbnN0IGV2ZW50c1RvS2VlcCA9IGJhdGNoLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmF0dGVtcHRDb3VudCA8IE1BWF9SRVRSWV9BVFRFTVBUUyk7XG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICB0aGlzLnF1ZXVlID0gWy4uLmV2ZW50c1RvS2VlcCwgLi4udGhpcy5xdWV1ZV07XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgfVxuICBjbGVhbnVwKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG59XG5jb25zdCBtZXRyaWNzUXVldWUgPSBuZXcgTWV0cmljc1F1ZXVlKCk7XG5nZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgKCkgPT4ge1xuICBtZXRyaWNzUXVldWUucHJvY2Vzc1F1ZXVlKCk7XG59KTtcblxuei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wazogei5zdHJpbmcoKVxufSk7XG5cbnoub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCI6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcbmNvbnN0IEFXWF9MT0FESU5HID0ge1xuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn07XG5cbmNvbnN0IFBheW1lbnRQcm9jZXNzb3IgPSB6LmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiLCBcImFkeWVuXCJdKTtcbih7XG4gIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59KTtcblxuei5vYmplY3Qoe1xuICBkYXRhOiB6Lm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICAgIGVycm9yczogei5hcnJheSh6LmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogei5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogei5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcblxuY29uc3QgQWR5ZW5FbnZpcm9ubWVudCA9IHouZW51bShbXCJ0ZXN0XCIsIFwibGl2ZVwiLCBcImxpdmUtdXNcIiwgXCJsaXZlLWluXCIsIFwibGl2ZS1hcHNlXCIsIFwibGl2ZS1hdVwiXSk7XG56LmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG56Lm9iamVjdCh7XG4gIFwib3AtYWNjb3VudC1pZFwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBBZHllbkVudmlyb25tZW50LFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbnoub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHouc3RyaW5nKClcbn0pO1xuXG56Lm9iamVjdCh7XG4gIHN0cmlwZV9wazogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6LnN0cmluZygpXG59KTtcblxuei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImxvb3BcIiksXG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJjcnlwdG9cIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCksXG4gICAgZW50aXR5X2lkOiB6LnN0cmluZygpLFxuICAgIGFwaV90b2tlbjogei5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKVxuICB9KVxufSk7XG52YXIgRW52aXJvbm1lbnQgPSAvKiBAX19QVVJFX18gKi8gKChFbnZpcm9ubWVudDIpID0+IHtcbiAgRW52aXJvbm1lbnQyW1wiTG9jYWxcIl0gPSBcImxvY2FsXCI7XG4gIEVudmlyb25tZW50MltcIkRldmVsb3BtZW50XCJdID0gXCJkZXZlbG9wbWVudFwiO1xuICBFbnZpcm9ubWVudDJbXCJTdGFnaW5nXCJdID0gXCJzdGFnaW5nXCI7XG4gIEVudmlyb25tZW50MltcIkRlbW9cIl0gPSBcImRlbW9cIjtcbiAgRW52aXJvbm1lbnQyW1wiUHJvZHVjdGlvblwiXSA9IFwicHJvZHVjdGlvblwiO1xuICByZXR1cm4gRW52aXJvbm1lbnQyO1xufSkoRW52aXJvbm1lbnQgfHwge30pO1xudmFyIFBheUluRmFpbGVkID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5GYWlsZWQyKSA9PiB7XG4gIFBheUluRmFpbGVkMltcIk1FVEhPRF9DUkVBVElPTl9GQUlMRURcIl0gPSBcIm1ldGhvZENyZWF0aW9uRmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9CQUxBTkNFXCJdID0gXCJpbnN1ZmZpY2llbnRCYWxhbmNlXCI7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9BVVRIT1JJWkFUSU9OXCJdID0gXCJpbnN1ZmZpY2llbnRBdXRob3JpemF0aW9uXCI7XG4gIFBheUluRmFpbGVkMltcIlNJR05FRF9NRVNTQUdFX1JFUVVJUkVEXCJdID0gXCJzaWduZWRNZXNzYWdlUmVxdWlyZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiQ1VTVE9NRVJfQ1JFQVRJT05fRkFJTEVEXCJdID0gXCJjdXN0b21lckNyZWF0aW9uRmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlBBWU1FTlRfRkFJTEVEXCJdID0gXCJwYXltZW50RmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlRSQU5TQUNUSU9OX0ZBSUxFRFwiXSA9IFwidHJhbnNhY3Rpb25GYWlsZWRcIjtcbiAgcmV0dXJuIFBheUluRmFpbGVkMjtcbn0pKFBheUluRmFpbGVkIHx8IHt9KTtcbnZhciBQYXlJblN0YXRlID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5TdGF0ZTIpID0+IHtcbiAgUGF5SW5TdGF0ZTJbXCJJRExFXCJdID0gXCJpZGxlXCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19CQUxBTkNFXCJdID0gXCJjb25maXJtaW5nQmFsYW5jZVwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfQVVUSE9SSVpBVElPTlwiXSA9IFwiY29uZmlybWluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJVUERBVElOR19BVVRIT1JJWkFUSU9OXCJdID0gXCJ1cGRhdGluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJTSUdOSU5HX01FU1NBR0VcIl0gPSBcInNpZ25pbmdNZXNzYWdlXCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfQ1VTVE9NRVJcIl0gPSBcImNyZWF0aW5nQ3VzdG9tZXJcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDUkVBVElOR19QQVlNRU5UX01FVEhPRFwiXSA9IFwiY3JlYXRpbmdQYXltZW50TWV0aG9kXCI7XG4gIFBheUluU3RhdGUyW1wiUFJPQ0VTU0lOR19QQVlNRU5UXCJdID0gXCJwcm9jZXNzaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX1BBWU1FTlRcIl0gPSBcImNyZWF0aW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfUEFZTUVOVFwiXSA9IFwiY29uZmlybWluZ1BheW1lbnRcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT01QTEVURVwiXSA9IFwiY29tcGxldGVcIjtcbiAgUGF5SW5TdGF0ZTJbXCJBVVRIT1JJWkVEXCJdID0gXCJhdXRob3JpemVkXCI7XG4gIHJldHVybiBQYXlJblN0YXRlMjtcbn0pKFBheUluU3RhdGUgfHwge30pO1xuXG5jb25zdCBMT09QX0xPQURJTkcgPSB7XG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBjb25maWc6IG51bGwsXG4gIHdpZGdldDogbnVsbFxufTtcbnoub2JqZWN0KHtcbiAgW1wibG9vcEZpcnN0TmFtZVwiXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxvb3BMYXN0TmFtZVwiXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxvb3BFbWFpbFwiXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIFtcImxvb3BGaXJzdE5hbWVcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsb29wTGFzdE5hbWVcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsb29wRW1haWxcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbRmllbGROYW1lLlBST01PVElPTl9DT0RFXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuXG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJwYXlwYWxcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7IGNsaWVudF9pZDogei5zdHJpbmcoKSB9KSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG5cbnoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHouc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxuei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnVuaW9uKFt6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuXG5jb25zdCBQUl9MT0FESU5HID0ge1xuICBpc0xvYWRpbmc6IHRydWUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYHN0YXJ0RmxvdyB0cmlnZ2VyZWQgd2hpbGUgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIG5vdCByZWFkeS4gXG4gICAgICBZb3UgY2FuIGNoZWNrIHRoZSBcIi5pc0xvYWRpbmdcIiBwYXJhbSB0byBrbm93IHdoZW4gYSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbG9hZGluZywgXG4gICAgICBhbmQgXCIuaXNBdmFpbGFibGVcIiB0byBrbm93IGlmIGEgcGF5bWVudCByZXF1ZXN0IGlzIGF2YWlsYWJsZS5gXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6LmZ1bmN0aW9uKCkub3B0aW9uYWwoKTtcbmNvbnN0IFpvZEZvcm1DYWxsYmFja3MgPSB6Lm9iamVjdCh7XG4gIG9uRm9jdXM6IE9wdGlvbmFsRm4sXG4gIG9uQmx1cjogT3B0aW9uYWxGbixcbiAgb25DaGFuZ2U6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZDogT3B0aW9uYWxGbixcbiAgb25Mb2FkRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25DaGVja291dEVycm9yOiBPcHRpb25hbEZuLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogT3B0aW9uYWxGblxufSk7XG5jbGFzcyBGb3JtQ2FsbGJhY2tzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogU2V0cyBBTEwgZm9ybSBjYWxsYmFja3MuIE5vdGUgdGhhdCBhbGwgb2xkIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyYXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJhd0NhbGxiYWNrcykuZm9yRWFjaCgoW2tleSwgcmF3Q2FsbGJhY2tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVDYWxsYmFjayA9IG1ha2VDYWxsYmFja1NhZmUoa2V5LCByYXdDYWxsYmFjayA/PyBGb3JtQ2FsbGJhY2tzLk5PT1AsIGVycl9fKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG52YXIgU3VibWl0TWV0aG9kcyA9IC8qIEBfX1BVUkVfXyAqLyAoKFN1Ym1pdE1ldGhvZHMyKSA9PiB7XG4gIFN1Ym1pdE1ldGhvZHMyW1wicG9ja3l0UGF5cGFsXCJdID0gXCJwb2NreXQtcGF5cGFsXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4R29vZ2xlUGF5XCJdID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEFwcGxlUGF5XCJdID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0R29vZ2xlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEFwcGxlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5Hb29nbGVQYXlcIl0gPSBcImFkeWVuLWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZHllbkFwcGxlUGF5XCJdID0gXCJhZHllbi1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJsb29wQ3J5cHRvXCJdID0gXCJsb29wLWNyeXB0b1wiO1xuICBTdWJtaXRNZXRob2RzMltcInBheXBhbFwiXSA9IFwicGF5cGFsXCI7XG4gIHJldHVybiBTdWJtaXRNZXRob2RzMjtcbn0pKFN1Ym1pdE1ldGhvZHMgfHwge30pO1xuei5uYXRpdmVFbnVtKFN1Ym1pdE1ldGhvZHMpO1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgRWxlbWVudHNDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGZvcm1JZDogXCJcIixcbiAgZm9ybUhlaWdodDogXCJcIixcbiAgcmVmZXJyZXI6IHZvaWQgMCxcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdm9pZCAwLFxuICByZWdpc3RlcklmcmFtZTogKCkgPT4ge1xuICB9LFxuICBiYXNlVXJsOiBcIlwiXG59KTtcblxuY29uc3QgdXNlT3BlblBheUVsZW1lbnRzID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChFbGVtZW50c0NvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VPcGVuUGF5RWxlbWVudHMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBPcGVuUGF5RWxlbWVudHNQcm92aWRlclwiKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG5cbmNvbnN0IEVsZW1lbnRGcmFtZSA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGVsZW1lbnRUeXBlLCBzdHlsZXMgfSA9IHByb3BzO1xuICBjb25zdCB7IGZvcm1JZCwgcmVmZXJyZXIsIGZvcm1IZWlnaHQsIGNoZWNrb3V0U2VjdXJlVG9rZW4sIHJlZ2lzdGVySWZyYW1lLCBiYXNlVXJsIH0gPSB1c2VPcGVuUGF5RWxlbWVudHMoKTtcbiAgY29uc3Qgc3ViUGF0aCA9IGVsZW1lbnRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IFtoYXNMb2FkZWQsIHNldEhhc0xvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlmcmFtZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZWxlbWVudFN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzdHlsZXMpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhzdHlsZXMpO1xuICB9LCBbc3R5bGVzXSk7XG4gIGNvbnN0IGZyYW1lU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGhlaWdodDogZm9ybUhlaWdodFxuICAgIH07XG4gIH0sIFtmb3JtSGVpZ2h0XSk7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuIHx8ICFyZWZlcnJlcikgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHJlZmVycmVyKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic3R5bGVzXCIsIGVsZW1lbnRTdHlsZSk7XG4gICAgcGFyYW1zLmFwcGVuZChcImZvcm1JZFwiLCBmb3JtSWQpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCBjaGVja291dFNlY3VyZVRva2VuKTtcbiAgICByZXR1cm4gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0sIFtlbGVtZW50U3R5bGUsIGZvcm1JZCwgcmVmZXJyZXIsIGNoZWNrb3V0U2VjdXJlVG9rZW5dKTtcbiAgdXNlRWZmZWN0KCgpID0+IHNldEhhc0xvYWRlZCh0cnVlKSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaWZyYW1lUmVmLmN1cnJlbnQgfHwgIWhhc0xvYWRlZCkgcmV0dXJuO1xuICAgIHJlZ2lzdGVySWZyYW1lKGVsZW1lbnRUeXBlLCBpZnJhbWVSZWYuY3VycmVudCk7XG4gIH0sIFtoYXNMb2FkZWRdKTtcbiAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltmb3JtXSBDYW5ub3QgcmVuZGVyIHBhcnRpYWxseSBpbml0aWFsaXplZCBmcmFtZVwiKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7fSk7XG4gIH1cbiAgY29uc3QgdXJsID0gbmV3IFVSTChgL2FwcC92MS8ke3N1YlBhdGh9LWVsZW1lbnQvYCwgYmFzZVVybCk7XG4gIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZztcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgXCJpZnJhbWVcIixcbiAgICB7XG4gICAgICBpZDogYG9qcy0ke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgbmFtZTogYCR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBjbGFzc05hbWU6IFwib2pzLWlmcmFtZVwiLFxuICAgICAgc3JjOiB1cmwudG9TdHJpbmcoKSxcbiAgICAgIHN0eWxlOiBmcmFtZVN0eWxlLFxuICAgICAgcmVmOiBpZnJhbWVSZWZcbiAgICB9XG4gICk7XG59O1xuXG5jb25zdCBDYXJkRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRCB9KTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFeHBpcnlFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWSB9KTtcbn07XG5cbmNvbnN0IENhcmROdW1iZXJFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX05VTUJFUiB9KTtcbn07XG5cbmZ1bmN0aW9uIFFuKGUsIHQpIHtcbiAgdmFyIHIgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHIgPyByKGUsIHQpIDogZS5fX3Byb3RvX18gPSB0O1xufVxuZnVuY3Rpb24gWG4oZSwgdCkge1xuICB0ID09PSB2b2lkIDAgJiYgKHQgPSBlLmNvbnN0cnVjdG9yKTtcbiAgdmFyIHIgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgciAmJiByKGUsIHQpO1xufVxudmFyIGVvID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICB2YXIgZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByZXR1cm4gZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKG8sIGkpIHtcbiAgICAgIG8uX19wcm90b19fID0gaTtcbiAgICB9IHx8IGZ1bmN0aW9uKG8sIGkpIHtcbiAgICAgIGZvciAodmFyIHMgaW4gaSlcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksIHMpICYmIChvW3NdID0gaVtzXSk7XG4gICAgfSwgZShyLCBuKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBpZiAodHlwZW9mIHIgIT0gXCJmdW5jdGlvblwiICYmIHIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICBlKHQsIHIpO1xuICAgIGZ1bmN0aW9uIG4oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gdDtcbiAgICB9XG4gICAgdC5wcm90b3R5cGUgPSByID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShyKSA6IChuLnByb3RvdHlwZSA9IHIucHJvdG90eXBlLCBuZXcgbigpKTtcbiAgfTtcbn0oKSwgdG8gPSBmdW5jdGlvbihlKSB7XG4gIGVvKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICB2YXIgbyA9IHRoaXMuY29uc3RydWN0b3IsIGkgPSBlLmNhbGwodGhpcywgciwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogby5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfSksIFFuKGksIG8ucHJvdG90eXBlKSwgWG4oaSksIGk7XG4gIH1cbiAgcmV0dXJuIHQ7XG59KEVycm9yKTtcbmNvbnN0IE8gPSB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pLCBBID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKSwgTiA9IChlKSA9PiB6Lm51bGxhYmxlKGUub3B0aW9uYWwoKSk7XG52YXIgZiA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkZJUlNUX05BTUUgPSBcImZpcnN0TmFtZVwiLCBlLkxBU1RfTkFNRSA9IFwibGFzdE5hbWVcIiwgZS5FTUFJTCA9IFwiZW1haWxcIiwgZS5aSVBfQ09ERSA9IFwiemlwQ29kZVwiLCBlLkNJVFkgPSBcImNpdHlcIiwgZS5TVEFURSA9IFwic3RhdGVcIiwgZS5DT1VOVFJZID0gXCJjb3VudHJ5XCIsIGUuQUREUkVTUyA9IFwiYWRkcmVzc1wiLCBlLlBIT05FID0gXCJwaG9uZVwiLCBlLlBST01PVElPTl9DT0RFID0gXCJwcm9tb3Rpb25Db2RlXCIsIGUpKShmIHx8IHt9KTtcbmNvbnN0IEZyID0gei5uYXRpdmVFbnVtKGYpO1xudmFyIE5yID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuQ0FSRF9OVU1CRVIgPSBcImNhcmROdW1iZXJcIiwgZS5DQVJEX0VYUElSWSA9IFwiY2FyZEV4cGlyeVwiLCBlLkNBUkRfQ1ZDID0gXCJjYXJkQ3ZjXCIsIGUpKShOciB8fCB7fSk7XG5jb25zdCBNciA9IHoubmF0aXZlRW51bShOciksIERyID0gei51bmlvbihbRnIsIE1yXSk7XG52YXIgY2UgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5DQVJEID0gXCJjYXJkXCIsIGUuQ0FSRF9OVU1CRVIgPSBcImNhcmQtbnVtYmVyXCIsIGUuQ0FSRF9FWFBJUlkgPSBcImNhcmQtZXhwaXJ5XCIsIGUuQ0FSRF9DVkMgPSBcImNhcmQtY3ZjXCIsIGUuQ0RFX0JSSURHRSA9IFwiY2RlLWJyaWRnZVwiLCBlKSkoY2UgfHwge30pO1xuY29uc3Qgcm8gPSB6Lm5hdGl2ZUVudW0oY2UpLCBfdCA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBOKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogTih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pLCBubyA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBBLFxuICBleHBpcnk6IEEsXG4gIGN2YzogQVxufSk7XG56Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogQSxcbiAgY29sb3I6IEEsXG4gIGZvbnRGYW1pbHk6IEEsXG4gIGZvbnRTaXplOiBBLFxuICBmb250V2VpZ2h0OiBBLFxuICBtYXJnaW46IEEsXG4gIHBhZGRpbmc6IEEsXG4gIGxldHRlclNwYWNpbmc6IEEsXG4gIGxpbmVIZWlnaHQ6IEEsXG4gIGhpZGVJY29uOiBBXG59KTtcbmNvbnN0IG5lID0gei5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pLCBvbyA9IG5lLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pLCBhbyA9IHoub2JqZWN0KHsgdHlwZTogb28gfSksIGlvID0gbmUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pLCBzbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogaW8sXG4gIGVsZW1lbnRUeXBlOiBNcixcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIG9iZnVzY2F0ZWRWYWx1ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgY28gPSBuZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKSwgbG8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IGNvLFxuICBtZXNzYWdlOiBPLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgdW8gPSBuZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pLCBwbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogdW8sXG4gIGVsZW1lbnRUeXBlOiBEcixcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KSwgbW8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChuZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogT1xufSksIGZvID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwobmUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IE8sXG4gIHRvdGFsQW1vdW50QXRvbXM6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBBLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6LmFycmF5KF90KVxufSksIHlvID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwobmUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6Lm9wdGlvbmFsKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSksIF9vID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwobmUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6LnN0cmluZygpXG59KSwgdHQgPSB6Lm9iamVjdCh7XG4gIGZpcnN0TmFtZTogTyxcbiAgbGFzdE5hbWU6IE8sXG4gIGVtYWlsOiBPLFxuICB6aXBDb2RlOiBPLFxuICBjb3VudHJ5OiBPLFxuICBwcm9tb3Rpb25Db2RlOiBBXG59KSwgaG8gPSB6Lm9iamVjdCh7XG4gIGZpcnN0TmFtZTogQSxcbiAgbGFzdE5hbWU6IEEsXG4gIGVtYWlsOiBPLFxuICB6aXBDb2RlOiBPLFxuICBjb3VudHJ5OiBPLFxuICBwcm9tb3Rpb25Db2RlOiBBLFxuICBhZGRyZXNzOiBBLFxuICBjaXR5OiBBLFxuICBzdGF0ZTogQVxufSksIGdvID0gbmUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKSwgd28gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IGdvLFxuICBzZXNzaW9uSWQ6IE8sXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogX3QsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBBLFxuICBwYXltZW50Um91dGVJZDogQVxufSkuZXh0ZW5kKHR0LnNoYXBlKSwgdm8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChuZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHouYm9vbGVhbigpXG59KSwgYm8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChuZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6LnN0cmluZygpXG59KSwgRW8gPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBhbyxcbiAgc28sXG4gIGxvLFxuICBwbyxcbiAgbW8sXG4gIGZvLFxuICB3byxcbiAgdm8sXG4gIGJvLFxuICB5byxcbiAgX29cbl0pLCBQbyA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogRW8sXG4gIG5vbmNlOiBPLFxuICBmb3JtSWQ6IE8sXG4gIGVsZW1lbnRJZDogT1xufSk7XG56Lm9iamVjdCh7XG4gIGFtb3VudEF0b206IHoubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IE9cbn0pO1xuei5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBOKHouc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogTih6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogTih6LnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBOKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBLZSA9IHoub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yc191c2VkOiBOKHouYXJyYXkoei5zdHJpbmcoKSkpXG59KSwgQ28gPSB6Lm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6LnN0cmluZygpLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFNvID0gei5vYmplY3Qoe1xuICBzdWNjZXNzOiB6LmxpdGVyYWwoITEpLFxuICBlcnJvcl90eXBlOiB6LmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHouYXJyYXkoQ28pXG59KSwga28gPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6Lm9iamVjdCh7IHN1Y2Nlc3M6IHoubGl0ZXJhbCghMCkgfSksXG4gIFNvXG5dKTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IF90LFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiB0dCxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IE4oei5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogTih6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IE4oei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogX3QsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IHR0LFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogTih6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IE4oei5zdHJpbmcoKSlcbn0pO1xudmFyIEQgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5TVUNDRVNTID0gXCJzdWNjZXNzXCIsIGUuRkFJTFVSRSA9IFwiZmFpbHVyZVwiLCBlLkNBTkNFTExFRCA9IFwiY2FuY2VsbGVkXCIsIGUpKShEIHx8IHt9KTtcbmNvbnN0IEFvID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuei5vYmplY3Qoe1xuICBocmVmOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBJbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6LnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogei5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogei5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIE9yID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IE4oei5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBOKHouc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBOKHouc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogTih6LnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBOKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSksIFJvID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwoITApLCBocmVmOiB6LnN0cmluZygpIH0pLFxuICB6Lm9iamVjdCh7IHByZXNlbnQ6IHoubGl0ZXJhbCghMSkgfSlcbl0pLCBUbyA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6LmFycmF5KG5vKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IE4oS2UpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IE4oei5hcnJheShPcikpLFxuICBwb3N0X2NoZWNrb3V0X3JlZGlyZWN0X3RvOiBOKHouc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBOKEtlKVxufSksIHcgPSAoZSkgPT4gei5udWxsYWJsZShlLm9wdGlvbmFsKCkpO1xuei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KTtcbmNvbnN0IEZvID0gei5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBMciA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiB3KHoubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogdyh6Lm51bWJlcigpKSxcbiAgY3VycmVuY3k6IHcoei5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6LnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IHcoei5udW1iZXIoKSlcbn0pLCBVciA9IHoub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IHcoei5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiB3KHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiB3KHoubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSksIE5vID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksIE1vID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogdyhObylcbn0pLCBVZSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiB3KHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogdyh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pLCBEbyA9IHoub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHoubnVtYmVyKClcbn0pLCBPbyA9IHoub2JqZWN0KHtcbiAgaWQ6IHcoei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IHcoei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IHcoei5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogei5hcnJheShEbyksXG4gIHRyaWFsX3N0YXJ0OiB3KHouc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IHcoei5zdHJpbmcoKSlcbn0pLCBqciA9IHoub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHoubnVtYmVyKClcbn0pLCBMbyA9IHoub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHouYXJyYXkoanIpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogei5zdHJpbmcoKVxufSksIFVvID0gei5vYmplY3Qoe1xuICBjb3Vwb246IExyXG59KSwgam8gPSB6Lm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkaXNjb3VudHM6IHouYXJyYXkoVW8pLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IHcoei5zdHJpbmcoKSksXG4gIGxpbmVzOiB6LmFycmF5KExvKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHouYXJyYXkoanIpXG59KSwgcnIgPSB6Lm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHouYXJyYXkoT28pLFxuICBpbnZvaWNlczogei5hcnJheShqbyksXG4gIHByb2Nlc3NvcnNfdXNlZDogdyh6LmFycmF5KHouc3RyaW5nKCkpKVxufSksIHhyID0gei5vYmplY3Qoe1xuICBwcmV2aWV3OiBycixcbiAgcHJldmlld19wb3N0X3RyaWFsOiB3KHJyKSxcbiAgY291cG9uczogei5hcnJheShMcilcbn0pLCBuciA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IHcoei5zdHJpbmcoKSksXG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBlbWFpbDogdyh6LnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogei5hcnJheShVciksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IE1vLFxuICBzdWJzX3ByZXZpZXc6IHcoeHIpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHouYXJyYXkoVWUpLFxuICBmaW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3M6IHcoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KSwgJHIgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHoubnVsbGFibGUoei51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKG5yLnNoYXBlKSxcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHouZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogei5zdHJpbmcoKVxuICB9KS5leHRlbmQobnIuc2hhcGUpXG5dKSwgeG8gPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pLCAkbyA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnoudW5pb24oWyRyLCB4bywgJG9dKTtcbnoub2JqZWN0KHtcbiAgbG9nbzogei5zdHJpbmcoKSxcbiAgaWNvbjogei5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogei5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwbV9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogei5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6LnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6LnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KFVyKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHouYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogVWUsXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IHcoei5zdHJpbmcoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IHcoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgVnIgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgVm8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuei5hcnJheShWbyk7XG5jb25zdCBHbyA9IHoub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pLCB6byA9IHoub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KSwgR3IgPSB6Lm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoem8pLFxuICBwcm9tb3Rpb25fY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCkuaW50KClcbn0pLCBxbyA9IHoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB3KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIHBheW1lbnRfcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBVZSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IEdyLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChHby5zaGFwZSkuZXh0ZW5kKHFvLnNoYXBlKTtcbmNvbnN0IHpyID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiB3KHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgZmllbGRzOiBobyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBVZSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogdyh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IHR0LFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogVWUsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG4gIHVzZV91bmlmaWVkX2NjX2Zsb3c6IHcoei5ib29sZWFuKCkpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IEdyLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IHcoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB3KHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IEJvID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjY19wbV9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogdyhLZSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IHcoei5zdHJpbmcoKSlcbn0pO1xuei5yZWNvcmQoei5hbnkoKSk7XG56Lm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IHcoei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogdyh6LnN0cmluZygpKSxcbiAgbGluZTE6IHcoei5zdHJpbmcoKSksXG4gIGxpbmUyOiB3KHouc3RyaW5nKCkpLFxuICBsaW5lMzogdyh6LnN0cmluZygpKSxcbiAgY2l0eTogdyh6LnN0cmluZygpKSxcbiAgc3RhdGU6IHcoei5zdHJpbmcoKSksXG4gIGNvdW50cnk6IHcoei5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiB3KHouc3RyaW5nKCkpLFxuICBlbWFpbDogdyh6LnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogdyh6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiB3KHouc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiB3KHouYm9vbGVhbigpKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICBlbWFpbDogdyh6LnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogdyh6LnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiB3KHouc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IHcoei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IHcoei5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IHcoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgbWVzc2FnZTogei5zdHJpbmcoKVxufSk7XG5jb25zdCBZbyA9IHoub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBVZSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiB3KHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IEhvID0gei5vYmplY3Qoe1xuICBuZXh0X2FjdGlvbl9tZXRhZGF0YTogdyh6LnJlY29yZCh6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBldmVudHM6IHouYXJyYXkoXG4gICAgei5vYmplY3Qoe1xuICAgICAgZXZlbnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICAgIGRldmljZV90b2tlbjogei5zdHJpbmcoKSxcbiAgICAgIHByb3BlcnRpZXM6IHoucmVjb3JkKHouYW55KCkpLm9wdGlvbmFsKCksXG4gICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHoucmVjb3JkKHouYW55KCkpLm9wdGlvbmFsKClcbiAgICB9KVxuICApXG59KTtcbnouYW55KCkub3B0aW9uYWwoKTtcbnoub2JqZWN0KHtcbiAgZGV2aWNlX3Rva2VuOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IEpvID0gei5vYmplY3Qoe30pLCBLbyA9IHoub2JqZWN0KHtcbiAgX3VuaWZpZWRfY2NfYWN0aW9uX25hbWU6IHouc3RyaW5nKCksXG4gIF91bmlmaWVkX2NjX3BjY3NfaWQ6IHouc3RyaW5nKClcbn0pLmNhdGNoYWxsKHouYW55KCkpLCBXbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgbG9jOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBtc2c6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKVxufSksIFpvID0gei5hcnJheShXbyksIFFvID0gei5vYmplY3Qoe1xuICBjb2RlOiB6LnN0cmluZygpLFxuICBtZXNzYWdlOiB6LnN0cmluZygpLFxuICBwYXRoOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KSwgWG8gPSB6LmFycmF5KFFvKSwgZWEgPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIEZ0ID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBlYVt0XSA/PyBlO1xufSwgdGEgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZShlKSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIHJhID0gKGUpID0+IGUubGVuZ3RoID09PSAxID8gRnQoZVswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke2UubWFwKChyKSA9PiBg4oCiICR7RnQoci5tc2cpfWApLmpvaW4oYFxuYCl9YCwgbmEgPSAoZSkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtlLm1hcCgocikgPT4gYC0gJHtyLnBhdGguam9pbihcIi9cIil9OiAke3IubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIFogPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmICh0YShlLm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCB0ID0gSlNPTi5wYXJzZShlLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIFpvLnNhZmVQYXJzZSh0KS5zdWNjZXNzID8gcmEodCkgOiBYby5zYWZlUGFyc2UodCkuc3VjY2VzcyA/IG5hKHQpIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7ZS5tZXNzYWdlfWApLCBlLm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIEZ0KGUubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgZSA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgfSBjYXRjaCAodCkge1xuICAgICAgcmV0dXJuIHQgKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiBlICsgXCJcIjtcbn0sIG9hID0gKGUsIHQsIHIpID0+ICguLi5uKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHQoLi4ubik7XG4gIH0gY2F0Y2ggKG8pIHtcbiAgICByKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtlfSk6YCwgbyk7XG4gICAgcmV0dXJuO1xuICB9XG59LCBhYSA9IChlKSA9PiBlLnJlZHVjZSgodCwgcikgPT4gdCArIHIsIDApLCBxciA9IChlKSA9PiB7XG4gIGUucHJldmVudERlZmF1bHQoKSwgZS5yZXR1cm5WYWx1ZSA9ICEwO1xufSwgaWEgPSAoKSA9PiB7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIHFyKTtcbn0sIHNhID0gKCkgPT4ge1xuICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBxcik7XG59LCBRID0gKGUpID0+IHtcbiAgbGV0IHQgPSAhMTtcbiAgcmV0dXJuIGFzeW5jIChyKSA9PiB7XG4gICAgdmFyIG4sIG87XG4gICAgaWYgKHQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIlNraXBwaW5nIHN1Ym1pc3Npb24gYmVjYXVzZSBpdCBpcyBhbHJlYWR5IGluIHByb2dyZXNzXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0ID0gITA7XG4gICAgdHJ5IHtcbiAgICAgIHIuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24gJiYgaWEoKSwgKG8gPSAobiA9IHIuZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IG8uY2FsbChuKSwgZyhcImNoZWNrb3V0X3N0YXJ0ZWRcIiwge1xuICAgICAgICBjcG06IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGkgPSBhd2FpdCBlKHIpO1xuICAgICAgaWYgKGcoXCJjaGVja291dF9zdWNjZXNzXCIsIHtcbiAgICAgICAgY3BtOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4uaVxuICAgICAgfSksIGlpKCksIGkubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhpLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgICBlbHNlIGlmIChpLm1vZGUgPT09IFwiY2hlY2tvdXRcIilcbiAgICAgICAgci5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3VjY2VzcyhcbiAgICAgICAgICBpLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgICAgaS5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgICBpLnJlc3VsdC5jdXN0b21lcl9pZCxcbiAgICAgICAgICBpLnJlc3VsdC5wcm9jZXNzb3JzX3VzZWQgPz8gW11cbiAgICAgICAgKTtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtpfWApO1xuICAgIH0gY2F0Y2ggKGkpIHtcbiAgICAgIHQgPSAhMTtcbiAgICAgIGNvbnN0IHMgPSBaKGkpLCBjID0gYXdhaXQgcG4oci5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHMpO1xuICAgICAgci5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IocywgYyksIGcoXCJjaGVja291dF9lcnJvclwiLCB7IGNwbTogci5jaGVja291dFBheW1lbnRNZXRob2QsIGVycm9yTWVzc2FnZTogcywgZXJyb3JDb2RlOiBjLCBlcnJvcjogaSB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdCA9ICExLCByLmNvbnRleHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uICYmIHNhKCk7XG4gICAgfVxuICB9O1xufSwgbWUgPSAoZSkgPT4gYXN5bmMgKHQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZSh0KTtcbiAgfSBjYXRjaCAocikge1xuICAgIGNvbnN0IHsgZXJyX186IG4gfSA9IFMoXCJpbml0LWVycm9yLWNhdGNoZXJcIiksIG8gPSBaKHIpLCBpID0gYXdhaXQgcG4odC5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIG8pO1xuICAgIHJldHVybiBuKGksIG8sIHIpLCBnKFwiaW5pdF9mbG93X2Vycm9yXCIsIHsgZXJyb3JNZXNzYWdlOiBvLCBlcnJvckNvZGU6IGksIGVycm9yOiByIH0pLCB7IGlzQXZhaWxhYmxlOiAhMSwgcmVhc29uOiBvLCBlcnJvckNvZGU6IGksIGlzTG9hZGluZzogITEgfTtcbiAgfVxufSwgUyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSAoLi4ubikgPT4ge1xuICAgIHdpbmRvdy5jb25zb2xlLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtlfWApfVx0YCwgLi4ubik7XG4gIH0sIHIgPSAoLi4ubikgPT4ge1xuICAgIHdpbmRvdy5jb25zb2xlLndhcm4oYCR7Y2hhbGsucmVkLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke2V9YCl9XHRgLCAuLi5uKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2c6IHQsXG4gICAgZXJyOiByLFxuICAgIGxvZ19fOiB0LFxuICAgIGVycl9fOiByXG4gIH07XG59O1xudmFyIE50ID0gZnVuY3Rpb24oZSwgdCkge1xuICByZXR1cm4gTnQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihyLCBuKSB7XG4gICAgci5fX3Byb3RvX18gPSBuO1xuICB9IHx8IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICBmb3IgKHZhciBvIGluIG4pIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCBvKSAmJiAocltvXSA9IG5bb10pO1xuICB9LCBOdChlLCB0KTtcbn07XG5mdW5jdGlvbiBfZShlLCB0KSB7XG4gIGlmICh0eXBlb2YgdCAhPSBcImZ1bmN0aW9uXCIgJiYgdCAhPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyh0KSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIE50KGUsIHQpO1xuICBmdW5jdGlvbiByKCkge1xuICAgIHRoaXMuY29uc3RydWN0b3IgPSBlO1xuICB9XG4gIGUucHJvdG90eXBlID0gdCA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUodCkgOiAoci5wcm90b3R5cGUgPSB0LnByb3RvdHlwZSwgbmV3IHIoKSk7XG59XG5mdW5jdGlvbiBjYShlLCB0LCByLCBuKSB7XG4gIGZ1bmN0aW9uIG8oaSkge1xuICAgIHJldHVybiBpIGluc3RhbmNlb2YgciA/IGkgOiBuZXcgcihmdW5jdGlvbihzKSB7XG4gICAgICBzKGkpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXcgKHIgfHwgKHIgPSBQcm9taXNlKSkoZnVuY3Rpb24oaSwgcykge1xuICAgIGZ1bmN0aW9uIGMoZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLm5leHQoZCkpO1xuICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICBzKHkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBsKGQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUobi50aHJvdyhkKSk7XG4gICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgIHMoeSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHUoZCkge1xuICAgICAgZC5kb25lID8gaShkLnZhbHVlKSA6IG8oZC52YWx1ZSkudGhlbihjLCBsKTtcbiAgICB9XG4gICAgdSgobiA9IG4uYXBwbHkoZSwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEJyKGUsIHQpIHtcbiAgdmFyIHIgPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHtcbiAgICBpZiAoaVswXSAmIDEpIHRocm93IGlbMV07XG4gICAgcmV0dXJuIGlbMV07XG4gIH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIG4sIG8sIGksIHMgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBzLm5leHQgPSBjKDApLCBzLnRocm93ID0gYygxKSwgcy5yZXR1cm4gPSBjKDIpLCB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiAoc1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBzO1xuICBmdW5jdGlvbiBjKHUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZCkge1xuICAgICAgcmV0dXJuIGwoW3UsIGRdKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGwodSkge1xuICAgIGlmIChuKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICBmb3IgKDsgcyAmJiAocyA9IDAsIHVbMF0gJiYgKHIgPSAwKSksIHI7ICkgdHJ5IHtcbiAgICAgIGlmIChuID0gMSwgbyAmJiAoaSA9IHVbMF0gJiAyID8gby5yZXR1cm4gOiB1WzBdID8gby50aHJvdyB8fCAoKGkgPSBvLnJldHVybikgJiYgaS5jYWxsKG8pLCAwKSA6IG8ubmV4dCkgJiYgIShpID0gaS5jYWxsKG8sIHVbMV0pKS5kb25lKSByZXR1cm4gaTtcbiAgICAgIHN3aXRjaCAobyA9IDAsIGkgJiYgKHUgPSBbdVswXSAmIDIsIGkudmFsdWVdKSwgdVswXSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpID0gdTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiByLmxhYmVsKyssIHsgdmFsdWU6IHVbMV0sIGRvbmU6ICExIH07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByLmxhYmVsKyssIG8gPSB1WzFdLCB1ID0gWzBdO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdSA9IHIub3BzLnBvcCgpLCByLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKGkgPSByLnRyeXMsICEoaSA9IGkubGVuZ3RoID4gMCAmJiBpW2kubGVuZ3RoIC0gMV0pICYmICh1WzBdID09PSA2IHx8IHVbMF0gPT09IDIpKSB7XG4gICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gMyAmJiAoIWkgfHwgdVsxXSA+IGlbMF0gJiYgdVsxXSA8IGlbM10pKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gdVsxXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gNiAmJiByLmxhYmVsIDwgaVsxXSkge1xuICAgICAgICAgICAgci5sYWJlbCA9IGlbMV0sIGkgPSB1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpICYmIHIubGFiZWwgPCBpWzJdKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gaVsyXSwgci5vcHMucHVzaCh1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpWzJdICYmIHIub3BzLnBvcCgpLCByLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB1ID0gdC5jYWxsKGUsIHIpO1xuICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgIHUgPSBbNiwgZF0sIG8gPSAwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBuID0gaSA9IDA7XG4gICAgfVxuICAgIGlmICh1WzBdICYgNSkgdGhyb3cgdVsxXTtcbiAgICByZXR1cm4geyB2YWx1ZTogdVswXSA/IHVbMV0gOiB2b2lkIDAsIGRvbmU6ICEwIH07XG4gIH1cbn1cbmZ1bmN0aW9uIE1lKGUpIHtcbiAgdmFyIHQgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIHIgPSB0ICYmIGVbdF0sIG4gPSAwO1xuICBpZiAocikgcmV0dXJuIHIuY2FsbChlKTtcbiAgaWYgKGUgJiYgdHlwZW9mIGUubGVuZ3RoID09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZSAmJiBuID49IGUubGVuZ3RoICYmIChlID0gdm9pZCAwKSwgeyB2YWx1ZTogZSAmJiBlW24rK10sIGRvbmU6ICFlIH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHQgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5mdW5jdGlvbiBwdChlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgbywgaSA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEobyA9IG4ubmV4dCgpKS5kb25lOyApIGkucHVzaChvLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIHMgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG8gJiYgIW8uZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTtcbn1cbmZ1bmN0aW9uIG10KGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBvID0gdC5sZW5ndGgsIGk7IG4gPCBvOyBuKyspXG4gICAgKGkgfHwgIShuIGluIHQpKSAmJiAoaSB8fCAoaSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgaVtuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQoaSB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59XG5mdW5jdGlvbiBGZShlKSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgRmUgPyAodGhpcy52ID0gZSwgdGhpcykgOiBuZXcgRmUoZSk7XG59XG5mdW5jdGlvbiBsYShlLCB0LCByKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBuID0gci5hcHBseShlLCB0IHx8IFtdKSwgbywgaSA9IFtdO1xuICByZXR1cm4gbyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIGMoXCJuZXh0XCIpLCBjKFwidGhyb3dcIiksIGMoXCJyZXR1cm5cIiwgcyksIG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIG87XG4gIGZ1bmN0aW9uIHMobSkge1xuICAgIHJldHVybiBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKF8pLnRoZW4obSwgeSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBjKG0sIF8pIHtcbiAgICBuW21dICYmIChvW21dID0gZnVuY3Rpb24oaCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHYsIGIpIHtcbiAgICAgICAgaS5wdXNoKFttLCBoLCB2LCBiXSkgPiAxIHx8IGwobSwgaCk7XG4gICAgICB9KTtcbiAgICB9LCBfICYmIChvW21dID0gXyhvW21dKSkpO1xuICB9XG4gIGZ1bmN0aW9uIGwobSwgXykge1xuICAgIHRyeSB7XG4gICAgICB1KG5bbV0oXykpO1xuICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgIHAoaVswXVszXSwgaCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHUobSkge1xuICAgIG0udmFsdWUgaW5zdGFuY2VvZiBGZSA/IFByb21pc2UucmVzb2x2ZShtLnZhbHVlLnYpLnRoZW4oZCwgeSkgOiBwKGlbMF1bMl0sIG0pO1xuICB9XG4gIGZ1bmN0aW9uIGQobSkge1xuICAgIGwoXCJuZXh0XCIsIG0pO1xuICB9XG4gIGZ1bmN0aW9uIHkobSkge1xuICAgIGwoXCJ0aHJvd1wiLCBtKTtcbiAgfVxuICBmdW5jdGlvbiBwKG0sIF8pIHtcbiAgICBtKF8pLCBpLnNoaWZ0KCksIGkubGVuZ3RoICYmIGwoaVswXVswXSwgaVswXVsxXSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHVhKGUpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIHQgPSBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgcjtcbiAgcmV0dXJuIHQgPyB0LmNhbGwoZSkgOiAoZSA9IHR5cGVvZiBNZSA9PSBcImZ1bmN0aW9uXCIgPyBNZShlKSA6IGVbU3ltYm9sLml0ZXJhdG9yXSgpLCByID0ge30sIG4oXCJuZXh0XCIpLCBuKFwidGhyb3dcIiksIG4oXCJyZXR1cm5cIiksIHJbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIHIpO1xuICBmdW5jdGlvbiBuKGkpIHtcbiAgICByW2ldID0gZVtpXSAmJiBmdW5jdGlvbihzKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYywgbCkge1xuICAgICAgICBzID0gZVtpXShzKSwgbyhjLCBsLCBzLmRvbmUsIHMudmFsdWUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBvKGksIHMsIGMsIGwpIHtcbiAgICBQcm9taXNlLnJlc29sdmUobCkudGhlbihmdW5jdGlvbih1KSB7XG4gICAgICBpKHsgdmFsdWU6IHUsIGRvbmU6IGMgfSk7XG4gICAgfSwgcyk7XG4gIH1cbn1cbmZ1bmN0aW9uIHgoZSkge1xuICByZXR1cm4gdHlwZW9mIGUgPT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gaHQoZSkge1xuICB2YXIgdCA9IGZ1bmN0aW9uKG4pIHtcbiAgICBFcnJvci5jYWxsKG4pLCBuLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gIH0sIHIgPSBlKHQpO1xuICByZXR1cm4gci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksIHIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gciwgcjtcbn1cbnZhciBQdCA9IGh0KGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHIpIHtcbiAgICBlKHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSByID8gci5sZW5ndGggKyBgIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG5gICsgci5tYXAoZnVuY3Rpb24obiwgbykge1xuICAgICAgcmV0dXJuIG8gKyAxICsgXCIpIFwiICsgbi50b1N0cmluZygpO1xuICAgIH0pLmpvaW4oYFxuICBgKSA6IFwiXCIsIHRoaXMubmFtZSA9IFwiVW5zdWJzY3JpcHRpb25FcnJvclwiLCB0aGlzLmVycm9ycyA9IHI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIGZ0KGUsIHQpIHtcbiAgaWYgKGUpIHtcbiAgICB2YXIgciA9IGUuaW5kZXhPZih0KTtcbiAgICAwIDw9IHIgJiYgZS5zcGxpY2UociwgMSk7XG4gIH1cbn1cbnZhciBydCA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKHQpIHtcbiAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IHQsIHRoaXMuY2xvc2VkID0gITEsIHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0LCByLCBuLCBvLCBpO1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VkID0gITA7XG4gICAgICB2YXIgcyA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgIGlmIChzKVxuICAgICAgICBpZiAodGhpcy5fcGFyZW50YWdlID0gbnVsbCwgQXJyYXkuaXNBcnJheShzKSlcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgYyA9IE1lKHMpLCBsID0gYy5uZXh0KCk7ICFsLmRvbmU7IGwgPSBjLm5leHQoKSkge1xuICAgICAgICAgICAgICB2YXIgdSA9IGwudmFsdWU7XG4gICAgICAgICAgICAgIHUucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICAgIHQgPSB7IGVycm9yOiBoIH07XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGwgJiYgIWwuZG9uZSAmJiAociA9IGMucmV0dXJuKSAmJiByLmNhbGwoYyk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICBpZiAodCkgdGhyb3cgdC5lcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBzLnJlbW92ZSh0aGlzKTtcbiAgICAgIHZhciBkID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICBpZiAoeChkKSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkKCk7XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICBpID0gaCBpbnN0YW5jZW9mIFB0ID8gaC5lcnJvcnMgOiBbaF07XG4gICAgICAgIH1cbiAgICAgIHZhciB5ID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgIGlmICh5KSB7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIHAgPSBNZSh5KSwgbSA9IHAubmV4dCgpOyAhbS5kb25lOyBtID0gcC5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBfID0gbS52YWx1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIG9yKF8pO1xuICAgICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgICBpID0gaSA/PyBbXSwgaCBpbnN0YW5jZW9mIFB0ID8gaSA9IG10KG10KFtdLCBwdChpKSksIHB0KGguZXJyb3JzKSkgOiBpLnB1c2goaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgbiA9IHsgZXJyb3I6IGggfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbSAmJiAhbS5kb25lICYmIChvID0gcC5yZXR1cm4pICYmIG8uY2FsbChwKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKG4pIHRocm93IG4uZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaSlcbiAgICAgICAgdGhyb3cgbmV3IFB0KGkpO1xuICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByO1xuICAgIGlmICh0ICYmIHQgIT09IHRoaXMpXG4gICAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICAgIG9yKHQpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmICh0IGluc3RhbmNlb2YgZSkge1xuICAgICAgICAgIGlmICh0LmNsb3NlZCB8fCB0Ll9oYXNQYXJlbnQodGhpcykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgdC5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKHIgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiByICE9PSB2b2lkIDAgPyByIDogW10pLnB1c2godCk7XG4gICAgICB9XG4gIH0sIGUucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgcmV0dXJuIHIgPT09IHQgfHwgQXJyYXkuaXNBcnJheShyKSAmJiByLmluY2x1ZGVzKHQpO1xuICB9LCBlLnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkocikgPyAoci5wdXNoKHQpLCByKSA6IHIgPyBbciwgdF0gOiB0O1xuICB9LCBlLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHIgPT09IHQgPyB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsIDogQXJyYXkuaXNBcnJheShyKSAmJiBmdChyLCB0KTtcbiAgfSwgZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5fZmluYWxpemVycztcbiAgICByICYmIGZ0KHIsIHQpLCB0IGluc3RhbmNlb2YgZSAmJiB0Ll9yZW1vdmVQYXJlbnQodGhpcyk7XG4gIH0sIGUuRU1QVFkgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IG5ldyBlKCk7XG4gICAgcmV0dXJuIHQuY2xvc2VkID0gITAsIHQ7XG4gIH0oKSwgZTtcbn0oKSwgWXIgPSBydC5FTVBUWTtcbmZ1bmN0aW9uIEhyKGUpIHtcbiAgcmV0dXJuIGUgaW5zdGFuY2VvZiBydCB8fCBlICYmIFwiY2xvc2VkXCIgaW4gZSAmJiB4KGUucmVtb3ZlKSAmJiB4KGUuYWRkKSAmJiB4KGUudW5zdWJzY3JpYmUpO1xufVxuZnVuY3Rpb24gb3IoZSkge1xuICB4KGUpID8gZSgpIDogZS51bnN1YnNjcmliZSgpO1xufVxudmFyIEpyID0ge1xuICBvblVuaGFuZGxlZEVycm9yOiBudWxsLFxuICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gIFByb21pc2U6IHZvaWQgMCxcbiAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogITEsXG4gIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogITFcbn0sIEtyID0ge1xuICBzZXRUaW1lb3V0OiBmdW5jdGlvbihlLCB0KSB7XG4gICAgZm9yICh2YXIgciA9IFtdLCBuID0gMjsgbiA8IGFyZ3VtZW50cy5sZW5ndGg7IG4rKylcbiAgICAgIHJbbiAtIDJdID0gYXJndW1lbnRzW25dO1xuICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgbXQoW2UsIHRdLCBwdChyKSkpO1xuICB9LFxuICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gKGNsZWFyVGltZW91dCkoZSk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn07XG5mdW5jdGlvbiBXcihlKSB7XG4gIEtyLnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgZTtcbiAgfSk7XG59XG5mdW5jdGlvbiBhcigpIHtcbn1cbmZ1bmN0aW9uIGx0KGUpIHtcbiAgZSgpO1xufVxudmFyIHh0ID0gZnVuY3Rpb24oZSkge1xuICBfZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyKSB7XG4gICAgdmFyIG4gPSBlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gbi5pc1N0b3BwZWQgPSAhMSwgciA/IChuLmRlc3RpbmF0aW9uID0gciwgSHIocikgJiYgci5hZGQobikpIDogbi5kZXN0aW5hdGlvbiA9IGZhLCBuO1xuICB9XG4gIHJldHVybiB0LmNyZWF0ZSA9IGZ1bmN0aW9uKHIsIG4sIG8pIHtcbiAgICByZXR1cm4gbmV3IE10KHIsIG4sIG8pO1xuICB9LCB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8IHRoaXMuX25leHQocik7XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0aGlzLl9lcnJvcihyKSk7XG4gIH0sIHQucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2NvbXBsZXRlKCkpO1xuICB9LCB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY2xvc2VkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbCk7XG4gIH0sIHQucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChyKTtcbiAgfSwgdC5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCB0LnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCB0O1xufShydCksIGRhID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBDdChlLCB0KSB7XG4gIHJldHVybiBkYS5jYWxsKGUsIHQpO1xufVxudmFyIHBhID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUodCkge1xuICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gdDtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChyLm5leHQpXG4gICAgICB0cnkge1xuICAgICAgICByLm5leHQodCk7XG4gICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgIGl0KG4pO1xuICAgICAgfVxuICB9LCBlLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChyLmVycm9yKVxuICAgICAgdHJ5IHtcbiAgICAgICAgci5lcnJvcih0KTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgaXQobik7XG4gICAgICB9XG4gICAgZWxzZVxuICAgICAgaXQodCk7XG4gIH0sIGUucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAodC5jb21wbGV0ZSlcbiAgICAgIHRyeSB7XG4gICAgICAgIHQuY29tcGxldGUoKTtcbiAgICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgICAgaXQocik7XG4gICAgICB9XG4gIH0sIGU7XG59KCksIE10ID0gZnVuY3Rpb24oZSkge1xuICBfZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuLCBvKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodGhpcykgfHwgdGhpcywgcztcbiAgICBpZiAoeChyKSB8fCAhcilcbiAgICAgIHMgPSB7XG4gICAgICAgIG5leHQ6IHIgPz8gdm9pZCAwLFxuICAgICAgICBlcnJvcjogbiA/PyB2b2lkIDAsXG4gICAgICAgIGNvbXBsZXRlOiBvID8/IHZvaWQgMFxuICAgICAgfTtcbiAgICBlbHNlIHtcbiAgICAgIHZhciBjO1xuICAgICAgaSAmJiBKci51c2VEZXByZWNhdGVkTmV4dENvbnRleHQgPyAoYyA9IE9iamVjdC5jcmVhdGUociksIGMudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGkudW5zdWJzY3JpYmUoKTtcbiAgICAgIH0sIHMgPSB7XG4gICAgICAgIG5leHQ6IHIubmV4dCAmJiBDdChyLm5leHQsIGMpLFxuICAgICAgICBlcnJvcjogci5lcnJvciAmJiBDdChyLmVycm9yLCBjKSxcbiAgICAgICAgY29tcGxldGU6IHIuY29tcGxldGUgJiYgQ3Qoci5jb21wbGV0ZSwgYylcbiAgICAgIH0pIDogcyA9IHI7XG4gICAgfVxuICAgIHJldHVybiBpLmRlc3RpbmF0aW9uID0gbmV3IHBhKHMpLCBpO1xuICB9XG4gIHJldHVybiB0O1xufSh4dCk7XG5mdW5jdGlvbiBpdChlKSB7XG4gIFdyKGUpO1xufVxuZnVuY3Rpb24gbWEoZSkge1xuICB0aHJvdyBlO1xufVxudmFyIGZhID0ge1xuICBjbG9zZWQ6ICEwLFxuICBuZXh0OiBhcixcbiAgZXJyb3I6IG1hLFxuICBjb21wbGV0ZTogYXJcbn0sICR0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wub2JzZXJ2YWJsZSB8fCBcIkBAb2JzZXJ2YWJsZVwiO1xufSgpO1xuZnVuY3Rpb24geWEoZSkge1xuICByZXR1cm4gZTtcbn1cbmZ1bmN0aW9uIF9hKGUpIHtcbiAgcmV0dXJuIGUubGVuZ3RoID09PSAwID8geWEgOiBlLmxlbmd0aCA9PT0gMSA/IGVbMF0gOiBmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKG4sIG8pIHtcbiAgICAgIHJldHVybiBvKG4pO1xuICAgIH0sIHIpO1xuICB9O1xufVxudmFyIHBlID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUodCkge1xuICAgIHQgJiYgKHRoaXMuX3N1YnNjcmliZSA9IHQpO1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gbmV3IGUoKTtcbiAgICByZXR1cm4gci5zb3VyY2UgPSB0aGlzLCByLm9wZXJhdG9yID0gdCwgcjtcbiAgfSwgZS5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgIHZhciBvID0gdGhpcywgaSA9IGdhKHQpID8gdCA6IG5ldyBNdCh0LCByLCBuKTtcbiAgICByZXR1cm4gbHQoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcyA9IG8sIGMgPSBzLm9wZXJhdG9yLCBsID0gcy5zb3VyY2U7XG4gICAgICBpLmFkZChjID8gYy5jYWxsKGksIGwpIDogbCA/IG8uX3N1YnNjcmliZShpKSA6IG8uX3RyeVN1YnNjcmliZShpKSk7XG4gICAgfSksIGk7XG4gIH0sIGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbih0KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUodCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgdC5lcnJvcihyKTtcbiAgICB9XG4gIH0sIGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbih0LCByKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIHJldHVybiByID0gaXIociksIG5ldyByKGZ1bmN0aW9uKG8sIGkpIHtcbiAgICAgIHZhciBzID0gbmV3IE10KHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24oYykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0KGMpO1xuICAgICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICAgIGkobCksIHMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBpLFxuICAgICAgICBjb21wbGV0ZTogb1xuICAgICAgfSk7XG4gICAgICBuLnN1YnNjcmliZShzKTtcbiAgICB9KTtcbiAgfSwgZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgcjtcbiAgICByZXR1cm4gKHIgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogci5zdWJzY3JpYmUodCk7XG4gIH0sIGUucHJvdG90eXBlWyR0XSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgcmV0dXJuIF9hKHQpKHRoaXMpO1xuICB9LCBlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIHJldHVybiB0ID0gaXIodCksIG5ldyB0KGZ1bmN0aW9uKG4sIG8pIHtcbiAgICAgIHZhciBpO1xuICAgICAgci5zdWJzY3JpYmUoZnVuY3Rpb24ocykge1xuICAgICAgICByZXR1cm4gaSA9IHM7XG4gICAgICB9LCBmdW5jdGlvbihzKSB7XG4gICAgICAgIHJldHVybiBvKHMpO1xuICAgICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuKGkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sIGUuY3JlYXRlID0gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBuZXcgZSh0KTtcbiAgfSwgZTtcbn0oKTtcbmZ1bmN0aW9uIGlyKGUpIHtcbiAgdmFyIHQ7XG4gIHJldHVybiAodCA9IGUgPz8gSnIuUHJvbWlzZSkgIT09IG51bGwgJiYgdCAhPT0gdm9pZCAwID8gdCA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBoYShlKSB7XG4gIHJldHVybiBlICYmIHgoZS5uZXh0KSAmJiB4KGUuZXJyb3IpICYmIHgoZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBnYShlKSB7XG4gIHJldHVybiBlICYmIGUgaW5zdGFuY2VvZiB4dCB8fCBoYShlKSAmJiBIcihlKTtcbn1cbmZ1bmN0aW9uIHdhKGUpIHtcbiAgcmV0dXJuIHgoZSA9PSBudWxsID8gdm9pZCAwIDogZS5saWZ0KTtcbn1cbmZ1bmN0aW9uIHZhKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBpZiAod2EodCkpXG4gICAgICByZXR1cm4gdC5saWZ0KGZ1bmN0aW9uKHIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gZShyLCB0aGlzKTtcbiAgICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICAgIHRoaXMuZXJyb3Iobik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZVwiKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGJhKGUsIHQsIHIsIG4sIG8pIHtcbiAgcmV0dXJuIG5ldyBFYShlLCB0LCByLCBuLCBvKTtcbn1cbnZhciBFYSA9IGZ1bmN0aW9uKGUpIHtcbiAgX2UodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbiwgbywgaSwgcywgYykge1xuICAgIHZhciBsID0gZS5jYWxsKHRoaXMsIHIpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGwub25GaW5hbGl6ZSA9IHMsIGwuc2hvdWxkVW5zdWJzY3JpYmUgPSBjLCBsLl9uZXh0ID0gbiA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG4odSk7XG4gICAgICB9IGNhdGNoIChkKSB7XG4gICAgICAgIHIuZXJyb3IoZCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9uZXh0LCBsLl9lcnJvciA9IGkgPyBmdW5jdGlvbih1KSB7XG4gICAgICB0cnkge1xuICAgICAgICBpKHUpO1xuICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICByLmVycm9yKGQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gOiBlLnByb3RvdHlwZS5fZXJyb3IsIGwuX2NvbXBsZXRlID0gbyA/IGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbygpO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICByLmVycm9yKHUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gOiBlLnByb3RvdHlwZS5fY29tcGxldGUsIGw7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHI7XG4gICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkge1xuICAgICAgdmFyIG4gPSB0aGlzLmNsb3NlZDtcbiAgICAgIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksICFuICYmICgociA9IHRoaXMub25GaW5hbGl6ZSkgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwIHx8IHIuY2FsbCh0aGlzKSk7XG4gICAgfVxuICB9LCB0O1xufSh4dCksIFBhID0gaHQoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgZSh0aGlzKSwgdGhpcy5uYW1lID0gXCJPYmplY3RVbnN1YnNjcmliZWRFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm9iamVjdCB1bnN1YnNjcmliZWRcIjtcbiAgfTtcbn0pLCBaciA9IGZ1bmN0aW9uKGUpIHtcbiAgX2UodCwgZSk7XG4gIGZ1bmN0aW9uIHQoKSB7XG4gICAgdmFyIHIgPSBlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gci5jbG9zZWQgPSAhMSwgci5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgci5vYnNlcnZlcnMgPSBbXSwgci5pc1N0b3BwZWQgPSAhMSwgci5oYXNFcnJvciA9ICExLCByLnRocm93bkVycm9yID0gbnVsbCwgcjtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IG5ldyBzcih0aGlzLCB0aGlzKTtcbiAgICByZXR1cm4gbi5vcGVyYXRvciA9IHIsIG47XG4gIH0sIHQucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgdGhyb3cgbmV3IFBhKCk7XG4gIH0sIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIGx0KGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG8sIGk7XG4gICAgICBpZiAobi5fdGhyb3dJZkNsb3NlZCgpLCAhbi5pc1N0b3BwZWQpIHtcbiAgICAgICAgbi5jdXJyZW50T2JzZXJ2ZXJzIHx8IChuLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKG4ub2JzZXJ2ZXJzKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgcyA9IE1lKG4uY3VycmVudE9ic2VydmVycyksIGMgPSBzLm5leHQoKTsgIWMuZG9uZTsgYyA9IHMubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgbCA9IGMudmFsdWU7XG4gICAgICAgICAgICBsLm5leHQocik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgICAgbyA9IHsgZXJyb3I6IHUgfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYyAmJiAhYy5kb25lICYmIChpID0gcy5yZXR1cm4pICYmIGkuY2FsbChzKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKG8pIHRocm93IG8uZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gdGhpcztcbiAgICBsdChmdW5jdGlvbigpIHtcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmhhc0Vycm9yID0gbi5pc1N0b3BwZWQgPSAhMCwgbi50aHJvd25FcnJvciA9IHI7XG4gICAgICAgIGZvciAodmFyIG8gPSBuLm9ic2VydmVyczsgby5sZW5ndGg7IClcbiAgICAgICAgICBvLnNoaWZ0KCkuZXJyb3Iocik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHQucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIGx0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHIuX3Rocm93SWZDbG9zZWQoKSwgIXIuaXNTdG9wcGVkKSB7XG4gICAgICAgIHIuaXNTdG9wcGVkID0gITA7XG4gICAgICAgIGZvciAodmFyIG4gPSByLm9ic2VydmVyczsgbi5sZW5ndGg7IClcbiAgICAgICAgICBuLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gITAsIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgfSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCBcIm9ic2VydmVkXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHI7XG4gICAgICByZXR1cm4gKChyID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIubGVuZ3RoKSA+IDA7XG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCB0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCByKTtcbiAgfSwgdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHIpLCB0aGlzLl9pbm5lclN1YnNjcmliZShyKTtcbiAgfSwgdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gdGhpcywgbyA9IHRoaXMsIGkgPSBvLmhhc0Vycm9yLCBzID0gby5pc1N0b3BwZWQsIGMgPSBvLm9ic2VydmVycztcbiAgICByZXR1cm4gaSB8fCBzID8gWXIgOiAodGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgYy5wdXNoKHIpLCBuZXcgcnQoZnVuY3Rpb24oKSB7XG4gICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBmdChjLCByKTtcbiAgICB9KSk7XG4gIH0sIHQucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gdGhpcywgbyA9IG4uaGFzRXJyb3IsIGkgPSBuLnRocm93bkVycm9yLCBzID0gbi5pc1N0b3BwZWQ7XG4gICAgbyA/IHIuZXJyb3IoaSkgOiBzICYmIHIuY29tcGxldGUoKTtcbiAgfSwgdC5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSBuZXcgcGUoKTtcbiAgICByZXR1cm4gci5zb3VyY2UgPSB0aGlzLCByO1xuICB9LCB0LmNyZWF0ZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByZXR1cm4gbmV3IHNyKHIsIG4pO1xuICB9LCB0O1xufShwZSksIHNyID0gZnVuY3Rpb24oZSkge1xuICBfZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgdmFyIG8gPSBlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gby5kZXN0aW5hdGlvbiA9IHIsIG8uc291cmNlID0gbiwgbztcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiwgbztcbiAgICAobyA9IChuID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5uZXh0KSA9PT0gbnVsbCB8fCBvID09PSB2b2lkIDAgfHwgby5jYWxsKG4sIHIpO1xuICB9LCB0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiwgbztcbiAgICAobyA9IChuID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5lcnJvcikgPT09IG51bGwgfHwgbyA9PT0gdm9pZCAwIHx8IG8uY2FsbChuLCByKTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciwgbjtcbiAgICAobiA9IChyID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogci5jb21wbGV0ZSkgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwIHx8IG4uY2FsbChyKTtcbiAgfSwgdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiwgbztcbiAgICByZXR1cm4gKG8gPSAobiA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLnN1YnNjcmliZShyKSkgIT09IG51bGwgJiYgbyAhPT0gdm9pZCAwID8gbyA6IFlyO1xuICB9LCB0O1xufShaciksIENhID0ge1xuICBub3c6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBEYXRlLm5vdygpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59LCBTYSA9IGZ1bmN0aW9uKGUpIHtcbiAgX2UodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbikge1xuICAgIHJldHVybiBlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIHQ7XG59KHJ0KSwgY3IgPSB7XG4gIHNldEludGVydmFsOiBmdW5jdGlvbihlLCB0KSB7XG4gICAgZm9yICh2YXIgciA9IFtdLCBuID0gMjsgbiA8IGFyZ3VtZW50cy5sZW5ndGg7IG4rKylcbiAgICAgIHJbbiAtIDJdID0gYXJndW1lbnRzW25dO1xuICAgIHJldHVybiBzZXRJbnRlcnZhbC5hcHBseSh2b2lkIDAsIG10KFtlLCB0XSwgcHQocikpKTtcbiAgfSxcbiAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiBjbGVhckludGVydmFsKGUpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59LCBrYSA9IGZ1bmN0aW9uKGUpIHtcbiAgX2UodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbikge1xuICAgIHZhciBvID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIG8uc2NoZWR1bGVyID0gciwgby53b3JrID0gbiwgby5wZW5kaW5nID0gITEsIG87XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24ociwgbikge1xuICAgIHZhciBvO1xuICAgIGlmIChuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgdGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB0aGlzLnN0YXRlID0gcjtcbiAgICB2YXIgaSA9IHRoaXMuaWQsIHMgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICByZXR1cm4gaSAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzLCBpLCBuKSksIHRoaXMucGVuZGluZyA9ICEwLCB0aGlzLmRlbGF5ID0gbiwgdGhpcy5pZCA9IChvID0gdGhpcy5pZCkgIT09IG51bGwgJiYgbyAhPT0gdm9pZCAwID8gbyA6IHRoaXMucmVxdWVzdEFzeW5jSWQocywgdGhpcy5pZCwgbiksIHRoaXM7XG4gIH0sIHQucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24ociwgbiwgbykge1xuICAgIHJldHVybiBvID09PSB2b2lkIDAgJiYgKG8gPSAwKSwgY3Iuc2V0SW50ZXJ2YWwoci5mbHVzaC5iaW5kKHIsIHRoaXMpLCBvKTtcbiAgfSwgdC5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbihyLCBuLCBvKSB7XG4gICAgaWYgKG8gPT09IHZvaWQgMCAmJiAobyA9IDApLCBvICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gbyAmJiB0aGlzLnBlbmRpbmcgPT09ICExKVxuICAgICAgcmV0dXJuIG47XG4gICAgbiAhPSBudWxsICYmIGNyLmNsZWFySW50ZXJ2YWwobik7XG4gIH0sIHQucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb25cIik7XG4gICAgdGhpcy5wZW5kaW5nID0gITE7XG4gICAgdmFyIG8gPSB0aGlzLl9leGVjdXRlKHIsIG4pO1xuICAgIGlmIChvKVxuICAgICAgcmV0dXJuIG87XG4gICAgdGhpcy5wZW5kaW5nID09PSAhMSAmJiB0aGlzLmlkICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKSk7XG4gIH0sIHQucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24ociwgbikge1xuICAgIHZhciBvID0gITEsIGk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMud29yayhyKTtcbiAgICB9IGNhdGNoIChzKSB7XG4gICAgICBvID0gITAsIGkgPSBzIHx8IG5ldyBFcnJvcihcIlNjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3JcIik7XG4gICAgfVxuICAgIGlmIChvKVxuICAgICAgcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSwgaTtcbiAgfSwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB2YXIgciA9IHRoaXMsIG4gPSByLmlkLCBvID0gci5zY2hlZHVsZXIsIGkgPSBvLmFjdGlvbnM7XG4gICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsLCB0aGlzLnBlbmRpbmcgPSAhMSwgZnQoaSwgdGhpcyksIG4gIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQobywgbiwgbnVsbCkpLCB0aGlzLmRlbGF5ID0gbnVsbCwgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH0sIHQ7XG59KFNhKSwgbHIgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0LCByKSB7XG4gICAgciA9PT0gdm9pZCAwICYmIChyID0gZS5ub3cpLCB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSB0LCB0aGlzLm5vdyA9IHI7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgIHJldHVybiByID09PSB2b2lkIDAgJiYgKHIgPSAwKSwgbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCB0KS5zY2hlZHVsZShuLCByKTtcbiAgfSwgZS5ub3cgPSBDYS5ub3csIGU7XG59KCksIEFhID0gZnVuY3Rpb24oZSkge1xuICBfZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgbiA9PT0gdm9pZCAwICYmIChuID0gbHIubm93KTtcbiAgICB2YXIgbyA9IGUuY2FsbCh0aGlzLCByLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBvLmFjdGlvbnMgPSBbXSwgby5fYWN0aXZlID0gITEsIG87XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gdGhpcy5hY3Rpb25zO1xuICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgIG4ucHVzaChyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG87XG4gICAgdGhpcy5fYWN0aXZlID0gITA7XG4gICAgZG9cbiAgICAgIGlmIChvID0gci5leGVjdXRlKHIuc3RhdGUsIHIuZGVsYXkpKVxuICAgICAgICBicmVhaztcbiAgICB3aGlsZSAociA9IG4uc2hpZnQoKSk7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9ICExLCBvKSB7XG4gICAgICBmb3IgKDsgciA9IG4uc2hpZnQoKTsgKVxuICAgICAgICByLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aHJvdyBvO1xuICAgIH1cbiAgfSwgdDtcbn0obHIpLCBJYSA9IG5ldyBBYShrYSksIFJhID0gZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgZSAhPSBcImZ1bmN0aW9uXCI7XG59O1xuZnVuY3Rpb24gVGEoZSkge1xuICByZXR1cm4geChlID09IG51bGwgPyB2b2lkIDAgOiBlLnRoZW4pO1xufVxuZnVuY3Rpb24gRmEoZSkge1xuICByZXR1cm4geChlWyR0XSk7XG59XG5mdW5jdGlvbiBOYShlKSB7XG4gIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiB4KGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKTtcbn1cbmZ1bmN0aW9uIE1hKGUpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgcHJvdmlkZWQgXCIgKyAoZSAhPT0gbnVsbCAmJiB0eXBlb2YgZSA9PSBcIm9iamVjdFwiID8gXCJhbiBpbnZhbGlkIG9iamVjdFwiIDogXCInXCIgKyBlICsgXCInXCIpICsgXCIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5cIik7XG59XG5mdW5jdGlvbiBEYSgpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgIT0gXCJmdW5jdGlvblwiIHx8ICFTeW1ib2wuaXRlcmF0b3IgPyBcIkBAaXRlcmF0b3JcIiA6IFN5bWJvbC5pdGVyYXRvcjtcbn1cbnZhciBPYSA9IERhKCk7XG5mdW5jdGlvbiBMYShlKSB7XG4gIHJldHVybiB4KGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbT2FdKTtcbn1cbmZ1bmN0aW9uIFVhKGUpIHtcbiAgcmV0dXJuIGxhKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIsIG4sIG8sIGk7XG4gICAgcmV0dXJuIEJyKHRoaXMsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHN3aXRjaCAocy5sYWJlbCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgciA9IGUuZ2V0UmVhZGVyKCksIHMubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcy50cnlzLnB1c2goWzEsICwgOSwgMTBdKSwgcy5sYWJlbCA9IDI7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXR1cm4gWzQsIEZlKHIucmVhZCgpKV07XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gbiA9IHMuc2VudCgpLCBvID0gbi52YWx1ZSwgaSA9IG4uZG9uZSwgaSA/IFs0LCBGZSh2b2lkIDApXSA6IFszLCA1XTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMiwgcy5zZW50KCldO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIFs0LCBGZShvKV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gWzQsIHMuc2VudCgpXTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHJldHVybiBzLnNlbnQoKSwgWzMsIDJdO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMF07XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICByZXR1cm4gci5yZWxlYXNlTG9jaygpLCBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBqYShlKSB7XG4gIHJldHVybiB4KGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZ2V0UmVhZGVyKTtcbn1cbmZ1bmN0aW9uIHhhKGUpIHtcbiAgaWYgKGUgaW5zdGFuY2VvZiBwZSlcbiAgICByZXR1cm4gZTtcbiAgaWYgKGUgIT0gbnVsbCkge1xuICAgIGlmIChGYShlKSlcbiAgICAgIHJldHVybiAkYShlKTtcbiAgICBpZiAoUmEoZSkpXG4gICAgICByZXR1cm4gVmEoZSk7XG4gICAgaWYgKFRhKGUpKVxuICAgICAgcmV0dXJuIEdhKGUpO1xuICAgIGlmIChOYShlKSlcbiAgICAgIHJldHVybiBRcihlKTtcbiAgICBpZiAoTGEoZSkpXG4gICAgICByZXR1cm4gemEoZSk7XG4gICAgaWYgKGphKGUpKVxuICAgICAgcmV0dXJuIHFhKGUpO1xuICB9XG4gIHRocm93IE1hKGUpO1xufVxuZnVuY3Rpb24gJGEoZSkge1xuICByZXR1cm4gbmV3IHBlKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IGVbJHRdKCk7XG4gICAgaWYgKHgoci5zdWJzY3JpYmUpKVxuICAgICAgcmV0dXJuIHIuc3Vic2NyaWJlKHQpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZVwiKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBWYShlKSB7XG4gIHJldHVybiBuZXcgcGUoZnVuY3Rpb24odCkge1xuICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5sZW5ndGggJiYgIXQuY2xvc2VkOyByKyspXG4gICAgICB0Lm5leHQoZVtyXSk7XG4gICAgdC5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEdhKGUpIHtcbiAgcmV0dXJuIG5ldyBwZShmdW5jdGlvbih0KSB7XG4gICAgZS50aGVuKGZ1bmN0aW9uKHIpIHtcbiAgICAgIHQuY2xvc2VkIHx8ICh0Lm5leHQociksIHQuY29tcGxldGUoKSk7XG4gICAgfSwgZnVuY3Rpb24ocikge1xuICAgICAgcmV0dXJuIHQuZXJyb3Iocik7XG4gICAgfSkudGhlbihudWxsLCBXcik7XG4gIH0pO1xufVxuZnVuY3Rpb24gemEoZSkge1xuICByZXR1cm4gbmV3IHBlKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciwgbjtcbiAgICB0cnkge1xuICAgICAgZm9yICh2YXIgbyA9IE1lKGUpLCBpID0gby5uZXh0KCk7ICFpLmRvbmU7IGkgPSBvLm5leHQoKSkge1xuICAgICAgICB2YXIgcyA9IGkudmFsdWU7XG4gICAgICAgIGlmICh0Lm5leHQocyksIHQuY2xvc2VkKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChjKSB7XG4gICAgICByID0geyBlcnJvcjogYyB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpICYmICFpLmRvbmUgJiYgKG4gPSBvLnJldHVybikgJiYgbi5jYWxsKG8pO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHIpIHRocm93IHIuZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHQuY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBRcihlKSB7XG4gIHJldHVybiBuZXcgcGUoZnVuY3Rpb24odCkge1xuICAgIEJhKGUsIHQpLmNhdGNoKGZ1bmN0aW9uKHIpIHtcbiAgICAgIHJldHVybiB0LmVycm9yKHIpO1xuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHFhKGUpIHtcbiAgcmV0dXJuIFFyKFVhKGUpKTtcbn1cbmZ1bmN0aW9uIEJhKGUsIHQpIHtcbiAgdmFyIHIsIG4sIG8sIGk7XG4gIHJldHVybiBjYSh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgdmFyIHMsIGM7XG4gICAgcmV0dXJuIEJyKHRoaXMsIGZ1bmN0aW9uKGwpIHtcbiAgICAgIHN3aXRjaCAobC5sYWJlbCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgbC50cnlzLnB1c2goWzAsIDUsIDYsIDExXSksIHIgPSB1YShlKSwgbC5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gWzQsIHIubmV4dCgpXTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmIChuID0gbC5zZW50KCksICEhbi5kb25lKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgIGlmIChzID0gbi52YWx1ZSwgdC5uZXh0KHMpLCB0LmNsb3NlZClcbiAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgbC5sYWJlbCA9IDM7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gWzMsIDFdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gYyA9IGwuc2VudCgpLCBvID0geyBlcnJvcjogYyB9LCBbMywgMTFdO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIGwudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSksIG4gJiYgIW4uZG9uZSAmJiAoaSA9IHIucmV0dXJuKSA/IFs0LCBpLmNhbGwocildIDogWzMsIDhdO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbC5zZW50KCksIGwubGFiZWwgPSA4O1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMF07XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBpZiAobykgdGhyb3cgby5lcnJvcjtcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgcmV0dXJuIHQuY29tcGxldGUoKSwgWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFlhKGUsIHQsIHIsIG4sIG8pIHtcbiAgbiA9PT0gdm9pZCAwICYmIChuID0gMCksIG8gPT09IHZvaWQgMCAmJiAobyA9ICExKTtcbiAgdmFyIGkgPSB0LnNjaGVkdWxlKGZ1bmN0aW9uKCkge1xuICAgIHIoKSwgbyA/IGUuYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgbikpIDogdGhpcy51bnN1YnNjcmliZSgpO1xuICB9LCBuKTtcbiAgaWYgKGUuYWRkKGkpLCAhbylcbiAgICByZXR1cm4gaTtcbn1cbmZ1bmN0aW9uIEhhKGUsIHQpIHtcbiAgdmFyIHIgPSB4KGUpID8gZSA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBlO1xuICB9LCBuID0gZnVuY3Rpb24obykge1xuICAgIHJldHVybiBvLmVycm9yKHIoKSk7XG4gIH07XG4gIHJldHVybiBuZXcgcGUobik7XG59XG52YXIgSmEgPSBodChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBlKHRoaXMpLCB0aGlzLm5hbWUgPSBcIkVtcHR5RXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZVwiO1xuICB9O1xufSk7XG5mdW5jdGlvbiBLYShlLCB0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLCBuKSB7XG4gICAgdmFyIG8gPSAhMSwgaTtcbiAgICBlLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBmdW5jdGlvbihzKSB7XG4gICAgICAgIGkgPSBzLCBvID0gITA7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IG4sXG4gICAgICBjb21wbGV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIG8gPyByKGkpIDogbihuZXcgSmEoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gV2EoZSkge1xuICByZXR1cm4gZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGUpO1xufVxudmFyIFphID0gaHQoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIHIgPT09IHZvaWQgMCAmJiAociA9IG51bGwpLCBlKHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSBcIlRpbWVvdXQgaGFzIG9jY3VycmVkXCIsIHRoaXMubmFtZSA9IFwiVGltZW91dEVycm9yXCIsIHRoaXMuaW5mbyA9IHI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIFFhKGUsIHQpIHtcbiAgdmFyIHIgPSBXYShlKSA/IHsgZmlyc3Q6IGUgfSA6IHR5cGVvZiBlID09IFwibnVtYmVyXCIgPyB7IGVhY2g6IGUgfSA6IGUsIG4gPSByLmZpcnN0LCBvID0gci5lYWNoLCBpID0gci53aXRoLCBzID0gaSA9PT0gdm9pZCAwID8gWGEgOiBpLCBjID0gci5zY2hlZHVsZXIsIGwgPSBjID09PSB2b2lkIDAgPyBJYSA6IGMsIHUgPSByLm1ldGEsIGQgPSB1ID09PSB2b2lkIDAgPyBudWxsIDogdTtcbiAgaWYgKG4gPT0gbnVsbCAmJiBvID09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIHRpbWVvdXQgcHJvdmlkZWQuXCIpO1xuICByZXR1cm4gdmEoZnVuY3Rpb24oeSwgcCkge1xuICAgIHZhciBtLCBfLCBoID0gbnVsbCwgdiA9IDAsIGIgPSBmdW5jdGlvbihFKSB7XG4gICAgICBfID0gWWEocCwgbCwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbS51bnN1YnNjcmliZSgpLCB4YShzKHtcbiAgICAgICAgICAgIG1ldGE6IGQsXG4gICAgICAgICAgICBsYXN0VmFsdWU6IGgsXG4gICAgICAgICAgICBzZWVuOiB2XG4gICAgICAgICAgfSkpLnN1YnNjcmliZShwKTtcbiAgICAgICAgfSBjYXRjaCAoUCkge1xuICAgICAgICAgIHAuZXJyb3IoUCk7XG4gICAgICAgIH1cbiAgICAgIH0sIEUpO1xuICAgIH07XG4gICAgbSA9IHkuc3Vic2NyaWJlKGJhKHAsIGZ1bmN0aW9uKEUpIHtcbiAgICAgIF8gPT0gbnVsbCB8fCBfLnVuc3Vic2NyaWJlKCksIHYrKywgcC5uZXh0KGggPSBFKSwgbyA+IDAgJiYgYihvKTtcbiAgICB9LCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgICBfICE9IG51bGwgJiYgXy5jbG9zZWQgfHwgXyA9PSBudWxsIHx8IF8udW5zdWJzY3JpYmUoKSwgaCA9IG51bGw7XG4gICAgfSkpLCAhdiAmJiBiKG4gIT0gbnVsbCA/IHR5cGVvZiBuID09IFwibnVtYmVyXCIgPyBuIDogK24gLSBsLm5vdygpIDogbyk7XG4gIH0pO1xufVxuZnVuY3Rpb24gWGEoZSkge1xuICB0aHJvdyBuZXcgWmEoZSk7XG59XG5jbGFzcyBZZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiAhMCwgbG9hZGVkVmFsdWU6IHQgfSwgdGhpcy5fc3ViamVjdC5uZXh0KHQpLCB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfSwgdGhpcy50aHJvdyA9ICh0LCByKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6ICExLCBlcnJvcjogdCwgZXJyTXNnOiByIH0sIHRoaXMuX3N1YmplY3QuZXJyb3IodCk7XG4gICAgfSwgdGhpcy5nZXRWYWx1ZUlmTG9hZGVkRWxzZSA9ICh0KSA9PiB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIgPyB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlIDogdCwgdGhpcy5zdWJzY3JpYmUgPSAodCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiICYmIHQodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCByID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgdCh0aGlzLl9jdXJyZW50KSwgci51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgdCh0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgdGhpcy53YWl0Rm9yTG9hZCA9ICh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImluaXRpYWxcIiAmJiBndCh0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHIgPSB7XG4gICAgICAgIGZpcnN0OiB0LnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IEhhKCgpID0+IG5ldyBFcnJvcih0LnRpbWVvdXRFcnJNc2cpKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBLYSh0aGlzLl9zdWJqZWN0LnBpcGUoUWEocikpKTtcbiAgICB9LCB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiaW5pdGlhbFwiLCBpc1N1Y2Nlc3M6ICExIH0sIHRoaXMuX3N1YmplY3QgPSBuZXcgWnIoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuY29uc3QgdXIgPSB6LmVudW0oW1wiZGV2XCIsIFwic3RnXCIsIFwicHJvZFwiXSksIGVpID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59LCB0aSA9IChlKSA9PiBlaVtlXSwgU3QgPSB7fSwgWHIgPSBhc3luYyAoZSkgPT4ge1xuICBpZiAoU3RbZV0pXG4gICAgcmV0dXJuIFN0W2VdO1xuICB0cnkge1xuICAgIGNvbnN0IHQgPSBhd2FpdCBmZXRjaChuZXcgVVJMKFwiL2hlYWx0aC9lbnZpcm9ubWVudFwiLCBlKSkudGhlbigobikgPT4gbi5qc29uKCkpLCByID0gdXIucGFyc2UodC5lbnZpcm9ubWVudCk7XG4gICAgcmV0dXJuIFN0W2VdID0gciwgcjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVyLlZhbHVlcy5wcm9kO1xuICB9XG59O1xuZnVuY3Rpb24gZ3QoZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke2V9YCk7XG59XG5jb25zdCB3dCA9IChlLCB0KSA9PiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbcl0pID0+ICF0LmluY2x1ZGVzKHIpKSksIFUgPSAoKSA9PiB7XG4gIGlmICghKHR5cGVvZiB3aW5kb3cgPiBcInVcIikpXG4gICAgcmV0dXJuIHdpbmRvdztcbn0sIER0ID0gbmV3IFllKCksIGRyID0gXCJvcF9tZXRyaWNzX3F1ZXVlXCIsIHJpID0gMywgbmkgPSAzLCBvaSA9IDFlMywgeyBsb2dfXzogc3QgfSA9IFMoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgYWkge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB2YXIgdCwgcjtcbiAgICB0aGlzLnF1ZXVlID0gW10sIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITEsIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCwgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSAwLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIHN0KFwiTmV0d29yayBvZmZsaW5lLCBtZXRyaWNzIHdpbGwgYmUgcXVldWVkXCIpLCB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH0sIHRoaXMub25saW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBzdChcIk5ldHdvcmsgb25saW5lLCBwcm9jZXNzaW5nIG1ldHJpY3MgcXVldWVcIiksIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfSwgdGhpcy5sb2FkUXVldWVGcm9tU3RvcmFnZSgpLCAodCA9IFUoKSkgPT0gbnVsbCB8fCB0LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKSwgKHIgPSBVKCkpID09IG51bGwgfHwgci5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICB9XG4gIGFkZEV2ZW50KHQsIHIsIG4pIHtcbiAgICBjb25zdCBvID0ge1xuICAgICAgZXZlbnROYW1lOiB0LFxuICAgICAgcHJvcGVydGllczogciB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiBuIHx8IHt9LFxuICAgICAgbm9uY2U6IHY0KCksXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBkYXRldGltZTogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLFxuICAgICAgYXR0ZW1wdENvdW50OiAwLFxuICAgICAgdGltZURpZmZGcm9tUHJldmlvdXNFdmVudDogdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPyBEYXRlLm5vdygpIC0gdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgOiAwXG4gICAgfTtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IG8udGltZXN0YW1wLCB0aGlzLnF1ZXVlLnB1c2gobyksIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCksIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB2YXIgdCwgcjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbiA9IChyID0gKHQgPSBVKCkpID09IG51bGwgPyB2b2lkIDAgOiB0LmxvY2FsU3RvcmFnZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZ2V0SXRlbShkcik7XG4gICAgICBuICYmICh0aGlzLnF1ZXVlID0gSlNPTi5wYXJzZShuKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLnF1ZXVlID0gW10sIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgfVxuICB9XG4gIHNhdmVRdWV1ZVRvU3RvcmFnZSgpIHtcbiAgICB2YXIgdDtcbiAgICAodCA9IFUoKSkgPT0gbnVsbCB8fCB0LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGRyLCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXVlKSk7XG4gIH1cbiAgc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgY29uc3QgdCA9IFUoKTtcbiAgICB0ICYmIG5hdmlnYXRvci5vbkxpbmUgJiYgIXRoaXMucHJvY2Vzc2luZ1F1ZXVlICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiAhdGhpcy5iYXRjaFRpbWVvdXQgJiYgKHRoaXMuYmF0Y2hUaW1lb3V0ID0gdC5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCwgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9LCBvaSkpO1xuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICB2YXIgdDtcbiAgICB0aGlzLmJhdGNoVGltZW91dCAmJiAoKHQgPSBVKCkpID09IG51bGwgfHwgdC5jbGVhclRpbWVvdXQodGhpcy5iYXRjaFRpbWVvdXQpLCB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwpLCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICExO1xuICB9XG4gIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICAhbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCB8fCAodGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMCwgdGhpcy5zZW5kQmF0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITEsIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfSkpO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCB0ID0gRHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2Uodm9pZCAwKTtcbiAgICBpZiAoIXQpIHtcbiAgICAgIHN0KFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHIgPSB0aGlzLnF1ZXVlLnNsaWNlKDAsIG5pKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbiA9IHtcbiAgICAgICAgZXZlbnRzOiByLm1hcCgoYykgPT4gKHtcbiAgICAgICAgICBldmVudF9uYW1lOiBjLmV2ZW50TmFtZSxcbiAgICAgICAgICBkZXZpY2VfdG9rZW46IHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAuLi50LFxuICAgICAgICAgICAgLi4uYy5jb250ZXh0UHJvcGVydGllc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgbm9uY2U6IGMubm9uY2UsXG4gICAgICAgICAgICBkYXRldGltZTogYy5kYXRldGltZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogYy50aW1lc3RhbXAsXG4gICAgICAgICAgICB0aW1lX2RpZmZfZnJvbV9wcmV2aW91c19ldmVudDogYy50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgY2hlY2tvdXRfc2VjdXJlX3Rva2VuOiB0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICAuLi5jLnByb3BlcnRpZXNcbiAgICAgICAgICB9XG4gICAgICAgIH0pKVxuICAgICAgfSwgbyA9IHRpKHQuZW52aXJvbm1lbnQpLCBpID0gbmV3IFVSTChcIi9tZXRyaWNzL3B1YmxpYy9jYXB0dXJlXCIsIG8pO1xuICAgICAgKGF3YWl0IGZldGNoKGkudG9TdHJpbmcoKSwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkobilcbiAgICAgIH0pKS5vayA/ICh0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShyLmxlbmd0aCksIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCkpIDogdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChyKTtcbiAgICB9IGNhdGNoIChuKSB7XG4gICAgICBzdChcIkVycm9yIHNlbmRpbmcgbWV0cmljcyBiYXRjaDpcIiwgbiksIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2gocik7XG4gICAgfVxuICB9XG4gIGhhbmRsZUZhaWxlZEJhdGNoKHQpIHtcbiAgICB0LmZvckVhY2goKG4pID0+IHtcbiAgICAgIG4uYXR0ZW1wdENvdW50Kys7XG4gICAgfSk7XG4gICAgY29uc3QgciA9IHQuZmlsdGVyKChuKSA9PiBuLmF0dGVtcHRDb3VudCA8IHJpKTtcbiAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZSh0Lmxlbmd0aCksIHRoaXMucXVldWUgPSBbLi4uciwgLi4udGhpcy5xdWV1ZV0sIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gIH1cbiAgY2xlYW51cCgpIHtcbiAgICB2YXIgdCwgcjtcbiAgICAodCA9IFUoKSkgPT0gbnVsbCB8fCB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKSwgKHIgPSBVKCkpID09IG51bGwgfHwgci5yZW1vdmVFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpLCB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG59XG5jb25zdCBWdCA9IG5ldyBhaSgpLCBnID0gKGUsIHQsIHIpID0+IHtcbiAgVnQuYWRkRXZlbnQoZSwgdCwgcik7XG59LCBpaSA9ICgpID0+IHtcbiAgVnQucHJvY2Vzc1F1ZXVlKCk7XG59LCBlbiA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBaKGUucmVhc29uKTtcbiAgZyhcInVuaGFuZGxlZF9yZWplY3Rpb25fZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IHQsXG4gICAgZXJyb3JfbmFtZTogZS5yZWFzb25cbiAgfSk7XG59LCB0biA9IChlKSA9PiB7XG4gIHZhciByLCBuO1xuICBjb25zdCB0ID0gWihlLmVycm9yKTtcbiAgZyhcInVuY2F1Z2h0X2Vycm9yXCIsIHtcbiAgICBlcnJvcl9tZXNzYWdlOiB0LFxuICAgIGVycm9yX25hbWU6IChyID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHIubmFtZSxcbiAgICBlcnJvcl9zdGFjazogKG4gPSBlLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogbi5zdGFjayxcbiAgICBmaWxlX25hbWU6IGUuZmlsZW5hbWUsXG4gICAgbGluZV9udW1iZXI6IGUubGluZW5vLFxuICAgIGNvbHVtbl9udW1iZXI6IGUuY29sbm9cbiAgfSk7XG59LCBzaSA9ICgpID0+IHtcbiAgdmFyIGUsIHQ7XG4gIChlID0gVSgpKSA9PSBudWxsIHx8IGUuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHRuKSwgKHQgPSBVKCkpID09IG51bGwgfHwgdC5hZGRFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIGVuKTtcbn0sIGNpID0gKCkgPT4ge1xuICB2YXIgZSwgdDtcbiAgKGUgPSBVKCkpID09IG51bGwgfHwgZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgdG4pLCAodCA9IFUoKSkgPT0gbnVsbCB8fCB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgZW4pO1xufTtcbnZhciBScjtcbihSciA9IFUoKSkgPT0gbnVsbCB8fCBSci5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICgpID0+IHtcbiAgVnQucHJvY2Vzc1F1ZXVlKCk7XG59KTtcbmNvbnN0IGxpID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSksIHVpID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbn0pLCBkaSA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn0sIHZ0ID0gYXN5bmMgKGUpID0+IHtcbiAgZm9yIChsZXQgciA9IDA7IHIgPCAxMDsgcisrKVxuICAgIHByKCkgfHwgYXdhaXQgYnQoNTAwKTtcbiAgaWYgKCFwcigpKVxuICAgIHRocm93IGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIiksIG5ldyBFcnJvcihcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICByZXR1cm4gbmV3IFN0cmlwZShlKTtcbn0sIHBpID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IGF3YWl0IHZ0KGUpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiByLmVsZW1lbnRzKHQpLFxuICAgIHN0cmlwZTogclxuICB9O1xufSwgbWkgPSBhc3luYyAoZSwgdCwgciwgbiwgbykgPT4ge1xuICBjb25zdCBpID0gYXdhaXQgdnQoZSksIHMgPSBkaVtyLnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgcmV0dXJuIGkucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBzLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiB0LFxuICAgICAgcGVuZGluZzogblxuICAgIH0sXG4gICAgLy8gcmVxdWVzdFNoaXBwaW5nOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllck5hbWU6ICEwLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiAhMCxcbiAgICBkaXNhYmxlV2FsbGV0czogW11cbiAgfSk7XG59LCBidCA9IChlKSA9PiBuZXcgUHJvbWlzZSgodCkgPT4ge1xuICBzZXRUaW1lb3V0KHQsIGUpO1xufSksIHByID0gKCkgPT4gXCJTdHJpcGVcIiBpbiB3aW5kb3csIGZpID0gYXN5bmMgKGUpID0+IG5ldyBQcm9taXNlKCh0LCByKSA9PiB7XG4gIHRyeSB7XG4gICAgZS5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKG4pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgbiksIHQobik7XG4gICAgfSksIGUub24oXCJ0b2tlblwiLCBhc3luYyAobikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgbik7XG4gICAgfSksIGUub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgcihuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikpO1xuICAgIH0pO1xuICB9IGNhdGNoIChuKSB7XG4gICAgcihuKTtcbiAgfVxufSksIHlpID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgaWYgKCFlLnN0cmlwZV9wayB8fCAhZS5jbGllbnRfc2VjcmV0KVxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gIGNvbnN0IG4gPSBhd2FpdCAoYXdhaXQgdnQoZS5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKGUuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiB0LnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChuLmVycm9yKVxuICAgIHRocm93IHQuY29tcGxldGUoXCJmYWlsXCIpLCBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke24uZXJyb3IubWVzc2FnZSA/PyBcInVua25vd25cIn1gKTtcbiAgcmV0dXJuIHQuY29tcGxldGUoXCJzdWNjZXNzXCIpLCBuO1xufSwgX2kgPSBhc3luYyAoZSkgPT4ge1xuICB2YXIgbywgaSwgcywgYztcbiAgY29uc3QgciA9IGF3YWl0IChhd2FpdCB2dChlLnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAoZS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IGUuc3RyaXBlX3BtX2lkXG4gIH0pLCBuID0gKG8gPSByLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogby5zdGF0dXM7XG4gIGlmIChuID09PSBcInN1Y2NlZWRlZFwiKVxuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gQ09ORklSTUlORyBQTTpcIiwgZS5zdHJpcGVfcG1faWQpLCBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCByLnNldHVwSW50ZW50KTtcbiAgZWxzZSB0aHJvdyBuID09PSBcImNhbmNlbGVkXCIgPyBuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikgOiBuZXcgRXJyb3IoXG4gICAgYCR7KChpID0gci5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGkubWVzc2FnZSkgPz8gKChjID0gKHMgPSByLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogcy5sYXN0X3NldHVwX2Vycm9yKSA9PSBudWxsID8gdm9pZCAwIDogYy5tZXNzYWdlKSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICk7XG59O1xudmFyIGhpID0gdHlwZW9mIGdsb2JhbFRoaXMgPT0gXCJvYmplY3RcIiA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygc2VsZiA9PSBcIm9iamVjdFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgPT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgPT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6IHt9LCBFZSA9IFwiMS45LjBcIiwgbXIgPSAvXihcXGQrKVxcLihcXGQrKVxcLihcXGQrKSgtKC4rKSk/JC87XG5mdW5jdGlvbiBnaShlKSB7XG4gIHZhciB0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoW2VdKSwgciA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIG4gPSBlLm1hdGNoKG1yKTtcbiAgaWYgKCFuKVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9O1xuICB2YXIgbyA9IHtcbiAgICBtYWpvcjogK25bMV0sXG4gICAgbWlub3I6ICtuWzJdLFxuICAgIHBhdGNoOiArblszXSxcbiAgICBwcmVyZWxlYXNlOiBuWzRdXG4gIH07XG4gIGlmIChvLnByZXJlbGVhc2UgIT0gbnVsbClcbiAgICByZXR1cm4gZnVuY3Rpb24obCkge1xuICAgICAgcmV0dXJuIGwgPT09IGU7XG4gICAgfTtcbiAgZnVuY3Rpb24gaShjKSB7XG4gICAgcmV0dXJuIHIuYWRkKGMpLCAhMTtcbiAgfVxuICBmdW5jdGlvbiBzKGMpIHtcbiAgICByZXR1cm4gdC5hZGQoYyksICEwO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihsKSB7XG4gICAgaWYgKHQuaGFzKGwpKVxuICAgICAgcmV0dXJuICEwO1xuICAgIGlmIChyLmhhcyhsKSlcbiAgICAgIHJldHVybiAhMTtcbiAgICB2YXIgdSA9IGwubWF0Y2gobXIpO1xuICAgIGlmICghdSlcbiAgICAgIHJldHVybiBpKGwpO1xuICAgIHZhciBkID0ge1xuICAgICAgbWFqb3I6ICt1WzFdLFxuICAgICAgbWlub3I6ICt1WzJdLFxuICAgICAgcGF0Y2g6ICt1WzNdLFxuICAgICAgcHJlcmVsZWFzZTogdVs0XVxuICAgIH07XG4gICAgcmV0dXJuIGQucHJlcmVsZWFzZSAhPSBudWxsIHx8IG8ubWFqb3IgIT09IGQubWFqb3IgPyBpKGwpIDogby5tYWpvciA9PT0gMCA/IG8ubWlub3IgPT09IGQubWlub3IgJiYgby5wYXRjaCA8PSBkLnBhdGNoID8gcyhsKSA6IGkobCkgOiBvLm1pbm9yIDw9IGQubWlub3IgPyBzKGwpIDogaShsKTtcbiAgfTtcbn1cbnZhciB3aSA9IGdpKEVlKSwgdmkgPSBFZS5zcGxpdChcIi5cIilbMF0sIFdlID0gU3ltYm9sLmZvcihcIm9wZW50ZWxlbWV0cnkuanMuYXBpLlwiICsgdmkpLCBaZSA9IGhpO1xuZnVuY3Rpb24gR3QoZSwgdCwgciwgbikge1xuICB2YXIgbztcbiAgbiA9PT0gdm9pZCAwICYmIChuID0gITEpO1xuICB2YXIgaSA9IFplW1dlXSA9IChvID0gWmVbV2VdKSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDoge1xuICAgIHZlcnNpb246IEVlXG4gIH07XG4gIGlmICghbiAmJiBpW2VdKSB7XG4gICAgdmFyIHMgPSBuZXcgRXJyb3IoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IEF0dGVtcHRlZCBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uIG9mIEFQSTogXCIgKyBlKTtcbiAgICByZXR1cm4gci5lcnJvcihzLnN0YWNrIHx8IHMubWVzc2FnZSksICExO1xuICB9XG4gIGlmIChpLnZlcnNpb24gIT09IEVlKSB7XG4gICAgdmFyIHMgPSBuZXcgRXJyb3IoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdHJhdGlvbiBvZiB2ZXJzaW9uIHZcIiArIGkudmVyc2lvbiArIFwiIGZvciBcIiArIGUgKyBcIiBkb2VzIG5vdCBtYXRjaCBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgQVBJIHZcIiArIEVlKTtcbiAgICByZXR1cm4gci5lcnJvcihzLnN0YWNrIHx8IHMubWVzc2FnZSksICExO1xuICB9XG4gIHJldHVybiBpW2VdID0gdCwgci5kZWJ1ZyhcIkBvcGVudGVsZW1ldHJ5L2FwaTogUmVnaXN0ZXJlZCBhIGdsb2JhbCBmb3IgXCIgKyBlICsgXCIgdlwiICsgRWUgKyBcIi5cIiksICEwO1xufVxuZnVuY3Rpb24gUWUoZSkge1xuICB2YXIgdCwgciwgbiA9ICh0ID0gWmVbV2VdKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LnZlcnNpb247XG4gIGlmICghKCFuIHx8ICF3aShuKSkpXG4gICAgcmV0dXJuIChyID0gWmVbV2VdKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByW2VdO1xufVxuZnVuY3Rpb24genQoZSwgdCkge1xuICB0LmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBVbnJlZ2lzdGVyaW5nIGEgZ2xvYmFsIGZvciBcIiArIGUgKyBcIiB2XCIgKyBFZSArIFwiLlwiKTtcbiAgdmFyIHIgPSBaZVtXZV07XG4gIHIgJiYgZGVsZXRlIHJbZV07XG59XG52YXIgYmkgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgbywgaSA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEobyA9IG4ubmV4dCgpKS5kb25lOyApIGkucHVzaChvLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIHMgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG8gJiYgIW8uZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTtcbn0sIEVpID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCwgaTsgbiA8IG87IG4rKylcbiAgICAoaSB8fCAhKG4gaW4gdCkpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBpW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIFBpID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdGhpcy5fbmFtZXNwYWNlID0gdC5uYW1lc3BhY2UgfHwgXCJEaWFnQ29tcG9uZW50TG9nZ2VyXCI7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5kZWJ1ZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiBWZShcImRlYnVnXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZS5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gVmUoXCJlcnJvclwiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLmluZm8gPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gVmUoXCJpbmZvXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZS5wcm90b3R5cGUud2FybiA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiBWZShcIndhcm5cIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS52ZXJib3NlID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIFZlKFwidmVyYm9zZVwiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGU7XG4gIH0oKVxuKTtcbmZ1bmN0aW9uIFZlKGUsIHQsIHIpIHtcbiAgdmFyIG4gPSBRZShcImRpYWdcIik7XG4gIGlmIChuKVxuICAgIHJldHVybiByLnVuc2hpZnQodCksIG5bZV0uYXBwbHkobiwgRWkoW10sIGJpKHIpLCAhMSkpO1xufVxudmFyIEs7XG4oZnVuY3Rpb24oZSkge1xuICBlW2UuTk9ORSA9IDBdID0gXCJOT05FXCIsIGVbZS5FUlJPUiA9IDMwXSA9IFwiRVJST1JcIiwgZVtlLldBUk4gPSA1MF0gPSBcIldBUk5cIiwgZVtlLklORk8gPSA2MF0gPSBcIklORk9cIiwgZVtlLkRFQlVHID0gNzBdID0gXCJERUJVR1wiLCBlW2UuVkVSQk9TRSA9IDgwXSA9IFwiVkVSQk9TRVwiLCBlW2UuQUxMID0gOTk5OV0gPSBcIkFMTFwiO1xufSkoSyB8fCAoSyA9IHt9KSk7XG5mdW5jdGlvbiBDaShlLCB0KSB7XG4gIGUgPCBLLk5PTkUgPyBlID0gSy5OT05FIDogZSA+IEsuQUxMICYmIChlID0gSy5BTEwpLCB0ID0gdCB8fCB7fTtcbiAgZnVuY3Rpb24gcihuLCBvKSB7XG4gICAgdmFyIGkgPSB0W25dO1xuICAgIHJldHVybiB0eXBlb2YgaSA9PSBcImZ1bmN0aW9uXCIgJiYgZSA+PSBvID8gaS5iaW5kKHQpIDogZnVuY3Rpb24oKSB7XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGVycm9yOiByKFwiZXJyb3JcIiwgSy5FUlJPUiksXG4gICAgd2FybjogcihcIndhcm5cIiwgSy5XQVJOKSxcbiAgICBpbmZvOiByKFwiaW5mb1wiLCBLLklORk8pLFxuICAgIGRlYnVnOiByKFwiZGVidWdcIiwgSy5ERUJVRyksXG4gICAgdmVyYm9zZTogcihcInZlcmJvc2VcIiwgSy5WRVJCT1NFKVxuICB9O1xufVxudmFyIFNpID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIG8sIGkgPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKG8gPSBuLm5leHQoKSkuZG9uZTsgKSBpLnB1c2goby52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBzID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBvICYmICFvLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59LCBraSA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBvID0gdC5sZW5ndGgsIGk7IG4gPCBvOyBuKyspXG4gICAgKGkgfHwgIShuIGluIHQpKSAmJiAoaSB8fCAoaSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgaVtuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQoaSB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBBaSA9IFwiZGlhZ1wiLCB5dCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgICAgZnVuY3Rpb24gdChvKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gW10sIHMgPSAwOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKVxuICAgICAgICAgICAgaVtzXSA9IGFyZ3VtZW50c1tzXTtcbiAgICAgICAgICB2YXIgYyA9IFFlKFwiZGlhZ1wiKTtcbiAgICAgICAgICBpZiAoYylcbiAgICAgICAgICAgIHJldHVybiBjW29dLmFwcGx5KGMsIGtpKFtdLCBTaShpKSwgITEpKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHZhciByID0gdGhpcywgbiA9IGZ1bmN0aW9uKG8sIGkpIHtcbiAgICAgICAgdmFyIHMsIGMsIGw7XG4gICAgICAgIGlmIChpID09PSB2b2lkIDAgJiYgKGkgPSB7IGxvZ0xldmVsOiBLLklORk8gfSksIG8gPT09IHIpIHtcbiAgICAgICAgICB2YXIgdSA9IG5ldyBFcnJvcihcIkNhbm5vdCB1c2UgZGlhZyBhcyB0aGUgbG9nZ2VyIGZvciBpdHNlbGYuIFBsZWFzZSB1c2UgYSBEaWFnTG9nZ2VyIGltcGxlbWVudGF0aW9uIGxpa2UgQ29uc29sZURpYWdMb2dnZXIgb3IgYSBjdXN0b20gaW1wbGVtZW50YXRpb25cIik7XG4gICAgICAgICAgcmV0dXJuIHIuZXJyb3IoKHMgPSB1LnN0YWNrKSAhPT0gbnVsbCAmJiBzICE9PSB2b2lkIDAgPyBzIDogdS5tZXNzYWdlKSwgITE7XG4gICAgICAgIH1cbiAgICAgICAgdHlwZW9mIGkgPT0gXCJudW1iZXJcIiAmJiAoaSA9IHtcbiAgICAgICAgICBsb2dMZXZlbDogaVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGQgPSBRZShcImRpYWdcIiksIHkgPSBDaSgoYyA9IGkubG9nTGV2ZWwpICE9PSBudWxsICYmIGMgIT09IHZvaWQgMCA/IGMgOiBLLklORk8sIG8pO1xuICAgICAgICBpZiAoZCAmJiAhaS5zdXBwcmVzc092ZXJyaWRlTWVzc2FnZSkge1xuICAgICAgICAgIHZhciBwID0gKGwgPSBuZXcgRXJyb3IoKS5zdGFjaykgIT09IG51bGwgJiYgbCAhPT0gdm9pZCAwID8gbCA6IFwiPGZhaWxlZCB0byBnZW5lcmF0ZSBzdGFja3RyYWNlPlwiO1xuICAgICAgICAgIGQud2FybihcIkN1cnJlbnQgbG9nZ2VyIHdpbGwgYmUgb3ZlcndyaXR0ZW4gZnJvbSBcIiArIHApLCB5Lndhcm4oXCJDdXJyZW50IGxvZ2dlciB3aWxsIG92ZXJ3cml0ZSBvbmUgYWxyZWFkeSByZWdpc3RlcmVkIGZyb20gXCIgKyBwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gR3QoXCJkaWFnXCIsIHksIHIsICEwKTtcbiAgICAgIH07XG4gICAgICByLnNldExvZ2dlciA9IG4sIHIuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB6dChBaSwgcik7XG4gICAgICB9LCByLmNyZWF0ZUNvbXBvbmVudExvZ2dlciA9IGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQaShvKTtcbiAgICAgIH0sIHIudmVyYm9zZSA9IHQoXCJ2ZXJib3NlXCIpLCByLmRlYnVnID0gdChcImRlYnVnXCIpLCByLmluZm8gPSB0KFwiaW5mb1wiKSwgci53YXJuID0gdChcIndhcm5cIiksIHIuZXJyb3IgPSB0KFwiZXJyb3JcIik7XG4gICAgfVxuICAgIHJldHVybiBlLmluc3RhbmNlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IGUoKSksIHRoaXMuX2luc3RhbmNlO1xuICAgIH0sIGU7XG4gIH0oKVxuKTtcbmZ1bmN0aW9uIElpKGUpIHtcbiAgcmV0dXJuIFN5bWJvbC5mb3IoZSk7XG59XG52YXIgUmkgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdmFyIHIgPSB0aGlzO1xuICAgICAgci5fY3VycmVudENvbnRleHQgPSB0ID8gbmV3IE1hcCh0KSA6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksIHIuZ2V0VmFsdWUgPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIHJldHVybiByLl9jdXJyZW50Q29udGV4dC5nZXQobik7XG4gICAgICB9LCByLnNldFZhbHVlID0gZnVuY3Rpb24obiwgbykge1xuICAgICAgICB2YXIgaSA9IG5ldyBlKHIuX2N1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIGkuX2N1cnJlbnRDb250ZXh0LnNldChuLCBvKSwgaTtcbiAgICAgIH0sIHIuZGVsZXRlVmFsdWUgPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIHZhciBvID0gbmV3IGUoci5fY3VycmVudENvbnRleHQpO1xuICAgICAgICByZXR1cm4gby5fY3VycmVudENvbnRleHQuZGVsZXRlKG4pLCBvO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGU7XG4gIH0oKVxuKSwgVGkgPSBuZXcgUmkoKSwgRmkgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgbywgaSA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEobyA9IG4ubmV4dCgpKS5kb25lOyApIGkucHVzaChvLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIHMgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG8gJiYgIW8uZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTtcbn0sIE5pID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCwgaTsgbiA8IG87IG4rKylcbiAgICAoaSB8fCAhKG4gaW4gdCkpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBpW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIE1pID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5hY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBUaTtcbiAgICB9LCBlLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgZm9yICh2YXIgbyA9IFtdLCBpID0gMzsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAgb1tpIC0gM10gPSBhcmd1bWVudHNbaV07XG4gICAgICByZXR1cm4gci5jYWxsLmFwcGx5KHIsIE5pKFtuXSwgRmkobyksICExKSk7XG4gICAgfSwgZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiByO1xuICAgIH0sIGUucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBEaSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBvLCBpID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShvID0gbi5uZXh0KCkpLmRvbmU7ICkgaS5wdXNoKG8udmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgbyAmJiAhby5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufSwgT2kgPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgbyA9IHQubGVuZ3RoLCBpOyBuIDwgbzsgbisrKVxuICAgIChpIHx8ICEobiBpbiB0KSkgJiYgKGkgfHwgKGkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIGlbbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KGkgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwga3QgPSBcImNvbnRleHRcIiwgTGkgPSBuZXcgTWkoKSwgcXQgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgZSgpKSwgdGhpcy5faW5zdGFuY2U7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0R2xvYmFsQ29udGV4dE1hbmFnZXIgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gR3Qoa3QsIHQsIHl0Lmluc3RhbmNlKCkpO1xuICAgIH0sIGUucHJvdG90eXBlLmFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYWN0aXZlKCk7XG4gICAgfSwgZS5wcm90b3R5cGUud2l0aCA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIGZvciAodmFyIG8sIGkgPSBbXSwgcyA9IDM7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspXG4gICAgICAgIGlbcyAtIDNdID0gYXJndW1lbnRzW3NdO1xuICAgICAgcmV0dXJuIChvID0gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKSkud2l0aC5hcHBseShvLCBPaShbdCwgciwgbl0sIERpKGkpLCAhMSkpO1xuICAgIH0sIGUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5iaW5kKHQsIHIpO1xuICAgIH0sIGUucHJvdG90eXBlLl9nZXRDb250ZXh0TWFuYWdlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFFlKGt0KSB8fCBMaTtcbiAgICB9LCBlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmRpc2FibGUoKSwgenQoa3QsIHl0Lmluc3RhbmNlKCkpO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgT3Q7XG4oZnVuY3Rpb24oZSkge1xuICBlW2UuTk9ORSA9IDBdID0gXCJOT05FXCIsIGVbZS5TQU1QTEVEID0gMV0gPSBcIlNBTVBMRURcIjtcbn0pKE90IHx8IChPdCA9IHt9KSk7XG52YXIgcm4gPSBcIjAwMDAwMDAwMDAwMDAwMDBcIiwgbm4gPSBcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsIFVpID0ge1xuICB0cmFjZUlkOiBubixcbiAgc3BhbklkOiBybixcbiAgdHJhY2VGbGFnczogT3QuTk9ORVxufSwgSGUgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0KSB7XG4gICAgICB0ID09PSB2b2lkIDAgJiYgKHQgPSBVaSksIHRoaXMuX3NwYW5Db250ZXh0ID0gdDtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLnNwYW5Db250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3BhbkNvbnRleHQ7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmFkZEV2ZW50ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkTGluayA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmFkZExpbmtzID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0U3RhdHVzID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUudXBkYXRlTmFtZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB9LCBlLnByb3RvdHlwZS5pc1JlY29yZGluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICExO1xuICAgIH0sIGUucHJvdG90eXBlLnJlY29yZEV4Y2VwdGlvbiA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB9LCBlO1xuICB9KClcbiksIEJ0ID0gSWkoXCJPcGVuVGVsZW1ldHJ5IENvbnRleHQgS2V5IFNQQU5cIik7XG5mdW5jdGlvbiBZdChlKSB7XG4gIHJldHVybiBlLmdldFZhbHVlKEJ0KSB8fCB2b2lkIDA7XG59XG5mdW5jdGlvbiBqaSgpIHtcbiAgcmV0dXJuIFl0KHF0LmdldEluc3RhbmNlKCkuYWN0aXZlKCkpO1xufVxuZnVuY3Rpb24gSHQoZSwgdCkge1xuICByZXR1cm4gZS5zZXRWYWx1ZShCdCwgdCk7XG59XG5mdW5jdGlvbiB4aShlKSB7XG4gIHJldHVybiBlLmRlbGV0ZVZhbHVlKEJ0KTtcbn1cbmZ1bmN0aW9uICRpKGUsIHQpIHtcbiAgcmV0dXJuIEh0KGUsIG5ldyBIZSh0KSk7XG59XG5mdW5jdGlvbiBvbihlKSB7XG4gIHZhciB0O1xuICByZXR1cm4gKHQgPSBZdChlKSkgPT09IG51bGwgfHwgdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdC5zcGFuQ29udGV4dCgpO1xufVxudmFyIFZpID0gL14oWzAtOWEtZl17MzJ9KSQvaSwgR2kgPSAvXlswLTlhLWZdezE2fSQvaTtcbmZ1bmN0aW9uIHppKGUpIHtcbiAgcmV0dXJuIFZpLnRlc3QoZSkgJiYgZSAhPT0gbm47XG59XG5mdW5jdGlvbiBxaShlKSB7XG4gIHJldHVybiBHaS50ZXN0KGUpICYmIGUgIT09IHJuO1xufVxuZnVuY3Rpb24gYW4oZSkge1xuICByZXR1cm4gemkoZS50cmFjZUlkKSAmJiBxaShlLnNwYW5JZCk7XG59XG5mdW5jdGlvbiBCaShlKSB7XG4gIHJldHVybiBuZXcgSGUoZSk7XG59XG52YXIgQXQgPSBxdC5nZXRJbnN0YW5jZSgpLCBzbiA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuc3RhcnRTcGFuID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgbiA9PT0gdm9pZCAwICYmIChuID0gQXQuYWN0aXZlKCkpO1xuICAgICAgdmFyIG8gPSAhIShyICE9IG51bGwgJiYgci5yb290KTtcbiAgICAgIGlmIChvKVxuICAgICAgICByZXR1cm4gbmV3IEhlKCk7XG4gICAgICB2YXIgaSA9IG4gJiYgb24obik7XG4gICAgICByZXR1cm4gWWkoaSkgJiYgYW4oaSkgPyBuZXcgSGUoaSkgOiBuZXcgSGUoKTtcbiAgICB9LCBlLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbih0LCByLCBuLCBvKSB7XG4gICAgICB2YXIgaSwgcywgYztcbiAgICAgIGlmICghKGFyZ3VtZW50cy5sZW5ndGggPCAyKSkge1xuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID09PSAyID8gYyA9IHIgOiBhcmd1bWVudHMubGVuZ3RoID09PSAzID8gKGkgPSByLCBjID0gbikgOiAoaSA9IHIsIHMgPSBuLCBjID0gbyk7XG4gICAgICAgIHZhciBsID0gcyA/PyBBdC5hY3RpdmUoKSwgdSA9IHRoaXMuc3RhcnRTcGFuKHQsIGksIGwpLCBkID0gSHQobCwgdSk7XG4gICAgICAgIHJldHVybiBBdC53aXRoKGQsIGMsIHZvaWQgMCwgdSk7XG4gICAgICB9XG4gICAgfSwgZTtcbiAgfSgpXG4pO1xuZnVuY3Rpb24gWWkoZSkge1xuICByZXR1cm4gdHlwZW9mIGUgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgZS5zcGFuSWQgPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgZS50cmFjZUlkID09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGUudHJhY2VGbGFncyA9PSBcIm51bWJlclwiO1xufVxudmFyIEhpID0gbmV3IHNuKCksIEppID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCwgciwgbiwgbykge1xuICAgICAgdGhpcy5fcHJvdmlkZXIgPSB0LCB0aGlzLm5hbWUgPSByLCB0aGlzLnZlcnNpb24gPSBuLCB0aGlzLm9wdGlvbnMgPSBvO1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuc3RhcnRTcGFuID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldFRyYWNlcigpLnN0YXJ0U3Bhbih0LCByLCBuKTtcbiAgICB9LCBlLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbih0LCByLCBuLCBvKSB7XG4gICAgICB2YXIgaSA9IHRoaXMuX2dldFRyYWNlcigpO1xuICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkoaS5zdGFydEFjdGl2ZVNwYW4sIGksIGFyZ3VtZW50cyk7XG4gICAgfSwgZS5wcm90b3R5cGUuX2dldFRyYWNlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlKVxuICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGU7XG4gICAgICB2YXIgdCA9IHRoaXMuX3Byb3ZpZGVyLmdldERlbGVnYXRlVHJhY2VyKHRoaXMubmFtZSwgdGhpcy52ZXJzaW9uLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgcmV0dXJuIHQgPyAodGhpcy5fZGVsZWdhdGUgPSB0LCB0aGlzLl9kZWxlZ2F0ZSkgOiBIaTtcbiAgICB9LCBlO1xuICB9KClcbiksIEtpID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICByZXR1cm4gbmV3IHNuKCk7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBXaSA9IG5ldyBLaSgpLCBmciA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgdmFyIG87XG4gICAgICByZXR1cm4gKG8gPSB0aGlzLmdldERlbGVnYXRlVHJhY2VyKHQsIHIsIG4pKSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDogbmV3IEppKHRoaXMsIHQsIHIsIG4pO1xuICAgIH0sIGUucHJvdG90eXBlLmdldERlbGVnYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdDtcbiAgICAgIHJldHVybiAodCA9IHRoaXMuX2RlbGVnYXRlKSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogV2k7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0RGVsZWdhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICB0aGlzLl9kZWxlZ2F0ZSA9IHQ7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0RGVsZWdhdGVUcmFjZXIgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICB2YXIgbztcbiAgICAgIHJldHVybiAobyA9IHRoaXMuX2RlbGVnYXRlKSA9PT0gbnVsbCB8fCBvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvLmdldFRyYWNlcih0LCByLCBuKTtcbiAgICB9LCBlO1xuICB9KClcbiksIFhlO1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLklOVEVSTkFMID0gMF0gPSBcIklOVEVSTkFMXCIsIGVbZS5TRVJWRVIgPSAxXSA9IFwiU0VSVkVSXCIsIGVbZS5DTElFTlQgPSAyXSA9IFwiQ0xJRU5UXCIsIGVbZS5QUk9EVUNFUiA9IDNdID0gXCJQUk9EVUNFUlwiLCBlW2UuQ09OU1VNRVIgPSA0XSA9IFwiQ09OU1VNRVJcIjtcbn0pKFhlIHx8IChYZSA9IHt9KSk7XG52YXIgeWU7XG4oZnVuY3Rpb24oZSkge1xuICBlW2UuVU5TRVQgPSAwXSA9IFwiVU5TRVRcIiwgZVtlLk9LID0gMV0gPSBcIk9LXCIsIGVbZS5FUlJPUiA9IDJdID0gXCJFUlJPUlwiO1xufSkoeWUgfHwgKHllID0ge30pKTtcbnZhciBOZSA9IHF0LmdldEluc3RhbmNlKCksIEl0ID0gXCJ0cmFjZVwiLCBaaSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgICAgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciA9IG5ldyBmcigpLCB0aGlzLndyYXBTcGFuQ29udGV4dCA9IEJpLCB0aGlzLmlzU3BhbkNvbnRleHRWYWxpZCA9IGFuLCB0aGlzLmRlbGV0ZVNwYW4gPSB4aSwgdGhpcy5nZXRTcGFuID0gWXQsIHRoaXMuZ2V0QWN0aXZlU3BhbiA9IGppLCB0aGlzLmdldFNwYW5Db250ZXh0ID0gb24sIHRoaXMuc2V0U3BhbiA9IEh0LCB0aGlzLnNldFNwYW5Db250ZXh0ID0gJGk7XG4gICAgfVxuICAgIHJldHVybiBlLmdldEluc3RhbmNlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IGUoKSksIHRoaXMuX2luc3RhbmNlO1xuICAgIH0sIGUucHJvdG90eXBlLnNldEdsb2JhbFRyYWNlclByb3ZpZGVyID0gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIHIgPSBHdChJdCwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciwgeXQuaW5zdGFuY2UoKSk7XG4gICAgICByZXR1cm4gciAmJiB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLnNldERlbGVnYXRlKHQpLCByO1xuICAgIH0sIGUucHJvdG90eXBlLmdldFRyYWNlclByb3ZpZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gUWUoSXQpIHx8IHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXI7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhY2VyUHJvdmlkZXIoKS5nZXRUcmFjZXIodCwgcik7XG4gICAgfSwgZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgenQoSXQsIHl0Lmluc3RhbmNlKCkpLCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyID0gbmV3IGZyKCk7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBEZSA9IFppLmdldEluc3RhbmNlKCk7XG5jb25zdCBRaSA9IGFzeW5jIChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBEZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBvID0gTmUuYWN0aXZlKCksIGkgPSBuLnN0YXJ0U3BhbihcbiAgICBgY2RlLiR7dC50eXBlfWAsXG4gICAge1xuICAgICAga2luZDogWGUuQ0xJRU5ULFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBcIm1lc3NhZ2UudHlwZVwiOiB0LnR5cGUsXG4gICAgICAgIC4uLmUudHJhY2luZ0NvbnRleHQgJiYge1xuICAgICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogZS50cmFjaW5nQ29udGV4dC5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IGUudHJhY2luZ0NvbnRleHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZm9ybUlkXCI6IGUudHJhY2luZ0NvbnRleHQuZm9ybUlkLFxuICAgICAgICAgIFwib2pzLnZlcnNpb25cIjogZS50cmFjaW5nQ29udGV4dC52ZXJzaW9uLFxuICAgICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiBlLnRyYWNpbmdDb250ZXh0LnJlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IGUudHJhY2luZ0NvbnRleHQuYmFzZVVybCxcbiAgICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiBlLnRyYWNpbmdDb250ZXh0LnJlZmVycmVyXG4gICAgICAgIH0sXG4gICAgICAgIFwiY2RlLm1lc3NhZ2UudHlwZVwiOiB0LnR5cGUsXG4gICAgICAgIFwiY2RlLm1lc3NhZ2UucGF5bG9hZFwiOiBKU09OLnN0cmluZ2lmeSh0LnBheWxvYWQpXG4gICAgICB9XG4gICAgfSxcbiAgICBvXG4gICk7XG4gIHJldHVybiBOZS53aXRoKERlLnNldFNwYW4obywgaSksIGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcyA9IGF3YWl0IHIoKTtcbiAgICAgIHJldHVybiBpLnNldFN0YXR1cyh7IGNvZGU6IHllLk9LIH0pLCBzO1xuICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgIHRocm93IGkuc2V0U3RhdHVzKHtcbiAgICAgICAgY29kZTogeWUuRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IHMgaW5zdGFuY2VvZiBFcnJvciA/IHMubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiXG4gICAgICB9KSwgcztcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaS5lbmQoKTtcbiAgICB9XG4gIH0pO1xufSwgY3QgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gRGUuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKSwgbiA9IE5lLmFjdGl2ZSgpLCBvID0gci5zdGFydFNwYW4oXG4gICAgYGZvcm0uJHtlLnNwYW5OYW1lfWAsXG4gICAge1xuICAgICAga2luZDogWGUuQ0xJRU5ULFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IGUuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogZS5kZXZpY2VUb2tlbixcbiAgICAgICAgXCJvanMuZm9ybUlkXCI6IGUuZm9ybUlkLFxuICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IGUudmVyc2lvbixcbiAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IGUucmVsZWFzZVZlcnNpb24sXG4gICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IGUuYmFzZVVybCxcbiAgICAgICAgXCJvanMucmVmZXJyZXJcIjogZS5yZWZlcnJlcixcbiAgICAgICAgLi4uZS5wYXltZW50Um91dGVJZCAmJiB7IFwicGF5bWVudC5yb3V0ZV9pZFwiOiBlLnBheW1lbnRSb3V0ZUlkIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG5cbiAgKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBpID0gYXdhaXQgdCgpO1xuICAgIHJldHVybiBvLnNldFN0YXR1cyh7IGNvZGU6IHllLk9LIH0pLCBpO1xuICB9IGNhdGNoIChpKSB7XG4gICAgY29uc3QgcyA9IGkgaW5zdGFuY2VvZiBFcnJvciA/IGkubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiO1xuICAgIHRocm93IG8uc2V0U3RhdHVzKHtcbiAgICAgIGNvZGU6IHllLkVSUk9SLFxuICAgICAgbWVzc2FnZTogc1xuICAgIH0pLCBpO1xuICB9IGZpbmFsbHkge1xuICAgIG8uZW5kKCk7XG4gIH1cbn07XG5jbGFzcyBjbiBleHRlbmRzIHRvIHtcbiAgY29uc3RydWN0b3IodCkge1xuICAgIGNvbnN0IHIgPSBgJHt0Lm1lc3NhZ2V9YDtcbiAgICBzdXBlcihyKSwgdGhpcy5yZXNwb25zZSA9IHQ7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IFYgPSBhc3luYyAoZSwgdCwgciwgbikgPT4gUWkoZSwgdCwgYXN5bmMgKCkgPT4ge1xuICBuICYmIGcobiwge1xuICAgIC4uLnRcbiAgfSk7XG4gIGNvbnN0IG8gPSBhd2FpdCBlLnNlbmQodCk7XG4gIGlmIChlcyhvKSlcbiAgICB0aHJvdyBnKFwiY2RlX3Jlc3BvbnNlX2Vycm9yXCIsIHtcbiAgICAgIC4uLm9cbiAgICB9KSwgbmV3IGNuKG8pO1xuICBpZiAoIVhpKG8sIHIpKSB7XG4gICAgY29uc3QgaSA9IHIuc2FmZVBhcnNlKG8pO1xuICAgIHRocm93IGkuc3VjY2VzcyA/IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIikgOiAoY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgciwgXCJBY3R1YWw6XCIsIG8pLCBpLmVycm9yKTtcbiAgfVxuICByZXR1cm4gbiAmJiBnKG4sIHtcbiAgICAuLi5vXG4gIH0pLCBvO1xufSksIFhpID0gKGUsIHQpID0+IHQuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsIGVzID0gKGUpID0+IEZvLnNhZmVQYXJzZShlKS5zdWNjZXNzLCB0cyA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBWKGUsIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiB0IH0sIHhyKSwgVCA9IGFzeW5jIChlKSA9PiBhd2FpdCBWKGUsIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCAkciksIGhlID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFYoXG4gIGUsXG4gIHsgdHlwZTogXCJ2Ml9zdGFydF9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogdCB9LFxuICB6cixcbiAgXCJzdGFydF9wYXltZW50X2Zsb3dcIlxuKSwgbG4gPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgVihcbiAgZSxcbiAgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIiwgcGF5bG9hZDogdCB9LFxuICBCbyxcbiAgXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCJcbiksIHJzID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgZyhcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwge1xuICAgIC4uLnRcbiAgfSk7XG4gIGNvbnN0IHIgPSBhd2FpdCBWKGUsIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHBheWxvYWQ6IHQgfSwgenIpO1xuICByZXR1cm4gZyhcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJfcmVzdWx0XCIsIHtcbiAgICAuLi5yXG4gIH0pLCByO1xufSwgJCA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBWKFxuICBlLFxuICB7IHR5cGU6IFwiY29uZmlybV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogdCB9LFxuICBUbyxcbiAgXCJjb25maXJtX3BheW1lbnRfZmxvd1wiXG4pLCBucyA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBWKFxuICBlLFxuICB7IHR5cGU6IFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogdCB9LFxuICBWcixcbiAgXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiXG4pLCBvcyA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBWKFxuICBlLFxuICB7IHR5cGU6IFwiY2hlY2tfaWZfcG9wdXBfd2luZG93X3ZlcmlmaWVkXCIsIHBheWxvYWQ6IHQgfSxcbiAgUm8sXG4gIFwiY2hlY2tfaWZfcG9wdXBfd2luZG93X3ZlcmlmaWVkXCJcbiksIGFzID0gYXN5bmMgKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IGF3YWl0IHRzKGUsIHtcbiAgICBzZWN1cmVfdG9rZW46IHQsXG4gICAgcHJvbW90aW9uX2NvZGU6IHJcbiAgfSksIG8gPSBuZXcgU2V0KG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMuY3VycmVuY3kpKTtcbiAgaWYgKG8uc2l6ZSAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHtvLnNpemV9YCk7XG4gIGNvbnN0IGkgPSBvLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiLCBzID0gYWEobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5yZW1haW5pbmdfYW1vdW50X2F0b20pKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeTogaSxcbiAgICBhbW91bnRBdG9tOiBzXG4gIH07XG59LCBmZSA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiB7XG4gIGlmIChyKVxuICAgIHJldHVybiB7IGFtb3VudEF0b206IDAsIGN1cnJlbmN5OiBcInVzZFwiIH07XG4gIHtcbiAgICBuID0gbiB8fCB2b2lkIDA7XG4gICAgY29uc3QgbyA9IGF3YWl0IGFzKGUsIHQsIG4pO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IG8uYW1vdW50QXRvbSwgY3VycmVuY3k6IG8uY3VycmVuY3kgfTtcbiAgfVxufSwgdW4gPSBhc3luYyAoZSwgdCkgPT4ge1xuICBpZiAoZS5zaXplID09PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20oZS52YWx1ZXMoKSkubWFwKFxuICAgICAgKG4pID0+IFYobiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZDogdCB9LCBrbylcbiAgICApXG4gICk7XG59LCB5ciA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBWKFxuICBlLFxuICB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkOiB0IH0sXG4gIEtlLFxuICBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIlxuKSwgaXMgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgVihlLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogdCB9LCBWciwgXCJzZXR1cF9jaGVja291dFwiKSwgSnQgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgVihlLCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZDogdCB9LCBLZSwgXCJwZXJmb3JtX2NoZWNrb3V0XCIpLCBkbiA9IDFlMywgc3MgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zb2xlLmxvZyh0KTtcbiAgY29uc3QgbiA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IGUsXG4gICAgZGVidWc6ICEwLFxuICAgIHRpbWVvdXQ6IGRuLFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KS5wcm9taXNlLCBvID0gYXdhaXQgVihuLCB7IHR5cGU6IFwicGluZy0zZHMtc3RhdHVzXCIgfSwgQW8pO1xuICByZXR1cm4gY29uc29sZS5sb2coXCLwn5+iIENERSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwhIFN0b3BwaW5nIHBvbGxpbmcuLi4gUmVzdWx0OlwiLCBvKSwgbztcbn0sIEV0ID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFYoXG4gIGUsXG4gIHsgdHlwZTogXCJwcmVwYXJlX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiB0IH0sXG4gIEhvLFxuICBcInByZXBhcmVfcGF5bWVudF9mbG93XCJcbiksIHBuID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IFYoXG4gICAgICBlLFxuICAgICAgeyB0eXBlOiBcImdldF9zdGFuZGFyZGl6ZWRfZXJyb3JfY29kZVwiLCBwYXlsb2FkOiB7IG1lc3NhZ2U6IHQgfSB9LFxuICAgICAgWW9cbiAgICApKS5lcnJvcl9jb2RlO1xuICB9IGNhdGNoIChyKSB7XG4gICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJbY2RlLWNsaWVudF0gRXJyb3IgZHVyaW5nIGdldFN0YW5kYXJkaXplZEVycm9yQ29kZTpcIiwgWihyKSksIFwiUEFZTUVOVF9GQUlMRURfR0VORVJJQ1wiO1xuICB9XG59LCBjcyA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBWKFxuICBlLFxuICB7IHR5cGU6IFwic2V0X3VzZXJfZGV2aWNlX3Rva2VuXCIsIHBheWxvYWQ6IHsgZGV2aWNlX3Rva2VuOiB0IH0gfSxcbiAgSm9cbiksIGxzID0gYXN5bmMgKGUpID0+IHtcbiAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgIWUpIHJldHVybiAhMTtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0geyB0eXBlOiBcInBpbmdcIiB9LCByID0gYXdhaXQgZS5zZW5kKHQpO1xuICAgIGlmIChyICE9PSAhMClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHIpfWApO1xuICAgIHJldHVybiAhMDtcbiAgfSBjYXRjaCAodCkge1xuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpcIiwgdCksICExO1xuICB9XG59LCB1cyA9IChlLCB0KSA9PiAhIWUgJiYgdCwgbW4gPSBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCIsIGZuID0gXCIwMTIzNDU2Nzg5QUJDREVGR0hKS01OUFFSU1RWV1hZWlwiLCBKZSA9IDMyLCBkcyA9IDE2LCB5biA9IDEwLCBfciA9IDI4MTQ3NDk3NjcxMDY1NTtcbnZhciBQZTtcbihmdW5jdGlvbihlKSB7XG4gIGUuQmFzZTMySW5jb3JyZWN0RW5jb2RpbmcgPSBcIkIzMl9FTkNfSU5WQUxJRFwiLCBlLkRlY29kZVRpbWVJbnZhbGlkQ2hhcmFjdGVyID0gXCJERUNfVElNRV9DSEFSXCIsIGUuRGVjb2RlVGltZVZhbHVlTWFsZm9ybWVkID0gXCJERUNfVElNRV9NQUxGT1JNRURcIiwgZS5FbmNvZGVUaW1lTmVnYXRpdmUgPSBcIkVOQ19USU1FX05FR1wiLCBlLkVuY29kZVRpbWVTaXplRXhjZWVkZWQgPSBcIkVOQ19USU1FX1NJWkVfRVhDRUVEXCIsIGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkID0gXCJFTkNfVElNRV9NQUxGT1JNRURcIiwgZS5QUk5HRGV0ZWN0RmFpbHVyZSA9IFwiUFJOR19ERVRFQ1RcIiwgZS5VTElESW52YWxpZCA9IFwiVUxJRF9JTlZBTElEXCIsIGUuVW5leHBlY3RlZCA9IFwiVU5FWFBFQ1RFRFwiLCBlLlVVSURJbnZhbGlkID0gXCJVVUlEX0lOVkFMSURcIjtcbn0pKFBlIHx8IChQZSA9IHt9KSk7XG5jbGFzcyBHZSBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IodCwgcikge1xuICAgIHN1cGVyKGAke3J9ICgke3R9KWApLCB0aGlzLm5hbWUgPSBcIlVMSURFcnJvclwiLCB0aGlzLmNvZGUgPSB0O1xuICB9XG59XG5mdW5jdGlvbiBwcyhlKSB7XG4gIGxldCB0ID0gTWF0aC5mbG9vcihlKCkgKiBKZSk7XG4gIHJldHVybiB0ID09PSBKZSAmJiAodCA9IEplIC0gMSksIGZuLmNoYXJBdCh0KTtcbn1cbmZ1bmN0aW9uIG1zKGUpIHtcbiAgY29uc3QgdCA9IGZzKCksIHIgPSB0ICYmICh0LmNyeXB0byB8fCB0Lm1zQ3J5cHRvKSB8fCBudWxsO1xuICBpZiAodHlwZW9mIChyID09IG51bGwgPyB2b2lkIDAgOiByLmdldFJhbmRvbVZhbHVlcykgPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb25zdCBuID0gbmV3IFVpbnQ4QXJyYXkoMSk7XG4gICAgICByZXR1cm4gci5nZXRSYW5kb21WYWx1ZXMobiksIG5bMF0gLyAyNTU7XG4gICAgfTtcbiAgaWYgKHR5cGVvZiAociA9PSBudWxsID8gdm9pZCAwIDogci5yYW5kb21CeXRlcykgPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAoKSA9PiByLnJhbmRvbUJ5dGVzKDEpLnJlYWRVSW50OCgpIC8gMjU1O1xuICB0aHJvdyBuZXcgR2UoUGUuUFJOR0RldGVjdEZhaWx1cmUsIFwiRmFpbGVkIHRvIGZpbmQgYSByZWxpYWJsZSBQUk5HXCIpO1xufVxuZnVuY3Rpb24gZnMoKSB7XG4gIHJldHVybiBocygpID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgPCBcInVcIiA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgPCBcInVcIiA/IGdsb2JhbCA6IHR5cGVvZiBnbG9iYWxUaGlzIDwgXCJ1XCIgPyBnbG9iYWxUaGlzIDogbnVsbDtcbn1cbmZ1bmN0aW9uIHlzKGUsIHQpIHtcbiAgbGV0IHIgPSBcIlwiO1xuICBmb3IgKDsgZSA+IDA7IGUtLSlcbiAgICByID0gcHModCkgKyByO1xuICByZXR1cm4gcjtcbn1cbmZ1bmN0aW9uIF9zKGUsIHQgPSB5bikge1xuICBpZiAoaXNOYU4oZSkpXG4gICAgdGhyb3cgbmV3IEdlKFBlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhIG51bWJlcjogJHtlfWApO1xuICBpZiAoZSA+IF9yKVxuICAgIHRocm93IG5ldyBHZShQZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkLCBgQ2Fubm90IGVuY29kZSBhIHRpbWUgbGFyZ2VyIHRoYW4gJHtfcn06ICR7ZX1gKTtcbiAgaWYgKGUgPCAwKVxuICAgIHRocm93IG5ldyBHZShQZS5FbmNvZGVUaW1lTmVnYXRpdmUsIGBUaW1lIG11c3QgYmUgcG9zaXRpdmU6ICR7ZX1gKTtcbiAgaWYgKE51bWJlci5pc0ludGVnZXIoZSkgPT09ICExKVxuICAgIHRocm93IG5ldyBHZShQZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYW4gaW50ZWdlcjogJHtlfWApO1xuICBsZXQgciwgbiA9IFwiXCI7XG4gIGZvciAobGV0IG8gPSB0OyBvID4gMDsgby0tKVxuICAgIHIgPSBlICUgSmUsIG4gPSBmbi5jaGFyQXQocikgKyBuLCBlID0gKGUgLSByKSAvIEplO1xuICByZXR1cm4gbjtcbn1cbmZ1bmN0aW9uIGhzKCkge1xuICByZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlIDwgXCJ1XCIgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlO1xufVxuZnVuY3Rpb24gZ3MoZSwgdCkge1xuICBjb25zdCByID0gbXMoKSwgbiA9IERhdGUubm93KCk7XG4gIHJldHVybiBfcyhuLCB5bikgKyB5cyhkcywgcik7XG59XG5jb25zdCBfbiA9IFwib3BfYW5hbHl0aWNzX2RldmljZV90b2tlblwiLCBobiA9ICgpID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjtcIikuZmluZCgocikgPT4gci5pbmNsdWRlcyhfbikpO1xuICBpZiAoZSlcbiAgICByZXR1cm4gZS5zcGxpdChcIj1cIilbMV07XG4gIGNvbnN0IHQgPSBncygpO1xuICByZXR1cm4gd3ModCksIHQ7XG59LCB3cyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTtcbiAgdC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkgKyAxKSwgZG9jdW1lbnQuY29va2llID0gYCR7X259PSR7ZX07IHBhdGg9LzsgZXhwaXJlcz0ke3QudG9VVENTdHJpbmcoKX1gO1xufSwgZ24gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhlKS5mb3JFYWNoKChbciwgbl0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbyA9IEZyLnBhcnNlKHIpO1xuICAgICAgQXJyYXkuaXNBcnJheShuKSA/IHRbb10gPSBuIDogQXJyYXkuaXNBcnJheShuLl9lcnJvcnMpICYmICh0W29dID0gbi5fZXJyb3JzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pLCB0O1xufSwgSiA9IChlLCB0KSA9PiBBcnJheS5mcm9tKGUucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKS5yZWR1Y2UoKG8sIGkpID0+IHtcbiAgY29uc3QgcyA9IGkuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICByZXR1cm4gcyA/IHsgLi4ubywgW3NdOiBpLnZhbHVlIH0gOiBvO1xufSwge30pLCB2cyA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIFBvLnBhcnNlKGUpO1xuICB9IGNhdGNoICh0KSB7XG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgZXZlbnQgcGF5bG9hZDpcIiwgZSwgdCksIHQ7XG4gIH1cbn0sIGJzID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZSwjYWR5ZW4tY29udGFpbmVyLCNhZHllbi1jb250YWluZXI+KnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIiwgd24gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICB0LmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke2JzfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke2V9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwidGhyZWUtZHMtaWZyYW1lXCIgdGl0bGU9XCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCIgYWxsb3c9XCJwYXltZW50XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIG4gPSByLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICBuLmFwcGVuZENoaWxkKHQuY29udGVudC5jbG9uZU5vZGUoITApKTtcbiAgY29uc3QgbyA9IG4ucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIGkgPSBuLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksIHsgaG9zdDogciwgaWZyYW1lOiBvLCBjYW5jZWxCdXR0b246IGkgfTtcbn07XG5mdW5jdGlvbiBFcyhlLCB0LCByKSB7XG4gIGNvbnN0IG4gPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGkgPSBhd2FpdCBzcyhlLCByKTtcbiAgICAgIGkgJiYgKGNsZWFySW50ZXJ2YWwobyksIHQoaSkpO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgfTtcbiAgbigpO1xuICBjb25zdCBvID0gc2V0SW50ZXJ2YWwobiwgZG4pO1xuICByZXR1cm4gbztcbn1cbmZ1bmN0aW9uIFBzKHtcbiAgZWxlbWVudHM6IGUsXG4gIHBvbGxpbmdJbnRlcnZhbDogdCxcbiAgcmVzb2x2ZTogclxufSkge1xuICBjb25zdCBuID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwodCksIGUuaG9zdC5yZW1vdmUoKSwgcih7IHN0YXR1czogRC5DQU5DRUxMRUQgfSk7XG4gIH07XG4gIHJldHVybiBlLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbiksICgpID0+IHtcbiAgICBlLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbik7XG4gIH07XG59XG5hc3luYyBmdW5jdGlvbiBudChlKSB7XG4gIGNvbnN0IHsgdXJsOiB0LCBiYXNlVXJsOiByIH0gPSBlLCBuID0gd24odCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgobykgPT4ge1xuICAgIGNvbnN0IGkgPSAobCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIG4uaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyksIG8obCksIGMgPT0gbnVsbCB8fCBjKCk7XG4gICAgfSwgcyA9IEVzKG4uaWZyYW1lLCBpLCBuZXcgVVJMKHIpLm9yaWdpbiksIGMgPSBQcyh7XG4gICAgICBlbGVtZW50czogbixcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogcyxcbiAgICAgIHJlc29sdmU6IG9cbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCB2biA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHQgPSBhd2FpdCBudChlKTtcbiAgaWYgKHQuc3RhdHVzID09PSBELkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHQuc3RhdHVzID09PSBELkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIHJldHVybiB0LnN0YXR1cyAhPT0gRC5TVUNDRVNTICYmIGd0KHQuc3RhdHVzKSwge1xuICAgIGhyZWY6IHQuaHJlZlxuICB9O1xufSwgQ3MgPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gd2luZG93Lm9wZW4odCwgXCJfYmxhbmtcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgcmV0dXJuIHI7XG59LCBibiA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiB7XG4gIGNvbnN0IHsgZXJyX186IG8gfSA9IFMoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoaSwgcykgPT4ge1xuICAgIGNvbnN0IGMgPSBDcyhlLCBuKSwgbCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHUgPSBhd2FpdCBvcyh0LCByKTtcbiAgICAgICAgaWYgKHUucHJlc2VudClcbiAgICAgICAgICBjbGVhckludGVydmFsKGwpLCBjLmNsb3NlKCksIGkoeyBocmVmOiB1LmhyZWYgfSk7XG4gICAgICAgIGVsc2UgaWYgKGMuY2xvc2VkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlfSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBvKFoodSkpLCBjbGVhckludGVydmFsKGwpLCBzKFoodSkpO1xuICAgICAgfVxuICAgIH0sIDFlMyk7XG4gIH0pO1xufSwgeyBsb2dfXzogU3MsIGVycl9fOiBLdCB9ID0gUyhcImFpcndhbGxleC1jY1wiKSwga3MgPSB6Lm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6LnN0cmluZygpXG59KSwgQXMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0ga3Muc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2Vzcykge1xuICAgIGNvbnN0IHIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YDtcbiAgICB0aHJvdyBLdChuKSwgbmV3IEVycm9yKHIpO1xuICB9XG4gIHJldHVybiB0LmRhdGE7XG59LCBFbiA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBJcyA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IG5ldyBVUkwoZSA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCF0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gU3MoYEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtJbnRlbnQgSUQ6ICR7dH1dYCksIHQ7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBjb25zdCByID0gXCJFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IEt0KHIsIGBSZXN1bHRpbmcgVVJMOiAke2V9LlxuRXJyb3I6ICR7Wih0KX1gKSwgbmV3IEVycm9yKHIpO1xuICB9XG59LCBQbiA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBBcyh0KSwgbiA9IGF3YWl0IHZuKHsgdXJsOiByW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSksIG8gPSBJcyhuLmhyZWYgPz8gXCJcIiksIGkgPSByW1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAoaSAhPT0gbykge1xuICAgIGNvbnN0IGMgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIGwgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7b30pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHtpfSkuYDtcbiAgICB0aHJvdyBLdChsKSwgbmV3IEVycm9yKGMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBvLFxuICAgICAgY29uc2VudF9pZDogcltcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xufSwgQ24gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSksIFNuID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KSwgQiA9IHouZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCIsIFwiYWR5ZW5cIl0pO1xuQi5FbnVtLnN0cmlwZTtcbmNvbnN0IGtuID0gKHtcbiAgc2NyaXB0SWQ6IGUsXG4gIHNyYzogdCxcbiAgY2hlY2tMb2FkZWRGbjogclxufSkgPT4ge1xuICBjb25zdCBuID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKG8sIGkpID0+IHtcbiAgICBsZXQgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgcy5zcmMgPSB0LCBzLmlkID0gZSwgcy5hc3luYyA9ICEwO1xuICAgIGNvbnN0IGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtcbiAgICByKCkgPyBvKCkgOiBjID8gcyA9IGMgOiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHMpLCBzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImxvYWRcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgbi5hYm9ydCgpLCBvKCk7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IG4uc2lnbmFsIH1cbiAgICApLCBzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImVycm9yXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIG4uYWJvcnQoKSwgaShcIkZhaWxlZCB0byBsb2FkIHRoZSBzY3JpcHRcIik7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IG4uc2lnbmFsIH1cbiAgICApO1xuICB9KTtcbn0sIFd0ID0gKCkgPT4ga24oe1xuICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2FwcGxlX3BheV9zZGtcIixcbiAgc3JjOiBcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbS9qc2FwaS8xLmxhdGVzdC9hcHBsZS1wYXktc2RrLmpzXCIsXG4gIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhIXdpbmRvdy5BcHBsZVBheVNES1xufSksIFp0ID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IHQudG9rZW4ucGF5bWVudE1ldGhvZC5iaWxsaW5nQ29udGFjdCwgbiA9IHQuYmlsbGluZ0NvbnRhY3QsIG8gPSB0LnNoaXBwaW5nQ29udGFjdCwgaSA9IHsgLi4uZSB9O1xuICBpZiAociB8fCBuIHx8IG8pIHtcbiAgICBpW2YuRU1BSUxdID0gaVtmLkVNQUlMXSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5lbWFpbEFkZHJlc3MpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmVtYWlsQWRkcmVzcykgfHwgKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uZW1haWxBZGRyZXNzKSB8fCBcIm9wX3VuZmlsbGVkQGVtYWlsLmNvbVwiLCBpW2YuQ09VTlRSWV0gPSBpW2YuQ09VTlRSWV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuY291bnRyeUNvZGUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmNvdW50cnlDb2RlKSB8fCAobyA9PSBudWxsID8gdm9pZCAwIDogby5jb3VudHJ5Q29kZSkgfHwgXCJVU1wiLCBpW2YuWklQX0NPREVdID0gaVtmLlpJUF9DT0RFXSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5wb3N0YWxDb2RlKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5wb3N0YWxDb2RlKSB8fCAobyA9PSBudWxsID8gdm9pZCAwIDogby5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgcyA9IGlbZi5GSVJTVF9OQU1FXSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5naXZlbk5hbWUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmdpdmVuTmFtZSkgfHwgKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uZ2l2ZW5OYW1lKSB8fCBcIlwiLCBjID0gaVtmLkxBU1RfTkFNRV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZmFtaWx5TmFtZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZmFtaWx5TmFtZSkgfHwgKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uZmFtaWx5TmFtZSkgfHwgXCJcIjtcbiAgICBzIHx8IGMgPyAoaVtmLkZJUlNUX05BTUVdID0gcywgaVtmLkxBU1RfTkFNRV0gPSBjKSA6IChpW2YuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIGlbZi5MQVNUX05BTUVdID0gXCJcIik7XG4gIH1cbiAgcmV0dXJuIGk7XG59O1xuei5vYmplY3Qoe1xuICBkYXRhOiB6Lm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICAgIGVycm9yczogei5hcnJheSh6LmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogei5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogei5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcbmNvbnN0IFJzID0gKHtcbiAgdG90YWw6IGUsXG4gIHByZWZpbGw6IHRcbn0pID0+IHtcbiAgdmFyIG47XG4gIGlmICh0Lm1vZGUgPT09IFwic2V0dXBcIilcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IGUuYW1vdW50LFxuICAgICAgICBsYWJlbDogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBiaWxsaW5nIHBvcnRhbCB1cmxcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3Bhc3NraXQvcGtyZWN1cnJpbmdwYXltZW50cmVxdWVzdC9tYW5hZ2VtZW50dXJsI0Rpc2N1c3Npb25cbiAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgdXNlZCB3aGVuIHVzZXIgcmVtb3ZlIGEgY2FyZCBmcm9tIHRoZWlyIEFwcGxlUGF5IHdhbGxldC5cbiAgICAgIC8vIEN1cnJlbnR5IHNldCB0byBjaGVja291dCBzZXNzaW9uIHVybCB0byBzYXRpc2Z5IEFwcGxlUGF5IHR5cGVzXG4gICAgICBtYW5hZ2VtZW50VVJMOiBuZXcgVVJMKGAvcGF5LyR7dC50b2tlbn1gLCBtbikudG9TdHJpbmcoKVxuICAgIH07XG4gIGNvbnN0IHIgPSAobiA9IHQubGluZV9pdGVtcykgPT0gbnVsbCA/IHZvaWQgMCA6IG5bMF07XG4gIGlmIChyKVxuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246IChyID09IG51bGwgPyB2b2lkIDAgOiByLmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiBlLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IChyID09IG51bGwgPyB2b2lkIDAgOiByLmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxVbml0OiByID09IG51bGwgPyB2b2lkIDAgOiByLmJpbGxpbmdfaW50ZXJ2YWwsXG4gICAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbENvdW50OiAociA9PSBudWxsID8gdm9pZCAwIDogci5iaWxsaW5nX2ludGVydmFsX2NvdW50KSA/PyB2b2lkIDAsXG4gICAgICAgIHBheW1lbnRUaW1pbmc6IFwicmVjdXJyaW5nXCIsXG4gICAgICAgIHR5cGU6IFwiZmluYWxcIlxuICAgICAgfSxcbiAgICAgIG1hbmFnZW1lbnRVUkw6IGBodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbS9wYXkvJHt0LnRva2VufWBcbiAgICB9O1xufSwgVHMgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBlLFxuICBpbml0aWFsUHJldmlldzogdCxcbiAgcHJlZmlsbDogcixcbiAgZGVmYXVsdExhYmVsOiBuID0gXCJUb3RhbFwiXG59KSA9PiB7XG4gIHZhciBjLCBsO1xuICBjb25zdCBvID0gKCgoYyA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogYy5jdXJyZW5jeSkgPz8gKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuY3VycmVuY3kpID8/IHQuY3VycmVuY3kpLnRvVXBwZXJDYXNlKCksIHMgPSAoKCgobCA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogbC5hbW91bnRBdG9tKSA/PyAodCA9PSBudWxsID8gdm9pZCAwIDogdC5hbW91bnRBdG9tKSA/PyAwKSAvIDEwMCkudG9GaXhlZCgyKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeUNvZGU6IG8sXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5sYWJlbCkgPz8gbiA/PyBcIlRvdGFsXCIsXG4gICAgICB0eXBlOiBlICE9IG51bGwgJiYgZS5wZW5kaW5nID8gXCJwZW5kaW5nXCIgOiBcImZpbmFsXCIsXG4gICAgICBhbW91bnQ6IHNcbiAgICB9XG4gIH07XG59LCBRdCA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGUsXG4gIGluaXRpYWxQcmV2aWV3OiB0LFxuICBwcmVmaWxsOiByLFxuICBkZWZhdWx0TGFiZWw6IG5cbn0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW5jeUNvZGU6IG8sIHRvdGFsOiBpIH0gPSBUcyh7XG4gICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgICBpbml0aWFsUHJldmlldzogdCxcbiAgICBwcmVmaWxsOiByLFxuICAgIGRlZmF1bHRMYWJlbDogblxuICB9KTtcbiAgbGV0IHMgPSB7XG4gICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICBjdXJyZW5jeUNvZGU6IG8sXG4gICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIl0sXG4gICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXG4gICAgICBcInN1cHBvcnRzM0RTXCIsXG4gICAgICBcInN1cHBvcnRzQ3JlZGl0XCIsXG4gICAgICBcInN1cHBvcnRzRGViaXRcIixcbiAgICAgIFwic3VwcG9ydHNFTVZcIlxuICAgIF0sXG4gICAgdG90YWw6IGksXG4gICAgcmVjdXJyaW5nUGF5bWVudFJlcXVlc3Q6IFJzKHtcbiAgICAgIHRvdGFsOiBpLFxuICAgICAgcHJlZmlsbDogclxuICAgIH0pXG4gIH07XG4gIHJldHVybiBlICE9IG51bGwgJiYgZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ICYmICh0eXBlb2YgZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IHMgPSB7XG4gICAgLi4ucyxcbiAgICAuLi5lLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QocylcbiAgfSA6IHMgPSB7IC4uLnMsIC4uLmUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCB9KSwgcztcbn0sIHsgbG9nX186IG1sLCBlcnJfXzogQW4gfSA9IFMoXCJjb21tb25cIiksIG90ID0gKGUpID0+IHtcbiAgaWYgKGUucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiBlLnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgRyA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBlLmZpbmQoKG4pID0+IHQuc2FmZVBhcnNlKG4pLnN1Y2Nlc3MpO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgQW4oXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpcIiwgZSksIG5ldyBFcnJvcihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsXCIpO1xuICByZXR1cm4gdC5wYXJzZShyKTtcbn0sIEluID0gKGUpID0+ICh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogZS5lbWFpbCxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICB6aXBfY29kZTogZS56aXBDb2RlLFxuICAgIGNvdW50cnk6IGUuY291bnRyeVxuICB9LFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogZS5maXJzdE5hbWUsXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGUubGFzdE5hbWVcbn0pLCBTZSA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHsgbG9nX186IHQgfSA9IFMoZS5sb2dQcmVmaXgpLCByID0gYXdhaXQgVChlLmFueUNkZUNvbm5lY3Rpb24pLCBuID0gb3QoZS5jb25maXJtUmVzdWx0KTtcbiAgaWYgKHIubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgIHJldHVybiB0KFwiU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZC4uLlwiKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogYXdhaXQgbnMoZS5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBwbV9pZDogbi5wYXltZW50X21ldGhvZF9pZFxuICAgIH0pIH07XG4gIHtcbiAgICBpZiAoZS51c2VQYXlGaXJzdEZsb3cpIHtcbiAgICAgIGlmICh0KFwiVXNpbmcgcGF5LWZpcnN0IGZsb3cuLi5cIiksICFlLmNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICAgIHRocm93IEFuKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgZS5jb25maXJtUmVzdWx0KSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogZS5jb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgICB0KFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgbyA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogci50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgcHJvdmlkZXJfdHlwZTogZS5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogZS5yZXF1aXJlZEZvcm1GaWVsZHNbZi5FTUFJTF0sXG4gICAgICBjdXN0b21lcl96aXBfY29kZTogZS5yZXF1aXJlZEZvcm1GaWVsZHNbZi5aSVBfQ09ERV0sXG4gICAgICBjdXN0b21lcl9jb3VudHJ5OiBlLnJlcXVpcmVkRm9ybUZpZWxkc1tmLkNPVU5UUlldLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IGUucmVxdWlyZWRGb3JtRmllbGRzW2YuUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogci5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IHIuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IG4ucGF5bWVudF9tZXRob2RfaWRcbiAgICB9O1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBKdChlLmFueUNkZUNvbm5lY3Rpb24sIG8pIH07XG4gIH1cbn0sIEZzID0gei5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKSwgTnMgPSB6LmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSksIHsgbG9nX186IE9lLCBlcnJfXzogZXQgfSA9IFMoXCJhZHllbi1jY1wiKSwgTXMgPSB6Lm9iamVjdCh7XG4gIFwib3AtYWNjb3VudC1pZFwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBGcyxcbiAgXCJvcC1hZHllbi1hY3Rpb25cIjogei5zdHJpbmcoKVxufSksIFJuID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBEcyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBNcy5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKVxuICAgIHRocm93IGV0KGBBZHllbiAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGUpfWApLCBuZXcgRXJyb3IoUm4pO1xuICByZXR1cm4gdC5kYXRhO1xufSwgT3MgPSAoZSkgPT4gSlNPTi5wYXJzZShlKSwgaHIgPSAoKSA9PiBcIkFkeWVuV2ViXCIgaW4gd2luZG93ICYmIFwiQWR5ZW5DaGVja291dFwiIGluIHdpbmRvdy5BZHllbldlYiwgTHMgPSBhc3luYyAoKSA9PiB7XG4gIE9lKFwiV2FpdGluZyBmb3IgQWR5ZW4gU0RLIHRvIGxvYWQuLi5cIik7XG4gIGZvciAobGV0IGUgPSAwOyBlIDwgMTA7IGUrKylcbiAgICBocigpIHx8IGF3YWl0IGJ0KDUwMCk7XG4gIGlmICghaHIoKSlcbiAgICB0aHJvdyBldChcIkFkeWVuIFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpLCBuZXcgRXJyb3IoUm4pO1xuICByZXR1cm4gT2UoXCJBZHllbiBTREsgbG9hZGVkIHN1Y2Nlc3NmdWxseVwiKSwgd2luZG93LkFkeWVuV2ViLkFkeWVuQ2hlY2tvdXQ7XG59LCBVcyA9IChlKSA9PiB7XG4gIGNvbnN0IHsgaGVhZGVyczogdCwgbG9jYWxlOiByLCBjb3VudHJ5Q29kZTogbiwgY29tcG9uZW50OiBvLCBob3N0OiBpLCBjYW5jZWxCdXR0b246IHMgfSA9IGUsIGMgPSBPcyh0W1wib3AtYWR5ZW4tYWN0aW9uXCJdKTtcbiAgcmV0dXJuIE9lKGBSdW5uaW5nIEFkeWVuIDNEUyBmbG93IGZvciBhY3Rpb24gdHlwZTogJHtjLnR5cGV9YCksIG5ldyBQcm9taXNlKChsKSA9PiB7XG4gICAgY29uc3QgdSA9ICgpID0+IHtcbiAgICAgIE9lKFwiQ2xlYW5pbmcgdXAgQWR5ZW4gM0RTIGZsb3dcIiksIHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHApLCBpLnJlbW92ZSgpO1xuICAgIH0sIGQgPSAoXykgPT4ge1xuICAgICAgZXQoXCJBdXRoZW50aWNhdGlvbiBmYWlsZWQuIFJlc3VsdDpcIiwgXyksIGwoeyBzdGF0dXM6IEQuRkFJTFVSRSwgY2xlYW51cDogdSB9KTtcbiAgICB9LCB5ID0gKF8pID0+IHtcbiAgICAgIGV0KFwiQWR5ZW4gZXJyb3I6XCIsIF8pLCBsKHsgc3RhdHVzOiBELkZBSUxVUkUsIGNsZWFudXA6IHUgfSk7XG4gICAgfSwgcCA9ICgpID0+IHtcbiAgICAgIGwoeyBzdGF0dXM6IEQuQ0FOQ0VMTEVELCBjbGVhbnVwOiB1IH0pO1xuICAgIH07XG4gICAgcy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcCk7XG4gICAgY29uc3QgbSA9IChfLCBoLCB2KSA9PiB7XG4gICAgICBpLnJlbW92ZSgpLCBsKHsgc3RhdHVzOiBELlNVQ0NFU1MsIGFkZGl0aW9uYWxEZXRhaWxzOiBfLCBjbGVhbnVwOiB1IH0pO1xuICAgIH07XG4gICAgTHMoKS50aGVuKFxuICAgICAgKF8pID0+IF8oe1xuICAgICAgICBjbGllbnRLZXk6IHRbXCJvcC1hZHllbi1jbGllbnQta2V5XCJdLFxuICAgICAgICBlbnZpcm9ubWVudDogdFtcIm9wLWFkeWVuLWVudmlyb25tZW50XCJdLFxuICAgICAgICBsb2NhbGU6IHIsXG4gICAgICAgIGNvdW50cnlDb2RlOiBuLFxuICAgICAgICBvbkFkZGl0aW9uYWxEZXRhaWxzOiBtLFxuICAgICAgICBvblBheW1lbnRGYWlsZWQ6IGQsXG4gICAgICAgIG9uRXJyb3I6IHlcbiAgICAgIH0pXG4gICAgKS50aGVuKChfKSA9PiB7XG4gICAgICBfLmNyZWF0ZUZyb21BY3Rpb24oYywgeyBjaGFsbGVuZ2VXaW5kb3dTaXplOiBcIjAzXCIgfSkubW91bnQobyk7XG4gICAgfSk7XG4gIH0pO1xufSwganMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gOiBuYXZpZ2F0b3IubGFuZ3VhZ2UsIHIgPSBlID8/IHQsIG4gPSBOcy5zYWZlUGFyc2Uocik7XG4gIHJldHVybiBuLnN1Y2Nlc3MgPyAoT2UoYFJlc29sdmVkIGxvY2FsZTogJHtuLmRhdGF9YCksIG4uZGF0YSkgOiAoZXQoYFJlc29sdmVkIGludmFsaWQgbG9jYWxlOiAke3J9LiBEZWZhdWx0aW5nIHRvIGVuLVVTLmApLCBcImVuLVVTXCIpO1xufSwgVG4gPSAoZSkgPT4gKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbXCJvcC1hZHllbi1hY3Rpb25cIl0pICE9PSB2b2lkIDAsIEZuID0gYXN5bmMgKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IERzKHQpLCBvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgby5pZCA9IFwiYWR5ZW4tY29udGFpbmVyXCI7XG4gIGNvbnN0IHsgaG9zdDogaSwgaWZyYW1lOiBzLCBjYW5jZWxCdXR0b246IGMgfSA9IHduKFwiaHR0cDovL2V4YW1wbGUuY29tXCIpO1xuICBzLnJlcGxhY2VXaXRoKG8pO1xuICBjb25zdCBsID0gYXdhaXQgVXMoe1xuICAgIGhlYWRlcnM6IG4sXG4gICAgbG9jYWxlOiBqcyhyKSxcbiAgICBjb3VudHJ5Q29kZTogZSxcbiAgICBjb21wb25lbnQ6IG8sXG4gICAgaG9zdDogaSxcbiAgICBjYW5jZWxCdXR0b246IGNcbiAgfSk7XG4gIGlmIChsLmNsZWFudXAoKSwgbC5zdGF0dXMgPT09IEQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgaWYgKGwuc3RhdHVzID09PSBELkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKGwuc3RhdHVzID09PSBELlNVQ0NFU1MpIHtcbiAgICBpZiAoIWwuYWRkaXRpb25hbERldGFpbHMpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZCBidXQgbm8gYWRkaXRpb25hbCBkZXRhaWxzIHdlcmUgcmV0dXJuZWRcIik7XG4gICAgcmV0dXJuIE9lKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWRcIiksIHtcbiAgICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICAgIGFkZGl0aW9uYWxfZGV0YWlsczogbC5hZGRpdGlvbmFsRGV0YWlscy5kYXRhXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlXG4gICAgZ3QobC5zdGF0dXMpO1xufSwgTm4gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpXG4gIH0pXG59KSwgTW4gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIHsgbG9nX186IERuLCBlcnJfXzogT24gfSA9IFMoXCJjb21tb24tY2NcIiksIFggPSAoZSwgdCwgcikgPT4ge1xuICBpZiAocikge1xuICAgIERuKGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShyKX1gKTtcbiAgICBmb3IgKGNvbnN0IFtvLCBpXSBvZiBPYmplY3QuZW50cmllcyhyKSlcbiAgICAgIGVbb10gfHwgKGVbb10gPSBpKTtcbiAgfVxuICBjb25zdCBuID0gdHQuc2FmZVBhcnNlKGUpO1xuICBpZiAoIW4uc3VjY2Vzcykge1xuICAgIGNvbnN0IG8gPSBuLmVycm9yLmZvcm1hdCgpLCBpID0gZ24obyk7XG4gICAgZm9yIChjb25zdCBbcywgY10gb2YgT2JqZWN0LmVudHJpZXMoaSkpXG4gICAgICB0KHMsIGMsIHMpO1xuICAgIHRocm93IE9uKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgaSksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiBuLmRhdGE7XG59LCBMbiA9IChlLCB0KSA9PiB7XG4gIGZvciAoY29uc3QgciBvZiBlKVxuICAgIGlmIChyLnN1Y2Nlc3MgPT09ICExKVxuICAgICAgdGhyb3cgci5lcnJvcnMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBjb25zdCBvID0gRHIuc2FmZVBhcnNlKG4uZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIW8uc3VjY2VzcylcbiAgICAgICAgICBPbihgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke24uZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgbik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGkgPSBvLmRhdGE7XG4gICAgICAgICAgdChpLCBuLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pLCBEbihgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkoci5lcnJvcnMpfWApLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xufSwgeyBsb2dfXzogeHMgfSA9IFMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gJHMoZSwgdCkge1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSAoYXdhaXQgRXQodC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBvID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIW8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgdC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKG8pLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ub1xuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgdGhyb3cgdC5zZXNzaW9uLmFib3J0KCksIHI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIFZzKGUsIHQpIHtcbiAgdmFyIHIsIG47XG4gIHRyeSB7XG4gICAgY29uc3QgbyA9IGUucGF5bWVudCwgaSA9IFp0KHQubm9uQ2RlRm9ybUlucHV0cywgbyksIHMgPSBYKFxuICAgICAgaSxcbiAgICAgIHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICB0LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5zXG4gICAgfSksIGF3YWl0IGhlKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHNbZi5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogc1tmLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogc1tmLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogc1tmLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogc1tmLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgYyA9IGF3YWl0ICQodC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYnJvd3Nlcl9pbmZvOiBabigpLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YToge1xuICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShvLnRva2VuKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHhzKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgYyksICEoKG4gPSAociA9IGMucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogclswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IG4uaWQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgdSA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudCh1KSwgU2Uoe1xuICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiB0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBzLFxuICAgICAgY29uZmlybVJlc3VsdDogYyxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAobykge1xuICAgIGNvbnN0IGkgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChpKSwgbztcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogemUsIGVycl9fOiBVbiB9ID0gUyhcImFkeWVuLWFwcGxlLXBheVwiKSwgR3MgPSBtZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogQi5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSBHKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgTm4pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIGlmICh6ZShcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgV3QoKSwgIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiB6ZShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIHI7XG4gICAgaWYgKHplKFwiQXBwbGUgUGF5IExvYWRlZFwiKSwgIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiB6ZShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgcjtcbiAgICBpZiAoIW4ubWV0YWRhdGEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBUKHMpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBmZShzLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKHkpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IFIuYWR5ZW5BcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ueSxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIFVuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgcCksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigocCA9PSBudWxsID8gdm9pZCAwIDogcC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBCLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgenMgPSBRKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBfO1xuICAgIGNvbnN0IGkgPSBHKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgTm4pLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsIGluaXRpYWxQcmV2aWV3OiBjIH0gPSBuLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgVChsKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCB5ID0gUXQoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjLFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi51XG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiAoXyA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfLnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgcCA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgeSksIG0gPSB7XG4gICAgICBzZXNzaW9uOiBwLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IGkubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBvLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIGcoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiB0LnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogd3QodSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pLCBuZXcgUHJvbWlzZSgoaCwgdikgPT4ge1xuICAgICAgY29uc3QgYiA9ICgpID0+IHtcbiAgICAgICAgemUoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCB2KG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIHAub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKEUpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCAkcyhFLCBtKTtcbiAgICAgICAgfSBjYXRjaCAoUCkge1xuICAgICAgICAgIHYoUCk7XG4gICAgICAgIH1cbiAgICAgIH0sIHAub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IEUgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHsgLi4ueS50b3RhbCB9XG4gICAgICAgIH07XG4gICAgICAgIHAuY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKEUpO1xuICAgICAgfSwgcC5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKEUpID0+IHtcbiAgICAgICAgZyhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgUCA9IGF3YWl0IFZzKEUsIG0pO1xuICAgICAgICAgIGgoUCk7XG4gICAgICAgIH0gY2F0Y2ggKFApIHtcbiAgICAgICAgICB2KFApO1xuICAgICAgICB9XG4gICAgICB9LCBwLm9uY2FuY2VsID0gYiwgcC5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChoKSA9PiB7XG4gICAgICB0aHJvdyBVbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIGg7XG4gICAgfSk7XG4gIH1cbiksIGplID0gKHtcbiAgZ2F0ZXdheTogZSxcbiAgZ2F0ZXdheU1lcmNoYW50SWQ6IHQsXG4gIG1lcmNoYW50TmFtZTogcixcbiAgbWVyY2hhbnRJZDogbixcbiAgaW5pdGlhbFByZXZpZXc6IG8sXG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGksXG4gIHByZWZpbGw6IHNcbn0pID0+IHtcbiAgdmFyIHksIHA7XG4gIGNvbnN0IGMgPSAoKHkgPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IHkuYW1vdW50QXRvbSkgPz8gKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uYW1vdW50QXRvbSkgPz8gMCwgbCA9IE1hdGgubWF4KGMgLyAxMDAsIDApLCB1ID0gKCgocCA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogcC5jdXJyZW5jeSkgPz8gKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuY3VycmVuY3kpID8/IG8uY3VycmVuY3kpLnRvVXBwZXJDYXNlKCksIGQgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiAhMCxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1BhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogXCJGVUxMXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFsbG93Q3JlZGl0Q2FyZHM6ICEwLFxuICAgICAgICAgIGFsbG93UHJlcGFpZENhcmRzOiAhMFxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5OiBlLFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6ICEwLFxuICAgIG1lcmNoYW50SW5mbzoge1xuICAgICAgLy8gUFJPRCBlbnYgd2lsbCBuZWVkIHRoaXNcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3BheS9hcGkvd2ViL3JlZmVyZW5jZS9yZXF1ZXN0LW9iamVjdHMjTWVyY2hhbnRJbmZvXG4gICAgICBtZXJjaGFudElkOiBuID8/IFwiXCIsXG4gICAgICBtZXJjaGFudE5hbWU6IHJcbiAgICB9LFxuICAgIHRyYW5zYWN0aW9uSW5mbzoge1xuICAgICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICAgIGN1cnJlbmN5Q29kZTogdSxcbiAgICAgIHRvdGFsUHJpY2VTdGF0dXM6IGkgIT0gbnVsbCAmJiBpLnBlbmRpbmcgPyBcIkVTVElNQVRFRFwiIDogXCJGSU5BTFwiLFxuICAgICAgdG90YWxQcmljZTogbC50b0ZpeGVkKDIpXG4gICAgfVxuICB9O1xuICByZXR1cm4gaSAhPSBudWxsICYmIGkuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgPyB0eXBlb2YgaS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyB7IC4uLmQsIC4uLmkuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QoZCkgfSA6IHsgLi4uZCwgLi4uaS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9IDogZDtcbn0sIFh0ID0gKCkgPT4ga24oe1xuICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2dvb2dsZV9wYXlfc2RrXCIsXG4gIHNyYzogXCJodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzXCIsXG4gIGNoZWNrTG9hZGVkRm46ICgpID0+IHtcbiAgICB2YXIgZSwgdDtcbiAgICByZXR1cm4gISEoKHQgPSAoZSA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBlLnBheW1lbnRzKSAhPSBudWxsICYmIHQuYXBpKTtcbiAgfVxufSk7XG5sZXQgUnQgPSBudWxsO1xuY29uc3QgZXIgPSBhc3luYyAoZSkgPT4gYXdhaXQgWHIoZSkgPT09IFwicHJvZFwiID8gXCJQUk9EVUNUSU9OXCIgOiBcIlRFU1RcIiwgeGUgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgZXIoZSk7XG4gIHJldHVybiBSdCA9PT0gbnVsbCAmJiAoUnQgPSBuZXcgd2luZG93Lmdvb2dsZS5wYXltZW50cy5hcGkuUGF5bWVudHNDbGllbnQoe1xuICAgIGVudmlyb25tZW50OiByLFxuICAgIG1lcmNoYW50SW5mbzogdC5tZXJjaGFudEluZm9cbiAgfSkpLCBSdDtcbn0sIGpuID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKHIpID0+IHIudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICByZXR1cm4gdCA/IE9yLnBhcnNlKHQpIDogbnVsbDtcbn0sIHRyID0gKGUsIHQpID0+IHtcbiAgdmFyIG8sIGksIHMsIGM7XG4gIGNvbnN0IHIgPSB7IC4uLmUgfSwgbiA9IChpID0gKG8gPSB0LnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogby5pbmZvKSA9PSBudWxsID8gdm9pZCAwIDogaS5iaWxsaW5nQWRkcmVzcztcbiAgaWYgKG4pIHtcbiAgICBjb25zdCBbbCwgLi4udV0gPSAoKGMgPSAocyA9IG4ubmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHMudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogYy5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgZCA9IHUuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICAgIHJbZi5FTUFJTF0gPSByW2YuRU1BSUxdIHx8IHQuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCByW2YuQ09VTlRSWV0gPSByW2YuQ09VTlRSWV0gfHwgbi5jb3VudHJ5Q29kZSB8fCBcIlVTXCIsIHJbZi5BRERSRVNTXSA9IHJbZi5BRERSRVNTXSB8fCBuLmFkZHJlc3MxIHx8IFwiXCIsIHJbZi5DSVRZXSA9IHJbZi5DSVRZXSB8fCBuLmxvY2FsaXR5IHx8IFwiXCIsIHJbZi5aSVBfQ09ERV0gPSByW2YuWklQX0NPREVdIHx8IG4ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCIsIHJbZi5TVEFURV0gPSByW2YuU1RBVEVdIHx8IG4uYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCI7XG4gICAgY29uc3QgeSA9IHJbZi5GSVJTVF9OQU1FXSB8fCBsIHx8IFwiXCIsIHAgPSByW2YuTEFTVF9OQU1FXSB8fCBkIHx8IFwiXCI7XG4gICAgeSB8fCBwID8gKHJbZi5GSVJTVF9OQU1FXSA9IHksIHJbZi5MQVNUX05BTUVdID0gcCkgOiAocltmLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCByW2YuTEFTVF9OQU1FXSA9IFwiXCIpO1xuICB9XG4gIHJldHVybiByO1xufSwgeyBsb2dfXzogdGUsIGVycl9fOiBJZSB9ID0gUyhcImFkeWVuLWdvb2dsZS1wYXlcIiksIHFzID0gbWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIHZhciB5LCBwO1xuICAgIGNvbnN0IHIgPSB7XG4gICAgICBwcm9jZXNzb3I6IEIuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0gRyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIE1uKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICB0ZShcIkdvb2dsZSBQYXkgQ1BNXCIsIG4pO1xuICAgIGNvbnN0IG8gPSBuLm1ldGFkYXRhO1xuICAgIGlmICghby5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiBJZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIHI7XG4gICAgaWYgKHRlKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgWHQoKSwgISgocCA9ICh5ID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkucGF5bWVudHMpICE9IG51bGwgJiYgcC5hcGkpKVxuICAgICAgcmV0dXJuIEllKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgcjtcbiAgICBpZiAoYXdhaXQgZXIoZS5iYXNlVXJsKSA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIW8uZ29vZ2xlX3BheV9tZXJjaGFudF9pZClcbiAgICAgIHJldHVybiBJZShcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIiksIHI7XG4gICAgdGUoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG0gPSBqZSh7XG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBvLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IG8ucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogby5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgXyA9IGF3YWl0IHhlKGUuYmFzZVVybCwgbSksIHsgcmVzdWx0OiBoIH0gPSBhd2FpdCBfLmlzUmVhZHlUb1BheShtKTtcbiAgICAgIGlmICghaClcbiAgICAgICAgcmV0dXJuIHRlKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAobSkge1xuICAgICAgcmV0dXJuIEllKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgbSksIHI7XG4gICAgfVxuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBUKHMpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBmZShzLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKG0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFIuYWR5ZW5Hb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBKKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICBJZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgdC5nZXQub25DaGVja291dEVycm9yKChfID09IG51bGwgPyB2b2lkIDAgOiBfLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IEIuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBCcyA9IFEoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogb1xuICB9KSA9PiB7XG4gICAgdmFyIG0sIF8sIGgsIHYsIGIsIEUsIFAsIEksIE07XG4gICAgdGUoXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBNbiksIHsgaW5pdGlhbFByZXZpZXc6IHMsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGMgfSA9IG8sIGwgPSBpLm1ldGFkYXRhO1xuICAgIGlmICghbC5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgdSA9IGplKHtcbiAgICAgIGdhdGV3YXk6IFwiYWR5ZW5cIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBsLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBsLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBsLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBzLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY1xuICAgIH0pLCBkID0gZS5hbnlDZGVDb25uZWN0aW9uLCB5ID0gYXdhaXQgVChkKTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGkucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiB3dCh5LCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSk7XG4gICAgY29uc3QgcCA9IGF3YWl0IHhlKGUuYmFzZVVybCwgdSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IEMgPSBhd2FpdCBwLmxvYWRQYXltZW50RGF0YSh1KTtcbiAgICAgIHRlKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgQyk7XG4gICAgICBjb25zdCBGID0gdHIociwgQyksIFkgPSBYKFxuICAgICAgICBGLFxuICAgICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgbyA9PSBudWxsID8gdm9pZCAwIDogby5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICBpZiAoZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLllcbiAgICAgIH0pLCAhKChfID0gKG0gPSBDLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogbS50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogXy50b2tlbikpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgY29uc3Qgb2UgPSBhd2FpdCBoZShkLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IFlbZi5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBZW2YuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IFlbZi5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBZW2YuWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnk6IFlbZi5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KSwgd2UgPSBqbihvZSk7XG4gICAgICB0ZShcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIHdlKTtcbiAgICAgIGxldCB6ID0gYXdhaXQgJChkLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogeS50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgICBicm93c2VyX2luZm86IFpuKCksXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiAodiA9IChoID0gQy5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGgudG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IHYudG9rZW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGUoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB6KTtcbiAgICAgIGxldCBkZSA9IChFID0gKGIgPSB6LnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGJbMF0pID09IG51bGwgPyB2b2lkIDAgOiBFLmlkO1xuICAgICAgY29uc3QgQWUgPSAoUCA9IHoucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogUC5maW5kKCgkZSkgPT4gJGUudHlwZSA9PT0gXCJhZHllbi0zZHNcIik7XG4gICAgICBpZiAoQWUgJiYgQWUucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIHRlKFwiQWR5ZW4gM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgQWUpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogJGUgfSA9IGF3YWl0IG50KHtcbiAgICAgICAgICB1cmw6IEFlLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0ZShg4pWwIEFkeWVuIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7JGV9XWApLCAkZSA9PT0gRC5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmICgkZSA9PT0gRC5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKEFlICYmICFkZSAmJiAoeiA9IGF3YWl0ICQoZCwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHkudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBBZS50aGVpcl9wbV9pZCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlclxuICAgICAgICB9XG4gICAgICB9KSwgdGUoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZSBhZnRlciAzRFNcIiwgeiksIGRlID0gKE0gPSAoSSA9IHoucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogSVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IE0uaWQpLCAhZGUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgbWV0aG9kIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIFNlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBkLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogWSxcbiAgICAgICAgY29uZmlybVJlc3VsdDogeixcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoQykge1xuICAgICAgdGhyb3cgSWUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgQyksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogQ1xuICAgICAgfSksIG5ldyBFcnJvcigoQyA9PSBudWxsID8gdm9pZCAwIDogQy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCBrZSA9ICgpID0+IHtcbiAgY29uc3QgZSA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzIDogW25hdmlnYXRvci5sYW5ndWFnZV07XG4gIGxldCB0ID0gZSA9PSBudWxsID8gdm9pZCAwIDogZVswXTtcbiAgcmV0dXJuIHQgJiYgKHQgPSB0LnNwbGl0KFwiLVwiKVswXSksIHQ7XG59LCB7IGxvZ19fOiB1dCB9ID0gUyhcImF3eC1hcHBsZS1wYXlcIik7XG5hc3luYyBmdW5jdGlvbiBZcyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCBFdCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiB0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgbyA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFvKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihvKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLm9cbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IHQuc2Vzc2lvbi5hYm9ydCgpLCByO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBIcyhlLCB0KSB7XG4gIGlmICghZS5yZWRpcmVjdF91cmwpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICB1dChcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIGUpO1xuICBjb25zdCB7IHN0YXR1czogciB9ID0gYXdhaXQgbnQoe1xuICAgIHVybDogZS5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogdC5iYXNlVXJsXG4gIH0pO1xuICBpZiAodXQoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3J9XWApLCByID09PSBELkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHIgPT09IEQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgY29uc3QgbiA9IGF3YWl0ICQodC5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiB0LnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogZS50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBlLmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB1dChcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG4pLCBuO1xufVxuYXN5bmMgZnVuY3Rpb24gSnMoZSwgdCkge1xuICB2YXIgciwgbiwgbywgaSwgcztcbiAgdHJ5IHtcbiAgICBjb25zdCBjID0gZS5wYXltZW50LCBsID0gWnQodC5ub25DZGVGb3JtSW5wdXRzLCBjKSwgdSA9IFgoXG4gICAgICBsLFxuICAgICAgdC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnVcbiAgICB9KTtcbiAgICBjb25zdCBwID0gKGF3YWl0IGhlKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHVbZi5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdVtmLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogdVtmLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogdVtmLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogdVtmLkNPVU5UUlldXG4gICAgICB9LFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGtlKClcbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdLmNvbnNlbnRfaWQ7XG4gICAgaWYgKCFwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uc2VudCBJRCByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICBsZXQgbSA9IGF3YWl0ICQodC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IHAsXG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJhcHBsZXBheVwiLFxuICAgICAgICAgIGFwcGxlcGF5OiB7XG4gICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IEpTT04uc3RyaW5naWZ5KGMudG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdXQoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBtKTtcbiAgICBsZXQgXyA9IChuID0gKHIgPSBtLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHJbMF0pID09IG51bGwgPyB2b2lkIDAgOiBuLmlkO1xuICAgIGNvbnN0IGggPSAobyA9IG0ucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogby5maW5kKFxuICAgICAgKGIpID0+IGIudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApO1xuICAgIGlmIChoICE9IG51bGwgJiYgaC5yZWRpcmVjdF91cmwgJiYgaC5jb25zZW50X2lkICYmIGgudGhlaXJfcG1faWQgJiYgKG0gPSBhd2FpdCBIcyhoLCB0KSwgXyA9IChzID0gKGkgPSBtLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBzLmlkKSwgIV8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCB2ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHYpLCBTZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXd4LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiB0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiB1LFxuICAgICAgY29uZmlybVJlc3VsdDogbSxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAoYykge1xuICAgIGNvbnN0IGwgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChsKSwgYztcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogcWUsIGVycl9fOiB4biB9ID0gUyhcImF3eC1hcHBsZS1wYXlcIiksIEtzID0gbWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIGNvbnN0IHIgPSB7XG4gICAgICBwcm9jZXNzb3I6IEIuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBDbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgaWYgKHFlKFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBXdCgpLCAhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIHFlKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKSwgcjtcbiAgICBpZiAocWUoXCJBcHBsZSBQYXkgTG9hZGVkXCIpLCAhYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIHFlKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IFQocyksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGZlKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoeSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgUi5haXJ3YWxsZXhBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ueSxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIHhuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgcCksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigocCA9PSBudWxsID8gdm9pZCAwIDogcC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBCLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogZFxuICAgIH07XG4gIH1cbiksIFdzID0gUShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGN1c3RvbVBhcmFtczogbixcbiAgICBmb3JtQ2FsbGJhY2tzOiBvXG4gIH0pID0+IHtcbiAgICB2YXIgXztcbiAgICBjb25zdCBpID0gRyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIENuKSwgeyBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLCBpbml0aWFsUHJldmlldzogYyB9ID0gbiwgbCA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgdSA9IGF3YWl0IFQobCksIGQgPSB1Lm1vZGUgPT09IFwic2V0dXBcIiwgeSA9IFF0KHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsXG4gICAgICBpbml0aWFsUHJldmlldzogYyxcbiAgICAgIHByZWZpbGw6IHtcbiAgICAgICAgLi4udVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRMYWJlbDogKF8gPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLm1ldGFkYXRhKSA9PSBudWxsID8gdm9pZCAwIDogXy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSksIHAgPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHkpLCBtID0ge1xuICAgICAgc2Vzc2lvbjogcCxcbiAgICAgIGNvbm5lY3Rpb246IGUuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBpLm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGlzU2V0dXBNb2RlOiBkLFxuICAgICAgYmFzZVVybDogZS5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrczogbyxcbiAgICAgIGRlZmF1bHRGaWVsZFZhbHVlczogbiA9PSBudWxsID8gdm9pZCAwIDogbi5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICB9O1xuICAgIHJldHVybiBnKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogdC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IHd0KHUsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbiAgICB9KSwgbmV3IFByb21pc2UoKGgsIHYpID0+IHtcbiAgICAgIGNvbnN0IGIgPSAoKSA9PiB7XG4gICAgICAgIHFlKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgdihuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBwLm9uY2FuY2VsID0gYiwgcC5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoRSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IFlzKEUsIG0pO1xuICAgICAgICB9IGNhdGNoIChQKSB7XG4gICAgICAgICAgdihQKTtcbiAgICAgICAgfVxuICAgICAgfSwgcC5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgRSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi55LnRvdGFsIH1cbiAgICAgICAgfTtcbiAgICAgICAgcC5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oRSk7XG4gICAgICB9LCBwLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoRSkgPT4ge1xuICAgICAgICBnKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBQID0gYXdhaXQgSnMoRSwgbSk7XG4gICAgICAgICAgaChQKTtcbiAgICAgICAgfSBjYXRjaCAoUCkge1xuICAgICAgICAgIHYoUCk7XG4gICAgICAgIH1cbiAgICAgIH0sIHAuYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoaCkgPT4ge1xuICAgICAgdGhyb3cgeG4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBoKSwgZyhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGhcbiAgICAgIH0pLCBoO1xuICAgIH0pO1xuICB9XG4pLCB7IGxvZ19fOiByZSwgZXJyX186IFJlIH0gPSBTKFwiYXd4LWdvb2dsZS1wYXlcIiksIFpzID0gbWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIHZhciB5LCBwO1xuICAgIGNvbnN0IHIgPSB7XG4gICAgICBwcm9jZXNzb3I6IEIuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBTbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgcmUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBvID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIW8ucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gUmUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChyZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IFh0KCksICEoKHAgPSAoeSA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiB5LnBheW1lbnRzKSAhPSBudWxsICYmIHAuYXBpKSlcbiAgICAgIHJldHVybiBSZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgaWYgKGF3YWl0IGVyKGUuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFvLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gUmUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCByO1xuICAgIHJlKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtID0gamUoe1xuICAgICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogby5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBvLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IG8uZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSksIF8gPSBhd2FpdCB4ZShlLmJhc2VVcmwsIG0pLCB7IHJlc3VsdDogaCB9ID0gYXdhaXQgXy5pc1JlYWR5VG9QYXkobSk7XG4gICAgICBpZiAoIWgpXG4gICAgICAgIHJldHVybiByZShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCByO1xuICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgIHJldHVybiBSZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIG0pLCByO1xuICAgIH1cbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgVChzKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgZmUocywgYy50b2tlbiwgbCwgdm9pZCAwKSwgZCA9IGFzeW5jIChtKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBSLmFpcndhbGxleEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLm0sXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIFJlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIF8pLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoKF8gPT0gbnVsbCA/IHZvaWQgMCA6IF8ubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogQi5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBRcyA9IFEoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogb1xuICB9KSA9PiB7XG4gICAgdmFyIG0sIF8sIGgsIHYsIGIsIEUsIFA7XG4gICAgcmUoXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBTbiksIHsgaW5pdGlhbFByZXZpZXc6IHMsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGMgfSA9IG8sIGwgPSBpLm1ldGFkYXRhO1xuICAgIGlmICghbC5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgdSA9IGplKHtcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogcyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGNcbiAgICB9KSwgZCA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgeSA9IGF3YWl0IFQoZCk7XG4gICAgZyhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBpLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogd3QoeSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY1xuICAgIH0pO1xuICAgIGNvbnN0IHAgPSBhd2FpdCB4ZShlLmJhc2VVcmwsIHUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBJID0gYXdhaXQgcC5sb2FkUGF5bWVudERhdGEodSk7XG4gICAgICByZShcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIEkpO1xuICAgICAgY29uc3QgTSA9IHRyKHIsIEkpLCBDID0gWChcbiAgICAgICAgTSxcbiAgICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApO1xuICAgICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLkNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgRiA9IChfID0gKG0gPSBJLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogbS50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogXy50b2tlbjtcbiAgICAgIGlmICghRilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBZID0gYXdhaXQgaGUoZCwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBDW2YuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogQ1tmLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBDW2YuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgICB6aXBfY29kZTogQ1tmLlpJUF9DT0RFXSxcbiAgICAgICAgICBjb3VudHJ5OiBDW2YuQ09VTlRSWV1cbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGtlKClcbiAgICAgIH0pLCBnZSA9IGpuKFkpO1xuICAgICAgcmUoXCJTdGFydCBmbG93IG5leHQgYWN0aW9uc1wiLCBnZSk7XG4gICAgICBsZXQgb2UgPSBhd2FpdCAkKGQsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiB5LnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICAgIC8vIEdvb2dsZVBheSdzIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuIHByb3ZpZGVkIHRvIHZlcmlmeSB0aGUgY29uc2VudCBmaXJzdFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBnZSA9PSBudWxsID8gdm9pZCAwIDogZ2UuY29uc2VudF9pZCxcbiAgICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgICAgdHlwZTogXCJnb29nbGVwYXlcIixcbiAgICAgICAgICAgIGdvb2dsZXBheToge1xuICAgICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogRlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZShcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG9lKTtcbiAgICAgIGxldCB3ZSA9ICh2ID0gKGggPSBvZS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBoWzBdKSA9PSBudWxsID8gdm9pZCAwIDogdi5pZDtcbiAgICAgIGNvbnN0IHogPSAoYiA9IG9lLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IGIuZmluZChcbiAgICAgICAgKGRlKSA9PiBkZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICAgKTtcbiAgICAgIGlmICh6ICYmIHoucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIHJlKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgeik7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzOiBkZSB9ID0gYXdhaXQgbnQoe1xuICAgICAgICAgIHVybDogei5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocmUoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke2RlfV1gKSwgZGUgPT09IEQuQ0FOQ0VMTEVEKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICBpZiAoZGUgPT09IEQuRkFJTFVSRSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmICh6ICYmICF3ZSAmJiAob2UgPSBhd2FpdCAkKGQsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiB5LnRva2VuLFxuICAgICAgICB0aGVpcl9wbV9pZDogei50aGVpcl9wbV9pZCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogei5jb25zZW50X2lkXG4gICAgICAgIH1cbiAgICAgIH0pLCByZShcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG9lKSwgd2UgPSAoUCA9IChFID0gb2UucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogRVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IFAuaWQpLCAhd2UpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIFNlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogZCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IEMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IG9lLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChJKSB7XG4gICAgICB0aHJvdyBSZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBJKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBJXG4gICAgICB9KSwgbmV3IEVycm9yKChJID09IG51bGwgPyB2b2lkIDAgOiBJLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksICRuID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpXG4gIH0pXG59KSwgVm4gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcbmFzeW5jIGZ1bmN0aW9uIFhzKGUsIHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gKGF3YWl0IEV0KHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBlLnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogdC5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkubmV4dF9hY3Rpb25fbWV0YWRhdGEsIG8gPSBuID09IG51bGwgPyB2b2lkIDAgOiBuLmFwcGxlX3BheV9zZXNzaW9uO1xuICAgIGlmICghbylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24obyksIGcoXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5vXG4gICAgfSk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICB0aHJvdyB0LnNlc3Npb24uYWJvcnQoKSwgcjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gZWMoZSwgdCkge1xuICB2YXIgciwgbjtcbiAgdHJ5IHtcbiAgICBjb25zdCBvID0gZS5wYXltZW50LCBpID0gWnQodC5ub25DZGVGb3JtSW5wdXRzLCBvKSwgcyA9IFgoaSwgdC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5zXG4gICAgfSksIGF3YWl0IGhlKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHNbZi5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogc1tmLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogc1tmLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogc1tmLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogc1tmLkNPVU5UUlldXG4gICAgICB9LFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGtlKClcbiAgICB9KTtcbiAgICBjb25zdCBjID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoby50b2tlbi5wYXltZW50RGF0YSkpXG4gICAgfSwgbCA9IGF3YWl0ICQodC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IGNcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoISgobiA9IChyID0gbC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdKSA9PSBudWxsID8gdm9pZCAwIDogbi5pZCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCBkID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KGQpLCBTZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogdC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IGwsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKG8pIHtcbiAgICBjb25zdCBpID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoaSksIG87XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IGR0LCBlcnJfXzogR24gfSA9IFMoXCJhdXRobmV0LWFwcGxlcGF5XCIpLCB0YyA9IG1lKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBCLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0gRyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsICRuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBpZiAoZHQoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IFd0KCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gZHQoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCByO1xuICAgIGlmICghYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIGR0KFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IFQocyksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGZlKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoeSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgUi5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ueSxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIEduKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgcCksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IHBcbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigocCA9PSBudWxsID8gdm9pZCAwIDogcC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBCLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCByYyA9IFEoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogb1xuICB9KSA9PiB7XG4gICAgdmFyIF87XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogaSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gbiwgYyA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCAkbiksIGwgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBUKGwpLCBkID0gdS5tb2RlID09PSBcInNldHVwXCIsIHkgPSBRdCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGksXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgZGVmYXVsdExhYmVsOiAoXyA9IGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfLnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KTtcbiAgICBnKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogdC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSk7XG4gICAgY29uc3QgcCA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgeSksIG0gPSB7XG4gICAgICBzZXNzaW9uOiBwLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IHQubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBvXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKGgsIHYpID0+IHtcbiAgICAgIHAub25jYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGR0KFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgdihuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH0sIHAub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKGIpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBYcyhiLCBtKTtcbiAgICAgICAgfSBjYXRjaCAoRSkge1xuICAgICAgICAgIHYoRSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHAub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGIgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHkudG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgcC5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oYik7XG4gICAgICB9LCBwLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoYikgPT4ge1xuICAgICAgICBnKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBFID0gYXdhaXQgZWMoYiwgbSk7XG4gICAgICAgICAgaChFKTtcbiAgICAgICAgfSBjYXRjaCAoRSkge1xuICAgICAgICAgIHYoRSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHAuYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoaCkgPT4ge1xuICAgICAgdGhyb3cgR24oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBoKSwgZyhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGhcbiAgICAgIH0pLCBoO1xuICAgIH0pO1xuICB9XG4pLCB7IGxvZ19fOiBiZSwgZXJyX186IEJlIH0gPSBTKFwiYXV0aG5ldC1nb29nbGVwYXlcIiksIG5jID0gbWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIHZhciBkLCB5O1xuICAgIGJlKFwiSW5pdGlhbGl6aW5nIEF1dGhuZXQgR29vZ2xlUGF5IGZsb3dcIik7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogQi5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBWbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgYmUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBvID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIW8ucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gQmUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChiZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IFh0KCksICEoKHkgPSAoZCA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBkLnBheW1lbnRzKSAhPSBudWxsICYmIHkuYXBpKSlcbiAgICAgIHJldHVybiBCZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgYmUoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHAgPSBqZSh7XG4gICAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBvLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IG8ucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogby5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgbSA9IGF3YWl0IHhlKGUuYmFzZVVybCwgcCksIHsgcmVzdWx0OiBfIH0gPSBhd2FpdCBtLmlzUmVhZHlUb1BheShwKTtcbiAgICAgIGlmICghXylcbiAgICAgICAgcmV0dXJuIGJlKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAocCkge1xuICAgICAgcmV0dXJuIEJlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgcCksIHI7XG4gICAgfVxuICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBUKGkpLCBjID0gcy5tb2RlID09PSBcInNldHVwXCIsIGwgPSBhd2FpdCBmZShpLCBzLnRva2VuLCBjLCB2b2lkIDApLCB1ID0gYXN5bmMgKHApID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFIuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogSihlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ucCxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiBsXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAgQmUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgbSksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiBtXG4gICAgICAgIH0pLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoKG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0ubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogQi5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgb2MgPSBRKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBtLCBfLCBoLCB2O1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXc6IGksIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMgfSA9IG8sIGwgPSBHKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgVm4pLm1ldGFkYXRhLCB1ID0gamUoe1xuICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBsLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBsLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBsLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBpLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pLCBkID0gZS5hbnlDZGVDb25uZWN0aW9uLCB5ID0gYXdhaXQgVChkKTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHIucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiB5LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pO1xuICAgIGNvbnN0IHAgPSBhd2FpdCB4ZShlLmJhc2VVcmwsIHUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiID0gYXdhaXQgcC5sb2FkUGF5bWVudERhdGEodSk7XG4gICAgICBiZShcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIGIpO1xuICAgICAgY29uc3QgRSA9IHRyKHQsIGIpLCBQID0gWChFLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4uUFxuICAgICAgfSk7XG4gICAgICBjb25zdCBJID0gKF8gPSAobSA9IGIucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBtLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfLnRva2VuO1xuICAgICAgaWYgKCFJKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IE0gPSBhd2FpdCBoZShkLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IFBbZi5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBQW2YuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IFBbZi5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBQW2YuWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnk6IFBbZi5DT1VOVFJZXVxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9sYW5ndWFnZToga2UoKVxuICAgICAgfSk7XG4gICAgICBiZShcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBNKTtcbiAgICAgIGNvbnN0IEMgPSBhd2FpdCAkKGQsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiB5LnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uR09PR0xFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgICAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKCEoKHYgPSAoaCA9IEMucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogaFswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHYuaWQpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIHJldHVybiBTZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBkLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogUCxcbiAgICAgICAgY29uZmlybVJlc3VsdDogQyxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoYikge1xuICAgICAgdGhyb3cgQmUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgYiksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogYlxuICAgICAgfSksIG5ldyBFcnJvcigoYiA9PSBudWxsID8gdm9pZCAwIDogYi5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBhYywgZXJyX186IHpuIH0gPSBTKFwicG9ja3l0LWNjXCIpLCBpYyA9IHoub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHouc3RyaW5nKClcbn0pLCBzYyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBpYy5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbiA9IGBQb2NreXQgM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gO1xuICAgIHRocm93IHpuKG4pLCBuZXcgRXJyb3Iocik7XG4gIH1cbiAgcmV0dXJuIHQuZGF0YTtcbn0sIHFuID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0gbmV3IFVSTChlID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJ2YXVsdElkXCIpO1xuICAgIGlmICghdClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHZhdWx0IElEIGZvdW5kIGluIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBhYyhgM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbVmF1bHQgSUQ6ICR7dH1dYCksIHQ7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBjb25zdCByID0gXCJFcnJvciB2ZXJpZnlpbmcgM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgem4ociwgYFJlc3VsdGluZyBVUkw6ICR7ZX0uXG5FcnJvcjogJHtaKHQpfWApLCBuZXcgRXJyb3Iocik7XG4gIH1cbn0sIEx0ID0gKGUsIHQpID0+IG5ldyBVUkwoZSkuc2VhcmNoUGFyYW1zLmdldCh0KSwgY2MgPSAoZSkgPT4gKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbXCJvcC1wb2NreXQtM2RzLXVybFwiXSkgIT09IHZvaWQgMCwgbGMgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gc2ModCksIG4gPSBhd2FpdCB2bih7IHVybDogcltcIm9wLXBvY2t5dC0zZHMtdXJsXCJdLCBiYXNlVXJsOiBlIH0pO1xuICByZXR1cm4ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICB2YXVsdF9pZDogcW4obi5ocmVmID8/IFwiXCIpLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IHJbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiByW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbn0sIHsgbG9nX186IGdyIH0gPSBTKFwic3RyaXBlLWNjXCIpLCB1YyA9IHoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pLCBCbiA9IGFzeW5jIChlKSA9PiB7XG4gIGcoXCIzZHNfc3RyaXBlX3JlZGlyZWN0XCIsIHtcbiAgICAuLi5lXG4gIH0pLCBncihg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtlLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKSwgYXdhaXQgX2koZSksIGcoXCIzZHNfc3RyaXBlX2NvbXBsZXRlXCIpLCBncihcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn0sIGRjID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IHVjLnNhZmVQYXJzZShlKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgM0RTIG1ldGFkYXRhIGhhcyB1bmV4cGVjdGVkIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeSh0LmVycm9yLmVycm9ycyl9YCk7XG4gIHJldHVybiB7XG4gICAgc3RyaXBlX3BrOiB0LmRhdGEuc3RyaXBlX3BrLFxuICAgIGNsaWVudF9zZWNyZXQ6IHQuZGF0YS5jbGllbnRfc2VjcmV0LFxuICAgIHN0cmlwZV9wbV9pZDogdC5kYXRhLnN0cmlwZV9wbV9pZFxuICB9O1xufSwgcGMgPSA0LCB7IGxvZ19fOiBDZSwgZXJyX186IFV0IH0gPSBTKFwidW5pZmllZC1jY1wiKSwgbWMgPSBhc3luYyAoe1xuICBjb250ZXh0OiBlLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gIGZvcm1DYWxsYmFja3M6IG4sXG4gIGN1c3RvbVBhcmFtczogb1xufSkgPT4ge1xuICBDZShcIuKUnCBSdW5uaW5nIHVuaWZpZWQgQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCB9KTtcbiAgY29uc3QgaSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IFQoaSk7XG4gIENlKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3MubW9kZX1dYCk7XG4gIGNvbnN0IGMgPSBYKHIsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgbCA9IHtcbiAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IGMsXG4gICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICAgIC8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgaW4gdGhlIGNoZWNrb3V0IGF0dGVtcHQgbG9nc1xuICAgICAgZGV2aWNlVG9rZW46IGhuKClcbiAgICB9LFxuICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6ICEwLFxuICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzoge1xuICAgICAgbGluZV9pdGVtczogcy5saW5lX2l0ZW1zLFxuICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBzLmFtb3VudF90b3RhbF9hdG9tXG4gICAgfSxcbiAgICBwYXltZW50X3JvdXRlX2lkOiBvLnBheW1lbnRSb3V0ZUlkXG4gIH07XG4gIFV0KG8sIGwpLCBDZShg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIFBhcnRpYWwgUE1zIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICBjb25zdCB1ID0gYXdhaXQgdW4oby5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkXG4gIH0pO1xuICBMbih1LCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gIGNvbnN0IGQgPSBhd2FpdCBsbihpLCBsKTtcbiAgaWYgKENlKFwi4pScIHN0YXJ0UGYgcmVzdWx0XCIsIGQpLCBkLmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgcmV0dXJuIFluKHMubW9kZSwgZCk7XG4gIGlmICghZC5jaGVja291dF9hdHRlbXB0X2lkKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIGNoZWNrb3V0IGF0dGVtcHQgSUQgZnJvbSBQRiByZXN1bHRcIik7XG4gIHJldHVybiBmYyh7XG4gICAgY29udGV4dDogZSxcbiAgICBwcmVmaWxsOiBzLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXM6IGwsXG4gICAgYW55Q2RlQ29ubmVjdGlvbjogaSxcbiAgICBzdGFydFBmUmVzdWx0OiBkLFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkOiBkLmNoZWNrb3V0X2F0dGVtcHRfaWRcbiAgfSk7XG59LCBmYyA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb250ZXh0OiB0LFxuICAgIHByZWZpbGw6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogbixcbiAgICBjb21tb25DaGVja291dFBhcmFtczogbyxcbiAgICBhbnlDZGVDb25uZWN0aW9uOiBpLFxuICAgIHN0YXJ0UGZSZXN1bHQ6IHMsXG4gICAgY2hlY2tvdXRBdHRlbXB0SWQ6IGNcbiAgfSA9IGU7XG4gIGxldCBsID0gcztcbiAgZm9yIChsZXQgdSA9IDA7IHUgPCBwYzsgdSsrKSB7XG4gICAgQ2UoYOKUnCBSdW5uaW5nIGNvbmZpcm0gbG9vcCBpdGVyYXRpb24gJHt1fWApO1xuICAgIGNvbnN0IHsgdXNlckFjdGlvbjogZCB9ID0gaGMobCksIHkgPSBhd2FpdCB5Yyh0LmJhc2VVcmwsIGQsIHIsIG4pO1xuICAgIGlmIChvLmV4dHJhX21ldGFkYXRhID0ge1xuICAgICAgLi4uby5leHRyYV9tZXRhZGF0YSxcbiAgICAgIC4uLnkubWV0YWRhdGFGb3JDb25maXJtU3RlcFxuICAgIH0sIENlKFwi4pScIE5ldyBleHRyYSBtZXRhZGF0YVwiLCBvLmV4dHJhX21ldGFkYXRhKSwgbCA9IGF3YWl0ICQoaSwge1xuICAgICAgc2VjdXJlX3Rva2VuOiByLnRva2VuLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogYyxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogby5leHRyYV9tZXRhZGF0YVxuICAgIH0pLCBDZShg4pScIGNvbmZpcm1QZiByZXN1bHQgKGl0ZXJhdGlvbiAke3V9KWAsIGwpLCBsLmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICByZXR1cm4gWW4oci5tb2RlLCBsKTtcbiAgfVxuICB0aHJvdyBnKFwidW5pZmllZF9jY191bmV4cGVjdGVkX2JyYW5jaFwiLCB7XG4gICAgc2VjdXJlX3Rva2VuOiByLnRva2VuLFxuICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGwuY2hlY2tvdXRfYXR0ZW1wdF9pZCxcbiAgICBjb25maXJtUEZSZXN1bHQ6IGxcbiAgfSksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGVycm9yLCBwbGVhc2UgdHJ5IGFub3RoZXIgcGF5bWVudCBtZXRob2RcIik7XG59LCB5YyA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiB7XG4gIGlmICh0Ll91bmlmaWVkX2NjX2FjdGlvbl9uYW1lID09PSBcIjNEU19SRVFVSVJFRFwiKSB7XG4gICAgaWYgKHQudHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpXG4gICAgICByZXR1cm4gYXdhaXQgQm4oZGModCkpLCB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHt9IH07XG4gICAgaWYgKEVuKHQpKVxuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDogeyBhaXJ3YWxsZXg6IGF3YWl0IFBuKGUsIHQpIH0gfTtcbiAgICBpZiAoVG4odCkpXG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFkeWVuOiBhd2FpdCBGbihcbiAgICAgICAgbltmLkNPVU5UUlldLFxuICAgICAgICB0LFxuICAgICAgICByLmxvY2FsZVxuICAgICAgKSB9IH07XG4gICAgaWYgKF9jKHQpKVxuICAgICAgcmV0dXJuIGF3YWl0IEpuKHsgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBbdF0gfSwgZSksIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCAzRFMgdXNlciBhY3Rpb246ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gIH0gZWxzZVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByZXF1aXJlZCB1c2VyIGFjdGlvbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbn0sIF9jID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSG4oW2VdKSwgITA7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAhMTtcbiAgfVxufSwgaGMgPSAoZSkgPT4ge1xuICBpZiAoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpIHtcbiAgICBpZiAoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoID09PSAwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gcmVxdWlyZWQgdXNlciBhY3Rpb25zXCIpO1xuICAgIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggPiAxKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbXVsdGlwbGUgcmVxdWlyZWQgdXNlciBhY3Rpb25zXCIpO1xuICB9IGVsc2UgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gcmVxdWlyZWQgdXNlciBhY3Rpb25zXCIpO1xuICBjb25zdCB0ID0gS28uc2FmZVBhcnNlKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpXG4gICAgdGhyb3cgVXQoXCJVc2VyIGFjdGlvbiByYXcgcGF5bG9hZFwiLCBlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSksIFV0KFwiUGFyc2luZyBlcnJvclwiLCB0LmVycm9yKSwgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogc2NoZW1hIG9mIHVzZXIgYWN0aW9uIHBheWxvYWQgaXMgbm90IHZhbGlkXCIpO1xuICByZXR1cm4ge1xuICAgIHVzZXJBY3Rpb246IHQuZGF0YVxuICB9O1xufSwgWW4gPSAoZSwgdCkgPT4ge1xuICB2YXIgcjtcbiAgaWYgKGUgPT09IFwic2V0dXBcIikge1xuICAgIGNvbnN0IG4gPSB0LmNjX3BtX2lkID8/ICgociA9IHQucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogclswXS5pZCk7XG4gICAgaWYgKCFuKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gQ0MgUE0gSUQgb3IgcGF5bWVudF9tZXRob2RzIGZvdW5kIGluIFBGIHJlc3VsdFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBuXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIXQuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIGNoZWNrb3V0IHN1Y2Nlc3MgcmVzcG9uc2UgZnJvbSBzdGFydFBGXCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IHQuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZVxuICAgIH07XG4gIH1cbn0sIHsgbG9nX186IGssIGVycl9fOiB3ciB9ID0gUyhcImNvbW1vbi1jY1wiKTtcbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgZ2MgPSBRKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBtLCBfO1xuICAgIGsoXCLilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCB9KTtcbiAgICBjb25zdCBpID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgVChpKTtcbiAgICBnKFwiY29tbW9uX2NjX2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICAuLi50LFxuICAgICAgcHJlZmlsbDogc1xuICAgIH0pO1xuICAgIGNvbnN0IGMgPSAoKG0gPSBzLmZpbmFsX2ZlYXR1cmVfcm9sbG91dF9zZXR0aW5ncykgPT0gbnVsbCA/IHZvaWQgMCA6IG0udW5pZmllZF9jYykgPz8gMDtcbiAgICBrKGDilJwgVW5pZmllZCBDQyByb2xsb3V0OiAke01hdGgucm91bmQoYyAqIDEwMCl9JWApO1xuICAgIGNvbnN0IGwgPSBNYXRoLnJhbmRvbSgpLCB1ID0gbCA8IGMsIGQgPSB7XG4gICAgICByb2xsOiBsLFxuICAgICAgdW5pZmllZENDUm9sbG91dFJhdGlvOiBjLFxuICAgICAgdXNlVW5pZmllZENDRmxvdzogdVxuICAgIH07XG4gICAgaWYgKHUpXG4gICAgICByZXR1cm4gayhg4pScIFBpY2tlZCB1bmlmaWVkIENDIGZsb3cgKCR7bH0gdnMgJHtjfSlgKSwgZyhcInVuaWZpZWRfY2NfZmxvd19waWNrZWRcIiwgZCksIG1jKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICBjdXN0b21QYXJhbXM6IG8sXG4gICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgfSk7XG4gICAgayhg4pScIFBpY2tlZCBsZWdhY3kgQ0MgZmxvdyAoJHtsfSB2cyAke2N9KWApLCBnKFwibGVnYWN5X2NjX2Zsb3dfcGlja2VkXCIsIGQpLCBrKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3MubW9kZX1dYCk7XG4gICAgY29uc3QgeSA9IFgociwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ueVxuICAgIH0pO1xuICAgIGNvbnN0IHAgPSB7XG4gICAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICBub25fY2RlX2Zvcm1fZmllbGRzOiB5LFxuICAgICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgICAgb3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICB9LFxuICAgICAgdXNlX3VuaWZpZWRfY2NfZmxvdzogITEsXG4gICAgICBwYXltZW50X3JvdXRlX2lkOiBvLnBheW1lbnRSb3V0ZUlkLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGtlKClcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBrKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgaCA9IGF3YWl0IHVuKG8uY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgaWYgKExuKGgsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgayhg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtzLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgdiA9IGF3YWl0IGlzKGksIHApO1xuICAgICAgICByZXR1cm4gayhg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke3YucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiB2IH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgdiA9IGF3YWl0IHlyKGksIHApO1xuICAgICAgICByZXR1cm4gayhcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogdiB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgIGlmIChoIGluc3RhbmNlb2YgY24gJiYgaC5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICBrKFwi4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd1wiKSwgayhcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBoLnJlc3BvbnNlLmhlYWRlcnMpLCBnKFwiM2RzX3JlcXVpcmVkXCIsIHtcbiAgICAgICAgICAuLi50LFxuICAgICAgICAgIC4uLmgucmVzcG9uc2UuaGVhZGVyc1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdiA9IGgucmVzcG9uc2UuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiIGluIHYgJiYgKHAuZXhpc3RpbmdfY2NfcG1faWQgPSB2W1wib3AtZXhpc3RpbmctY2MtcG0taWRcIl0sIGsoYOKUnCBFeGlzdGluZyBDQyBQTSBJRDogJHtwLmV4aXN0aW5nX2NjX3BtX2lkfWApKTtcbiAgICAgICAgY29uc3QgYiA9IGNjKGgucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGlmIChiKSB7XG4gICAgICAgICAgayhcIuKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBGID0gYXdhaXQgbGMoZS5iYXNlVXJsLCBoLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIHAuZXh0cmFfbWV0YWRhdGEucG9ja3l0ID0gRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoRW4oaC5yZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgIGsoXCLilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgRiA9IGF3YWl0IFBuKGUuYmFzZVVybCwgaC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBwLmV4dHJhX21ldGFkYXRhLmFpcndhbGxleCA9IEY7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFRuKGgucmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgICBrKFwi4pScIEFkeWVuIDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFkeWVuIDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBGID0gYXdhaXQgRm4oXG4gICAgICAgICAgICByW2YuQ09VTlRSWV0sXG4gICAgICAgICAgICBoLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICBzLmxvY2FsZVxuICAgICAgICAgICk7XG4gICAgICAgICAgcC5leHRyYV9tZXRhZGF0YS5hZHllbiA9IEY7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgSSA9IGF3YWl0IGxuKGksIHApO1xuICAgICAgICBrKFwi4pScIFN0YXJ0IHBheW1lbnQgZmxvdyByZXN1bHQ6XCIsIEkpO1xuICAgICAgICBjb25zdCBNID0gKChfID0gaC5yZXNwb25zZS5oZWFkZXJzKSA9PSBudWxsID8gdm9pZCAwIDogX1tcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0pICE9PSBcInRydWVcIjtcbiAgICAgICAgYiA/IGsoXCLilJwgUHJlLXN0YXJ0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLlwiKSA6IE0gPyAoayhcIuKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dcIiksIGF3YWl0IEJuKHdjKEkpKSkgOiAoayhcIuKUnCBVc2luZyBjb21tb24gM0RTIGZsb3dcIiksIGF3YWl0IEpuKEksIGUuYmFzZVVybCkpO1xuICAgICAgICBjb25zdCBDID0gSS5jY19wbV9pZDtcbiAgICAgICAgaWYgKHMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgayhg4pScIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IFtjY19wbV9pZDogJHtDfV1gKTtcbiAgICAgICAgICBjb25zdCBGID0gYXdhaXQgJChpLCB7XG4gICAgICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogQ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGsoXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgRik7XG4gICAgICAgICAgY29uc3QgWSA9IG90KEYpO1xuICAgICAgICAgIHJldHVybiBrKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7WS5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IFkgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBrKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke00gPyBcImxlZ2FjeVwiIDogXCJuZXdcIn1dYCk7XG4gICAgICAgICAgY29uc3QgRiA9IGF3YWl0IHlyKGksIHtcbiAgICAgICAgICAgIC4uLnAsXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogQyxcbiAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IE1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gayhcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogRiB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyB3cihcIuKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERVwiKSwgd3IoaCksIGg7XG4gICAgfVxuICB9XG4pLCB3YyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChyKSA9PiByLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gbGkucGFyc2UodCk7XG59LCB2YyA9IFtcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiwgXCJhZHllblwiXSwgSG4gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5maW5kKChyKSA9PiB2Yy5pbmNsdWRlcyhyLnR5cGUpKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gSW8ucGFyc2UodCk7XG59LCBKbiA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBIbihlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gIGlmIChyLnJlZGlyZWN0X3VybCA9PT0gXCIzRFNfQ09NUExFVEVcIikge1xuICAgIGsoXCLilJwgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKSwgZyhcIjNkc19jb21wbGV0ZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgayhg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke3IucmVkaXJlY3RfdXJsfV1gKSwgZyhcIjNkc19yZWRpcmVjdFwiLCB7XG4gICAgLi4uclxuICB9KTtcbiAgY29uc3QgeyBzdGF0dXM6IG4gfSA9IGF3YWl0IG50KHsgdXJsOiByLnJlZGlyZWN0X3VybCwgYmFzZVVybDogdCB9KTtcbiAgaWYgKGsoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke259XWApLCBuID09PSBELkNBTkNFTExFRClcbiAgICB0aHJvdyBnKFwiM2RzX2NhbmNlbGxlZFwiKSwgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChuID09PSBELkZBSUxVUkUpXG4gICAgdGhyb3cgZyhcIjNkc19mYWlsdXJlXCIpLCBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgZyhcImNvbW1vbl8zZHNfY29tcGxldGVkXCIpO1xufSwgYmMgPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJsb29wXCIpLFxuICBwcm92aWRlcjogei5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIG1lcmNoYW50X2lkOiB6LnN0cmluZygpLFxuICAgIGVudGl0eV9pZDogei5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHouc3RyaW5nKCksXG4gICAgc3VwcG9ydGVkX2N1cnJlbmNpZXM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKClcbiAgfSlcbn0pLCB7IGxvZ19fOiBILCBlcnJfXzogS24gfSA9IFMoXCJsb29wLWNyeXB0b1wiKSwgRWMgPSB6Lm9iamVjdCh7XG4gIGxvb3BGaXJzdE5hbWU6IE8sXG4gIGxvb3BMYXN0TmFtZTogTyxcbiAgbG9vcEVtYWlsOiBPLFxuICBbZi5QUk9NT1RJT05fQ09ERV06IEFcbn0pLCBQYyA9IHoub2JqZWN0KHtcbiAgbG9vcEZpcnN0TmFtZTogQSxcbiAgbG9vcExhc3ROYW1lOiBBLFxuICBsb29wRW1haWw6IEEsXG4gIFtmLlBST01PVElPTl9DT0RFXTogQVxufSksIHZyID0gKGUsIHQsIHIsIG4pID0+IHtcbiAgY29uc3QgbyA9IHIuc2FmZVBhcnNlKGUpO1xuICBpZiAoIW8uc3VjY2Vzcykge1xuICAgIGNvbnN0IGkgPSBvLmVycm9yLmZvcm1hdCgpLCBzID0gZ24oaSk7XG4gICAgZm9yIChjb25zdCBbYywgbF0gb2YgT2JqZWN0LmVudHJpZXMocykpXG4gICAgICB0KGMsIGwsIGMpO1xuICAgIHRocm93IEtuKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgcyksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiBvLmRhdGE7XG59LCBDYyA9IG1lKFxuICBhc3luYyAoeyBjb250ZXh0OiBlIH0pID0+IHtcbiAgICBIKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBMb29wIENyeXB0by4uLlwiKTtcbiAgICBjb25zdCB0ID0gRyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGJjKTtcbiAgICBIKGBjaGVja291dFBheW1lbnRNZXRob2Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCksIEgoXCJTdGFydGluZyBMb29wIENyeXB0byBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHIgPSBhd2FpdCBUKGUuYW55Q2RlQ29ubmVjdGlvbiksIG4gPSByLm1vZGUgPT09IFwic2V0dXBcIiwgbyA9IGF3YWl0IEV0KGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHRcbiAgICB9KSwgaSA9IGF3YWl0IGZlKFxuICAgICAgZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgci50b2tlbixcbiAgICAgIG4sXG4gICAgICB2b2lkIDBcbiAgICApO1xuICAgIGlmICghbiAmJiAhdC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llcy5pbmNsdWRlcyhyLmN1cnJlbmN5KSlcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ3VycmVuY3kgJHtyLmN1cnJlbmN5fSBub3QgZW5hYmxlZCBmb3IgTG9vcC4gRW5hYmxlZCBjdXJyZW5jaWVzOiAke3QubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXN9YFxuICAgICAgKTtcbiAgICBpZiAoIW8gfHwgIW8ubmV4dF9hY3Rpb25fbWV0YWRhdGEpXG4gICAgICB0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBmZXRjaCBuZWNlc3Nhcnkgc2V0dXAgZGF0YSBmb3IgTG9vcFwiKTtcbiAgICBjb25zdCBzID0gby5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBsZXQgYyA9IHMuYXV0aG9yaXphdGlvbl9hbW91bnQsIGwgPSBzLm1pbl9hdXRob3JpemF0aW9uX2Ftb3VudCwgdTtcbiAgICBuID8gKHUgPSAwLCBjID0gTWF0aC5tYXgoYywgbCkpIDogKHUgPSAoaSA/IGkuYW1vdW50QXRvbSA6IHIuYW1vdW50X3RvdGFsX2F0b20pICogcy50b2tlbl9wcmljZSwgbCA9IE1hdGgubWF4KGwsIHUpLCBjID0gTWF0aC5tYXgoYywgbCkpO1xuICAgIGNvbnN0IGQgPSB1LCB5ID0gdjQoKSwgcCA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQ6IGQsXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50OiBjLFxuICAgICAgY3VzdG9tZXJSZWZJZDogeSxcbiAgICAgIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQ6IGxcbiAgICB9LCBtID0ge1xuICAgICAgYXBpS2V5OiB0Lm1ldGFkYXRhLmFwaV90b2tlbixcbiAgICAgIGVudGl0eUlkOiB0Lm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IHQubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogdC5tZXRhZGF0YS5lbnZpcm9ubWVudFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHdpZGdldFByb3BzOiBwLFxuICAgICAgaW5pdExvb3BDb25uZWN0UHJvcHM6IG1cbiAgICB9O1xuICB9XG4pLCBTYyA9IFEoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogb1xuICB9KSA9PiB7XG4gICAgSChcIlJ1bm5pbmcgTG9vcCBmbG93Li4uXCIpLCBIKFwiY29udGV4dFwiLCBlKSwgSChcImNoZWNrb3V0UGF5bWVudE1ldGhvZFwiLCB0KSwgSChcIm5vbkNkZUZvcm1JbnB1dHNcIiwgciksIEgoXCJmbG93Q2FsbGJhY2tzXCIsIG4pLCBIKFwiY3VzdG9tUGFyYW1zXCIsIG8pO1xuICAgIGxldCBpO1xuICAgIG8gIT0gbnVsbCAmJiBvLnN1Y2Nlc3MgPyBpID0gdnIoXG4gICAgICByLFxuICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBFY1xuICAgICkgOiBpID0gdnIoXG4gICAgICByLFxuICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBQY1xuICAgICk7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IFQoZS5hbnlDZGVDb25uZWN0aW9uKSwgbCA9IGMubW9kZSAhPT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgaGUoZS5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGkubG9vcEVtYWlsLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGkubG9vcEZpcnN0TmFtZSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGkubG9vcExhc3ROYW1lLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBsLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBsID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBjLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogYy5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBrZSgpXG4gICAgfSk7XG4gICAgaWYgKCFvKVxuICAgICAgdGhyb3cgRXJyb3IoXCJDaGVja291dCBmYWlsZWQuIEZhaWxlZCB0byBwcm9wZXJseSBzdWJtaXQgZm9ybSBkYXRhLlwiKTtcbiAgICBjb25zdCBkID0gYXdhaXQgJChzLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGMudG9rZW4sXG4gICAgICAvLyBUT0RPOiBXZSBkb24ndCBoYXZlIGEgcGF5aW4gb24gc2V0dXBcbiAgICAgIHRoZWlyX3BtX2lkOiBvLnN1Y2Nlc3MgJiYgby5tb2RlID09IFwiY2hlY2tvdXRcIiA/IG8ucGF5aW4ucGF5bWVudE1ldGhvZC5wYXltZW50TWV0aG9kSWQgOiB2b2lkIDAsXG4gICAgICAvLyBOT1RFOiB3ZSBkbyBoYXZlIHRoZSBjaGVja291dCBhdHRlbXB0IGlkIGhlcmUgZXZlbiBpZiBpdHMgYSBzZXR1cCwgYnV0IGZvciBub3cgd2UgZG9uJ3QgaW5jbHVkZSBpdFxuICAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGNoZWNrb3V0IGF0dGVtcHQgc3VwcG9ydCBmb3Igc2V0dXAgaW50ZW50cy5cbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGwgPyB1LmNoZWNrb3V0X2F0dGVtcHRfaWQgOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgbG9vcF9jdXN0b21lcjogby5zdWNjZXNzID8gby5jdXN0b21lciA6IHZvaWQgMCxcbiAgICAgICAgbG9vcF9wYXlpbjogby5zdWNjZXNzICYmIG8ubW9kZSA9PSBcImNoZWNrb3V0XCIgPyBvLnBheWluIDogdm9pZCAwLFxuICAgICAgICBsb29wX2ZhaWx1cmVfZGV0YWlsczogby5zdWNjZXNzID8gdm9pZCAwIDogby5mYWlsdXJlRGV0YWlscyxcbiAgICAgICAgbG9vcF9kZWJ1Z19pbmZvOiBvLnN1Y2Nlc3MgPyB2b2lkIDAgOiBvLmRlYnVnSW5mbyxcbiAgICAgICAgbG9vcF9zdWNjZXNzOiBvLnN1Y2Nlc3NcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoSChgQ29uZmlybSByZXN1bHQ6ICR7ZH1gKSwgYy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIEgoXCJEb2luZyBwYXltZW50IHNldHVwLi4uXCIpLCBIKFwi4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6XCIsIGQpO1xuICAgICAgY29uc3QgeSA9IG90KGQpO1xuICAgICAgcmV0dXJuIEgoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHt5LnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogeSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoSChcIkRvaW5nIGNoZWNrb3V0Li4uXCIpLCAhZC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgICAgdGhyb3cgS24oXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBkKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogZC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiksIGtjID0gKCkgPT4ge1xuICBjb25zdCBlID0gdjQoKS5zcGxpdChcIi1cIilbMF07XG4gIHJldHVybiB7XG4gICAgZmlyc3ROYW1lOiBgeHhfJHtlfWAsXG4gICAgbGFzdE5hbWU6IGB4eF8ke2V9YCxcbiAgICBlbWFpbDogYHh4XyR7ZX1AZW1haWwuY29tYCxcbiAgICB6aXBDb2RlOiBgeHhfJHtlfWAsXG4gICAgY291bnRyeTogXCJVU1wiXG4gIH07XG59LCB7IGxvZ19fOiB2ZSwgZXJyX186IEFjIH0gPSBTKFwicGF5cGFsXCIpLCBXbiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHsgY2xpZW50X2lkOiB6LnN0cmluZygpIH0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwicGF5cGFsXCIpXG59KSwgSWMgPSBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgY29uc3QgciA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBXbik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXlQYWwgQ1BNIG5vdCBmb3VuZCBpbiBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzXCIpO1xuICByZXR1cm4ge1xuICAgIGlzTG9hZGluZzogITEsXG4gICAgaXNBdmFpbGFibGU6ICEwLFxuICAgIHN0YXJ0RmxvdzogKCkgPT4gUi5wYXlwYWwucnVuKHtcbiAgICAgIGNvbnRleHQ6IGUsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBKKGUuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiB7fSB9XG4gICAgfSlcbiAgfTtcbn0sIFJjID0gUShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvXG4gIH0pID0+IHtcbiAgICB0cnkge1xuICAgICAgdmUoXCJSdW5uaW5nIFBheVBhbCBmbG93Li4uXCIpO1xuICAgICAgY29uc3QgaSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IFQoaSksIHsgaXNBbm9ueW1vdXM6IGMsIHVzZVJlZGlyZWN0RmxvdzogbCB9ID0gby5zZXR0aW5ncyA/PyB7fTtcbiAgICAgIHZlKFwiVmVyaWZ5aW5nIENQTS4uLlwiKTtcbiAgICAgIGNvbnN0IHUgPSBXbi5wYXJzZShyKTtcbiAgICAgIHZlKFwi4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgICAgIGNvbnN0IGQgPSBYKFxuICAgICAgICB0LFxuICAgICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgYyA/IGtjKCkgOiB2b2lkIDBcbiAgICAgICksIHkgPSBJbihkKTtcbiAgICAgIHZlKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtzLm1vZGV9YCk7XG4gICAgICBjb25zdCBwID0gdjQoKSwgbSA9IHMubW9kZSAhPT0gXCJzZXR1cFwiLCBfID0ge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB1LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdSxcbiAgICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBtLFxuICAgICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IG0gPyB7XG4gICAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBzLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICAgIH0gOiB2b2lkIDAsXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogbCxcbiAgICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogcFxuICAgICAgICB9LFxuICAgICAgICAuLi55XG4gICAgICB9LCBoID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgZS5iYXNlVXJsKS50b1N0cmluZygpLCB2ID0gYnRvYShKU09OLnN0cmluZ2lmeShfKSksIGIgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgc3Q6IHMudG9rZW4sXG4gICAgICAgIHI6IHZcbiAgICAgIH0pLCBFID0gYCR7aH0/JHtiLnRvU3RyaW5nKCl9YDtcbiAgICAgIGlmIChsKVxuICAgICAgICB0aHJvdyB2ZShcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBFLCBhd2FpdCBidCgyMCAqIDFlMyksIG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgY29uc3QgUCA9IGF3YWl0IGJuKFxuICAgICAgICBcIlBheVBhbFwiLFxuICAgICAgICBpLFxuICAgICAgICBwLFxuICAgICAgICBFXG4gICAgICApO1xuICAgICAgdmUoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgUCk7XG4gICAgICBjb25zdCBJID0gTHQoUC5ocmVmLCBcImNhdHRcIiksIE0gPSBMdChQLmhyZWYsIFwiYXBwcm92YWxfc2Vzc2lvbl9pZFwiKSwgQyA9IGF3YWl0ICQoaSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG0gPyBJIDogdm9pZCAwLFxuICAgICAgICB0aGVpcl9wbV9pZDogbSA/IE0gOiB2b2lkIDBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHZlKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIEMpLCBTZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJwYXlwYWxcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogaSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB1LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGQsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IEMsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogbVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoaSkge1xuICAgICAgdGhyb3cgQWMoXCJQYXlQYWwgcGF5bWVudCBlcnJvclwiLCBpKSwgZyhcImNoZWNrb3V0X2Vycm9yXCIsIHsgcGF5bWVudF9tZXRob2Q6IFwicGF5cGFsXCIsIGVycm9yOiBpIH0pLCBuZXcgRXJyb3IoKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgeyBsb2dfXzogYWUsIGVycl9fOiBiciB9ID0gUyhcInBvY2t5dC1wYXlwYWxcIiksIFRjID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogei5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogei5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgRmMgPSBRKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBDLCBGO1xuICAgIGFlKFwiUnVubmluZyBQb2NreXQgUGF5cGFsIGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IFQoaSk7XG4gICAgYWUoXCJWZXJpZnlpbmcgQ1BNLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBUYy5wYXJzZSh0KTtcbiAgICBhZShcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgY29uc3QgbCA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uc2V0dGluZ3MsIHUgPSBYKFxuICAgICAgcixcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgbCA9PSBudWxsID8gdm9pZCAwIDogbC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApLCBkID0gSW4odSk7XG4gICAgYWUoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke3MubW9kZX1gKTtcbiAgICBjb25zdCB5ID0gdjQoKSwgcCA9IHMubW9kZSAhPT0gXCJzZXR1cFwiLCBtID0ge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogYy5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBwLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBwID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6ICEhKChDID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5zZXR0aW5ncykgIT0gbnVsbCAmJiBDLnVzZVJlZGlyZWN0RmxvdyksXG4gICAgICAgIGZyb250ZW5kX3Rva2VuX2Zvcl9yZWRpcmVjdF9mbG93OiB5XG4gICAgICB9LFxuICAgICAgLi4uZFxuICAgIH0sIF8gPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCBlLmJhc2VVcmwpLnRvU3RyaW5nKCksIGggPSBidG9hKEpTT04uc3RyaW5naWZ5KG0pKSwgdiA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgc3Q6IHMudG9rZW4sXG4gICAgICByOiBoXG4gICAgfSksIGIgPSBgJHtffT8ke3YudG9TdHJpbmcoKX1gO1xuICAgIGlmICgoRiA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uc2V0dGluZ3MpICE9IG51bGwgJiYgRi51c2VSZWRpcmVjdEZsb3cpXG4gICAgICB0aHJvdyBhZShcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBiLCBhd2FpdCBidCgyMCAqIDFlMyksIG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIGFlKFwiU3RhcnRpbmcgcG9wdXAgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCBhZShcIk9wZW5pbmcgcGF5cGFsIGlmcmFtZS4uLlwiKTtcbiAgICBjb25zdCBFID0gYXdhaXQgYm4oXG4gICAgICBcIlBheVBhbFwiLFxuICAgICAgaSxcbiAgICAgIHksXG4gICAgICBiXG4gICAgKTtcbiAgICBhZShcIlBheXBhbCBmbG93IHJlc3VsdFwiLCBFKTtcbiAgICBjb25zdCBQID0gcW4oRS5ocmVmKSwgSSA9IEx0KEUuaHJlZiwgXCJjYXR0XCIpO1xuICAgIGlmICghSSlcbiAgICAgIHRocm93IGJyKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMOlwiLCBFLmhyZWYpLCBuZXcgRXJyb3IoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkxcIik7XG4gICAgYWUoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7UH1gKTtcbiAgICBjb25zdCBNID0gYXdhaXQgJChpLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogUCxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IHAgPyBJIDogdm9pZCAwXG4gICAgfSk7XG4gICAgaWYgKGFlKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIE0pLCBzLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IE0ucGF5bWVudF9tZXRob2RzWzBdLmlkXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgaWYgKCFNLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgdGhyb3cgYnIoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBNKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogTS5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgIH07XG4gIH1cbiksIEVyID0gXCJvanMtc3RyaXBlLWxpbmstYnRuXCIsIHsgbG9nX186IGosIGVycl9fOiBOYyB9ID0gUyhcInN0cmlwZS1saW5rXCIpLCBNYyA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSksIERjID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIE9jID0gbWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIGNvbnN0IHIgPSBlLmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICBqKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLlwiKTtcbiAgICBjb25zdCBuID0gRyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIE1jKTtcbiAgICBqKFwiU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBvID0gZS5hbnlDZGVDb25uZWN0aW9uLCBpID0gYXdhaXQgVChvKSwgcyA9IGkubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGooXCJDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5cIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IGZlKG8sIGkudG9rZW4sIHMsIHZvaWQgMCksIHsgZWxlbWVudHM6IGwsIHN0cmlwZTogdSB9ID0gYXdhaXQgcGkobi5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIGN1cnJlbmN5OiBjLmN1cnJlbmN5LFxuICAgICAgc2V0dXBfZnV0dXJlX3VzYWdlOiBcIm9mZl9zZXNzaW9uXCIsXG4gICAgICBwYXltZW50TWV0aG9kQ3JlYXRpb246IFwibWFudWFsXCJcbiAgICB9KTtcbiAgICBqKFwiQ3JlYXRpbmcgZXhwcmVzcyBjaGVja291dC4uLlwiKTtcbiAgICBjb25zdCBkID0gbC5jcmVhdGUoXCJleHByZXNzQ2hlY2tvdXRcIiwge1xuICAgICAgYnV0dG9uSGVpZ2h0OiByID09IG51bGwgPyB2b2lkIDAgOiByLmJ1dHRvbkhlaWdodCxcbiAgICAgIHBheW1lbnRNZXRob2RzOiB7XG4gICAgICAgIGFtYXpvblBheTogXCJuZXZlclwiLFxuICAgICAgICBhcHBsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBnb29nbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgcGF5cGFsOiBcIm5ldmVyXCJcbiAgICAgIH1cbiAgICB9KSwgeSA9ICgpID0+IHtcbiAgICAgIGQubW91bnQoYCMke0VyfWApO1xuICAgIH0sIHAgPSAoKSA9PiB7XG4gICAgICBkLnVubW91bnQoKTtcbiAgICB9O1xuICAgIHJldHVybiByICE9IG51bGwgJiYgci5kb05vdE1vdW50T25Jbml0ID8gaihcIk5PVCBtb3VudGluZyBzdHJpcGUgbGluayBidXR0b24gKGRvTm90TW91bnRPbkluaXQgaXMgdHJ1ZSlcIikgOiAoaihcIk1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbi4uLlwiKSwgeSgpKSwgZC5vbihcImNsaWNrXCIsIGFzeW5jIChtKSA9PiB7XG4gICAgICBpZiAoaihcIlN0cmlwZSBMaW5rIGJ1dHRvbiBjbGlja2VkXCIpLCByICE9IG51bGwgJiYgci5vdmVycmlkZUxpbmtTdWJtaXQgJiYgIWF3YWl0IHIub3ZlcnJpZGVMaW5rU3VibWl0KCkpIHtcbiAgICAgICAgaihcIlN0cmlwZSBMaW5rIHN1Ym1pdCBhYm9ydGVkIGJ5IG92ZXJyaWRlTGlua1N1Ym1pdFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbS5yZXNvbHZlKCk7XG4gICAgfSksIGQub24oXCJjb25maXJtXCIsIGFzeW5jIChtKSA9PiB7XG4gICAgICBqKFwiU3RyaXBlIExpbmsgd2luZG93IGNvbmZpcm1lZFwiLCBtKTtcbiAgICAgIGNvbnN0IF8gPSBhd2FpdCB1LmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50czogbCxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBtLmJpbGxpbmdEZXRhaWxzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgXy5lcnJvciA/IChOYyhcImVycm9yXCIsIF8uZXJyb3IpLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoXy5lcnJvci5tZXNzYWdlID8/IFwiU3RyaXBlIExpbmsgdW5rbm93biBlcnJvclwiKSkgOiAoaihcInBheW1lbnRNZXRob2RcIiwgXy5wYXltZW50TWV0aG9kKSwgUi5zdHJpcGVMaW5rLnJ1bih7XG4gICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogSihlLmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgc3RyaXBlUE06IF8ucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiAhMCB9XG4gICAgICB9KSk7XG4gICAgfSksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGNvbnRyb2xsZXI6IHtcbiAgICAgICAgbW91bnRCdXR0b246IHksXG4gICAgICAgIGRpc21vdW50QnV0dG9uOiBwLFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgamMoRXIpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgTGMgPSBRKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIGooXCJSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IGUuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBqKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBzID0gVWMociwgby5zdHJpcGVQTSksIGMgPSBYKHMsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmNcbiAgICB9KSwgaihcIlN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBsID0gYXdhaXQgaGUoaSwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IG8uc3RyaXBlUE0uaWQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGNbZi5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogY1tmLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogY1tmLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogY1tmLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogY1tmLkNPVU5UUlldXG4gICAgICB9LFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGtlKClcbiAgICB9KTtcbiAgICBqKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGwpO1xuICAgIGNvbnN0IGQgPSBEYy5wYXJzZShsLnJlcXVpcmVkX3VzZXJfYWN0aW9ucylbMF0ub3VyX2V4aXN0aW5nX3BtX2lkLCB5ID0gYXdhaXQgVChpKTtcbiAgICBpZiAoeS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGooXCJEb2luZyBwYXltZW50IHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgcCA9IGF3YWl0ICQoaSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHkudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBvdChwKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBqKFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBwID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHkudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiB0LnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBjW2YuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogY1tmLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogY1tmLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogY1tmLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogeS5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogeS5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IEp0KGksIHApIH07XG4gICAgfVxuICB9XG4pLCBVYyA9IChlLCB0KSA9PiB7XG4gIHZhciBsLCB1LCBkLCB5LCBwO1xuICBjb25zdCByID0geyAuLi5lIH0sIFtuLCAuLi5vXSA9ICgodSA9IChsID0gdC5iaWxsaW5nX2RldGFpbHMubmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGwudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogdS5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgaSA9IG8uam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICByW2YuRU1BSUxdID0gcltmLkVNQUlMXSB8fCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAoKGQgPSB0LmxpbmspID09IG51bGwgPyB2b2lkIDAgOiBkLmVtYWlsKSB8fCB0LmJpbGxpbmdfZGV0YWlscy5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIHJbZi5aSVBfQ09ERV0gPSByW2YuWklQX0NPREVdIHx8ICgoeSA9IHQuYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiB5LnBvc3RhbF9jb2RlKSB8fCBcIjAwMDAwXCIsIHJbZi5DT1VOVFJZXSA9IHJbZi5DT1VOVFJZXSB8fCAoKHAgPSB0LmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogcC5jb3VudHJ5KSB8fCBcIlVTXCI7XG4gIGNvbnN0IHMgPSByW2YuRklSU1RfTkFNRV0gfHwgbiB8fCBcIlwiLCBjID0gcltmLkxBU1RfTkFNRV0gfHwgaSB8fCBcIlwiO1xuICByZXR1cm4gcyB8fCBjID8gKHJbZi5GSVJTVF9OQU1FXSA9IHMsIHJbZi5MQVNUX05BTUVdID0gYykgOiAocltmLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCByW2YuTEFTVF9OQU1FXSA9IFwiXCIpLCBqKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIHIpLCByO1xufSwgamMgPSAoZSkgPT4gbmV3IFByb21pc2UoKHQpID0+IHtcbiAgY29uc3QgciA9ICgpID0+IHtcbiAgICBjb25zdCBuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk7XG4gICAgbiA/IHQobikgOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocik7XG4gIH07XG4gIHIoKTtcbn0pLCB7IGxvZ19fOiBxLCBlcnJfXzogeGMgfSA9IFMoXCJzdHJpcGUtcHJcIiksICRjID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei51bmlvbihbei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KSwgVmMgPSBtZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgcShcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIFBSLi4uXCIpO1xuICAgIGNvbnN0IHIgPSBHKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgJGMpO1xuICAgIHEoXCJJbml0aWFsaXppbmcgU3RyaXBlIFBSIGZsb3cuLi5cIik7XG4gICAgY29uc3QgbiA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgbyA9IGF3YWl0IFQobiksIGkgPSBvLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBxKFwiR2V0dGluZyBpbml0aWFsIHByZXZpZXcgYW1vdW50XCIpO1xuICAgIGNvbnN0IHMgPSBhd2FpdCBmZShuLCBvLnRva2VuLCBpLCB2b2lkIDApLCBjID0gYXdhaXQgbWkoXG4gICAgICByLm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIHMuYW1vdW50QXRvbSxcbiAgICAgIHMuY3VycmVuY3ksXG4gICAgICBpXG4gICAgKTtcbiAgICBxKFwiQ2hlY2tpbmcgaWYgY2FuIG1ha2UgcGF5bWVudFwiKTtcbiAgICBjb25zdCBsID0gYXdhaXQgYy5jYW5NYWtlUGF5bWVudCgpO1xuICAgIGlmIChsID09PSBudWxsKVxuICAgICAgcmV0dXJuIHhjKFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiKSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIgfTtcbiAgICBxKFwiU3RyaXBlIFBSIGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBDYW4gbWFrZSBwYXltZW50XCIsIGwpO1xuICAgIGNvbnN0IHUgPSAoZCwgeSkgPT4gUi5zdHJpcGVQUi5ydW4oe1xuICAgICAgY29udGV4dDogZSxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogVGUoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBkKSxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEooZS5mb3JtRGl2KSxcbiAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXI6IGQsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHkgPT0gbnVsbCA/IHZvaWQgMCA6IHkub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICAgICAgaW5pdFJlc3VsdDoge1xuICAgICAgICBwcm9jZXNzb3I6IEIuRW51bS5zdHJpcGUsXG4gICAgICAgIHByOiBjLFxuICAgICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczogeyBhcHBsZVBheTogbC5hcHBsZVBheSwgZ29vZ2xlUGF5OiBsLmdvb2dsZVBheSB9LFxuICAgICAgICBzdGFydEZsb3c6IHVcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBCLkVudW0uc3RyaXBlLFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgcHI6IGMsXG4gICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHtcbiAgICAgICAgYXBwbGVQYXk6IGwuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogbC5nb29nbGVQYXlcbiAgICAgIH0sXG4gICAgICBzdGFydEZsb3c6IHVcbiAgICB9O1xuICB9XG4pLCBHYyA9IFEoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogbyxcbiAgICBpbml0UmVzdWx0OiBpXG4gIH0pID0+IHtcbiAgICBpZiAocShcIlJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5cIiksIG8ucHJvdmlkZXIgIT09IHQucHJvdmlkZXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke28ucHJvdmlkZXJ9LCBnb3QgJHt0LnByb3ZpZGVyfWApO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBpLnByO1xuICAgIGlmIChvICE9IG51bGwgJiYgby5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBfID0gby5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgcShcIk92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhcIiwgXyk7XG4gICAgICBjb25zdCBoID0gdHlwZW9mIF8uYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyBfLmFwcGxlUGF5UGF5bWVudFJlcXVlc3Qoe30pIDogXy5hcHBsZVBheVBheW1lbnRSZXF1ZXN0O1xuICAgICAgcWMoYywgXy5hbW91bnQsIF8ucGVuZGluZywgaCwgXy5sYWJlbCk7XG4gICAgfVxuICAgIHEoXCJTaG93aW5nIFBSIGRpYWxvZy4uLlwiKSwgYy5zaG93KCk7XG4gICAgY29uc3QgbCA9IGF3YWl0IGZpKGMpO1xuICAgIHEoXCJTdHJpcGUgUE0gYWRkZWQgZXZlbnQ6XCIsIGwpLCBxKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCB1ID0gemMociwgbCksIGQgPSBYKHUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmRcbiAgICB9KSwgcShcIlBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIsIGQpO1xuICAgIGNvbnN0IHkgPSBhd2FpdCBycyhzLCB7XG4gICAgICBmaWVsZHM6IGQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHRcbiAgICB9KSwgcCA9IEJjKHkpO1xuICAgIHEoXCJDb25maXJtaW5nIFBSIHdpdGggU3RyaXBlLi4uXCIpLCBhd2FpdCB5aShwLCBsKTtcbiAgICBjb25zdCBtID0gYXdhaXQgVChzKTtcbiAgICBpZiAobS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIHEoXCJDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCBfID0gYXdhaXQgJChzLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogbS50b2tlblxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogb3QoXykgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcShcIlBlcmZvcm1pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBfID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IG0udG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiB0LnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IGRbZi5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBkW2YuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGRbZi5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBkW2YuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBkW2YuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBkW2YuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBtLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBtLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHRcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgSnQocywgXykgfTtcbiAgICB9XG4gIH1cbiksIHpjID0gKGUsIHQpID0+IHtcbiAgdmFyIGQsIHksIHAsIG07XG4gIGNvbnN0IHIgPSB7IC4uLmUgfSwgW24sIC4uLm9dID0gKCh5ID0gKGQgPSB0LnBheWVyTmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGQudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogeS5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgaSA9IG8uam9pbihcIiBcIikgfHwgdm9pZCAwLCBzID0gKG0gPSAocCA9IHQucGF5bWVudE1ldGhvZCkgPT0gbnVsbCA/IHZvaWQgMCA6IHAuYmlsbGluZ19kZXRhaWxzKSA9PSBudWxsID8gdm9pZCAwIDogbS5hZGRyZXNzLCBjID0gdC5zaGlwcGluZ0FkZHJlc3M7XG4gIHJbZi5FTUFJTF0gPSByW2YuRU1BSUxdIHx8IHQucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIHJbZi5aSVBfQ09ERV0gPSByW2YuWklQX0NPREVdIHx8IChzID09IG51bGwgPyB2b2lkIDAgOiBzLnBvc3RhbF9jb2RlKSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCIsIHJbZi5DT1VOVFJZXSA9IHJbZi5DT1VOVFJZXSB8fCAocyA9PSBudWxsID8gdm9pZCAwIDogcy5jb3VudHJ5KSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5jb3VudHJ5KSB8fCBcIlVTXCI7XG4gIGNvbnN0IGwgPSByW2YuRklSU1RfTkFNRV0gfHwgbiB8fCBcIlwiLCB1ID0gcltmLkxBU1RfTkFNRV0gfHwgaSB8fCBcIlwiO1xuICByZXR1cm4gbCB8fCB1ID8gKHJbZi5GSVJTVF9OQU1FXSA9IGwsIHJbZi5MQVNUX05BTUVdID0gdSkgOiAocltmLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCByW2YuTEFTVF9OQU1FXSA9IFwiXCIpLCBxKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIHIpLCByO1xufSwgcWMgPSAoZSwgdCwgciwgbiwgbykgPT4ge1xuICBlLnVwZGF0ZSh7XG4gICAgdG90YWw6IHtcbiAgICAgIGFtb3VudDogdC5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IG8gPz8gXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogclxuICAgIH0sXG4gICAgY3VycmVuY3k6IHQuY3VycmVuY3ksXG4gICAgLy8gU3RyaXBlJ3MgYXBwbGVQYXkgb3B0aW9uIG9ubHkgc3VwcG9ydHMgJ3JlY3VycmluZ1BheW1lbnRSZXF1ZXN0JyB8ICdkZWZlcnJlZFBheW1lbnRSZXF1ZXN0JyB8ICdhdXRvbWF0aWNSZWxvYWRQYXltZW50UmVxdWVzdCcgb2YgbmF0aXZlIEFwcGxlUGF5IHBheW1lbnQgcmVxdWVzdFxuICAgIC8vIFdlJ3JlIGFjY2VwdGluZyBuYXRpdmUgUGF5bWVudCBSZXF1ZXN0IGhlcmUgZm9yIG1vcmUgY29tbW9uIHR5cGluZy5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gc3RyaXBlIGRvIG5vdCBleHBlY3QgYWRkaXRpb25hbCBmaWVsZHNcbiAgICBhcHBsZVBheTogblxuICB9KTtcbn0sIEJjID0gKGUpID0+IHtcbiAgaWYgKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VycmVkLlxuRGV0YWlsczogZ290ICR7ZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgcmV0dXJuIHVpLnBhcnNlKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn0sIFRlID0gKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IGUuZmlsdGVyKChvKSA9PiB7XG4gICAgY29uc3QgaSA9IHIgPT09IHZvaWQgMCA/ICEwIDogby5wcm9jZXNzb3JfbmFtZSA9PT0gciwgcyA9IG8ucHJvdmlkZXIgPT09IHQ7XG4gICAgcmV0dXJuIGkgJiYgcztcbiAgfSk7XG4gIGlmIChuLmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgZSksIG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3R9JyBhbmQgcHJvY2Vzc29yICcke3J9J2ApO1xuICByZXR1cm4gbi5sZW5ndGggIT09IDEgJiYgKGNvbnNvbGUud2FybihcIkNQTXMgbGlzdFwiLCBlKSwgY29uc29sZS53YXJuKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3R9JyBhbmQgcHJvY2Vzc29yICcke3J9J2ApLCBnKFwibW9yZV90aGFuX29uZV9jcG1fZm91bmRcIiwge1xuICAgIHByb3ZpZGVyOiB0LFxuICAgIHByb2Nlc3NvcjogcixcbiAgICBjcG1zOiBlXG4gIH0pKSwgblswXTtcbn0sIFIgPSB7XG4gIC8vIOKciyBOb3RlOiBGb3IgZmxvd3MgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCBwbGVhc2UgYWRkIHRoZW0gdG8gYGluaXQtZmxvd3MudHNgXG4gIC8vIENvbW1vblxuICBjb21tb25DQzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogZ2NcbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogVmMsXG4gICAgcnVuOiBHY1xuICB9LFxuICBzdHJpcGVMaW5rOiB7XG4gICAgaW5pdDogT2MsXG4gICAgcnVuOiBMY1xuICB9LFxuICAvLyBQb2NreXRcbiAgcG9ja3l0UGF5cGFsOiB7XG4gICAgcnVuOiBGY1xuICB9LFxuICAvLyBQYXlQYWxcbiAgcGF5cGFsOiB7XG4gICAgaW5pdDogSWMsXG4gICAgcnVuOiBSY1xuICB9LFxuICAvLyBBaXJ3YWxsZXhcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogWnMsXG4gICAgcnVuOiBRc1xuICB9LFxuICBhaXJ3YWxsZXhBcHBsZVBheToge1xuICAgIGluaXQ6IEtzLFxuICAgIHJ1bjogV3NcbiAgfSxcbiAgLy8gTG9vcFxuICBsb29wQ3J5cHRvOiB7XG4gICAgaW5pdDogQ2MsXG4gICAgcnVuOiBTY1xuICB9LFxuICBhdXRob3JpemVOZXRBcHBsZVBheToge1xuICAgIGluaXQ6IHRjLFxuICAgIHJ1bjogcmNcbiAgfSxcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogbmMsXG4gICAgcnVuOiBvY1xuICB9LFxuICBhZHllbkdvb2dsZVBheToge1xuICAgIGluaXQ6IHFzLFxuICAgIHJ1bjogQnNcbiAgfSxcbiAgYWR5ZW5BcHBsZVBheToge1xuICAgIGluaXQ6IEdzLFxuICAgIHJ1bjogenNcbiAgfVxuICAvLyDwn5GJIEFkZCBtb3JlIGZsb3dzIGhlcmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn0sIHsgbG9nX186IFljLCBlcnJfXzogSGMgfSA9IFMoXCJpbml0LWZsb3dzXCIpLCBpZSA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBuZXcgWWUoKTtcbiAgcmV0dXJuIHtcbiAgICBwdWJsaXNoZXI6IHIsXG4gICAgaW5pdGlhbGl6ZTogYXN5bmMgKG4pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChyLmN1cnJlbnQuaXNTdWNjZXNzKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgZmxvdyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLlwiKTtcbiAgICAgICAgY29uc3QgbyA9IGF3YWl0IHQobik7XG4gICAgICAgIFljKGDinJQgJHtlfSBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gUmVzdWx0OmAsIG8pLCByLnNldChvKTtcbiAgICAgIH0gY2F0Y2ggKG8pIHtcbiAgICAgICAgSGMoYPCdma0gJHtlfSBmbG93IGluaXRpYWxpemF0aW9uIGZhaWxlZC4gRXJyb3I6YCwgWihvKSwgXCJEZXRhaWxzOlwiLCBvKSwgci50aHJvdyhvLCBaKG8pKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59LCBKYyA9IGFzeW5jIChlLCB0LCByKSA9PiB7XG4gIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC52YWx1ZXMoZSkubWFwKChuKSA9PiBuLmluaXRpYWxpemUoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiByIH0pKSk7XG59LCBLYyA9ICgpID0+ICh7XG4gIC8vIPCfkqEgQWRkIG5ldyBpbml0IGZsb3dzIGhlcmVcbiAgLy8gU3RyaXBlIFBSXG4gIHN0cmlwZVBSOiBpZShcIlN0cmlwZSBQUlwiLCBSLnN0cmlwZVBSLmluaXQpLFxuICAvLyBTdHJpcGUgTGlua1xuICBzdHJpcGVMaW5rOiBpZShcIlN0cmlwZSBMaW5rXCIsIFIuc3RyaXBlTGluay5pbml0KSxcbiAgLy8gQWlyd2FsbGV4IEdvb2dsZVBheVxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IGllKFwiQWlyd2FsbGV4IEdvb2dsZVBheVwiLCBSLmFpcndhbGxleEdvb2dsZVBheS5pbml0KSxcbiAgLy8gQWlyd2FsbGV4IEFwcGxlUGF5XG4gIGFpcndhbGxleEFwcGxlUGF5OiBpZShcIkFpcndhbGxleCBBcHBsZVBheVwiLCBSLmFpcndhbGxleEFwcGxlUGF5LmluaXQpLFxuICAvLyBMb29wXG4gIGxvb3A6IGllKFwiTG9vcFwiLCBSLmxvb3BDcnlwdG8uaW5pdCksXG4gIC8vIFBheVBhbFxuICBwYXlwYWw6IGllKFwiUGF5UGFsXCIsIFIucGF5cGFsLmluaXQpLFxuICAvLyBBdXRobmV0IEdvb2dsZVBheVxuICBhdXRob3JpemVOZXRHb29nbGVQYXk6IGllKFwiQXV0aG5ldCBHb29nbGVQYXlcIiwgUi5hdXRob3JpemVOZXRHb29nbGVQYXkuaW5pdCksXG4gIC8vIEF1dGhuZXQgQXBwbGVQYXlcbiAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IGllKFwiQXV0aG5ldCBBcHBsZVBheVwiLCBSLmF1dGhvcml6ZU5ldEFwcGxlUGF5LmluaXQpLFxuICAvLyBBZHllbiBHb29nbGVQYXlcbiAgYWR5ZW5Hb29nbGVQYXk6IGllKFwiQWR5ZW4gR29vZ2xlUGF5XCIsIFIuYWR5ZW5Hb29nbGVQYXkuaW5pdCksXG4gIC8vIEFkeWVuIEFwcGxlUGF5XG4gIGFkeWVuQXBwbGVQYXk6IGllKFwiQWR5ZW4gQXBwbGVQYXlcIiwgUi5hZHllbkFwcGxlUGF5LmluaXQpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59KSwgeyBlcnJfXzogV2MgfSA9IFMoXCJmb3JtLWNhbGxiYWNrc1wiKSwgZWUgPSB6LmZ1bmN0aW9uKCkub3B0aW9uYWwoKSwgUHIgPSB6Lm9iamVjdCh7XG4gIG9uRm9jdXM6IGVlLFxuICBvbkJsdXI6IGVlLFxuICBvbkNoYW5nZTogZWUsXG4gIG9uTG9hZDogZWUsXG4gIG9uTG9hZEVycm9yOiBlZSxcbiAgb25WYWxpZGF0aW9uRXJyb3I6IGVlLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogZWUsXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBlZSxcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBlZSxcbiAgb25DaGVja291dEVycm9yOiBlZSxcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IGVlXG59KSwgbGUgPSBjbGFzcyBsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHQpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IGxlLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCksIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtyLCBuXSkgPT4ge1xuICAgICAgICBjb25zdCBvID0gb2EociwgbiA/PyBsZS5OT09QLCBXYyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1tyXSA9IG87XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLl9jYWxsYmFja3MgPSBsZS5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59O1xubGUuTk9PUCA9ICgpID0+IHtcbn0sIGxlLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICBjb25zdCB0ID0ge307XG4gIHJldHVybiBPYmplY3Qua2V5cyhQci5rZXlvZigpLmVudW0pLmZvckVhY2goKHIpID0+IHtcbiAgICB0W3JdID0gbGUuTk9PUDtcbiAgfSksIHQ7XG59LCBsZS5mcm9tT2JqZWN0ID0gKHQpID0+IHtcbiAgY29uc3QgciA9IG5ldyBsZSgpO1xuICByZXR1cm4gci5zZXRDYWxsYmFja3MoUHIucGFyc2UodCkpLCByO1xufTtcbmxldCBqdCA9IGxlO1xuZnVuY3Rpb24gWmMoKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgZSA9IFUoKSwgdCA9IGU7XG4gICAgaWYgKHQgIT0gbnVsbCAmJiB0Lm5leHQgfHwgdCAhPSBudWxsICYmIHQuX19ORVhUX0RBVEFfXyB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI19fbmV4dFwiKSlcbiAgICAgIHJldHVybiBcIm5leHRqc1wiO1xuICAgIGNvbnN0IHIgPSBlO1xuICAgIGlmIChyICE9IG51bGwgJiYgci5fX05VWFRfXyB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI19fbnV4dFwiKSlcbiAgICAgIHJldHVybiBcIm51eHRcIjtcbiAgICBpZiAoT2JqZWN0LmtleXMoZG9jdW1lbnQpLmZpbmQoKG8pID0+IG8uaW5jbHVkZXMoXCJyZWFjdFwiKSkgfHwgQXJyYXkuZnJvbShkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoXCJib2R5ID4gKlwiKSkuZmluZChcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBfcmVhY3RSb290Q29udGFpbmVyIGRvZXNuJ3QgZXhpc3RcbiAgICAgIChvKSA9PiBvLl9yZWFjdFJvb3RDb250YWluZXJcbiAgICApKVxuICAgICAgcmV0dXJuIFwicmVhY3RcIjtcbiAgICBjb25zdCBuID0gZTtcbiAgICByZXR1cm4gbiAhPSBudWxsICYmIG4uVnVlIHx8IG4gIT0gbnVsbCAmJiBuLl9fVlVFX18gPyBcInZ1ZVwiIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIltuZy12ZXJzaW9uXVwiKSA/IFwiYW5ndWxhclwiIDogXCJ2YW5pbGxhXCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBcInVua25vd25cIjtcbiAgfVxufVxuZnVuY3Rpb24gUWMoZSkge1xuICB2YXIgdCwgciwgbjtcbiAgdHJ5IHtcbiAgICBzd2l0Y2ggKGUpIHtcbiAgICAgIGNhc2UgXCJyZWFjdFwiOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgXCJuZXh0anNcIjoge1xuICAgICAgICBjb25zdCBpID0gVSgpO1xuICAgICAgICByZXR1cm4gKCh0ID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5uZXh0KSA9PSBudWxsID8gdm9pZCAwIDogdC52ZXJzaW9uKSB8fCAoKHIgPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLl9fTkVYVF9EQVRBX18pID09IG51bGwgPyB2b2lkIDAgOiByLmJ1aWxkSWQpIHx8IG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwibnV4dFwiOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgXCJ2dWVcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwiYW5ndWxhclwiOiB7XG4gICAgICAgIGNvbnN0IG8gPSAobiA9IFUoKSkgPT0gbnVsbCA/IHZvaWQgMCA6IG4uZG9jdW1lbnQsIGkgPSBvID09IG51bGwgPyB2b2lkIDAgOiBvLnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIik7XG4gICAgICAgIHJldHVybiBpID8gaS5nZXRBdHRyaWJ1dGUoXCJuZy12ZXJzaW9uXCIpIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIFhjKCkge1xuICBjb25zdCBlID0gWmMoKSwgdCA9IFFjKGUpO1xuICByZXR1cm4geyBmcmFtZXdvcms6IGUsIHZlcnNpb246IHQgfTtcbn1cbmNvbnN0IFpuID0gKCkgPT4ge1xuICBjb25zdCBlID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLmhlaWdodCA6IG51bGwsIHQgPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4ud2lkdGggOiBudWxsLCByID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLmNvbG9yRGVwdGggOiBudWxsLCBuID0gd2luZG93ICYmIHdpbmRvdy5uYXZpZ2F0b3IgPyB3aW5kb3cubmF2aWdhdG9yLmphdmFFbmFibGVkKCkgOiAhMSwgbyA9IHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yID8gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQgOiBudWxsLCBpID0gXCJ0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSxpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44XCI7XG4gIGxldCBzID0gbnVsbDtcbiAgd2luZG93ICYmIHdpbmRvdy5uYXZpZ2F0b3IgJiYgKHMgPSB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlID8gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSA6IHdpbmRvdy5uYXZpZ2F0b3IuYnJvd3Nlckxhbmd1YWdlKTtcbiAgY29uc3QgYyA9ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgcmV0dXJuIHtcbiAgICBjb2xvcl9kZXB0aDogcixcbiAgICBqYXZhX2VuYWJsZWQ6IG4sXG4gICAgamF2YXNjcmlwdF9lbmFibGVkOiAhMCxcbiAgICBsYW5ndWFnZTogcyxcbiAgICBzY3JlZW5faGVpZ2h0OiBlLFxuICAgIHNjcmVlbl93aWR0aDogdCxcbiAgICB0aW1lX3pvbmVfb2Zmc2V0OiBjLFxuICAgIHVzZXJfYWdlbnQ6IG8sXG4gICAgYWNjZXB0X2hlYWRlcjogaVxuICB9O1xufTtcbnZhciBMID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUucG9ja3l0UGF5cGFsID0gXCJwb2NreXQtcGF5cGFsXCIsIGUuYWlyd2FsbGV4R29vZ2xlUGF5ID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiLCBlLmFpcndhbGxleEFwcGxlUGF5ID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCIsIGUuYXV0aG9yaXplbmV0R29vZ2xlUGF5ID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiLCBlLmF1dGhvcml6ZW5ldEFwcGxlUGF5ID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCIsIGUuYWR5ZW5Hb29nbGVQYXkgPSBcImFkeWVuLWdvb2dsZS1wYXlcIiwgZS5hZHllbkFwcGxlUGF5ID0gXCJhZHllbi1hcHBsZS1wYXlcIiwgZS5sb29wQ3J5cHRvID0gXCJsb29wLWNyeXB0b1wiLCBlLnBheXBhbCA9IFwicGF5cGFsXCIsIGUpKShMIHx8IHt9KTtcbnoubmF0aXZlRW51bShMKTsgY29uc3QgZWwgPSAoZSkgPT4gSlNPTi5zdHJpbmdpZnkoZSksIHsgbG9nX186IFR0LCBlcnJfXzogdGwgfSA9IFMoXCJ0cmFjZXJcIiksIHJsID0gKGUsIHQpID0+IHtcbiAgdHJ5IHtcbiAgICBubChlLCB0KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRsKGBFcnJvciBpbml0aWFsaXppbmcgdHJhY2VyOiAke3J9YCk7XG4gIH1cbn07XG5sZXQgQ3I7XG5jb25zdCBubCA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID4gXCJ1XCIpXG4gICAgcmV0dXJuO1xuICBjb25zdCByID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LUJjbkZpS01LLSF+ezAwM31+LmpzJyksIHsgQ29uc29sZVNwYW5FeHBvcnRlcjogbiwgU2ltcGxlU3BhblByb2Nlc3NvcjogbywgV2ViVHJhY2VyUHJvdmlkZXI6IGkgfSA9IHIsIHMgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQ2VNSG1FSzAtIX57MDA2fX4uanMnKSwgeyBGZXRjaEluc3RydW1lbnRhdGlvbjogYyB9ID0gcywgbCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC14TlVTQXc0Si0hfnswMGJ9fi5qcycpLCB7IFpvbmVDb250ZXh0TWFuYWdlcjogdSB9ID0gbCwgZCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1EcjV4MHM1SS0hfnswMGN9fi5qcycpLCB7IHJlZ2lzdGVySW5zdHJ1bWVudGF0aW9uczogeSB9ID0gZCwgcCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1CVW9tQjBQWi0hfnswMGV9fi5qcycpLCB7IFJlc291cmNlOiBtIH0gPSBwLCBfID0gYXdhaXQgaW1wb3J0KCcuL2RldGVjdC1yZXNvdXJjZXMtRFQtbUpYZ2QtIX57MDBofX4uanMnKS50aGVuKCh3ZSkgPT4gd2UuZCksIHsgZGV0ZWN0UmVzb3VyY2VzU3luYzogaCB9ID0gXywgdiA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1EVU5KbWlydS0hfnswMGt9fi5qcycpLCB7IE9UTFBUcmFjZUV4cG9ydGVyOiBiIH0gPSB2LCBFID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LURwUlM2TTYyLSF+ezAwbX1+LmpzJyksIHsgQjNQcm9wYWdhdG9yOiBQLCBCM0luamVjdEVuY29kaW5nOiBJIH0gPSBFLCBNID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LURsRmozNmtPLSF+ezAwMX1+LmpzJyksIHsgQmF0Y2hTcGFuUHJvY2Vzc29yOiBDIH0gPSBNO1xuICBUdChgSW5pdGlhbGl6aW5nIHRyYWNlciB3aXRoIHZlcnNpb24gJHtlfSBhbmQgYmFzZVVybCAke3R9YCk7XG4gIGNvbnN0IEYgPSBvbCh0KTtcbiAgVHQoYFVzaW5nIGNvbGxlY3RvciBVUkwgJHtGfWApO1xuICBjb25zdCBZID0gbmV3IGIoeyB1cmw6IEYgfSksIGdlID0ge1xuICAgIFwic2VydmljZS52ZXJzaW9uXCI6IGUsXG4gICAgXCJzZXJ2aWNlLm5hbWVcIjogXCJvanNcIlxuICB9O1xuICByZXR1cm4gbmV3IGkoe1xuICAgIHJlc291cmNlOiBuZXcgbShnZSkubWVyZ2UoaCgpKSxcbiAgICBzcGFuUHJvY2Vzc29yczogW1xuICAgICAgbmV3IG8obmV3IG4oKSksXG4gICAgICBuZXcgQyhZLCB7XG4gICAgICAgIHNjaGVkdWxlZERlbGF5TWlsbGlzOiA1MDBcbiAgICAgIH0pXG4gICAgXVxuICB9KS5yZWdpc3Rlcih7XG4gICAgY29udGV4dE1hbmFnZXI6IG5ldyB1KCksXG4gICAgcHJvcGFnYXRvcjogbmV3IFAoeyBpbmplY3RFbmNvZGluZzogSS5NVUxUSV9IRUFERVIgfSlcbiAgfSksIHkoe1xuICAgIGluc3RydW1lbnRhdGlvbnM6IFtcbiAgICAgIG5ldyBjKHtcbiAgICAgICAgcHJvcGFnYXRlVHJhY2VIZWFkZXJDb3JzVXJsczogWy8uKi9dLFxuICAgICAgICAvLyBQcm9wYWdhdGUgdG8gYWxsIFVSTHNcbiAgICAgICAgLy8gRXhjbHVkZSBBZHllbiBVUkxzIC0gdGhleSBkbyBub3QgYWxsb3cgT1BUSU9OUyByZXF1ZXN0c1xuICAgICAgICAvLyBBbHNvIGV4Y2x1ZGUgbG9vcGNyeXB0by54eXpcbiAgICAgICAgaWdub3JlVXJsczogWy9eaHR0cHM6XFwvXFwvKC4qXFwuKT9hZHllblxcLmNvbS8sIC9eaHR0cHM6XFwvXFwvKC4qXFwuKT9sb29wY3J5cHRvXFwueHl6L11cbiAgICAgIH0pXG4gICAgXVxuICB9KSwgQ3IgPSBEZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBUdChcIlRyYWNlciBpbml0aWFsaXplZFwiKSwgQ3I7XG59LCBvbCA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBuZXcgVVJMKGUpLmhvc3RuYW1lO1xuICByZXR1cm4gdCA9PT0gXCJjZGUub3BlbnBheXN0YWdpbmcuY29tXCIgPyBcImh0dHBzOi8vb3RlbC5vcGVucGF5c2FuZGJveC5jb20vdjEvdHJhY2VzXCIgOiB0ID09PSBcImNkZS5nZXRvcGVucGF5LmNvbVwiID8gXCJodHRwczovL290ZWwuZ2V0b3BlbnBheS5jb20vdjEvdHJhY2VzXCIgOiBcImh0dHA6Ly9sb2NhbGhvc3Q6NDMxOS92MS90cmFjZXNcIjtcbn07XG5jbGFzcyBhbCB7XG4gIGNvbnN0cnVjdG9yKHQsIHIsIG4sIG8pIHtcbiAgICB0aGlzLmhhbmRsZU1lc3NhZ2UgPSAoaSkgPT4ge1xuICAgICAgaWYgKCFpLnNvdXJjZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbT0pTXSBObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChTcihpLm9yaWdpbikgIT09IFNyKHRoaXMuYmFzZVVybCkgfHwgdHlwZW9mIGkuZGF0YSA9PSBcIm9iamVjdFwiICYmIGkuZGF0YS5wZW5wYWwgfHwgdHlwZW9mIGkuZGF0YSA9PSBcIm9iamVjdFwiICYmIGkuZGF0YS5zb3VyY2UgJiYgaS5kYXRhLnNvdXJjZSA9PT0gXCJyZWFjdC1kZXZ0b29scy1icmlkZ2VcIilcbiAgICAgICAgcmV0dXJuO1xuICAgICAgbGV0IHMgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcyA9IHZzKEpTT04ucGFyc2UoaS5kYXRhKSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlRXZlbnQocykpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkOiBsLCBwYXlsb2FkOiB1IH0gPSBzLCBkID0gdS50eXBlO1xuICAgICAgc3dpdGNoIChkKSB7XG4gICAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLnNldEZvcm1IZWlnaHQodS5oZWlnaHQgPyBgJHt1LmhlaWdodH1weGAgOiBcIjEwMCVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Gb2N1cyhsLCB1LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cihsLCB1LmVsZW1lbnRUeXBlLCB7XG4gICAgICAgICAgICBvYmZ1c2NhdGVkVmFsdWU6IHUub2JmdXNjYXRlZFZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGwsIHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2xdID0gaS5zb3VyY2UsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQodSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcih1Lm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IodS5lbGVtZW50VHlwZSwgdS5lcnJvcnMsIGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKGkpID0+IGkuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhaS5lbGVtZW50SWQgPyAoY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIGkuZm9ybUlkKSwgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIGkpLCAhMSkgOiB0aGlzLm5vbmNlcy5oYXMoaS5ub25jZSkgPyAoY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgaSksICExKSA6ICh0aGlzLm5vbmNlcy5hZGQoaS5ub25jZSksICEwKSwgdGhpcy5ldmVudFRhcmdldHMgPSB7fSwgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCB0aGlzLmZvcm1JZCA9IHQsIHRoaXMuYmFzZVVybCA9IHIsIHRoaXMuZm9ybUNhbGxiYWNrcyA9IG4sIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBvO1xuICB9XG59XG5jb25zdCBTciA9IChlKSA9PiBuZXcgVVJMKGUpLm9yaWdpbjtcbmFzeW5jIGZ1bmN0aW9uIGlsKGUsIHQpIHtcbiAgY29uc3QgbiA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IGUsXG4gICAgZGVidWc6ICExLFxuICAgIGNoaWxkT3JpZ2luOiB0XG4gIH0pLnByb21pc2UsIG8gPSBhd2FpdCBscyhuKTtcbiAgaWYgKCF1cyhuLCBvKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RcIik7XG4gIHJldHVybiBuO1xufVxuY2xhc3Mgc2wge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKHQsIHIpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldCh0LCByKTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IHQgPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIXQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICByZXR1cm4gdDtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuY29uc3QgY2wgPSAoZSwgdCwgcikgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSOiBuIH0gPSBlO1xuICBuLnB1Ymxpc2hlci5zdWJzY3JpYmUoKG8pID0+IHtcbiAgICBpZiAoby5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IGkgPSBvLmxvYWRlZFZhbHVlLCBzID0gaS5pc0F2YWlsYWJsZSAmJiBpLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSwgYyA9IGkuaXNBdmFpbGFibGUgJiYgaS5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5LCBsID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBzLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIHMgJiYga3IoXCJhcHBsZV9wYXlcIiwgaSwgdCwgciwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogYyxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBjICYmIGtyKFwiZ29vZ2xlX3BheVwiLCBpLCB0LCByLCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByLmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChsKTtcbiAgICB9XG4gIH0pO1xufSwga3IgPSAoZSwgdCwgciwgbiwgbykgPT4gUi5zdHJpcGVQUi5ydW4oe1xuICBjb250ZXh0OiByLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IFRlKHIuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZSksXG4gIG5vbkNkZUZvcm1JbnB1dHM6IEooci5mb3JtRGl2KSxcbiAgZm9ybUNhbGxiYWNrczogbixcbiAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBlLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBvID09IG51bGwgPyB2b2lkIDAgOiBvLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgaW5pdFJlc3VsdDogdFxufSksIEFyID0gXCJUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBsb2dfXzogc2UsIGVycl9fOiBXIH0gPSBTKFwib3AtZm9ybVwiKSwgdWUgPSBjbGFzcyB1ZSB7XG4gIGNvbnN0cnVjdG9yKHQpIHtcbiAgICB2YXIgbztcbiAgICB0aGlzLmlzRGVzdHJveWVkID0gITEsIHRoaXMuY2RlTG9hZEV2ZW50ID0gbmV3IFllKCksIHRoaXMuYW55Q2RlQ29ubiA9IG5ldyBZZSgpLCB0aGlzLmNvbnRleHQgPSBuZXcgWWUoKSwgdGhpcy5pbml0Rmxvd3MgPSBLYygpLCB0aGlzLmlzU3VibWl0dGluZyA9ICExLCB0aGlzLnN0YXJ0Rm9ybUluaXQgPSBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBpID0gRGUuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKSwgcyA9IGkuc3RhcnRTcGFuKFwiZm9ybS5pbml0aWFsaXplXCIsIHtcbiAgICAgICAga2luZDogWGUuQ0xJRU5ULFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgLy8gJ2Vudmlyb25tZW50JzogLFxuICAgICAgICAgIC8vICdmcmFtZXdvcmsnOiBmcmFtZXdvcmssXG4gICAgICAgICAgLy8gJ2ZyYW1ld29yay52ZXJzaW9uJzogdmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gTmUud2l0aChEZS5zZXRTcGFuKE5lLmFjdGl2ZSgpLCBzKSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoY2UuQ0RFX0JSSURHRSk7XG4gICAgICAgICAgYy5ub2RlLmlkID0gXCJfX29wX2ludGVybmFsX2NkZV9icmlkZ2VcIiwgYy5ub2RlLmFyaWFIaWRkZW4gPSBcInRydWVcIiwgT2JqZWN0LmFzc2lnbihjLm5vZGUuc3R5bGUsIHtcbiAgICAgICAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICAgICAgICBtYXJnaW46IFwiMHB4XCIsXG4gICAgICAgICAgICBwYWRkaW5nOiBcIjBweFwiLFxuICAgICAgICAgICAgd2lkdGg6IFwiMXB4XCIsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogXCJub25lXCIsXG4gICAgICAgICAgICB1c2VyU2VsZWN0OiBcIm5vbmVcIlxuICAgICAgICAgIH0pLCBjLm1vdW50KFwiYm9keVwiKSwgc2UoXCJDREUgYnJpZGdlIGVsZW1lbnQgbW91bnRlZFwiKSwgc2UoXCJJbml0aWFsaXppbmcgT3BlblBheSBmb3JtOlwiKSwgc2UoXCLilJwgV2FpdGluZyBmb3IgQ0RFIGxvYWQgZXZlbnQuLi5cIik7XG4gICAgICAgICAgY29uc3QgbCA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IEFyXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2UoXCLilJwgQ0RFIGxvYWQgZXZlbnQgcmVjZWl2ZWRcIiksIHMgPT0gbnVsbCB8fCBzLmFkZEV2ZW50KFwid2FpdGluZ19mb3JfY2RlX2Nvbm5lY3Rpb25cIiksIHNlKFwi4pScIFdhaXRpbmcgZm9yIENERSBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgICAgIGNvbnN0IHUgPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLnN0YXJ0U3BhbihcImNkZS5jb25uZWN0XCIsIHZvaWQgMCwgTmUuYWN0aXZlKCkpLCBkID0gYXdhaXQgdGhpcy5hbnlDZGVDb25uLndhaXRGb3JMb2FkKHtcbiAgICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IEFyXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdSA9PSBudWxsIHx8IHUuZW5kKCksIHMgPT0gbnVsbCB8fCBzLmFkZEV2ZW50KFwiY2RlX2Nvbm5lY3RlZFwiKSwgc2UoXCLilJwgQ0RFIGNvbm5lY3Rpb24gcmVjZWl2ZWRcIiksIGF3YWl0IGNzKGQsIHRoaXMuZGV2aWNlVG9rZW4pLCBzZShcIuKUnCBDcmVhdGluZyBPSlMgY29udGV4dCwgc2V0dGluZyB1cCBoYW5kbGVycy4uLlwiKTtcbiAgICAgICAgICBjb25zdCB5ID0gdWUuYnVpbGRPanNGbG93Q29udGV4dChcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGQsXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5jb250ZXh0LnNldCh5KSwgY2wodGhpcy5pbml0Rmxvd3MsIHksIHRoaXMuZm9ybUNhbGxiYWNrcyksIHNlKFwi4pScIFN0YXJ0aW5nIE9KUyBpbml0IGZsb3dzLi4uXCIpLCBhd2FpdCBKYyh0aGlzLmluaXRGbG93cywgeSwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWQobC50b3RhbEFtb3VudEF0b21zLCBsLmN1cnJlbmN5KSwgc2UoXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKSwgcyA9PSBudWxsIHx8IHMuc2V0U3RhdHVzKHsgY29kZTogeWUuT0sgfSksIGcoXCJmb3JtX2xvYWRlZFwiKTtcbiAgICAgICAgfSBjYXRjaCAoYykge1xuICAgICAgICAgIGNvbnN0IGwgPSBaKGMpO1xuICAgICAgICAgIHMgPT0gbnVsbCB8fCBzLnNldFN0YXR1cyh7XG4gICAgICAgICAgICBjb2RlOiB5ZS5FUlJPUixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGxcbiAgICAgICAgICB9KSwgVyhcIuKVsCBFcnJvciBpbml0aWFsaXppbmcgT1AgZm9ybTpcIiwgbCksIGcoXCJmb3JtX2luaXRfZXJyb3JcIiwge1xuICAgICAgICAgICAgZXJyb3I6IGxcbiAgICAgICAgICB9KSwgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWRFcnJvcihsKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzID09IG51bGwgfHwgcy5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgdGhpcy5zZXRGb3JtSGVpZ2h0ID0gKGkpID0+IHtcbiAgICAgIHRoaXMuZm9ybVByb3BlcnRpZXMuaGVpZ2h0ID0gaSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgJiYgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykuZm9yRWFjaCgocykgPT4ge1xuICAgICAgICAhcyB8fCBzLnR5cGUgPT09IGNlLkNERV9CUklER0UgfHwgKHMubm9kZS5zdHlsZS5oZWlnaHQgPSBpKTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMub25DZGVMb2FkZWQgPSAoaSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgKHRoaXMuY2RlTG9hZEV2ZW50LnNldChpKSwgZyhcImNkZV9sb2FkZWRcIikpO1xuICAgIH0sIHRoaXMub25DZGVMb2FkRXJyb3IgPSAoaSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgKHRoaXMuY2RlTG9hZEV2ZW50LnRocm93KG5ldyBFcnJvcihpKSwgaSksIGcoXCJjZGVfbG9hZF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBpXG4gICAgICB9KSk7XG4gICAgfSwgdGhpcy5jcmVhdGVFbGVtZW50ID0gKGksIHMgPSB7fSkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImNyZWF0ZUVsZW1lbnRcIiksICF0aGlzLmNvbmZpZykgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBmb3JtIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICAgIGNvbnN0IGMgPSByby5wYXJzZShpKSwgbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIiksIHUgPSB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcocyk7XG4gICAgICBsLm5hbWUgPSBgJHtjfS1lbGVtZW50YDtcbiAgICAgIGNvbnN0IGQgPSBuZXcgVVJMKGAvYXBwL3YxLyR7bC5uYW1lfS9gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICAgIHJldHVybiBkLnNlYXJjaCA9IHUudG9TdHJpbmcoKSwgbC5zcmMgPSBkLmhyZWYsIGwuc3R5bGUuYm9yZGVyID0gXCJub25lXCIsIGwuc3R5bGUud2lkdGggPSBcIjEwMCVcIiwgdGhpcy5yZWdpc3RlcklmcmFtZShjLCBsKTtcbiAgICB9LCB0aGlzLnJlZ2lzdGVySWZyYW1lID0gKGksIHMpID0+IHtcbiAgICAgIGNvbnN0IGMgPSB7XG4gICAgICAgIHR5cGU6IGksXG4gICAgICAgIG5vZGU6IHMsXG4gICAgICAgIG1vdW50OiAobCkgPT4ge1xuICAgICAgICAgIHZhciB1O1xuICAgICAgICAgICh1ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihsKSkgPT0gbnVsbCB8fCB1LmFwcGVuZENoaWxkKHMpLCBnKFwiZWxlbWVudF9tb3VudGVkXCIsIHtcbiAgICAgICAgICAgIGVsZW1lbnRfdHlwZTogaVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdFRvRWxlbWVudCh7IHR5cGU6IGMudHlwZSwgbm9kZTogYy5ub2RlIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyB8fCAodGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSB7XG4gICAgICAgIFtjZS5DQVJEXTogdm9pZCAwLFxuICAgICAgICBbY2UuQ0FSRF9OVU1CRVJdOiB2b2lkIDAsXG4gICAgICAgIFtjZS5DQVJEX0VYUElSWV06IHZvaWQgMCxcbiAgICAgICAgW2NlLkNBUkRfQ1ZDXTogdm9pZCAwLFxuICAgICAgICBbY2UuQ0RFX0JSSURHRV06IHZvaWQgMFxuICAgICAgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzW2ldID0gYywgYztcbiAgICB9LCB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcgPSAoaSkgPT4ge1xuICAgICAgY29uc3QgcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHJldHVybiBzLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcnJlciksIHMuYXBwZW5kKFwiZm9ybUlkXCIsIHRoaXMuZm9ybUlkKSwgaS5zdHlsZXMgJiYgcy5hcHBlbmQoXCJzdHlsZXNcIiwgZWwoaS5zdHlsZXMpKSwgcy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuKSwgcztcbiAgICB9LCB0aGlzLmNvbm5lY3RUb0VsZW1lbnQgPSAoaSkgPT4gY3QoXG4gICAgICB7XG4gICAgICAgIHNwYW5OYW1lOiBcImNvbm5lY3RfdG9fZWxlbWVudFwiLFxuICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgfSxcbiAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcyA9IGF3YWl0IGlsKGkubm9kZSk7XG4gICAgICAgIHMudHJhY2luZ0NvbnRleHQgPSB7XG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgfSwgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKGkudHlwZSwgcyksICF0aGlzLmFueUNkZUNvbm4uY3VycmVudC5pc1N1Y2Nlc3MgJiYgaS50eXBlID09PSBjZS5DREVfQlJJREdFICYmIHRoaXMuYW55Q2RlQ29ubi5zZXQocyk7XG4gICAgICB9XG4gICAgKS5jYXRjaCgocykgPT4gVyhcIltGT1JNXSBFcnJvciBjb25uZWN0aW5nIHRvIENERSBpZnJhbWVcIiwgcykpLCB0aGlzLmdldEZvcm1EaXYgPSAoKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSwgdGhpcy5zdWJtaXRDYXJkID0gYXN5bmMgKGkpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xuICAgICAgICBXKFwiRm9ybSBpcyBhbHJlYWR5IHN1Ym1pdHRpbmcuIFBsZWFzZSB3YWl0IGZvciB0aGUgc3VibWlzc2lvbiB0byBmaW5pc2ggYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9ICEwO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcyA9IGF3YWl0IGN0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNwYW5OYW1lOiBcInN1Ym1pdF9jYXJkXCIsXG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICAgIHBheW1lbnRSb3V0ZUlkOiBpID09IG51bGwgPyB2b2lkIDAgOiBpLnBheW1lbnRSb3V0ZUlkXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBnKFwic3VibWl0X2NhcmRcIiwgeyAuLi5pIH0pLCB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJzdWJtaXRDYXJkXCIpO1xuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGlmICghYylcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgICAgIGF3YWl0IFIuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgICAgICAgY29udGV4dDogYyxcbiAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBUZShjLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEooYy5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2RlQ29ubmVjdGlvbnM6IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKSxcbiAgICAgICAgICAgICAgICBwYXltZW50Um91dGVJZDogaSA9PSBudWxsID8gdm9pZCAwIDogaS5wYXltZW50Um91dGVJZFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIHM7XG4gICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgIHRocm93IHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIHM7XG4gICAgICB9XG4gICAgfSwgdGhpcy5nZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcyA9ICgpID0+IGN0KFxuICAgICAge1xuICAgICAgICBzcGFuTmFtZTogXCJnZXRfYXZhaWxhYmxlX3BheW1lbnRfbWV0aG9kc1wiLFxuICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzXCIpLCAhdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgZ2V0dGluZyBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzLlwiKTtcbiAgICAgICAgY29uc3QgcyA9IHtcbiAgICAgICAgICBwYXlwYWw6IEwucGF5cGFsLFxuICAgICAgICAgIGFpcndhbGxleEdvb2dsZVBheTogTC5haXJ3YWxsZXhHb29nbGVQYXksXG4gICAgICAgICAgYWlyd2FsbGV4QXBwbGVQYXk6IEwuYWlyd2FsbGV4QXBwbGVQYXksXG4gICAgICAgICAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBMLmF1dGhvcml6ZW5ldEdvb2dsZVBheSxcbiAgICAgICAgICBhdXRob3JpemVOZXRBcHBsZVBheTogTC5hdXRob3JpemVuZXRBcHBsZVBheSxcbiAgICAgICAgICBhZHllbkdvb2dsZVBheTogTC5hZHllbkdvb2dsZVBheSxcbiAgICAgICAgICBhZHllbkFwcGxlUGF5OiBMLmFkeWVuQXBwbGVQYXlcbiAgICAgICAgfSwgYyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuaW5pdEZsb3dzKS5tYXAoKFtsLCB1XSkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBzW2xdID8/IGwsXG4gICAgICAgICAgLi4udS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbClcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gZyhcImdldF9hdmFpbGFibGVfcGF5bWVudF9tZXRob2RzXCIsIHtcbiAgICAgICAgICBhdmFpbGFibGVfcGF5bWVudF9tZXRob2RzOiBjXG4gICAgICAgIH0pLCBjO1xuICAgICAgfVxuICAgICksIHRoaXMuZ2VuZXJhbFN1Ym1pdCA9IGFzeW5jIChpLCBzKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgVyhcIkZvcm0gaXMgYWxyZWFkeSBzdWJtaXR0aW5nLiBQbGVhc2Ugd2FpdCBmb3IgdGhlIHN1Ym1pc3Npb24gdG8gZmluaXNoIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGMgPSBhd2FpdCBjdChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsXG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZyhcImdlbmVyYWxfZm9ybV9zdWJtaXRcIiwgeyBtZXRob2Q6IGksIHNldHRpbmdzOiBzIH0pLCB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJnZW5lcmFsU3VibWl0XCIpO1xuICAgICAgICAgICAgY29uc3QgbCA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGlmICghbClcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICAgICAgICBjYXNlIEwucG9ja3l0UGF5cGFsOlxuICAgICAgICAgICAgICAgIHJldHVybiBSLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogVGUoXG4gICAgICAgICAgICAgICAgICAgIGwuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgXCJwYXlwYWxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwb2NreXRcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEoobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczogcyB9LFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgTC5wYXlwYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFIucGF5cGFsLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBUZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBcInBheXBhbFwiLFxuICAgICAgICAgICAgICAgICAgICBcInBheXBhbFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogSihsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiBzIH0sXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3NcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBMLmFpcndhbGxleEdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgVyhcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgTC5haXJ3YWxsZXhBcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICBXKFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIEwuYXV0aG9yaXplbmV0R29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdSA9IHRoaXMuaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICBXKFxuICAgICAgICAgICAgICAgICAgICBcImF1dGhvcml6ZS1uZXQtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgTC5hdXRob3JpemVuZXRBcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICBXKFxuICAgICAgICAgICAgICAgICAgICBcImF1dGhvcml6ZS1uZXQtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBMLmxvb3BDcnlwdG86XG4gICAgICAgICAgICAgICAgcmV0dXJuIFIubG9vcENyeXB0by5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogVGUoXG4gICAgICAgICAgICAgICAgICAgIGwuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgXCJjcnlwdG9cIixcbiAgICAgICAgICAgICAgICAgICAgXCJsb29wXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBKKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHMsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBMLmFkeWVuR29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdSA9IHRoaXMuaW5pdEZsb3dzLmFkeWVuR29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIFcoXG4gICAgICAgICAgICAgICAgICAgIFwiYWR5ZW4tZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgTC5hZHllbkFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdSA9IHRoaXMuaW5pdEZsb3dzLmFkeWVuQXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgVyhcbiAgICAgICAgICAgICAgICAgICAgXCJhZHllbi1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGd0KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIGM7XG4gICAgICB9IGNhdGNoIChjKSB7XG4gICAgICAgIHRocm93IHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIGM7XG4gICAgICB9XG4gICAgfSwgdGhpcy5zdWJtaXQgPSB0aGlzLnN1Ym1pdENhcmQsIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIHZhciBpO1xuICAgICAgc2UoXCJEZXN0cm95aW5nIE9wZW5QYXkgZm9ybS4uLlwiKSwgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZGVzdHJveVwiKSwgdGhpcy5pc0Rlc3Ryb3llZCA9ICEwO1xuICAgICAgZm9yIChjb25zdCBzIG9mIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPz8ge30pKVxuICAgICAgICBzICYmIHMubm9kZS5yZW1vdmUoKTtcbiAgICAgIChpID0gVSgpKSA9PSBudWxsIHx8IGkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIGNpKCksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgZGVsZXRlIHdpbmRvdy5vanMsIGcoXCJmb3JtX2Rlc3Ryb3llZFwiKTtcbiAgICB9LCB0aGlzLnVwZGF0ZUNhbGxiYWNrcyA9IChpKSA9PiB7XG4gICAgICB0aGlzLmZvcm1DYWxsYmFja3Muc2V0Q2FsbGJhY2tzKGkpO1xuICAgIH0sIHVlLmFzc2lnbkFzU2luZ2xldG9uKHRoaXMpLCB0aGlzLm9qc1ZlcnNpb24gPSBcIjAuMy4xNlwiLCB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCJsb2NhbF9idWlsZFwiLCB0aGlzLmJhc2VVcmwgPSB0LmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB0aGlzLmNvbmZpZyA9IHsgLi4udCwgYmFzZVVybDogdGhpcy5iYXNlVXJsIH0sIHRoaXMuZm9ybUNhbGxiYWNrcyA9IGp0LmZyb21PYmplY3QodCksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7djQoKX1gLCB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiwgdGhpcy5mb3JtVGFyZ2V0ID0gdC5mb3JtVGFyZ2V0ID8/IFwiYm9keVwiLCB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfSwgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBzbCgpLCB0aGlzLmRldmljZVRva2VuID0gaG4oKSwgc2koKTtcbiAgICBjb25zdCB7IGZyYW1ld29yazogciwgdmVyc2lvbjogbiB9ID0gWGMoKTtcbiAgICBYcih0aGlzLmJhc2VVcmwpLnRoZW4oKGkpID0+IHtcbiAgICAgIGlmICghRHQuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgcyA9IHtcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGVudmlyb25tZW50OiBpLFxuICAgICAgICAgIGZyYW1ld29yazogcixcbiAgICAgICAgICBmcmFtZXdvcmtWZXJzaW9uOiBuLFxuICAgICAgICAgIG9qc1ZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICBvanNSZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmxcbiAgICAgICAgfTtcbiAgICAgICAgRHQuc2V0KHMpO1xuICAgICAgfVxuICAgIH0pLCBnKFwiZm9ybV9pbml0XCIpLCB0LmFsbG93VHJhY2luZyA9PT0gITAgJiYgcmwodGhpcy5vanNWZXJzaW9uLCB0aGlzLmJhc2VVcmwpLCB0aGlzLmV2ZW50SGFuZGxlciA9IG5ldyBhbCh0aGlzLmZvcm1JZCwgdGhpcy5iYXNlVXJsLCB0aGlzLmZvcm1DYWxsYmFja3MsIHtcbiAgICAgIHNldEZvcm1IZWlnaHQ6IHRoaXMuc2V0Rm9ybUhlaWdodCxcbiAgICAgIG9uQ2RlTG9hZGVkOiB0aGlzLm9uQ2RlTG9hZGVkLFxuICAgICAgb25DZGVMb2FkRXJyb3I6IHRoaXMub25DZGVMb2FkRXJyb3JcbiAgICB9KSwgKG8gPSBVKCkpID09IG51bGwgfHwgby5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgZ2V0IGNoZWNrb3V0U2VjdXJlVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW47XG4gIH1cbiAgY2hlY2tWYWxpZEZvcm1JbnN0YW5jZSh0ID0gXCJ1bmtub3duXCIpIHtcbiAgICBjb25zdCByID0gdWUuZ2V0SW5zdGFuY2UoKSwgbiA9IHtcbiAgICAgIGNhbGxlcjogdCxcbiAgICAgIHRoaXNGb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgY3VycmVudEZvcm1JZDogKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZm9ybUlkKSB8fCBcIm5vLWN1cnJlbnQtaW5zdGFuY2VcIixcbiAgICAgIGlzRGVzdHJveWVkOiB0aGlzLmlzRGVzdHJveWVkLFxuICAgICAgY2hlY2tvdXRUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbi5zdWJzdHJpbmcoMCwgMTApICsgXCIuLi5cIlxuICAgIH0sIG8gPSBgXG4gICAgICBbV2FybmluZ10gSW52YWxpZCBmb3JtIGluc3RhbmNlIGRldGVjdGVkLlxuICAgICAgSXQgbG9va3MgbGlrZSB5b3UgYXJlIHN0aWxsIHVzaW5nIGFuIG9sZCBpbnN0YW5jZSB0aGF0IGhhcyBiZWVuIGRlc3Ryb3llZC5cbiAgICAgIFBsZWFzZSBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgbGF0ZXN0IGluc3RhbmNlIG9mIHRoZSBmb3JtIGFuZCBjbGVhbnVwIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICAgRGVidWcgSW5mbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgLSBjYWxsZXI6ICR7dH1cbiAgICAgIC0gY2FsbGVyX2Zvcm1faWQ6ICR7bi50aGlzRm9ybUlkfVxuICAgICAgLSBjdXJyZW50X2FjdGl2ZV9mb3JtX2lkOiAke24uY3VycmVudEZvcm1JZH1cbiAgICAgIC0gaXNfZGVzdHJveWVkOiAke24uaXNEZXN0cm95ZWR9XG4gICAgICAtIGNoZWNrb3V0X3Rva2VuOiAke24uY2hlY2tvdXRUb2tlbn1cbiAgICBgO1xuICAgIHJldHVybiB0aGlzLmlzRGVzdHJveWVkID8gKFcobyksIGcoXCJvdXRkYXRlZF9mb3JtX2luc3RhbmNlXCIsIHsgZXJyb3I6IG8gfSksICExKSA6ICFyIHx8IHIuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCA/IChXKG8pLCBnKFwib3V0ZGF0ZWRfZm9ybV9pbnN0YW5jZVwiLCB7IGVycm9yOiBvIH0pLCAhMSkgOiAhMDtcbiAgfVxufTtcbnVlLm9qc0Zsb3dzID0gUiwgdWUuYXNzaWduQXNTaW5nbGV0b24gPSAodCkgPT4ge1xuICBpZiAodWUuZ2V0SW5zdGFuY2UoKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGluc3RhbmNlIGFscmVhZHkgZXhpc3RzLiBPbmx5IG9uZSBpbnN0YW5jZSBpcyBhbGxvd2VkLlwiKTtcbiAgd2luZG93Lm9qcyA9IHQ7XG59LCB1ZS5nZXRJbnN0YW5jZSA9ICgpID0+IHdpbmRvdy5vanMgPz8gbnVsbCwgdWUuYnVpbGRPanNGbG93Q29udGV4dCA9ICh0LCByLCBuLCBvKSA9PiAoe1xuICBjaGVja291dFNlY3VyZVRva2VuOiB0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gIGJhc2VVcmw6IG5ldyBVUkwodC5iYXNlVXJsID8/IG1uKS5vcmlnaW4sXG4gIGZvcm1EaXY6IG8sXG4gIGVsZW1lbnRzU2Vzc2lvbklkOiByLnNlc3Npb25JZCxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogci5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICBhbnlDZGVDb25uZWN0aW9uOiBuLFxuICBjdXN0b21Jbml0UGFyYW1zOiB0LmN1c3RvbUluaXRQYXJhbXMgPz8ge30sXG4gIHByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbjogdC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb25cbn0pO1xubGV0IElyID0gdWU7XG5cbmNvbnN0IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyA9IChwcm9wcykgPT4ge1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5mcm9tT2JqZWN0KHtcbiAgICBvbkZvY3VzOiBwcm9wcy5vbkZvY3VzLFxuICAgIG9uQmx1cjogcHJvcHMub25CbHVyLFxuICAgIG9uQ2hhbmdlOiBwcm9wcy5vbkNoYW5nZSxcbiAgICBvbkxvYWQ6IHByb3BzLm9uTG9hZCxcbiAgICBvbkxvYWRFcnJvcjogcHJvcHMub25Mb2FkRXJyb3IsXG4gICAgb25WYWxpZGF0aW9uRXJyb3I6IHByb3BzLm9uVmFsaWRhdGlvbkVycm9yLFxuICAgIG9uQ2hlY2tvdXRTdGFydGVkOiBwcm9wcy5vbkNoZWNrb3V0U3RhcnRlZCxcbiAgICBvbkNoZWNrb3V0U3VjY2VzczogcHJvcHMub25DaGVja291dFN1Y2Nlc3MsXG4gICAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBwcm9wcy5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MsXG4gICAgb25DaGVja291dEVycm9yOiBwcm9wcy5vbkNoZWNrb3V0RXJyb3IsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkXG4gIH0pO1xuICBpZiAoSXIuZ2V0SW5zdGFuY2UoKSkge1xuICAgIElyLmdldEluc3RhbmNlKCk/LnVwZGF0ZUNhbGxiYWNrcyhmb3JtQ2FsbGJhY2tzLmdldCk7XG4gIH1cbiAgcmV0dXJuIGZvcm1DYWxsYmFja3MuZ2V0O1xufTtcblxuY29uc3QgdXNlUGF5bWVudFJlcXVlc3RzID0gKG9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQpID0+IHtcbiAgY29uc3QgW3BheW1lbnRSZXF1ZXN0cywgc2V0UGF5bWVudFJlcXVlc3RzXSA9IHVzZVN0YXRlKHtcbiAgICBhcHBsZV9wYXk6IFBSX0xPQURJTkcsXG4gICAgZ29vZ2xlX3BheTogUFJfTE9BRElOR1xuICB9KTtcbiAgY29uc3Qgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgPSB1c2VDYWxsYmFjayhcbiAgICAocGF5bWVudFJlcXVlc3RzMikgPT4ge1xuICAgICAgc2V0UGF5bWVudFJlcXVlc3RzKHBheW1lbnRSZXF1ZXN0czIpO1xuICAgICAgb3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZD8uKHBheW1lbnRSZXF1ZXN0czIpO1xuICAgIH0sXG4gICAgW29yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWRdXG4gICk7XG4gIHJldHVybiB7IHBheW1lbnRSZXF1ZXN0cywgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgfTtcbn07XG5cbmNvbnN0IEZPUk1fVEFSR0VUID0gXCJvcF9vanNfZm9ybVwiO1xuY29uc3QgRWxlbWVudHNGb3JtID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IFtvcEZvcm0sIHNldE9wRm9ybV0gPSB1c2VTdGF0ZSgpO1xuICBjb25zdCBbZWxlbWVudHNDb250ZXh0VmFsdWUsIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCB7IHBheW1lbnRSZXF1ZXN0cywgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgfSA9IHVzZVBheW1lbnRSZXF1ZXN0cyhwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZCk7XG4gIGNvbnN0IFtsb2FkZWQsIHNldExvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzdHJpcGVMaW5rQ3RybCwgc2V0U3RyaXBlTGlua0N0cmxdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtsb29wQ29uZmlnLCBzZXRMb29wQ29uZmlnXSA9IHVzZVN0YXRlKExPT1BfTE9BRElORyk7XG4gIGNvbnN0IFthaXJ3YWxsZXgsIHNldEFpcndhbGxleF0gPSB1c2VTdGF0ZSh7XG4gICAgZ29vZ2xlUGF5OiBBV1hfTE9BRElORyxcbiAgICBhcHBsZVBheTogQVdYX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3Moe1xuICAgIC4uLnByb3BzLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCxcbiAgICBvbkxvYWQ6ICh0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSkgPT4ge1xuICAgICAgc2V0TG9hZGVkKHRydWUpO1xuICAgICAgcHJvcHMub25Mb2FkPy4odG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpO1xuICAgIH1cbiAgfSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wRm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGZvcm0gPSBJci5nZXRJbnN0YW5jZSgpID8/IG5ldyBJcih7XG4gICAgICBjaGVja291dFNlY3VyZVRva2VuOiBwcm9wcy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgZm9ybVRhcmdldDogYCMke0ZPUk1fVEFSR0VUfWAsXG4gICAgICBiYXNlVXJsOiBwcm9wcy5iYXNlVXJsLFxuICAgICAgY3VzdG9tSW5pdFBhcmFtczogcHJvcHMuY3VzdG9tSW5pdFBhcmFtcyxcbiAgICAgIGFsbG93VHJhY2luZzogcHJvcHMuYWxsb3dUcmFjaW5nID8/IGZhbHNlLFxuICAgICAgcHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uOiBwcm9wcy5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24sXG4gICAgICAuLi5mb3JtQ2FsbGJhY2tzXG4gICAgfSk7XG4gICAgc2V0T3BGb3JtKGZvcm0pO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUoZm9ybSk7XG4gICAgc2V0RWxlbWVudHNDb250ZXh0VmFsdWUodmFsdWUpO1xuICAgIGZvcm0uaW5pdEZsb3dzLnN0cmlwZUxpbmsucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0U3RyaXBlTGlua0N0cmwocmVzdWx0LmxvYWRlZFZhbHVlLmNvbnRyb2xsZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0TG9vcENvbmZpZyh7XG4gICAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICB3aWRnZXQ6IHJlc3VsdC5sb2FkZWRWYWx1ZS53aWRnZXRQcm9wcyxcbiAgICAgICAgICBjb25maWc6IHJlc3VsdC5sb2FkZWRWYWx1ZS5pbml0TG9vcENvbm5lY3RQcm9wc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiAhcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldExvb3BDb25maWcoe1xuICAgICAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHdpZGdldDogbnVsbCxcbiAgICAgICAgICBjb25maWc6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBhcHBsZVBheTogcHJldi5hcHBsZVBheSxcbiAgICAgICAgICBnb29nbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGdvb2dsZVBheTogcHJldi5nb29nbGVQYXksXG4gICAgICAgICAgYXBwbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGZvcm0uZGVzdHJveSgpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgaWYgKCFvcEZvcm0pIHtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pO1xuICB9XG4gIGNvbnN0IGNoaWxkcmVuUHJvcHMgPSB7XG4gICAgc3VibWl0OiBvcEZvcm0uc3VibWl0Q2FyZCxcbiAgICBzdWJtaXRXaXRoOiBvcEZvcm0uZ2VuZXJhbFN1Ym1pdCxcbiAgICBhcHBsZVBheTogcGF5bWVudFJlcXVlc3RzLmFwcGxlX3BheSxcbiAgICBnb29nbGVQYXk6IHBheW1lbnRSZXF1ZXN0cy5nb29nbGVfcGF5LFxuICAgIGxvYWRlZCxcbiAgICAvLyBEaXNhYmxlIGR5bmFtaWMgcHJldmlld3MgZmVhdHVyZSBmb3Igbm93XG4gICAgcHJldmlldzoge1xuICAgICAgYW1vdW50OiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfSxcbiAgICBzdHJpcGVMaW5rOiBzdHJpcGVMaW5rQ3RybCxcbiAgICBhaXJ3YWxsZXgsXG4gICAgbG9vcDogbG9vcENvbmZpZ1xuICB9O1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwgeyBjaGlsZHJlbjogZWxlbWVudHNDb250ZXh0VmFsdWUgPyAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRzQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogZWxlbWVudHNDb250ZXh0VmFsdWUsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFwiZGl2XCIsIHsgaWQ6IEZPUk1fVEFSR0VULCBjbGFzc05hbWU6IHByb3BzLmNsYXNzTmFtZSwgY2hpbGRyZW46IHByb3BzLmNoaWxkcmVuKGNoaWxkcmVuUHJvcHMpIH0pIH0pIDogLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pIH0pO1xufTtcbmNvbnN0IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlID0gKG9wRm9ybSkgPT4ge1xuICByZXR1cm4ge1xuICAgIGZvcm1JZDogb3BGb3JtLmZvcm1JZCxcbiAgICBmb3JtSGVpZ2h0OiBvcEZvcm0uZm9ybVByb3BlcnRpZXMuaGVpZ2h0LFxuICAgIHJlZmVycmVyOiBvcEZvcm0ucmVmZXJyZXIsXG4gICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogb3BGb3JtLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgcmVnaXN0ZXJJZnJhbWU6IG9wRm9ybS5yZWdpc3RlcklmcmFtZSxcbiAgICBiYXNlVXJsOiBvcEZvcm0uYmFzZVVybFxuICB9O1xufTtcblxuZXhwb3J0IHsgQ2FyZEN2Y0VsZW1lbnQgYXMgQywgRGUgYXMgRCwgRWxlbWVudHNGb3JtIGFzIEUsIEZpZWxkTmFtZSBhcyBGLCBHdCBhcyBHLCBJaSBhcyBJLCBKaSBhcyBKLCBLLCBOZSBhcyBOLCBPdCBhcyBPLCBQYXlJbkZhaWxlZCBhcyBQLCBRZSBhcyBRLCBUaSBhcyBULCBVaSBhcyBVLCBYZSBhcyBYLCBhbiBhcyBhLCB5dCBhcyBiLCB6dCBhcyBjLCBxdCBhcyBkLCBDYXJkRWxlbWVudCBhcyBlLCBmciBhcyBmLCBDYXJkRXhwaXJ5RWxlbWVudCBhcyBnLCBDYXJkTnVtYmVyRWxlbWVudCBhcyBoLCBQYXlJblN0YXRlIGFzIGksIEVudmlyb25tZW50IGFzIGosIG5uIGFzIG4sIHFpIGFzIHEsIHJuIGFzIHIsIHVzZU9wZW5QYXlFbGVtZW50cyBhcyB1LCB5ZSBhcyB5LCB6aSBhcyB6IH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxrQkFBQUEsVUFBc0I7QUFDL0IsU0FBUyxLQUFBQyxTQUFTO0FBQ2xCLE9BQU9DLFFBQVc7QUFDbEIsU0FBUyxNQUFBQyxVQUFVO0FBQ25CLFNBQVMsT0FBQUMsSUFBSyxZQUFBQyxVQUFnQjtBQUM5QixTQUFTLGlCQUFBQyxJQUFlLGNBQUFDLElBQVksWUFBQUMsSUFBVSxVQUFBQyxJQUFRLFdBQUFDLElBQVMsYUFBQUMsSUFBVyxlQUFBQyxVQUFtQjtBQUU3RixTQUFTQyxHQUFTQyxHQUFRQyxHQUFXO0FBQ25DLE1BQUlDLElBQWlCLE9BQU87QUFDNUIsRUFBQUEsSUFBaUJBLEVBQWVGLEdBQVFDLENBQVMsSUFBSUQsRUFBTyxZQUFZQztBQUMxRTtBQUNBLFNBQVNFLEdBQVNILEdBQVFJLEdBQUk7QUFDNUIsRUFBSUEsTUFBTyxXQUNUQSxJQUFLSixFQUFPO0FBR2QsTUFBSUssSUFBb0IsTUFBTTtBQUM5QixFQUFBQSxLQUFxQkEsRUFBa0JMLEdBQVFJLENBQUU7QUFDbkQ7QUFFQSxJQUFJRSxLQUFjLDJCQUFZO0FBQzVCLE1BQUlDLElBQWlCLFNBQXVCQyxHQUFHQyxHQUFHO0FBQ2hELFdBQUFGLElBQWlCLE9BQU8sa0JBQWtCO0FBQUEsTUFDeEMs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QU87QUFBQSxJQUNmLFlBQVlBLEVBQU87QUFBQSxJQUNuQixVQUFVUCxFQUFnQjtBQUFBLElBQzFCLFdBQVdBLEVBQWdCO0FBQUEsSUFDM0IsUUFBQVc7QUFBQTtBQUFBLElBRUEsU0FBUztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsV0FBVztBQUFBLE1BQ1gsT0FBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLFlBQVlFO0FBQUEsSUFDWixXQUFBSTtBQUFBLElBQ0EsTUFBTUY7QUFBQSxFQUNSO0FBQ0EsU0FBdUIsZ0JBQUFoakIsR0FBSXlqQixJQUFVLEVBQUUsVUFBVWYsSUFBdUMsZ0JBQUExaUIsR0FBSXpCLEdBQWdCLFVBQVUsRUFBRSxPQUFPbWtCLEdBQXNCLFVBQTBCLGdCQUFBMWlCLEdBQUksT0FBTyxFQUFFLElBQUlzaUIsSUFBYSxXQUFXMWpCLEVBQU0sV0FBVyxVQUFVQSxFQUFNLFNBQVM4a0IsQ0FBYSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQW9CLGdCQUFBMWpCLEdBQUl5akIsSUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlULEdBQ01GLEtBQTBCLENBQUNmLE9BQ3hCO0FBQUEsRUFDTCxRQUFRQSxFQUFPO0FBQUEsRUFDZixZQUFZQSxFQUFPLGVBQWU7QUFBQSxFQUNsQyxVQUFVQSxFQUFPO0FBQUEsRUFDakIscUJBQXFCQSxFQUFPO0FBQUEsRUFDNUIsZ0JBQWdCQSxFQUFPO0FBQUEsRUFDdkIsU0FBU0EsRUFBTztBQUNsQjsiLAogICJuYW1lcyI6IFsiY29ubmVjdFRvQ2hpbGQiLCAieiIsICJjaGFsayIsICJ2NCIsICJqc3giLCAiRnJhZ21lbnQiLCAiY3JlYXRlQ29udGV4dCIsICJ1c2VDb250ZXh0IiwgInVzZVN0YXRlIiwgInVzZVJlZiIsICJ1c2VNZW1vIiwgInVzZUVmZmVjdCIsICJ1c2VDYWxsYmFjayIsICJmaXhQcm90byIsICJ0YXJnZXQiLCAicHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgImZpeFN0YWNrIiwgImZuIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIl9fZXh0ZW5kcyQxIiwgIl9leHRlbmRTdGF0aWNzIiwgImQiLCAiYiIsICJwIiwgIl9fIiwgIl9zdXBlciIsICJDdXN0b21FcnJvciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiX25ld1RhcmdldCIsICJfdGhpcyIsICJSZXF1aXJlZFN0cmluZyIsICJPcHRpb25hbFN0cmluZyIsICJudWxsT3JVbmRlZk9yJDEiLCAielR5cGUiLCAiRmllbGROYW1lIiwgIkZpZWxkTmFtZTIiLCAiRmllbGROYW1lRW51bSIsICJQcml2YXRlRmllbGROYW1lIiwgIlByaXZhdGVGaWVsZE5hbWUyIiwgIlByaXZhdGVGaWVsZE5hbWVFbnVtIiwgIkFsbEZpZWxkTmFtZXMiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkVsZW1lbnRUeXBlRW51bTIiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NSZXNwb25zZSIsICJGaWVsZFZhbGlkYXRpb25FcnJvciIsICJUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlIiwgIkNvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIk5ld0N1c3RvbWVyRmllbGRzIiwgIlByaWNlUXR5IiwgIkNhcnRJbmZvIiwgIlByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAiWm9kRmllbGRFcnJvciIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJlcnJvckxvZ2dlciIsICJhcmdzIiwgImVycm9yIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAiZXJyIiwgImV4dGVuZFN0YXRpY3MiLCAiX19leHRlbmRzIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAidmFsdWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAiZSIsICJyZWplY3RlZCIsICJyZXN1bHQiLCAiX19nZW5lcmF0b3IiLCAiYm9keSIsICJfIiwgInQiLCAiZiIsICJ5IiwgImciLCAidmVyYiIsICJuIiwgInYiLCAib3AiLCAiX192YWx1ZXMiLCAibyIsICJzIiwgIm0iLCAiaSIsICJfX3JlYWQiLCAiciIsICJhciIsICJfX3NwcmVhZEFycmF5IiwgInRvIiwgImZyb20iLCAicGFjayIsICJsIiwgIl9fYXdhaXQiLCAiX19hc3luY0dlbmVyYXRvciIsICJxIiwgImF3YWl0UmV0dXJuIiwgImEiLCAicmVzdW1lIiwgInNldHRsZSIsICJmdWxmaWxsIiwgIl9fYXN5bmNWYWx1ZXMiLCAiaXNGdW5jdGlvbiIsICJ2YWx1ZSIsICJjcmVhdGVFcnJvckNsYXNzIiwgImNyZWF0ZUltcGwiLCAiX3N1cGVyIiwgImluc3RhbmNlIiwgImN0b3JGdW5jIiwgIlVuc3Vic2NyaXB0aW9uRXJyb3IiLCAiZXJyb3JzIiwgImVyciIsICJhcnJSZW1vdmUiLCAiYXJyIiwgIml0ZW0iLCAiaW5kZXgiLCAiU3Vic2NyaXB0aW9uIiwgImluaXRpYWxUZWFyZG93biIsICJlXzEiLCAiX2EiLCAiZV8yIiwgIl9iIiwgIl9wYXJlbnRhZ2UiLCAiX3BhcmVudGFnZV8xIiwgIl9fdmFsdWVzIiwgIl9wYXJlbnRhZ2VfMV8xIiwgInBhcmVudF8xIiwgImVfMV8xIiwgImluaXRpYWxGaW5hbGl6ZXIiLCAiZSIsICJfZmluYWxpemVycyIsICJfZmluYWxpemVyc18xIiwgIl9maW5hbGl6ZXJzXzFfMSIsICJmaW5hbGl6ZXIiLCAiZXhlY0ZpbmFsaXplciIsICJfX3NwcmVhZEFycmF5IiwgIl9fcmVhZCIsICJlXzJfMSIsICJ0ZWFyZG93biIsICJwYXJlbnQiLCAiZW1wdHkiLCAiRU1QVFlfU1VCU0NSSVBUSU9OIiwgImlzU3Vic2NyaXB0aW9uIiwgImNvbmZpZyIsICJ0aW1lb3V0UHJvdmlkZXIiLCAiaGFuZGxlciIsICJ0aW1lb3V0IiwgImFyZ3MiLCAiX2kiLCAiaGFuZGxlIiwgImRlbGVnYXRlIiwgInJlcG9ydFVuaGFuZGxlZEVycm9yIiwgIm5vb3AiLCAiZXJyb3JDb250ZXh0IiwgImNiIiwgIlN1YnNjcmliZXIiLCAiX19leHRlbmRzIiwgImRlc3RpbmF0aW9uIiwgIl90aGlzIiwgIkVNUFRZX09CU0VSVkVSIiwgIm5leHQiLCAiZXJyb3IiLCAiY29tcGxldGUiLCAiU2FmZVN1YnNjcmliZXIiLCAiX2JpbmQiLCAiYmluZCIsICJmbiIsICJ0aGlzQXJnIiwgIkNvbnN1bWVyT2JzZXJ2ZXIiLCAicGFydGlhbE9ic2VydmVyIiwgImhhbmRsZVVuaGFuZGxlZEVycm9yIiwgIm9ic2VydmVyT3JOZXh0IiwgImNvbnRleHRfMSIsICJkZWZhdWx0RXJyb3JIYW5kbGVyIiwgIm9ic2VydmFibGUiLCAiaWRlbnRpdHkiLCAieCIsICJwaXBlRnJvbUFycmF5IiwgImZucyIsICJpbnB1dCIsICJwcmV2IiwgIk9ic2VydmFibGUiLCAic3Vic2NyaWJlIiwgIm9wZXJhdG9yIiwgInN1YnNjcmliZXIiLCAiaXNTdWJzY3JpYmVyIiwgInNvdXJjZSIsICJzaW5rIiwgInByb21pc2VDdG9yIiwgImdldFByb21pc2VDdG9yIiwgInJlc29sdmUiLCAicmVqZWN0IiwgIm9wZXJhdGlvbnMiLCAiaXNPYnNlcnZlciIsICJoYXNMaWZ0IiwgIm9wZXJhdGUiLCAiaW5pdCIsICJsaWZ0ZWRTb3VyY2UiLCAiY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIiwgIm9uTmV4dCIsICJvbkNvbXBsZXRlIiwgIm9uRXJyb3IiLCAib25GaW5hbGl6ZSIsICJPcGVyYXRvclN1YnNjcmliZXIiLCAic2hvdWxkVW5zdWJzY3JpYmUiLCAiY2xvc2VkXzEiLCAiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLCAiU3ViamVjdCIsICJzdWJqZWN0IiwgIkFub255bW91c1N1YmplY3QiLCAiX2MiLCAib2JzZXJ2ZXIiLCAib2JzZXJ2ZXJzIiwgImhhc0Vycm9yIiwgImlzU3RvcHBlZCIsICJ0aHJvd25FcnJvciIsICJkYXRlVGltZXN0YW1wUHJvdmlkZXIiLCAiQWN0aW9uIiwgInNjaGVkdWxlciIsICJ3b3JrIiwgInN0YXRlIiwgImRlbGF5IiwgImludGVydmFsUHJvdmlkZXIiLCAiQXN5bmNBY3Rpb24iLCAiaWQiLCAiX2lkIiwgIl9zY2hlZHVsZXIiLCAiX2RlbGF5IiwgImVycm9yZWQiLCAiZXJyb3JWYWx1ZSIsICJhY3Rpb25zIiwgIlNjaGVkdWxlciIsICJzY2hlZHVsZXJBY3Rpb25DdG9yIiwgIm5vdyIsICJBc3luY1NjaGVkdWxlciIsICJTY2hlZHVsZXJBY3Rpb24iLCAiYWN0aW9uIiwgImFzeW5jU2NoZWR1bGVyIiwgImlzQXJyYXlMaWtlIiwgImlzUHJvbWlzZSIsICJpc0ludGVyb3BPYnNlcnZhYmxlIiwgImlzQXN5bmNJdGVyYWJsZSIsICJvYmoiLCAiY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IiLCAiZ2V0U3ltYm9sSXRlcmF0b3IiLCAiaXRlcmF0b3IiLCAiaXNJdGVyYWJsZSIsICJyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yIiwgInJlYWRhYmxlU3RyZWFtIiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicmVhZGVyIiwgImRvbmUiLCAiX19nZW5lcmF0b3IiLCAiX19hd2FpdCIsICJpc1JlYWRhYmxlU3RyZWFtTGlrZSIsICJpbm5lckZyb20iLCAiZnJvbUludGVyb3BPYnNlcnZhYmxlIiwgImZyb21BcnJheUxpa2UiLCAiZnJvbVByb21pc2UiLCAiZnJvbUFzeW5jSXRlcmFibGUiLCAiZnJvbUl0ZXJhYmxlIiwgImZyb21SZWFkYWJsZVN0cmVhbUxpa2UiLCAib2JzIiwgImFycmF5IiwgImkiLCAicHJvbWlzZSIsICJpdGVyYWJsZSIsICJpdGVyYWJsZV8xIiwgIml0ZXJhYmxlXzFfMSIsICJhc3luY0l0ZXJhYmxlIiwgInByb2Nlc3MiLCAiYXN5bmNJdGVyYWJsZV8xIiwgImFzeW5jSXRlcmFibGVfMV8xIiwgIl9fYXdhaXRlciIsICJfX2FzeW5jVmFsdWVzIiwgImV4ZWN1dGVTY2hlZHVsZSIsICJwYXJlbnRTdWJzY3JpcHRpb24iLCAicmVwZWF0IiwgInNjaGVkdWxlU3Vic2NyaXB0aW9uIiwgInRocm93RXJyb3IiLCAiZXJyb3JPckVycm9yRmFjdG9yeSIsICJlcnJvckZhY3RvcnkiLCAiRW1wdHlFcnJvciIsICJsYXN0VmFsdWVGcm9tIiwgIl9oYXNWYWx1ZSIsICJfdmFsdWUiLCAiaXNWYWxpZERhdGUiLCAiVGltZW91dEVycm9yIiwgImluZm8iLCAic2NoZWR1bGVyQXJnIiwgImZpcnN0IiwgImVhY2giLCAiX3dpdGgiLCAidGltZW91dEVycm9yRmFjdG9yeSIsICJfZCIsICJtZXRhIiwgIm9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uIiwgInRpbWVyU3Vic2NyaXB0aW9uIiwgImxhc3RWYWx1ZSIsICJzZWVuIiwgInN0YXJ0VGltZXIiLCAiTG9hZGVkT25jZVB1Ymxpc2hlciIsICJlcnJNc2ciLCAidmFsdWVJZk5vdExvYWRlZCIsICJzdWJzY3JpcHRpb24iLCAidGltZW91dENvbmZpZyIsICJhc3NlcnROZXZlciIsICJ0aW1lb3V0UGFyYW1zIiwgInoiLCAiY29ubnRvQmFzZVVybHMiLCAiZ2V0Q29ubnRvVXJsIiwgImVudiIsICJnZXRXaW5kb3dTYWZlIiwgIm1ldHJpY3NQdWJsaXNoZXIiLCAiTUVUUklDU19RVUVVRV9LRVkiLCAiTUFYX1JFVFJZX0FUVEVNUFRTIiwgIkJBVENIX1NJWkUiLCAiQkFUQ0hfSU5URVJWQUxfTVMiLCAibG9nX18iLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAiTWV0cmljc1F1ZXVlIiwgImV2ZW50TmFtZSIsICJwcm9wZXJ0aWVzIiwgImNvbnRleHRQcm9wZXJ0aWVzIiwgImV2ZW50IiwgInY0IiwgInN0b3JlZFF1ZXVlIiwgInNhZmVXaW5kb3ciLCAiY29udGV4dCIsICJiYXRjaCIsICJiYXRjaFBheWxvYWQiLCAiY29ubnRvVXJsIiwgIm1ldHJpY3NSb3V0ZXIiLCAiZXZlbnRzVG9LZWVwIiwgIm1ldHJpY3NRdWV1ZSIsICJBV1hfTE9BRElORyIsICJQYXltZW50UHJvY2Vzc29yIiwgIkFkeWVuRW52aXJvbm1lbnQiLCAiRW52aXJvbm1lbnQiLCAiRW52aXJvbm1lbnQyIiwgIlBheUluRmFpbGVkIiwgIlBheUluRmFpbGVkMiIsICJQYXlJblN0YXRlIiwgIlBheUluU3RhdGUyIiwgIkxPT1BfTE9BRElORyIsICJSZXF1aXJlZFN0cmluZyIsICJGaWVsZE5hbWUiLCAiT3B0aW9uYWxTdHJpbmciLCAiUFJfTE9BRElORyIsICJlcnJfXyIsICJPcHRpb25hbEZuIiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgImtleSIsICJyYXdDYWxsYmFjayIsICJzYWZlQ2FsbGJhY2siLCAibWFrZUNhbGxiYWNrU2FmZSIsICJGb3JtQ2FsbGJhY2tzIiwgIlN1Ym1pdE1ldGhvZHMiLCAiU3VibWl0TWV0aG9kczIiLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAic3R5bGVzIiwgIkVsZW1lbnRzQ29udGV4dCIsICJjcmVhdGVDb250ZXh0IiwgInVzZU9wZW5QYXlFbGVtZW50cyIsICJ1c2VDb250ZXh0IiwgIkVsZW1lbnRGcmFtZSIsICJwcm9wcyIsICJlbGVtZW50VHlwZSIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgInVzZVN0YXRlIiwgImlmcmFtZVJlZiIsICJ1c2VSZWYiLCAiZWxlbWVudFN0eWxlIiwgInVzZU1lbW8iLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAidXNlRWZmZWN0IiwgImpzeCIsICJ1cmwiLCAiQ2FyZEVsZW1lbnQiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkNhcmRDdmNFbGVtZW50IiwgIkNhcmRFeHBpcnlFbGVtZW50IiwgIkNhcmROdW1iZXJFbGVtZW50IiwgIlFuIiwgIlhuIiwgImVvIiwgInIiLCAibiIsICJzIiwgInRvIiwgIm8iLCAiTyIsICJBIiwgImYiLCAiRnIiLCAiTnIiLCAiTXIiLCAiRHIiLCAiY2UiLCAicm8iLCAiX3QiLCAibm8iLCAibmUiLCAib28iLCAiYW8iLCAiaW8iLCAic28iLCAiY28iLCAibG8iLCAidW8iLCAicG8iLCAibW8iLCAiZm8iLCAieW8iLCAiX28iLCAidHQiLCAiaG8iLCAiZ28iLCAid28iLCAidm8iLCAiYm8iLCAiRW8iLCAiUG8iLCAiS2UiLCAiQ28iLCAiU28iLCAia28iLCAiQW8iLCAiSW8iLCAiT3IiLCAiUm8iLCAiVG8iLCAidyIsICJGbyIsICJMciIsICJVciIsICJObyIsICJNbyIsICJVZSIsICJEbyIsICJPbyIsICJqciIsICJMbyIsICJVbyIsICJqbyIsICJyciIsICJ4ciIsICJuciIsICIkciIsICJ4byIsICIkbyIsICJWciIsICJWbyIsICJHbyIsICJ6byIsICJHciIsICJxbyIsICJ6ciIsICJCbyIsICJZbyIsICJIbyIsICJKbyIsICJLbyIsICJXbyIsICJabyIsICJRbyIsICJYbyIsICJlYSIsICJGdCIsICJ0YSIsICJyYSIsICJuYSIsICJaIiwgIm9hIiwgImFhIiwgInFyIiwgImlhIiwgInNhIiwgIlEiLCAiaWkiLCAicG4iLCAibWUiLCAiY2hhbGsiLCAiTnQiLCAiX2UiLCAiY2EiLCAieSIsICJCciIsICJNZSIsICJwdCIsICJtdCIsICJGZSIsICJsYSIsICJtIiwgIl8iLCAiaCIsICJ2IiwgInAiLCAidWEiLCAiaHQiLCAiUHQiLCAiZnQiLCAicnQiLCAib3IiLCAiWXIiLCAiSHIiLCAiSnIiLCAiS3IiLCAiV3IiLCAiYXIiLCAibHQiLCAieHQiLCAiZmEiLCAiTXQiLCAiZGEiLCAiQ3QiLCAicGEiLCAiaXQiLCAibWEiLCAiJHQiLCAieWEiLCAicGUiLCAiZ2EiLCAiaXIiLCAiaGEiLCAid2EiLCAidmEiLCAiYmEiLCAiRWEiLCAiUGEiLCAiWnIiLCAic3IiLCAiQ2EiLCAiU2EiLCAiY3IiLCAia2EiLCAibHIiLCAiQWEiLCAiSWEiLCAiUmEiLCAiVGEiLCAiRmEiLCAiTmEiLCAiTWEiLCAiRGEiLCAiT2EiLCAiTGEiLCAiVWEiLCAiamEiLCAieGEiLCAiJGEiLCAiVmEiLCAiR2EiLCAiUXIiLCAiemEiLCAicWEiLCAiQmEiLCAiWWEiLCAiSGEiLCAiSmEiLCAiS2EiLCAiV2EiLCAiWmEiLCAiUWEiLCAiWGEiLCAiUCIsICJZZSIsICJndCIsICJ1ciIsICJlaSIsICJ0aSIsICJTdCIsICJYciIsICJ3dCIsICJVIiwgIkR0IiwgImRyIiwgInJpIiwgIm5pIiwgIm9pIiwgInN0IiwgImFpIiwgImMiLCAiVnQiLCAiZW4iLCAidG4iLCAidCIsICJzaSIsICJjaSIsICJSciIsICJsaSIsICJ1aSIsICJkaSIsICJ2dCIsICJwciIsICJidCIsICJwaSIsICJtaSIsICJmaSIsICJ5aSIsICJoaSIsICJFZSIsICJtciIsICJnaSIsICJsIiwgInUiLCAiZCIsICJ3aSIsICJ2aSIsICJXZSIsICJaZSIsICJHdCIsICJRZSIsICJ6dCIsICJiaSIsICJFaSIsICJQaSIsICJWZSIsICJLIiwgIkNpIiwgIlNpIiwgImtpIiwgIkFpIiwgInl0IiwgIklpIiwgIlJpIiwgIlRpIiwgIkZpIiwgIk5pIiwgIk1pIiwgIkRpIiwgIk9pIiwgImt0IiwgIkxpIiwgInF0IiwgIk90IiwgInJuIiwgIm5uIiwgIlVpIiwgIkhlIiwgIkJ0IiwgIll0IiwgImppIiwgIkh0IiwgInhpIiwgIiRpIiwgIm9uIiwgIlZpIiwgIkdpIiwgInppIiwgInFpIiwgImFuIiwgIkJpIiwgIkF0IiwgInNuIiwgIllpIiwgIkhpIiwgIkppIiwgIktpIiwgIldpIiwgImZyIiwgIlhlIiwgInllIiwgIk5lIiwgIkl0IiwgIlppIiwgIkRlIiwgIlFpIiwgImN0IiwgImNuIiwgIlYiLCAiZXMiLCAiWGkiLCAidHMiLCAiVCIsICJoZSIsICJsbiIsICJycyIsICIkIiwgIm5zIiwgIm9zIiwgImFzIiwgImZlIiwgInVuIiwgInlyIiwgImlzIiwgIkp0IiwgImRuIiwgInNzIiwgImNvbm5lY3RUb0NoaWxkIiwgIkV0IiwgImNzIiwgImxzIiwgInVzIiwgIm1uIiwgIkplIiwgImRzIiwgInluIiwgIl9yIiwgIlBlIiwgIkdlIiwgInBzIiwgIm1zIiwgImZzIiwgImhzIiwgInlzIiwgIl9zIiwgImdzIiwgIl9uIiwgImhuIiwgIndzIiwgImduIiwgIkoiLCAidnMiLCAiYnMiLCAid24iLCAiRXMiLCAiUHMiLCAibnQiLCAidm4iLCAiQ3MiLCAiYm4iLCAiU3MiLCAiS3QiLCAia3MiLCAiQXMiLCAiRW4iLCAiSXMiLCAiUG4iLCAiQ24iLCAiU24iLCAiQiIsICJrbiIsICJXdCIsICJadCIsICJScyIsICJUcyIsICJRdCIsICJtbCIsICJBbiIsICJvdCIsICJHIiwgIkluIiwgIlNlIiwgIkZzIiwgIk5zIiwgIk9lIiwgImV0IiwgIk1zIiwgIlJuIiwgIkRzIiwgIk9zIiwgImhyIiwgIkxzIiwgIlVzIiwgImpzIiwgIlRuIiwgIkZuIiwgIk5uIiwgIk1uIiwgIkRuIiwgIk9uIiwgIlgiLCAiTG4iLCAieHMiLCAiJHMiLCAiVnMiLCAiWm4iLCAiemUiLCAiVW4iLCAiR3MiLCAiUiIsICJ6cyIsICJqZSIsICJYdCIsICJSdCIsICJlciIsICJ4ZSIsICJqbiIsICJ0ciIsICJ0ZSIsICJJZSIsICJxcyIsICJCcyIsICJiIiwgIkUiLCAiSSIsICJNIiwgIkMiLCAiRiIsICJZIiwgIm9lIiwgIndlIiwgImRlIiwgIkFlIiwgIiRlIiwgImtlIiwgInV0IiwgIllzIiwgIkhzIiwgIkpzIiwgInFlIiwgInhuIiwgIktzIiwgIldzIiwgInJlIiwgIlJlIiwgIlpzIiwgIlFzIiwgImdlIiwgIiRuIiwgIlZuIiwgIlhzIiwgImVjIiwgImR0IiwgIkduIiwgInRjIiwgInJjIiwgImJlIiwgIkJlIiwgIm5jIiwgIm9jIiwgImFjIiwgInpuIiwgImljIiwgInNjIiwgInFuIiwgIkx0IiwgImNjIiwgImxjIiwgImdyIiwgInVjIiwgIkJuIiwgImRjIiwgInBjIiwgIkNlIiwgIlV0IiwgIm1jIiwgIlluIiwgImZjIiwgImhjIiwgInljIiwgIkpuIiwgIkhuIiwgImsiLCAid3IiLCAiZ2MiLCAid2MiLCAidmMiLCAiYmMiLCAiSCIsICJLbiIsICJFYyIsICJQYyIsICJ2ciIsICJDYyIsICJTYyIsICJrYyIsICJ2ZSIsICJBYyIsICJXbiIsICJJYyIsICJSYyIsICJhZSIsICJiciIsICJUYyIsICJGYyIsICJFciIsICJqIiwgIk5jIiwgIk1jIiwgIkRjIiwgIk9jIiwgImpjIiwgIkxjIiwgIlVjIiwgInEiLCAieGMiLCAiJGMiLCAiVmMiLCAiVGUiLCAiR2MiLCAicWMiLCAiemMiLCAiQmMiLCAiWWMiLCAiSGMiLCAiaWUiLCAiSmMiLCAiS2MiLCAiV2MiLCAiZWUiLCAiUHIiLCAibGUiLCAianQiLCAiWmMiLCAiUWMiLCAiWGMiLCAiTCIsICJlbCIsICJUdCIsICJ0bCIsICJybCIsICJubCIsICJDciIsICJvbCIsICJhbCIsICJTciIsICJpbCIsICJzbCIsICJjbCIsICJrciIsICJBciIsICJzZSIsICJXIiwgInVlIiwgIklyIiwgInVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyIsICJmb3JtQ2FsbGJhY2tzIiwgInVzZVBheW1lbnRSZXF1ZXN0cyIsICJvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInBheW1lbnRSZXF1ZXN0cyIsICJzZXRQYXltZW50UmVxdWVzdHMiLCAib3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQiLCAidXNlQ2FsbGJhY2siLCAicGF5bWVudFJlcXVlc3RzMiIsICJGT1JNX1RBUkdFVCIsICJFbGVtZW50c0Zvcm0iLCAib3BGb3JtIiwgInNldE9wRm9ybSIsICJlbGVtZW50c0NvbnRleHRWYWx1ZSIsICJzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJsb2FkZWQiLCAic2V0TG9hZGVkIiwgInN0cmlwZUxpbmtDdHJsIiwgInNldFN0cmlwZUxpbmtDdHJsIiwgImxvb3BDb25maWciLCAic2V0TG9vcENvbmZpZyIsICJhaXJ3YWxsZXgiLCAic2V0QWlyd2FsbGV4IiwgInRvdGFsQW1vdW50QXRvbXMiLCAiY3VycmVuY3kiLCAiZm9ybSIsICJnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJyZXN1bHQiLCAiRnJhZ21lbnQiLCAiY2hpbGRyZW5Qcm9wcyJdCn0K
8073
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA0fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlU3RhdGUsIHVzZVJlZiwgdXNlTWVtbywgdXNlRWZmZWN0LCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMkMSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbihmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0pKEVycm9yKTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiWklQX0NPREVcIl0gPSBcInppcENvZGVcIjtcbiAgRmllbGROYW1lMltcIkNJVFlcIl0gPSBcImNpdHlcIjtcbiAgRmllbGROYW1lMltcIlNUQVRFXCJdID0gXCJzdGF0ZVwiO1xuICBGaWVsZE5hbWUyW1wiQ09VTlRSWVwiXSA9IFwiY291bnRyeVwiO1xuICBGaWVsZE5hbWUyW1wiQUREUkVTU1wiXSA9IFwiYWRkcmVzc1wiO1xuICBGaWVsZE5hbWUyW1wiUEhPTkVcIl0gPSBcInBob25lXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0gei51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDREVfQlJJREdFXCJdID0gXCJjZGUtYnJpZGdlXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbnoubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIGhpZGVJY29uOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6LmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgb2JmdXNjYXRlZFZhbHVlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHoub3B0aW9uYWwoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6Lm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJhZGRyZXNzXCIgLyogQUREUkVTUyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nLFxuICBwYXltZW50Um91dGVJZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogei5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbnoub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6Lm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBSZXF1aXJlZFN0cmluZ1xufSk7XG56LmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHouc3RyaW5nKCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPciQxKHouYXJyYXkoei5zdHJpbmcoKSkpXG59KTtcbmNvbnN0IEZpZWxkVmFsaWRhdGlvbkVycm9yID0gei5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogei5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBzdWNjZXNzOiB6LmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6LmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHouYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbnouZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHoub2JqZWN0KHsgc3VjY2Vzczogei5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZXNzXCIgLyogU1VDQ0VTUyAqLywgXCJmYWlsdXJlXCIgLyogRkFJTFVSRSAqLywgXCJjYW5jZWxsZWRcIiAvKiBDQU5DRUxMRUQgKi9dKSxcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuei5vYmplY3Qoe1xuICBocmVmOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogei5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHouc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHouc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY29uc2VudF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBwYXltZW50X3Nlc3Npb246IG51bGxPclVuZGVmT3IkMSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwodHJ1ZSksIGhyZWY6IHouc3RyaW5nKCkgfSksXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG56Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogei5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbCksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSkpLFxuICBwb3N0X2NoZWNrb3V0X3JlZGlyZWN0X3RvOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSlcbn0pO1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6Lm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xuei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG56Lm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56LmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogei5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0gei5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKTtcbmNvbnN0IEJyYW5kID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBxdWFudGl0eTogei5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6LmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6LmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZXM6IHouYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjcmVhdGVkOiB6LmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogei5hcnJheShJbnZvaWNlTWluaW1hbCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPcih6LmFycmF5KHouc3RyaW5nKCkpKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcHJldmlldzogQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IG51bGxPclVuZGVmT3IoQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsKSxcbiAgY291cG9uczogei5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcIm9wZW5cIiksXG4gIGxvY2FsZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpLFxuICBmaW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3M6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogei5udWxsYWJsZSh6LnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSksXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHouc3RyaW5nKClcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpXG5dKTtcbmNvbnN0IENvbXBsZXRlZEZvcm1QcmVmaWxsID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnoudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xuei5vYmplY3Qoe1xuICBsb2dvOiB6LnN0cmluZygpLFxuICBpY29uOiB6LnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6LnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHBtX2lkOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6LmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHouc3RyaW5nKCksXG4gIGN1c3RvbWVyX2NvdW50cnk6IHouc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogei5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuei5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0gei5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHoub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0gei5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6LmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG56Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG4gIHVzZV91bmlmaWVkX2NjX2Zsb3c6IG51bGxPclVuZGVmT3Ioei5ib29sZWFuKCkpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgY2NfcG1faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoucmVjb3JkKHouYW55KCkpO1xuei5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUxOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTM6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNpdHk6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHN0YXRlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB6aXBfY29kZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogbnVsbE9yVW5kZWZPcih6LmJvb2xlYW4oKSlcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIG1lc3NhZ2U6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBlcnJvcl9jb2RlOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgZXZlbnRzOiB6LmFycmF5KFxuICAgIHoub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56LmFueSgpLm9wdGlvbmFsKCk7XG56Lm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7fSk7XG56Lm9iamVjdCh7XG4gIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiB6LnN0cmluZygpLFxuICBfdW5pZmllZF9jY19wY2NzX2lkOiB6LnN0cmluZygpXG59KS5jYXRjaGFsbCh6LmFueSgpKTtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuei5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG5jb25zdCBab2RGaWVsZEVycm9yID0gei5vYmplY3Qoe1xuICBjb2RlOiB6LnN0cmluZygpLFxuICBtZXNzYWdlOiB6LnN0cmluZygpLFxuICBwYXRoOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbnouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/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+IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKHRpbWVvdXRDb25maWcudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5fc3ViamVjdC5waXBlKHRpbWVvdXQodGltZW91dFBhcmFtcykpKTtcbiAgICB9O1xuICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfTtcbiAgICB0aGlzLl9zdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuXG56LmVudW0oW1wiZGV2XCIsIFwic3RnXCIsIFwicHJvZFwiXSk7XG5jb25zdCBjb25udG9CYXNlVXJscyA9IHtcbiAgcHJvZDogXCJodHRwczovL2Nvbm50by5nZXRvcGVucGF5LmNvbVwiLFxuICBzdGc6IFwiaHR0cHM6Ly9jb25udG8ub3BlbnBheXN0YWdpbmcuY29tXCIsXG4gIGRldjogXCJodHRwOi8vbG9jYWxob3N0OjgwMDBcIlxufTtcbmNvbnN0IGdldENvbm50b1VybCA9IChlbnYpID0+IHtcbiAgcmV0dXJuIGNvbm50b0Jhc2VVcmxzW2Vudl07XG59O1xuXG5mdW5jdGlvbiBhc3NlcnROZXZlcih2YWx1ZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke3ZhbHVlfWApO1xufVxuY29uc3QgZ2V0V2luZG93U2FmZSA9ICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIHJldHVybiB3aW5kb3c7XG59O1xuXG5jb25zdCBtZXRyaWNzUHVibGlzaGVyID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbmNvbnN0IE1FVFJJQ1NfUVVFVUVfS0VZID0gXCJvcF9tZXRyaWNzX3F1ZXVlXCI7XG5jb25zdCBNQVhfUkVUUllfQVRURU1QVFMgPSAzO1xuY29uc3QgQkFUQ0hfU0laRSA9IDM7XG5jb25zdCBCQVRDSF9JTlRFUlZBTF9NUyA9IDFlMztcbmNvbnN0IHsgbG9nX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwib3AtbWV0cmljc1wiKTtcbmNsYXNzIE1ldHJpY3NRdWV1ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IDA7XG4gICAgdGhpcy5vZmZsaW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBsb2dfXyhcIk5ldHdvcmsgb2ZmbGluZSwgbWV0cmljcyB3aWxsIGJlIHF1ZXVlZFwiKTtcbiAgICAgIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfTtcbiAgICB0aGlzLm9ubGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbG9nX18oXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpO1xuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9O1xuICAgIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gIH1cbiAgYWRkRXZlbnQoZXZlbnROYW1lLCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcykge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnROYW1lLFxuICAgICAgcHJvcGVydGllczogcHJvcGVydGllcyB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiBjb250ZXh0UHJvcGVydGllcyB8fCB7fSxcbiAgICAgIG5vbmNlOiB2NCgpLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBldmVudC50aW1lc3RhbXA7XG4gICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkUXVldWUgPSBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZT8uZ2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkUXVldWUpIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IEpTT04ucGFyc2Uoc3RvcmVkUXVldWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSwgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWV1ZSkpO1xuICB9XG4gIHNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IHNhZmVXaW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgaWYgKHNhZmVXaW5kb3cgJiYgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBzYWZlV2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICB9LCBCQVRDSF9JTlRFUlZBTF9NUyk7XG4gICAgfVxuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBpZiAodGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIGdldFdpbmRvd1NhZmUoKT8uY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lb3V0KTtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgfVxuICBwcm9jZXNzUXVldWUoKSB7XG4gICAgaWYgKCFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gdHJ1ZTtcbiAgICB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBjb250ZXh0ID0gbWV0cmljc1B1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgbG9nX18oXCJNZXRyaWNzIGNvbnRleHQgbm90IGF2YWlsYWJsZSwgd2lsbCByZXRyeSBsYXRlclwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYmF0Y2ggPSB0aGlzLnF1ZXVlLnNsaWNlKDAsIEJBVENIX1NJWkUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXRjaFBheWxvYWQgPSB7XG4gICAgICAgIGV2ZW50czogYmF0Y2gubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBldmVudF9uYW1lOiBldmVudC5ldmVudE5hbWUsXG4gICAgICAgICAgICBkZXZpY2VfdG9rZW46IGNvbnRleHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICAgICAgLi4uZXZlbnQuY29udGV4dFByb3BlcnRpZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIG5vbmNlOiBldmVudC5ub25jZSxcbiAgICAgICAgICAgICAgZGF0ZXRpbWU6IGV2ZW50LmRhdGV0aW1lLFxuICAgICAgICAgICAgICB0aW1lc3RhbXA6IGV2ZW50LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgdGltZV9kaWZmX2Zyb21fcHJldmlvdXNfZXZlbnQ6IGV2ZW50LnRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQsXG4gICAgICAgICAgICAgIGNoZWNrb3V0X3NlY3VyZV90b2tlbjogY29udGV4dC5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgICAuLi5ldmVudC5wcm9wZXJ0aWVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgICBjb25zdCBjb25udG9VcmwgPSBnZXRDb25udG9VcmwoY29udGV4dC5lbnZpcm9ubWVudCk7XG4gICAgICBjb25zdCBtZXRyaWNzUm91dGVyID0gbmV3IFVSTChcIi9tZXRyaWNzL3B1YmxpYy9jYXB0dXJlXCIsIGNvbm50b1VybCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKG1ldHJpY3NSb3V0ZXIudG9TdHJpbmcoKSwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYmF0Y2hQYXlsb2FkKVxuICAgICAgfSk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dfXyhcIkVycm9yIHNlbmRpbmcgbWV0cmljcyBiYXRjaDpcIiwgZXJyb3IpO1xuICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKSB7XG4gICAgYmF0Y2guZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LmF0dGVtcHRDb3VudCsrO1xuICAgIH0pO1xuICAgIGNvbnN0IGV2ZW50c1RvS2VlcCA9IGJhdGNoLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmF0dGVtcHRDb3VudCA8IE1BWF9SRVRSWV9BVFRFTVBUUyk7XG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICB0aGlzLnF1ZXVlID0gWy4uLmV2ZW50c1RvS2VlcCwgLi4udGhpcy5xdWV1ZV07XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgfVxuICBjbGVhbnVwKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG59XG5jb25zdCBtZXRyaWNzUXVldWUgPSBuZXcgTWV0cmljc1F1ZXVlKCk7XG5nZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgKCkgPT4ge1xuICBtZXRyaWNzUXVldWUucHJvY2Vzc1F1ZXVlKCk7XG59KTtcblxuei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wazogei5zdHJpbmcoKVxufSk7XG5cbnoub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCI6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcbmNvbnN0IEFXWF9MT0FESU5HID0ge1xuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn07XG5cbmNvbnN0IFBheW1lbnRQcm9jZXNzb3IgPSB6LmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiLCBcImFkeWVuXCJdKTtcbih7XG4gIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59KTtcblxuei5vYmplY3Qoe1xuICBkYXRhOiB6Lm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICAgIGVycm9yczogei5hcnJheSh6LmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogei5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogei5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcblxuY29uc3QgQWR5ZW5FbnZpcm9ubWVudCA9IHouZW51bShbXCJ0ZXN0XCIsIFwibGl2ZVwiLCBcImxpdmUtdXNcIiwgXCJsaXZlLWluXCIsIFwibGl2ZS1hcHNlXCIsIFwibGl2ZS1hdVwiXSk7XG56LmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG56Lm9iamVjdCh7XG4gIFwib3AtYWNjb3VudC1pZFwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBBZHllbkVudmlyb25tZW50LFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbnoub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHouc3RyaW5nKClcbn0pO1xuXG56Lm9iamVjdCh7XG4gIHN0cmlwZV9wazogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6LnN0cmluZygpXG59KTtcblxuei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImxvb3BcIiksXG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJjcnlwdG9cIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCksXG4gICAgZW50aXR5X2lkOiB6LnN0cmluZygpLFxuICAgIGFwaV90b2tlbjogei5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKVxuICB9KVxufSk7XG52YXIgRW52aXJvbm1lbnQgPSAvKiBAX19QVVJFX18gKi8gKChFbnZpcm9ubWVudDIpID0+IHtcbiAgRW52aXJvbm1lbnQyW1wiTG9jYWxcIl0gPSBcImxvY2FsXCI7XG4gIEVudmlyb25tZW50MltcIkRldmVsb3BtZW50XCJdID0gXCJkZXZlbG9wbWVudFwiO1xuICBFbnZpcm9ubWVudDJbXCJTdGFnaW5nXCJdID0gXCJzdGFnaW5nXCI7XG4gIEVudmlyb25tZW50MltcIkRlbW9cIl0gPSBcImRlbW9cIjtcbiAgRW52aXJvbm1lbnQyW1wiUHJvZHVjdGlvblwiXSA9IFwicHJvZHVjdGlvblwiO1xuICByZXR1cm4gRW52aXJvbm1lbnQyO1xufSkoRW52aXJvbm1lbnQgfHwge30pO1xudmFyIFBheUluRmFpbGVkID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5GYWlsZWQyKSA9PiB7XG4gIFBheUluRmFpbGVkMltcIk1FVEhPRF9DUkVBVElPTl9GQUlMRURcIl0gPSBcIm1ldGhvZENyZWF0aW9uRmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9CQUxBTkNFXCJdID0gXCJpbnN1ZmZpY2llbnRCYWxhbmNlXCI7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9BVVRIT1JJWkFUSU9OXCJdID0gXCJpbnN1ZmZpY2llbnRBdXRob3JpemF0aW9uXCI7XG4gIFBheUluRmFpbGVkMltcIlNJR05FRF9NRVNTQUdFX1JFUVVJUkVEXCJdID0gXCJzaWduZWRNZXNzYWdlUmVxdWlyZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiQ1VTVE9NRVJfQ1JFQVRJT05fRkFJTEVEXCJdID0gXCJjdXN0b21lckNyZWF0aW9uRmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlBBWU1FTlRfRkFJTEVEXCJdID0gXCJwYXltZW50RmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlRSQU5TQUNUSU9OX0ZBSUxFRFwiXSA9IFwidHJhbnNhY3Rpb25GYWlsZWRcIjtcbiAgcmV0dXJuIFBheUluRmFpbGVkMjtcbn0pKFBheUluRmFpbGVkIHx8IHt9KTtcbnZhciBQYXlJblN0YXRlID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5TdGF0ZTIpID0+IHtcbiAgUGF5SW5TdGF0ZTJbXCJJRExFXCJdID0gXCJpZGxlXCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19CQUxBTkNFXCJdID0gXCJjb25maXJtaW5nQmFsYW5jZVwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfQVVUSE9SSVpBVElPTlwiXSA9IFwiY29uZmlybWluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJVUERBVElOR19BVVRIT1JJWkFUSU9OXCJdID0gXCJ1cGRhdGluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJTSUdOSU5HX01FU1NBR0VcIl0gPSBcInNpZ25pbmdNZXNzYWdlXCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfQ1VTVE9NRVJcIl0gPSBcImNyZWF0aW5nQ3VzdG9tZXJcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDUkVBVElOR19QQVlNRU5UX01FVEhPRFwiXSA9IFwiY3JlYXRpbmdQYXltZW50TWV0aG9kXCI7XG4gIFBheUluU3RhdGUyW1wiUFJPQ0VTU0lOR19QQVlNRU5UXCJdID0gXCJwcm9jZXNzaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX1BBWU1FTlRcIl0gPSBcImNyZWF0aW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfUEFZTUVOVFwiXSA9IFwiY29uZmlybWluZ1BheW1lbnRcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT01QTEVURVwiXSA9IFwiY29tcGxldGVcIjtcbiAgUGF5SW5TdGF0ZTJbXCJBVVRIT1JJWkVEXCJdID0gXCJhdXRob3JpemVkXCI7XG4gIHJldHVybiBQYXlJblN0YXRlMjtcbn0pKFBheUluU3RhdGUgfHwge30pO1xuXG5jb25zdCBMT09QX0xPQURJTkcgPSB7XG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBjb25maWc6IG51bGwsXG4gIHdpZGdldDogbnVsbFxufTtcbnoub2JqZWN0KHtcbiAgW1wibG9vcEZpcnN0TmFtZVwiXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxvb3BMYXN0TmFtZVwiXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxvb3BFbWFpbFwiXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIFtcImxvb3BGaXJzdE5hbWVcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsb29wTGFzdE5hbWVcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsb29wRW1haWxcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbRmllbGROYW1lLlBST01PVElPTl9DT0RFXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuXG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJwYXlwYWxcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7IGNsaWVudF9pZDogei5zdHJpbmcoKSB9KSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG5cbnoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHouc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxuei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnVuaW9uKFt6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuXG5jb25zdCBQUl9MT0FESU5HID0ge1xuICBpc0xvYWRpbmc6IHRydWUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYHN0YXJ0RmxvdyB0cmlnZ2VyZWQgd2hpbGUgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIG5vdCByZWFkeS4gXG4gICAgICBZb3UgY2FuIGNoZWNrIHRoZSBcIi5pc0xvYWRpbmdcIiBwYXJhbSB0byBrbm93IHdoZW4gYSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbG9hZGluZywgXG4gICAgICBhbmQgXCIuaXNBdmFpbGFibGVcIiB0byBrbm93IGlmIGEgcGF5bWVudCByZXF1ZXN0IGlzIGF2YWlsYWJsZS5gXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6LmZ1bmN0aW9uKCkub3B0aW9uYWwoKTtcbmNvbnN0IFpvZEZvcm1DYWxsYmFja3MgPSB6Lm9iamVjdCh7XG4gIG9uRm9jdXM6IE9wdGlvbmFsRm4sXG4gIG9uQmx1cjogT3B0aW9uYWxGbixcbiAgb25DaGFuZ2U6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZDogT3B0aW9uYWxGbixcbiAgb25Mb2FkRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25DaGVja291dEVycm9yOiBPcHRpb25hbEZuLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogT3B0aW9uYWxGblxufSk7XG5jbGFzcyBGb3JtQ2FsbGJhY2tzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogU2V0cyBBTEwgZm9ybSBjYWxsYmFja3MuIE5vdGUgdGhhdCBhbGwgb2xkIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyYXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJhd0NhbGxiYWNrcykuZm9yRWFjaCgoW2tleSwgcmF3Q2FsbGJhY2tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVDYWxsYmFjayA9IG1ha2VDYWxsYmFja1NhZmUoa2V5LCByYXdDYWxsYmFjayA/PyBGb3JtQ2FsbGJhY2tzLk5PT1AsIGVycl9fKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG52YXIgU3VibWl0TWV0aG9kcyA9IC8qIEBfX1BVUkVfXyAqLyAoKFN1Ym1pdE1ldGhvZHMyKSA9PiB7XG4gIFN1Ym1pdE1ldGhvZHMyW1wicG9ja3l0UGF5cGFsXCJdID0gXCJwb2NreXQtcGF5cGFsXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4R29vZ2xlUGF5XCJdID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEFwcGxlUGF5XCJdID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0R29vZ2xlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEFwcGxlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5Hb29nbGVQYXlcIl0gPSBcImFkeWVuLWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZHllbkFwcGxlUGF5XCJdID0gXCJhZHllbi1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJsb29wQ3J5cHRvXCJdID0gXCJsb29wLWNyeXB0b1wiO1xuICBTdWJtaXRNZXRob2RzMltcInBheXBhbFwiXSA9IFwicGF5cGFsXCI7XG4gIHJldHVybiBTdWJtaXRNZXRob2RzMjtcbn0pKFN1Ym1pdE1ldGhvZHMgfHwge30pO1xuei5uYXRpdmVFbnVtKFN1Ym1pdE1ldGhvZHMpO1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgRWxlbWVudHNDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGZvcm1JZDogXCJcIixcbiAgZm9ybUhlaWdodDogXCJcIixcbiAgcmVmZXJyZXI6IHZvaWQgMCxcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdm9pZCAwLFxuICByZWdpc3RlcklmcmFtZTogKCkgPT4ge1xuICB9LFxuICBiYXNlVXJsOiBcIlwiXG59KTtcblxuY29uc3QgdXNlT3BlblBheUVsZW1lbnRzID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChFbGVtZW50c0NvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VPcGVuUGF5RWxlbWVudHMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBPcGVuUGF5RWxlbWVudHNQcm92aWRlclwiKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG5cbmNvbnN0IEVsZW1lbnRGcmFtZSA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGVsZW1lbnRUeXBlLCBzdHlsZXMgfSA9IHByb3BzO1xuICBjb25zdCB7IGZvcm1JZCwgcmVmZXJyZXIsIGZvcm1IZWlnaHQsIGNoZWNrb3V0U2VjdXJlVG9rZW4sIHJlZ2lzdGVySWZyYW1lLCBiYXNlVXJsIH0gPSB1c2VPcGVuUGF5RWxlbWVudHMoKTtcbiAgY29uc3Qgc3ViUGF0aCA9IGVsZW1lbnRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IFtoYXNMb2FkZWQsIHNldEhhc0xvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlmcmFtZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZWxlbWVudFN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzdHlsZXMpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhzdHlsZXMpO1xuICB9LCBbc3R5bGVzXSk7XG4gIGNvbnN0IGZyYW1lU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGhlaWdodDogZm9ybUhlaWdodFxuICAgIH07XG4gIH0sIFtmb3JtSGVpZ2h0XSk7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuIHx8ICFyZWZlcnJlcikgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHJlZmVycmVyKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic3R5bGVzXCIsIGVsZW1lbnRTdHlsZSk7XG4gICAgcGFyYW1zLmFwcGVuZChcImZvcm1JZFwiLCBmb3JtSWQpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCBjaGVja291dFNlY3VyZVRva2VuKTtcbiAgICByZXR1cm4gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0sIFtlbGVtZW50U3R5bGUsIGZvcm1JZCwgcmVmZXJyZXIsIGNoZWNrb3V0U2VjdXJlVG9rZW5dKTtcbiAgdXNlRWZmZWN0KCgpID0+IHNldEhhc0xvYWRlZCh0cnVlKSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaWZyYW1lUmVmLmN1cnJlbnQgfHwgIWhhc0xvYWRlZCkgcmV0dXJuO1xuICAgIHJlZ2lzdGVySWZyYW1lKGVsZW1lbnRUeXBlLCBpZnJhbWVSZWYuY3VycmVudCk7XG4gIH0sIFtoYXNMb2FkZWRdKTtcbiAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltmb3JtXSBDYW5ub3QgcmVuZGVyIHBhcnRpYWxseSBpbml0aWFsaXplZCBmcmFtZVwiKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7fSk7XG4gIH1cbiAgY29uc3QgdXJsID0gbmV3IFVSTChgL2FwcC92MS8ke3N1YlBhdGh9LWVsZW1lbnQvYCwgYmFzZVVybCk7XG4gIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZztcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgXCJpZnJhbWVcIixcbiAgICB7XG4gICAgICBpZDogYG9qcy0ke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgbmFtZTogYCR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBjbGFzc05hbWU6IFwib2pzLWlmcmFtZVwiLFxuICAgICAgc3JjOiB1cmwudG9TdHJpbmcoKSxcbiAgICAgIHN0eWxlOiBmcmFtZVN0eWxlLFxuICAgICAgcmVmOiBpZnJhbWVSZWZcbiAgICB9XG4gICk7XG59O1xuXG5jb25zdCBDYXJkRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRCB9KTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFeHBpcnlFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWSB9KTtcbn07XG5cbmNvbnN0IENhcmROdW1iZXJFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX05VTUJFUiB9KTtcbn07XG5cbmZ1bmN0aW9uIFFuKGUsIHQpIHtcbiAgdmFyIHIgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHIgPyByKGUsIHQpIDogZS5fX3Byb3RvX18gPSB0O1xufVxuZnVuY3Rpb24gWG4oZSwgdCkge1xuICB0ID09PSB2b2lkIDAgJiYgKHQgPSBlLmNvbnN0cnVjdG9yKTtcbiAgdmFyIHIgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgciAmJiByKGUsIHQpO1xufVxudmFyIGVvID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICB2YXIgZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByZXR1cm4gZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKG8sIGkpIHtcbiAgICAgIG8uX19wcm90b19fID0gaTtcbiAgICB9IHx8IGZ1bmN0aW9uKG8sIGkpIHtcbiAgICAgIGZvciAodmFyIHMgaW4gaSlcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksIHMpICYmIChvW3NdID0gaVtzXSk7XG4gICAgfSwgZShyLCBuKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBpZiAodHlwZW9mIHIgIT0gXCJmdW5jdGlvblwiICYmIHIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICBlKHQsIHIpO1xuICAgIGZ1bmN0aW9uIG4oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gdDtcbiAgICB9XG4gICAgdC5wcm90b3R5cGUgPSByID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShyKSA6IChuLnByb3RvdHlwZSA9IHIucHJvdG90eXBlLCBuZXcgbigpKTtcbiAgfTtcbn0oKSwgdG8gPSBmdW5jdGlvbihlKSB7XG4gIGVvKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICB2YXIgbyA9IHRoaXMuY29uc3RydWN0b3IsIGkgPSBlLmNhbGwodGhpcywgciwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogby5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfSksIFFuKGksIG8ucHJvdG90eXBlKSwgWG4oaSksIGk7XG4gIH1cbiAgcmV0dXJuIHQ7XG59KEVycm9yKTtcbmNvbnN0IE8gPSB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pLCBBID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKSwgTiA9IChlKSA9PiB6Lm51bGxhYmxlKGUub3B0aW9uYWwoKSk7XG52YXIgZiA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkZJUlNUX05BTUUgPSBcImZpcnN0TmFtZVwiLCBlLkxBU1RfTkFNRSA9IFwibGFzdE5hbWVcIiwgZS5FTUFJTCA9IFwiZW1haWxcIiwgZS5aSVBfQ09ERSA9IFwiemlwQ29kZVwiLCBlLkNJVFkgPSBcImNpdHlcIiwgZS5TVEFURSA9IFwic3RhdGVcIiwgZS5DT1VOVFJZID0gXCJjb3VudHJ5XCIsIGUuQUREUkVTUyA9IFwiYWRkcmVzc1wiLCBlLlBIT05FID0gXCJwaG9uZVwiLCBlLlBST01PVElPTl9DT0RFID0gXCJwcm9tb3Rpb25Db2RlXCIsIGUpKShmIHx8IHt9KTtcbmNvbnN0IEZyID0gei5uYXRpdmVFbnVtKGYpO1xudmFyIE5yID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuQ0FSRF9OVU1CRVIgPSBcImNhcmROdW1iZXJcIiwgZS5DQVJEX0VYUElSWSA9IFwiY2FyZEV4cGlyeVwiLCBlLkNBUkRfQ1ZDID0gXCJjYXJkQ3ZjXCIsIGUpKShOciB8fCB7fSk7XG5jb25zdCBNciA9IHoubmF0aXZlRW51bShOciksIERyID0gei51bmlvbihbRnIsIE1yXSk7XG52YXIgY2UgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5DQVJEID0gXCJjYXJkXCIsIGUuQ0FSRF9OVU1CRVIgPSBcImNhcmQtbnVtYmVyXCIsIGUuQ0FSRF9FWFBJUlkgPSBcImNhcmQtZXhwaXJ5XCIsIGUuQ0FSRF9DVkMgPSBcImNhcmQtY3ZjXCIsIGUuQ0RFX0JSSURHRSA9IFwiY2RlLWJyaWRnZVwiLCBlKSkoY2UgfHwge30pO1xuY29uc3Qgcm8gPSB6Lm5hdGl2ZUVudW0oY2UpLCBfdCA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBOKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogTih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pLCBubyA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBBLFxuICBleHBpcnk6IEEsXG4gIGN2YzogQVxufSk7XG56Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogQSxcbiAgY29sb3I6IEEsXG4gIGZvbnRGYW1pbHk6IEEsXG4gIGZvbnRTaXplOiBBLFxuICBmb250V2VpZ2h0OiBBLFxuICBtYXJnaW46IEEsXG4gIHBhZGRpbmc6IEEsXG4gIGxldHRlclNwYWNpbmc6IEEsXG4gIGxpbmVIZWlnaHQ6IEEsXG4gIGhpZGVJY29uOiBBXG59KTtcbmNvbnN0IG5lID0gei5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pLCBvbyA9IG5lLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pLCBhbyA9IHoub2JqZWN0KHsgdHlwZTogb28gfSksIGlvID0gbmUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pLCBzbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogaW8sXG4gIGVsZW1lbnRUeXBlOiBNcixcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIG9iZnVzY2F0ZWRWYWx1ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgY28gPSBuZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKSwgbG8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IGNvLFxuICBtZXNzYWdlOiBPLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgdW8gPSBuZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pLCBwbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogdW8sXG4gIGVsZW1lbnRUeXBlOiBEcixcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KSwgbW8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChuZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogT1xufSksIGZvID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwobmUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IE8sXG4gIHRvdGFsQW1vdW50QXRvbXM6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBBLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6LmFycmF5KF90KVxufSksIHlvID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwobmUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6Lm9wdGlvbmFsKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSksIF9vID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwobmUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6LnN0cmluZygpXG59KSwgdHQgPSB6Lm9iamVjdCh7XG4gIGZpcnN0TmFtZTogTyxcbiAgbGFzdE5hbWU6IE8sXG4gIGVtYWlsOiBPLFxuICB6aXBDb2RlOiBPLFxuICBjb3VudHJ5OiBPLFxuICBwcm9tb3Rpb25Db2RlOiBBXG59KSwgaG8gPSB6Lm9iamVjdCh7XG4gIGZpcnN0TmFtZTogQSxcbiAgbGFzdE5hbWU6IEEsXG4gIGVtYWlsOiBPLFxuICB6aXBDb2RlOiBPLFxuICBjb3VudHJ5OiBPLFxuICBwcm9tb3Rpb25Db2RlOiBBLFxuICBhZGRyZXNzOiBBLFxuICBjaXR5OiBBLFxuICBzdGF0ZTogQVxufSksIGdvID0gbmUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKSwgd28gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IGdvLFxuICBzZXNzaW9uSWQ6IE8sXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogX3QsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBBLFxuICBwYXltZW50Um91dGVJZDogQVxufSkuZXh0ZW5kKHR0LnNoYXBlKSwgdm8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChuZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHouYm9vbGVhbigpXG59KSwgYm8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChuZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6LnN0cmluZygpXG59KSwgRW8gPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBhbyxcbiAgc28sXG4gIGxvLFxuICBwbyxcbiAgbW8sXG4gIGZvLFxuICB3byxcbiAgdm8sXG4gIGJvLFxuICB5byxcbiAgX29cbl0pLCBDbyA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogRW8sXG4gIG5vbmNlOiBPLFxuICBmb3JtSWQ6IE8sXG4gIGVsZW1lbnRJZDogT1xufSk7XG56Lm9iamVjdCh7XG4gIGFtb3VudEF0b206IHoubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IE9cbn0pO1xuei5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBOKHouc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogTih6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogTih6LnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBOKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBLZSA9IHoub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yc191c2VkOiBOKHouYXJyYXkoei5zdHJpbmcoKSkpXG59KSwgUG8gPSB6Lm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6LnN0cmluZygpLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFNvID0gei5vYmplY3Qoe1xuICBzdWNjZXNzOiB6LmxpdGVyYWwoITEpLFxuICBlcnJvcl90eXBlOiB6LmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHouYXJyYXkoUG8pXG59KSwga28gPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6Lm9iamVjdCh7IHN1Y2Nlc3M6IHoubGl0ZXJhbCghMCkgfSksXG4gIFNvXG5dKTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IF90LFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiB0dCxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IE4oei5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogTih6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IE4oei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogX3QsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IHR0LFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogTih6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IE4oei5zdHJpbmcoKSlcbn0pO1xudmFyIEQgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5TVUNDRVNTID0gXCJzdWNjZXNzXCIsIGUuRkFJTFVSRSA9IFwiZmFpbHVyZVwiLCBlLkNBTkNFTExFRCA9IFwiY2FuY2VsbGVkXCIsIGUpKShEIHx8IHt9KTtcbmNvbnN0IEFvID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuei5vYmplY3Qoe1xuICBocmVmOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBJbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6LnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogei5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogei5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIE9yID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IE4oei5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBOKHouc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBOKHouc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogTih6LnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBOKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSksIFJvID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwoITApLCBocmVmOiB6LnN0cmluZygpIH0pLFxuICB6Lm9iamVjdCh7IHByZXNlbnQ6IHoubGl0ZXJhbCghMSkgfSlcbl0pLCBUbyA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6LmFycmF5KG5vKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IE4oS2UpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IE4oei5hcnJheShPcikpLFxuICBwb3N0X2NoZWNrb3V0X3JlZGlyZWN0X3RvOiBOKHouc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBOKEtlKVxufSksIHcgPSAoZSkgPT4gei5udWxsYWJsZShlLm9wdGlvbmFsKCkpO1xuei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KTtcbmNvbnN0IEZvID0gei5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBMciA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiB3KHoubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogdyh6Lm51bWJlcigpKSxcbiAgY3VycmVuY3k6IHcoei5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6LnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IHcoei5udW1iZXIoKSlcbn0pLCBVciA9IHoub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IHcoei5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiB3KHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiB3KHoubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSksIE5vID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksIE1vID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogdyhObylcbn0pLCBVZSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiB3KHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogdyh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pLCBEbyA9IHoub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHoubnVtYmVyKClcbn0pLCBPbyA9IHoub2JqZWN0KHtcbiAgaWQ6IHcoei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IHcoei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IHcoei5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogei5hcnJheShEbyksXG4gIHRyaWFsX3N0YXJ0OiB3KHouc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IHcoei5zdHJpbmcoKSlcbn0pLCBqciA9IHoub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHoubnVtYmVyKClcbn0pLCBMbyA9IHoub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHouYXJyYXkoanIpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogei5zdHJpbmcoKVxufSksIFVvID0gei5vYmplY3Qoe1xuICBjb3Vwb246IExyXG59KSwgam8gPSB6Lm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkaXNjb3VudHM6IHouYXJyYXkoVW8pLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IHcoei5zdHJpbmcoKSksXG4gIGxpbmVzOiB6LmFycmF5KExvKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHouYXJyYXkoanIpXG59KSwgcnIgPSB6Lm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHouYXJyYXkoT28pLFxuICBpbnZvaWNlczogei5hcnJheShqbyksXG4gIHByb2Nlc3NvcnNfdXNlZDogdyh6LmFycmF5KHouc3RyaW5nKCkpKVxufSksIHhyID0gei5vYmplY3Qoe1xuICBwcmV2aWV3OiBycixcbiAgcHJldmlld19wb3N0X3RyaWFsOiB3KHJyKSxcbiAgY291cG9uczogei5hcnJheShMcilcbn0pLCBuciA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IHcoei5zdHJpbmcoKSksXG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBlbWFpbDogdyh6LnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogei5hcnJheShVciksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IE1vLFxuICBzdWJzX3ByZXZpZXc6IHcoeHIpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHouYXJyYXkoVWUpLFxuICBmaW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3M6IHcoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KSwgJHIgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHoubnVsbGFibGUoei51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKG5yLnNoYXBlKSxcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHouZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogei5zdHJpbmcoKVxuICB9KS5leHRlbmQobnIuc2hhcGUpXG5dKSwgeG8gPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pLCAkbyA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnoudW5pb24oWyRyLCB4bywgJG9dKTtcbnoub2JqZWN0KHtcbiAgbG9nbzogei5zdHJpbmcoKSxcbiAgaWNvbjogei5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogei5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwbV9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogei5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6LnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6LnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KFVyKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHouYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogVWUsXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IHcoei5zdHJpbmcoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IHcoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgVnIgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgVm8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuei5hcnJheShWbyk7XG5jb25zdCBHbyA9IHoub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pLCB6byA9IHoub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KSwgR3IgPSB6Lm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoem8pLFxuICBwcm9tb3Rpb25fY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCkuaW50KClcbn0pLCBxbyA9IHoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB3KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIHBheW1lbnRfcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBVZSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IEdyLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChHby5zaGFwZSkuZXh0ZW5kKHFvLnNoYXBlKTtcbmNvbnN0IHpyID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiB3KHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgZmllbGRzOiBobyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBVZSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogdyh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IHR0LFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogVWUsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG4gIHVzZV91bmlmaWVkX2NjX2Zsb3c6IHcoei5ib29sZWFuKCkpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IEdyLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IHcoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB3KHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IEJvID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjY19wbV9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogdyhLZSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IHcoei5zdHJpbmcoKSlcbn0pO1xuei5yZWNvcmQoei5hbnkoKSk7XG56Lm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IHcoei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogdyh6LnN0cmluZygpKSxcbiAgbGluZTE6IHcoei5zdHJpbmcoKSksXG4gIGxpbmUyOiB3KHouc3RyaW5nKCkpLFxuICBsaW5lMzogdyh6LnN0cmluZygpKSxcbiAgY2l0eTogdyh6LnN0cmluZygpKSxcbiAgc3RhdGU6IHcoei5zdHJpbmcoKSksXG4gIGNvdW50cnk6IHcoei5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiB3KHouc3RyaW5nKCkpLFxuICBlbWFpbDogdyh6LnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogdyh6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiB3KHouc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiB3KHouYm9vbGVhbigpKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICBlbWFpbDogdyh6LnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogdyh6LnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiB3KHouc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IHcoei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IHcoei5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IHcoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgbWVzc2FnZTogei5zdHJpbmcoKVxufSk7XG5jb25zdCBZbyA9IHoub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBVZSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiB3KHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IEhvID0gei5vYmplY3Qoe1xuICBuZXh0X2FjdGlvbl9tZXRhZGF0YTogdyh6LnJlY29yZCh6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBldmVudHM6IHouYXJyYXkoXG4gICAgei5vYmplY3Qoe1xuICAgICAgZXZlbnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICAgIGRldmljZV90b2tlbjogei5zdHJpbmcoKSxcbiAgICAgIHByb3BlcnRpZXM6IHoucmVjb3JkKHouYW55KCkpLm9wdGlvbmFsKCksXG4gICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHoucmVjb3JkKHouYW55KCkpLm9wdGlvbmFsKClcbiAgICB9KVxuICApXG59KTtcbnouYW55KCkub3B0aW9uYWwoKTtcbnoub2JqZWN0KHtcbiAgZGV2aWNlX3Rva2VuOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IEpvID0gei5vYmplY3Qoe30pLCBLbyA9IHoub2JqZWN0KHtcbiAgX3VuaWZpZWRfY2NfYWN0aW9uX25hbWU6IHouc3RyaW5nKCksXG4gIF91bmlmaWVkX2NjX3BjY3NfaWQ6IHouc3RyaW5nKClcbn0pLmNhdGNoYWxsKHouYW55KCkpLCBXbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgbG9jOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBtc2c6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKVxufSksIFpvID0gei5hcnJheShXbyksIFFvID0gei5vYmplY3Qoe1xuICBjb2RlOiB6LnN0cmluZygpLFxuICBtZXNzYWdlOiB6LnN0cmluZygpLFxuICBwYXRoOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KSwgWG8gPSB6LmFycmF5KFFvKSwgZWEgPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIEZ0ID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBlYVt0XSA/PyBlO1xufSwgdGEgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZShlKSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIHJhID0gKGUpID0+IGUubGVuZ3RoID09PSAxID8gRnQoZVswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke2UubWFwKChyKSA9PiBg4oCiICR7RnQoci5tc2cpfWApLmpvaW4oYFxuYCl9YCwgbmEgPSAoZSkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtlLm1hcCgocikgPT4gYC0gJHtyLnBhdGguam9pbihcIi9cIil9OiAke3IubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIFogPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmICh0YShlLm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCB0ID0gSlNPTi5wYXJzZShlLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIFpvLnNhZmVQYXJzZSh0KS5zdWNjZXNzID8gcmEodCkgOiBYby5zYWZlUGFyc2UodCkuc3VjY2VzcyA/IG5hKHQpIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7ZS5tZXNzYWdlfWApLCBlLm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIEZ0KGUubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgZSA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgfSBjYXRjaCAodCkge1xuICAgICAgcmV0dXJuIHQgKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiBlICsgXCJcIjtcbn0sIG9hID0gKGUsIHQsIHIpID0+ICguLi5uKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHQoLi4ubik7XG4gIH0gY2F0Y2ggKG8pIHtcbiAgICByKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtlfSk6YCwgbyk7XG4gICAgcmV0dXJuO1xuICB9XG59LCBhYSA9IChlKSA9PiBlLnJlZHVjZSgodCwgcikgPT4gdCArIHIsIDApLCBxciA9IChlKSA9PiB7XG4gIGUucHJldmVudERlZmF1bHQoKSwgZS5yZXR1cm5WYWx1ZSA9ICEwO1xufSwgaWEgPSAoKSA9PiB7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIHFyKTtcbn0sIHNhID0gKCkgPT4ge1xuICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBxcik7XG59LCBRID0gKGUpID0+IHtcbiAgbGV0IHQgPSAhMTtcbiAgcmV0dXJuIGFzeW5jIChyKSA9PiB7XG4gICAgdmFyIG4sIG87XG4gICAgaWYgKHQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIlNraXBwaW5nIHN1Ym1pc3Npb24gYmVjYXVzZSBpdCBpcyBhbHJlYWR5IGluIHByb2dyZXNzXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0ID0gITA7XG4gICAgdHJ5IHtcbiAgICAgIHIuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24gJiYgaWEoKSwgKG8gPSAobiA9IHIuZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IG8uY2FsbChuKSwgZyhcImNoZWNrb3V0X3N0YXJ0ZWRcIiwge1xuICAgICAgICBjcG06IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGkgPSBhd2FpdCBlKHIpO1xuICAgICAgaWYgKGcoXCJjaGVja291dF9zdWNjZXNzXCIsIHtcbiAgICAgICAgY3BtOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4uaVxuICAgICAgfSksIGlpKCksIGkubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhpLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgICBlbHNlIGlmIChpLm1vZGUgPT09IFwiY2hlY2tvdXRcIilcbiAgICAgICAgci5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3VjY2VzcyhcbiAgICAgICAgICBpLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgICAgaS5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgICBpLnJlc3VsdC5jdXN0b21lcl9pZCxcbiAgICAgICAgICBpLnJlc3VsdC5wcm9jZXNzb3JzX3VzZWQgPz8gW11cbiAgICAgICAgKTtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtpfWApO1xuICAgIH0gY2F0Y2ggKGkpIHtcbiAgICAgIHQgPSAhMTtcbiAgICAgIGNvbnN0IHMgPSBaKGkpLCBjID0gYXdhaXQgcG4oci5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHMpO1xuICAgICAgci5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IocywgYyksIGcoXCJjaGVja291dF9lcnJvclwiLCB7IGNwbTogci5jaGVja291dFBheW1lbnRNZXRob2QsIGVycm9yTWVzc2FnZTogcywgZXJyb3JDb2RlOiBjLCBlcnJvcjogaSB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdCA9ICExLCByLmNvbnRleHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uICYmIHNhKCk7XG4gICAgfVxuICB9O1xufSwgbWUgPSAoZSkgPT4gYXN5bmMgKHQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZSh0KTtcbiAgfSBjYXRjaCAocikge1xuICAgIGNvbnN0IHsgZXJyX186IG4gfSA9IFMoXCJpbml0LWVycm9yLWNhdGNoZXJcIiksIG8gPSBaKHIpLCBpID0gYXdhaXQgcG4odC5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIG8pO1xuICAgIHJldHVybiBuKGksIG8sIHIpLCBnKFwiaW5pdF9mbG93X2Vycm9yXCIsIHsgZXJyb3JNZXNzYWdlOiBvLCBlcnJvckNvZGU6IGksIGVycm9yOiByIH0pLCB7IGlzQXZhaWxhYmxlOiAhMSwgcmVhc29uOiBvLCBlcnJvckNvZGU6IGksIGlzTG9hZGluZzogITEgfTtcbiAgfVxufSwgUyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSAoLi4ubikgPT4ge1xuICAgIHdpbmRvdy5jb25zb2xlLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtlfWApfVx0YCwgLi4ubik7XG4gIH0sIHIgPSAoLi4ubikgPT4ge1xuICAgIHdpbmRvdy5jb25zb2xlLndhcm4oYCR7Y2hhbGsucmVkLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke2V9YCl9XHRgLCAuLi5uKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2c6IHQsXG4gICAgZXJyOiByLFxuICAgIGxvZ19fOiB0LFxuICAgIGVycl9fOiByXG4gIH07XG59O1xudmFyIE50ID0gZnVuY3Rpb24oZSwgdCkge1xuICByZXR1cm4gTnQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihyLCBuKSB7XG4gICAgci5fX3Byb3RvX18gPSBuO1xuICB9IHx8IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICBmb3IgKHZhciBvIGluIG4pIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCBvKSAmJiAocltvXSA9IG5bb10pO1xuICB9LCBOdChlLCB0KTtcbn07XG5mdW5jdGlvbiBfZShlLCB0KSB7XG4gIGlmICh0eXBlb2YgdCAhPSBcImZ1bmN0aW9uXCIgJiYgdCAhPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyh0KSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIE50KGUsIHQpO1xuICBmdW5jdGlvbiByKCkge1xuICAgIHRoaXMuY29uc3RydWN0b3IgPSBlO1xuICB9XG4gIGUucHJvdG90eXBlID0gdCA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUodCkgOiAoci5wcm90b3R5cGUgPSB0LnByb3RvdHlwZSwgbmV3IHIoKSk7XG59XG5mdW5jdGlvbiBjYShlLCB0LCByLCBuKSB7XG4gIGZ1bmN0aW9uIG8oaSkge1xuICAgIHJldHVybiBpIGluc3RhbmNlb2YgciA/IGkgOiBuZXcgcihmdW5jdGlvbihzKSB7XG4gICAgICBzKGkpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXcgKHIgfHwgKHIgPSBQcm9taXNlKSkoZnVuY3Rpb24oaSwgcykge1xuICAgIGZ1bmN0aW9uIGMoZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLm5leHQoZCkpO1xuICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICBzKHkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBsKGQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUobi50aHJvdyhkKSk7XG4gICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgIHMoeSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHUoZCkge1xuICAgICAgZC5kb25lID8gaShkLnZhbHVlKSA6IG8oZC52YWx1ZSkudGhlbihjLCBsKTtcbiAgICB9XG4gICAgdSgobiA9IG4uYXBwbHkoZSwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEJyKGUsIHQpIHtcbiAgdmFyIHIgPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHtcbiAgICBpZiAoaVswXSAmIDEpIHRocm93IGlbMV07XG4gICAgcmV0dXJuIGlbMV07XG4gIH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIG4sIG8sIGksIHMgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBzLm5leHQgPSBjKDApLCBzLnRocm93ID0gYygxKSwgcy5yZXR1cm4gPSBjKDIpLCB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiAoc1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBzO1xuICBmdW5jdGlvbiBjKHUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZCkge1xuICAgICAgcmV0dXJuIGwoW3UsIGRdKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGwodSkge1xuICAgIGlmIChuKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICBmb3IgKDsgcyAmJiAocyA9IDAsIHVbMF0gJiYgKHIgPSAwKSksIHI7ICkgdHJ5IHtcbiAgICAgIGlmIChuID0gMSwgbyAmJiAoaSA9IHVbMF0gJiAyID8gby5yZXR1cm4gOiB1WzBdID8gby50aHJvdyB8fCAoKGkgPSBvLnJldHVybikgJiYgaS5jYWxsKG8pLCAwKSA6IG8ubmV4dCkgJiYgIShpID0gaS5jYWxsKG8sIHVbMV0pKS5kb25lKSByZXR1cm4gaTtcbiAgICAgIHN3aXRjaCAobyA9IDAsIGkgJiYgKHUgPSBbdVswXSAmIDIsIGkudmFsdWVdKSwgdVswXSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpID0gdTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiByLmxhYmVsKyssIHsgdmFsdWU6IHVbMV0sIGRvbmU6ICExIH07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByLmxhYmVsKyssIG8gPSB1WzFdLCB1ID0gWzBdO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdSA9IHIub3BzLnBvcCgpLCByLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKGkgPSByLnRyeXMsICEoaSA9IGkubGVuZ3RoID4gMCAmJiBpW2kubGVuZ3RoIC0gMV0pICYmICh1WzBdID09PSA2IHx8IHVbMF0gPT09IDIpKSB7XG4gICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gMyAmJiAoIWkgfHwgdVsxXSA+IGlbMF0gJiYgdVsxXSA8IGlbM10pKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gdVsxXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gNiAmJiByLmxhYmVsIDwgaVsxXSkge1xuICAgICAgICAgICAgci5sYWJlbCA9IGlbMV0sIGkgPSB1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpICYmIHIubGFiZWwgPCBpWzJdKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gaVsyXSwgci5vcHMucHVzaCh1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpWzJdICYmIHIub3BzLnBvcCgpLCByLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB1ID0gdC5jYWxsKGUsIHIpO1xuICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgIHUgPSBbNiwgZF0sIG8gPSAwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBuID0gaSA9IDA7XG4gICAgfVxuICAgIGlmICh1WzBdICYgNSkgdGhyb3cgdVsxXTtcbiAgICByZXR1cm4geyB2YWx1ZTogdVswXSA/IHVbMV0gOiB2b2lkIDAsIGRvbmU6ICEwIH07XG4gIH1cbn1cbmZ1bmN0aW9uIE1lKGUpIHtcbiAgdmFyIHQgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIHIgPSB0ICYmIGVbdF0sIG4gPSAwO1xuICBpZiAocikgcmV0dXJuIHIuY2FsbChlKTtcbiAgaWYgKGUgJiYgdHlwZW9mIGUubGVuZ3RoID09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZSAmJiBuID49IGUubGVuZ3RoICYmIChlID0gdm9pZCAwKSwgeyB2YWx1ZTogZSAmJiBlW24rK10sIGRvbmU6ICFlIH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHQgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5mdW5jdGlvbiBwdChlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgbywgaSA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEobyA9IG4ubmV4dCgpKS5kb25lOyApIGkucHVzaChvLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIHMgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG8gJiYgIW8uZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTtcbn1cbmZ1bmN0aW9uIG10KGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBvID0gdC5sZW5ndGgsIGk7IG4gPCBvOyBuKyspXG4gICAgKGkgfHwgIShuIGluIHQpKSAmJiAoaSB8fCAoaSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgaVtuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQoaSB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59XG5mdW5jdGlvbiBGZShlKSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgRmUgPyAodGhpcy52ID0gZSwgdGhpcykgOiBuZXcgRmUoZSk7XG59XG5mdW5jdGlvbiBsYShlLCB0LCByKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBuID0gci5hcHBseShlLCB0IHx8IFtdKSwgbywgaSA9IFtdO1xuICByZXR1cm4gbyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIGMoXCJuZXh0XCIpLCBjKFwidGhyb3dcIiksIGMoXCJyZXR1cm5cIiwgcyksIG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIG87XG4gIGZ1bmN0aW9uIHMobSkge1xuICAgIHJldHVybiBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKF8pLnRoZW4obSwgeSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBjKG0sIF8pIHtcbiAgICBuW21dICYmIChvW21dID0gZnVuY3Rpb24oaCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHYsIGIpIHtcbiAgICAgICAgaS5wdXNoKFttLCBoLCB2LCBiXSkgPiAxIHx8IGwobSwgaCk7XG4gICAgICB9KTtcbiAgICB9LCBfICYmIChvW21dID0gXyhvW21dKSkpO1xuICB9XG4gIGZ1bmN0aW9uIGwobSwgXykge1xuICAgIHRyeSB7XG4gICAgICB1KG5bbV0oXykpO1xuICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgIHAoaVswXVszXSwgaCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHUobSkge1xuICAgIG0udmFsdWUgaW5zdGFuY2VvZiBGZSA/IFByb21pc2UucmVzb2x2ZShtLnZhbHVlLnYpLnRoZW4oZCwgeSkgOiBwKGlbMF1bMl0sIG0pO1xuICB9XG4gIGZ1bmN0aW9uIGQobSkge1xuICAgIGwoXCJuZXh0XCIsIG0pO1xuICB9XG4gIGZ1bmN0aW9uIHkobSkge1xuICAgIGwoXCJ0aHJvd1wiLCBtKTtcbiAgfVxuICBmdW5jdGlvbiBwKG0sIF8pIHtcbiAgICBtKF8pLCBpLnNoaWZ0KCksIGkubGVuZ3RoICYmIGwoaVswXVswXSwgaVswXVsxXSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHVhKGUpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIHQgPSBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgcjtcbiAgcmV0dXJuIHQgPyB0LmNhbGwoZSkgOiAoZSA9IHR5cGVvZiBNZSA9PSBcImZ1bmN0aW9uXCIgPyBNZShlKSA6IGVbU3ltYm9sLml0ZXJhdG9yXSgpLCByID0ge30sIG4oXCJuZXh0XCIpLCBuKFwidGhyb3dcIiksIG4oXCJyZXR1cm5cIiksIHJbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIHIpO1xuICBmdW5jdGlvbiBuKGkpIHtcbiAgICByW2ldID0gZVtpXSAmJiBmdW5jdGlvbihzKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYywgbCkge1xuICAgICAgICBzID0gZVtpXShzKSwgbyhjLCBsLCBzLmRvbmUsIHMudmFsdWUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBvKGksIHMsIGMsIGwpIHtcbiAgICBQcm9taXNlLnJlc29sdmUobCkudGhlbihmdW5jdGlvbih1KSB7XG4gICAgICBpKHsgdmFsdWU6IHUsIGRvbmU6IGMgfSk7XG4gICAgfSwgcyk7XG4gIH1cbn1cbmZ1bmN0aW9uIHgoZSkge1xuICByZXR1cm4gdHlwZW9mIGUgPT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gaHQoZSkge1xuICB2YXIgdCA9IGZ1bmN0aW9uKG4pIHtcbiAgICBFcnJvci5jYWxsKG4pLCBuLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gIH0sIHIgPSBlKHQpO1xuICByZXR1cm4gci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksIHIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gciwgcjtcbn1cbnZhciBDdCA9IGh0KGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHIpIHtcbiAgICBlKHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSByID8gci5sZW5ndGggKyBgIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG5gICsgci5tYXAoZnVuY3Rpb24obiwgbykge1xuICAgICAgcmV0dXJuIG8gKyAxICsgXCIpIFwiICsgbi50b1N0cmluZygpO1xuICAgIH0pLmpvaW4oYFxuICBgKSA6IFwiXCIsIHRoaXMubmFtZSA9IFwiVW5zdWJzY3JpcHRpb25FcnJvclwiLCB0aGlzLmVycm9ycyA9IHI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIGZ0KGUsIHQpIHtcbiAgaWYgKGUpIHtcbiAgICB2YXIgciA9IGUuaW5kZXhPZih0KTtcbiAgICAwIDw9IHIgJiYgZS5zcGxpY2UociwgMSk7XG4gIH1cbn1cbnZhciBydCA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKHQpIHtcbiAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IHQsIHRoaXMuY2xvc2VkID0gITEsIHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0LCByLCBuLCBvLCBpO1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VkID0gITA7XG4gICAgICB2YXIgcyA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgIGlmIChzKVxuICAgICAgICBpZiAodGhpcy5fcGFyZW50YWdlID0gbnVsbCwgQXJyYXkuaXNBcnJheShzKSlcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgYyA9IE1lKHMpLCBsID0gYy5uZXh0KCk7ICFsLmRvbmU7IGwgPSBjLm5leHQoKSkge1xuICAgICAgICAgICAgICB2YXIgdSA9IGwudmFsdWU7XG4gICAgICAgICAgICAgIHUucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICAgIHQgPSB7IGVycm9yOiBoIH07XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGwgJiYgIWwuZG9uZSAmJiAociA9IGMucmV0dXJuKSAmJiByLmNhbGwoYyk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICBpZiAodCkgdGhyb3cgdC5lcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBzLnJlbW92ZSh0aGlzKTtcbiAgICAgIHZhciBkID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICBpZiAoeChkKSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkKCk7XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICBpID0gaCBpbnN0YW5jZW9mIEN0ID8gaC5lcnJvcnMgOiBbaF07XG4gICAgICAgIH1cbiAgICAgIHZhciB5ID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgIGlmICh5KSB7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIHAgPSBNZSh5KSwgbSA9IHAubmV4dCgpOyAhbS5kb25lOyBtID0gcC5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBfID0gbS52YWx1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIG9yKF8pO1xuICAgICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgICBpID0gaSA/PyBbXSwgaCBpbnN0YW5jZW9mIEN0ID8gaSA9IG10KG10KFtdLCBwdChpKSksIHB0KGguZXJyb3JzKSkgOiBpLnB1c2goaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgbiA9IHsgZXJyb3I6IGggfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbSAmJiAhbS5kb25lICYmIChvID0gcC5yZXR1cm4pICYmIG8uY2FsbChwKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKG4pIHRocm93IG4uZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaSlcbiAgICAgICAgdGhyb3cgbmV3IEN0KGkpO1xuICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByO1xuICAgIGlmICh0ICYmIHQgIT09IHRoaXMpXG4gICAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICAgIG9yKHQpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmICh0IGluc3RhbmNlb2YgZSkge1xuICAgICAgICAgIGlmICh0LmNsb3NlZCB8fCB0Ll9oYXNQYXJlbnQodGhpcykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgdC5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKHIgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiByICE9PSB2b2lkIDAgPyByIDogW10pLnB1c2godCk7XG4gICAgICB9XG4gIH0sIGUucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgcmV0dXJuIHIgPT09IHQgfHwgQXJyYXkuaXNBcnJheShyKSAmJiByLmluY2x1ZGVzKHQpO1xuICB9LCBlLnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkocikgPyAoci5wdXNoKHQpLCByKSA6IHIgPyBbciwgdF0gOiB0O1xuICB9LCBlLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHIgPT09IHQgPyB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsIDogQXJyYXkuaXNBcnJheShyKSAmJiBmdChyLCB0KTtcbiAgfSwgZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5fZmluYWxpemVycztcbiAgICByICYmIGZ0KHIsIHQpLCB0IGluc3RhbmNlb2YgZSAmJiB0Ll9yZW1vdmVQYXJlbnQodGhpcyk7XG4gIH0sIGUuRU1QVFkgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IG5ldyBlKCk7XG4gICAgcmV0dXJuIHQuY2xvc2VkID0gITAsIHQ7XG4gIH0oKSwgZTtcbn0oKSwgWXIgPSBydC5FTVBUWTtcbmZ1bmN0aW9uIEhyKGUpIHtcbiAgcmV0dXJuIGUgaW5zdGFuY2VvZiBydCB8fCBlICYmIFwiY2xvc2VkXCIgaW4gZSAmJiB4KGUucmVtb3ZlKSAmJiB4KGUuYWRkKSAmJiB4KGUudW5zdWJzY3JpYmUpO1xufVxuZnVuY3Rpb24gb3IoZSkge1xuICB4KGUpID8gZSgpIDogZS51bnN1YnNjcmliZSgpO1xufVxudmFyIEpyID0ge1xuICBvblVuaGFuZGxlZEVycm9yOiBudWxsLFxuICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gIFByb21pc2U6IHZvaWQgMCxcbiAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogITEsXG4gIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogITFcbn0sIEtyID0ge1xuICBzZXRUaW1lb3V0OiBmdW5jdGlvbihlLCB0KSB7XG4gICAgZm9yICh2YXIgciA9IFtdLCBuID0gMjsgbiA8IGFyZ3VtZW50cy5sZW5ndGg7IG4rKylcbiAgICAgIHJbbiAtIDJdID0gYXJndW1lbnRzW25dO1xuICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgbXQoW2UsIHRdLCBwdChyKSkpO1xuICB9LFxuICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gKGNsZWFyVGltZW91dCkoZSk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn07XG5mdW5jdGlvbiBXcihlKSB7XG4gIEtyLnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgZTtcbiAgfSk7XG59XG5mdW5jdGlvbiBhcigpIHtcbn1cbmZ1bmN0aW9uIGx0KGUpIHtcbiAgZSgpO1xufVxudmFyIHh0ID0gZnVuY3Rpb24oZSkge1xuICBfZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyKSB7XG4gICAgdmFyIG4gPSBlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gbi5pc1N0b3BwZWQgPSAhMSwgciA/IChuLmRlc3RpbmF0aW9uID0gciwgSHIocikgJiYgci5hZGQobikpIDogbi5kZXN0aW5hdGlvbiA9IGZhLCBuO1xuICB9XG4gIHJldHVybiB0LmNyZWF0ZSA9IGZ1bmN0aW9uKHIsIG4sIG8pIHtcbiAgICByZXR1cm4gbmV3IE10KHIsIG4sIG8pO1xuICB9LCB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8IHRoaXMuX25leHQocik7XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0aGlzLl9lcnJvcihyKSk7XG4gIH0sIHQucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2NvbXBsZXRlKCkpO1xuICB9LCB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY2xvc2VkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbCk7XG4gIH0sIHQucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChyKTtcbiAgfSwgdC5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCB0LnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCB0O1xufShydCksIGRhID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBQdChlLCB0KSB7XG4gIHJldHVybiBkYS5jYWxsKGUsIHQpO1xufVxudmFyIHBhID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUodCkge1xuICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gdDtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChyLm5leHQpXG4gICAgICB0cnkge1xuICAgICAgICByLm5leHQodCk7XG4gICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgIGl0KG4pO1xuICAgICAgfVxuICB9LCBlLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChyLmVycm9yKVxuICAgICAgdHJ5IHtcbiAgICAgICAgci5lcnJvcih0KTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgaXQobik7XG4gICAgICB9XG4gICAgZWxzZVxuICAgICAgaXQodCk7XG4gIH0sIGUucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAodC5jb21wbGV0ZSlcbiAgICAgIHRyeSB7XG4gICAgICAgIHQuY29tcGxldGUoKTtcbiAgICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgICAgaXQocik7XG4gICAgICB9XG4gIH0sIGU7XG59KCksIE10ID0gZnVuY3Rpb24oZSkge1xuICBfZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuLCBvKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodGhpcykgfHwgdGhpcywgcztcbiAgICBpZiAoeChyKSB8fCAhcilcbiAgICAgIHMgPSB7XG4gICAgICAgIG5leHQ6IHIgPz8gdm9pZCAwLFxuICAgICAgICBlcnJvcjogbiA/PyB2b2lkIDAsXG4gICAgICAgIGNvbXBsZXRlOiBvID8/IHZvaWQgMFxuICAgICAgfTtcbiAgICBlbHNlIHtcbiAgICAgIHZhciBjO1xuICAgICAgaSAmJiBKci51c2VEZXByZWNhdGVkTmV4dENvbnRleHQgPyAoYyA9IE9iamVjdC5jcmVhdGUociksIGMudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGkudW5zdWJzY3JpYmUoKTtcbiAgICAgIH0sIHMgPSB7XG4gICAgICAgIG5leHQ6IHIubmV4dCAmJiBQdChyLm5leHQsIGMpLFxuICAgICAgICBlcnJvcjogci5lcnJvciAmJiBQdChyLmVycm9yLCBjKSxcbiAgICAgICAgY29tcGxldGU6IHIuY29tcGxldGUgJiYgUHQoci5jb21wbGV0ZSwgYylcbiAgICAgIH0pIDogcyA9IHI7XG4gICAgfVxuICAgIHJldHVybiBpLmRlc3RpbmF0aW9uID0gbmV3IHBhKHMpLCBpO1xuICB9XG4gIHJldHVybiB0O1xufSh4dCk7XG5mdW5jdGlvbiBpdChlKSB7XG4gIFdyKGUpO1xufVxuZnVuY3Rpb24gbWEoZSkge1xuICB0aHJvdyBlO1xufVxudmFyIGZhID0ge1xuICBjbG9zZWQ6ICEwLFxuICBuZXh0OiBhcixcbiAgZXJyb3I6IG1hLFxuICBjb21wbGV0ZTogYXJcbn0sICR0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wub2JzZXJ2YWJsZSB8fCBcIkBAb2JzZXJ2YWJsZVwiO1xufSgpO1xuZnVuY3Rpb24geWEoZSkge1xuICByZXR1cm4gZTtcbn1cbmZ1bmN0aW9uIF9hKGUpIHtcbiAgcmV0dXJuIGUubGVuZ3RoID09PSAwID8geWEgOiBlLmxlbmd0aCA9PT0gMSA/IGVbMF0gOiBmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKG4sIG8pIHtcbiAgICAgIHJldHVybiBvKG4pO1xuICAgIH0sIHIpO1xuICB9O1xufVxudmFyIHBlID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUodCkge1xuICAgIHQgJiYgKHRoaXMuX3N1YnNjcmliZSA9IHQpO1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gbmV3IGUoKTtcbiAgICByZXR1cm4gci5zb3VyY2UgPSB0aGlzLCByLm9wZXJhdG9yID0gdCwgcjtcbiAgfSwgZS5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgIHZhciBvID0gdGhpcywgaSA9IGdhKHQpID8gdCA6IG5ldyBNdCh0LCByLCBuKTtcbiAgICByZXR1cm4gbHQoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcyA9IG8sIGMgPSBzLm9wZXJhdG9yLCBsID0gcy5zb3VyY2U7XG4gICAgICBpLmFkZChjID8gYy5jYWxsKGksIGwpIDogbCA/IG8uX3N1YnNjcmliZShpKSA6IG8uX3RyeVN1YnNjcmliZShpKSk7XG4gICAgfSksIGk7XG4gIH0sIGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbih0KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUodCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgdC5lcnJvcihyKTtcbiAgICB9XG4gIH0sIGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbih0LCByKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIHJldHVybiByID0gaXIociksIG5ldyByKGZ1bmN0aW9uKG8sIGkpIHtcbiAgICAgIHZhciBzID0gbmV3IE10KHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24oYykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0KGMpO1xuICAgICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICAgIGkobCksIHMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBpLFxuICAgICAgICBjb21wbGV0ZTogb1xuICAgICAgfSk7XG4gICAgICBuLnN1YnNjcmliZShzKTtcbiAgICB9KTtcbiAgfSwgZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgcjtcbiAgICByZXR1cm4gKHIgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogci5zdWJzY3JpYmUodCk7XG4gIH0sIGUucHJvdG90eXBlWyR0XSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgcmV0dXJuIF9hKHQpKHRoaXMpO1xuICB9LCBlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIHJldHVybiB0ID0gaXIodCksIG5ldyB0KGZ1bmN0aW9uKG4sIG8pIHtcbiAgICAgIHZhciBpO1xuICAgICAgci5zdWJzY3JpYmUoZnVuY3Rpb24ocykge1xuICAgICAgICByZXR1cm4gaSA9IHM7XG4gICAgICB9LCBmdW5jdGlvbihzKSB7XG4gICAgICAgIHJldHVybiBvKHMpO1xuICAgICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuKGkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sIGUuY3JlYXRlID0gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBuZXcgZSh0KTtcbiAgfSwgZTtcbn0oKTtcbmZ1bmN0aW9uIGlyKGUpIHtcbiAgdmFyIHQ7XG4gIHJldHVybiAodCA9IGUgPz8gSnIuUHJvbWlzZSkgIT09IG51bGwgJiYgdCAhPT0gdm9pZCAwID8gdCA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBoYShlKSB7XG4gIHJldHVybiBlICYmIHgoZS5uZXh0KSAmJiB4KGUuZXJyb3IpICYmIHgoZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBnYShlKSB7XG4gIHJldHVybiBlICYmIGUgaW5zdGFuY2VvZiB4dCB8fCBoYShlKSAmJiBIcihlKTtcbn1cbmZ1bmN0aW9uIHdhKGUpIHtcbiAgcmV0dXJuIHgoZSA9PSBudWxsID8gdm9pZCAwIDogZS5saWZ0KTtcbn1cbmZ1bmN0aW9uIHZhKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBpZiAod2EodCkpXG4gICAgICByZXR1cm4gdC5saWZ0KGZ1bmN0aW9uKHIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gZShyLCB0aGlzKTtcbiAgICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICAgIHRoaXMuZXJyb3Iobik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZVwiKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGJhKGUsIHQsIHIsIG4sIG8pIHtcbiAgcmV0dXJuIG5ldyBFYShlLCB0LCByLCBuLCBvKTtcbn1cbnZhciBFYSA9IGZ1bmN0aW9uKGUpIHtcbiAgX2UodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbiwgbywgaSwgcywgYykge1xuICAgIHZhciBsID0gZS5jYWxsKHRoaXMsIHIpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGwub25GaW5hbGl6ZSA9IHMsIGwuc2hvdWxkVW5zdWJzY3JpYmUgPSBjLCBsLl9uZXh0ID0gbiA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG4odSk7XG4gICAgICB9IGNhdGNoIChkKSB7XG4gICAgICAgIHIuZXJyb3IoZCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9uZXh0LCBsLl9lcnJvciA9IGkgPyBmdW5jdGlvbih1KSB7XG4gICAgICB0cnkge1xuICAgICAgICBpKHUpO1xuICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICByLmVycm9yKGQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gOiBlLnByb3RvdHlwZS5fZXJyb3IsIGwuX2NvbXBsZXRlID0gbyA/IGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbygpO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICByLmVycm9yKHUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gOiBlLnByb3RvdHlwZS5fY29tcGxldGUsIGw7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHI7XG4gICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkge1xuICAgICAgdmFyIG4gPSB0aGlzLmNsb3NlZDtcbiAgICAgIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksICFuICYmICgociA9IHRoaXMub25GaW5hbGl6ZSkgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwIHx8IHIuY2FsbCh0aGlzKSk7XG4gICAgfVxuICB9LCB0O1xufSh4dCksIENhID0gaHQoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgZSh0aGlzKSwgdGhpcy5uYW1lID0gXCJPYmplY3RVbnN1YnNjcmliZWRFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm9iamVjdCB1bnN1YnNjcmliZWRcIjtcbiAgfTtcbn0pLCBaciA9IGZ1bmN0aW9uKGUpIHtcbiAgX2UodCwgZSk7XG4gIGZ1bmN0aW9uIHQoKSB7XG4gICAgdmFyIHIgPSBlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gci5jbG9zZWQgPSAhMSwgci5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgci5vYnNlcnZlcnMgPSBbXSwgci5pc1N0b3BwZWQgPSAhMSwgci5oYXNFcnJvciA9ICExLCByLnRocm93bkVycm9yID0gbnVsbCwgcjtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IG5ldyBzcih0aGlzLCB0aGlzKTtcbiAgICByZXR1cm4gbi5vcGVyYXRvciA9IHIsIG47XG4gIH0sIHQucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgdGhyb3cgbmV3IENhKCk7XG4gIH0sIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIGx0KGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG8sIGk7XG4gICAgICBpZiAobi5fdGhyb3dJZkNsb3NlZCgpLCAhbi5pc1N0b3BwZWQpIHtcbiAgICAgICAgbi5jdXJyZW50T2JzZXJ2ZXJzIHx8IChuLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKG4ub2JzZXJ2ZXJzKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgcyA9IE1lKG4uY3VycmVudE9ic2VydmVycyksIGMgPSBzLm5leHQoKTsgIWMuZG9uZTsgYyA9IHMubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgbCA9IGMudmFsdWU7XG4gICAgICAgICAgICBsLm5leHQocik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgICAgbyA9IHsgZXJyb3I6IHUgfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYyAmJiAhYy5kb25lICYmIChpID0gcy5yZXR1cm4pICYmIGkuY2FsbChzKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKG8pIHRocm93IG8uZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gdGhpcztcbiAgICBsdChmdW5jdGlvbigpIHtcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmhhc0Vycm9yID0gbi5pc1N0b3BwZWQgPSAhMCwgbi50aHJvd25FcnJvciA9IHI7XG4gICAgICAgIGZvciAodmFyIG8gPSBuLm9ic2VydmVyczsgby5sZW5ndGg7IClcbiAgICAgICAgICBvLnNoaWZ0KCkuZXJyb3Iocik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHQucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIGx0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHIuX3Rocm93SWZDbG9zZWQoKSwgIXIuaXNTdG9wcGVkKSB7XG4gICAgICAgIHIuaXNTdG9wcGVkID0gITA7XG4gICAgICAgIGZvciAodmFyIG4gPSByLm9ic2VydmVyczsgbi5sZW5ndGg7IClcbiAgICAgICAgICBuLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gITAsIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgfSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCBcIm9ic2VydmVkXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHI7XG4gICAgICByZXR1cm4gKChyID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIubGVuZ3RoKSA+IDA7XG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCB0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCByKTtcbiAgfSwgdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHIpLCB0aGlzLl9pbm5lclN1YnNjcmliZShyKTtcbiAgfSwgdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gdGhpcywgbyA9IHRoaXMsIGkgPSBvLmhhc0Vycm9yLCBzID0gby5pc1N0b3BwZWQsIGMgPSBvLm9ic2VydmVycztcbiAgICByZXR1cm4gaSB8fCBzID8gWXIgOiAodGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgYy5wdXNoKHIpLCBuZXcgcnQoZnVuY3Rpb24oKSB7XG4gICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBmdChjLCByKTtcbiAgICB9KSk7XG4gIH0sIHQucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gdGhpcywgbyA9IG4uaGFzRXJyb3IsIGkgPSBuLnRocm93bkVycm9yLCBzID0gbi5pc1N0b3BwZWQ7XG4gICAgbyA/IHIuZXJyb3IoaSkgOiBzICYmIHIuY29tcGxldGUoKTtcbiAgfSwgdC5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSBuZXcgcGUoKTtcbiAgICByZXR1cm4gci5zb3VyY2UgPSB0aGlzLCByO1xuICB9LCB0LmNyZWF0ZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByZXR1cm4gbmV3IHNyKHIsIG4pO1xuICB9LCB0O1xufShwZSksIHNyID0gZnVuY3Rpb24oZSkge1xuICBfZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgdmFyIG8gPSBlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gby5kZXN0aW5hdGlvbiA9IHIsIG8uc291cmNlID0gbiwgbztcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiwgbztcbiAgICAobyA9IChuID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5uZXh0KSA9PT0gbnVsbCB8fCBvID09PSB2b2lkIDAgfHwgby5jYWxsKG4sIHIpO1xuICB9LCB0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiwgbztcbiAgICAobyA9IChuID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5lcnJvcikgPT09IG51bGwgfHwgbyA9PT0gdm9pZCAwIHx8IG8uY2FsbChuLCByKTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciwgbjtcbiAgICAobiA9IChyID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogci5jb21wbGV0ZSkgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwIHx8IG4uY2FsbChyKTtcbiAgfSwgdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiwgbztcbiAgICByZXR1cm4gKG8gPSAobiA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLnN1YnNjcmliZShyKSkgIT09IG51bGwgJiYgbyAhPT0gdm9pZCAwID8gbyA6IFlyO1xuICB9LCB0O1xufShaciksIFBhID0ge1xuICBub3c6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBEYXRlLm5vdygpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59LCBTYSA9IGZ1bmN0aW9uKGUpIHtcbiAgX2UodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbikge1xuICAgIHJldHVybiBlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIHQ7XG59KHJ0KSwgY3IgPSB7XG4gIHNldEludGVydmFsOiBmdW5jdGlvbihlLCB0KSB7XG4gICAgZm9yICh2YXIgciA9IFtdLCBuID0gMjsgbiA8IGFyZ3VtZW50cy5sZW5ndGg7IG4rKylcbiAgICAgIHJbbiAtIDJdID0gYXJndW1lbnRzW25dO1xuICAgIHJldHVybiBzZXRJbnRlcnZhbC5hcHBseSh2b2lkIDAsIG10KFtlLCB0XSwgcHQocikpKTtcbiAgfSxcbiAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiBjbGVhckludGVydmFsKGUpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59LCBrYSA9IGZ1bmN0aW9uKGUpIHtcbiAgX2UodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbikge1xuICAgIHZhciBvID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIG8uc2NoZWR1bGVyID0gciwgby53b3JrID0gbiwgby5wZW5kaW5nID0gITEsIG87XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24ociwgbikge1xuICAgIHZhciBvO1xuICAgIGlmIChuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgdGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB0aGlzLnN0YXRlID0gcjtcbiAgICB2YXIgaSA9IHRoaXMuaWQsIHMgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICByZXR1cm4gaSAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzLCBpLCBuKSksIHRoaXMucGVuZGluZyA9ICEwLCB0aGlzLmRlbGF5ID0gbiwgdGhpcy5pZCA9IChvID0gdGhpcy5pZCkgIT09IG51bGwgJiYgbyAhPT0gdm9pZCAwID8gbyA6IHRoaXMucmVxdWVzdEFzeW5jSWQocywgdGhpcy5pZCwgbiksIHRoaXM7XG4gIH0sIHQucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24ociwgbiwgbykge1xuICAgIHJldHVybiBvID09PSB2b2lkIDAgJiYgKG8gPSAwKSwgY3Iuc2V0SW50ZXJ2YWwoci5mbHVzaC5iaW5kKHIsIHRoaXMpLCBvKTtcbiAgfSwgdC5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbihyLCBuLCBvKSB7XG4gICAgaWYgKG8gPT09IHZvaWQgMCAmJiAobyA9IDApLCBvICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gbyAmJiB0aGlzLnBlbmRpbmcgPT09ICExKVxuICAgICAgcmV0dXJuIG47XG4gICAgbiAhPSBudWxsICYmIGNyLmNsZWFySW50ZXJ2YWwobik7XG4gIH0sIHQucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb25cIik7XG4gICAgdGhpcy5wZW5kaW5nID0gITE7XG4gICAgdmFyIG8gPSB0aGlzLl9leGVjdXRlKHIsIG4pO1xuICAgIGlmIChvKVxuICAgICAgcmV0dXJuIG87XG4gICAgdGhpcy5wZW5kaW5nID09PSAhMSAmJiB0aGlzLmlkICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKSk7XG4gIH0sIHQucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24ociwgbikge1xuICAgIHZhciBvID0gITEsIGk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMud29yayhyKTtcbiAgICB9IGNhdGNoIChzKSB7XG4gICAgICBvID0gITAsIGkgPSBzIHx8IG5ldyBFcnJvcihcIlNjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3JcIik7XG4gICAgfVxuICAgIGlmIChvKVxuICAgICAgcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSwgaTtcbiAgfSwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB2YXIgciA9IHRoaXMsIG4gPSByLmlkLCBvID0gci5zY2hlZHVsZXIsIGkgPSBvLmFjdGlvbnM7XG4gICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsLCB0aGlzLnBlbmRpbmcgPSAhMSwgZnQoaSwgdGhpcyksIG4gIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQobywgbiwgbnVsbCkpLCB0aGlzLmRlbGF5ID0gbnVsbCwgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH0sIHQ7XG59KFNhKSwgbHIgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0LCByKSB7XG4gICAgciA9PT0gdm9pZCAwICYmIChyID0gZS5ub3cpLCB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSB0LCB0aGlzLm5vdyA9IHI7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgIHJldHVybiByID09PSB2b2lkIDAgJiYgKHIgPSAwKSwgbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCB0KS5zY2hlZHVsZShuLCByKTtcbiAgfSwgZS5ub3cgPSBQYS5ub3csIGU7XG59KCksIEFhID0gZnVuY3Rpb24oZSkge1xuICBfZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgbiA9PT0gdm9pZCAwICYmIChuID0gbHIubm93KTtcbiAgICB2YXIgbyA9IGUuY2FsbCh0aGlzLCByLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBvLmFjdGlvbnMgPSBbXSwgby5fYWN0aXZlID0gITEsIG87XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gdGhpcy5hY3Rpb25zO1xuICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgIG4ucHVzaChyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG87XG4gICAgdGhpcy5fYWN0aXZlID0gITA7XG4gICAgZG9cbiAgICAgIGlmIChvID0gci5leGVjdXRlKHIuc3RhdGUsIHIuZGVsYXkpKVxuICAgICAgICBicmVhaztcbiAgICB3aGlsZSAociA9IG4uc2hpZnQoKSk7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9ICExLCBvKSB7XG4gICAgICBmb3IgKDsgciA9IG4uc2hpZnQoKTsgKVxuICAgICAgICByLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aHJvdyBvO1xuICAgIH1cbiAgfSwgdDtcbn0obHIpLCBJYSA9IG5ldyBBYShrYSksIFJhID0gZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgZSAhPSBcImZ1bmN0aW9uXCI7XG59O1xuZnVuY3Rpb24gVGEoZSkge1xuICByZXR1cm4geChlID09IG51bGwgPyB2b2lkIDAgOiBlLnRoZW4pO1xufVxuZnVuY3Rpb24gRmEoZSkge1xuICByZXR1cm4geChlWyR0XSk7XG59XG5mdW5jdGlvbiBOYShlKSB7XG4gIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiB4KGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKTtcbn1cbmZ1bmN0aW9uIE1hKGUpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgcHJvdmlkZWQgXCIgKyAoZSAhPT0gbnVsbCAmJiB0eXBlb2YgZSA9PSBcIm9iamVjdFwiID8gXCJhbiBpbnZhbGlkIG9iamVjdFwiIDogXCInXCIgKyBlICsgXCInXCIpICsgXCIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5cIik7XG59XG5mdW5jdGlvbiBEYSgpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgIT0gXCJmdW5jdGlvblwiIHx8ICFTeW1ib2wuaXRlcmF0b3IgPyBcIkBAaXRlcmF0b3JcIiA6IFN5bWJvbC5pdGVyYXRvcjtcbn1cbnZhciBPYSA9IERhKCk7XG5mdW5jdGlvbiBMYShlKSB7XG4gIHJldHVybiB4KGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbT2FdKTtcbn1cbmZ1bmN0aW9uIFVhKGUpIHtcbiAgcmV0dXJuIGxhKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIsIG4sIG8sIGk7XG4gICAgcmV0dXJuIEJyKHRoaXMsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHN3aXRjaCAocy5sYWJlbCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgciA9IGUuZ2V0UmVhZGVyKCksIHMubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcy50cnlzLnB1c2goWzEsICwgOSwgMTBdKSwgcy5sYWJlbCA9IDI7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXR1cm4gWzQsIEZlKHIucmVhZCgpKV07XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gbiA9IHMuc2VudCgpLCBvID0gbi52YWx1ZSwgaSA9IG4uZG9uZSwgaSA/IFs0LCBGZSh2b2lkIDApXSA6IFszLCA1XTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMiwgcy5zZW50KCldO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIFs0LCBGZShvKV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gWzQsIHMuc2VudCgpXTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHJldHVybiBzLnNlbnQoKSwgWzMsIDJdO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMF07XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICByZXR1cm4gci5yZWxlYXNlTG9jaygpLCBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBqYShlKSB7XG4gIHJldHVybiB4KGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZ2V0UmVhZGVyKTtcbn1cbmZ1bmN0aW9uIHhhKGUpIHtcbiAgaWYgKGUgaW5zdGFuY2VvZiBwZSlcbiAgICByZXR1cm4gZTtcbiAgaWYgKGUgIT0gbnVsbCkge1xuICAgIGlmIChGYShlKSlcbiAgICAgIHJldHVybiAkYShlKTtcbiAgICBpZiAoUmEoZSkpXG4gICAgICByZXR1cm4gVmEoZSk7XG4gICAgaWYgKFRhKGUpKVxuICAgICAgcmV0dXJuIEdhKGUpO1xuICAgIGlmIChOYShlKSlcbiAgICAgIHJldHVybiBRcihlKTtcbiAgICBpZiAoTGEoZSkpXG4gICAgICByZXR1cm4gemEoZSk7XG4gICAgaWYgKGphKGUpKVxuICAgICAgcmV0dXJuIHFhKGUpO1xuICB9XG4gIHRocm93IE1hKGUpO1xufVxuZnVuY3Rpb24gJGEoZSkge1xuICByZXR1cm4gbmV3IHBlKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IGVbJHRdKCk7XG4gICAgaWYgKHgoci5zdWJzY3JpYmUpKVxuICAgICAgcmV0dXJuIHIuc3Vic2NyaWJlKHQpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZVwiKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBWYShlKSB7XG4gIHJldHVybiBuZXcgcGUoZnVuY3Rpb24odCkge1xuICAgIGZvciAodmFyIHIgPSAwOyByIDwgZS5sZW5ndGggJiYgIXQuY2xvc2VkOyByKyspXG4gICAgICB0Lm5leHQoZVtyXSk7XG4gICAgdC5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEdhKGUpIHtcbiAgcmV0dXJuIG5ldyBwZShmdW5jdGlvbih0KSB7XG4gICAgZS50aGVuKGZ1bmN0aW9uKHIpIHtcbiAgICAgIHQuY2xvc2VkIHx8ICh0Lm5leHQociksIHQuY29tcGxldGUoKSk7XG4gICAgfSwgZnVuY3Rpb24ocikge1xuICAgICAgcmV0dXJuIHQuZXJyb3Iocik7XG4gICAgfSkudGhlbihudWxsLCBXcik7XG4gIH0pO1xufVxuZnVuY3Rpb24gemEoZSkge1xuICByZXR1cm4gbmV3IHBlKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciwgbjtcbiAgICB0cnkge1xuICAgICAgZm9yICh2YXIgbyA9IE1lKGUpLCBpID0gby5uZXh0KCk7ICFpLmRvbmU7IGkgPSBvLm5leHQoKSkge1xuICAgICAgICB2YXIgcyA9IGkudmFsdWU7XG4gICAgICAgIGlmICh0Lm5leHQocyksIHQuY2xvc2VkKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChjKSB7XG4gICAgICByID0geyBlcnJvcjogYyB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpICYmICFpLmRvbmUgJiYgKG4gPSBvLnJldHVybikgJiYgbi5jYWxsKG8pO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHIpIHRocm93IHIuZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHQuY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBRcihlKSB7XG4gIHJldHVybiBuZXcgcGUoZnVuY3Rpb24odCkge1xuICAgIEJhKGUsIHQpLmNhdGNoKGZ1bmN0aW9uKHIpIHtcbiAgICAgIHJldHVybiB0LmVycm9yKHIpO1xuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHFhKGUpIHtcbiAgcmV0dXJuIFFyKFVhKGUpKTtcbn1cbmZ1bmN0aW9uIEJhKGUsIHQpIHtcbiAgdmFyIHIsIG4sIG8sIGk7XG4gIHJldHVybiBjYSh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgdmFyIHMsIGM7XG4gICAgcmV0dXJuIEJyKHRoaXMsIGZ1bmN0aW9uKGwpIHtcbiAgICAgIHN3aXRjaCAobC5sYWJlbCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgbC50cnlzLnB1c2goWzAsIDUsIDYsIDExXSksIHIgPSB1YShlKSwgbC5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gWzQsIHIubmV4dCgpXTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmIChuID0gbC5zZW50KCksICEhbi5kb25lKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgIGlmIChzID0gbi52YWx1ZSwgdC5uZXh0KHMpLCB0LmNsb3NlZClcbiAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgbC5sYWJlbCA9IDM7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gWzMsIDFdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gYyA9IGwuc2VudCgpLCBvID0geyBlcnJvcjogYyB9LCBbMywgMTFdO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIGwudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSksIG4gJiYgIW4uZG9uZSAmJiAoaSA9IHIucmV0dXJuKSA/IFs0LCBpLmNhbGwocildIDogWzMsIDhdO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbC5zZW50KCksIGwubGFiZWwgPSA4O1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMF07XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBpZiAobykgdGhyb3cgby5lcnJvcjtcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgcmV0dXJuIHQuY29tcGxldGUoKSwgWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFlhKGUsIHQsIHIsIG4sIG8pIHtcbiAgbiA9PT0gdm9pZCAwICYmIChuID0gMCksIG8gPT09IHZvaWQgMCAmJiAobyA9ICExKTtcbiAgdmFyIGkgPSB0LnNjaGVkdWxlKGZ1bmN0aW9uKCkge1xuICAgIHIoKSwgbyA/IGUuYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgbikpIDogdGhpcy51bnN1YnNjcmliZSgpO1xuICB9LCBuKTtcbiAgaWYgKGUuYWRkKGkpLCAhbylcbiAgICByZXR1cm4gaTtcbn1cbmZ1bmN0aW9uIEhhKGUsIHQpIHtcbiAgdmFyIHIgPSB4KGUpID8gZSA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBlO1xuICB9LCBuID0gZnVuY3Rpb24obykge1xuICAgIHJldHVybiBvLmVycm9yKHIoKSk7XG4gIH07XG4gIHJldHVybiBuZXcgcGUobik7XG59XG52YXIgSmEgPSBodChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBlKHRoaXMpLCB0aGlzLm5hbWUgPSBcIkVtcHR5RXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZVwiO1xuICB9O1xufSk7XG5mdW5jdGlvbiBLYShlLCB0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLCBuKSB7XG4gICAgdmFyIG8gPSAhMSwgaTtcbiAgICBlLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBmdW5jdGlvbihzKSB7XG4gICAgICAgIGkgPSBzLCBvID0gITA7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IG4sXG4gICAgICBjb21wbGV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIG8gPyByKGkpIDogbihuZXcgSmEoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gV2EoZSkge1xuICByZXR1cm4gZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGUpO1xufVxudmFyIFphID0gaHQoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIHIgPT09IHZvaWQgMCAmJiAociA9IG51bGwpLCBlKHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSBcIlRpbWVvdXQgaGFzIG9jY3VycmVkXCIsIHRoaXMubmFtZSA9IFwiVGltZW91dEVycm9yXCIsIHRoaXMuaW5mbyA9IHI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIFFhKGUsIHQpIHtcbiAgdmFyIHIgPSBXYShlKSA/IHsgZmlyc3Q6IGUgfSA6IHR5cGVvZiBlID09IFwibnVtYmVyXCIgPyB7IGVhY2g6IGUgfSA6IGUsIG4gPSByLmZpcnN0LCBvID0gci5lYWNoLCBpID0gci53aXRoLCBzID0gaSA9PT0gdm9pZCAwID8gWGEgOiBpLCBjID0gci5zY2hlZHVsZXIsIGwgPSBjID09PSB2b2lkIDAgPyBJYSA6IGMsIHUgPSByLm1ldGEsIGQgPSB1ID09PSB2b2lkIDAgPyBudWxsIDogdTtcbiAgaWYgKG4gPT0gbnVsbCAmJiBvID09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIHRpbWVvdXQgcHJvdmlkZWQuXCIpO1xuICByZXR1cm4gdmEoZnVuY3Rpb24oeSwgcCkge1xuICAgIHZhciBtLCBfLCBoID0gbnVsbCwgdiA9IDAsIGIgPSBmdW5jdGlvbihFKSB7XG4gICAgICBfID0gWWEocCwgbCwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbS51bnN1YnNjcmliZSgpLCB4YShzKHtcbiAgICAgICAgICAgIG1ldGE6IGQsXG4gICAgICAgICAgICBsYXN0VmFsdWU6IGgsXG4gICAgICAgICAgICBzZWVuOiB2XG4gICAgICAgICAgfSkpLnN1YnNjcmliZShwKTtcbiAgICAgICAgfSBjYXRjaCAoQykge1xuICAgICAgICAgIHAuZXJyb3IoQyk7XG4gICAgICAgIH1cbiAgICAgIH0sIEUpO1xuICAgIH07XG4gICAgbSA9IHkuc3Vic2NyaWJlKGJhKHAsIGZ1bmN0aW9uKEUpIHtcbiAgICAgIF8gPT0gbnVsbCB8fCBfLnVuc3Vic2NyaWJlKCksIHYrKywgcC5uZXh0KGggPSBFKSwgbyA+IDAgJiYgYihvKTtcbiAgICB9LCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgICBfICE9IG51bGwgJiYgXy5jbG9zZWQgfHwgXyA9PSBudWxsIHx8IF8udW5zdWJzY3JpYmUoKSwgaCA9IG51bGw7XG4gICAgfSkpLCAhdiAmJiBiKG4gIT0gbnVsbCA/IHR5cGVvZiBuID09IFwibnVtYmVyXCIgPyBuIDogK24gLSBsLm5vdygpIDogbyk7XG4gIH0pO1xufVxuZnVuY3Rpb24gWGEoZSkge1xuICB0aHJvdyBuZXcgWmEoZSk7XG59XG5jbGFzcyBZZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiAhMCwgbG9hZGVkVmFsdWU6IHQgfSwgdGhpcy5fc3ViamVjdC5uZXh0KHQpLCB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfSwgdGhpcy50aHJvdyA9ICh0LCByKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6ICExLCBlcnJvcjogdCwgZXJyTXNnOiByIH0sIHRoaXMuX3N1YmplY3QuZXJyb3IodCk7XG4gICAgfSwgdGhpcy5nZXRWYWx1ZUlmTG9hZGVkRWxzZSA9ICh0KSA9PiB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIgPyB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlIDogdCwgdGhpcy5zdWJzY3JpYmUgPSAodCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiICYmIHQodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCByID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgdCh0aGlzLl9jdXJyZW50KSwgci51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgdCh0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgdGhpcy53YWl0Rm9yTG9hZCA9ICh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImluaXRpYWxcIiAmJiBndCh0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHIgPSB7XG4gICAgICAgIGZpcnN0OiB0LnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IEhhKCgpID0+IG5ldyBFcnJvcih0LnRpbWVvdXRFcnJNc2cpKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBLYSh0aGlzLl9zdWJqZWN0LnBpcGUoUWEocikpKTtcbiAgICB9LCB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiaW5pdGlhbFwiLCBpc1N1Y2Nlc3M6ICExIH0sIHRoaXMuX3N1YmplY3QgPSBuZXcgWnIoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuY29uc3QgdXIgPSB6LmVudW0oW1wiZGV2XCIsIFwic3RnXCIsIFwicHJvZFwiXSksIGVpID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59LCB0aSA9IChlKSA9PiBlaVtlXSwgU3QgPSB7fSwgWHIgPSBhc3luYyAoZSkgPT4ge1xuICBpZiAoU3RbZV0pXG4gICAgcmV0dXJuIFN0W2VdO1xuICB0cnkge1xuICAgIGNvbnN0IHQgPSBhd2FpdCBmZXRjaChuZXcgVVJMKFwiL2hlYWx0aC9lbnZpcm9ubWVudFwiLCBlKSkudGhlbigobikgPT4gbi5qc29uKCkpLCByID0gdXIucGFyc2UodC5lbnZpcm9ubWVudCk7XG4gICAgcmV0dXJuIFN0W2VdID0gciwgcjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVyLlZhbHVlcy5wcm9kO1xuICB9XG59O1xuZnVuY3Rpb24gZ3QoZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke2V9YCk7XG59XG5jb25zdCB3dCA9IChlLCB0KSA9PiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbcl0pID0+ICF0LmluY2x1ZGVzKHIpKSksIFUgPSAoKSA9PiB7XG4gIGlmICghKHR5cGVvZiB3aW5kb3cgPiBcInVcIikpXG4gICAgcmV0dXJuIHdpbmRvdztcbn0sIER0ID0gbmV3IFllKCksIGRyID0gXCJvcF9tZXRyaWNzX3F1ZXVlXCIsIHJpID0gMywgbmkgPSAzLCBvaSA9IDFlMywgeyBsb2dfXzogc3QgfSA9IFMoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgYWkge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB2YXIgdCwgcjtcbiAgICB0aGlzLnF1ZXVlID0gW10sIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITEsIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCwgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSAwLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIHN0KFwiTmV0d29yayBvZmZsaW5lLCBtZXRyaWNzIHdpbGwgYmUgcXVldWVkXCIpLCB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH0sIHRoaXMub25saW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBzdChcIk5ldHdvcmsgb25saW5lLCBwcm9jZXNzaW5nIG1ldHJpY3MgcXVldWVcIiksIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfSwgdGhpcy5sb2FkUXVldWVGcm9tU3RvcmFnZSgpLCAodCA9IFUoKSkgPT0gbnVsbCB8fCB0LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKSwgKHIgPSBVKCkpID09IG51bGwgfHwgci5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICB9XG4gIGFkZEV2ZW50KHQsIHIsIG4pIHtcbiAgICBjb25zdCBvID0ge1xuICAgICAgZXZlbnROYW1lOiB0LFxuICAgICAgcHJvcGVydGllczogciB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiBuIHx8IHt9LFxuICAgICAgbm9uY2U6IHY0KCksXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBkYXRldGltZTogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLFxuICAgICAgYXR0ZW1wdENvdW50OiAwLFxuICAgICAgdGltZURpZmZGcm9tUHJldmlvdXNFdmVudDogdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPyBEYXRlLm5vdygpIC0gdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgOiAwXG4gICAgfTtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IG8udGltZXN0YW1wLCB0aGlzLnF1ZXVlLnB1c2gobyksIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCksIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB2YXIgdCwgcjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbiA9IChyID0gKHQgPSBVKCkpID09IG51bGwgPyB2b2lkIDAgOiB0LmxvY2FsU3RvcmFnZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZ2V0SXRlbShkcik7XG4gICAgICBuICYmICh0aGlzLnF1ZXVlID0gSlNPTi5wYXJzZShuKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLnF1ZXVlID0gW10sIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgfVxuICB9XG4gIHNhdmVRdWV1ZVRvU3RvcmFnZSgpIHtcbiAgICB2YXIgdDtcbiAgICAodCA9IFUoKSkgPT0gbnVsbCB8fCB0LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGRyLCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXVlKSk7XG4gIH1cbiAgc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgY29uc3QgdCA9IFUoKTtcbiAgICB0ICYmIG5hdmlnYXRvci5vbkxpbmUgJiYgIXRoaXMucHJvY2Vzc2luZ1F1ZXVlICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiAhdGhpcy5iYXRjaFRpbWVvdXQgJiYgKHRoaXMuYmF0Y2hUaW1lb3V0ID0gdC5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCwgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9LCBvaSkpO1xuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICB2YXIgdDtcbiAgICB0aGlzLmJhdGNoVGltZW91dCAmJiAoKHQgPSBVKCkpID09IG51bGwgfHwgdC5jbGVhclRpbWVvdXQodGhpcy5iYXRjaFRpbWVvdXQpLCB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwpLCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICExO1xuICB9XG4gIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICAhbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCB8fCAodGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMCwgdGhpcy5zZW5kQmF0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITEsIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfSkpO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCB0ID0gRHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2Uodm9pZCAwKTtcbiAgICBpZiAoIXQpIHtcbiAgICAgIHN0KFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHIgPSB0aGlzLnF1ZXVlLnNsaWNlKDAsIG5pKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbiA9IHtcbiAgICAgICAgZXZlbnRzOiByLm1hcCgoYykgPT4gKHtcbiAgICAgICAgICBldmVudF9uYW1lOiBjLmV2ZW50TmFtZSxcbiAgICAgICAgICBkZXZpY2VfdG9rZW46IHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAuLi50LFxuICAgICAgICAgICAgLi4uYy5jb250ZXh0UHJvcGVydGllc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgbm9uY2U6IGMubm9uY2UsXG4gICAgICAgICAgICBkYXRldGltZTogYy5kYXRldGltZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogYy50aW1lc3RhbXAsXG4gICAgICAgICAgICB0aW1lX2RpZmZfZnJvbV9wcmV2aW91c19ldmVudDogYy50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgY2hlY2tvdXRfc2VjdXJlX3Rva2VuOiB0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICAuLi5jLnByb3BlcnRpZXNcbiAgICAgICAgICB9XG4gICAgICAgIH0pKVxuICAgICAgfSwgbyA9IHRpKHQuZW52aXJvbm1lbnQpLCBpID0gbmV3IFVSTChcIi9tZXRyaWNzL3B1YmxpYy9jYXB0dXJlXCIsIG8pO1xuICAgICAgKGF3YWl0IGZldGNoKGkudG9TdHJpbmcoKSwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkobilcbiAgICAgIH0pKS5vayA/ICh0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShyLmxlbmd0aCksIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCkpIDogdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChyKTtcbiAgICB9IGNhdGNoIChuKSB7XG4gICAgICBzdChcIkVycm9yIHNlbmRpbmcgbWV0cmljcyBiYXRjaDpcIiwgbiksIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2gocik7XG4gICAgfVxuICB9XG4gIGhhbmRsZUZhaWxlZEJhdGNoKHQpIHtcbiAgICB0LmZvckVhY2goKG4pID0+IHtcbiAgICAgIG4uYXR0ZW1wdENvdW50Kys7XG4gICAgfSk7XG4gICAgY29uc3QgciA9IHQuZmlsdGVyKChuKSA9PiBuLmF0dGVtcHRDb3VudCA8IHJpKTtcbiAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZSh0Lmxlbmd0aCksIHRoaXMucXVldWUgPSBbLi4uciwgLi4udGhpcy5xdWV1ZV0sIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gIH1cbiAgY2xlYW51cCgpIHtcbiAgICB2YXIgdCwgcjtcbiAgICAodCA9IFUoKSkgPT0gbnVsbCB8fCB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKSwgKHIgPSBVKCkpID09IG51bGwgfHwgci5yZW1vdmVFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpLCB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG59XG5jb25zdCBWdCA9IG5ldyBhaSgpLCBnID0gKGUsIHQsIHIpID0+IHtcbiAgVnQuYWRkRXZlbnQoZSwgdCwgcik7XG59LCBpaSA9ICgpID0+IHtcbiAgVnQucHJvY2Vzc1F1ZXVlKCk7XG59LCBlbiA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBaKGUucmVhc29uKTtcbiAgZyhcInVuaGFuZGxlZF9yZWplY3Rpb25fZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IHQsXG4gICAgZXJyb3JfbmFtZTogZS5yZWFzb25cbiAgfSk7XG59LCB0biA9IChlKSA9PiB7XG4gIHZhciByLCBuO1xuICBjb25zdCB0ID0gWihlLmVycm9yKTtcbiAgZyhcInVuY2F1Z2h0X2Vycm9yXCIsIHtcbiAgICBlcnJvcl9tZXNzYWdlOiB0LFxuICAgIGVycm9yX25hbWU6IChyID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHIubmFtZSxcbiAgICBlcnJvcl9zdGFjazogKG4gPSBlLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogbi5zdGFjayxcbiAgICBmaWxlX25hbWU6IGUuZmlsZW5hbWUsXG4gICAgbGluZV9udW1iZXI6IGUubGluZW5vLFxuICAgIGNvbHVtbl9udW1iZXI6IGUuY29sbm9cbiAgfSk7XG59LCBzaSA9ICgpID0+IHtcbiAgdmFyIGUsIHQ7XG4gIChlID0gVSgpKSA9PSBudWxsIHx8IGUuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHRuKSwgKHQgPSBVKCkpID09IG51bGwgfHwgdC5hZGRFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIGVuKTtcbn0sIGNpID0gKCkgPT4ge1xuICB2YXIgZSwgdDtcbiAgKGUgPSBVKCkpID09IG51bGwgfHwgZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgdG4pLCAodCA9IFUoKSkgPT0gbnVsbCB8fCB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgZW4pO1xufTtcbnZhciBScjtcbihSciA9IFUoKSkgPT0gbnVsbCB8fCBSci5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICgpID0+IHtcbiAgVnQucHJvY2Vzc1F1ZXVlKCk7XG59KTtcbmNvbnN0IGxpID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSksIHVpID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbn0pLCBkaSA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn0sIHZ0ID0gYXN5bmMgKGUpID0+IHtcbiAgZm9yIChsZXQgciA9IDA7IHIgPCAxMDsgcisrKVxuICAgIHByKCkgfHwgYXdhaXQgYnQoNTAwKTtcbiAgaWYgKCFwcigpKVxuICAgIHRocm93IGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIiksIG5ldyBFcnJvcihcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICByZXR1cm4gbmV3IFN0cmlwZShlKTtcbn0sIHBpID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IGF3YWl0IHZ0KGUpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiByLmVsZW1lbnRzKHQpLFxuICAgIHN0cmlwZTogclxuICB9O1xufSwgbWkgPSBhc3luYyAoZSwgdCwgciwgbiwgbykgPT4ge1xuICBjb25zdCBpID0gYXdhaXQgdnQoZSksIHMgPSBkaVtyLnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgcmV0dXJuIGkucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBzLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiB0LFxuICAgICAgcGVuZGluZzogblxuICAgIH0sXG4gICAgLy8gcmVxdWVzdFNoaXBwaW5nOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllck5hbWU6ICEwLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiAhMCxcbiAgICBkaXNhYmxlV2FsbGV0czogW11cbiAgfSk7XG59LCBidCA9IChlKSA9PiBuZXcgUHJvbWlzZSgodCkgPT4ge1xuICBzZXRUaW1lb3V0KHQsIGUpO1xufSksIHByID0gKCkgPT4gXCJTdHJpcGVcIiBpbiB3aW5kb3csIGZpID0gYXN5bmMgKGUpID0+IG5ldyBQcm9taXNlKCh0LCByKSA9PiB7XG4gIHRyeSB7XG4gICAgZS5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKG4pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgbiksIHQobik7XG4gICAgfSksIGUub24oXCJ0b2tlblwiLCBhc3luYyAobikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgbik7XG4gICAgfSksIGUub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgcihuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikpO1xuICAgIH0pO1xuICB9IGNhdGNoIChuKSB7XG4gICAgcihuKTtcbiAgfVxufSksIHlpID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgaWYgKCFlLnN0cmlwZV9wayB8fCAhZS5jbGllbnRfc2VjcmV0KVxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gIGNvbnN0IG4gPSBhd2FpdCAoYXdhaXQgdnQoZS5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKGUuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiB0LnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChuLmVycm9yKVxuICAgIHRocm93IHQuY29tcGxldGUoXCJmYWlsXCIpLCBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke24uZXJyb3IubWVzc2FnZSA/PyBcInVua25vd25cIn1gKTtcbiAgcmV0dXJuIHQuY29tcGxldGUoXCJzdWNjZXNzXCIpLCBuO1xufSwgX2kgPSBhc3luYyAoZSkgPT4ge1xuICB2YXIgbywgaSwgcywgYztcbiAgY29uc3QgciA9IGF3YWl0IChhd2FpdCB2dChlLnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAoZS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IGUuc3RyaXBlX3BtX2lkXG4gIH0pLCBuID0gKG8gPSByLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogby5zdGF0dXM7XG4gIGlmIChuID09PSBcInN1Y2NlZWRlZFwiKVxuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gQ09ORklSTUlORyBQTTpcIiwgZS5zdHJpcGVfcG1faWQpLCBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCByLnNldHVwSW50ZW50KTtcbiAgZWxzZSB0aHJvdyBuID09PSBcImNhbmNlbGVkXCIgPyBuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikgOiBuZXcgRXJyb3IoXG4gICAgYCR7KChpID0gci5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGkubWVzc2FnZSkgPz8gKChjID0gKHMgPSByLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogcy5sYXN0X3NldHVwX2Vycm9yKSA9PSBudWxsID8gdm9pZCAwIDogYy5tZXNzYWdlKSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICk7XG59O1xudmFyIGhpID0gdHlwZW9mIGdsb2JhbFRoaXMgPT0gXCJvYmplY3RcIiA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygc2VsZiA9PSBcIm9iamVjdFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgPT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgPT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6IHt9LCBFZSA9IFwiMS45LjBcIiwgbXIgPSAvXihcXGQrKVxcLihcXGQrKVxcLihcXGQrKSgtKC4rKSk/JC87XG5mdW5jdGlvbiBnaShlKSB7XG4gIHZhciB0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoW2VdKSwgciA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIG4gPSBlLm1hdGNoKG1yKTtcbiAgaWYgKCFuKVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9O1xuICB2YXIgbyA9IHtcbiAgICBtYWpvcjogK25bMV0sXG4gICAgbWlub3I6ICtuWzJdLFxuICAgIHBhdGNoOiArblszXSxcbiAgICBwcmVyZWxlYXNlOiBuWzRdXG4gIH07XG4gIGlmIChvLnByZXJlbGVhc2UgIT0gbnVsbClcbiAgICByZXR1cm4gZnVuY3Rpb24obCkge1xuICAgICAgcmV0dXJuIGwgPT09IGU7XG4gICAgfTtcbiAgZnVuY3Rpb24gaShjKSB7XG4gICAgcmV0dXJuIHIuYWRkKGMpLCAhMTtcbiAgfVxuICBmdW5jdGlvbiBzKGMpIHtcbiAgICByZXR1cm4gdC5hZGQoYyksICEwO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihsKSB7XG4gICAgaWYgKHQuaGFzKGwpKVxuICAgICAgcmV0dXJuICEwO1xuICAgIGlmIChyLmhhcyhsKSlcbiAgICAgIHJldHVybiAhMTtcbiAgICB2YXIgdSA9IGwubWF0Y2gobXIpO1xuICAgIGlmICghdSlcbiAgICAgIHJldHVybiBpKGwpO1xuICAgIHZhciBkID0ge1xuICAgICAgbWFqb3I6ICt1WzFdLFxuICAgICAgbWlub3I6ICt1WzJdLFxuICAgICAgcGF0Y2g6ICt1WzNdLFxuICAgICAgcHJlcmVsZWFzZTogdVs0XVxuICAgIH07XG4gICAgcmV0dXJuIGQucHJlcmVsZWFzZSAhPSBudWxsIHx8IG8ubWFqb3IgIT09IGQubWFqb3IgPyBpKGwpIDogby5tYWpvciA9PT0gMCA/IG8ubWlub3IgPT09IGQubWlub3IgJiYgby5wYXRjaCA8PSBkLnBhdGNoID8gcyhsKSA6IGkobCkgOiBvLm1pbm9yIDw9IGQubWlub3IgPyBzKGwpIDogaShsKTtcbiAgfTtcbn1cbnZhciB3aSA9IGdpKEVlKSwgdmkgPSBFZS5zcGxpdChcIi5cIilbMF0sIFdlID0gU3ltYm9sLmZvcihcIm9wZW50ZWxlbWV0cnkuanMuYXBpLlwiICsgdmkpLCBaZSA9IGhpO1xuZnVuY3Rpb24gR3QoZSwgdCwgciwgbikge1xuICB2YXIgbztcbiAgbiA9PT0gdm9pZCAwICYmIChuID0gITEpO1xuICB2YXIgaSA9IFplW1dlXSA9IChvID0gWmVbV2VdKSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDoge1xuICAgIHZlcnNpb246IEVlXG4gIH07XG4gIGlmICghbiAmJiBpW2VdKSB7XG4gICAgdmFyIHMgPSBuZXcgRXJyb3IoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IEF0dGVtcHRlZCBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uIG9mIEFQSTogXCIgKyBlKTtcbiAgICByZXR1cm4gci5lcnJvcihzLnN0YWNrIHx8IHMubWVzc2FnZSksICExO1xuICB9XG4gIGlmIChpLnZlcnNpb24gIT09IEVlKSB7XG4gICAgdmFyIHMgPSBuZXcgRXJyb3IoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdHJhdGlvbiBvZiB2ZXJzaW9uIHZcIiArIGkudmVyc2lvbiArIFwiIGZvciBcIiArIGUgKyBcIiBkb2VzIG5vdCBtYXRjaCBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgQVBJIHZcIiArIEVlKTtcbiAgICByZXR1cm4gci5lcnJvcihzLnN0YWNrIHx8IHMubWVzc2FnZSksICExO1xuICB9XG4gIHJldHVybiBpW2VdID0gdCwgci5kZWJ1ZyhcIkBvcGVudGVsZW1ldHJ5L2FwaTogUmVnaXN0ZXJlZCBhIGdsb2JhbCBmb3IgXCIgKyBlICsgXCIgdlwiICsgRWUgKyBcIi5cIiksICEwO1xufVxuZnVuY3Rpb24gUWUoZSkge1xuICB2YXIgdCwgciwgbiA9ICh0ID0gWmVbV2VdKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LnZlcnNpb247XG4gIGlmICghKCFuIHx8ICF3aShuKSkpXG4gICAgcmV0dXJuIChyID0gWmVbV2VdKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByW2VdO1xufVxuZnVuY3Rpb24genQoZSwgdCkge1xuICB0LmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBVbnJlZ2lzdGVyaW5nIGEgZ2xvYmFsIGZvciBcIiArIGUgKyBcIiB2XCIgKyBFZSArIFwiLlwiKTtcbiAgdmFyIHIgPSBaZVtXZV07XG4gIHIgJiYgZGVsZXRlIHJbZV07XG59XG52YXIgYmkgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgbywgaSA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEobyA9IG4ubmV4dCgpKS5kb25lOyApIGkucHVzaChvLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIHMgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG8gJiYgIW8uZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTtcbn0sIEVpID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCwgaTsgbiA8IG87IG4rKylcbiAgICAoaSB8fCAhKG4gaW4gdCkpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBpW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIENpID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdGhpcy5fbmFtZXNwYWNlID0gdC5uYW1lc3BhY2UgfHwgXCJEaWFnQ29tcG9uZW50TG9nZ2VyXCI7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5kZWJ1ZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiBWZShcImRlYnVnXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZS5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gVmUoXCJlcnJvclwiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLmluZm8gPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gVmUoXCJpbmZvXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZS5wcm90b3R5cGUud2FybiA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiBWZShcIndhcm5cIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS52ZXJib3NlID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIFZlKFwidmVyYm9zZVwiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGU7XG4gIH0oKVxuKTtcbmZ1bmN0aW9uIFZlKGUsIHQsIHIpIHtcbiAgdmFyIG4gPSBRZShcImRpYWdcIik7XG4gIGlmIChuKVxuICAgIHJldHVybiByLnVuc2hpZnQodCksIG5bZV0uYXBwbHkobiwgRWkoW10sIGJpKHIpLCAhMSkpO1xufVxudmFyIEs7XG4oZnVuY3Rpb24oZSkge1xuICBlW2UuTk9ORSA9IDBdID0gXCJOT05FXCIsIGVbZS5FUlJPUiA9IDMwXSA9IFwiRVJST1JcIiwgZVtlLldBUk4gPSA1MF0gPSBcIldBUk5cIiwgZVtlLklORk8gPSA2MF0gPSBcIklORk9cIiwgZVtlLkRFQlVHID0gNzBdID0gXCJERUJVR1wiLCBlW2UuVkVSQk9TRSA9IDgwXSA9IFwiVkVSQk9TRVwiLCBlW2UuQUxMID0gOTk5OV0gPSBcIkFMTFwiO1xufSkoSyB8fCAoSyA9IHt9KSk7XG5mdW5jdGlvbiBQaShlLCB0KSB7XG4gIGUgPCBLLk5PTkUgPyBlID0gSy5OT05FIDogZSA+IEsuQUxMICYmIChlID0gSy5BTEwpLCB0ID0gdCB8fCB7fTtcbiAgZnVuY3Rpb24gcihuLCBvKSB7XG4gICAgdmFyIGkgPSB0W25dO1xuICAgIHJldHVybiB0eXBlb2YgaSA9PSBcImZ1bmN0aW9uXCIgJiYgZSA+PSBvID8gaS5iaW5kKHQpIDogZnVuY3Rpb24oKSB7XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGVycm9yOiByKFwiZXJyb3JcIiwgSy5FUlJPUiksXG4gICAgd2FybjogcihcIndhcm5cIiwgSy5XQVJOKSxcbiAgICBpbmZvOiByKFwiaW5mb1wiLCBLLklORk8pLFxuICAgIGRlYnVnOiByKFwiZGVidWdcIiwgSy5ERUJVRyksXG4gICAgdmVyYm9zZTogcihcInZlcmJvc2VcIiwgSy5WRVJCT1NFKVxuICB9O1xufVxudmFyIFNpID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIG8sIGkgPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKG8gPSBuLm5leHQoKSkuZG9uZTsgKSBpLnB1c2goby52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBzID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBvICYmICFvLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59LCBraSA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBvID0gdC5sZW5ndGgsIGk7IG4gPCBvOyBuKyspXG4gICAgKGkgfHwgIShuIGluIHQpKSAmJiAoaSB8fCAoaSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgaVtuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQoaSB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBBaSA9IFwiZGlhZ1wiLCB5dCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgICAgZnVuY3Rpb24gdChvKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gW10sIHMgPSAwOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKVxuICAgICAgICAgICAgaVtzXSA9IGFyZ3VtZW50c1tzXTtcbiAgICAgICAgICB2YXIgYyA9IFFlKFwiZGlhZ1wiKTtcbiAgICAgICAgICBpZiAoYylcbiAgICAgICAgICAgIHJldHVybiBjW29dLmFwcGx5KGMsIGtpKFtdLCBTaShpKSwgITEpKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHZhciByID0gdGhpcywgbiA9IGZ1bmN0aW9uKG8sIGkpIHtcbiAgICAgICAgdmFyIHMsIGMsIGw7XG4gICAgICAgIGlmIChpID09PSB2b2lkIDAgJiYgKGkgPSB7IGxvZ0xldmVsOiBLLklORk8gfSksIG8gPT09IHIpIHtcbiAgICAgICAgICB2YXIgdSA9IG5ldyBFcnJvcihcIkNhbm5vdCB1c2UgZGlhZyBhcyB0aGUgbG9nZ2VyIGZvciBpdHNlbGYuIFBsZWFzZSB1c2UgYSBEaWFnTG9nZ2VyIGltcGxlbWVudGF0aW9uIGxpa2UgQ29uc29sZURpYWdMb2dnZXIgb3IgYSBjdXN0b20gaW1wbGVtZW50YXRpb25cIik7XG4gICAgICAgICAgcmV0dXJuIHIuZXJyb3IoKHMgPSB1LnN0YWNrKSAhPT0gbnVsbCAmJiBzICE9PSB2b2lkIDAgPyBzIDogdS5tZXNzYWdlKSwgITE7XG4gICAgICAgIH1cbiAgICAgICAgdHlwZW9mIGkgPT0gXCJudW1iZXJcIiAmJiAoaSA9IHtcbiAgICAgICAgICBsb2dMZXZlbDogaVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGQgPSBRZShcImRpYWdcIiksIHkgPSBQaSgoYyA9IGkubG9nTGV2ZWwpICE9PSBudWxsICYmIGMgIT09IHZvaWQgMCA/IGMgOiBLLklORk8sIG8pO1xuICAgICAgICBpZiAoZCAmJiAhaS5zdXBwcmVzc092ZXJyaWRlTWVzc2FnZSkge1xuICAgICAgICAgIHZhciBwID0gKGwgPSBuZXcgRXJyb3IoKS5zdGFjaykgIT09IG51bGwgJiYgbCAhPT0gdm9pZCAwID8gbCA6IFwiPGZhaWxlZCB0byBnZW5lcmF0ZSBzdGFja3RyYWNlPlwiO1xuICAgICAgICAgIGQud2FybihcIkN1cnJlbnQgbG9nZ2VyIHdpbGwgYmUgb3ZlcndyaXR0ZW4gZnJvbSBcIiArIHApLCB5Lndhcm4oXCJDdXJyZW50IGxvZ2dlciB3aWxsIG92ZXJ3cml0ZSBvbmUgYWxyZWFkeSByZWdpc3RlcmVkIGZyb20gXCIgKyBwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gR3QoXCJkaWFnXCIsIHksIHIsICEwKTtcbiAgICAgIH07XG4gICAgICByLnNldExvZ2dlciA9IG4sIHIuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB6dChBaSwgcik7XG4gICAgICB9LCByLmNyZWF0ZUNvbXBvbmVudExvZ2dlciA9IGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDaShvKTtcbiAgICAgIH0sIHIudmVyYm9zZSA9IHQoXCJ2ZXJib3NlXCIpLCByLmRlYnVnID0gdChcImRlYnVnXCIpLCByLmluZm8gPSB0KFwiaW5mb1wiKSwgci53YXJuID0gdChcIndhcm5cIiksIHIuZXJyb3IgPSB0KFwiZXJyb3JcIik7XG4gICAgfVxuICAgIHJldHVybiBlLmluc3RhbmNlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IGUoKSksIHRoaXMuX2luc3RhbmNlO1xuICAgIH0sIGU7XG4gIH0oKVxuKTtcbmZ1bmN0aW9uIElpKGUpIHtcbiAgcmV0dXJuIFN5bWJvbC5mb3IoZSk7XG59XG52YXIgUmkgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdmFyIHIgPSB0aGlzO1xuICAgICAgci5fY3VycmVudENvbnRleHQgPSB0ID8gbmV3IE1hcCh0KSA6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksIHIuZ2V0VmFsdWUgPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIHJldHVybiByLl9jdXJyZW50Q29udGV4dC5nZXQobik7XG4gICAgICB9LCByLnNldFZhbHVlID0gZnVuY3Rpb24obiwgbykge1xuICAgICAgICB2YXIgaSA9IG5ldyBlKHIuX2N1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIGkuX2N1cnJlbnRDb250ZXh0LnNldChuLCBvKSwgaTtcbiAgICAgIH0sIHIuZGVsZXRlVmFsdWUgPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIHZhciBvID0gbmV3IGUoci5fY3VycmVudENvbnRleHQpO1xuICAgICAgICByZXR1cm4gby5fY3VycmVudENvbnRleHQuZGVsZXRlKG4pLCBvO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGU7XG4gIH0oKVxuKSwgVGkgPSBuZXcgUmkoKSwgRmkgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgbywgaSA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEobyA9IG4ubmV4dCgpKS5kb25lOyApIGkucHVzaChvLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIHMgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG8gJiYgIW8uZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTtcbn0sIE5pID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCwgaTsgbiA8IG87IG4rKylcbiAgICAoaSB8fCAhKG4gaW4gdCkpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBpW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIE1pID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5hY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBUaTtcbiAgICB9LCBlLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgZm9yICh2YXIgbyA9IFtdLCBpID0gMzsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAgb1tpIC0gM10gPSBhcmd1bWVudHNbaV07XG4gICAgICByZXR1cm4gci5jYWxsLmFwcGx5KHIsIE5pKFtuXSwgRmkobyksICExKSk7XG4gICAgfSwgZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiByO1xuICAgIH0sIGUucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBEaSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBvLCBpID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShvID0gbi5uZXh0KCkpLmRvbmU7ICkgaS5wdXNoKG8udmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgbyAmJiAhby5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufSwgT2kgPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgbyA9IHQubGVuZ3RoLCBpOyBuIDwgbzsgbisrKVxuICAgIChpIHx8ICEobiBpbiB0KSkgJiYgKGkgfHwgKGkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIGlbbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KGkgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwga3QgPSBcImNvbnRleHRcIiwgTGkgPSBuZXcgTWkoKSwgcXQgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgZSgpKSwgdGhpcy5faW5zdGFuY2U7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0R2xvYmFsQ29udGV4dE1hbmFnZXIgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gR3Qoa3QsIHQsIHl0Lmluc3RhbmNlKCkpO1xuICAgIH0sIGUucHJvdG90eXBlLmFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYWN0aXZlKCk7XG4gICAgfSwgZS5wcm90b3R5cGUud2l0aCA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIGZvciAodmFyIG8sIGkgPSBbXSwgcyA9IDM7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspXG4gICAgICAgIGlbcyAtIDNdID0gYXJndW1lbnRzW3NdO1xuICAgICAgcmV0dXJuIChvID0gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKSkud2l0aC5hcHBseShvLCBPaShbdCwgciwgbl0sIERpKGkpLCAhMSkpO1xuICAgIH0sIGUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5iaW5kKHQsIHIpO1xuICAgIH0sIGUucHJvdG90eXBlLl9nZXRDb250ZXh0TWFuYWdlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFFlKGt0KSB8fCBMaTtcbiAgICB9LCBlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmRpc2FibGUoKSwgenQoa3QsIHl0Lmluc3RhbmNlKCkpO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgT3Q7XG4oZnVuY3Rpb24oZSkge1xuICBlW2UuTk9ORSA9IDBdID0gXCJOT05FXCIsIGVbZS5TQU1QTEVEID0gMV0gPSBcIlNBTVBMRURcIjtcbn0pKE90IHx8IChPdCA9IHt9KSk7XG52YXIgcm4gPSBcIjAwMDAwMDAwMDAwMDAwMDBcIiwgbm4gPSBcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsIFVpID0ge1xuICB0cmFjZUlkOiBubixcbiAgc3BhbklkOiBybixcbiAgdHJhY2VGbGFnczogT3QuTk9ORVxufSwgSGUgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0KSB7XG4gICAgICB0ID09PSB2b2lkIDAgJiYgKHQgPSBVaSksIHRoaXMuX3NwYW5Db250ZXh0ID0gdDtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLnNwYW5Db250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3BhbkNvbnRleHQ7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmFkZEV2ZW50ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkTGluayA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmFkZExpbmtzID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0U3RhdHVzID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUudXBkYXRlTmFtZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB9LCBlLnByb3RvdHlwZS5pc1JlY29yZGluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICExO1xuICAgIH0sIGUucHJvdG90eXBlLnJlY29yZEV4Y2VwdGlvbiA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB9LCBlO1xuICB9KClcbiksIEJ0ID0gSWkoXCJPcGVuVGVsZW1ldHJ5IENvbnRleHQgS2V5IFNQQU5cIik7XG5mdW5jdGlvbiBZdChlKSB7XG4gIHJldHVybiBlLmdldFZhbHVlKEJ0KSB8fCB2b2lkIDA7XG59XG5mdW5jdGlvbiBqaSgpIHtcbiAgcmV0dXJuIFl0KHF0LmdldEluc3RhbmNlKCkuYWN0aXZlKCkpO1xufVxuZnVuY3Rpb24gSHQoZSwgdCkge1xuICByZXR1cm4gZS5zZXRWYWx1ZShCdCwgdCk7XG59XG5mdW5jdGlvbiB4aShlKSB7XG4gIHJldHVybiBlLmRlbGV0ZVZhbHVlKEJ0KTtcbn1cbmZ1bmN0aW9uICRpKGUsIHQpIHtcbiAgcmV0dXJuIEh0KGUsIG5ldyBIZSh0KSk7XG59XG5mdW5jdGlvbiBvbihlKSB7XG4gIHZhciB0O1xuICByZXR1cm4gKHQgPSBZdChlKSkgPT09IG51bGwgfHwgdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdC5zcGFuQ29udGV4dCgpO1xufVxudmFyIFZpID0gL14oWzAtOWEtZl17MzJ9KSQvaSwgR2kgPSAvXlswLTlhLWZdezE2fSQvaTtcbmZ1bmN0aW9uIHppKGUpIHtcbiAgcmV0dXJuIFZpLnRlc3QoZSkgJiYgZSAhPT0gbm47XG59XG5mdW5jdGlvbiBxaShlKSB7XG4gIHJldHVybiBHaS50ZXN0KGUpICYmIGUgIT09IHJuO1xufVxuZnVuY3Rpb24gYW4oZSkge1xuICByZXR1cm4gemkoZS50cmFjZUlkKSAmJiBxaShlLnNwYW5JZCk7XG59XG5mdW5jdGlvbiBCaShlKSB7XG4gIHJldHVybiBuZXcgSGUoZSk7XG59XG52YXIgQXQgPSBxdC5nZXRJbnN0YW5jZSgpLCBzbiA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuc3RhcnRTcGFuID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgbiA9PT0gdm9pZCAwICYmIChuID0gQXQuYWN0aXZlKCkpO1xuICAgICAgdmFyIG8gPSAhIShyICE9IG51bGwgJiYgci5yb290KTtcbiAgICAgIGlmIChvKVxuICAgICAgICByZXR1cm4gbmV3IEhlKCk7XG4gICAgICB2YXIgaSA9IG4gJiYgb24obik7XG4gICAgICByZXR1cm4gWWkoaSkgJiYgYW4oaSkgPyBuZXcgSGUoaSkgOiBuZXcgSGUoKTtcbiAgICB9LCBlLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbih0LCByLCBuLCBvKSB7XG4gICAgICB2YXIgaSwgcywgYztcbiAgICAgIGlmICghKGFyZ3VtZW50cy5sZW5ndGggPCAyKSkge1xuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID09PSAyID8gYyA9IHIgOiBhcmd1bWVudHMubGVuZ3RoID09PSAzID8gKGkgPSByLCBjID0gbikgOiAoaSA9IHIsIHMgPSBuLCBjID0gbyk7XG4gICAgICAgIHZhciBsID0gcyA/PyBBdC5hY3RpdmUoKSwgdSA9IHRoaXMuc3RhcnRTcGFuKHQsIGksIGwpLCBkID0gSHQobCwgdSk7XG4gICAgICAgIHJldHVybiBBdC53aXRoKGQsIGMsIHZvaWQgMCwgdSk7XG4gICAgICB9XG4gICAgfSwgZTtcbiAgfSgpXG4pO1xuZnVuY3Rpb24gWWkoZSkge1xuICByZXR1cm4gdHlwZW9mIGUgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgZS5zcGFuSWQgPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgZS50cmFjZUlkID09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGUudHJhY2VGbGFncyA9PSBcIm51bWJlclwiO1xufVxudmFyIEhpID0gbmV3IHNuKCksIEppID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCwgciwgbiwgbykge1xuICAgICAgdGhpcy5fcHJvdmlkZXIgPSB0LCB0aGlzLm5hbWUgPSByLCB0aGlzLnZlcnNpb24gPSBuLCB0aGlzLm9wdGlvbnMgPSBvO1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuc3RhcnRTcGFuID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldFRyYWNlcigpLnN0YXJ0U3Bhbih0LCByLCBuKTtcbiAgICB9LCBlLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbih0LCByLCBuLCBvKSB7XG4gICAgICB2YXIgaSA9IHRoaXMuX2dldFRyYWNlcigpO1xuICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkoaS5zdGFydEFjdGl2ZVNwYW4sIGksIGFyZ3VtZW50cyk7XG4gICAgfSwgZS5wcm90b3R5cGUuX2dldFRyYWNlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlKVxuICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGU7XG4gICAgICB2YXIgdCA9IHRoaXMuX3Byb3ZpZGVyLmdldERlbGVnYXRlVHJhY2VyKHRoaXMubmFtZSwgdGhpcy52ZXJzaW9uLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgcmV0dXJuIHQgPyAodGhpcy5fZGVsZWdhdGUgPSB0LCB0aGlzLl9kZWxlZ2F0ZSkgOiBIaTtcbiAgICB9LCBlO1xuICB9KClcbiksIEtpID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICByZXR1cm4gbmV3IHNuKCk7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBXaSA9IG5ldyBLaSgpLCBmciA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgdmFyIG87XG4gICAgICByZXR1cm4gKG8gPSB0aGlzLmdldERlbGVnYXRlVHJhY2VyKHQsIHIsIG4pKSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDogbmV3IEppKHRoaXMsIHQsIHIsIG4pO1xuICAgIH0sIGUucHJvdG90eXBlLmdldERlbGVnYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdDtcbiAgICAgIHJldHVybiAodCA9IHRoaXMuX2RlbGVnYXRlKSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogV2k7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0RGVsZWdhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICB0aGlzLl9kZWxlZ2F0ZSA9IHQ7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0RGVsZWdhdGVUcmFjZXIgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICB2YXIgbztcbiAgICAgIHJldHVybiAobyA9IHRoaXMuX2RlbGVnYXRlKSA9PT0gbnVsbCB8fCBvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvLmdldFRyYWNlcih0LCByLCBuKTtcbiAgICB9LCBlO1xuICB9KClcbiksIFhlO1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLklOVEVSTkFMID0gMF0gPSBcIklOVEVSTkFMXCIsIGVbZS5TRVJWRVIgPSAxXSA9IFwiU0VSVkVSXCIsIGVbZS5DTElFTlQgPSAyXSA9IFwiQ0xJRU5UXCIsIGVbZS5QUk9EVUNFUiA9IDNdID0gXCJQUk9EVUNFUlwiLCBlW2UuQ09OU1VNRVIgPSA0XSA9IFwiQ09OU1VNRVJcIjtcbn0pKFhlIHx8IChYZSA9IHt9KSk7XG52YXIgeWU7XG4oZnVuY3Rpb24oZSkge1xuICBlW2UuVU5TRVQgPSAwXSA9IFwiVU5TRVRcIiwgZVtlLk9LID0gMV0gPSBcIk9LXCIsIGVbZS5FUlJPUiA9IDJdID0gXCJFUlJPUlwiO1xufSkoeWUgfHwgKHllID0ge30pKTtcbnZhciBOZSA9IHF0LmdldEluc3RhbmNlKCksIEl0ID0gXCJ0cmFjZVwiLCBaaSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgICAgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciA9IG5ldyBmcigpLCB0aGlzLndyYXBTcGFuQ29udGV4dCA9IEJpLCB0aGlzLmlzU3BhbkNvbnRleHRWYWxpZCA9IGFuLCB0aGlzLmRlbGV0ZVNwYW4gPSB4aSwgdGhpcy5nZXRTcGFuID0gWXQsIHRoaXMuZ2V0QWN0aXZlU3BhbiA9IGppLCB0aGlzLmdldFNwYW5Db250ZXh0ID0gb24sIHRoaXMuc2V0U3BhbiA9IEh0LCB0aGlzLnNldFNwYW5Db250ZXh0ID0gJGk7XG4gICAgfVxuICAgIHJldHVybiBlLmdldEluc3RhbmNlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IGUoKSksIHRoaXMuX2luc3RhbmNlO1xuICAgIH0sIGUucHJvdG90eXBlLnNldEdsb2JhbFRyYWNlclByb3ZpZGVyID0gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIHIgPSBHdChJdCwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciwgeXQuaW5zdGFuY2UoKSk7XG4gICAgICByZXR1cm4gciAmJiB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLnNldERlbGVnYXRlKHQpLCByO1xuICAgIH0sIGUucHJvdG90eXBlLmdldFRyYWNlclByb3ZpZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gUWUoSXQpIHx8IHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXI7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhY2VyUHJvdmlkZXIoKS5nZXRUcmFjZXIodCwgcik7XG4gICAgfSwgZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgenQoSXQsIHl0Lmluc3RhbmNlKCkpLCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyID0gbmV3IGZyKCk7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBEZSA9IFppLmdldEluc3RhbmNlKCk7XG5jb25zdCBRaSA9IGFzeW5jIChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBEZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBvID0gTmUuYWN0aXZlKCksIGkgPSBuLnN0YXJ0U3BhbihcbiAgICBgY2RlLiR7dC50eXBlfWAsXG4gICAge1xuICAgICAga2luZDogWGUuQ0xJRU5ULFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBcIm1lc3NhZ2UudHlwZVwiOiB0LnR5cGUsXG4gICAgICAgIC4uLmUudHJhY2luZ0NvbnRleHQgJiYge1xuICAgICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogZS50cmFjaW5nQ29udGV4dC5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IGUudHJhY2luZ0NvbnRleHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZm9ybUlkXCI6IGUudHJhY2luZ0NvbnRleHQuZm9ybUlkLFxuICAgICAgICAgIFwib2pzLnZlcnNpb25cIjogZS50cmFjaW5nQ29udGV4dC52ZXJzaW9uLFxuICAgICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiBlLnRyYWNpbmdDb250ZXh0LnJlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IGUudHJhY2luZ0NvbnRleHQuYmFzZVVybCxcbiAgICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiBlLnRyYWNpbmdDb250ZXh0LnJlZmVycmVyXG4gICAgICAgIH0sXG4gICAgICAgIFwiY2RlLm1lc3NhZ2UudHlwZVwiOiB0LnR5cGUsXG4gICAgICAgIFwiY2RlLm1lc3NhZ2UucGF5bG9hZFwiOiBKU09OLnN0cmluZ2lmeSh0LnBheWxvYWQpXG4gICAgICB9XG4gICAgfSxcbiAgICBvXG4gICk7XG4gIHJldHVybiBOZS53aXRoKERlLnNldFNwYW4obywgaSksIGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcyA9IGF3YWl0IHIoKTtcbiAgICAgIHJldHVybiBpLnNldFN0YXR1cyh7IGNvZGU6IHllLk9LIH0pLCBzO1xuICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgIHRocm93IGkuc2V0U3RhdHVzKHtcbiAgICAgICAgY29kZTogeWUuRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IHMgaW5zdGFuY2VvZiBFcnJvciA/IHMubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiXG4gICAgICB9KSwgcztcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaS5lbmQoKTtcbiAgICB9XG4gIH0pO1xufSwgY3QgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gRGUuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKSwgbiA9IE5lLmFjdGl2ZSgpLCBvID0gci5zdGFydFNwYW4oXG4gICAgYGZvcm0uJHtlLnNwYW5OYW1lfWAsXG4gICAge1xuICAgICAga2luZDogWGUuQ0xJRU5ULFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IGUuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogZS5kZXZpY2VUb2tlbixcbiAgICAgICAgXCJvanMuZm9ybUlkXCI6IGUuZm9ybUlkLFxuICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IGUudmVyc2lvbixcbiAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IGUucmVsZWFzZVZlcnNpb24sXG4gICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IGUuYmFzZVVybCxcbiAgICAgICAgXCJvanMucmVmZXJyZXJcIjogZS5yZWZlcnJlcixcbiAgICAgICAgLi4uZS5wYXltZW50Um91dGVJZCAmJiB7IFwicGF5bWVudC5yb3V0ZV9pZFwiOiBlLnBheW1lbnRSb3V0ZUlkIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG5cbiAgKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBpID0gYXdhaXQgdCgpO1xuICAgIHJldHVybiBvLnNldFN0YXR1cyh7IGNvZGU6IHllLk9LIH0pLCBpO1xuICB9IGNhdGNoIChpKSB7XG4gICAgY29uc3QgcyA9IGkgaW5zdGFuY2VvZiBFcnJvciA/IGkubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiO1xuICAgIHRocm93IG8uc2V0U3RhdHVzKHtcbiAgICAgIGNvZGU6IHllLkVSUk9SLFxuICAgICAgbWVzc2FnZTogc1xuICAgIH0pLCBpO1xuICB9IGZpbmFsbHkge1xuICAgIG8uZW5kKCk7XG4gIH1cbn07XG5jbGFzcyBjbiBleHRlbmRzIHRvIHtcbiAgY29uc3RydWN0b3IodCkge1xuICAgIGNvbnN0IHIgPSBgJHt0Lm1lc3NhZ2V9YDtcbiAgICBzdXBlcihyKSwgdGhpcy5yZXNwb25zZSA9IHQ7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IFYgPSBhc3luYyAoZSwgdCwgciwgbikgPT4gUWkoZSwgdCwgYXN5bmMgKCkgPT4ge1xuICBuICYmIGcobiwge1xuICAgIC4uLnRcbiAgfSk7XG4gIGNvbnN0IG8gPSBhd2FpdCBlLnNlbmQodCk7XG4gIGlmIChlcyhvKSlcbiAgICB0aHJvdyBnKFwiY2RlX3Jlc3BvbnNlX2Vycm9yXCIsIHtcbiAgICAgIC4uLm9cbiAgICB9KSwgbmV3IGNuKG8pO1xuICBpZiAoIVhpKG8sIHIpKSB7XG4gICAgY29uc3QgaSA9IHIuc2FmZVBhcnNlKG8pO1xuICAgIHRocm93IGkuc3VjY2VzcyA/IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIikgOiAoY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgciwgXCJBY3R1YWw6XCIsIG8pLCBpLmVycm9yKTtcbiAgfVxuICByZXR1cm4gbiAmJiBnKG4sIHtcbiAgICAuLi5vXG4gIH0pLCBvO1xufSksIFhpID0gKGUsIHQpID0+IHQuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsIGVzID0gKGUpID0+IEZvLnNhZmVQYXJzZShlKS5zdWNjZXNzLCB0cyA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBWKGUsIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiB0IH0sIHhyKSwgVCA9IGFzeW5jIChlKSA9PiBhd2FpdCBWKGUsIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCAkciksIGhlID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFYoXG4gIGUsXG4gIHsgdHlwZTogXCJ2Ml9zdGFydF9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogdCB9LFxuICB6cixcbiAgXCJzdGFydF9wYXltZW50X2Zsb3dcIlxuKSwgbG4gPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgVihcbiAgZSxcbiAgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIiwgcGF5bG9hZDogdCB9LFxuICBCbyxcbiAgXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCJcbiksIHJzID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgZyhcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwge1xuICAgIC4uLnRcbiAgfSk7XG4gIGNvbnN0IHIgPSBhd2FpdCBWKGUsIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHBheWxvYWQ6IHQgfSwgenIpO1xuICByZXR1cm4gZyhcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJfcmVzdWx0XCIsIHtcbiAgICAuLi5yXG4gIH0pLCByO1xufSwgJCA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBWKFxuICBlLFxuICB7IHR5cGU6IFwiY29uZmlybV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogdCB9LFxuICBUbyxcbiAgXCJjb25maXJtX3BheW1lbnRfZmxvd1wiXG4pLCBucyA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBWKFxuICBlLFxuICB7IHR5cGU6IFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogdCB9LFxuICBWcixcbiAgXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiXG4pLCBvcyA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBWKFxuICBlLFxuICB7IHR5cGU6IFwiY2hlY2tfaWZfcG9wdXBfd2luZG93X3ZlcmlmaWVkXCIsIHBheWxvYWQ6IHQgfSxcbiAgUm8sXG4gIFwiY2hlY2tfaWZfcG9wdXBfd2luZG93X3ZlcmlmaWVkXCJcbiksIGFzID0gYXN5bmMgKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IGF3YWl0IHRzKGUsIHtcbiAgICBzZWN1cmVfdG9rZW46IHQsXG4gICAgcHJvbW90aW9uX2NvZGU6IHJcbiAgfSksIG8gPSBuZXcgU2V0KG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMuY3VycmVuY3kpKTtcbiAgaWYgKG8uc2l6ZSAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHtvLnNpemV9YCk7XG4gIGNvbnN0IGkgPSBvLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiLCBzID0gYWEobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5yZW1haW5pbmdfYW1vdW50X2F0b20pKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeTogaSxcbiAgICBhbW91bnRBdG9tOiBzXG4gIH07XG59LCBmZSA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiB7XG4gIGlmIChyKVxuICAgIHJldHVybiB7IGFtb3VudEF0b206IDAsIGN1cnJlbmN5OiBcInVzZFwiIH07XG4gIHtcbiAgICBuID0gbiB8fCB2b2lkIDA7XG4gICAgY29uc3QgbyA9IGF3YWl0IGFzKGUsIHQsIG4pO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IG8uYW1vdW50QXRvbSwgY3VycmVuY3k6IG8uY3VycmVuY3kgfTtcbiAgfVxufSwgdW4gPSBhc3luYyAoZSwgdCkgPT4ge1xuICBpZiAoZS5zaXplID09PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20oZS52YWx1ZXMoKSkubWFwKFxuICAgICAgKG4pID0+IFYobiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZDogdCB9LCBrbylcbiAgICApXG4gICk7XG59LCB5ciA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBWKFxuICBlLFxuICB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkOiB0IH0sXG4gIEtlLFxuICBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIlxuKSwgaXMgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgVihlLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogdCB9LCBWciwgXCJzZXR1cF9jaGVja291dFwiKSwgSnQgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgVihlLCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZDogdCB9LCBLZSwgXCJwZXJmb3JtX2NoZWNrb3V0XCIpLCBkbiA9IDFlMywgc3MgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zb2xlLmxvZyh0KTtcbiAgY29uc3QgbiA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IGUsXG4gICAgZGVidWc6ICEwLFxuICAgIHRpbWVvdXQ6IGRuLFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KS5wcm9taXNlLCBvID0gYXdhaXQgVihuLCB7IHR5cGU6IFwicGluZy0zZHMtc3RhdHVzXCIgfSwgQW8pO1xuICByZXR1cm4gY29uc29sZS5sb2coXCLwn5+iIENERSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwhIFN0b3BwaW5nIHBvbGxpbmcuLi4gUmVzdWx0OlwiLCBvKSwgbztcbn0sIEV0ID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFYoXG4gIGUsXG4gIHsgdHlwZTogXCJwcmVwYXJlX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiB0IH0sXG4gIEhvLFxuICBcInByZXBhcmVfcGF5bWVudF9mbG93XCJcbiksIHBuID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IFYoXG4gICAgICBlLFxuICAgICAgeyB0eXBlOiBcImdldF9zdGFuZGFyZGl6ZWRfZXJyb3JfY29kZVwiLCBwYXlsb2FkOiB7IG1lc3NhZ2U6IHQgfSB9LFxuICAgICAgWW9cbiAgICApKS5lcnJvcl9jb2RlO1xuICB9IGNhdGNoIChyKSB7XG4gICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJbY2RlLWNsaWVudF0gRXJyb3IgZHVyaW5nIGdldFN0YW5kYXJkaXplZEVycm9yQ29kZTpcIiwgWihyKSksIFwiUEFZTUVOVF9GQUlMRURfR0VORVJJQ1wiO1xuICB9XG59LCBjcyA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBWKFxuICBlLFxuICB7IHR5cGU6IFwic2V0X3VzZXJfZGV2aWNlX3Rva2VuXCIsIHBheWxvYWQ6IHsgZGV2aWNlX3Rva2VuOiB0IH0gfSxcbiAgSm9cbiksIGxzID0gYXN5bmMgKGUpID0+IHtcbiAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgIWUpIHJldHVybiAhMTtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0geyB0eXBlOiBcInBpbmdcIiB9LCByID0gYXdhaXQgZS5zZW5kKHQpO1xuICAgIGlmIChyICE9PSAhMClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHIpfWApO1xuICAgIHJldHVybiAhMDtcbiAgfSBjYXRjaCAodCkge1xuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpcIiwgdCksICExO1xuICB9XG59LCB1cyA9IChlLCB0KSA9PiAhIWUgJiYgdCwgbW4gPSBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCIsIGZuID0gXCIwMTIzNDU2Nzg5QUJDREVGR0hKS01OUFFSU1RWV1hZWlwiLCBKZSA9IDMyLCBkcyA9IDE2LCB5biA9IDEwLCBfciA9IDI4MTQ3NDk3NjcxMDY1NTtcbnZhciBDZTtcbihmdW5jdGlvbihlKSB7XG4gIGUuQmFzZTMySW5jb3JyZWN0RW5jb2RpbmcgPSBcIkIzMl9FTkNfSU5WQUxJRFwiLCBlLkRlY29kZVRpbWVJbnZhbGlkQ2hhcmFjdGVyID0gXCJERUNfVElNRV9DSEFSXCIsIGUuRGVjb2RlVGltZVZhbHVlTWFsZm9ybWVkID0gXCJERUNfVElNRV9NQUxGT1JNRURcIiwgZS5FbmNvZGVUaW1lTmVnYXRpdmUgPSBcIkVOQ19USU1FX05FR1wiLCBlLkVuY29kZVRpbWVTaXplRXhjZWVkZWQgPSBcIkVOQ19USU1FX1NJWkVfRVhDRUVEXCIsIGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkID0gXCJFTkNfVElNRV9NQUxGT1JNRURcIiwgZS5QUk5HRGV0ZWN0RmFpbHVyZSA9IFwiUFJOR19ERVRFQ1RcIiwgZS5VTElESW52YWxpZCA9IFwiVUxJRF9JTlZBTElEXCIsIGUuVW5leHBlY3RlZCA9IFwiVU5FWFBFQ1RFRFwiLCBlLlVVSURJbnZhbGlkID0gXCJVVUlEX0lOVkFMSURcIjtcbn0pKENlIHx8IChDZSA9IHt9KSk7XG5jbGFzcyBHZSBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IodCwgcikge1xuICAgIHN1cGVyKGAke3J9ICgke3R9KWApLCB0aGlzLm5hbWUgPSBcIlVMSURFcnJvclwiLCB0aGlzLmNvZGUgPSB0O1xuICB9XG59XG5mdW5jdGlvbiBwcyhlKSB7XG4gIGxldCB0ID0gTWF0aC5mbG9vcihlKCkgKiBKZSk7XG4gIHJldHVybiB0ID09PSBKZSAmJiAodCA9IEplIC0gMSksIGZuLmNoYXJBdCh0KTtcbn1cbmZ1bmN0aW9uIG1zKGUpIHtcbiAgY29uc3QgdCA9IGZzKCksIHIgPSB0ICYmICh0LmNyeXB0byB8fCB0Lm1zQ3J5cHRvKSB8fCBudWxsO1xuICBpZiAodHlwZW9mIChyID09IG51bGwgPyB2b2lkIDAgOiByLmdldFJhbmRvbVZhbHVlcykgPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb25zdCBuID0gbmV3IFVpbnQ4QXJyYXkoMSk7XG4gICAgICByZXR1cm4gci5nZXRSYW5kb21WYWx1ZXMobiksIG5bMF0gLyAyNTU7XG4gICAgfTtcbiAgaWYgKHR5cGVvZiAociA9PSBudWxsID8gdm9pZCAwIDogci5yYW5kb21CeXRlcykgPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAoKSA9PiByLnJhbmRvbUJ5dGVzKDEpLnJlYWRVSW50OCgpIC8gMjU1O1xuICB0aHJvdyBuZXcgR2UoQ2UuUFJOR0RldGVjdEZhaWx1cmUsIFwiRmFpbGVkIHRvIGZpbmQgYSByZWxpYWJsZSBQUk5HXCIpO1xufVxuZnVuY3Rpb24gZnMoKSB7XG4gIHJldHVybiBocygpID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgPCBcInVcIiA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgPCBcInVcIiA/IGdsb2JhbCA6IHR5cGVvZiBnbG9iYWxUaGlzIDwgXCJ1XCIgPyBnbG9iYWxUaGlzIDogbnVsbDtcbn1cbmZ1bmN0aW9uIHlzKGUsIHQpIHtcbiAgbGV0IHIgPSBcIlwiO1xuICBmb3IgKDsgZSA+IDA7IGUtLSlcbiAgICByID0gcHModCkgKyByO1xuICByZXR1cm4gcjtcbn1cbmZ1bmN0aW9uIF9zKGUsIHQgPSB5bikge1xuICBpZiAoaXNOYU4oZSkpXG4gICAgdGhyb3cgbmV3IEdlKENlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhIG51bWJlcjogJHtlfWApO1xuICBpZiAoZSA+IF9yKVxuICAgIHRocm93IG5ldyBHZShDZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkLCBgQ2Fubm90IGVuY29kZSBhIHRpbWUgbGFyZ2VyIHRoYW4gJHtfcn06ICR7ZX1gKTtcbiAgaWYgKGUgPCAwKVxuICAgIHRocm93IG5ldyBHZShDZS5FbmNvZGVUaW1lTmVnYXRpdmUsIGBUaW1lIG11c3QgYmUgcG9zaXRpdmU6ICR7ZX1gKTtcbiAgaWYgKE51bWJlci5pc0ludGVnZXIoZSkgPT09ICExKVxuICAgIHRocm93IG5ldyBHZShDZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYW4gaW50ZWdlcjogJHtlfWApO1xuICBsZXQgciwgbiA9IFwiXCI7XG4gIGZvciAobGV0IG8gPSB0OyBvID4gMDsgby0tKVxuICAgIHIgPSBlICUgSmUsIG4gPSBmbi5jaGFyQXQocikgKyBuLCBlID0gKGUgLSByKSAvIEplO1xuICByZXR1cm4gbjtcbn1cbmZ1bmN0aW9uIGhzKCkge1xuICByZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlIDwgXCJ1XCIgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlO1xufVxuZnVuY3Rpb24gZ3MoZSwgdCkge1xuICBjb25zdCByID0gbXMoKSwgbiA9IERhdGUubm93KCk7XG4gIHJldHVybiBfcyhuLCB5bikgKyB5cyhkcywgcik7XG59XG5jb25zdCBfbiA9IFwib3BfYW5hbHl0aWNzX2RldmljZV90b2tlblwiLCBobiA9ICgpID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjtcIikuZmluZCgocikgPT4gci5pbmNsdWRlcyhfbikpO1xuICBpZiAoZSlcbiAgICByZXR1cm4gZS5zcGxpdChcIj1cIilbMV07XG4gIGNvbnN0IHQgPSBncygpO1xuICByZXR1cm4gd3ModCksIHQ7XG59LCB3cyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTtcbiAgdC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkgKyAxKSwgZG9jdW1lbnQuY29va2llID0gYCR7X259PSR7ZX07IHBhdGg9LzsgZXhwaXJlcz0ke3QudG9VVENTdHJpbmcoKX1gO1xufSwgZ24gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhlKS5mb3JFYWNoKChbciwgbl0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbyA9IEZyLnBhcnNlKHIpO1xuICAgICAgQXJyYXkuaXNBcnJheShuKSA/IHRbb10gPSBuIDogQXJyYXkuaXNBcnJheShuLl9lcnJvcnMpICYmICh0W29dID0gbi5fZXJyb3JzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pLCB0O1xufSwgSiA9IChlLCB0KSA9PiBBcnJheS5mcm9tKGUucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKS5yZWR1Y2UoKG8sIGkpID0+IHtcbiAgY29uc3QgcyA9IGkuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICByZXR1cm4gcyA/IHsgLi4ubywgW3NdOiBpLnZhbHVlIH0gOiBvO1xufSwge30pLCB2cyA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIENvLnBhcnNlKGUpO1xuICB9IGNhdGNoICh0KSB7XG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgZXZlbnQgcGF5bG9hZDpcIiwgZSwgdCksIHQ7XG4gIH1cbn0sIGJzID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZSwjYWR5ZW4tY29udGFpbmVyLCNhZHllbi1jb250YWluZXI+KnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIiwgd24gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICB0LmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke2JzfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke2V9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwidGhyZWUtZHMtaWZyYW1lXCIgdGl0bGU9XCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCIgYWxsb3c9XCJwYXltZW50XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIG4gPSByLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICBuLmFwcGVuZENoaWxkKHQuY29udGVudC5jbG9uZU5vZGUoITApKTtcbiAgY29uc3QgbyA9IG4ucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIGkgPSBuLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksIHsgaG9zdDogciwgaWZyYW1lOiBvLCBjYW5jZWxCdXR0b246IGkgfTtcbn07XG5mdW5jdGlvbiBFcyhlLCB0LCByKSB7XG4gIGNvbnN0IG4gPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGkgPSBhd2FpdCBzcyhlLCByKTtcbiAgICAgIGkgJiYgKGNsZWFySW50ZXJ2YWwobyksIHQoaSkpO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgfTtcbiAgbigpO1xuICBjb25zdCBvID0gc2V0SW50ZXJ2YWwobiwgZG4pO1xuICByZXR1cm4gbztcbn1cbmZ1bmN0aW9uIENzKHtcbiAgZWxlbWVudHM6IGUsXG4gIHBvbGxpbmdJbnRlcnZhbDogdCxcbiAgcmVzb2x2ZTogclxufSkge1xuICBjb25zdCBuID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwodCksIGUuaG9zdC5yZW1vdmUoKSwgcih7IHN0YXR1czogRC5DQU5DRUxMRUQgfSk7XG4gIH07XG4gIHJldHVybiBlLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbiksICgpID0+IHtcbiAgICBlLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbik7XG4gIH07XG59XG5hc3luYyBmdW5jdGlvbiBudChlKSB7XG4gIGNvbnN0IHsgdXJsOiB0LCBiYXNlVXJsOiByIH0gPSBlLCBuID0gd24odCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgobykgPT4ge1xuICAgIGNvbnN0IGkgPSAobCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIG4uaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyksIG8obCksIGMgPT0gbnVsbCB8fCBjKCk7XG4gICAgfSwgcyA9IEVzKG4uaWZyYW1lLCBpLCBuZXcgVVJMKHIpLm9yaWdpbiksIGMgPSBDcyh7XG4gICAgICBlbGVtZW50czogbixcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogcyxcbiAgICAgIHJlc29sdmU6IG9cbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCB2biA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHQgPSBhd2FpdCBudChlKTtcbiAgaWYgKHQuc3RhdHVzID09PSBELkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHQuc3RhdHVzID09PSBELkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIHJldHVybiB0LnN0YXR1cyAhPT0gRC5TVUNDRVNTICYmIGd0KHQuc3RhdHVzKSwge1xuICAgIGhyZWY6IHQuaHJlZlxuICB9O1xufSwgUHMgPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gd2luZG93Lm9wZW4odCwgXCJfYmxhbmtcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgcmV0dXJuIHI7XG59LCBibiA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiB7XG4gIGNvbnN0IHsgZXJyX186IG8gfSA9IFMoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoaSwgcykgPT4ge1xuICAgIGNvbnN0IGMgPSBQcyhlLCBuKSwgbCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHUgPSBhd2FpdCBvcyh0LCByKTtcbiAgICAgICAgaWYgKHUucHJlc2VudClcbiAgICAgICAgICBjbGVhckludGVydmFsKGwpLCBjLmNsb3NlKCksIGkoeyBocmVmOiB1LmhyZWYgfSk7XG4gICAgICAgIGVsc2UgaWYgKGMuY2xvc2VkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlfSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBvKFoodSkpLCBjbGVhckludGVydmFsKGwpLCBzKFoodSkpO1xuICAgICAgfVxuICAgIH0sIDFlMyk7XG4gIH0pO1xufSwgeyBsb2dfXzogU3MsIGVycl9fOiBLdCB9ID0gUyhcImFpcndhbGxleC1jY1wiKSwga3MgPSB6Lm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6LnN0cmluZygpXG59KSwgQXMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0ga3Muc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2Vzcykge1xuICAgIGNvbnN0IHIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YDtcbiAgICB0aHJvdyBLdChuKSwgbmV3IEVycm9yKHIpO1xuICB9XG4gIHJldHVybiB0LmRhdGE7XG59LCBFbiA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBJcyA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IG5ldyBVUkwoZSA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCF0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gU3MoYEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtJbnRlbnQgSUQ6ICR7dH1dYCksIHQ7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBjb25zdCByID0gXCJFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IEt0KHIsIGBSZXN1bHRpbmcgVVJMOiAke2V9LlxuRXJyb3I6ICR7Wih0KX1gKSwgbmV3IEVycm9yKHIpO1xuICB9XG59LCBDbiA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBBcyh0KSwgbiA9IGF3YWl0IHZuKHsgdXJsOiByW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSksIG8gPSBJcyhuLmhyZWYgPz8gXCJcIiksIGkgPSByW1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAoaSAhPT0gbykge1xuICAgIGNvbnN0IGMgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIGwgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7b30pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHtpfSkuYDtcbiAgICB0aHJvdyBLdChsKSwgbmV3IEVycm9yKGMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBvLFxuICAgICAgY29uc2VudF9pZDogcltcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xufSwgUG4gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSksIFNuID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KSwgQiA9IHouZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCIsIFwiYWR5ZW5cIl0pO1xuQi5FbnVtLnN0cmlwZTtcbmNvbnN0IGtuID0gKHtcbiAgc2NyaXB0SWQ6IGUsXG4gIHNyYzogdCxcbiAgY2hlY2tMb2FkZWRGbjogclxufSkgPT4ge1xuICBjb25zdCBuID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKG8sIGkpID0+IHtcbiAgICBsZXQgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgcy5zcmMgPSB0LCBzLmlkID0gZSwgcy5hc3luYyA9ICEwO1xuICAgIGNvbnN0IGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtcbiAgICByKCkgPyBvKCkgOiBjID8gcyA9IGMgOiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHMpLCBzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImxvYWRcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgbi5hYm9ydCgpLCBvKCk7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IG4uc2lnbmFsIH1cbiAgICApLCBzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImVycm9yXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIG4uYWJvcnQoKSwgaShcIkZhaWxlZCB0byBsb2FkIHRoZSBzY3JpcHRcIik7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IG4uc2lnbmFsIH1cbiAgICApO1xuICB9KTtcbn0sIFd0ID0gKCkgPT4ga24oe1xuICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2FwcGxlX3BheV9zZGtcIixcbiAgc3JjOiBcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbS9qc2FwaS8xLmxhdGVzdC9hcHBsZS1wYXktc2RrLmpzXCIsXG4gIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhIXdpbmRvdy5BcHBsZVBheVNES1xufSksIFp0ID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IHQudG9rZW4ucGF5bWVudE1ldGhvZC5iaWxsaW5nQ29udGFjdCwgbiA9IHQuYmlsbGluZ0NvbnRhY3QsIG8gPSB0LnNoaXBwaW5nQ29udGFjdCwgaSA9IHsgLi4uZSB9O1xuICBpZiAociB8fCBuIHx8IG8pIHtcbiAgICBpW2YuRU1BSUxdID0gaVtmLkVNQUlMXSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5lbWFpbEFkZHJlc3MpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmVtYWlsQWRkcmVzcykgfHwgKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uZW1haWxBZGRyZXNzKSB8fCBcIm9wX3VuZmlsbGVkQGVtYWlsLmNvbVwiLCBpW2YuQ09VTlRSWV0gPSBpW2YuQ09VTlRSWV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuY291bnRyeUNvZGUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmNvdW50cnlDb2RlKSB8fCAobyA9PSBudWxsID8gdm9pZCAwIDogby5jb3VudHJ5Q29kZSkgfHwgXCJVU1wiLCBpW2YuWklQX0NPREVdID0gaVtmLlpJUF9DT0RFXSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5wb3N0YWxDb2RlKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5wb3N0YWxDb2RlKSB8fCAobyA9PSBudWxsID8gdm9pZCAwIDogby5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgcyA9IGlbZi5GSVJTVF9OQU1FXSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5naXZlbk5hbWUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmdpdmVuTmFtZSkgfHwgKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uZ2l2ZW5OYW1lKSB8fCBcIlwiLCBjID0gaVtmLkxBU1RfTkFNRV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZmFtaWx5TmFtZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZmFtaWx5TmFtZSkgfHwgKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uZmFtaWx5TmFtZSkgfHwgXCJcIjtcbiAgICBzIHx8IGMgPyAoaVtmLkZJUlNUX05BTUVdID0gcywgaVtmLkxBU1RfTkFNRV0gPSBjKSA6IChpW2YuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIGlbZi5MQVNUX05BTUVdID0gXCJcIik7XG4gIH1cbiAgcmV0dXJuIGk7XG59O1xuei5vYmplY3Qoe1xuICBkYXRhOiB6Lm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICAgIGVycm9yczogei5hcnJheSh6LmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogei5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogei5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcbmNvbnN0IFJzID0gKHtcbiAgdG90YWw6IGUsXG4gIHByZWZpbGw6IHRcbn0pID0+IHtcbiAgdmFyIG47XG4gIGlmICh0Lm1vZGUgPT09IFwic2V0dXBcIilcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IGUuYW1vdW50LFxuICAgICAgICBsYWJlbDogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBiaWxsaW5nIHBvcnRhbCB1cmxcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3Bhc3NraXQvcGtyZWN1cnJpbmdwYXltZW50cmVxdWVzdC9tYW5hZ2VtZW50dXJsI0Rpc2N1c3Npb25cbiAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgdXNlZCB3aGVuIHVzZXIgcmVtb3ZlIGEgY2FyZCBmcm9tIHRoZWlyIEFwcGxlUGF5IHdhbGxldC5cbiAgICAgIC8vIEN1cnJlbnR5IHNldCB0byBjaGVja291dCBzZXNzaW9uIHVybCB0byBzYXRpc2Z5IEFwcGxlUGF5IHR5cGVzXG4gICAgICBtYW5hZ2VtZW50VVJMOiBuZXcgVVJMKGAvcGF5LyR7dC50b2tlbn1gLCBtbikudG9TdHJpbmcoKVxuICAgIH07XG4gIGNvbnN0IHIgPSAobiA9IHQubGluZV9pdGVtcykgPT0gbnVsbCA/IHZvaWQgMCA6IG5bMF07XG4gIGlmIChyKVxuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246IChyID09IG51bGwgPyB2b2lkIDAgOiByLmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiBlLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IChyID09IG51bGwgPyB2b2lkIDAgOiByLmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxVbml0OiByID09IG51bGwgPyB2b2lkIDAgOiByLmJpbGxpbmdfaW50ZXJ2YWwsXG4gICAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbENvdW50OiAociA9PSBudWxsID8gdm9pZCAwIDogci5iaWxsaW5nX2ludGVydmFsX2NvdW50KSA/PyB2b2lkIDAsXG4gICAgICAgIHBheW1lbnRUaW1pbmc6IFwicmVjdXJyaW5nXCIsXG4gICAgICAgIHR5cGU6IFwiZmluYWxcIlxuICAgICAgfSxcbiAgICAgIG1hbmFnZW1lbnRVUkw6IGBodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbS9wYXkvJHt0LnRva2VufWBcbiAgICB9O1xufSwgVHMgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBlLFxuICBpbml0aWFsUHJldmlldzogdCxcbiAgcHJlZmlsbDogcixcbiAgZGVmYXVsdExhYmVsOiBuID0gXCJUb3RhbFwiXG59KSA9PiB7XG4gIHZhciBjLCBsO1xuICBjb25zdCBvID0gKCgoYyA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogYy5jdXJyZW5jeSkgPz8gKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuY3VycmVuY3kpID8/IHQuY3VycmVuY3kpLnRvVXBwZXJDYXNlKCksIHMgPSAoKCgobCA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogbC5hbW91bnRBdG9tKSA/PyAodCA9PSBudWxsID8gdm9pZCAwIDogdC5hbW91bnRBdG9tKSA/PyAwKSAvIDEwMCkudG9GaXhlZCgyKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeUNvZGU6IG8sXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5sYWJlbCkgPz8gbiA/PyBcIlRvdGFsXCIsXG4gICAgICB0eXBlOiBlICE9IG51bGwgJiYgZS5wZW5kaW5nID8gXCJwZW5kaW5nXCIgOiBcImZpbmFsXCIsXG4gICAgICBhbW91bnQ6IHNcbiAgICB9XG4gIH07XG59LCBRdCA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGUsXG4gIGluaXRpYWxQcmV2aWV3OiB0LFxuICBwcmVmaWxsOiByLFxuICBkZWZhdWx0TGFiZWw6IG5cbn0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW5jeUNvZGU6IG8sIHRvdGFsOiBpIH0gPSBUcyh7XG4gICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgICBpbml0aWFsUHJldmlldzogdCxcbiAgICBwcmVmaWxsOiByLFxuICAgIGRlZmF1bHRMYWJlbDogblxuICB9KTtcbiAgbGV0IHMgPSB7XG4gICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICBjdXJyZW5jeUNvZGU6IG8sXG4gICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIl0sXG4gICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXG4gICAgICBcInN1cHBvcnRzM0RTXCIsXG4gICAgICBcInN1cHBvcnRzQ3JlZGl0XCIsXG4gICAgICBcInN1cHBvcnRzRGViaXRcIixcbiAgICAgIFwic3VwcG9ydHNFTVZcIlxuICAgIF0sXG4gICAgdG90YWw6IGksXG4gICAgcmVjdXJyaW5nUGF5bWVudFJlcXVlc3Q6IFJzKHtcbiAgICAgIHRvdGFsOiBpLFxuICAgICAgcHJlZmlsbDogclxuICAgIH0pXG4gIH07XG4gIHJldHVybiBlICE9IG51bGwgJiYgZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ICYmICh0eXBlb2YgZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IHMgPSB7XG4gICAgLi4ucyxcbiAgICAuLi5lLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QocylcbiAgfSA6IHMgPSB7IC4uLnMsIC4uLmUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCB9KSwgcztcbn0sIHsgbG9nX186IG1sLCBlcnJfXzogQW4gfSA9IFMoXCJjb21tb25cIiksIG90ID0gKGUpID0+IHtcbiAgaWYgKGUucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiBlLnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgRyA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBlLmZpbmQoKG4pID0+IHQuc2FmZVBhcnNlKG4pLnN1Y2Nlc3MpO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgQW4oXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpcIiwgZSksIG5ldyBFcnJvcihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsXCIpO1xuICByZXR1cm4gdC5wYXJzZShyKTtcbn0sIEluID0gKGUpID0+ICh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogZS5lbWFpbCxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICB6aXBfY29kZTogZS56aXBDb2RlLFxuICAgIGNvdW50cnk6IGUuY291bnRyeVxuICB9LFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogZS5maXJzdE5hbWUsXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGUubGFzdE5hbWVcbn0pLCBTZSA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHsgbG9nX186IHQgfSA9IFMoZS5sb2dQcmVmaXgpLCByID0gYXdhaXQgVChlLmFueUNkZUNvbm5lY3Rpb24pLCBuID0gb3QoZS5jb25maXJtUmVzdWx0KTtcbiAgaWYgKHIubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgIHJldHVybiB0KFwiU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZC4uLlwiKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogYXdhaXQgbnMoZS5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBwbV9pZDogbi5wYXltZW50X21ldGhvZF9pZFxuICAgIH0pIH07XG4gIHtcbiAgICBpZiAoZS51c2VQYXlGaXJzdEZsb3cpIHtcbiAgICAgIGlmICh0KFwiVXNpbmcgcGF5LWZpcnN0IGZsb3cuLi5cIiksICFlLmNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICAgIHRocm93IEFuKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgZS5jb25maXJtUmVzdWx0KSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogZS5jb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgICB0KFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgbyA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogci50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgcHJvdmlkZXJfdHlwZTogZS5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogZS5yZXF1aXJlZEZvcm1GaWVsZHNbZi5FTUFJTF0sXG4gICAgICBjdXN0b21lcl96aXBfY29kZTogZS5yZXF1aXJlZEZvcm1GaWVsZHNbZi5aSVBfQ09ERV0sXG4gICAgICBjdXN0b21lcl9jb3VudHJ5OiBlLnJlcXVpcmVkRm9ybUZpZWxkc1tmLkNPVU5UUlldLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IGUucmVxdWlyZWRGb3JtRmllbGRzW2YuUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogci5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IHIuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IG4ucGF5bWVudF9tZXRob2RfaWRcbiAgICB9O1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBKdChlLmFueUNkZUNvbm5lY3Rpb24sIG8pIH07XG4gIH1cbn0sIEZzID0gei5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKSwgTnMgPSB6LmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSksIHsgbG9nX186IE9lLCBlcnJfXzogZXQgfSA9IFMoXCJhZHllbi1jY1wiKSwgTXMgPSB6Lm9iamVjdCh7XG4gIFwib3AtYWNjb3VudC1pZFwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBGcyxcbiAgXCJvcC1hZHllbi1hY3Rpb25cIjogei5zdHJpbmcoKVxufSksIFJuID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBEcyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBNcy5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKVxuICAgIHRocm93IGV0KGBBZHllbiAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGUpfWApLCBuZXcgRXJyb3IoUm4pO1xuICByZXR1cm4gdC5kYXRhO1xufSwgT3MgPSAoZSkgPT4gSlNPTi5wYXJzZShlKSwgaHIgPSAoKSA9PiBcIkFkeWVuV2ViXCIgaW4gd2luZG93ICYmIFwiQWR5ZW5DaGVja291dFwiIGluIHdpbmRvdy5BZHllbldlYiwgTHMgPSBhc3luYyAoKSA9PiB7XG4gIE9lKFwiV2FpdGluZyBmb3IgQWR5ZW4gU0RLIHRvIGxvYWQuLi5cIik7XG4gIGZvciAobGV0IGUgPSAwOyBlIDwgMTA7IGUrKylcbiAgICBocigpIHx8IGF3YWl0IGJ0KDUwMCk7XG4gIGlmICghaHIoKSlcbiAgICB0aHJvdyBldChcIkFkeWVuIFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpLCBuZXcgRXJyb3IoUm4pO1xuICByZXR1cm4gT2UoXCJBZHllbiBTREsgbG9hZGVkIHN1Y2Nlc3NmdWxseVwiKSwgd2luZG93LkFkeWVuV2ViLkFkeWVuQ2hlY2tvdXQ7XG59LCBVcyA9IChlKSA9PiB7XG4gIGNvbnN0IHsgaGVhZGVyczogdCwgbG9jYWxlOiByLCBjb3VudHJ5Q29kZTogbiwgY29tcG9uZW50OiBvLCBob3N0OiBpLCBjYW5jZWxCdXR0b246IHMgfSA9IGUsIGMgPSBPcyh0W1wib3AtYWR5ZW4tYWN0aW9uXCJdKTtcbiAgcmV0dXJuIE9lKGBSdW5uaW5nIEFkeWVuIDNEUyBmbG93IGZvciBhY3Rpb24gdHlwZTogJHtjLnR5cGV9YCksIG5ldyBQcm9taXNlKChsKSA9PiB7XG4gICAgY29uc3QgdSA9ICgpID0+IHtcbiAgICAgIE9lKFwiQ2xlYW5pbmcgdXAgQWR5ZW4gM0RTIGZsb3dcIiksIHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHApLCBpLnJlbW92ZSgpO1xuICAgIH0sIGQgPSAoXykgPT4ge1xuICAgICAgZXQoXCJBdXRoZW50aWNhdGlvbiBmYWlsZWQuIFJlc3VsdDpcIiwgXyksIGwoeyBzdGF0dXM6IEQuRkFJTFVSRSwgY2xlYW51cDogdSB9KTtcbiAgICB9LCB5ID0gKF8pID0+IHtcbiAgICAgIGV0KFwiQWR5ZW4gZXJyb3I6XCIsIF8pLCBsKHsgc3RhdHVzOiBELkZBSUxVUkUsIGNsZWFudXA6IHUgfSk7XG4gICAgfSwgcCA9ICgpID0+IHtcbiAgICAgIGwoeyBzdGF0dXM6IEQuQ0FOQ0VMTEVELCBjbGVhbnVwOiB1IH0pO1xuICAgIH07XG4gICAgcy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcCk7XG4gICAgY29uc3QgbSA9IChfLCBoLCB2KSA9PiB7XG4gICAgICBpLnJlbW92ZSgpLCBsKHsgc3RhdHVzOiBELlNVQ0NFU1MsIGFkZGl0aW9uYWxEZXRhaWxzOiBfLCBjbGVhbnVwOiB1IH0pO1xuICAgIH07XG4gICAgTHMoKS50aGVuKFxuICAgICAgKF8pID0+IF8oe1xuICAgICAgICBjbGllbnRLZXk6IHRbXCJvcC1hZHllbi1jbGllbnQta2V5XCJdLFxuICAgICAgICBlbnZpcm9ubWVudDogdFtcIm9wLWFkeWVuLWVudmlyb25tZW50XCJdLFxuICAgICAgICBsb2NhbGU6IHIsXG4gICAgICAgIGNvdW50cnlDb2RlOiBuLFxuICAgICAgICBvbkFkZGl0aW9uYWxEZXRhaWxzOiBtLFxuICAgICAgICBvblBheW1lbnRGYWlsZWQ6IGQsXG4gICAgICAgIG9uRXJyb3I6IHlcbiAgICAgIH0pXG4gICAgKS50aGVuKChfKSA9PiB7XG4gICAgICBfLmNyZWF0ZUZyb21BY3Rpb24oYywgeyBjaGFsbGVuZ2VXaW5kb3dTaXplOiBcIjAzXCIgfSkubW91bnQobyk7XG4gICAgfSk7XG4gIH0pO1xufSwganMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gOiBuYXZpZ2F0b3IubGFuZ3VhZ2UsIHIgPSBlID8/IHQsIG4gPSBOcy5zYWZlUGFyc2Uocik7XG4gIHJldHVybiBuLnN1Y2Nlc3MgPyAoT2UoYFJlc29sdmVkIGxvY2FsZTogJHtuLmRhdGF9YCksIG4uZGF0YSkgOiAoZXQoYFJlc29sdmVkIGludmFsaWQgbG9jYWxlOiAke3J9LiBEZWZhdWx0aW5nIHRvIGVuLVVTLmApLCBcImVuLVVTXCIpO1xufSwgVG4gPSAoZSkgPT4gKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbXCJvcC1hZHllbi1hY3Rpb25cIl0pICE9PSB2b2lkIDAsIEZuID0gYXN5bmMgKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IERzKHQpLCBvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgby5pZCA9IFwiYWR5ZW4tY29udGFpbmVyXCI7XG4gIGNvbnN0IHsgaG9zdDogaSwgaWZyYW1lOiBzLCBjYW5jZWxCdXR0b246IGMgfSA9IHduKFwiaHR0cDovL2V4YW1wbGUuY29tXCIpO1xuICBzLnJlcGxhY2VXaXRoKG8pO1xuICBjb25zdCBsID0gYXdhaXQgVXMoe1xuICAgIGhlYWRlcnM6IG4sXG4gICAgbG9jYWxlOiBqcyhyKSxcbiAgICBjb3VudHJ5Q29kZTogZSxcbiAgICBjb21wb25lbnQ6IG8sXG4gICAgaG9zdDogaSxcbiAgICBjYW5jZWxCdXR0b246IGNcbiAgfSk7XG4gIGlmIChsLmNsZWFudXAoKSwgbC5zdGF0dXMgPT09IEQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgaWYgKGwuc3RhdHVzID09PSBELkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKGwuc3RhdHVzID09PSBELlNVQ0NFU1MpIHtcbiAgICBpZiAoIWwuYWRkaXRpb25hbERldGFpbHMpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZCBidXQgbm8gYWRkaXRpb25hbCBkZXRhaWxzIHdlcmUgcmV0dXJuZWRcIik7XG4gICAgcmV0dXJuIE9lKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWRcIiksIHtcbiAgICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICAgIGFkZGl0aW9uYWxfZGV0YWlsczogbC5hZGRpdGlvbmFsRGV0YWlscy5kYXRhXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlXG4gICAgZ3QobC5zdGF0dXMpO1xufSwgTm4gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpXG4gIH0pXG59KSwgTW4gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIHsgbG9nX186IERuLCBlcnJfXzogT24gfSA9IFMoXCJjb21tb24tY2NcIiksIFggPSAoZSwgdCwgcikgPT4ge1xuICBpZiAocikge1xuICAgIERuKGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShyKX1gKTtcbiAgICBmb3IgKGNvbnN0IFtvLCBpXSBvZiBPYmplY3QuZW50cmllcyhyKSlcbiAgICAgIGVbb10gfHwgKGVbb10gPSBpKTtcbiAgfVxuICBjb25zdCBuID0gdHQuc2FmZVBhcnNlKGUpO1xuICBpZiAoIW4uc3VjY2Vzcykge1xuICAgIGNvbnN0IG8gPSBuLmVycm9yLmZvcm1hdCgpLCBpID0gZ24obyk7XG4gICAgZm9yIChjb25zdCBbcywgY10gb2YgT2JqZWN0LmVudHJpZXMoaSkpXG4gICAgICB0KHMsIGMsIHMpO1xuICAgIHRocm93IE9uKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgaSksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiBuLmRhdGE7XG59LCBMbiA9IChlLCB0KSA9PiB7XG4gIGZvciAoY29uc3QgciBvZiBlKVxuICAgIGlmIChyLnN1Y2Nlc3MgPT09ICExKVxuICAgICAgdGhyb3cgci5lcnJvcnMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBjb25zdCBvID0gRHIuc2FmZVBhcnNlKG4uZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIW8uc3VjY2VzcylcbiAgICAgICAgICBPbihgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke24uZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgbik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGkgPSBvLmRhdGE7XG4gICAgICAgICAgdChpLCBuLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pLCBEbihgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkoci5lcnJvcnMpfWApLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xufSwgeyBsb2dfXzogeHMgfSA9IFMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gJHMoZSwgdCkge1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSAoYXdhaXQgRXQodC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBvID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIW8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgdC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKG8pLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ub1xuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgdGhyb3cgdC5zZXNzaW9uLmFib3J0KCksIHI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIFZzKGUsIHQpIHtcbiAgdmFyIHIsIG47XG4gIHRyeSB7XG4gICAgY29uc3QgbyA9IGUucGF5bWVudCwgaSA9IFp0KHQubm9uQ2RlRm9ybUlucHV0cywgbyksIHMgPSBYKFxuICAgICAgaSxcbiAgICAgIHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICB0LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5zXG4gICAgfSksIGF3YWl0IGhlKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHNbZi5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogc1tmLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogc1tmLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogc1tmLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogc1tmLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgYyA9IGF3YWl0ICQodC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYnJvd3Nlcl9pbmZvOiBabigpLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YToge1xuICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShvLnRva2VuKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHhzKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgYyksICEoKG4gPSAociA9IGMucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogclswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IG4uaWQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgdSA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudCh1KSwgU2Uoe1xuICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiB0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBzLFxuICAgICAgY29uZmlybVJlc3VsdDogYyxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAobykge1xuICAgIGNvbnN0IGkgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChpKSwgbztcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogemUsIGVycl9fOiBVbiB9ID0gUyhcImFkeWVuLWFwcGxlLXBheVwiKSwgR3MgPSBtZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogQi5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSBHKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgTm4pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIGlmICh6ZShcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgV3QoKSwgIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiB6ZShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIHI7XG4gICAgaWYgKHplKFwiQXBwbGUgUGF5IExvYWRlZFwiKSwgIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiB6ZShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgcjtcbiAgICBpZiAoIW4ubWV0YWRhdGEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBUKHMpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBmZShzLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKHkpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IFIuYWR5ZW5BcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ueSxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIFVuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgcCksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigocCA9PSBudWxsID8gdm9pZCAwIDogcC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBCLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgenMgPSBRKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBfO1xuICAgIGNvbnN0IGkgPSBHKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgTm4pLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsIGluaXRpYWxQcmV2aWV3OiBjIH0gPSBuLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgVChsKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCB5ID0gUXQoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjLFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi51XG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiAoXyA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfLnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgcCA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgeSksIG0gPSB7XG4gICAgICBzZXNzaW9uOiBwLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IGkubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBvLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIGcoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiB0LnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogd3QodSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pLCBuZXcgUHJvbWlzZSgoaCwgdikgPT4ge1xuICAgICAgY29uc3QgYiA9ICgpID0+IHtcbiAgICAgICAgemUoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCB2KG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIHAub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKEUpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCAkcyhFLCBtKTtcbiAgICAgICAgfSBjYXRjaCAoQykge1xuICAgICAgICAgIHYoQyk7XG4gICAgICAgIH1cbiAgICAgIH0sIHAub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IEUgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHsgLi4ueS50b3RhbCB9XG4gICAgICAgIH07XG4gICAgICAgIHAuY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKEUpO1xuICAgICAgfSwgcC5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKEUpID0+IHtcbiAgICAgICAgZyhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgQyA9IGF3YWl0IFZzKEUsIG0pO1xuICAgICAgICAgIGgoQyk7XG4gICAgICAgIH0gY2F0Y2ggKEMpIHtcbiAgICAgICAgICB2KEMpO1xuICAgICAgICB9XG4gICAgICB9LCBwLm9uY2FuY2VsID0gYiwgcC5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChoKSA9PiB7XG4gICAgICB0aHJvdyBVbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIGg7XG4gICAgfSk7XG4gIH1cbiksIGplID0gKHtcbiAgZ2F0ZXdheTogZSxcbiAgZ2F0ZXdheU1lcmNoYW50SWQ6IHQsXG4gIG1lcmNoYW50TmFtZTogcixcbiAgbWVyY2hhbnRJZDogbixcbiAgaW5pdGlhbFByZXZpZXc6IG8sXG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGksXG4gIHByZWZpbGw6IHNcbn0pID0+IHtcbiAgdmFyIHksIHA7XG4gIGNvbnN0IGMgPSAoKHkgPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IHkuYW1vdW50QXRvbSkgPz8gKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uYW1vdW50QXRvbSkgPz8gMCwgbCA9IE1hdGgubWF4KGMgLyAxMDAsIDApLCB1ID0gKCgocCA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogcC5jdXJyZW5jeSkgPz8gKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuY3VycmVuY3kpID8/IG8uY3VycmVuY3kpLnRvVXBwZXJDYXNlKCksIGQgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiAhMCxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1BhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogXCJGVUxMXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFsbG93Q3JlZGl0Q2FyZHM6ICEwLFxuICAgICAgICAgIGFsbG93UHJlcGFpZENhcmRzOiAhMFxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5OiBlLFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6ICEwLFxuICAgIG1lcmNoYW50SW5mbzoge1xuICAgICAgLy8gUFJPRCBlbnYgd2lsbCBuZWVkIHRoaXNcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3BheS9hcGkvd2ViL3JlZmVyZW5jZS9yZXF1ZXN0LW9iamVjdHMjTWVyY2hhbnRJbmZvXG4gICAgICBtZXJjaGFudElkOiBuID8/IFwiXCIsXG4gICAgICBtZXJjaGFudE5hbWU6IHJcbiAgICB9LFxuICAgIHRyYW5zYWN0aW9uSW5mbzoge1xuICAgICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICAgIGN1cnJlbmN5Q29kZTogdSxcbiAgICAgIHRvdGFsUHJpY2VTdGF0dXM6IGkgIT0gbnVsbCAmJiBpLnBlbmRpbmcgPyBcIkVTVElNQVRFRFwiIDogXCJGSU5BTFwiLFxuICAgICAgdG90YWxQcmljZTogbC50b0ZpeGVkKDIpXG4gICAgfVxuICB9O1xuICByZXR1cm4gaSAhPSBudWxsICYmIGkuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgPyB0eXBlb2YgaS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyB7IC4uLmQsIC4uLmkuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QoZCkgfSA6IHsgLi4uZCwgLi4uaS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9IDogZDtcbn0sIFh0ID0gKCkgPT4ga24oe1xuICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2dvb2dsZV9wYXlfc2RrXCIsXG4gIHNyYzogXCJodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzXCIsXG4gIGNoZWNrTG9hZGVkRm46ICgpID0+IHtcbiAgICB2YXIgZSwgdDtcbiAgICByZXR1cm4gISEoKHQgPSAoZSA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBlLnBheW1lbnRzKSAhPSBudWxsICYmIHQuYXBpKTtcbiAgfVxufSk7XG5sZXQgUnQgPSBudWxsO1xuY29uc3QgZXIgPSBhc3luYyAoZSkgPT4gYXdhaXQgWHIoZSkgPT09IFwicHJvZFwiID8gXCJQUk9EVUNUSU9OXCIgOiBcIlRFU1RcIiwgeGUgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgZXIoZSk7XG4gIHJldHVybiBSdCA9PT0gbnVsbCAmJiAoUnQgPSBuZXcgd2luZG93Lmdvb2dsZS5wYXltZW50cy5hcGkuUGF5bWVudHNDbGllbnQoe1xuICAgIGVudmlyb25tZW50OiByLFxuICAgIG1lcmNoYW50SW5mbzogdC5tZXJjaGFudEluZm9cbiAgfSkpLCBSdDtcbn0sIGpuID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKHIpID0+IHIudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICByZXR1cm4gdCA/IE9yLnBhcnNlKHQpIDogbnVsbDtcbn0sIHRyID0gKGUsIHQpID0+IHtcbiAgdmFyIG8sIGksIHMsIGM7XG4gIGNvbnN0IHIgPSB7IC4uLmUgfSwgbiA9IChpID0gKG8gPSB0LnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogby5pbmZvKSA9PSBudWxsID8gdm9pZCAwIDogaS5iaWxsaW5nQWRkcmVzcztcbiAgaWYgKG4pIHtcbiAgICBjb25zdCBbbCwgLi4udV0gPSAoKGMgPSAocyA9IG4ubmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHMudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogYy5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgZCA9IHUuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICAgIHJbZi5FTUFJTF0gPSByW2YuRU1BSUxdIHx8IHQuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCByW2YuQ09VTlRSWV0gPSByW2YuQ09VTlRSWV0gfHwgbi5jb3VudHJ5Q29kZSB8fCBcIlVTXCIsIHJbZi5BRERSRVNTXSA9IHJbZi5BRERSRVNTXSB8fCBuLmFkZHJlc3MxIHx8IFwiXCIsIHJbZi5DSVRZXSA9IHJbZi5DSVRZXSB8fCBuLmxvY2FsaXR5IHx8IFwiXCIsIHJbZi5aSVBfQ09ERV0gPSByW2YuWklQX0NPREVdIHx8IG4ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCIsIHJbZi5TVEFURV0gPSByW2YuU1RBVEVdIHx8IG4uYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCI7XG4gICAgY29uc3QgeSA9IHJbZi5GSVJTVF9OQU1FXSB8fCBsIHx8IFwiXCIsIHAgPSByW2YuTEFTVF9OQU1FXSB8fCBkIHx8IFwiXCI7XG4gICAgeSB8fCBwID8gKHJbZi5GSVJTVF9OQU1FXSA9IHksIHJbZi5MQVNUX05BTUVdID0gcCkgOiAocltmLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCByW2YuTEFTVF9OQU1FXSA9IFwiXCIpO1xuICB9XG4gIHJldHVybiByO1xufSwgeyBsb2dfXzogdGUsIGVycl9fOiBJZSB9ID0gUyhcImFkeWVuLWdvb2dsZS1wYXlcIiksIHFzID0gbWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIHZhciB5LCBwO1xuICAgIGNvbnN0IHIgPSB7XG4gICAgICBwcm9jZXNzb3I6IEIuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0gRyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIE1uKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICB0ZShcIkdvb2dsZSBQYXkgQ1BNXCIsIG4pO1xuICAgIGNvbnN0IG8gPSBuLm1ldGFkYXRhO1xuICAgIGlmICghby5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiBJZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIHI7XG4gICAgaWYgKHRlKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgWHQoKSwgISgocCA9ICh5ID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkucGF5bWVudHMpICE9IG51bGwgJiYgcC5hcGkpKVxuICAgICAgcmV0dXJuIEllKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgcjtcbiAgICBpZiAoYXdhaXQgZXIoZS5iYXNlVXJsKSA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIW8uZ29vZ2xlX3BheV9tZXJjaGFudF9pZClcbiAgICAgIHJldHVybiBJZShcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIiksIHI7XG4gICAgdGUoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG0gPSBqZSh7XG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBvLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IG8ucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogby5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgXyA9IGF3YWl0IHhlKGUuYmFzZVVybCwgbSksIHsgcmVzdWx0OiBoIH0gPSBhd2FpdCBfLmlzUmVhZHlUb1BheShtKTtcbiAgICAgIGlmICghaClcbiAgICAgICAgcmV0dXJuIHRlKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAobSkge1xuICAgICAgcmV0dXJuIEllKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgbSksIHI7XG4gICAgfVxuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBUKHMpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBmZShzLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKG0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFIuYWR5ZW5Hb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBKKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICBJZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgdC5nZXQub25DaGVja291dEVycm9yKChfID09IG51bGwgPyB2b2lkIDAgOiBfLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IEIuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBCcyA9IFEoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogb1xuICB9KSA9PiB7XG4gICAgdmFyIG0sIF8sIGgsIHYsIGIsIEUsIEMsIEksIE07XG4gICAgdGUoXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBNbiksIHsgaW5pdGlhbFByZXZpZXc6IHMsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGMgfSA9IG8sIGwgPSBpLm1ldGFkYXRhO1xuICAgIGlmICghbC5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgdSA9IGplKHtcbiAgICAgIGdhdGV3YXk6IFwiYWR5ZW5cIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBsLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBsLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBsLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBzLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY1xuICAgIH0pLCBkID0gZS5hbnlDZGVDb25uZWN0aW9uLCB5ID0gYXdhaXQgVChkKTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGkucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiB3dCh5LCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSk7XG4gICAgY29uc3QgcCA9IGF3YWl0IHhlKGUuYmFzZVVybCwgdSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFAgPSBhd2FpdCBwLmxvYWRQYXltZW50RGF0YSh1KTtcbiAgICAgIHRlKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgUCk7XG4gICAgICBjb25zdCBGID0gdHIociwgUCksIFkgPSBYKFxuICAgICAgICBGLFxuICAgICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgbyA9PSBudWxsID8gdm9pZCAwIDogby5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICBpZiAoZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLllcbiAgICAgIH0pLCAhKChfID0gKG0gPSBQLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogbS50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogXy50b2tlbikpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgY29uc3Qgb2UgPSBhd2FpdCBoZShkLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IFlbZi5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBZW2YuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IFlbZi5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBZW2YuWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnk6IFlbZi5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KSwgd2UgPSBqbihvZSk7XG4gICAgICB0ZShcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIHdlKTtcbiAgICAgIGxldCB6ID0gYXdhaXQgJChkLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogeS50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgICBicm93c2VyX2luZm86IFpuKCksXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiAodiA9IChoID0gUC5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGgudG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IHYudG9rZW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGUoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB6KTtcbiAgICAgIGxldCBkZSA9IChFID0gKGIgPSB6LnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGJbMF0pID09IG51bGwgPyB2b2lkIDAgOiBFLmlkO1xuICAgICAgY29uc3QgQWUgPSAoQyA9IHoucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogQy5maW5kKCgkZSkgPT4gJGUudHlwZSA9PT0gXCJhZHllbi0zZHNcIik7XG4gICAgICBpZiAoQWUgJiYgQWUucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIHRlKFwiQWR5ZW4gM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgQWUpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogJGUgfSA9IGF3YWl0IG50KHtcbiAgICAgICAgICB1cmw6IEFlLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0ZShg4pWwIEFkeWVuIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7JGV9XWApLCAkZSA9PT0gRC5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmICgkZSA9PT0gRC5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKEFlICYmICFkZSAmJiAoeiA9IGF3YWl0ICQoZCwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHkudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBBZS50aGVpcl9wbV9pZCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlclxuICAgICAgICB9XG4gICAgICB9KSwgdGUoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZSBhZnRlciAzRFNcIiwgeiksIGRlID0gKE0gPSAoSSA9IHoucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogSVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IE0uaWQpLCAhZGUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgbWV0aG9kIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIFNlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBkLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogWSxcbiAgICAgICAgY29uZmlybVJlc3VsdDogeixcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoUCkge1xuICAgICAgdGhyb3cgSWUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgUCksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogUFxuICAgICAgfSksIG5ldyBFcnJvcigoUCA9PSBudWxsID8gdm9pZCAwIDogUC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCBrZSA9ICgpID0+IHtcbiAgY29uc3QgZSA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzIDogW25hdmlnYXRvci5sYW5ndWFnZV07XG4gIGxldCB0ID0gZSA9PSBudWxsID8gdm9pZCAwIDogZVswXTtcbiAgcmV0dXJuIHQgJiYgKHQgPSB0LnNwbGl0KFwiLVwiKVswXSksIHQ7XG59LCB7IGxvZ19fOiB1dCB9ID0gUyhcImF3eC1hcHBsZS1wYXlcIik7XG5hc3luYyBmdW5jdGlvbiBZcyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCBFdCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiB0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgbyA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFvKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihvKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLm9cbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IHQuc2Vzc2lvbi5hYm9ydCgpLCByO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBIcyhlLCB0KSB7XG4gIGlmICghZS5yZWRpcmVjdF91cmwpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICB1dChcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIGUpO1xuICBjb25zdCB7IHN0YXR1czogciB9ID0gYXdhaXQgbnQoe1xuICAgIHVybDogZS5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogdC5iYXNlVXJsXG4gIH0pO1xuICBpZiAodXQoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3J9XWApLCByID09PSBELkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHIgPT09IEQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgY29uc3QgbiA9IGF3YWl0ICQodC5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiB0LnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogZS50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBlLmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB1dChcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG4pLCBuO1xufVxuYXN5bmMgZnVuY3Rpb24gSnMoZSwgdCkge1xuICB2YXIgciwgbiwgbywgaSwgcztcbiAgdHJ5IHtcbiAgICBjb25zdCBjID0gZS5wYXltZW50LCBsID0gWnQodC5ub25DZGVGb3JtSW5wdXRzLCBjKSwgdSA9IFgoXG4gICAgICBsLFxuICAgICAgdC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnVcbiAgICB9KTtcbiAgICBjb25zdCBwID0gKGF3YWl0IGhlKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHVbZi5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdVtmLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogdVtmLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogdVtmLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogdVtmLkNPVU5UUlldXG4gICAgICB9LFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGtlKClcbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdLmNvbnNlbnRfaWQ7XG4gICAgaWYgKCFwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uc2VudCBJRCByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICBsZXQgbSA9IGF3YWl0ICQodC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IHAsXG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJhcHBsZXBheVwiLFxuICAgICAgICAgIGFwcGxlcGF5OiB7XG4gICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IEpTT04uc3RyaW5naWZ5KGMudG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdXQoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBtKTtcbiAgICBsZXQgXyA9IChuID0gKHIgPSBtLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHJbMF0pID09IG51bGwgPyB2b2lkIDAgOiBuLmlkO1xuICAgIGNvbnN0IGggPSAobyA9IG0ucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogby5maW5kKFxuICAgICAgKGIpID0+IGIudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApO1xuICAgIGlmIChoICE9IG51bGwgJiYgaC5yZWRpcmVjdF91cmwgJiYgaC5jb25zZW50X2lkICYmIGgudGhlaXJfcG1faWQgJiYgKG0gPSBhd2FpdCBIcyhoLCB0KSwgXyA9IChzID0gKGkgPSBtLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBzLmlkKSwgIV8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCB2ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHYpLCBTZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXd4LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiB0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiB1LFxuICAgICAgY29uZmlybVJlc3VsdDogbSxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAoYykge1xuICAgIGNvbnN0IGwgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChsKSwgYztcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogcWUsIGVycl9fOiB4biB9ID0gUyhcImF3eC1hcHBsZS1wYXlcIiksIEtzID0gbWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIGNvbnN0IHIgPSB7XG4gICAgICBwcm9jZXNzb3I6IEIuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBQbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgaWYgKHFlKFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBXdCgpLCAhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIHFlKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKSwgcjtcbiAgICBpZiAocWUoXCJBcHBsZSBQYXkgTG9hZGVkXCIpLCAhYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIHFlKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IFQocyksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGZlKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoeSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgUi5haXJ3YWxsZXhBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ueSxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIHhuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgcCksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigocCA9PSBudWxsID8gdm9pZCAwIDogcC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBCLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogZFxuICAgIH07XG4gIH1cbiksIFdzID0gUShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGN1c3RvbVBhcmFtczogbixcbiAgICBmb3JtQ2FsbGJhY2tzOiBvXG4gIH0pID0+IHtcbiAgICB2YXIgXztcbiAgICBjb25zdCBpID0gRyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFBuKSwgeyBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLCBpbml0aWFsUHJldmlldzogYyB9ID0gbiwgbCA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgdSA9IGF3YWl0IFQobCksIGQgPSB1Lm1vZGUgPT09IFwic2V0dXBcIiwgeSA9IFF0KHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsXG4gICAgICBpbml0aWFsUHJldmlldzogYyxcbiAgICAgIHByZWZpbGw6IHtcbiAgICAgICAgLi4udVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRMYWJlbDogKF8gPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLm1ldGFkYXRhKSA9PSBudWxsID8gdm9pZCAwIDogXy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSksIHAgPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHkpLCBtID0ge1xuICAgICAgc2Vzc2lvbjogcCxcbiAgICAgIGNvbm5lY3Rpb246IGUuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBpLm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGlzU2V0dXBNb2RlOiBkLFxuICAgICAgYmFzZVVybDogZS5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrczogbyxcbiAgICAgIGRlZmF1bHRGaWVsZFZhbHVlczogbiA9PSBudWxsID8gdm9pZCAwIDogbi5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICB9O1xuICAgIHJldHVybiBnKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogdC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IHd0KHUsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbiAgICB9KSwgbmV3IFByb21pc2UoKGgsIHYpID0+IHtcbiAgICAgIGNvbnN0IGIgPSAoKSA9PiB7XG4gICAgICAgIHFlKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgdihuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBwLm9uY2FuY2VsID0gYiwgcC5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoRSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IFlzKEUsIG0pO1xuICAgICAgICB9IGNhdGNoIChDKSB7XG4gICAgICAgICAgdihDKTtcbiAgICAgICAgfVxuICAgICAgfSwgcC5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgRSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi55LnRvdGFsIH1cbiAgICAgICAgfTtcbiAgICAgICAgcC5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oRSk7XG4gICAgICB9LCBwLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoRSkgPT4ge1xuICAgICAgICBnKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBDID0gYXdhaXQgSnMoRSwgbSk7XG4gICAgICAgICAgaChDKTtcbiAgICAgICAgfSBjYXRjaCAoQykge1xuICAgICAgICAgIHYoQyk7XG4gICAgICAgIH1cbiAgICAgIH0sIHAuYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoaCkgPT4ge1xuICAgICAgdGhyb3cgeG4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBoKSwgZyhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGhcbiAgICAgIH0pLCBoO1xuICAgIH0pO1xuICB9XG4pLCB7IGxvZ19fOiByZSwgZXJyX186IFJlIH0gPSBTKFwiYXd4LWdvb2dsZS1wYXlcIiksIFpzID0gbWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIHZhciB5LCBwO1xuICAgIGNvbnN0IHIgPSB7XG4gICAgICBwcm9jZXNzb3I6IEIuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBTbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgcmUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBvID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIW8ucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gUmUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChyZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IFh0KCksICEoKHAgPSAoeSA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiB5LnBheW1lbnRzKSAhPSBudWxsICYmIHAuYXBpKSlcbiAgICAgIHJldHVybiBSZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgaWYgKGF3YWl0IGVyKGUuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFvLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gUmUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCByO1xuICAgIHJlKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtID0gamUoe1xuICAgICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogby5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBvLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IG8uZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSksIF8gPSBhd2FpdCB4ZShlLmJhc2VVcmwsIG0pLCB7IHJlc3VsdDogaCB9ID0gYXdhaXQgXy5pc1JlYWR5VG9QYXkobSk7XG4gICAgICBpZiAoIWgpXG4gICAgICAgIHJldHVybiByZShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCByO1xuICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgIHJldHVybiBSZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIG0pLCByO1xuICAgIH1cbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgVChzKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgZmUocywgYy50b2tlbiwgbCwgdm9pZCAwKSwgZCA9IGFzeW5jIChtKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBSLmFpcndhbGxleEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLm0sXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIFJlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIF8pLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoKF8gPT0gbnVsbCA/IHZvaWQgMCA6IF8ubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogQi5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBRcyA9IFEoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogb1xuICB9KSA9PiB7XG4gICAgdmFyIG0sIF8sIGgsIHYsIGIsIEUsIEM7XG4gICAgcmUoXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBTbiksIHsgaW5pdGlhbFByZXZpZXc6IHMsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGMgfSA9IG8sIGwgPSBpLm1ldGFkYXRhO1xuICAgIGlmICghbC5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgdSA9IGplKHtcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogcyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGNcbiAgICB9KSwgZCA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgeSA9IGF3YWl0IFQoZCk7XG4gICAgZyhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBpLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogd3QoeSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY1xuICAgIH0pO1xuICAgIGNvbnN0IHAgPSBhd2FpdCB4ZShlLmJhc2VVcmwsIHUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBJID0gYXdhaXQgcC5sb2FkUGF5bWVudERhdGEodSk7XG4gICAgICByZShcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIEkpO1xuICAgICAgY29uc3QgTSA9IHRyKHIsIEkpLCBQID0gWChcbiAgICAgICAgTSxcbiAgICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApO1xuICAgICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLlBcbiAgICAgIH0pO1xuICAgICAgY29uc3QgRiA9IChfID0gKG0gPSBJLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogbS50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogXy50b2tlbjtcbiAgICAgIGlmICghRilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBZID0gYXdhaXQgaGUoZCwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBQW2YuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogUFtmLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBQW2YuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgICB6aXBfY29kZTogUFtmLlpJUF9DT0RFXSxcbiAgICAgICAgICBjb3VudHJ5OiBQW2YuQ09VTlRSWV1cbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGtlKClcbiAgICAgIH0pLCBnZSA9IGpuKFkpO1xuICAgICAgcmUoXCJTdGFydCBmbG93IG5leHQgYWN0aW9uc1wiLCBnZSk7XG4gICAgICBsZXQgb2UgPSBhd2FpdCAkKGQsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiB5LnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICAgIC8vIEdvb2dsZVBheSdzIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuIHByb3ZpZGVkIHRvIHZlcmlmeSB0aGUgY29uc2VudCBmaXJzdFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBnZSA9PSBudWxsID8gdm9pZCAwIDogZ2UuY29uc2VudF9pZCxcbiAgICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgICAgdHlwZTogXCJnb29nbGVwYXlcIixcbiAgICAgICAgICAgIGdvb2dsZXBheToge1xuICAgICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogRlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZShcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG9lKTtcbiAgICAgIGxldCB3ZSA9ICh2ID0gKGggPSBvZS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBoWzBdKSA9PSBudWxsID8gdm9pZCAwIDogdi5pZDtcbiAgICAgIGNvbnN0IHogPSAoYiA9IG9lLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IGIuZmluZChcbiAgICAgICAgKGRlKSA9PiBkZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICAgKTtcbiAgICAgIGlmICh6ICYmIHoucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIHJlKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgeik7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzOiBkZSB9ID0gYXdhaXQgbnQoe1xuICAgICAgICAgIHVybDogei5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocmUoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke2RlfV1gKSwgZGUgPT09IEQuQ0FOQ0VMTEVEKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICBpZiAoZGUgPT09IEQuRkFJTFVSRSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmICh6ICYmICF3ZSAmJiAob2UgPSBhd2FpdCAkKGQsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiB5LnRva2VuLFxuICAgICAgICB0aGVpcl9wbV9pZDogei50aGVpcl9wbV9pZCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogei5jb25zZW50X2lkXG4gICAgICAgIH1cbiAgICAgIH0pLCByZShcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG9lKSwgd2UgPSAoQyA9IChFID0gb2UucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogRVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IEMuaWQpLCAhd2UpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIFNlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogZCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IFAsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IG9lLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChJKSB7XG4gICAgICB0aHJvdyBSZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBJKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBJXG4gICAgICB9KSwgbmV3IEVycm9yKChJID09IG51bGwgPyB2b2lkIDAgOiBJLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksICRuID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpXG4gIH0pXG59KSwgVm4gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcbmFzeW5jIGZ1bmN0aW9uIFhzKGUsIHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gKGF3YWl0IEV0KHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBlLnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogdC5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkubmV4dF9hY3Rpb25fbWV0YWRhdGEsIG8gPSBuID09IG51bGwgPyB2b2lkIDAgOiBuLmFwcGxlX3BheV9zZXNzaW9uO1xuICAgIGlmICghbylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24obyksIGcoXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5vXG4gICAgfSk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICB0aHJvdyB0LnNlc3Npb24uYWJvcnQoKSwgcjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gZWMoZSwgdCkge1xuICB2YXIgciwgbjtcbiAgdHJ5IHtcbiAgICBjb25zdCBvID0gZS5wYXltZW50LCBpID0gWnQodC5ub25DZGVGb3JtSW5wdXRzLCBvKSwgcyA9IFgoaSwgdC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5zXG4gICAgfSksIGF3YWl0IGhlKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHNbZi5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogc1tmLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogc1tmLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogc1tmLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogc1tmLkNPVU5UUlldXG4gICAgICB9LFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGtlKClcbiAgICB9KTtcbiAgICBjb25zdCBjID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoby50b2tlbi5wYXltZW50RGF0YSkpXG4gICAgfSwgbCA9IGF3YWl0ICQodC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IGNcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoISgobiA9IChyID0gbC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdKSA9PSBudWxsID8gdm9pZCAwIDogbi5pZCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCBkID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KGQpLCBTZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogdC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IGwsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKG8pIHtcbiAgICBjb25zdCBpID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoaSksIG87XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IGR0LCBlcnJfXzogR24gfSA9IFMoXCJhdXRobmV0LWFwcGxlcGF5XCIpLCB0YyA9IG1lKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBCLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0gRyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsICRuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBpZiAoZHQoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IFd0KCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gZHQoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCByO1xuICAgIGlmICghYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIGR0KFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IFQocyksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGZlKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoeSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgUi5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ueSxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIEduKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgcCksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IHBcbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigocCA9PSBudWxsID8gdm9pZCAwIDogcC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBCLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCByYyA9IFEoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogb1xuICB9KSA9PiB7XG4gICAgdmFyIF87XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogaSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gbiwgYyA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCAkbiksIGwgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBUKGwpLCBkID0gdS5tb2RlID09PSBcInNldHVwXCIsIHkgPSBRdCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGksXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgZGVmYXVsdExhYmVsOiAoXyA9IGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfLnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KTtcbiAgICBnKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogdC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSk7XG4gICAgY29uc3QgcCA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgeSksIG0gPSB7XG4gICAgICBzZXNzaW9uOiBwLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IHQubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBvXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKGgsIHYpID0+IHtcbiAgICAgIHAub25jYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGR0KFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgdihuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH0sIHAub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKGIpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBYcyhiLCBtKTtcbiAgICAgICAgfSBjYXRjaCAoRSkge1xuICAgICAgICAgIHYoRSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHAub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGIgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHkudG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgcC5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oYik7XG4gICAgICB9LCBwLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoYikgPT4ge1xuICAgICAgICBnKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBFID0gYXdhaXQgZWMoYiwgbSk7XG4gICAgICAgICAgaChFKTtcbiAgICAgICAgfSBjYXRjaCAoRSkge1xuICAgICAgICAgIHYoRSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHAuYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoaCkgPT4ge1xuICAgICAgdGhyb3cgR24oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBoKSwgZyhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGhcbiAgICAgIH0pLCBoO1xuICAgIH0pO1xuICB9XG4pLCB7IGxvZ19fOiBiZSwgZXJyX186IEJlIH0gPSBTKFwiYXV0aG5ldC1nb29nbGVwYXlcIiksIG5jID0gbWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIHZhciBkLCB5O1xuICAgIGJlKFwiSW5pdGlhbGl6aW5nIEF1dGhuZXQgR29vZ2xlUGF5IGZsb3dcIik7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogQi5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBWbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgYmUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBvID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIW8ucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gQmUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChiZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IFh0KCksICEoKHkgPSAoZCA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBkLnBheW1lbnRzKSAhPSBudWxsICYmIHkuYXBpKSlcbiAgICAgIHJldHVybiBCZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgYmUoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHAgPSBqZSh7XG4gICAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBvLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IG8ucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogby5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgbSA9IGF3YWl0IHhlKGUuYmFzZVVybCwgcCksIHsgcmVzdWx0OiBfIH0gPSBhd2FpdCBtLmlzUmVhZHlUb1BheShwKTtcbiAgICAgIGlmICghXylcbiAgICAgICAgcmV0dXJuIGJlKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAocCkge1xuICAgICAgcmV0dXJuIEJlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgcCksIHI7XG4gICAgfVxuICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBUKGkpLCBjID0gcy5tb2RlID09PSBcInNldHVwXCIsIGwgPSBhd2FpdCBmZShpLCBzLnRva2VuLCBjLCB2b2lkIDApLCB1ID0gYXN5bmMgKHApID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFIuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogSihlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ucCxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiBsXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAgQmUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgbSksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiBtXG4gICAgICAgIH0pLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoKG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0ubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogQi5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgb2MgPSBRKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBtLCBfLCBoLCB2O1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXc6IGksIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMgfSA9IG8sIGwgPSBHKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgVm4pLm1ldGFkYXRhLCB1ID0gamUoe1xuICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBsLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBsLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBsLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBpLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pLCBkID0gZS5hbnlDZGVDb25uZWN0aW9uLCB5ID0gYXdhaXQgVChkKTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHIucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiB5LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pO1xuICAgIGNvbnN0IHAgPSBhd2FpdCB4ZShlLmJhc2VVcmwsIHUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiID0gYXdhaXQgcC5sb2FkUGF5bWVudERhdGEodSk7XG4gICAgICBiZShcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIGIpO1xuICAgICAgY29uc3QgRSA9IHRyKHQsIGIpLCBDID0gWChFLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4uQ1xuICAgICAgfSk7XG4gICAgICBjb25zdCBJID0gKF8gPSAobSA9IGIucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBtLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfLnRva2VuO1xuICAgICAgaWYgKCFJKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IE0gPSBhd2FpdCBoZShkLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IENbZi5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBDW2YuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IENbZi5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBDW2YuWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnk6IENbZi5DT1VOVFJZXVxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9sYW5ndWFnZToga2UoKVxuICAgICAgfSk7XG4gICAgICBiZShcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBNKTtcbiAgICAgIGNvbnN0IFAgPSBhd2FpdCAkKGQsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiB5LnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uR09PR0xFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgICAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKCEoKHYgPSAoaCA9IFAucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogaFswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHYuaWQpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIHJldHVybiBTZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBkLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogQyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogUCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoYikge1xuICAgICAgdGhyb3cgQmUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgYiksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogYlxuICAgICAgfSksIG5ldyBFcnJvcigoYiA9PSBudWxsID8gdm9pZCAwIDogYi5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBhYywgZXJyX186IHpuIH0gPSBTKFwicG9ja3l0LWNjXCIpLCBpYyA9IHoub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHouc3RyaW5nKClcbn0pLCBzYyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBpYy5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbiA9IGBQb2NreXQgM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gO1xuICAgIHRocm93IHpuKG4pLCBuZXcgRXJyb3Iocik7XG4gIH1cbiAgcmV0dXJuIHQuZGF0YTtcbn0sIHFuID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0gbmV3IFVSTChlID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJ2YXVsdElkXCIpO1xuICAgIGlmICghdClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHZhdWx0IElEIGZvdW5kIGluIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBhYyhgM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbVmF1bHQgSUQ6ICR7dH1dYCksIHQ7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBjb25zdCByID0gXCJFcnJvciB2ZXJpZnlpbmcgM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgem4ociwgYFJlc3VsdGluZyBVUkw6ICR7ZX0uXG5FcnJvcjogJHtaKHQpfWApLCBuZXcgRXJyb3Iocik7XG4gIH1cbn0sIEx0ID0gKGUsIHQpID0+IG5ldyBVUkwoZSkuc2VhcmNoUGFyYW1zLmdldCh0KSwgY2MgPSAoZSkgPT4gKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbXCJvcC1wb2NreXQtM2RzLXVybFwiXSkgIT09IHZvaWQgMCwgbGMgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gc2ModCksIG4gPSBhd2FpdCB2bih7IHVybDogcltcIm9wLXBvY2t5dC0zZHMtdXJsXCJdLCBiYXNlVXJsOiBlIH0pO1xuICByZXR1cm4ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICB2YXVsdF9pZDogcW4obi5ocmVmID8/IFwiXCIpLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IHJbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiByW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbn0sIHsgbG9nX186IGdyIH0gPSBTKFwic3RyaXBlLWNjXCIpLCB1YyA9IHoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pLCBCbiA9IGFzeW5jIChlKSA9PiB7XG4gIGcoXCIzZHNfc3RyaXBlX3JlZGlyZWN0XCIsIHtcbiAgICAuLi5lXG4gIH0pLCBncihg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtlLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKSwgYXdhaXQgX2koZSksIGcoXCIzZHNfc3RyaXBlX2NvbXBsZXRlXCIpLCBncihcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn0sIGRjID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IHVjLnNhZmVQYXJzZShlKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgM0RTIG1ldGFkYXRhIGhhcyB1bmV4cGVjdGVkIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeSh0LmVycm9yLmVycm9ycyl9YCk7XG4gIHJldHVybiB7XG4gICAgc3RyaXBlX3BrOiB0LmRhdGEuc3RyaXBlX3BrLFxuICAgIGNsaWVudF9zZWNyZXQ6IHQuZGF0YS5jbGllbnRfc2VjcmV0LFxuICAgIHN0cmlwZV9wbV9pZDogdC5kYXRhLnN0cmlwZV9wbV9pZFxuICB9O1xufSwgcGMgPSA0LCB7IGxvZ19fOiBQZSwgZXJyX186IFV0IH0gPSBTKFwidW5pZmllZC1jY1wiKSwgbWMgPSBhc3luYyAoe1xuICBjb250ZXh0OiBlLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gIGZvcm1DYWxsYmFja3M6IG4sXG4gIGN1c3RvbVBhcmFtczogb1xufSkgPT4ge1xuICBQZShcIuKUnCBSdW5uaW5nIHVuaWZpZWQgQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCB9KTtcbiAgY29uc3QgaSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IFQoaSk7XG4gIFBlKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3MubW9kZX1dYCk7XG4gIGNvbnN0IGMgPSBYKHIsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgbCA9IHtcbiAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IGMsXG4gICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICAgIC8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgaW4gdGhlIGNoZWNrb3V0IGF0dGVtcHQgbG9nc1xuICAgICAgZGV2aWNlVG9rZW46IGhuKClcbiAgICB9LFxuICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6ICEwLFxuICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzoge1xuICAgICAgbGluZV9pdGVtczogcy5saW5lX2l0ZW1zLFxuICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBzLmFtb3VudF90b3RhbF9hdG9tXG4gICAgfSxcbiAgICBwYXltZW50X3JvdXRlX2lkOiBvLnBheW1lbnRSb3V0ZUlkXG4gIH07XG4gIFV0KG8sIGwpLCBQZShg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIFBhcnRpYWwgUE1zIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICBjb25zdCB1ID0gYXdhaXQgdW4oby5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkXG4gIH0pO1xuICBMbih1LCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gIGNvbnN0IGQgPSBhd2FpdCBsbihpLCBsKTtcbiAgaWYgKFBlKFwi4pScIHN0YXJ0UGYgcmVzdWx0XCIsIGQpLCBkLmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgcmV0dXJuIFluKHMubW9kZSwgZCk7XG4gIGlmICghZC5jaGVja291dF9hdHRlbXB0X2lkKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIGNoZWNrb3V0IGF0dGVtcHQgSUQgZnJvbSBQRiByZXN1bHRcIik7XG4gIHJldHVybiBmYyh7XG4gICAgY29udGV4dDogZSxcbiAgICBwcmVmaWxsOiBzLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXM6IGwsXG4gICAgYW55Q2RlQ29ubmVjdGlvbjogaSxcbiAgICBzdGFydFBmUmVzdWx0OiBkLFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkOiBkLmNoZWNrb3V0X2F0dGVtcHRfaWRcbiAgfSk7XG59LCBmYyA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb250ZXh0OiB0LFxuICAgIHByZWZpbGw6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogbixcbiAgICBjb21tb25DaGVja291dFBhcmFtczogbyxcbiAgICBhbnlDZGVDb25uZWN0aW9uOiBpLFxuICAgIHN0YXJ0UGZSZXN1bHQ6IHMsXG4gICAgY2hlY2tvdXRBdHRlbXB0SWQ6IGNcbiAgfSA9IGU7XG4gIGxldCBsID0gcztcbiAgZm9yIChsZXQgdSA9IDA7IHUgPCBwYzsgdSsrKSB7XG4gICAgUGUoYOKUnCBSdW5uaW5nIGNvbmZpcm0gbG9vcCBpdGVyYXRpb24gJHt1fWApO1xuICAgIGNvbnN0IHsgdXNlckFjdGlvbjogZCB9ID0gaGMobCksIHkgPSBhd2FpdCB5Yyh0LmJhc2VVcmwsIGQsIHIsIG4pO1xuICAgIGlmIChvLmV4dHJhX21ldGFkYXRhID0ge1xuICAgICAgLi4uby5leHRyYV9tZXRhZGF0YSxcbiAgICAgIC4uLnkubWV0YWRhdGFGb3JDb25maXJtU3RlcFxuICAgIH0sIFBlKFwi4pScIE5ldyBleHRyYSBtZXRhZGF0YVwiLCBvLmV4dHJhX21ldGFkYXRhKSwgbCA9IGF3YWl0ICQoaSwge1xuICAgICAgc2VjdXJlX3Rva2VuOiByLnRva2VuLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogYyxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogby5leHRyYV9tZXRhZGF0YVxuICAgIH0pLCBQZShg4pScIGNvbmZpcm1QZiByZXN1bHQgKGl0ZXJhdGlvbiAke3V9KWAsIGwpLCBsLmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICByZXR1cm4gWW4oci5tb2RlLCBsKTtcbiAgfVxuICB0aHJvdyBnKFwidW5pZmllZF9jY191bmV4cGVjdGVkX2JyYW5jaFwiLCB7XG4gICAgc2VjdXJlX3Rva2VuOiByLnRva2VuLFxuICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGwuY2hlY2tvdXRfYXR0ZW1wdF9pZCxcbiAgICBjb25maXJtUEZSZXN1bHQ6IGxcbiAgfSksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGVycm9yLCBwbGVhc2UgdHJ5IGFub3RoZXIgcGF5bWVudCBtZXRob2RcIik7XG59LCB5YyA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiB7XG4gIGlmICh0Ll91bmlmaWVkX2NjX2FjdGlvbl9uYW1lID09PSBcIjNEU19SRVFVSVJFRFwiKSB7XG4gICAgaWYgKHQudHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpXG4gICAgICByZXR1cm4gYXdhaXQgQm4oZGModCkpLCB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHt9IH07XG4gICAgaWYgKEVuKHQpKVxuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDogeyBhaXJ3YWxsZXg6IGF3YWl0IENuKGUsIHQpIH0gfTtcbiAgICBpZiAoVG4odCkpXG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFkeWVuOiBhd2FpdCBGbihcbiAgICAgICAgbltmLkNPVU5UUlldLFxuICAgICAgICB0LFxuICAgICAgICByLmxvY2FsZVxuICAgICAgKSB9IH07XG4gICAgaWYgKF9jKHQpKVxuICAgICAgcmV0dXJuIGF3YWl0IEpuKHsgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBbdF0gfSwgZSksIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCAzRFMgdXNlciBhY3Rpb246ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gIH0gZWxzZVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByZXF1aXJlZCB1c2VyIGFjdGlvbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbn0sIF9jID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSG4oW2VdKSwgITA7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAhMTtcbiAgfVxufSwgaGMgPSAoZSkgPT4ge1xuICBpZiAoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpIHtcbiAgICBpZiAoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoID09PSAwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gcmVxdWlyZWQgdXNlciBhY3Rpb25zXCIpO1xuICAgIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggPiAxKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbXVsdGlwbGUgcmVxdWlyZWQgdXNlciBhY3Rpb25zXCIpO1xuICB9IGVsc2UgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gcmVxdWlyZWQgdXNlciBhY3Rpb25zXCIpO1xuICBjb25zdCB0ID0gS28uc2FmZVBhcnNlKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpXG4gICAgdGhyb3cgVXQoXCJVc2VyIGFjdGlvbiByYXcgcGF5bG9hZFwiLCBlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSksIFV0KFwiUGFyc2luZyBlcnJvclwiLCB0LmVycm9yKSwgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogc2NoZW1hIG9mIHVzZXIgYWN0aW9uIHBheWxvYWQgaXMgbm90IHZhbGlkXCIpO1xuICByZXR1cm4ge1xuICAgIHVzZXJBY3Rpb246IHQuZGF0YVxuICB9O1xufSwgWW4gPSAoZSwgdCkgPT4ge1xuICB2YXIgcjtcbiAgaWYgKGUgPT09IFwic2V0dXBcIikge1xuICAgIGNvbnN0IG4gPSB0LmNjX3BtX2lkID8/ICgociA9IHQucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogclswXS5pZCk7XG4gICAgaWYgKCFuKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gQ0MgUE0gSUQgb3IgcGF5bWVudF9tZXRob2RzIGZvdW5kIGluIFBGIHJlc3VsdFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBuXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIXQuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIGNoZWNrb3V0IHN1Y2Nlc3MgcmVzcG9uc2UgZnJvbSBzdGFydFBGXCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IHQuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZVxuICAgIH07XG4gIH1cbn0sIHsgbG9nX186IGssIGVycl9fOiB3ciB9ID0gUyhcImNvbW1vbi1jY1wiKTtcbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgZ2MgPSBRKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBtLCBfO1xuICAgIGsoXCLilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCB9KTtcbiAgICBjb25zdCBpID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgVChpKTtcbiAgICBnKFwiY29tbW9uX2NjX2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICAuLi50LFxuICAgICAgcHJlZmlsbDogc1xuICAgIH0pO1xuICAgIGNvbnN0IGMgPSAoKG0gPSBzLmZpbmFsX2ZlYXR1cmVfcm9sbG91dF9zZXR0aW5ncykgPT0gbnVsbCA/IHZvaWQgMCA6IG0udW5pZmllZF9jYykgPz8gMDtcbiAgICBrKGDilJwgVW5pZmllZCBDQyByb2xsb3V0OiAke01hdGgucm91bmQoYyAqIDEwMCl9JWApO1xuICAgIGNvbnN0IGwgPSBNYXRoLnJhbmRvbSgpLCB1ID0gbCA8IGMsIGQgPSB7XG4gICAgICByb2xsOiBsLFxuICAgICAgdW5pZmllZENDUm9sbG91dFJhdGlvOiBjLFxuICAgICAgdXNlVW5pZmllZENDRmxvdzogdVxuICAgIH07XG4gICAgaWYgKHUpXG4gICAgICByZXR1cm4gayhg4pScIFBpY2tlZCB1bmlmaWVkIENDIGZsb3cgKCR7bH0gdnMgJHtjfSlgKSwgZyhcInVuaWZpZWRfY2NfZmxvd19waWNrZWRcIiwgZCksIG1jKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICBjdXN0b21QYXJhbXM6IG8sXG4gICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgfSk7XG4gICAgayhg4pScIFBpY2tlZCBsZWdhY3kgQ0MgZmxvdyAoJHtsfSB2cyAke2N9KWApLCBnKFwibGVnYWN5X2NjX2Zsb3dfcGlja2VkXCIsIGQpLCBrKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3MubW9kZX1dYCk7XG4gICAgY29uc3QgeSA9IFgociwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ueVxuICAgIH0pO1xuICAgIGNvbnN0IHAgPSB7XG4gICAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICBub25fY2RlX2Zvcm1fZmllbGRzOiB5LFxuICAgICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgICAgb3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICB9LFxuICAgICAgdXNlX3VuaWZpZWRfY2NfZmxvdzogITEsXG4gICAgICBwYXltZW50X3JvdXRlX2lkOiBvLnBheW1lbnRSb3V0ZUlkLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGtlKClcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBrKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgaCA9IGF3YWl0IHVuKG8uY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgaWYgKExuKGgsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgayhg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtzLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgdiA9IGF3YWl0IGlzKGksIHApO1xuICAgICAgICByZXR1cm4gayhg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke3YucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiB2IH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgdiA9IGF3YWl0IHlyKGksIHApO1xuICAgICAgICByZXR1cm4gayhcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogdiB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgIGlmIChoIGluc3RhbmNlb2YgY24gJiYgaC5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICBrKFwi4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd1wiKSwgayhcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBoLnJlc3BvbnNlLmhlYWRlcnMpLCBnKFwiM2RzX3JlcXVpcmVkXCIsIHtcbiAgICAgICAgICAuLi50LFxuICAgICAgICAgIC4uLmgucmVzcG9uc2UuaGVhZGVyc1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdiA9IGgucmVzcG9uc2UuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiIGluIHYgJiYgKHAuZXhpc3RpbmdfY2NfcG1faWQgPSB2W1wib3AtZXhpc3RpbmctY2MtcG0taWRcIl0sIGsoYOKUnCBFeGlzdGluZyBDQyBQTSBJRDogJHtwLmV4aXN0aW5nX2NjX3BtX2lkfWApKTtcbiAgICAgICAgY29uc3QgYiA9IGNjKGgucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGlmIChiKSB7XG4gICAgICAgICAgayhcIuKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBGID0gYXdhaXQgbGMoZS5iYXNlVXJsLCBoLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIHAuZXh0cmFfbWV0YWRhdGEucG9ja3l0ID0gRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoRW4oaC5yZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgIGsoXCLilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgRiA9IGF3YWl0IENuKGUuYmFzZVVybCwgaC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBwLmV4dHJhX21ldGFkYXRhLmFpcndhbGxleCA9IEY7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFRuKGgucmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgICBrKFwi4pScIEFkeWVuIDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFkeWVuIDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBGID0gYXdhaXQgRm4oXG4gICAgICAgICAgICByW2YuQ09VTlRSWV0sXG4gICAgICAgICAgICBoLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICBzLmxvY2FsZVxuICAgICAgICAgICk7XG4gICAgICAgICAgcC5leHRyYV9tZXRhZGF0YS5hZHllbiA9IEY7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgSSA9IGF3YWl0IGxuKGksIHApO1xuICAgICAgICBrKFwi4pScIFN0YXJ0IHBheW1lbnQgZmxvdyByZXN1bHQ6XCIsIEkpO1xuICAgICAgICBjb25zdCBNID0gKChfID0gaC5yZXNwb25zZS5oZWFkZXJzKSA9PSBudWxsID8gdm9pZCAwIDogX1tcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0pICE9PSBcInRydWVcIjtcbiAgICAgICAgYiA/IGsoXCLilJwgUHJlLXN0YXJ0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLlwiKSA6IE0gPyAoayhcIuKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dcIiksIGF3YWl0IEJuKHdjKEkpKSkgOiAoayhcIuKUnCBVc2luZyBjb21tb24gM0RTIGZsb3dcIiksIGF3YWl0IEpuKEksIGUuYmFzZVVybCkpO1xuICAgICAgICBjb25zdCBQID0gSS5jY19wbV9pZDtcbiAgICAgICAgaWYgKHMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgayhg4pScIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IFtjY19wbV9pZDogJHtQfV1gKTtcbiAgICAgICAgICBjb25zdCBGID0gYXdhaXQgJChpLCB7XG4gICAgICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogUFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGsoXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgRik7XG4gICAgICAgICAgY29uc3QgWSA9IG90KEYpO1xuICAgICAgICAgIHJldHVybiBrKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7WS5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IFkgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBrKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke00gPyBcImxlZ2FjeVwiIDogXCJuZXdcIn1dYCk7XG4gICAgICAgICAgY29uc3QgRiA9IGF3YWl0IHlyKGksIHtcbiAgICAgICAgICAgIC4uLnAsXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogUCxcbiAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IE1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gayhcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogRiB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyB3cihcIuKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERVwiKSwgd3IoaCksIGg7XG4gICAgfVxuICB9XG4pLCB3YyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChyKSA9PiByLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gbGkucGFyc2UodCk7XG59LCB2YyA9IFtcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiwgXCJhZHllblwiXSwgSG4gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5maW5kKChyKSA9PiB2Yy5pbmNsdWRlcyhyLnR5cGUpKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gSW8ucGFyc2UodCk7XG59LCBKbiA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBIbihlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gIGlmIChyLnJlZGlyZWN0X3VybCA9PT0gXCIzRFNfQ09NUExFVEVcIikge1xuICAgIGsoXCLilJwgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKSwgZyhcIjNkc19jb21wbGV0ZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgayhg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke3IucmVkaXJlY3RfdXJsfV1gKSwgZyhcIjNkc19yZWRpcmVjdFwiLCB7XG4gICAgLi4uclxuICB9KTtcbiAgY29uc3QgeyBzdGF0dXM6IG4gfSA9IGF3YWl0IG50KHsgdXJsOiByLnJlZGlyZWN0X3VybCwgYmFzZVVybDogdCB9KTtcbiAgaWYgKGsoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke259XWApLCBuID09PSBELkNBTkNFTExFRClcbiAgICB0aHJvdyBnKFwiM2RzX2NhbmNlbGxlZFwiKSwgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChuID09PSBELkZBSUxVUkUpXG4gICAgdGhyb3cgZyhcIjNkc19mYWlsdXJlXCIpLCBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgZyhcImNvbW1vbl8zZHNfY29tcGxldGVkXCIpO1xufSwgYmMgPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJsb29wXCIpLFxuICBwcm92aWRlcjogei5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIG1lcmNoYW50X2lkOiB6LnN0cmluZygpLFxuICAgIGVudGl0eV9pZDogei5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHouc3RyaW5nKCksXG4gICAgc3VwcG9ydGVkX2N1cnJlbmNpZXM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKClcbiAgfSlcbn0pLCB7IGxvZ19fOiBILCBlcnJfXzogS24gfSA9IFMoXCJsb29wLWNyeXB0b1wiKSwgRWMgPSB6Lm9iamVjdCh7XG4gIGxvb3BGaXJzdE5hbWU6IE8sXG4gIGxvb3BMYXN0TmFtZTogTyxcbiAgbG9vcEVtYWlsOiBPLFxuICBbZi5QUk9NT1RJT05fQ09ERV06IEFcbn0pLCBDYyA9IHoub2JqZWN0KHtcbiAgbG9vcEZpcnN0TmFtZTogQSxcbiAgbG9vcExhc3ROYW1lOiBBLFxuICBsb29wRW1haWw6IEEsXG4gIFtmLlBST01PVElPTl9DT0RFXTogQVxufSksIHZyID0gKGUsIHQsIHIsIG4pID0+IHtcbiAgY29uc3QgbyA9IHIuc2FmZVBhcnNlKGUpO1xuICBpZiAoIW8uc3VjY2Vzcykge1xuICAgIGNvbnN0IGkgPSBvLmVycm9yLmZvcm1hdCgpLCBzID0gZ24oaSk7XG4gICAgZm9yIChjb25zdCBbYywgbF0gb2YgT2JqZWN0LmVudHJpZXMocykpXG4gICAgICB0KGMsIGwsIGMpO1xuICAgIHRocm93IEtuKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgcyksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiBvLmRhdGE7XG59LCBQYyA9IG1lKFxuICBhc3luYyAoeyBjb250ZXh0OiBlIH0pID0+IHtcbiAgICBIKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBMb29wIENyeXB0by4uLlwiKTtcbiAgICBjb25zdCB0ID0gRyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGJjKTtcbiAgICBIKGBjaGVja291dFBheW1lbnRNZXRob2Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCksIEgoXCJTdGFydGluZyBMb29wIENyeXB0byBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHIgPSBhd2FpdCBUKGUuYW55Q2RlQ29ubmVjdGlvbiksIG4gPSByLm1vZGUgPT09IFwic2V0dXBcIiwgbyA9IGF3YWl0IEV0KGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHRcbiAgICB9KSwgaSA9IGF3YWl0IGZlKFxuICAgICAgZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgci50b2tlbixcbiAgICAgIG4sXG4gICAgICB2b2lkIDBcbiAgICApO1xuICAgIGlmICghbiAmJiAhdC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llcy5pbmNsdWRlcyhyLmN1cnJlbmN5KSlcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ3VycmVuY3kgJHtyLmN1cnJlbmN5fSBub3QgZW5hYmxlZCBmb3IgTG9vcC4gRW5hYmxlZCBjdXJyZW5jaWVzOiAke3QubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXN9YFxuICAgICAgKTtcbiAgICBpZiAoIW8gfHwgIW8ubmV4dF9hY3Rpb25fbWV0YWRhdGEpXG4gICAgICB0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBmZXRjaCBuZWNlc3Nhcnkgc2V0dXAgZGF0YSBmb3IgTG9vcFwiKTtcbiAgICBjb25zdCBzID0gby5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBsZXQgYyA9IHMuYXV0aG9yaXphdGlvbl9hbW91bnQsIGwgPSBzLm1pbl9hdXRob3JpemF0aW9uX2Ftb3VudDtcbiAgICBjb25zdCB1ID0gcy5hbGxvd19jdXN0b21lcl90b19jaG9vc2VfYXV0aDtcbiAgICBsZXQgZDtcbiAgICBuID8gKGQgPSAwLCBjID0gTWF0aC5tYXgoYywgbCkpIDogKGQgPSAoaSA/IGkuYW1vdW50QXRvbSA6IHIuYW1vdW50X3RvdGFsX2F0b20pICogcy50b2tlbl9wcmljZSwgbCA9IE1hdGgubWF4KGwsIGQpLCBjID0gTWF0aC5tYXgoYywgbCkpO1xuICAgIGNvbnN0IHkgPSBkLCBwID0gdjQoKSwgbSA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQ6IHksXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50OiBjLFxuICAgICAgY3VzdG9tZXJSZWZJZDogcCxcbiAgICAgIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQ6IGwsXG4gICAgICBhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoOiB1XG4gICAgfSwgXyA9IHtcbiAgICAgIGFwaUtleTogdC5tZXRhZGF0YS5hcGlfdG9rZW4sXG4gICAgICBlbnRpdHlJZDogdC5tZXRhZGF0YS5lbnRpdHlfaWQsXG4gICAgICBtZXJjaGFudElkOiB0Lm1ldGFkYXRhLm1lcmNoYW50X2lkLFxuICAgICAgZW52aXJvbm1lbnQ6IHQubWV0YWRhdGEuZW52aXJvbm1lbnRcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICB3aWRnZXRQcm9wczogbSxcbiAgICAgIGluaXRMb29wQ29ubmVjdFByb3BzOiBfXG4gICAgfTtcbiAgfVxuKSwgU2MgPSBRKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIEgoXCJSdW5uaW5nIExvb3AgZmxvdy4uLlwiKSwgSChcImNvbnRleHRcIiwgZSksIEgoXCJjaGVja291dFBheW1lbnRNZXRob2RcIiwgdCksIEgoXCJub25DZGVGb3JtSW5wdXRzXCIsIHIpLCBIKFwiZmxvd0NhbGxiYWNrc1wiLCBuKSwgSChcImN1c3RvbVBhcmFtc1wiLCBvKTtcbiAgICBsZXQgaTtcbiAgICBvICE9IG51bGwgJiYgby5zdWNjZXNzID8gaSA9IHZyKFxuICAgICAgcixcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgRWNcbiAgICApIDogaSA9IHZyKFxuICAgICAgcixcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgQ2NcbiAgICApO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBUKGUuYW55Q2RlQ29ubmVjdGlvbiksIGwgPSBjLm1vZGUgIT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGhlKGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBpLmxvb3BFbWFpbCxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBpLmxvb3BGaXJzdE5hbWUsXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBpLmxvb3BMYXN0TmFtZSxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogbCxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogbCA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogYy5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IGMuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZToga2UoKVxuICAgIH0pO1xuICAgIGlmICghbylcbiAgICAgIHRocm93IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBGYWlsZWQgdG8gcHJvcGVybHkgc3VibWl0IGZvcm0gZGF0YS5cIik7XG4gICAgY29uc3QgZCA9IGF3YWl0ICQocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgLy8gVE9ETzogV2UgZG9uJ3QgaGF2ZSBhIHBheWluIG9uIHNldHVwXG4gICAgICB0aGVpcl9wbV9pZDogby5zdWNjZXNzICYmIG8ubW9kZSA9PSBcImNoZWNrb3V0XCIgPyBvLnBheWluLnBheW1lbnRNZXRob2QucGF5bWVudE1ldGhvZElkIDogdm9pZCAwLFxuICAgICAgLy8gTk9URTogd2UgZG8gaGF2ZSB0aGUgY2hlY2tvdXQgYXR0ZW1wdCBpZCBoZXJlIGV2ZW4gaWYgaXRzIGEgc2V0dXAsIGJ1dCBmb3Igbm93IHdlIGRvbid0IGluY2x1ZGUgaXRcbiAgICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBjaGVja291dCBhdHRlbXB0IHN1cHBvcnQgZm9yIHNldHVwIGludGVudHMuXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBsID8gdS5jaGVja291dF9hdHRlbXB0X2lkIDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGxvb3BfY3VzdG9tZXI6IG8uc3VjY2VzcyA/IG8uY3VzdG9tZXIgOiB2b2lkIDAsXG4gICAgICAgIGxvb3BfcGF5aW46IG8uc3VjY2VzcyAmJiBvLm1vZGUgPT0gXCJjaGVja291dFwiID8gby5wYXlpbiA6IHZvaWQgMCxcbiAgICAgICAgbG9vcF9mYWlsdXJlX2RldGFpbHM6IG8uc3VjY2VzcyA/IHZvaWQgMCA6IG8uZmFpbHVyZURldGFpbHMsXG4gICAgICAgIGxvb3BfZGVidWdfaW5mbzogby5zdWNjZXNzID8gdm9pZCAwIDogby5kZWJ1Z0luZm8sXG4gICAgICAgIGxvb3Bfc3VjY2Vzczogby5zdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKEgoYENvbmZpcm0gcmVzdWx0OiAke2R9YCksIGMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBIKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKSwgSChcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCBkKTtcbiAgICAgIGNvbnN0IHkgPSBvdChkKTtcbiAgICAgIHJldHVybiBIKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7eS5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IHkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEgoXCJEb2luZyBjaGVja291dC4uLlwiKSwgIWQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICAgIHRocm93IEtuKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgZCksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4pLCBrYyA9ICgpID0+IHtcbiAgY29uc3QgZSA9IHY0KCkuc3BsaXQoXCItXCIpWzBdO1xuICByZXR1cm4ge1xuICAgIGZpcnN0TmFtZTogYHh4XyR7ZX1gLFxuICAgIGxhc3ROYW1lOiBgeHhfJHtlfWAsXG4gICAgZW1haWw6IGB4eF8ke2V9QGVtYWlsLmNvbWAsXG4gICAgemlwQ29kZTogYHh4XyR7ZX1gLFxuICAgIGNvdW50cnk6IFwiVVNcIlxuICB9O1xufSwgeyBsb2dfXzogdmUsIGVycl9fOiBBYyB9ID0gUyhcInBheXBhbFwiKSwgV24gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJwYXlwYWxcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7IGNsaWVudF9pZDogei5zdHJpbmcoKSB9KSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSksIEljID0gYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gIGNvbnN0IHIgPSBHKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgV24pO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBzdGFydEZsb3c6ICgpID0+IFIucGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogSihlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pXG4gIH07XG59LCBSYyA9IFEoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogb1xuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHZlKFwiUnVubmluZyBQYXlQYWwgZmxvdy4uLlwiKTtcbiAgICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBUKGkpLCB7IGlzQW5vbnltb3VzOiBjLCB1c2VSZWRpcmVjdEZsb3c6IGwgfSA9IG8uc2V0dGluZ3MgPz8ge307XG4gICAgICB2ZShcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgICBjb25zdCB1ID0gV24ucGFyc2Uocik7XG4gICAgICB2ZShcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgICBjb25zdCBkID0gWChcbiAgICAgICAgdCxcbiAgICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGMgPyBrYygpIDogdm9pZCAwXG4gICAgICApLCB5ID0gSW4oZCk7XG4gICAgICB2ZShgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7cy5tb2RlfWApO1xuICAgICAgY29uc3QgcCA9IHY0KCksIG0gPSBzLm1vZGUgIT09IFwic2V0dXBcIiwgXyA9IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdS5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHUsXG4gICAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogbSxcbiAgICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBtID8ge1xuICAgICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgICAgbGluZV9pdGVtczogcy5saW5lX2l0ZW1zLFxuICAgICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgICB9IDogdm9pZCAwLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6IGwsXG4gICAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IHBcbiAgICAgICAgfSxcbiAgICAgICAgLi4ueVxuICAgICAgfSwgaCA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIGUuYmFzZVVybCkudG9TdHJpbmcoKSwgdiA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoXykpLCBiID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgIHN0OiBzLnRva2VuLFxuICAgICAgICByOiB2XG4gICAgICB9KSwgRSA9IGAke2h9PyR7Yi50b1N0cmluZygpfWA7XG4gICAgICBpZiAobClcbiAgICAgICAgdGhyb3cgdmUoXCJTdGFydGluZyByZWRpcmVjdCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gRSwgYXdhaXQgYnQoMjAgKiAxZTMpLCBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIGNvbnN0IEMgPSBhd2FpdCBibihcbiAgICAgICAgXCJQYXlQYWxcIixcbiAgICAgICAgaSxcbiAgICAgICAgcCxcbiAgICAgICAgRVxuICAgICAgKTtcbiAgICAgIHZlKFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIEMpO1xuICAgICAgY29uc3QgSSA9IEx0KEMuaHJlZiwgXCJjYXR0XCIpLCBNID0gTHQoQy5ocmVmLCBcImFwcHJvdmFsX3Nlc3Npb25faWRcIiksIFAgPSBhd2FpdCAkKGksIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBzLnRva2VuLFxuICAgICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBtID8gSSA6IHZvaWQgMCxcbiAgICAgICAgdGhlaXJfcG1faWQ6IG0gPyBNIDogdm9pZCAwXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB2ZShcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBQKSwgU2Uoe1xuICAgICAgICBsb2dQcmVmaXg6IFwicGF5cGFsXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IGksXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdSxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBkLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBQLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IG1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGkpIHtcbiAgICAgIHRocm93IEFjKFwiUGF5UGFsIHBheW1lbnQgZXJyb3JcIiwgaSksIGcoXCJjaGVja291dF9lcnJvclwiLCB7IHBheW1lbnRfbWV0aG9kOiBcInBheXBhbFwiLCBlcnJvcjogaSB9KSwgbmV3IEVycm9yKChpID09IG51bGwgPyB2b2lkIDAgOiBpLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IGFlLCBlcnJfXzogYnIgfSA9IFMoXCJwb2NreXQtcGF5cGFsXCIpLCBUYyA9IHoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHouc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IEZjID0gUShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvXG4gIH0pID0+IHtcbiAgICB2YXIgUCwgRjtcbiAgICBhZShcIlJ1bm5pbmcgUG9ja3l0IFBheXBhbCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBUKGkpO1xuICAgIGFlKFwiVmVyaWZ5aW5nIENQTS4uLlwiKTtcbiAgICBjb25zdCBjID0gVGMucGFyc2UodCk7XG4gICAgYWUoXCLilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICAgIGNvbnN0IGwgPSBvID09IG51bGwgPyB2b2lkIDAgOiBvLnNldHRpbmdzLCB1ID0gWChcbiAgICAgIHIsXG4gICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKSwgZCA9IEluKHUpO1xuICAgIGFlKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtzLm1vZGV9YCk7XG4gICAgY29uc3QgeSA9IHY0KCksIHAgPSBzLm1vZGUgIT09IFwic2V0dXBcIiwgbSA9IHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGMucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogYyxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogcCxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogcCA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogcy5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHMuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiAhISgoUCA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uc2V0dGluZ3MpICE9IG51bGwgJiYgUC51c2VSZWRpcmVjdEZsb3cpLFxuICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogeVxuICAgICAgfSxcbiAgICAgIC4uLmRcbiAgICB9LCBfID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgZS5iYXNlVXJsKS50b1N0cmluZygpLCBoID0gYnRvYShKU09OLnN0cmluZ2lmeShtKSksIHYgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgIHN0OiBzLnRva2VuLFxuICAgICAgcjogaFxuICAgIH0pLCBiID0gYCR7X30/JHt2LnRvU3RyaW5nKCl9YDtcbiAgICBpZiAoKEYgPSBvID09IG51bGwgPyB2b2lkIDAgOiBvLnNldHRpbmdzKSAhPSBudWxsICYmIEYudXNlUmVkaXJlY3RGbG93KVxuICAgICAgdGhyb3cgYWUoXCJTdGFydGluZyByZWRpcmVjdCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYiwgYXdhaXQgYnQoMjAgKiAxZTMpLCBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICBhZShcIlN0YXJ0aW5nIHBvcHVwIG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgYWUoXCJPcGVuaW5nIHBheXBhbCBpZnJhbWUuLi5cIik7XG4gICAgY29uc3QgRSA9IGF3YWl0IGJuKFxuICAgICAgXCJQYXlQYWxcIixcbiAgICAgIGksXG4gICAgICB5LFxuICAgICAgYlxuICAgICk7XG4gICAgYWUoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgRSk7XG4gICAgY29uc3QgQyA9IHFuKEUuaHJlZiksIEkgPSBMdChFLmhyZWYsIFwiY2F0dFwiKTtcbiAgICBpZiAoIUkpXG4gICAgICB0aHJvdyBicihcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTDpcIiwgRS5ocmVmKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMXCIpO1xuICAgIGFlKGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyB1c2luZyB2YXVsdCBJRCAke0N9YCk7XG4gICAgY29uc3QgTSA9IGF3YWl0ICQoaSwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBzLnRva2VuLFxuICAgICAgdGhlaXJfcG1faWQ6IEMsXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBwID8gSSA6IHZvaWQgMFxuICAgIH0pO1xuICAgIGlmIChhZShcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBNKSwgcy5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBNLnBheW1lbnRfbWV0aG9kc1swXS5pZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIGlmICghTS5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHRocm93IGJyKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgTSksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IE0ucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICB9O1xuICB9XG4pLCBFciA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiLCB7IGxvZ19fOiBqLCBlcnJfXzogTmMgfSA9IFMoXCJzdHJpcGUtbGlua1wiKSwgTWMgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pLCBEYyA9IHouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpLCBPYyA9IG1lKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0gZS5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgaihcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIExpbmsuLi5cIik7XG4gICAgY29uc3QgbiA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBNYyk7XG4gICAgaihcIlN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgbyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgaSA9IGF3YWl0IFQobyksIHMgPSBpLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBqKFwiQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBmZShvLCBpLnRva2VuLCBzLCB2b2lkIDApLCB7IGVsZW1lbnRzOiBsLCBzdHJpcGU6IHUgfSA9IGF3YWl0IHBpKG4ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogYy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgaihcIkNyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgZCA9IGwuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogciA9PSBudWxsID8gdm9pZCAwIDogci5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSksIHkgPSAoKSA9PiB7XG4gICAgICBkLm1vdW50KGAjJHtFcn1gKTtcbiAgICB9LCBwID0gKCkgPT4ge1xuICAgICAgZC51bm1vdW50KCk7XG4gICAgfTtcbiAgICByZXR1cm4gciAhPSBudWxsICYmIHIuZG9Ob3RNb3VudE9uSW5pdCA/IGooXCJOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpXCIpIDogKGooXCJNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5cIiksIHkoKSksIGQub24oXCJjbGlja1wiLCBhc3luYyAobSkgPT4ge1xuICAgICAgaWYgKGooXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKSwgciAhPSBudWxsICYmIHIub3ZlcnJpZGVMaW5rU3VibWl0ICYmICFhd2FpdCByLm92ZXJyaWRlTGlua1N1Ym1pdCgpKSB7XG4gICAgICAgIGooXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG0ucmVzb2x2ZSgpO1xuICAgIH0pLCBkLm9uKFwiY29uZmlybVwiLCBhc3luYyAobSkgPT4ge1xuICAgICAgaihcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgbSk7XG4gICAgICBjb25zdCBfID0gYXdhaXQgdS5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHM6IGwsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogbS5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIF8uZXJyb3IgPyAoTmMoXCJlcnJvclwiLCBfLmVycm9yKSwgdC5nZXQub25DaGVja291dEVycm9yKF8uZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIikpIDogKGooXCJwYXltZW50TWV0aG9kXCIsIF8ucGF5bWVudE1ldGhvZCksIFIuc3RyaXBlTGluay5ydW4oe1xuICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEooZS5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHN0cmlwZVBNOiBfLnBheW1lbnRNZXRob2QgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogITAgfVxuICAgICAgfSkpO1xuICAgIH0pLCB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBjb250cm9sbGVyOiB7XG4gICAgICAgIG1vdW50QnV0dG9uOiB5LFxuICAgICAgICBkaXNtb3VudEJ1dHRvbjogcCxcbiAgICAgICAgd2FpdEZvckJ1dHRvblRvTW91bnQ6IGFzeW5jICgpID0+IGF3YWl0IGpjKEVyKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiksIExjID0gUShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvXG4gIH0pID0+IHtcbiAgICBqKFwiUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb247XG4gICAgaihcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgcyA9IFVjKHIsIG8uc3RyaXBlUE0pLCBjID0gWChzLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5jXG4gICAgfSksIGooXCJTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IGhlKGksIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiBvLnN0cmlwZVBNLmlkLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBjW2YuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGNbZi5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGNbZi5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IGNbZi5aSVBfQ09ERV0sXG4gICAgICAgIGNvdW50cnk6IGNbZi5DT1VOVFJZXVxuICAgICAgfSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBrZSgpXG4gICAgfSk7XG4gICAgaihcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBsKTtcbiAgICBjb25zdCBkID0gRGMucGFyc2UobC5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdLm91cl9leGlzdGluZ19wbV9pZCwgeSA9IGF3YWl0IFQoaSk7XG4gICAgaWYgKHkubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBqKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IHAgPSBhd2FpdCAkKGksIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiB5LnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogb3QocCkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaihcIkRvaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgcCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiB5LnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogdC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogY1tmLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGNbZi5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGNbZi5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGNbZi5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHkubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHkuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBKdChpLCBwKSB9O1xuICAgIH1cbiAgfVxuKSwgVWMgPSAoZSwgdCkgPT4ge1xuICB2YXIgbCwgdSwgZCwgeSwgcDtcbiAgY29uc3QgciA9IHsgLi4uZSB9LCBbbiwgLi4ub10gPSAoKHUgPSAobCA9IHQuYmlsbGluZ19kZXRhaWxzLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBsLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IHUuc3BsaXQoL1xccysvKSkgPz8gW10sIGkgPSBvLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgcltmLkVNQUlMXSA9IHJbZi5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgKChkID0gdC5saW5rKSA9PSBudWxsID8gdm9pZCAwIDogZC5lbWFpbCkgfHwgdC5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCByW2YuWklQX0NPREVdID0gcltmLlpJUF9DT0RFXSB8fCAoKHkgPSB0LmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogeS5wb3N0YWxfY29kZSkgfHwgXCIwMDAwMFwiLCByW2YuQ09VTlRSWV0gPSByW2YuQ09VTlRSWV0gfHwgKChwID0gdC5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IHAuY291bnRyeSkgfHwgXCJVU1wiO1xuICBjb25zdCBzID0gcltmLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJcIiwgYyA9IHJbZi5MQVNUX05BTUVdIHx8IGkgfHwgXCJcIjtcbiAgcmV0dXJuIHMgfHwgYyA/IChyW2YuRklSU1RfTkFNRV0gPSBzLCByW2YuTEFTVF9OQU1FXSA9IGMpIDogKHJbZi5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgcltmLkxBU1RfTkFNRV0gPSBcIlwiKSwgaihcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCByKSwgcjtcbn0sIGpjID0gKGUpID0+IG5ldyBQcm9taXNlKCh0KSA9PiB7XG4gIGNvbnN0IHIgPSAoKSA9PiB7XG4gICAgY29uc3QgbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO1xuICAgIG4gPyB0KG4pIDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHIpO1xuICB9O1xuICByKCk7XG59KSwgeyBsb2dfXzogcSwgZXJyX186IHhjIH0gPSBTKFwic3RyaXBlLXByXCIpLCAkYyA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoudW5pb24oW3oubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSksIFZjID0gbWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIHEoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLlwiKTtcbiAgICBjb25zdCByID0gRyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsICRjKTtcbiAgICBxKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG4gPSBlLmFueUNkZUNvbm5lY3Rpb24sIG8gPSBhd2FpdCBUKG4pLCBpID0gby5tb2RlID09PSBcInNldHVwXCI7XG4gICAgcShcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBzID0gYXdhaXQgZmUobiwgby50b2tlbiwgaSwgdm9pZCAwKSwgYyA9IGF3YWl0IG1pKFxuICAgICAgci5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBzLmFtb3VudEF0b20sXG4gICAgICBzLmN1cnJlbmN5LFxuICAgICAgaVxuICAgICk7XG4gICAgcShcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IGMuY2FuTWFrZVBheW1lbnQoKTtcbiAgICBpZiAobCA9PT0gbnVsbClcbiAgICAgIHJldHVybiB4YyhcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgcShcIlN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudFwiLCBsKTtcbiAgICBjb25zdCB1ID0gKGQsIHkpID0+IFIuc3RyaXBlUFIucnVuKHtcbiAgICAgIGNvbnRleHQ6IGUsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IFRlKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZCksXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBKKGUuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBkLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiB5ID09IG51bGwgPyB2b2lkIDAgOiB5Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgcHJvY2Vzc29yOiBCLkVudW0uc3RyaXBlLFxuICAgICAgICBwcjogYyxcbiAgICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHsgYXBwbGVQYXk6IGwuYXBwbGVQYXksIGdvb2dsZVBheTogbC5nb29nbGVQYXkgfSxcbiAgICAgICAgc3RhcnRGbG93OiB1XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogQi5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBjLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBsLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGwuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgR2MgPSBRKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG8sXG4gICAgaW5pdFJlc3VsdDogaVxuICB9KSA9PiB7XG4gICAgaWYgKHEoXCJSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpLCBvLnByb3ZpZGVyICE9PSB0LnByb3ZpZGVyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciBtaXNtYXRjaC4gRXhwZWN0ZWQgJHtvLnByb3ZpZGVyfSwgZ290ICR7dC5wcm92aWRlcn1gKTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gaS5wcjtcbiAgICBpZiAobyAhPSBudWxsICYmIG8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkge1xuICAgICAgY29uc3QgXyA9IG8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdDtcbiAgICAgIHEoXCJPdmVycmlkaW5nIFBSIGFtb3VudCB3aXRoXCIsIF8pO1xuICAgICAgY29uc3QgaCA9IHR5cGVvZiBfLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPT0gXCJmdW5jdGlvblwiID8gXy5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHt9KSA6IF8uYXBwbGVQYXlQYXltZW50UmVxdWVzdDtcbiAgICAgIHFjKGMsIF8uYW1vdW50LCBfLnBlbmRpbmcsIGgsIF8ubGFiZWwpO1xuICAgIH1cbiAgICBxKFwiU2hvd2luZyBQUiBkaWFsb2cuLi5cIiksIGMuc2hvdygpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBmaShjKTtcbiAgICBxKFwiU3RyaXBlIFBNIGFkZGVkIGV2ZW50OlwiLCBsKSwgcShcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgdSA9IHpjKHIsIGwpLCBkID0gWCh1LCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5kXG4gICAgfSksIHEoXCJQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiLCBkKTtcbiAgICBjb25zdCB5ID0gYXdhaXQgcnMocywge1xuICAgICAgZmllbGRzOiBkLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0XG4gICAgfSksIHAgPSBCYyh5KTtcbiAgICBxKFwiQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLlwiKSwgYXdhaXQgeWkocCwgbCk7XG4gICAgY29uc3QgbSA9IGF3YWl0IFQocyk7XG4gICAgaWYgKG0ubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBxKFwiQ29uZmlybWluZyBwYXltZW50IGZsb3cgZm9yIHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgXyA9IGF3YWl0ICQocywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IG0udG9rZW5cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IG90KF8pIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHEoXCJQZXJmb3JtaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgXyA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBtLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogdC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBkW2YuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogZFtmLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBkW2YuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogZFtmLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogZFtmLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogZFtmLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogbS5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogbS5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IEp0KHMsIF8pIH07XG4gICAgfVxuICB9XG4pLCB6YyA9IChlLCB0KSA9PiB7XG4gIHZhciBkLCB5LCBwLCBtO1xuICBjb25zdCByID0geyAuLi5lIH0sIFtuLCAuLi5vXSA9ICgoeSA9IChkID0gdC5wYXllck5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBkLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkuc3BsaXQoL1xccysvKSkgPz8gW10sIGkgPSBvLmpvaW4oXCIgXCIpIHx8IHZvaWQgMCwgcyA9IChtID0gKHAgPSB0LnBheW1lbnRNZXRob2QpID09IG51bGwgPyB2b2lkIDAgOiBwLmJpbGxpbmdfZGV0YWlscykgPT0gbnVsbCA/IHZvaWQgMCA6IG0uYWRkcmVzcywgYyA9IHQuc2hpcHBpbmdBZGRyZXNzO1xuICByW2YuRU1BSUxdID0gcltmLkVNQUlMXSB8fCB0LnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCByW2YuWklQX0NPREVdID0gcltmLlpJUF9DT0RFXSB8fCAocyA9PSBudWxsID8gdm9pZCAwIDogcy5wb3N0YWxfY29kZSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiLCByW2YuQ09VTlRSWV0gPSByW2YuQ09VTlRSWV0gfHwgKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuY291bnRyeSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY291bnRyeSkgfHwgXCJVU1wiO1xuICBjb25zdCBsID0gcltmLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJcIiwgdSA9IHJbZi5MQVNUX05BTUVdIHx8IGkgfHwgXCJcIjtcbiAgcmV0dXJuIGwgfHwgdSA/IChyW2YuRklSU1RfTkFNRV0gPSBsLCByW2YuTEFTVF9OQU1FXSA9IHUpIDogKHJbZi5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgcltmLkxBU1RfTkFNRV0gPSBcIlwiKSwgcShcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCByKSwgcjtcbn0sIHFjID0gKGUsIHQsIHIsIG4sIG8pID0+IHtcbiAgZS51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IHQuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBvID8/IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IHJcbiAgICB9LFxuICAgIGN1cnJlbmN5OiB0LmN1cnJlbmN5LFxuICAgIC8vIFN0cmlwZSdzIGFwcGxlUGF5IG9wdGlvbiBvbmx5IHN1cHBvcnRzICdyZWN1cnJpbmdQYXltZW50UmVxdWVzdCcgfCAnZGVmZXJyZWRQYXltZW50UmVxdWVzdCcgfCAnYXV0b21hdGljUmVsb2FkUGF5bWVudFJlcXVlc3QnIG9mIG5hdGl2ZSBBcHBsZVBheSBwYXltZW50IHJlcXVlc3RcbiAgICAvLyBXZSdyZSBhY2NlcHRpbmcgbmF0aXZlIFBheW1lbnQgUmVxdWVzdCBoZXJlIGZvciBtb3JlIGNvbW1vbiB0eXBpbmcuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHN0cmlwZSBkbyBub3QgZXhwZWN0IGFkZGl0aW9uYWwgZmllbGRzXG4gICAgYXBwbGVQYXk6IG5cbiAgfSk7XG59LCBCYyA9IChlKSA9PiB7XG4gIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aH0gcmVxdWlyZWQgdXNlciBhY3Rpb25zYCk7XG4gIHJldHVybiB1aS5wYXJzZShlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG59LCBUZSA9IChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBlLmZpbHRlcigobykgPT4ge1xuICAgIGNvbnN0IGkgPSByID09PSB2b2lkIDAgPyAhMCA6IG8ucHJvY2Vzc29yX25hbWUgPT09IHIsIHMgPSBvLnByb3ZpZGVyID09PSB0O1xuICAgIHJldHVybiBpICYmIHM7XG4gIH0pO1xuICBpZiAobi5sZW5ndGggPT09IDApXG4gICAgdGhyb3cgY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGUpLCBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHt0fScgYW5kIHByb2Nlc3NvciAnJHtyfSdgKTtcbiAgcmV0dXJuIG4ubGVuZ3RoICE9PSAxICYmIChjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgZSksIGNvbnNvbGUud2FybihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHt0fScgYW5kIHByb2Nlc3NvciAnJHtyfSdgKSwgZyhcIm1vcmVfdGhhbl9vbmVfY3BtX2ZvdW5kXCIsIHtcbiAgICBwcm92aWRlcjogdCxcbiAgICBwcm9jZXNzb3I6IHIsXG4gICAgY3BtczogZVxuICB9KSksIG5bMF07XG59LCBSID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IGdjXG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6IFZjLFxuICAgIHJ1bjogR2NcbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IE9jLFxuICAgIHJ1bjogTGNcbiAgfSxcbiAgLy8gUG9ja3l0XG4gIHBvY2t5dFBheXBhbDoge1xuICAgIHJ1bjogRmNcbiAgfSxcbiAgLy8gUGF5UGFsXG4gIHBheXBhbDoge1xuICAgIGluaXQ6IEljLFxuICAgIHJ1bjogUmNcbiAgfSxcbiAgLy8gQWlyd2FsbGV4XG4gIGFpcndhbGxleEdvb2dsZVBheToge1xuICAgIGluaXQ6IFpzLFxuICAgIHJ1bjogUXNcbiAgfSxcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICBpbml0OiBLcyxcbiAgICBydW46IFdzXG4gIH0sXG4gIC8vIExvb3BcbiAgbG9vcENyeXB0bzoge1xuICAgIGluaXQ6IFBjLFxuICAgIHJ1bjogU2NcbiAgfSxcbiAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IHtcbiAgICBpbml0OiB0YyxcbiAgICBydW46IHJjXG4gIH0sXG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheToge1xuICAgIGluaXQ6IG5jLFxuICAgIHJ1bjogb2NcbiAgfSxcbiAgYWR5ZW5Hb29nbGVQYXk6IHtcbiAgICBpbml0OiBxcyxcbiAgICBydW46IEJzXG4gIH0sXG4gIGFkeWVuQXBwbGVQYXk6IHtcbiAgICBpbml0OiBHcyxcbiAgICBydW46IHpzXG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59LCB7IGxvZ19fOiBZYywgZXJyX186IEhjIH0gPSBTKFwiaW5pdC1mbG93c1wiKSwgaWUgPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gbmV3IFllKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiByLFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChuKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoci5jdXJyZW50LmlzU3VjY2VzcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cIik7XG4gICAgICAgIGNvbnN0IG8gPSBhd2FpdCB0KG4pO1xuICAgICAgICBZYyhg4pyUICR7ZX0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBvKSwgci5zZXQobyk7XG4gICAgICB9IGNhdGNoIChvKSB7XG4gICAgICAgIEhjKGDwnZmtICR7ZX0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIFoobyksIFwiRGV0YWlsczpcIiwgbyksIHIudGhyb3cobywgWihvKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSwgSmMgPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKGUpLm1hcCgobikgPT4gbi5pbml0aWFsaXplKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogciB9KSkpO1xufSwgS2MgPSAoKSA9PiAoe1xuICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gIC8vIFN0cmlwZSBQUlxuICBzdHJpcGVQUjogaWUoXCJTdHJpcGUgUFJcIiwgUi5zdHJpcGVQUi5pbml0KSxcbiAgLy8gU3RyaXBlIExpbmtcbiAgc3RyaXBlTGluazogaWUoXCJTdHJpcGUgTGlua1wiLCBSLnN0cmlwZUxpbmsuaW5pdCksXG4gIC8vIEFpcndhbGxleCBHb29nbGVQYXlcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiBpZShcIkFpcndhbGxleCBHb29nbGVQYXlcIiwgUi5haXJ3YWxsZXhHb29nbGVQYXkuaW5pdCksXG4gIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICBhaXJ3YWxsZXhBcHBsZVBheTogaWUoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgUi5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgLy8gTG9vcFxuICBsb29wOiBpZShcIkxvb3BcIiwgUi5sb29wQ3J5cHRvLmluaXQpLFxuICAvLyBQYXlQYWxcbiAgcGF5cGFsOiBpZShcIlBheVBhbFwiLCBSLnBheXBhbC5pbml0KSxcbiAgLy8gQXV0aG5ldCBHb29nbGVQYXlcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBpZShcIkF1dGhuZXQgR29vZ2xlUGF5XCIsIFIuYXV0aG9yaXplTmV0R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBdXRobmV0IEFwcGxlUGF5XG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBpZShcIkF1dGhuZXQgQXBwbGVQYXlcIiwgUi5hdXRob3JpemVOZXRBcHBsZVBheS5pbml0KSxcbiAgLy8gQWR5ZW4gR29vZ2xlUGF5XG4gIGFkeWVuR29vZ2xlUGF5OiBpZShcIkFkeWVuIEdvb2dsZVBheVwiLCBSLmFkeWVuR29vZ2xlUGF5LmluaXQpLFxuICAvLyBBZHllbiBBcHBsZVBheVxuICBhZHllbkFwcGxlUGF5OiBpZShcIkFkeWVuIEFwcGxlUGF5XCIsIFIuYWR5ZW5BcHBsZVBheS5pbml0KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSksIHsgZXJyX186IFdjIH0gPSBTKFwiZm9ybS1jYWxsYmFja3NcIiksIGVlID0gei5mdW5jdGlvbigpLm9wdGlvbmFsKCksIENyID0gei5vYmplY3Qoe1xuICBvbkZvY3VzOiBlZSxcbiAgb25CbHVyOiBlZSxcbiAgb25DaGFuZ2U6IGVlLFxuICBvbkxvYWQ6IGVlLFxuICBvbkxvYWRFcnJvcjogZWUsXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBlZSxcbiAgb25DaGVja291dFN0YXJ0ZWQ6IGVlLFxuICBvbkNoZWNrb3V0U3VjY2VzczogZWUsXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogZWUsXG4gIG9uQ2hlY2tvdXRFcnJvcjogZWUsXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBlZVxufSksIGxlID0gY2xhc3MgbGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldENhbGxiYWNrcyA9ICh0KSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBsZS5jcmVhdGVFbXB0eUNhbGxiYWNrcygpLCBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbciwgbl0pID0+IHtcbiAgICAgICAgY29uc3QgbyA9IG9hKHIsIG4gPz8gbGUuTk9PUCwgV2MpO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3Nbcl0gPSBvO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5fY2FsbGJhY2tzID0gbGUuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufTtcbmxlLk5PT1AgPSAoKSA9PiB7XG59LCBsZS5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgY29uc3QgdCA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmtleXMoQ3Iua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChyKSA9PiB7XG4gICAgdFtyXSA9IGxlLk5PT1A7XG4gIH0pLCB0O1xufSwgbGUuZnJvbU9iamVjdCA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBuZXcgbGUoKTtcbiAgcmV0dXJuIHIuc2V0Q2FsbGJhY2tzKENyLnBhcnNlKHQpKSwgcjtcbn07XG5sZXQganQgPSBsZTtcbmZ1bmN0aW9uIFpjKCkge1xuICB0cnkge1xuICAgIGNvbnN0IGUgPSBVKCksIHQgPSBlO1xuICAgIGlmICh0ICE9IG51bGwgJiYgdC5uZXh0IHx8IHQgIT0gbnVsbCAmJiB0Ll9fTkVYVF9EQVRBX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX25leHRcIikpXG4gICAgICByZXR1cm4gXCJuZXh0anNcIjtcbiAgICBjb25zdCByID0gZTtcbiAgICBpZiAociAhPSBudWxsICYmIHIuX19OVVhUX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX251eHRcIikpXG4gICAgICByZXR1cm4gXCJudXh0XCI7XG4gICAgaWYgKE9iamVjdC5rZXlzKGRvY3VtZW50KS5maW5kKChvKSA9PiBvLmluY2x1ZGVzKFwicmVhY3RcIikpIHx8IEFycmF5LmZyb20oZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKFwiYm9keSA+ICpcIikpLmZpbmQoXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gX3JlYWN0Um9vdENvbnRhaW5lciBkb2Vzbid0IGV4aXN0XG4gICAgICAobykgPT4gby5fcmVhY3RSb290Q29udGFpbmVyXG4gICAgKSlcbiAgICAgIHJldHVybiBcInJlYWN0XCI7XG4gICAgY29uc3QgbiA9IGU7XG4gICAgcmV0dXJuIG4gIT0gbnVsbCAmJiBuLlZ1ZSB8fCBuICE9IG51bGwgJiYgbi5fX1ZVRV9fID8gXCJ2dWVcIiA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIikgPyBcImFuZ3VsYXJcIiA6IFwidmFuaWxsYVwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cbn1cbmZ1bmN0aW9uIFFjKGUpIHtcbiAgdmFyIHQsIHIsIG47XG4gIHRyeSB7XG4gICAgc3dpdGNoIChlKSB7XG4gICAgICBjYXNlIFwicmVhY3RcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwibmV4dGpzXCI6IHtcbiAgICAgICAgY29uc3QgaSA9IFUoKTtcbiAgICAgICAgcmV0dXJuICgodCA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkubmV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IHQudmVyc2lvbikgfHwgKChyID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5fX05FWFRfREFUQV9fKSA9PSBudWxsID8gdm9pZCAwIDogci5idWlsZElkKSB8fCBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcIm51eHRcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwidnVlXCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcImFuZ3VsYXJcIjoge1xuICAgICAgICBjb25zdCBvID0gKG4gPSBVKCkpID09IG51bGwgPyB2b2lkIDAgOiBuLmRvY3VtZW50LCBpID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpO1xuICAgICAgICByZXR1cm4gaSA/IGkuZ2V0QXR0cmlidXRlKFwibmctdmVyc2lvblwiKSA6IG51bGw7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBYYygpIHtcbiAgY29uc3QgZSA9IFpjKCksIHQgPSBRYyhlKTtcbiAgcmV0dXJuIHsgZnJhbWV3b3JrOiBlLCB2ZXJzaW9uOiB0IH07XG59XG5jb25zdCBabiA9ICgpID0+IHtcbiAgY29uc3QgZSA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi5oZWlnaHQgOiBudWxsLCB0ID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLndpZHRoIDogbnVsbCwgciA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi5jb2xvckRlcHRoIDogbnVsbCwgbiA9IHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yID8gd2luZG93Lm5hdmlnYXRvci5qYXZhRW5hYmxlZCgpIDogITEsIG8gPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50IDogbnVsbCwgaSA9IFwidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLCovKjtxPTAuOFwiO1xuICBsZXQgcyA9IG51bGw7XG4gIHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yICYmIChzID0gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSA/IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2UgOiB3aW5kb3cubmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSk7XG4gIGNvbnN0IGMgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHJldHVybiB7XG4gICAgY29sb3JfZGVwdGg6IHIsXG4gICAgamF2YV9lbmFibGVkOiBuLFxuICAgIGphdmFzY3JpcHRfZW5hYmxlZDogITAsXG4gICAgbGFuZ3VhZ2U6IHMsXG4gICAgc2NyZWVuX2hlaWdodDogZSxcbiAgICBzY3JlZW5fd2lkdGg6IHQsXG4gICAgdGltZV96b25lX29mZnNldDogYyxcbiAgICB1c2VyX2FnZW50OiBvLFxuICAgIGFjY2VwdF9oZWFkZXI6IGlcbiAgfTtcbn07XG52YXIgTCA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLnBvY2t5dFBheXBhbCA9IFwicG9ja3l0LXBheXBhbFwiLCBlLmFpcndhbGxleEdvb2dsZVBheSA9IFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIiwgZS5haXJ3YWxsZXhBcHBsZVBheSA9IFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiLCBlLmF1dGhvcml6ZW5ldEdvb2dsZVBheSA9IFwiYXV0aG9yaXplbmV0LWdvb2dsZS1wYXlcIiwgZS5hdXRob3JpemVuZXRBcHBsZVBheSA9IFwiYXV0aG9yaXplbmV0LWFwcGxlLXBheVwiLCBlLmFkeWVuR29vZ2xlUGF5ID0gXCJhZHllbi1nb29nbGUtcGF5XCIsIGUuYWR5ZW5BcHBsZVBheSA9IFwiYWR5ZW4tYXBwbGUtcGF5XCIsIGUubG9vcENyeXB0byA9IFwibG9vcC1jcnlwdG9cIiwgZS5wYXlwYWwgPSBcInBheXBhbFwiLCBlKSkoTCB8fCB7fSk7XG56Lm5hdGl2ZUVudW0oTCk7IGNvbnN0IGVsID0gKGUpID0+IEpTT04uc3RyaW5naWZ5KGUpLCB7IGxvZ19fOiBUdCwgZXJyX186IHRsIH0gPSBTKFwidHJhY2VyXCIpLCBybCA9IChlLCB0KSA9PiB7XG4gIHRyeSB7XG4gICAgbmwoZSwgdCk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICB0bChgRXJyb3IgaW5pdGlhbGl6aW5nIHRyYWNlcjogJHtyfWApO1xuICB9XG59O1xubGV0IFByO1xuY29uc3QgbmwgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA+IFwidVwiKVxuICAgIHJldHVybjtcbiAgY29uc3QgciA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1DbEFMV2xvTC0hfnswMDN9fi5qcycpLCB7IENvbnNvbGVTcGFuRXhwb3J0ZXI6IG4sIFNpbXBsZVNwYW5Qcm9jZXNzb3I6IG8sIFdlYlRyYWNlclByb3ZpZGVyOiBpIH0gPSByLCBzID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LXducVB5V2U0LSF+ezAwNn1+LmpzJyksIHsgRmV0Y2hJbnN0cnVtZW50YXRpb246IGMgfSA9IHMsIGwgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtRElUSldCUUstIX57MDBifX4uanMnKSwgeyBab25lQ29udGV4dE1hbmFnZXI6IHUgfSA9IGwsIGQgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQnFiSkVjOE8tIX57MDBjfX4uanMnKSwgeyByZWdpc3Rlckluc3RydW1lbnRhdGlvbnM6IHkgfSA9IGQsIHAgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQkhqSVRjT04tIX57MDBlfX4uanMnKSwgeyBSZXNvdXJjZTogbSB9ID0gcCwgXyA9IGF3YWl0IGltcG9ydCgnLi9kZXRlY3QtcmVzb3VyY2VzLUNFZXhNMDg4LSF+ezAwaH1+LmpzJykudGhlbigod2UpID0+IHdlLmQpLCB7IGRldGVjdFJlc291cmNlc1N5bmM6IGggfSA9IF8sIHYgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQkQyTFhWVmwtIX57MDBrfX4uanMnKSwgeyBPVExQVHJhY2VFeHBvcnRlcjogYiB9ID0gdiwgRSA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1CRjRzdjBxNy0hfnswMG19fi5qcycpLCB7IEIzUHJvcGFnYXRvcjogQywgQjNJbmplY3RFbmNvZGluZzogSSB9ID0gRSwgTSA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1CVk1Fb21oQy0hfnswMDF9fi5qcycpLCB7IEJhdGNoU3BhblByb2Nlc3NvcjogUCB9ID0gTTtcbiAgVHQoYEluaXRpYWxpemluZyB0cmFjZXIgd2l0aCB2ZXJzaW9uICR7ZX0gYW5kIGJhc2VVcmwgJHt0fWApO1xuICBjb25zdCBGID0gb2wodCk7XG4gIFR0KGBVc2luZyBjb2xsZWN0b3IgVVJMICR7Rn1gKTtcbiAgY29uc3QgWSA9IG5ldyBiKHsgdXJsOiBGIH0pLCBnZSA9IHtcbiAgICBcInNlcnZpY2UudmVyc2lvblwiOiBlLFxuICAgIFwic2VydmljZS5uYW1lXCI6IFwib2pzXCJcbiAgfTtcbiAgcmV0dXJuIG5ldyBpKHtcbiAgICByZXNvdXJjZTogbmV3IG0oZ2UpLm1lcmdlKGgoKSksXG4gICAgc3BhblByb2Nlc3NvcnM6IFtcbiAgICAgIG5ldyBvKG5ldyBuKCkpLFxuICAgICAgbmV3IFAoWSwge1xuICAgICAgICBzY2hlZHVsZWREZWxheU1pbGxpczogNTAwXG4gICAgICB9KVxuICAgIF1cbiAgfSkucmVnaXN0ZXIoe1xuICAgIGNvbnRleHRNYW5hZ2VyOiBuZXcgdSgpLFxuICAgIHByb3BhZ2F0b3I6IG5ldyBDKHsgaW5qZWN0RW5jb2Rpbmc6IEkuTVVMVElfSEVBREVSIH0pXG4gIH0pLCB5KHtcbiAgICBpbnN0cnVtZW50YXRpb25zOiBbXG4gICAgICBuZXcgYyh7XG4gICAgICAgIHByb3BhZ2F0ZVRyYWNlSGVhZGVyQ29yc1VybHM6IFsvLiovXSxcbiAgICAgICAgLy8gUHJvcGFnYXRlIHRvIGFsbCBVUkxzXG4gICAgICAgIC8vIEV4Y2x1ZGUgQWR5ZW4gVVJMcyAtIHRoZXkgZG8gbm90IGFsbG93IE9QVElPTlMgcmVxdWVzdHNcbiAgICAgICAgLy8gQWxzbyBleGNsdWRlIGxvb3BjcnlwdG8ueHl6XG4gICAgICAgIGlnbm9yZVVybHM6IFsvXmh0dHBzOlxcL1xcLyguKlxcLik/YWR5ZW5cXC5jb20vLCAvXmh0dHBzOlxcL1xcLyguKlxcLik/bG9vcGNyeXB0b1xcLnh5ei9dXG4gICAgICB9KVxuICAgIF1cbiAgfSksIFByID0gRGUuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKSwgVHQoXCJUcmFjZXIgaW5pdGlhbGl6ZWRcIiksIFByO1xufSwgb2wgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gbmV3IFVSTChlKS5ob3N0bmFtZTtcbiAgcmV0dXJuIHQgPT09IFwiY2RlLm9wZW5wYXlzdGFnaW5nLmNvbVwiID8gXCJodHRwczovL290ZWwub3BlbnBheXNhbmRib3guY29tL3YxL3RyYWNlc1wiIDogdCA9PT0gXCJjZGUuZ2V0b3BlbnBheS5jb21cIiA/IFwiaHR0cHM6Ly9vdGVsLmdldG9wZW5wYXkuY29tL3YxL3RyYWNlc1wiIDogXCJodHRwOi8vbG9jYWxob3N0OjQzMTkvdjEvdHJhY2VzXCI7XG59O1xuY2xhc3MgYWwge1xuICBjb25zdHJ1Y3Rvcih0LCByLCBuLCBvKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKGkpID0+IHtcbiAgICAgIGlmICghaS5zb3VyY2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW09KU10gTm8gc291cmNlIGZvdW5kXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoU3IoaS5vcmlnaW4pICE9PSBTcih0aGlzLmJhc2VVcmwpIHx8IHR5cGVvZiBpLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBpLmRhdGEucGVucGFsIHx8IHR5cGVvZiBpLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBpLmRhdGEuc291cmNlICYmIGkuZGF0YS5zb3VyY2UgPT09IFwicmVhY3QtZGV2dG9vbHMtYnJpZGdlXCIpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCBzID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMgPSB2cyhKU09OLnBhcnNlKGkuZGF0YSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUV2ZW50KHMpKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZDogbCwgcGF5bG9hZDogdSB9ID0gcywgZCA9IHUudHlwZTtcbiAgICAgIHN3aXRjaCAoZCkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHUuaGVpZ2h0ID8gYCR7dS5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIobCwgdS5lbGVtZW50VHlwZSwge1xuICAgICAgICAgICAgb2JmdXNjYXRlZFZhbHVlOiB1Lm9iZnVzY2F0ZWRWYWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoYW5nZShsLCB1LmVsZW1lbnRUeXBlLCB1LmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmV2ZW50VGFyZ2V0c1tsXSA9IGkuc291cmNlLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZGVkKHUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkRXJyb3IodS5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzLCBsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIGQpO1xuICAgICAgfVxuICAgIH0sIHRoaXMudmFsaWRhdGVFdmVudCA9IChpKSA9PiBpLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgfHwgIWkuZWxlbWVudElkID8gKGNvbnNvbGUubG9nKFwiW09KU10gZm9ybUlkXCIsIHRoaXMuZm9ybUlkLCBpLmZvcm1JZCksIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBpKSwgITEpIDogdGhpcy5ub25jZXMuaGFzKGkubm9uY2UpID8gKGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyBkdXBsaWNhdGUgZXZlbnQ6XCIsIGkpLCAhMSkgOiAodGhpcy5ub25jZXMuYWRkKGkubm9uY2UpLCAhMCksIHRoaXMuZXZlbnRUYXJnZXRzID0ge30sIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgdGhpcy5mb3JtSWQgPSB0LCB0aGlzLmJhc2VVcmwgPSByLCB0aGlzLmZvcm1DYWxsYmFja3MgPSBuLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzID0gbztcbiAgfVxufVxuY29uc3QgU3IgPSAoZSkgPT4gbmV3IFVSTChlKS5vcmlnaW47XG5hc3luYyBmdW5jdGlvbiBpbChlLCB0KSB7XG4gIGNvbnN0IG4gPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiBlLFxuICAgIGRlYnVnOiAhMSxcbiAgICBjaGlsZE9yaWdpbjogdFxuICB9KS5wcm9taXNlLCBvID0gYXdhaXQgbHMobik7XG4gIGlmICghdXMobiwgbykpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0XCIpO1xuICByZXR1cm4gbjtcbn1cbmNsYXNzIHNsIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgYWRkQ29ubmVjdGlvbih0LCByKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQodCwgcik7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICBjb25zdCB0ID0gdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKCF0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgcmV0dXJuIHQ7XG4gIH1cbiAgZ2V0QWxsQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnM7XG4gIH1cbn1cbmNvbnN0IGNsID0gKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgeyBzdHJpcGVQUjogbiB9ID0gZTtcbiAgbi5wdWJsaXNoZXIuc3Vic2NyaWJlKChvKSA9PiB7XG4gICAgaWYgKG8uaXNTdWNjZXNzKSB7XG4gICAgICBjb25zdCBpID0gby5sb2FkZWRWYWx1ZSwgcyA9IGkuaXNBdmFpbGFibGUgJiYgaS5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXksIGMgPSBpLmlzQXZhaWxhYmxlICYmIGkuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheSwgbCA9IHtcbiAgICAgICAgYXBwbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogcyxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBzICYmIGtyKFwiYXBwbGVfcGF5XCIsIGksIHQsIHIsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGMsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICAgICAgYyAmJiBrcihcImdvb2dsZV9wYXlcIiwgaSwgdCwgciwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgci5nZXQub25QYXltZW50UmVxdWVzdExvYWQobCk7XG4gICAgfVxuICB9KTtcbn0sIGtyID0gKGUsIHQsIHIsIG4sIG8pID0+IFIuc3RyaXBlUFIucnVuKHtcbiAgY29udGV4dDogcixcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBUZShyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGUpLFxuICBub25DZGVGb3JtSW5wdXRzOiBKKHIuZm9ybURpdiksXG4gIGZvcm1DYWxsYmFja3M6IG4sXG4gIGN1c3RvbVBhcmFtczogeyBwcm92aWRlcjogZSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbyA9PSBudWxsID8gdm9pZCAwIDogby5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gIGluaXRSZXN1bHQ6IHRcbn0pLCBBciA9IFwiVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuXCIsIHsgbG9nX186IHNlLCBlcnJfXzogVyB9ID0gUyhcIm9wLWZvcm1cIiksIHVlID0gY2xhc3MgdWUge1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgdmFyIG87XG4gICAgdGhpcy5pc0Rlc3Ryb3llZCA9ICExLCB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBZZSgpLCB0aGlzLmFueUNkZUNvbm4gPSBuZXcgWWUoKSwgdGhpcy5jb250ZXh0ID0gbmV3IFllKCksIHRoaXMuaW5pdEZsb3dzID0gS2MoKSwgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaSA9IERlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIHMgPSBpLnN0YXJ0U3BhbihcImZvcm0uaW5pdGlhbGl6ZVwiLCB7XG4gICAgICAgIGtpbmQ6IFhlLkNMSUVOVCxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIC8vICdlbnZpcm9ubWVudCc6ICxcbiAgICAgICAgICAvLyAnZnJhbWV3b3JrJzogZnJhbWV3b3JrLFxuICAgICAgICAgIC8vICdmcmFtZXdvcmsudmVyc2lvbic6IHZlcnNpb24sXG4gICAgICAgICAgXCJvanMuZm9ybUlkXCI6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIFwib2pzLnZlcnNpb25cIjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIE5lLndpdGgoRGUuc2V0U3BhbihOZS5hY3RpdmUoKSwgcyksIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjID0gdGhpcy5jcmVhdGVFbGVtZW50KGNlLkNERV9CUklER0UpO1xuICAgICAgICAgIGMubm9kZS5pZCA9IFwiX19vcF9pbnRlcm5hbF9jZGVfYnJpZGdlXCIsIGMubm9kZS5hcmlhSGlkZGVuID0gXCJ0cnVlXCIsIE9iamVjdC5hc3NpZ24oYy5ub2RlLnN0eWxlLCB7XG4gICAgICAgICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgICAgICAgbWFyZ2luOiBcIjBweFwiLFxuICAgICAgICAgICAgcGFkZGluZzogXCIwcHhcIixcbiAgICAgICAgICAgIHdpZHRoOiBcIjFweFwiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcIjFweFwiLFxuICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiLFxuICAgICAgICAgICAgdXNlclNlbGVjdDogXCJub25lXCJcbiAgICAgICAgICB9KSwgYy5tb3VudChcImJvZHlcIiksIHNlKFwiQ0RFIGJyaWRnZSBlbGVtZW50IG1vdW50ZWRcIiksIHNlKFwiSW5pdGlhbGl6aW5nIE9wZW5QYXkgZm9ybTpcIiksIHNlKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICAgIGNvbnN0IGwgPSBhd2FpdCB0aGlzLmNkZUxvYWRFdmVudC53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBBclxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNlKFwi4pScIENERSBsb2FkIGV2ZW50IHJlY2VpdmVkXCIpLCBzID09IG51bGwgfHwgcy5hZGRFdmVudChcIndhaXRpbmdfZm9yX2NkZV9jb25uZWN0aW9uXCIpLCBzZShcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgICBjb25zdCB1ID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5zdGFydFNwYW4oXCJjZGUuY29ubmVjdFwiLCB2b2lkIDAsIE5lLmFjdGl2ZSgpKSwgZCA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBBclxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHUgPT0gbnVsbCB8fCB1LmVuZCgpLCBzID09IG51bGwgfHwgcy5hZGRFdmVudChcImNkZV9jb25uZWN0ZWRcIiksIHNlKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpLCBhd2FpdCBjcyhkLCB0aGlzLmRldmljZVRva2VuKSwgc2UoXCLilJwgQ3JlYXRpbmcgT0pTIGNvbnRleHQsIHNldHRpbmcgdXAgaGFuZGxlcnMuLi5cIik7XG4gICAgICAgICAgY29uc3QgeSA9IHVlLmJ1aWxkT2pzRmxvd0NvbnRleHQoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBkLFxuICAgICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5zZXQoeSksIGNsKHRoaXMuaW5pdEZsb3dzLCB5LCB0aGlzLmZvcm1DYWxsYmFja3MpLCBzZShcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKSwgYXdhaXQgSmModGhpcy5pbml0Rmxvd3MsIHksIHRoaXMuZm9ybUNhbGxiYWNrcyksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGwudG90YWxBbW91bnRBdG9tcywgbC5jdXJyZW5jeSksIHNlKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIiksIHMgPT0gbnVsbCB8fCBzLnNldFN0YXR1cyh7IGNvZGU6IHllLk9LIH0pLCBnKFwiZm9ybV9sb2FkZWRcIik7XG4gICAgICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgICAgICBjb25zdCBsID0gWihjKTtcbiAgICAgICAgICBzID09IG51bGwgfHwgcy5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgY29kZTogeWUuRVJST1IsXG4gICAgICAgICAgICBtZXNzYWdlOiBsXG4gICAgICAgICAgfSksIFcoXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIGwpLCBnKFwiZm9ybV9pbml0X2Vycm9yXCIsIHtcbiAgICAgICAgICAgIGVycm9yOiBsXG4gICAgICAgICAgfSksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3IobCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcyA9PSBudWxsIHx8IHMuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChpKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzICYmIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKHMpID0+IHtcbiAgICAgICAgIXMgfHwgcy50eXBlID09PSBjZS5DREVfQlJJREdFIHx8IChzLm5vZGUuc3R5bGUuaGVpZ2h0ID0gaSk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZGVkID0gKGkpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC5zZXQoaSksIGcoXCJjZGVfbG9hZGVkXCIpKTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZEVycm9yID0gKGkpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IoaSksIGkpLCBnKFwiY2RlX2xvYWRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaVxuICAgICAgfSkpO1xuICAgIH0sIHRoaXMuY3JlYXRlRWxlbWVudCA9IChpLCBzID0ge30pID0+IHtcbiAgICAgIGlmICh0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJjcmVhdGVFbGVtZW50XCIpLCAhdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCBjID0gcm8ucGFyc2UoaSksIGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCB1ID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKHMpO1xuICAgICAgbC5uYW1lID0gYCR7Y30tZWxlbWVudGA7XG4gICAgICBjb25zdCBkID0gbmV3IFVSTChgL2FwcC92MS8ke2wubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICByZXR1cm4gZC5zZWFyY2ggPSB1LnRvU3RyaW5nKCksIGwuc3JjID0gZC5ocmVmLCBsLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiLCBsLnN0eWxlLndpZHRoID0gXCIxMDAlXCIsIHRoaXMucmVnaXN0ZXJJZnJhbWUoYywgbCk7XG4gICAgfSwgdGhpcy5yZWdpc3RlcklmcmFtZSA9IChpLCBzKSA9PiB7XG4gICAgICBjb25zdCBjID0ge1xuICAgICAgICB0eXBlOiBpLFxuICAgICAgICBub2RlOiBzLFxuICAgICAgICBtb3VudDogKGwpID0+IHtcbiAgICAgICAgICB2YXIgdTtcbiAgICAgICAgICAodSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobCkpID09IG51bGwgfHwgdS5hcHBlbmRDaGlsZChzKSwgZyhcImVsZW1lbnRfbW91bnRlZFwiLCB7XG4gICAgICAgICAgICBlbGVtZW50X3R5cGU6IGlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBjLnR5cGUsIG5vZGU6IGMubm9kZSB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgfHwgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICBbY2UuQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgW2NlLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICBbY2UuQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgIFtjZS5DQVJEX0NWQ106IHZvaWQgMCxcbiAgICAgICAgW2NlLkNERV9CUklER0VdOiB2b2lkIDBcbiAgICAgIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1tpXSA9IGMsIGM7XG4gICAgfSwgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKGkpID0+IHtcbiAgICAgIGNvbnN0IHMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICByZXR1cm4gcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpLCBzLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCksIGkuc3R5bGVzICYmIHMuYXBwZW5kKFwic3R5bGVzXCIsIGVsKGkuc3R5bGVzKSksIHMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbiksIHM7XG4gICAgfSwgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKGkpID0+IGN0KFxuICAgICAge1xuICAgICAgICBzcGFuTmFtZTogXCJjb25uZWN0X3RvX2VsZW1lbnRcIixcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgIH0sXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHMgPSBhd2FpdCBpbChpLm5vZGUpO1xuICAgICAgICBzLnRyYWNpbmdDb250ZXh0ID0ge1xuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihpLnR5cGUsIHMpLCAhdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzICYmIGkudHlwZSA9PT0gY2UuQ0RFX0JSSURHRSAmJiB0aGlzLmFueUNkZUNvbm4uc2V0KHMpO1xuICAgICAgfVxuICAgICkuY2F0Y2goKHMpID0+IFcoXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIHMpKSwgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHksIHRoaXMuc3VibWl0Q2FyZCA9IGFzeW5jIChpKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgVyhcIkZvcm0gaXMgYWxyZWFkeSBzdWJtaXR0aW5nLiBQbGVhc2Ugd2FpdCBmb3IgdGhlIHN1Ym1pc3Npb24gdG8gZmluaXNoIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHMgPSBhd2FpdCBjdChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJzdWJtaXRfY2FyZFwiLFxuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgICBwYXltZW50Um91dGVJZDogaSA9PSBudWxsID8gdm9pZCAwIDogaS5wYXltZW50Um91dGVJZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZyhcInN1Ym1pdF9jYXJkXCIsIHsgLi4uaSB9KSwgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwic3VibWl0Q2FyZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBpZiAoIWMpXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgICAgICBhd2FpdCBSLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IGMsXG4gICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogVGUoYy5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBKKGMuZm9ybURpdiksXG4gICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKCksXG4gICAgICAgICAgICAgICAgcGF5bWVudFJvdXRlSWQ6IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkucGF5bWVudFJvdXRlSWRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBzO1xuICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICB0aHJvdyB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBzO1xuICAgICAgfVxuICAgIH0sIHRoaXMuZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMgPSAoKSA9PiBjdChcbiAgICAgIHtcbiAgICAgICAgc3Bhbk5hbWU6IFwiZ2V0X2F2YWlsYWJsZV9wYXltZW50X21ldGhvZHNcIixcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kc1wiKSwgIXRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIGdldHRpbmcgYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kcy5cIik7XG4gICAgICAgIGNvbnN0IHMgPSB7XG4gICAgICAgICAgcGF5cGFsOiBMLnBheXBhbCxcbiAgICAgICAgICBhaXJ3YWxsZXhHb29nbGVQYXk6IEwuYWlyd2FsbGV4R29vZ2xlUGF5LFxuICAgICAgICAgIGFpcndhbGxleEFwcGxlUGF5OiBMLmFpcndhbGxleEFwcGxlUGF5LFxuICAgICAgICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogTC5hdXRob3JpemVuZXRHb29nbGVQYXksXG4gICAgICAgICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IEwuYXV0aG9yaXplbmV0QXBwbGVQYXksXG4gICAgICAgICAgYWR5ZW5Hb29nbGVQYXk6IEwuYWR5ZW5Hb29nbGVQYXksXG4gICAgICAgICAgYWR5ZW5BcHBsZVBheTogTC5hZHllbkFwcGxlUGF5XG4gICAgICAgIH0sIGMgPSBPYmplY3QuZW50cmllcyh0aGlzLmluaXRGbG93cykubWFwKChbbCwgdV0pID0+ICh7XG4gICAgICAgICAgbmFtZTogc1tsXSA/PyBsLFxuICAgICAgICAgIC4uLnUucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpXG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIGcoXCJnZXRfYXZhaWxhYmxlX3BheW1lbnRfbWV0aG9kc1wiLCB7XG4gICAgICAgICAgYXZhaWxhYmxlX3BheW1lbnRfbWV0aG9kczogY1xuICAgICAgICB9KSwgYztcbiAgICAgIH1cbiAgICApLCB0aGlzLmdlbmVyYWxTdWJtaXQgPSBhc3luYyAoaSwgcykgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKSB7XG4gICAgICAgIFcoXCJGb3JtIGlzIGFscmVhZHkgc3VibWl0dGluZy4gUGxlYXNlIHdhaXQgZm9yIHRoZSBzdWJtaXNzaW9uIHRvIGZpbmlzaCBiZWZvcmUgc3VibWl0dGluZyBhZ2Fpbi5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gITA7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjID0gYXdhaXQgY3QoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3Bhbk5hbWU6IFwiZ2VuZXJhbF9mb3JtX3N1Ym1pdFwiLFxuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGcoXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsIHsgbWV0aG9kOiBpLCBzZXR0aW5nczogcyB9KSwgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZ2VuZXJhbFN1Ym1pdFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGwgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBpZiAoIWwpXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgICAgICAgY2FzZSBMLnBvY2t5dFBheXBhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gUi5wb2NreXRQYXlwYWwucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGwsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IFRlKFxuICAgICAgICAgICAgICAgICAgICBsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFwicGF5cGFsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwicG9ja3l0XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBKKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IHMgfSxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIEwucGF5cGFsOlxuICAgICAgICAgICAgICAgIHJldHVybiBSLnBheXBhbC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogVGUoXG4gICAgICAgICAgICAgICAgICAgIGwuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgXCJwYXlwYWxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwYXlwYWxcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEoobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczogcyB9LFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgTC5haXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIFcoXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIEwuYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgVyhcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBMLmF1dGhvcml6ZW5ldEdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgVyhcbiAgICAgICAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIEwuYXV0aG9yaXplbmV0QXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgVyhcbiAgICAgICAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgTC5sb29wQ3J5cHRvOlxuICAgICAgICAgICAgICAgIHJldHVybiBSLmxvb3BDcnlwdG8ucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGwsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IFRlKFxuICAgICAgICAgICAgICAgICAgICBsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFwiY3J5cHRvXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibG9vcFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogSihsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgTC5hZHllbkdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hZHllbkdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICBXKFxuICAgICAgICAgICAgICAgICAgICBcImFkeWVuLWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIEwuYWR5ZW5BcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hZHllbkFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIFcoXG4gICAgICAgICAgICAgICAgICAgIFwiYWR5ZW4tYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBndChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBjO1xuICAgICAgfSBjYXRjaCAoYykge1xuICAgICAgICB0aHJvdyB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBjO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkLCB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICB2YXIgaTtcbiAgICAgIHNlKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIiksIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImRlc3Ryb3lcIiksIHRoaXMuaXNEZXN0cm95ZWQgPSAhMDtcbiAgICAgIGZvciAoY29uc3QgcyBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSlcbiAgICAgICAgcyAmJiBzLm5vZGUucmVtb3ZlKCk7XG4gICAgICAoaSA9IFUoKSkgPT0gbnVsbCB8fCBpLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCBjaSgpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIGRlbGV0ZSB3aW5kb3cub2pzLCBnKFwiZm9ybV9kZXN0cm95ZWRcIik7XG4gICAgfSwgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAoaSkgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhpKTtcbiAgICB9LCB1ZS5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKSwgdGhpcy5vanNWZXJzaW9uID0gXCIwLjMuMTdcIiwgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwibG9jYWxfYnVpbGRcIiwgdGhpcy5iYXNlVXJsID0gdC5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgdGhpcy5jb25maWcgPSB7IC4uLnQsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9LCB0aGlzLmZvcm1DYWxsYmFja3MgPSBqdC5mcm9tT2JqZWN0KHQpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YCwgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sIHRoaXMuZm9ybVRhcmdldCA9IHQuZm9ybVRhcmdldCA/PyBcImJvZHlcIiwgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgc2woKSwgdGhpcy5kZXZpY2VUb2tlbiA9IGhuKCksIHNpKCk7XG4gICAgY29uc3QgeyBmcmFtZXdvcms6IHIsIHZlcnNpb246IG4gfSA9IFhjKCk7XG4gICAgWHIodGhpcy5iYXNlVXJsKS50aGVuKChpKSA9PiB7XG4gICAgICBpZiAoIUR0LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IHMgPSB7XG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBlbnZpcm9ubWVudDogaSxcbiAgICAgICAgICBmcmFtZXdvcms6IHIsXG4gICAgICAgICAgZnJhbWV3b3JrVmVyc2lvbjogbixcbiAgICAgICAgICBvanNWZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgb2pzUmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsXG4gICAgICAgIH07XG4gICAgICAgIER0LnNldChzKTtcbiAgICAgIH1cbiAgICB9KSwgZyhcImZvcm1faW5pdFwiKSwgdC5hbGxvd1RyYWNpbmcgPT09ICEwICYmIHJsKHRoaXMub2pzVmVyc2lvbiwgdGhpcy5iYXNlVXJsKSwgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgYWwodGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSksIChvID0gVSgpKSA9PSBudWxsIHx8IG8uYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG4gIGNoZWNrVmFsaWRGb3JtSW5zdGFuY2UodCA9IFwidW5rbm93blwiKSB7XG4gICAgY29uc3QgciA9IHVlLmdldEluc3RhbmNlKCksIG4gPSB7XG4gICAgICBjYWxsZXI6IHQsXG4gICAgICB0aGlzRm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgIGN1cnJlbnRGb3JtSWQ6IChyID09IG51bGwgPyB2b2lkIDAgOiByLmZvcm1JZCkgfHwgXCJuby1jdXJyZW50LWluc3RhbmNlXCIsXG4gICAgICBpc0Rlc3Ryb3llZDogdGhpcy5pc0Rlc3Ryb3llZCxcbiAgICAgIGNoZWNrb3V0VG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4uc3Vic3RyaW5nKDAsIDEwKSArIFwiLi4uXCJcbiAgICB9LCBvID0gYFxuICAgICAgW1dhcm5pbmddIEludmFsaWQgZm9ybSBpbnN0YW5jZSBkZXRlY3RlZC5cbiAgICAgIEl0IGxvb2tzIGxpa2UgeW91IGFyZSBzdGlsbCB1c2luZyBhbiBvbGQgaW5zdGFuY2UgdGhhdCBoYXMgYmVlbiBkZXN0cm95ZWQuXG4gICAgICBQbGVhc2UgbWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgdGhlIGxhdGVzdCBpbnN0YW5jZSBvZiB0aGUgZm9ybSBhbmQgY2xlYW51cCBldmVudCBsaXN0ZW5lcnMuXG4gICAgICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgIERlYnVnIEluZm86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgIC0gY2FsbGVyOiAke3R9XG4gICAgICAtIGNhbGxlcl9mb3JtX2lkOiAke24udGhpc0Zvcm1JZH1cbiAgICAgIC0gY3VycmVudF9hY3RpdmVfZm9ybV9pZDogJHtuLmN1cnJlbnRGb3JtSWR9XG4gICAgICAtIGlzX2Rlc3Ryb3llZDogJHtuLmlzRGVzdHJveWVkfVxuICAgICAgLSBjaGVja291dF90b2tlbjogJHtuLmNoZWNrb3V0VG9rZW59XG4gICAgYDtcbiAgICByZXR1cm4gdGhpcy5pc0Rlc3Ryb3llZCA/IChXKG8pLCBnKFwib3V0ZGF0ZWRfZm9ybV9pbnN0YW5jZVwiLCB7IGVycm9yOiBvIH0pLCAhMSkgOiAhciB8fCByLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgPyAoVyhvKSwgZyhcIm91dGRhdGVkX2Zvcm1faW5zdGFuY2VcIiwgeyBlcnJvcjogbyB9KSwgITEpIDogITA7XG4gIH1cbn07XG51ZS5vanNGbG93cyA9IFIsIHVlLmFzc2lnbkFzU2luZ2xldG9uID0gKHQpID0+IHtcbiAgaWYgKHVlLmdldEluc3RhbmNlKCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gIHdpbmRvdy5vanMgPSB0O1xufSwgdWUuZ2V0SW5zdGFuY2UgPSAoKSA9PiB3aW5kb3cub2pzID8/IG51bGwsIHVlLmJ1aWxkT2pzRmxvd0NvbnRleHQgPSAodCwgciwgbiwgbykgPT4gKHtcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdC5jaGVja291dFNlY3VyZVRva2VuLFxuICBiYXNlVXJsOiBuZXcgVVJMKHQuYmFzZVVybCA/PyBtbikub3JpZ2luLFxuICBmb3JtRGl2OiBvLFxuICBlbGVtZW50c1Nlc3Npb25JZDogci5zZXNzaW9uSWQsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgYW55Q2RlQ29ubmVjdGlvbjogbixcbiAgY3VzdG9tSW5pdFBhcmFtczogdC5jdXN0b21Jbml0UGFyYW1zID8/IHt9LFxuICBwcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb246IHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uXG59KTtcbmxldCBJciA9IHVlO1xuXG5jb25zdCB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuZnJvbU9iamVjdCh7XG4gICAgb25Gb2N1czogcHJvcHMub25Gb2N1cyxcbiAgICBvbkJsdXI6IHByb3BzLm9uQmx1cixcbiAgICBvbkNoYW5nZTogcHJvcHMub25DaGFuZ2UsXG4gICAgb25Mb2FkOiBwcm9wcy5vbkxvYWQsXG4gICAgb25Mb2FkRXJyb3I6IHByb3BzLm9uTG9hZEVycm9yLFxuICAgIG9uVmFsaWRhdGlvbkVycm9yOiBwcm9wcy5vblZhbGlkYXRpb25FcnJvcixcbiAgICBvbkNoZWNrb3V0U3RhcnRlZDogcHJvcHMub25DaGVja291dFN0YXJ0ZWQsXG4gICAgb25DaGVja291dFN1Y2Nlc3M6IHByb3BzLm9uQ2hlY2tvdXRTdWNjZXNzLFxuICAgIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogcHJvcHMub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzLFxuICAgIG9uQ2hlY2tvdXRFcnJvcjogcHJvcHMub25DaGVja291dEVycm9yLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZFxuICB9KTtcbiAgaWYgKElyLmdldEluc3RhbmNlKCkpIHtcbiAgICBJci5nZXRJbnN0YW5jZSgpPy51cGRhdGVDYWxsYmFja3MoZm9ybUNhbGxiYWNrcy5nZXQpO1xuICB9XG4gIHJldHVybiBmb3JtQ2FsbGJhY2tzLmdldDtcbn07XG5cbmNvbnN0IHVzZVBheW1lbnRSZXF1ZXN0cyA9IChvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkKSA9PiB7XG4gIGNvbnN0IFtwYXltZW50UmVxdWVzdHMsIHNldFBheW1lbnRSZXF1ZXN0c10gPSB1c2VTdGF0ZSh7XG4gICAgYXBwbGVfcGF5OiBQUl9MT0FESU5HLFxuICAgIGdvb2dsZV9wYXk6IFBSX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkID0gdXNlQ2FsbGJhY2soXG4gICAgKHBheW1lbnRSZXF1ZXN0czIpID0+IHtcbiAgICAgIHNldFBheW1lbnRSZXF1ZXN0cyhwYXltZW50UmVxdWVzdHMyKTtcbiAgICAgIG9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQ/LihwYXltZW50UmVxdWVzdHMyKTtcbiAgICB9LFxuICAgIFtvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkXVxuICApO1xuICByZXR1cm4geyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH07XG59O1xuXG5jb25zdCBGT1JNX1RBUkdFVCA9IFwib3Bfb2pzX2Zvcm1cIjtcbmNvbnN0IEVsZW1lbnRzRm9ybSA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbb3BGb3JtLCBzZXRPcEZvcm1dID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgW2VsZW1lbnRzQ29udGV4dFZhbHVlLCBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgeyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH0gPSB1c2VQYXltZW50UmVxdWVzdHMocHJvcHMub25QYXltZW50UmVxdWVzdExvYWQpO1xuICBjb25zdCBbbG9hZGVkLCBzZXRMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc3RyaXBlTGlua0N0cmwsIHNldFN0cmlwZUxpbmtDdHJsXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbbG9vcENvbmZpZywgc2V0TG9vcENvbmZpZ10gPSB1c2VTdGF0ZShMT09QX0xPQURJTkcpO1xuICBjb25zdCBbYWlyd2FsbGV4LCBzZXRBaXJ3YWxsZXhdID0gdXNlU3RhdGUoe1xuICAgIGdvb2dsZVBheTogQVdYX0xPQURJTkcsXG4gICAgYXBwbGVQYXk6IEFXWF9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzKHtcbiAgICAuLi5wcm9wcyxcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQsXG4gICAgb25Mb2FkOiAodG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpID0+IHtcbiAgICAgIHNldExvYWRlZCh0cnVlKTtcbiAgICAgIHByb3BzLm9uTG9hZD8uKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KTtcbiAgICB9XG4gIH0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcEZvcm0pIHJldHVybjtcbiAgICBjb25zdCBmb3JtID0gSXIuZ2V0SW5zdGFuY2UoKSA/PyBuZXcgSXIoe1xuICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogcHJvcHMuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgIGZvcm1UYXJnZXQ6IGAjJHtGT1JNX1RBUkdFVH1gLFxuICAgICAgYmFzZVVybDogcHJvcHMuYmFzZVVybCxcbiAgICAgIGN1c3RvbUluaXRQYXJhbXM6IHByb3BzLmN1c3RvbUluaXRQYXJhbXMsXG4gICAgICBhbGxvd1RyYWNpbmc6IHByb3BzLmFsbG93VHJhY2luZyA/PyBmYWxzZSxcbiAgICAgIHByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbjogcHJvcHMucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uLFxuICAgICAgLi4uZm9ybUNhbGxiYWNrc1xuICAgIH0pO1xuICAgIHNldE9wRm9ybShmb3JtKTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlKGZvcm0pO1xuICAgIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlKHZhbHVlKTtcbiAgICBmb3JtLmluaXRGbG93cy5zdHJpcGVMaW5rLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldFN0cmlwZUxpbmtDdHJsKHJlc3VsdC5sb2FkZWRWYWx1ZS5jb250cm9sbGVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5sb29wLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldExvb3BDb25maWcoe1xuICAgICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgd2lkZ2V0OiByZXN1bHQubG9hZGVkVmFsdWUud2lkZ2V0UHJvcHMsXG4gICAgICAgICAgY29uZmlnOiByZXN1bHQubG9hZGVkVmFsdWUuaW5pdExvb3BDb25uZWN0UHJvcHNcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgIXJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRMb29wQ29uZmlnKHtcbiAgICAgICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICB3aWRnZXQ6IG51bGwsXG4gICAgICAgICAgY29uZmlnOiBudWxsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZSkge1xuICAgICAgICBzZXRBaXJ3YWxsZXgoKHByZXYpID0+ICh7XG4gICAgICAgICAgYXBwbGVQYXk6IHByZXYuYXBwbGVQYXksXG4gICAgICAgICAgZ29vZ2xlUGF5OiByZXN1bHQubG9hZGVkVmFsdWVcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBnb29nbGVQYXk6IHByZXYuZ29vZ2xlUGF5LFxuICAgICAgICAgIGFwcGxlUGF5OiByZXN1bHQubG9hZGVkVmFsdWVcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBmb3JtLmRlc3Ryb3koKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIGlmICghb3BGb3JtKSB7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHt9KTtcbiAgfVxuICBjb25zdCBjaGlsZHJlblByb3BzID0ge1xuICAgIHN1Ym1pdDogb3BGb3JtLnN1Ym1pdENhcmQsXG4gICAgc3VibWl0V2l0aDogb3BGb3JtLmdlbmVyYWxTdWJtaXQsXG4gICAgYXBwbGVQYXk6IHBheW1lbnRSZXF1ZXN0cy5hcHBsZV9wYXksXG4gICAgZ29vZ2xlUGF5OiBwYXltZW50UmVxdWVzdHMuZ29vZ2xlX3BheSxcbiAgICBsb2FkZWQsXG4gICAgLy8gRGlzYWJsZSBkeW5hbWljIHByZXZpZXdzIGZlYXR1cmUgZm9yIG5vd1xuICAgIHByZXZpZXc6IHtcbiAgICAgIGFtb3VudDogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH0sXG4gICAgc3RyaXBlTGluazogc3RyaXBlTGlua0N0cmwsXG4gICAgYWlyd2FsbGV4LFxuICAgIGxvb3A6IGxvb3BDb25maWdcbiAgfTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHsgY2hpbGRyZW46IGVsZW1lbnRzQ29udGV4dFZhbHVlID8gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50c0NvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGVsZW1lbnRzQ29udGV4dFZhbHVlLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7IGlkOiBGT1JNX1RBUkdFVCwgY2xhc3NOYW1lOiBwcm9wcy5jbGFzc05hbWUsIGNoaWxkcmVuOiBwcm9wcy5jaGlsZHJlbihjaGlsZHJlblByb3BzKSB9KSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHt9KSB9KTtcbn07XG5jb25zdCBnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSA9IChvcEZvcm0pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBmb3JtSWQ6IG9wRm9ybS5mb3JtSWQsXG4gICAgZm9ybUhlaWdodDogb3BGb3JtLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCxcbiAgICByZWZlcnJlcjogb3BGb3JtLnJlZmVycmVyLFxuICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IG9wRm9ybS5jaGVja291dFNlY3VyZVRva2VuLFxuICAgIHJlZ2lzdGVySWZyYW1lOiBvcEZvcm0ucmVnaXN0ZXJJZnJhbWUsXG4gICAgYmFzZVVybDogb3BGb3JtLmJhc2VVcmxcbiAgfTtcbn07XG5cbmV4cG9ydCB7IENhcmRDdmNFbGVtZW50IGFzIEMsIERlIGFzIEQsIEVsZW1lbnRzRm9ybSBhcyBFLCBGaWVsZE5hbWUgYXMgRiwgR3QgYXMgRywgSWkgYXMgSSwgSmkgYXMgSiwgSywgTmUgYXMgTiwgT3QgYXMgTywgUGF5SW5GYWlsZWQgYXMgUCwgUWUgYXMgUSwgVGkgYXMgVCwgVWkgYXMgVSwgWGUgYXMgWCwgYW4gYXMgYSwgeXQgYXMgYiwgenQgYXMgYywgcXQgYXMgZCwgQ2FyZEVsZW1lbnQgYXMgZSwgZnIgYXMgZiwgQ2FyZEV4cGlyeUVsZW1lbnQgYXMgZywgQ2FyZE51bWJlckVsZW1lbnQgYXMgaCwgUGF5SW5TdGF0ZSBhcyBpLCBFbnZpcm9ubWVudCBhcyBqLCBubiBhcyBuLCBxaSBhcyBxLCBybiBhcyByLCB1c2VPcGVuUGF5RWxlbWVudHMgYXMgdSwgeWUgYXMgeSwgemkgYXMgeiB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsa0JBQUFBLFVBQXNCO0FBQy9CLFNBQVMsS0FBQUMsU0FBUztBQUNsQixPQUFPQyxRQUFXO0FBQ2xCLFNBQVMsTUFBQUMsVUFBVTtBQUNuQixTQUFTLE9BQUFDLElBQUssWUFBQUMsVUFBZ0I7QUFDOUIsU0FBUyxpQkFBQUMsSUFBZSxjQUFBQyxJQUFZLFlBQUFDLElBQVUsVUFBQUMsSUFBUSxXQUFBQyxJQUFTLGFBQUFDLElBQVcsZUFBQUMsVUFBbUI7QUFFN0YsU0FBU0MsR0FBU0MsR0FBUUMsR0FBVztBQUNuQyxNQUFJQyxJQUFpQixPQUFPO0FBQzVCLEVBQUFBLElBQWlCQSxFQUFlRixHQUFRQyxDQUFTLElBQUlELEVBQU8sWUFBWUM7QUFDMUU7QUFDQSxTQUFTRSxHQUFTSCxHQUFRSSxHQUFJO0FBQzVCLEVBQUlBLE1BQU8sV0FDVEEsSUFBS0osRUFBTztBQUdkLE1BQUlLLElBQW9CLE1BQU07QUFDOUIsRUFBQUEsS0FBcUJBLEVBQWtCTCxHQUFRSSxDQUFFO0FBQ25EO0FBRUEs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RUFBSyxRQUFRO0FBQUEsSUFDZjtBQUFBLEVBQ0YsR0FBRyxDQUFDLENBQUMsR0FDRCxDQUFDZDtBQUNILFdBQXVCLGdCQUFBeGlCLEdBQUl5akIsSUFBVSxDQUFDLENBQUM7QUFFekMsUUFBTUMsSUFBZ0I7QUFBQSxJQUNwQixRQUFRbEIsRUFBTztBQUFBLElBQ2YsWUFBWUEsRUFBTztBQUFBLElBQ25CLFVBQVVQLEVBQWdCO0FBQUEsSUFDMUIsV0FBV0EsRUFBZ0I7QUFBQSxJQUMzQixRQUFBVztBQUFBO0FBQUEsSUFFQSxTQUFTO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixXQUFXO0FBQUEsTUFDWCxPQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsWUFBWUU7QUFBQSxJQUNaLFdBQUFJO0FBQUEsSUFDQSxNQUFNRjtBQUFBLEVBQ1I7QUFDQSxTQUF1QixnQkFBQWhqQixHQUFJeWpCLElBQVUsRUFBRSxVQUFVZixJQUF1QyxnQkFBQTFpQixHQUFJekIsR0FBZ0IsVUFBVSxFQUFFLE9BQU9ta0IsR0FBc0IsVUFBMEIsZ0JBQUExaUIsR0FBSSxPQUFPLEVBQUUsSUFBSXNpQixJQUFhLFdBQVcxakIsRUFBTSxXQUFXLFVBQVVBLEVBQU0sU0FBUzhrQixDQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBb0IsZ0JBQUExakIsR0FBSXlqQixJQUFVLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOVQsR0FDTUYsS0FBMEIsQ0FBQ2YsT0FDeEI7QUFBQSxFQUNMLFFBQVFBLEVBQU87QUFBQSxFQUNmLFlBQVlBLEVBQU8sZUFBZTtBQUFBLEVBQ2xDLFVBQVVBLEVBQU87QUFBQSxFQUNqQixxQkFBcUJBLEVBQU87QUFBQSxFQUM1QixnQkFBZ0JBLEVBQU87QUFBQSxFQUN2QixTQUFTQSxFQUFPO0FBQ2xCOyIsCiAgIm5hbWVzIjogWyJjb25uZWN0VG9DaGlsZCIsICJ6IiwgImNoYWxrIiwgInY0IiwgImpzeCIsICJGcmFnbWVudCIsICJjcmVhdGVDb250ZXh0IiwgInVzZUNvbnRleHQiLCAidXNlU3RhdGUiLCAidXNlUmVmIiwgInVzZU1lbW8iLCAidXNlRWZmZWN0IiwgInVzZUNhbGxiYWNrIiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiZm4iLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzJDEiLCAiX2V4dGVuZFN0YXRpY3MiLCAiZCIsICJiIiwgInAiLCAiX18iLCAiX3N1cGVyIiwgIkN1c3RvbUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgIm51bGxPclVuZGVmT3IiLCAiQ291cG9uTWluaW1hbCIsICJMaW5lSXRlbSIsICJCcmFuZFNldHRpbmdzIiwgIkJyYW5kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJTdWJzY3JpcHRpb25JdGVtTWluaW1hbCIsICJTdWJzY3JpcHRpb25NaW5pbWFsIiwgIkludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCIsICJJbnZvaWNlTGluZUl0ZW1NaW5pbWFsIiwgIkRpc2NvdW50TWluaW1hbCIsICJJbnZvaWNlTWluaW1hbCIsICJDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAiQ29tcGxldGVkRm9ybVByZWZpbGwiLCAiRXhwaXJlZEZvcm1QcmVmaWxsIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiTmV3Q3VzdG9tZXJGaWVsZHMiLCAiUHJpY2VRdHkiLCAiQ2FydEluZm8iLCAiUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJab2RGaWVsZEVycm9yIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiY2FsbGJhY2tOYW1lIiwgImVycm9yTG9nZ2VyIiwgImFyZ3MiLCAiZXJyb3IiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJlcnIiLCAiZXh0ZW5kU3RhdGljcyIsICJfX2V4dGVuZHMiLCAiX19hd2FpdGVyIiwgInRoaXNBcmciLCAiX2FyZ3VtZW50cyIsICJQIiwgImdlbmVyYXRvciIsICJhZG9wdCIsICJ2YWx1ZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJmdWxmaWxsZWQiLCAic3RlcCIsICJlIiwgInJlamVjdGVkIiwgInJlc3VsdCIsICJfX2dlbmVyYXRvciIsICJib2R5IiwgIl8iLCAidCIsICJmIiwgInkiLCAiZyIsICJ2ZXJiIiwgIm4iLCAidiIsICJvcCIsICJfX3ZhbHVlcyIsICJvIiwgInMiLCAibSIsICJpIiwgIl9fcmVhZCIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkiLCAidG8iLCAiZnJvbSIsICJwYWNrIiwgImwiLCAiX19hd2FpdCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInEiLCAiYXdhaXRSZXR1cm4iLCAiYSIsICJyZXN1bWUiLCAic2V0dGxlIiwgImZ1bGZpbGwiLCAiX19hc3luY1ZhbHVlcyIsICJpc0Z1bmN0aW9uIiwgInZhbHVlIiwgImNyZWF0ZUVycm9yQ2xhc3MiLCAiY3JlYXRlSW1wbCIsICJfc3VwZXIiLCAiaW5zdGFuY2UiLCAiY3RvckZ1bmMiLCAiVW5zdWJzY3JpcHRpb25FcnJvciIsICJlcnJvcnMiLCAiZXJyIiwgImFyclJlbW92ZSIsICJhcnIiLCAiaXRlbSIsICJpbmRleCIsICJTdWJzY3JpcHRpb24iLCAiaW5pdGlhbFRlYXJkb3duIiwgImVfMSIsICJfYSIsICJlXzIiLCAiX2IiLCAiX3BhcmVudGFnZSIsICJfcGFyZW50YWdlXzEiLCAiX192YWx1ZXMiLCAiX3BhcmVudGFnZV8xXzEiLCAicGFyZW50XzEiLCAiZV8xXzEiLCAiaW5pdGlhbEZpbmFsaXplciIsICJlIiwgIl9maW5hbGl6ZXJzIiwgIl9maW5hbGl6ZXJzXzEiLCAiX2ZpbmFsaXplcnNfMV8xIiwgImZpbmFsaXplciIsICJleGVjRmluYWxpemVyIiwgIl9fc3ByZWFkQXJyYXkiLCAiX19yZWFkIiwgImVfMl8xIiwgInRlYXJkb3duIiwgInBhcmVudCIsICJlbXB0eSIsICJFTVBUWV9TVUJTQ1JJUFRJT04iLCAiaXNTdWJzY3JpcHRpb24iLCAiY29uZmlnIiwgInRpbWVvdXRQcm92aWRlciIsICJoYW5kbGVyIiwgInRpbWVvdXQiLCAiYXJncyIsICJfaSIsICJoYW5kbGUiLCAiZGVsZWdhdGUiLCAicmVwb3J0VW5oYW5kbGVkRXJyb3IiLCAibm9vcCIsICJlcnJvckNvbnRleHQiLCAiY2IiLCAiU3Vic2NyaWJlciIsICJfX2V4dGVuZHMiLCAiZGVzdGluYXRpb24iLCAiX3RoaXMiLCAiRU1QVFlfT0JTRVJWRVIiLCAibmV4dCIsICJlcnJvciIsICJjb21wbGV0ZSIsICJTYWZlU3Vic2NyaWJlciIsICJfYmluZCIsICJiaW5kIiwgImZuIiwgInRoaXNBcmciLCAiQ29uc3VtZXJPYnNlcnZlciIsICJwYXJ0aWFsT2JzZXJ2ZXIiLCAiaGFuZGxlVW5oYW5kbGVkRXJyb3IiLCAib2JzZXJ2ZXJPck5leHQiLCAiY29udGV4dF8xIiwgImRlZmF1bHRFcnJvckhhbmRsZXIiLCAib2JzZXJ2YWJsZSIsICJpZGVudGl0eSIsICJ4IiwgInBpcGVGcm9tQXJyYXkiLCAiZm5zIiwgImlucHV0IiwgInByZXYiLCAiT2JzZXJ2YWJsZSIsICJzdWJzY3JpYmUiLCAib3BlcmF0b3IiLCAic3Vic2NyaWJlciIsICJpc1N1YnNjcmliZXIiLCAic291cmNlIiwgInNpbmsiLCAicHJvbWlzZUN0b3IiLCAiZ2V0UHJvbWlzZUN0b3IiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAib3BlcmF0aW9ucyIsICJpc09ic2VydmVyIiwgImhhc0xpZnQiLCAib3BlcmF0ZSIsICJpbml0IiwgImxpZnRlZFNvdXJjZSIsICJjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIiLCAib25OZXh0IiwgIm9uQ29tcGxldGUiLCAib25FcnJvciIsICJvbkZpbmFsaXplIiwgIk9wZXJhdG9yU3Vic2NyaWJlciIsICJzaG91bGRVbnN1YnNjcmliZSIsICJjbG9zZWRfMSIsICJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsICJTdWJqZWN0IiwgInN1YmplY3QiLCAiQW5vbnltb3VzU3ViamVjdCIsICJfYyIsICJvYnNlcnZlciIsICJvYnNlcnZlcnMiLCAiaGFzRXJyb3IiLCAiaXNTdG9wcGVkIiwgInRocm93bkVycm9yIiwgImRhdGVUaW1lc3RhbXBQcm92aWRlciIsICJBY3Rpb24iLCAic2NoZWR1bGVyIiwgIndvcmsiLCAic3RhdGUiLCAiZGVsYXkiLCAiaW50ZXJ2YWxQcm92aWRlciIsICJBc3luY0FjdGlvbiIsICJpZCIsICJfaWQiLCAiX3NjaGVkdWxlciIsICJfZGVsYXkiLCAiZXJyb3JlZCIsICJlcnJvclZhbHVlIiwgImFjdGlvbnMiLCAiU2NoZWR1bGVyIiwgInNjaGVkdWxlckFjdGlvbkN0b3IiLCAibm93IiwgIkFzeW5jU2NoZWR1bGVyIiwgIlNjaGVkdWxlckFjdGlvbiIsICJhY3Rpb24iLCAiYXN5bmNTY2hlZHVsZXIiLCAiaXNBcnJheUxpa2UiLCAiaXNQcm9taXNlIiwgImlzSW50ZXJvcE9ic2VydmFibGUiLCAiaXNBc3luY0l0ZXJhYmxlIiwgIm9iaiIsICJjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvciIsICJnZXRTeW1ib2xJdGVyYXRvciIsICJpdGVyYXRvciIsICJpc0l0ZXJhYmxlIiwgInJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IiLCAicmVhZGFibGVTdHJlYW0iLCAiX19hc3luY0dlbmVyYXRvciIsICJyZWFkZXIiLCAiZG9uZSIsICJfX2dlbmVyYXRvciIsICJfX2F3YWl0IiwgImlzUmVhZGFibGVTdHJlYW1MaWtlIiwgImlubmVyRnJvbSIsICJmcm9tSW50ZXJvcE9ic2VydmFibGUiLCAiZnJvbUFycmF5TGlrZSIsICJmcm9tUHJvbWlzZSIsICJmcm9tQXN5bmNJdGVyYWJsZSIsICJmcm9tSXRlcmFibGUiLCAiZnJvbVJlYWRhYmxlU3RyZWFtTGlrZSIsICJvYnMiLCAiYXJyYXkiLCAiaSIsICJwcm9taXNlIiwgIml0ZXJhYmxlIiwgIml0ZXJhYmxlXzEiLCAiaXRlcmFibGVfMV8xIiwgImFzeW5jSXRlcmFibGUiLCAicHJvY2VzcyIsICJhc3luY0l0ZXJhYmxlXzEiLCAiYXN5bmNJdGVyYWJsZV8xXzEiLCAiX19hd2FpdGVyIiwgIl9fYXN5bmNWYWx1ZXMiLCAiZXhlY3V0ZVNjaGVkdWxlIiwgInBhcmVudFN1YnNjcmlwdGlvbiIsICJyZXBlYXQiLCAic2NoZWR1bGVTdWJzY3JpcHRpb24iLCAidGhyb3dFcnJvciIsICJlcnJvck9yRXJyb3JGYWN0b3J5IiwgImVycm9yRmFjdG9yeSIsICJFbXB0eUVycm9yIiwgImxhc3RWYWx1ZUZyb20iLCAiX2hhc1ZhbHVlIiwgIl92YWx1ZSIsICJpc1ZhbGlkRGF0ZSIsICJUaW1lb3V0RXJyb3IiLCAiaW5mbyIsICJzY2hlZHVsZXJBcmciLCAiZmlyc3QiLCAiZWFjaCIsICJfd2l0aCIsICJ0aW1lb3V0RXJyb3JGYWN0b3J5IiwgIl9kIiwgIm1ldGEiLCAib3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24iLCAidGltZXJTdWJzY3JpcHRpb24iLCAibGFzdFZhbHVlIiwgInNlZW4iLCAic3RhcnRUaW1lciIsICJMb2FkZWRPbmNlUHVibGlzaGVyIiwgImVyck1zZyIsICJ2YWx1ZUlmTm90TG9hZGVkIiwgInN1YnNjcmlwdGlvbiIsICJ0aW1lb3V0Q29uZmlnIiwgImFzc2VydE5ldmVyIiwgInRpbWVvdXRQYXJhbXMiLCAieiIsICJjb25udG9CYXNlVXJscyIsICJnZXRDb25udG9VcmwiLCAiZW52IiwgImdldFdpbmRvd1NhZmUiLCAibWV0cmljc1B1Ymxpc2hlciIsICJNRVRSSUNTX1FVRVVFX0tFWSIsICJNQVhfUkVUUllfQVRURU1QVFMiLCAiQkFUQ0hfU0laRSIsICJCQVRDSF9JTlRFUlZBTF9NUyIsICJsb2dfXyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJNZXRyaWNzUXVldWUiLCAiZXZlbnROYW1lIiwgInByb3BlcnRpZXMiLCAiY29udGV4dFByb3BlcnRpZXMiLCAiZXZlbnQiLCAidjQiLCAic3RvcmVkUXVldWUiLCAic2FmZVdpbmRvdyIsICJjb250ZXh0IiwgImJhdGNoIiwgImJhdGNoUGF5bG9hZCIsICJjb25udG9VcmwiLCAibWV0cmljc1JvdXRlciIsICJldmVudHNUb0tlZXAiLCAibWV0cmljc1F1ZXVlIiwgIkFXWF9MT0FESU5HIiwgIlBheW1lbnRQcm9jZXNzb3IiLCAiQWR5ZW5FbnZpcm9ubWVudCIsICJFbnZpcm9ubWVudCIsICJFbnZpcm9ubWVudDIiLCAiUGF5SW5GYWlsZWQiLCAiUGF5SW5GYWlsZWQyIiwgIlBheUluU3RhdGUiLCAiUGF5SW5TdGF0ZTIiLCAiTE9PUF9MT0FESU5HIiwgIlJlcXVpcmVkU3RyaW5nIiwgIkZpZWxkTmFtZSIsICJPcHRpb25hbFN0cmluZyIsICJQUl9MT0FESU5HIiwgImVycl9fIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAia2V5IiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgIkZvcm1DYWxsYmFja3MiLCAiU3VibWl0TWV0aG9kcyIsICJTdWJtaXRNZXRob2RzMiIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJzdHlsZXMiLCAiRWxlbWVudHNDb250ZXh0IiwgImNyZWF0ZUNvbnRleHQiLCAidXNlT3BlblBheUVsZW1lbnRzIiwgInVzZUNvbnRleHQiLCAiRWxlbWVudEZyYW1lIiwgInByb3BzIiwgImVsZW1lbnRUeXBlIiwgImZvcm1JZCIsICJyZWZlcnJlciIsICJmb3JtSGVpZ2h0IiwgImNoZWNrb3V0U2VjdXJlVG9rZW4iLCAicmVnaXN0ZXJJZnJhbWUiLCAiYmFzZVVybCIsICJzdWJQYXRoIiwgImhhc0xvYWRlZCIsICJzZXRIYXNMb2FkZWQiLCAidXNlU3RhdGUiLCAiaWZyYW1lUmVmIiwgInVzZVJlZiIsICJlbGVtZW50U3R5bGUiLCAidXNlTWVtbyIsICJmcmFtZVN0eWxlIiwgInF1ZXJ5U3RyaW5nIiwgInBhcmFtcyIsICJ1c2VFZmZlY3QiLCAianN4IiwgInVybCIsICJDYXJkRWxlbWVudCIsICJFbGVtZW50VHlwZUVudW0iLCAiQ2FyZEN2Y0VsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiLCAiUW4iLCAiWG4iLCAiZW8iLCAiciIsICJuIiwgInMiLCAidG8iLCAibyIsICJPIiwgIkEiLCAiZiIsICJGciIsICJOciIsICJNciIsICJEciIsICJjZSIsICJybyIsICJfdCIsICJubyIsICJuZSIsICJvbyIsICJhbyIsICJpbyIsICJzbyIsICJjbyIsICJsbyIsICJ1byIsICJwbyIsICJtbyIsICJmbyIsICJ5byIsICJfbyIsICJ0dCIsICJobyIsICJnbyIsICJ3byIsICJ2byIsICJibyIsICJFbyIsICJDbyIsICJLZSIsICJQbyIsICJTbyIsICJrbyIsICJBbyIsICJJbyIsICJPciIsICJSbyIsICJUbyIsICJ3IiwgIkZvIiwgIkxyIiwgIlVyIiwgIk5vIiwgIk1vIiwgIlVlIiwgIkRvIiwgIk9vIiwgImpyIiwgIkxvIiwgIlVvIiwgImpvIiwgInJyIiwgInhyIiwgIm5yIiwgIiRyIiwgInhvIiwgIiRvIiwgIlZyIiwgIlZvIiwgIkdvIiwgInpvIiwgIkdyIiwgInFvIiwgInpyIiwgIkJvIiwgIllvIiwgIkhvIiwgIkpvIiwgIktvIiwgIldvIiwgIlpvIiwgIlFvIiwgIlhvIiwgImVhIiwgIkZ0IiwgInRhIiwgInJhIiwgIm5hIiwgIloiLCAib2EiLCAiYWEiLCAicXIiLCAiaWEiLCAic2EiLCAiUSIsICJpaSIsICJwbiIsICJtZSIsICJjaGFsayIsICJOdCIsICJfZSIsICJjYSIsICJ5IiwgIkJyIiwgIk1lIiwgInB0IiwgIm10IiwgIkZlIiwgImxhIiwgIm0iLCAiXyIsICJoIiwgInYiLCAicCIsICJ1YSIsICJodCIsICJDdCIsICJmdCIsICJydCIsICJvciIsICJZciIsICJIciIsICJKciIsICJLciIsICJXciIsICJhciIsICJsdCIsICJ4dCIsICJmYSIsICJNdCIsICJkYSIsICJQdCIsICJwYSIsICJpdCIsICJtYSIsICIkdCIsICJ5YSIsICJwZSIsICJnYSIsICJpciIsICJoYSIsICJ3YSIsICJ2YSIsICJiYSIsICJFYSIsICJDYSIsICJaciIsICJzciIsICJQYSIsICJTYSIsICJjciIsICJrYSIsICJsciIsICJBYSIsICJJYSIsICJSYSIsICJUYSIsICJGYSIsICJOYSIsICJNYSIsICJEYSIsICJPYSIsICJMYSIsICJVYSIsICJqYSIsICJ4YSIsICIkYSIsICJWYSIsICJHYSIsICJRciIsICJ6YSIsICJxYSIsICJCYSIsICJZYSIsICJIYSIsICJKYSIsICJLYSIsICJXYSIsICJaYSIsICJRYSIsICJYYSIsICJDIiwgIlllIiwgImd0IiwgInVyIiwgImVpIiwgInRpIiwgIlN0IiwgIlhyIiwgInd0IiwgIlUiLCAiRHQiLCAiZHIiLCAicmkiLCAibmkiLCAib2kiLCAic3QiLCAiYWkiLCAiYyIsICJWdCIsICJlbiIsICJ0biIsICJ0IiwgInNpIiwgImNpIiwgIlJyIiwgImxpIiwgInVpIiwgImRpIiwgInZ0IiwgInByIiwgImJ0IiwgInBpIiwgIm1pIiwgImZpIiwgInlpIiwgImhpIiwgIkVlIiwgIm1yIiwgImdpIiwgImwiLCAidSIsICJkIiwgIndpIiwgInZpIiwgIldlIiwgIlplIiwgIkd0IiwgIlFlIiwgInp0IiwgImJpIiwgIkVpIiwgIkNpIiwgIlZlIiwgIksiLCAiUGkiLCAiU2kiLCAia2kiLCAiQWkiLCAieXQiLCAiSWkiLCAiUmkiLCAiVGkiLCAiRmkiLCAiTmkiLCAiTWkiLCAiRGkiLCAiT2kiLCAia3QiLCAiTGkiLCAicXQiLCAiT3QiLCAicm4iLCAibm4iLCAiVWkiLCAiSGUiLCAiQnQiLCAiWXQiLCAiamkiLCAiSHQiLCAieGkiLCAiJGkiLCAib24iLCAiVmkiLCAiR2kiLCAiemkiLCAicWkiLCAiYW4iLCAiQmkiLCAiQXQiLCAic24iLCAiWWkiLCAiSGkiLCAiSmkiLCAiS2kiLCAiV2kiLCAiZnIiLCAiWGUiLCAieWUiLCAiTmUiLCAiSXQiLCAiWmkiLCAiRGUiLCAiUWkiLCAiY3QiLCAiY24iLCAiViIsICJlcyIsICJYaSIsICJ0cyIsICJUIiwgImhlIiwgImxuIiwgInJzIiwgIiQiLCAibnMiLCAib3MiLCAiYXMiLCAiZmUiLCAidW4iLCAieXIiLCAiaXMiLCAiSnQiLCAiZG4iLCAic3MiLCAiY29ubmVjdFRvQ2hpbGQiLCAiRXQiLCAiY3MiLCAibHMiLCAidXMiLCAibW4iLCAiSmUiLCAiZHMiLCAieW4iLCAiX3IiLCAiQ2UiLCAiR2UiLCAicHMiLCAibXMiLCAiZnMiLCAiaHMiLCAieXMiLCAiX3MiLCAiZ3MiLCAiX24iLCAiaG4iLCAid3MiLCAiZ24iLCAiSiIsICJ2cyIsICJicyIsICJ3biIsICJFcyIsICJDcyIsICJudCIsICJ2biIsICJQcyIsICJibiIsICJTcyIsICJLdCIsICJrcyIsICJBcyIsICJFbiIsICJJcyIsICJDbiIsICJQbiIsICJTbiIsICJCIiwgImtuIiwgIld0IiwgIlp0IiwgIlJzIiwgIlRzIiwgIlF0IiwgIm1sIiwgIkFuIiwgIm90IiwgIkciLCAiSW4iLCAiU2UiLCAiRnMiLCAiTnMiLCAiT2UiLCAiZXQiLCAiTXMiLCAiUm4iLCAiRHMiLCAiT3MiLCAiaHIiLCAiTHMiLCAiVXMiLCAianMiLCAiVG4iLCAiRm4iLCAiTm4iLCAiTW4iLCAiRG4iLCAiT24iLCAiWCIsICJMbiIsICJ4cyIsICIkcyIsICJWcyIsICJabiIsICJ6ZSIsICJVbiIsICJHcyIsICJSIiwgInpzIiwgImplIiwgIlh0IiwgIlJ0IiwgImVyIiwgInhlIiwgImpuIiwgInRyIiwgInRlIiwgIkllIiwgInFzIiwgIkJzIiwgImIiLCAiRSIsICJJIiwgIk0iLCAiUCIsICJGIiwgIlkiLCAib2UiLCAid2UiLCAiZGUiLCAiQWUiLCAiJGUiLCAia2UiLCAidXQiLCAiWXMiLCAiSHMiLCAiSnMiLCAicWUiLCAieG4iLCAiS3MiLCAiV3MiLCAicmUiLCAiUmUiLCAiWnMiLCAiUXMiLCAiZ2UiLCAiJG4iLCAiVm4iLCAiWHMiLCAiZWMiLCAiZHQiLCAiR24iLCAidGMiLCAicmMiLCAiYmUiLCAiQmUiLCAibmMiLCAib2MiLCAiYWMiLCAiem4iLCAiaWMiLCAic2MiLCAicW4iLCAiTHQiLCAiY2MiLCAibGMiLCAiZ3IiLCAidWMiLCAiQm4iLCAiZGMiLCAicGMiLCAiUGUiLCAiVXQiLCAibWMiLCAiWW4iLCAiZmMiLCAiaGMiLCAieWMiLCAiSm4iLCAiSG4iLCAiayIsICJ3ciIsICJnYyIsICJ3YyIsICJ2YyIsICJiYyIsICJIIiwgIktuIiwgIkVjIiwgIkNjIiwgInZyIiwgIlBjIiwgIlNjIiwgImtjIiwgInZlIiwgIkFjIiwgIlduIiwgIkljIiwgIlJjIiwgImFlIiwgImJyIiwgIlRjIiwgIkZjIiwgIkVyIiwgImoiLCAiTmMiLCAiTWMiLCAiRGMiLCAiT2MiLCAiamMiLCAiTGMiLCAiVWMiLCAicSIsICJ4YyIsICIkYyIsICJWYyIsICJUZSIsICJHYyIsICJxYyIsICJ6YyIsICJCYyIsICJZYyIsICJIYyIsICJpZSIsICJKYyIsICJLYyIsICJXYyIsICJlZSIsICJDciIsICJsZSIsICJqdCIsICJaYyIsICJRYyIsICJYYyIsICJMIiwgImVsIiwgIlR0IiwgInRsIiwgInJsIiwgIm5sIiwgIlByIiwgIm9sIiwgImFsIiwgIlNyIiwgImlsIiwgInNsIiwgImNsIiwgImtyIiwgIkFyIiwgInNlIiwgIlciLCAidWUiLCAiSXIiLCAidXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzIiwgImZvcm1DYWxsYmFja3MiLCAidXNlUGF5bWVudFJlcXVlc3RzIiwgIm9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQiLCAicGF5bWVudFJlcXVlc3RzIiwgInNldFBheW1lbnRSZXF1ZXN0cyIsICJvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCIsICJ1c2VDYWxsYmFjayIsICJwYXltZW50UmVxdWVzdHMyIiwgIkZPUk1fVEFSR0VUIiwgIkVsZW1lbnRzRm9ybSIsICJvcEZvcm0iLCAic2V0T3BGb3JtIiwgImVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInNldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgImxvYWRlZCIsICJzZXRMb2FkZWQiLCAic3RyaXBlTGlua0N0cmwiLCAic2V0U3RyaXBlTGlua0N0cmwiLCAibG9vcENvbmZpZyIsICJzZXRMb29wQ29uZmlnIiwgImFpcndhbGxleCIsICJzZXRBaXJ3YWxsZXgiLCAidG90YWxBbW91bnRBdG9tcyIsICJjdXJyZW5jeSIsICJmb3JtIiwgImdldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInJlc3VsdCIsICJGcmFnbWVudCIsICJjaGlsZHJlblByb3BzIl0KfQo=