@getopenpay/openpay-js 0.5.26 → 0.6.0

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.
@@ -7230,7 +7230,7 @@ let mn;
7230
7230
  const Hu = async (e, t) => {
7231
7231
  if (typeof window > "u")
7232
7232
  return;
7233
- const r = await import("./index-D0FOudJN.js"), { ConsoleSpanExporter: n, SimpleSpanProcessor: o, WebTracerProvider: i } = r, s = await import("./index-D6f0X3Uu.js"), { FetchInstrumentation: l } = s, c = await import("./index-C_GlgonQ.js"), { ZoneContextManager: u } = c, d = await import("./index-DWo94lYT.js"), { registerInstrumentations: p } = d, f = await import("./index-Csx4Wltv.js"), { Resource: y } = f, _ = await import("./detect-resources-Cpv_kfok.js").then((oe) => oe.d), { detectResourcesSync: h } = _, g = await import("./index-BQYhCs-D.js"), { OTLPTraceExporter: P } = g, w = await import("./index-BdZkV1qu.js"), { B3Propagator: k, B3InjectEncoding: C } = w, M = await import("./index-CbeVlJ2Q.js"), { BatchSpanProcessor: v } = M;
7233
+ const r = await import("./index-Dmo9nIum.js"), { ConsoleSpanExporter: n, SimpleSpanProcessor: o, WebTracerProvider: i } = r, s = await import("./index-Br0QkJt0.js"), { FetchInstrumentation: l } = s, c = await import("./index-BkA9LK8w.js"), { ZoneContextManager: u } = c, d = await import("./index-BVIgF1fA.js"), { registerInstrumentations: p } = d, f = await import("./index-Bep5TMrW.js"), { Resource: y } = f, _ = await import("./detect-resources-BAYJajZm.js").then((oe) => oe.d), { detectResourcesSync: h } = _, g = await import("./index-C5zsqlGC.js"), { OTLPTraceExporter: P } = g, w = await import("./index-BVQ9pn_v.js"), { B3Propagator: k, B3InjectEncoding: C } = w, M = await import("./index-Dk4U5ONg.js"), { BatchSpanProcessor: v } = M;
7234
7234
  lr(`Initializing tracer with version ${e} and baseUrl ${t}`);
7235
7235
  const F = Ku(t);
7236
7236
  lr(`Using collector URL ${F}`);
@@ -7857,7 +7857,7 @@ const Zu = (e, t, r) => {
7857
7857
  z()?.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), ls(), this.registeredElements = null, delete window.ojs, b("form_destroyed");
7858
7858
  }, this.updateCallbacks = (o) => {
7859
7859
  this.formCallbacks.setCallbacks(o);
7860
- }, be.assignAsSingleton(this), this.ojsVersion = "0.5.26", this.ojsReleaseVersion = "0.5.26", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = gr.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${Ke()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new Ju(), this.deviceToken = oo(), cs();
7860
+ }, be.assignAsSingleton(this), this.ojsVersion = "0.6.0", this.ojsReleaseVersion = "0.6.0", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = gr.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${Ke()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new Ju(), this.deviceToken = oo(), cs();
7861
7861
  const { framework: r, version: n } = Ou();
7862
7862
  $n(this.baseUrl).then((o) => {
7863
7863
  if (!mr.current.isSuccess) {
@@ -7946,4 +7946,4 @@ export {
7946
7946
  ze as t,
7947
7947
  Er as u
7948
7948
  };
7949
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA5fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzJDEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG52YXIgQ3VzdG9tRXJyb3IgPSBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0oRXJyb3IpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMVwiXSA9IFwibGluZTFcIjtcbiAgRmllbGROYW1lMltcIkxJTkUyXCJdID0gXCJsaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiTElORTNcIl0gPSBcImxpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTFcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUyXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTNcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DSVRZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19TVEFURVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzU3RhdGVcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0NPVU5UUllcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX1pJUF9DT0RFXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkdcIl0gPSBcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiSVNfQlVTSU5FU1NfUFVSQ0hBU0VcIl0gPSBcImlzQnVzaW5lc3NQdXJjaGFzZVwiO1xuICBGaWVsZE5hbWUyW1wiQlVTSU5FU1NfTkFNRVwiXSA9IFwiYnVzaW5lc3NOYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJUQVhfSURcIl0gPSBcInRheElkXCI7XG4gIEZpZWxkTmFtZTJbXCJUQVhfSURfVFlQRVwiXSA9IFwidGF4SWRUeXBlXCI7XG4gIHJldHVybiBGaWVsZE5hbWUyO1xufSkoRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IEZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oRmllbGROYW1lKTtcbnZhciBQcml2YXRlRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoUHJpdmF0ZUZpZWxkTmFtZTIpID0+IHtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZE51bWJlclwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkRXhwaXJ5XCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmRDdmNcIjtcbiAgcmV0dXJuIFByaXZhdGVGaWVsZE5hbWUyO1xufSkoUHJpdmF0ZUZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBQcml2YXRlRmllbGROYW1lRW51bSA9IHoubmF0aXZlRW51bShQcml2YXRlRmllbGROYW1lKTtcbmNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6LnVuaW9uKFtGaWVsZE5hbWVFbnVtLCBQcml2YXRlRmllbGROYW1lRW51bV0pO1xudmFyIEVsZW1lbnRUeXBlRW51bSA9IC8qIEBfX1BVUkVfXyAqLyAoKEVsZW1lbnRUeXBlRW51bTIpID0+IHtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRcIl0gPSBcImNhcmRcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkLW51bWJlclwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmQtZXhwaXJ5XCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZC1jdmNcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNERV9CUklER0VcIl0gPSBcImNkZS1icmlkZ2VcIjtcbiAgcmV0dXJuIEVsZW1lbnRUeXBlRW51bTI7XG59KShFbGVtZW50VHlwZUVudW0gfHwge30pO1xuY29uc3QgX0VsZW1lbnRUeXBlRW51bVpvZCA9IHouZW51bShbXCJjYXJkXCIsIFwiY2FyZC1udW1iZXJcIiwgXCJjYXJkLWV4cGlyeVwiLCBcImNhcmQtY3ZjXCIsIFwiY2RlLWJyaWRnZVwiXSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBCYXNlRWxlbWVudHNTdHlsZSA9IHoub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlclN0eWxlOiB6Lm9iamVjdCh7XG4gICAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZ1xuICB9KS5vcHRpb25hbCgpXG59KTtcbkJhc2VFbGVtZW50c1N0eWxlLmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogT3B0aW9uYWxTdHJpbmcsXG4gIHBsYWNlaG9sZGVyOiB6Lm9iamVjdCh7XG4gICAgY2FyZE51bWJlcjogT3B0aW9uYWxTdHJpbmcsXG4gICAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgICBjdmM6IE9wdGlvbmFsU3RyaW5nXG4gIH0pLm9wdGlvbmFsKClcbn0pO1xuQmFzZUVsZW1lbnRzU3R5bGUuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBPcHRpb25hbFN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqXG4gICAqIFRoZSBjYXJkIGljb24gYXQgdGhlIHN0YXJ0IG9mIHRoZSBjYXJkIG51bWJlciBpbnB1dCBmaWVsZFxuICAgKiBJdCB3b24ndCBhZmZlY3QgYWZ0ZXIgdGhlIGljb24gY2hhbmdlZCB0byBjYXJkIGJyYW5kIGFmdGVyIHRoZSB1c2VyIGlucHV0IHRoZSBjYXJkIG51bWJlclxuICAgKi9cbiAgaWNvbjogei5vYmplY3Qoe1xuICAgIGNvbG9yOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSkub3B0aW9uYWwoKVxufSk7XG5CYXNlRWxlbWVudHNTdHlsZS5leHRlbmQoe1xuICBkaXNhYmxlQXV0b0ZpbGw6IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlcjogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbkJhc2VFbGVtZW50c1N0eWxlLmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogT3B0aW9uYWxTdHJpbmcsXG4gIHBsYWNlaG9sZGVyOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0gei5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIG9iZnVzY2F0ZWRWYWx1ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6Lm9wdGlvbmFsKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwaG9uZVwiIC8qIFBIT05FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUyXCIgLyogTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTNcIiAvKiBMSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiIC8qIElTX1NISVBQSU5HX1NBTUVfQVNfQklMTElORyAqL106IHouY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KHRydWUpLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUyXCIgLyogU0hJUFBJTkdfTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTNcIiAvKiBTSElQUElOR19MSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJidXNpbmVzc05hbWVcIiAvKiBCVVNJTkVTU19OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInRheElkXCIgLyogVEFYX0lEICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInRheElkVHlwZVwiIC8qIFRBWF9JRF9UWVBFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJwaG9uZVwiIC8qIFBIT05FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUyXCIgLyogTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTNcIiAvKiBMSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiIC8qIElTX1NISVBQSU5HX1NBTUVfQVNfQklMTElORyAqL106IHouY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KHRydWUpLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUyXCIgLyogU0hJUFBJTkdfTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTNcIiAvKiBTSElQUElOR19MSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJidXNpbmVzc05hbWVcIiAvKiBCVVNJTkVTU19OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInRheElkXCIgLyogVEFYX0lEICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInRheElkVHlwZVwiIC8qIFRBWF9JRF9UWVBFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZyxcbiAgcGF5bWVudFJvdXRlSWQ6IE9wdGlvbmFsU3RyaW5nXG59KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbmNvbnN0IFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHouYm9vbGVhbigpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6LnN0cmluZygpLFxuICBwYXltZW50TWV0aG9kSWQ6IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50UGF5bG9hZCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG5jb25zdCBFbGVtZW50RXZlbnQgPSB6Lm9iamVjdCh7XG4gIHBheWxvYWQ6IEV2ZW50UGF5bG9hZCxcbiAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBlbGVtZW50SWQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogei5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6LnN0cmluZygpLFxuICBwYXltZW50X21ldGhvZF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KHouc3RyaW5nKCkpKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHoub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHouc3RyaW5nKCksXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3VjY2Vzczogei5saXRlcmFsKGZhbHNlKSxcbiAgZXJyb3JfdHlwZTogei5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6LmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRSZXNwb25zZSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHoub2JqZWN0KHsgc3VjY2Vzczogei5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xudmFyIFRocmVlRFNTdGF0dXMgPSAvKiBAX19QVVJFX18gKi8gKChUaHJlZURTU3RhdHVzMikgPT4ge1xuICBUaHJlZURTU3RhdHVzMltcIlNVQ0NFU1NcIl0gPSBcInN1Y2Nlc3NcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJGQUlMVVJFXCJdID0gXCJmYWlsdXJlXCI7XG4gIFRocmVlRFNTdGF0dXMyW1wiQ0FOQ0VMTEVEXCJdID0gXCJjYW5jZWxsZWRcIjtcbiAgcmV0dXJuIFRocmVlRFNTdGF0dXMyO1xufSkoVGhyZWVEU1N0YXR1cyB8fCB7fSk7XG5jb25zdCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pLFxuICBocmVmOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56Lm9iamVjdCh7XG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbmNvbnN0IENvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6LnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogei5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogei5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBBV1hCYW5rID0gei5vYmplY3Qoe1xuICBiYW5rX25hbWU6IHouc3RyaW5nKCksXG4gIGRpc3BsYXlfbmFtZTogei5zdHJpbmcoKSxcbiAgcmVzb3VyY2VzOiB6Lm9iamVjdCh7XG4gICAgbG9nb191cmw6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KVxufSk7XG5jb25zdCBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgYXZhaWxhYmxlX2JhbmtzOiBudWxsT3JVbmRlZk9yJDEoei5hcnJheShBV1hCYW5rKSlcbn0pO1xuY29uc3QgQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKHRydWUpLCBocmVmOiB6LnN0cmluZygpIH0pLFxuICB6Lm9iamVjdCh7IHByZXNlbnQ6IHoubGl0ZXJhbChmYWxzZSkgfSlcbl0pO1xuY29uc3QgQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogei5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbCksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSkpLFxuICBwb3N0X2NoZWNrb3V0X3JlZGlyZWN0X3RvOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSlcbn0pO1xuY29uc3QgRUZURm9ybURhdGEgPSB6Lm9iamVjdCh7XG4gIGluc3RpdHV0aW9uTnVtYmVyOiB6LnN0cmluZygpLFxuICB0cmFuc2l0TnVtYmVyOiB6LnN0cmluZygpLFxuICBhY2NvdW50TnVtYmVyOiB6LnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogei5lbnVtKFtcInBlcnNvbmFsXCIsIFwiYnVzaW5lc3NcIl0pXG59KTtcbnoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBFRlRGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEJBQ1NGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgc29ydENvZGU6IHouc3RyaW5nKCksXG4gIGFjY291bnROdW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6LmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xuei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IEJBQ1NGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFNFUEFGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaWJhbjogei5zdHJpbmcoKSxcbiAgYWNjb3VudFR5cGU6IHouZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogU0VQQUZvcm1EYXRhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQUNITWljcm9EZXBvc2l0Rm9ybURhdGEgPSB6Lm9iamVjdCh7XG4gIGFjY291bnRfbnVtYmVyOiB6LnN0cmluZygpLFxuICBhYmFfcm91dGluZ19udW1iZXI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRUZUTWljcm9EZXBvc2l0Rm9ybURhdGEgPSB6Lm9iamVjdCh7XG4gIGluc3RpdHV0aW9uX251bWJlcjogei5zdHJpbmcoKSxcbiAgdHJhbnNpdF9udW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnRfbnVtYmVyOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IEJBQ1NNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgYWNjb3VudF9udW1iZXI6IHouc3RyaW5nKCksXG4gIHNvcnRfY29kZTogei5zdHJpbmcoKVxufSk7XG5jb25zdCBTRVBBTWljcm9EZXBvc2l0Rm9ybURhdGEgPSB6Lm9iamVjdCh7XG4gIGliYW46IHouc3RyaW5nKClcbn0pO1xuY29uc3QgTWljcm9EZXBvc2l0U3RhdHVzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogei51bmlvbihbXG4gICAgQUNITWljcm9EZXBvc2l0Rm9ybURhdGEsXG4gICAgRUZUTWljcm9EZXBvc2l0Rm9ybURhdGEsXG4gICAgQkFDU01pY3JvRGVwb3NpdEZvcm1EYXRhLFxuICAgIFNFUEFNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICB6Lm9iamVjdCh7IGVycm9yOiB6LnN0cmluZygpIH0pXG4gIF0pLm9wdGlvbmFsKClcbn0pO1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6Lm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xuei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBDREVSZXNwb25zZUVycm9yID0gei5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZHVyYXRpb246IHouc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHoub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHoubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogei5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50czogei5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmVzOiB6LmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3JlYXRlZDogei5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHouYXJyYXkoSW52b2ljZU1pbmltYWwpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3Ioei5hcnJheSh6LnN0cmluZygpKSksXG4gIHBheW1lbnRfbWV0aG9kX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogbnVsbE9yVW5kZWZPcihDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwpLFxuICBjb3Vwb25zOiB6LmFycmF5KENvdXBvbk1pbmltYWwpXG59KTtcbmNvbnN0IF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24gPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwib3BlblwiKSxcbiAgbG9jYWxlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0b2tlbjogei5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X3NldHRpbmdzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKSxcbiAgcmV0dXJuX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgc3VjY2Vzc191cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGZpbmFsX2ZlYXR1cmVfcm9sbG91dF9zZXR0aW5nczogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgUGF5bWVudEZvcm1QcmVmaWxsID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHoubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6Lm51bGxhYmxlKHoudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHouZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogei5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xuei51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56Lm9iamVjdCh7XG4gIGxvZ286IHouc3RyaW5nKCksXG4gIGljb246IHouc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHouc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQ29tcGxldGVBZGRyZXNzID0gei5vYmplY3Qoe1xuICBsaW5lMTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsaW5lMjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsaW5lMzogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjaXR5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHN0YXRlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNvdW50cnk6IHouc3RyaW5nKCksXG4gIHppcF9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHouYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2VtYWlsOiB6LnN0cmluZygpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3MsXG4gIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcy5vcHRpb25hbCgpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHouYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VfY29uZmlybWVkX3BtX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbnouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSk7XG5jb25zdCBOZXdDdXN0b21lckZpZWxkcyA9IHoub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfYnVzaW5lc3NfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl90YXhfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfdGF4X2lkX3R5cGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcyxcbiAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcy5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfcGhvbmU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHoub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0gei5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6LmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG4gIHVzZV91bmlmaWVkX2NjX2Zsb3c6IG51bGxPclVuZGVmT3Ioei5ib29sZWFuKCkpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IFN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjY19wbV9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPcihDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5yZWNvcmQoei5hbnkoKSk7XG56Lm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTE6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMzogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgY2l0eTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgc3RhdGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNvdW50cnk6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBidXNpbmVzc19uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0YXhfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRheF9pZF90eXBlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBudWxsT3JVbmRlZk9yKHouYm9vbGVhbigpKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgbWVzc2FnZTogei5zdHJpbmcoKVxufSk7XG5jb25zdCBDaGVja291dFN0YW5kYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgZXZlbnRzOiB6LmFycmF5KFxuICAgIHoub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56LmFueSgpLm9wdGlvbmFsKCk7XG56Lm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBTZXRVc2VyRGV2aWNlVG9rZW5SZXNwb25zZSA9IHoub2JqZWN0KHt9KTtcbmNvbnN0IFVzZXJBY3Rpb25GRVBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiB6LnN0cmluZygpLFxuICBfdW5pZmllZF9jY19wY2NzX2lkOiB6LnN0cmluZygpXG59KS5jYXRjaGFsbCh6LmFueSgpKTtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZSA9IHouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBab2RGaWVsZEVycm9ycyA9IHouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxufTtcbmNvbnN0IGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlID0gKG9nRXJyb3JNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRVtrZXldID8/IG9nRXJyb3JNZXNzYWdlO1xufTtcbmNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShyZXNwb25zZVswXS5tc2cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBgJHtgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpgfVxuJHtidWxsZXRlZH1gO1xuICB9XG59O1xuY29uc3QgY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgY29uc3QgbGlzdE9mRXJyb3JzID0gZXJyb3JzLm1hcCgoZXJyKSA9PiBgLSAke2Vyci5wYXRoLmpvaW4oXCIvXCIpfTogJHtlcnIubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbn07XG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgaWYgKGlzU3RyaW5naWZpZWRKc29uT2JqZWN0KGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3Iob2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoWm9kRmllbGRFcnJvcnMuc2FmZVBhcnNlKG9iaikuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICByZXR1cm4gZTIgKyBcIlwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZSArIFwiXCI7XG4gIH1cbn07XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvckxvZ2dlcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7Y2FsbGJhY2tOYW1lfSk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gIH0pO1xufTtcblxuY29uc3Qgc3VtID0gKGFycikgPT4ge1xuICByZXR1cm4gYXJyLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xufTtcblxuY29uc3QgYmVmb3JlVW5sb2FkSGFuZGxlciA9IChldmVudCkgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBldmVudC5yZXR1cm5WYWx1ZSA9IHRydWU7XG59O1xuY29uc3QgcHJldmVudE5hdmlnYXRpb24gPSAoKSA9PiB7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGJlZm9yZVVubG9hZEhhbmRsZXIpO1xufTtcbmNvbnN0IHN0b3BQcmV2ZW50TmF2aWdhdGlvbiA9ICgpID0+IHtcbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgYmVmb3JlVW5sb2FkSGFuZGxlcik7XG59O1xuXG5jb25zdCBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyA9IChzaW1wbGVPanNGbG93KSA9PiB7XG4gIGxldCBhY3RpdmVTdWJtaXNzaW9uID0gbnVsbDtcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICBpZiAoYWN0aXZlU3VibWlzc2lvbikge1xuICAgICAgY29uc29sZS53YXJuKFwiU2tpcHBpbmcgc3VibWlzc2lvbiBiZWNhdXNlIGl0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN1Ym1pc3Npb24gPSBTeW1ib2woXCJvanMtc3VibWlzc2lvblwiKTtcbiAgICBhY3RpdmVTdWJtaXNzaW9uID0gc3VibWlzc2lvbjtcbiAgICBjb25zdCBvbkFib3J0ID0gKCkgPT4ge1xuICAgICAgaWYgKGFjdGl2ZVN1Ym1pc3Npb24gIT09IHN1Ym1pc3Npb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYWN0aXZlU3VibWlzc2lvbiA9IG51bGw7XG4gICAgICBpZiAocGFyYW1zLmNvbnRleHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uKSB7XG4gICAgICAgIHN0b3BQcmV2ZW50TmF2aWdhdGlvbigpO1xuICAgICAgfVxuICAgIH07XG4gICAgcGFyYW1zLmFib3J0U2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIHRyeSB7XG4gICAgICBpZiAocGFyYW1zLmNvbnRleHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uKSB7XG4gICAgICAgIHByZXZlbnROYXZpZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dFN0YXJ0ZWQ/LigpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9zdGFydGVkXCIsIHtcbiAgICAgICAgY3BtOiBwYXJhbXMuY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZsb3dSZXN1bHQgPSBhd2FpdCBzaW1wbGVPanNGbG93KHBhcmFtcyk7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X3N1Y2Nlc3NcIiwge1xuICAgICAgICBjcG06IHBhcmFtcy5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIC4uLmZsb3dSZXN1bHRcbiAgICAgIH0pO1xuICAgICAgZm9yY2VQcm9jZXNzTWV0cmljc1F1ZXVlKCk7XG4gICAgICBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhmbG93UmVzdWx0LnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgICB9IGVsc2UgaWYgKGZsb3dSZXN1bHQubW9kZSA9PT0gXCJjaGVja291dFwiKSB7XG4gICAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3VjY2VzcyhcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5jdXN0b21lcl9pZCxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5wcm9jZXNzb3JzX3VzZWQgPz8gW10sXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQucGF5bWVudF9tZXRob2RfaWQgPz8gXCJcIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtmbG93UmVzdWx0fWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAocGFyYW1zLmFib3J0U2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICBjb25zdCBlcnJvckNvZGUgPSBhd2FpdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUocGFyYW1zLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7IGNwbTogcGFyYW1zLmNoZWNrb3V0UGF5bWVudE1ldGhvZCwgZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUsIGVycm9yIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBwYXJhbXMuYWJvcnRTaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICAgIGlmIChhY3RpdmVTdWJtaXNzaW9uID09PSBzdWJtaXNzaW9uKSB7XG4gICAgICAgIGFjdGl2ZVN1Ym1pc3Npb24gPSBudWxsO1xuICAgICAgICBpZiAocGFyYW1zLmNvbnRleHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uKSB7XG4gICAgICAgICAgc3RvcFByZXZlbnROYXZpZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuY29uc3QgYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCA9IChpbml0KSA9PiB7XG4gIHJldHVybiBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBpbml0KHBhcmFtcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiaW5pdC1lcnJvci1jYXRjaGVyXCIpO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGF3YWl0IHNhZmVseUdldFN0YW5kYXJkaXplZEVycm9yQ29kZShwYXJhbXMuY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgZXJyX18oZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UsIGVycm9yKTtcbiAgICAgIHRyYWNrKFwiaW5pdF9mbG93X2Vycm9yXCIsIHsgZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUsIGVycm9yIH0pO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IGVycm9yTWVzc2FnZSwgZXJyb3JDb2RlLCBpc0xvYWRpbmc6IGZhbHNlIH07XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZnVuY3Rpb24gX19yZWFkJDQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuZnVuY3Rpb24gX19zcHJlYWRBcnJheSQ0KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cblxuZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JDbGFzcyhjcmVhdGVJbXBsKSB7XG4gICAgdmFyIF9zdXBlciA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICBFcnJvci5jYWxsKGluc3RhbmNlKTtcbiAgICAgICAgaW5zdGFuY2Uuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgICB9O1xuICAgIHZhciBjdG9yRnVuYyA9IGNyZWF0ZUltcGwoX3N1cGVyKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvckZ1bmM7XG4gICAgcmV0dXJuIGN0b3JGdW5jO1xufVxuXG52YXIgVW5zdWJzY3JpcHRpb25FcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBVbnN1YnNjcmlwdGlvbkVycm9ySW1wbChlcnJvcnMpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBlcnJvcnNcbiAgICAgICAgICAgID8gZXJyb3JzLmxlbmd0aCArIFwiIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XFxuXCIgKyBlcnJvcnMubWFwKGZ1bmN0aW9uIChlcnIsIGkpIHsgcmV0dXJuIGkgKyAxICsgXCIpIFwiICsgZXJyLnRvU3RyaW5nKCk7IH0pLmpvaW4oJ1xcbiAgJylcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdVbnN1YnNjcmlwdGlvbkVycm9yJztcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgfTtcbn0pO1xuXG5mdW5jdGlvbiBhcnJSZW1vdmUoYXJyLCBpdGVtKSB7XG4gICAgaWYgKGFycikge1xuICAgICAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgMCA8PSBpbmRleCAmJiBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpcHRpb24gPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbihpbml0aWFsVGVhcmRvd24pIHtcbiAgICAgICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSBpbml0aWFsVGVhcmRvd247XG4gICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgIH1cbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZV8xLCBfYSwgZV8yLCBfYjtcbiAgICAgICAgdmFyIGVycm9ycztcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgICAgICBpZiAoX3BhcmVudGFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9wYXJlbnRhZ2VfMSA9IF9fdmFsdWVzKF9wYXJlbnRhZ2UpLCBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCk7ICFfcGFyZW50YWdlXzFfMS5kb25lOyBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50XzEgPSBfcGFyZW50YWdlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfMS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcGFyZW50YWdlXzFfMSAmJiAhX3BhcmVudGFnZV8xXzEuZG9uZSAmJiAoX2EgPSBfcGFyZW50YWdlXzEucmV0dXJuKSkgX2EuY2FsbChfcGFyZW50YWdlXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfcGFyZW50YWdlLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaW5pdGlhbEZpbmFsaXplciA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oaW5pdGlhbEZpbmFsaXplcikpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsRmluYWxpemVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGUgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yID8gZS5lcnJvcnMgOiBbZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgICAgIGlmIChfZmluYWxpemVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9maW5hbGl6ZXJzXzEgPSBfX3ZhbHVlcyhfZmluYWxpemVycyksIF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpOyAhX2ZpbmFsaXplcnNfMV8xLmRvbmU7IF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmluYWxpemVyID0gX2ZpbmFsaXplcnNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKGZpbmFsaXplcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICE9PSBudWxsICYmIGVycm9ycyAhPT0gdm9pZCAwID8gZXJyb3JzIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gX19zcHJlYWRBcnJheSQ0KF9fc3ByZWFkQXJyYXkkNChbXSwgX19yZWFkJDQoZXJyb3JzKSksIF9fcmVhZCQ0KGVyci5lcnJvcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnNfMV8xICYmICFfZmluYWxpemVyc18xXzEuZG9uZSAmJiAoX2IgPSBfZmluYWxpemVyc18xLnJldHVybikpIF9iLmNhbGwoX2ZpbmFsaXplcnNfMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdWJzY3JpcHRpb25FcnJvcihlcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0ZWFyZG93biAmJiB0ZWFyZG93biAhPT0gdGhpcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVhcmRvd24uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2EgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkucHVzaCh0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHJldHVybiBfcGFyZW50YWdlID09PSBwYXJlbnQgfHwgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgJiYgX3BhcmVudGFnZS5pbmNsdWRlcyhwYXJlbnQpKTtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50O1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICBhcnJSZW1vdmUoX3BhcmVudGFnZSwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgX2ZpbmFsaXplcnMgJiYgYXJyUmVtb3ZlKF9maW5hbGl6ZXJzLCB0ZWFyZG93bik7XG4gICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGVhcmRvd24uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLkVNUFRZID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVtcHR5ID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBlbXB0eS5jbG9zZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uO1xufSgpKTtcbnZhciBFTVBUWV9TVUJTQ1JJUFRJT04gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5mdW5jdGlvbiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24gfHxcbiAgICAgICAgKHZhbHVlICYmICdjbG9zZWQnIGluIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUucmVtb3ZlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmFkZCkgJiYgaXNGdW5jdGlvbih2YWx1ZS51bnN1YnNjcmliZSkpKTtcbn1cbmZ1bmN0aW9uIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZmluYWxpemVyKSkge1xuICAgICAgICBmaW5hbGl6ZXIoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZpbmFsaXplci51bnN1YnNjcmliZSgpO1xuICAgIH1cbn1cblxudmFyIGNvbmZpZyA9IHtcbiAgICBQcm9taXNlOiB1bmRlZmluZWR9O1xuXG52YXIgdGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheSQ0KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkJDQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICByZXR1cm4gKGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG5mdW5jdGlvbiByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnIpIHtcbiAgICB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub29wKCkgeyB9XG5cbmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpYmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZXI7XG59KFN1YnNjcmlwdGlvbikpO1xudmFyIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyO1xuICAgIH1cbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyO1xufSgpKTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICAgIHRocm93IGVycjtcbn1cbnZhciBFTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcCxcbiAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICBjb21wbGV0ZTogbm9vcCxcbn07XG5cbnZhciBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlKSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eTtcbiAgICB9XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZuc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBmbikgeyByZXR1cm4gZm4ocHJldik7IH0sIGlucHV0KTtcbiAgICB9O1xufVxuXG52YXIgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmUpIHtcbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIG9ic2VydmFibGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IGlzU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCkgPyBvYnNlcnZlck9yTmV4dCA6IG5ldyBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5mdW5jdGlvbiBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gcHJvbWlzZUN0b3IgIT09IG51bGwgJiYgcHJvbWlzZUN0b3IgIT09IHZvaWQgMCA/IHByb21pc2VDdG9yIDogY29uZmlnLlByb21pc2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBpc09ic2VydmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUubmV4dCkgJiYgaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBpc1N1YnNjcmliZXIodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaWJlcikgfHwgKGlzT2JzZXJ2ZXIodmFsdWUpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlLmxpZnQpO1xufVxuZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KGZ1bmN0aW9uIChsaWZ0ZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdChsaWZ0ZWRTb3VyY2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZScpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7XG59XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcblxudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnb2JqZWN0IHVuc3Vic2NyaWJlZCc7XG4gICAgfTtcbn0pO1xuXG52YXIgU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFub255bW91c1N1YmplY3QodGhpcywgdGhpcyk7XG4gICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oX3RoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYS5vYnNlcnZlcnM7XG4gICAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xudmFyIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnIpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcblxudmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChEYXRlKS5ub3coKTtcbiAgICB9fTtcblxudmFyIEFjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBBY3Rpb247XG59KFN1YnNjcmlwdGlvbikpO1xuXG52YXIgaW50ZXJ2YWxQcm92aWRlciA9IHtcbiAgICBzZXRJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheSQ0KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkJDQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgcmV0dXJuIChjbGVhckludGVydmFsKShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbnZhciBBc3luY0FjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMud29yayA9IHdvcms7XG4gICAgICAgIF90aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB2YXIgaWQgPSB0aGlzLmlkO1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWxheSA9IGRlbGF5O1xuICAgICAgICB0aGlzLmlkID0gKF9hID0gdGhpcy5pZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXIsIHRoaXMuaWQsIGRlbGF5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBfaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gaW50ZXJ2YWxQcm92aWRlci5zZXRJbnRlcnZhbChzY2hlZHVsZXIuZmx1c2guYmluZChzY2hlZHVsZXIsIHRoaXMpLCBkZWxheSk7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoX3NjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoZGVsYXkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBkZWxheSAmJiB0aGlzLnBlbmRpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGludGVydmFsUHJvdmlkZXIuY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ2V4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yID0gdGhpcy5fZXhlY3V0ZShzdGF0ZSwgZGVsYXkpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnBlbmRpbmcgPT09IGZhbHNlICYmIHRoaXMuaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIF9kZWxheSkge1xuICAgICAgICB2YXIgZXJyb3JlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3JWYWx1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMud29yayhzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgZXJyb3JWYWx1ZSA9IGUgPyBlIDogbmV3IEVycm9yKCdTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yZWQpIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvclZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGlkID0gX2EuaWQsIHNjaGVkdWxlciA9IF9hLnNjaGVkdWxlcjtcbiAgICAgICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7XG4gICAgICAgICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBhcnJSZW1vdmUoYWN0aW9ucywgdGhpcyk7XG4gICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZWxheSA9IG51bGw7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY0FjdGlvbjtcbn0oQWN0aW9uKSk7XG5cbnZhciBTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNjaGVkdWxlcihzY2hlZHVsZXJBY3Rpb25DdG9yLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gc2NoZWR1bGVyQWN0aW9uQ3RvcjtcbiAgICAgICAgdGhpcy5ub3cgPSBub3c7XG4gICAgfVxuICAgIFNjaGVkdWxlci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAod29yaywgZGVsYXksIHN0YXRlKSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCB3b3JrKS5zY2hlZHVsZShzdGF0ZSwgZGVsYXkpO1xuICAgIH07XG4gICAgU2NoZWR1bGVyLm5vdyA9IGRhdGVUaW1lc3RhbXBQcm92aWRlci5ub3c7XG4gICAgcmV0dXJuIFNjaGVkdWxlcjtcbn0oKSk7XG5cbnZhciBBc3luY1NjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jU2NoZWR1bGVyKFNjaGVkdWxlckFjdGlvbiwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIFNjaGVkdWxlckFjdGlvbiwgbm93KSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5hY3Rpb25zID0gW107XG4gICAgICAgIF90aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY1NjaGVkdWxlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jU2NoZWR1bGVyO1xufShTY2hlZHVsZXIpKTtcblxudmFyIGFzeW5jU2NoZWR1bGVyID0gbmV3IEFzeW5jU2NoZWR1bGVyKEFzeW5jQWN0aW9uKTtcblxudmFyIGlzQXJyYXlMaWtlID0gKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ICYmIHR5cGVvZiB4Lmxlbmd0aCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHggIT09ICdmdW5jdGlvbic7IH0pO1xuXG5mdW5jdGlvbiBpc1Byb21pc2UodmFsdWUpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWUudGhlbik7XG59XG5cbmZ1bmN0aW9uIGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dFtvYnNlcnZhYmxlXSk7XG59XG5cbmZ1bmN0aW9uIGlzQXN5bmNJdGVyYWJsZShvYmopIHtcbiAgICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChpbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnID8gJ2FuIGludmFsaWQgb2JqZWN0JyA6IFwiJ1wiICsgaW5wdXQgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3ltYm9sSXRlcmF0b3IoKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgIVN5bWJvbC5pdGVyYXRvcikge1xuICAgICAgICByZXR1cm4gJ0BAaXRlcmF0b3InO1xuICAgIH1cbiAgICByZXR1cm4gU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIGl0ZXJhdG9yID0gZ2V0U3ltYm9sSXRlcmF0b3IoKTtcblxuZnVuY3Rpb24gaXNJdGVyYWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnB1dFtpdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yXzEoKSB7XG4gICAgICAgIHZhciByZWFkZXIsIF9hLCB2YWx1ZSwgZG9uZTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDI7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQocmVhZGVyLnJlYWQoKSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgX2EgPSBfYi5zZW50KCksIHZhbHVlID0gX2EudmFsdWUsIGRvbmUgPSBfYS5kb25lO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRvbmUpIHJldHVybiBbMywgNV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdCh2b2lkIDApXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMiwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbNCwgX19hd2FpdCh2YWx1ZSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNjogcmV0dXJuIFs0LCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDJdO1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlKG9iaikge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9iai5nZXRSZWFkZXIpO1xufVxuXG5mdW5jdGlvbiBpbm5lckZyb20oaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUludGVyb3BPYnNlcnZhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFycmF5TGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUHJvbWlzZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUl0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpO1xufVxuZnVuY3Rpb24gZnJvbUludGVyb3BPYnNlcnZhYmxlKG9iaikge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb2JzID0gb2JqW29ic2VydmFibGVdKCk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9icy5zdWJzY3JpYmUpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZScpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZShhcnJheSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aCAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkrKykge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGFycmF5W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUHJvbWlzZShwcm9taXNlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb21pc2VcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pXG4gICAgICAgICAgICAudGhlbihudWxsLCByZXBvcnRVbmhhbmRsZWRFcnJvcik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tSXRlcmFibGUoaXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpdGVyYWJsZV8xID0gX192YWx1ZXMoaXRlcmFibGUpLCBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKTsgIWl0ZXJhYmxlXzFfMS5kb25lOyBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGVfMV8xICYmICFpdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBpdGVyYWJsZV8xLnJldHVybikpIF9hLmNhbGwoaXRlcmFibGVfMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFzeW5jSXRlcmFibGUoYXN5bmNJdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pKTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikge1xuICAgIHZhciBhc3luY0l0ZXJhYmxlXzEsIGFzeW5jSXRlcmFibGVfMV8xO1xuICAgIHZhciBlXzIsIF9hO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZhbHVlLCBlXzJfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pO1xuICAgICAgICAgICAgICAgICAgICBhc3luY0l0ZXJhYmxlXzEgPSBfX2FzeW5jVmFsdWVzKGFzeW5jSXRlcmFibGUpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzQsIGFzeW5jSXRlcmFibGVfMS5uZXh0KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgPSBfYi5zZW50KCksICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lKSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhc3luY0l0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMztcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMywgMV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIGVfMl8xID0gX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBlXzIgPSB7IGVycm9yOiBlXzJfMSB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSAmJiAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBhc3luY0l0ZXJhYmxlXzEucmV0dXJuKSkpIHJldHVybiBbMywgOF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX2EuY2FsbChhc3luY0l0ZXJhYmxlXzEpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSA4O1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBleGVjdXRlU2NoZWR1bGUocGFyZW50U3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIHdvcmssIGRlbGF5LCByZXBlYXQpIHtcbiAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICBpZiAocmVwZWF0ID09PSB2b2lkIDApIHsgcmVwZWF0ID0gZmFsc2U7IH1cbiAgICB2YXIgc2NoZWR1bGVTdWJzY3JpcHRpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICB3b3JrKCk7XG4gICAgICAgIGlmIChyZXBlYXQpIHtcbiAgICAgICAgICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBkZWxheSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfSwgZGVsYXkpO1xuICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQoc2NoZWR1bGVTdWJzY3JpcHRpb24pO1xuICAgIGlmICghcmVwZWF0KSB7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZVN1YnNjcmlwdGlvbjtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRocm93RXJyb3IoZXJyb3JPckVycm9yRmFjdG9yeSwgc2NoZWR1bGVyKSB7XG4gICAgdmFyIGVycm9yRmFjdG9yeSA9IGlzRnVuY3Rpb24oZXJyb3JPckVycm9yRmFjdG9yeSkgPyBlcnJvck9yRXJyb3JGYWN0b3J5IDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXJyb3JPckVycm9yRmFjdG9yeTsgfTtcbiAgICB2YXIgaW5pdCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycm9yRmFjdG9yeSgpKTsgfTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoaW5pdCk7XG59XG5cbnZhciBFbXB0eUVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIEVtcHR5RXJyb3JJbXBsKCkge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdFbXB0eUVycm9yJztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbiAgICB9O1xufSk7XG5cbmZ1bmN0aW9uIGxhc3RWYWx1ZUZyb20oc291cmNlLCBjb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgX2hhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHZhciBfdmFsdWU7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgX2hhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoX2hhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoX3ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZERhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZSk7XG59XG5cbnZhciBUaW1lb3V0RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVGltZW91dEVycm9ySW1wbChpbmZvKSB7XG4gICAgICAgIGlmIChpbmZvID09PSB2b2lkIDApIHsgaW5mbyA9IG51bGw7IH1cbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnVGltZW91dCBoYXMgb2NjdXJyZWQnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJztcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9O1xufSk7XG5mdW5jdGlvbiB0aW1lb3V0KGNvbmZpZywgc2NoZWR1bGVyQXJnKSB7XG4gICAgdmFyIF9hID0gKGlzVmFsaWREYXRlKGNvbmZpZykgPyB7IGZpcnN0OiBjb25maWcgfSA6IHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInID8geyBlYWNoOiBjb25maWcgfSA6IGNvbmZpZyksIGZpcnN0ID0gX2EuZmlyc3QsIGVhY2ggPSBfYS5lYWNoLCBfYiA9IF9hLndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYS5zY2hlZHVsZXIsIHNjaGVkdWxlciA9IF9jID09PSB2b2lkIDAgPyBhc3luY1NjaGVkdWxlciA6IF9jLCBfZCA9IF9hLm1ldGEsIG1ldGEgPSBfZCA9PT0gdm9pZCAwID8gbnVsbCA6IF9kO1xuICAgIGlmIChmaXJzdCA9PSBudWxsICYmIGVhY2ggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyB0aW1lb3V0IHByb3ZpZGVkLicpO1xuICAgIH1cbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIHRpbWVyU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIHNlZW4gPSAwO1xuICAgICAgICB2YXIgc3RhcnRUaW1lciA9IGZ1bmN0aW9uIChkZWxheSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJGcm9tKF93aXRoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IG1ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IGxhc3RWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZW46IHNlZW4sXG4gICAgICAgICAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgfTtcbiAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgc2VlbisrO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KChsYXN0VmFsdWUgPSB2YWx1ZSkpO1xuICAgICAgICAgICAgZWFjaCA+IDAgJiYgc3RhcnRUaW1lcihlYWNoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QgIT0gbnVsbCA/ICh0eXBlb2YgZmlyc3QgPT09ICdudW1iZXInID8gZmlyc3QgOiArZmlyc3QgLSBzY2hlZHVsZXIubm93KCkpIDogZWFjaCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0aW1lb3V0RXJyb3JGYWN0b3J5KGluZm8pIHtcbiAgICB0aHJvdyBuZXcgVGltZW91dEVycm9yKGluZm8pO1xufVxuXG5jbGFzcyBMb2FkZWRPbmNlUHVibGlzaGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAodmFsdWUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6IHRydWUsIGxvYWRlZFZhbHVlOiB2YWx1ZSB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIHRoaXMudGhyb3cgPSAoZXJyb3IsIGVyck1zZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6IGZhbHNlLCBlcnJvciwgZXJyTXNnIH07XG4gICAgICB0aGlzLl9zdWJqZWN0LmVycm9yKGVycm9yKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAodmFsdWVJZk5vdExvYWRlZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWVJZk5vdExvYWRlZDtcbiAgICB9O1xuICAgIHRoaXMuc3Vic2NyaWJlID0gKGZuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy53YWl0Rm9yTG9hZCA9ICh0aW1lb3V0Q29uZmlnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIpIGFzc2VydE5ldmVyKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgdGltZW91dFBhcmFtcyA9IHtcbiAgICAgICAgZmlyc3Q6IHRpbWVvdXRDb25maWcudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IodGltZW91dENvbmZpZy50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLl9zdWJqZWN0LnBpcGUodGltZW91dCh0aW1lb3V0UGFyYW1zKSkpO1xuICAgIH07XG4gICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiBmYWxzZSB9O1xuICAgIHRoaXMuX3N1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5cbmNvbnN0IE9qc0Vudmlyb25tZW50ID0gei5lbnVtKFtcImRldlwiLCBcInN0Z1wiLCBcInByb2RcIl0pO1xuY29uc3QgY29ubnRvQmFzZVVybHMgPSB7XG4gIHByb2Q6IFwiaHR0cHM6Ly9jb25udG8uZ2V0b3BlbnBheS5jb21cIixcbiAgc3RnOiBcImh0dHBzOi8vY29ubnRvLm9wZW5wYXlzdGFnaW5nLmNvbVwiLFxuICBkZXY6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDAwXCJcbn07XG5jb25zdCBnZXRDb25udG9VcmwgPSAoZW52KSA9PiB7XG4gIHJldHVybiBjb25udG9CYXNlVXJsc1tlbnZdO1xufTtcbmNvbnN0IGVudkNhY2hlID0ge307XG5jb25zdCBnZXRDdXJyZW50RW52ID0gYXN5bmMgKGJhc2VVcmwpID0+IHtcbiAgaWYgKGVudkNhY2hlW2Jhc2VVcmxdKSB7XG4gICAgcmV0dXJuIGVudkNhY2hlW2Jhc2VVcmxdO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChuZXcgVVJMKFwiL2hlYWx0aC9lbnZpcm9ubWVudFwiLCBiYXNlVXJsKSkudGhlbigocmVzKSA9PiByZXMuanNvbigpKTtcbiAgICBjb25zdCBlbnYgPSBPanNFbnZpcm9ubWVudC5wYXJzZShyZXNwb25zZS5lbnZpcm9ubWVudCk7XG4gICAgZW52Q2FjaGVbYmFzZVVybF0gPSBlbnY7XG4gICAgcmV0dXJuIGVudjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gT2pzRW52aXJvbm1lbnQuVmFsdWVzLnByb2Q7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGFzc2VydE5ldmVyKHZhbHVlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7dmFsdWV9YCk7XG59XG5jb25zdCBleGNsdWRlUHJvcHMgPSAob2JqLCBwcm9wcykgPT4ge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKG9iaikuZmlsdGVyKChba2V5XSkgPT4gIXByb3BzLmluY2x1ZGVzKGtleSkpKTtcbn07XG5jb25zdCBnZXRXaW5kb3dTYWZlID0gKCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIHdpbmRvdztcbn07XG5cbmNvbnN0IG1ldHJpY3NQdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuY29uc3QgTUVUUklDU19RVUVVRV9LRVkgPSBcIm9wX21ldHJpY3NfcXVldWVcIjtcbmNvbnN0IE1BWF9SRVRSWV9BVFRFTVBUUyA9IDM7XG5jb25zdCBCQVRDSF9TSVpFID0gMztcbmNvbnN0IEJBVENIX0lOVEVSVkFMX01TID0gMWUzO1xuY29uc3QgeyBsb2dfXzogbG9nX18keCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgTWV0cmljc1F1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMDtcbiAgICB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJHgoXCJOZXR3b3JrIG9mZmxpbmUsIG1ldHJpY3Mgd2lsbCBiZSBxdWV1ZWRcIik7XG4gICAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH07XG4gICAgdGhpcy5vbmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJHgoXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpO1xuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9O1xuICAgIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gIH1cbiAgYWRkRXZlbnQoZXZlbnROYW1lLCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcykge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnROYW1lLFxuICAgICAgcHJvcGVydGllczogcHJvcGVydGllcyB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiBjb250ZXh0UHJvcGVydGllcyB8fCB7fSxcbiAgICAgIG5vbmNlOiB2NCgpLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBldmVudC50aW1lc3RhbXA7XG4gICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkUXVldWUgPSBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZT8uZ2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkUXVldWUpIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IEpTT04ucGFyc2Uoc3RvcmVkUXVldWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSwgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWV1ZSkpO1xuICB9XG4gIHNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IHNhZmVXaW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgaWYgKHNhZmVXaW5kb3cgJiYgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBzYWZlV2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICB9LCBCQVRDSF9JTlRFUlZBTF9NUyk7XG4gICAgfVxuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBpZiAodGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIGdldFdpbmRvd1NhZmUoKT8uY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lb3V0KTtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgfVxuICBwcm9jZXNzUXVldWUoKSB7XG4gICAgaWYgKCFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gdHJ1ZTtcbiAgICB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBjb250ZXh0ID0gbWV0cmljc1B1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgbG9nX18keChcIk1ldHJpY3MgY29udGV4dCBub3QgYXZhaWxhYmxlLCB3aWxsIHJldHJ5IGxhdGVyXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiYXRjaCA9IHRoaXMucXVldWUuc2xpY2UoMCwgQkFUQ0hfU0laRSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhdGNoUGF5bG9hZCA9IHtcbiAgICAgICAgZXZlbnRzOiBiYXRjaC5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2ZW50X25hbWU6IGV2ZW50LmV2ZW50TmFtZSxcbiAgICAgICAgICAgIGRldmljZV90b2tlbjogY29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGNvbnRleHRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgICAgICAuLi5ldmVudC5jb250ZXh0UHJvcGVydGllc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgbm9uY2U6IGV2ZW50Lm5vbmNlLFxuICAgICAgICAgICAgICBkYXRldGltZTogZXZlbnQuZGF0ZXRpbWUsXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICB0aW1lX2RpZmZfZnJvbV9wcmV2aW91c19ldmVudDogZXZlbnQudGltZURpZmZGcm9tUHJldmlvdXNFdmVudCxcbiAgICAgICAgICAgICAgY2hlY2tvdXRfc2VjdXJlX3Rva2VuOiBjb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICAgIC4uLmV2ZW50LnByb3BlcnRpZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbm50b1VybCA9IGdldENvbm50b1VybChjb250ZXh0LmVudmlyb25tZW50KTtcbiAgICAgIGNvbnN0IG1ldHJpY3NSb3V0ZXIgPSBuZXcgVVJMKFwiL21ldHJpY3MvcHVibGljL2NhcHR1cmVcIiwgY29ubnRvVXJsKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobWV0cmljc1JvdXRlci50b1N0cmluZygpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShiYXRjaFBheWxvYWQpLFxuICAgICAgICBrZWVwYWxpdmU6IHRydWVcbiAgICAgICAgLy8gVG8gc2VuZCBldmVudHMgZXZlbiBpZiB0aGUgcGFnZSBpcyB1bmxvYWRlZFxuICAgICAgfSk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dfXyR4KFwiRXJyb3Igc2VuZGluZyBtZXRyaWNzIGJhdGNoOlwiLCBlcnJvcik7XG4gICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpIHtcbiAgICBiYXRjaC5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgZXZlbnQuYXR0ZW1wdENvdW50Kys7XG4gICAgfSk7XG4gICAgY29uc3QgZXZlbnRzVG9LZWVwID0gYmF0Y2guZmlsdGVyKChldmVudCkgPT4gZXZlbnQuYXR0ZW1wdENvdW50IDwgTUFYX1JFVFJZX0FUVEVNUFRTKTtcbiAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShiYXRjaC5sZW5ndGgpO1xuICAgIHRoaXMucXVldWUgPSBbLi4uZXZlbnRzVG9LZWVwLCAuLi50aGlzLnF1ZXVlXTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICB9XG4gIGNsZWFudXAoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lcik7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICAgIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbn1cbmNvbnN0IG1ldHJpY3NRdWV1ZSA9IG5ldyBNZXRyaWNzUXVldWUoKTtcbmNvbnN0IHRyYWNrID0gKGV2ZW50LCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcykgPT4ge1xuICBtZXRyaWNzUXVldWUuYWRkRXZlbnQoZXZlbnQsIHByb3BlcnRpZXMsIGNvbnRleHRQcm9wZXJ0aWVzKTtcbn07XG5jb25zdCBmb3JjZVByb2Nlc3NNZXRyaWNzUXVldWUgPSAoKSA9PiB7XG4gIG1ldHJpY3NRdWV1ZS5wcm9jZXNzUXVldWUoKTtcbn07XG5jb25zdCBvblVuaGFuZGxlZFJlamVjdGlvbkVycm9yID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShldmVudC5yZWFzb24pO1xuICB0cmFjayhcInVuaGFuZGxlZF9yZWplY3Rpb25fZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICBlcnJvcl9uYW1lOiBldmVudC5yZWFzb25cbiAgfSk7XG59O1xuY29uc3Qgb25VbmNhdWdodEVycm9yID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShldmVudC5lcnJvcik7XG4gIHRyYWNrKFwidW5jYXVnaHRfZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICBlcnJvcl9uYW1lOiBldmVudC5lcnJvcj8ubmFtZSxcbiAgICBlcnJvcl9zdGFjazogZXZlbnQuZXJyb3I/LnN0YWNrLFxuICAgIGZpbGVfbmFtZTogZXZlbnQuZmlsZW5hbWUsXG4gICAgbGluZV9udW1iZXI6IGV2ZW50LmxpbmVubyxcbiAgICBjb2x1bW5fbnVtYmVyOiBldmVudC5jb2xub1xuICB9KTtcbn07XG5sZXQgcGFnZUxpZmVjeWNsZSA9IG51bGw7XG5jb25zdCBsb2FkUGFnZUxpZmVjeWNsZSA9IGFzeW5jICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IHBhZ2VMaWZlY3ljbGVNb2R1bGUgPSBhd2FpdCBpbXBvcnQoJy4vbGlmZWN5Y2xlLSF+ezAwNX1+LmpzJyk7XG4gICAgcGFnZUxpZmVjeWNsZSA9IHBhZ2VMaWZlY3ljbGVNb2R1bGUuZGVmYXVsdDtcbiAgICByZXR1cm4gcGFnZUxpZmVjeWNsZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBwYWdlLWxpZmVjeWNsZTpcIiwgZXJyb3IpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuY29uc3QgcGFnZUxpZmVjeWNsZVN0YXRlQ2hhbmdlSGFuZGxlciA9IChldmVudCkgPT4ge1xuICB0cmFjayhcInBhZ2VfbGlmZWN5Y2xlX3N0YXRlX2NoYW5nZVwiLCB7XG4gICAgb2xkX3N0YXRlOiBldmVudC5vbGRTdGF0ZSxcbiAgICBuZXdfc3RhdGU6IGV2ZW50Lm5ld1N0YXRlXG4gIH0pO1xuICBpZiAoZXZlbnQubmV3U3RhdGUgPT09IFwiaGlkZGVuXCIgfHwgZXZlbnQubmV3U3RhdGUgPT09IFwicGFzc2l2ZVwiKSB7XG4gICAgbWV0cmljc1F1ZXVlLnByb2Nlc3NRdWV1ZSgpO1xuICB9XG59O1xuY29uc3QgYXR0YWNoQW5hbHl0aWNzRXZlbnRMaXN0ZW5lcnMgPSBhc3luYyAoKSA9PiB7XG4gIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG9uVW5jYXVnaHRFcnJvcik7XG4gIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBvblVuaGFuZGxlZFJlamVjdGlvbkVycm9yKTtcbiAgY29uc3QgbGlmZWN5Y2xlID0gYXdhaXQgbG9hZFBhZ2VMaWZlY3ljbGUoKTtcbiAgaWYgKGxpZmVjeWNsZSkge1xuICAgIGxpZmVjeWNsZS5hZGRFdmVudExpc3RlbmVyKFwic3RhdGVjaGFuZ2VcIiwgcGFnZUxpZmVjeWNsZVN0YXRlQ2hhbmdlSGFuZGxlcik7XG4gIH1cbn07XG5jb25zdCBkZXRhY2hBbmFseXRpY3NFdmVudExpc3RlbmVycyA9IGFzeW5jICgpID0+IHtcbiAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25VbmNhdWdodEVycm9yKTtcbiAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIG9uVW5oYW5kbGVkUmVqZWN0aW9uRXJyb3IpO1xuICBpZiAoZ2V0V2luZG93U2FmZSgpICYmIHBhZ2VMaWZlY3ljbGUpIHtcbiAgICBwYWdlTGlmZWN5Y2xlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzdGF0ZWNoYW5nZVwiLCBwYWdlTGlmZWN5Y2xlU3RhdGVDaGFuZ2VIYW5kbGVyKTtcbiAgfVxufTtcblxuY29uc3QgU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IG91ckN1cnJlbmN5VG9UaGVpcnMgPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59O1xuY29uc3QgZ2V0TG9hZGVkU3RyaXBlID0gYXN5bmMgKHB1Ymxpc2hhYmxlS2V5KSA9PiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1N0cmlwZUpzUHJlc2VudCgpKSB7XG4gICAgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmlwZSBKUyBub3QgZm91bmQuYCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gbmV3IFN0cmlwZShwdWJsaXNoYWJsZUtleSk7XG4gIHJldHVybiBzdHJpcGU7XG59O1xuY29uc3QgY3JlYXRlU3RyaXBlRWxlbWVudHMgPSBhc3luYyAoc3RyaXBlUHViS2V5LCBlbGVtZW50c09wdGlvbnMpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKHN0cmlwZVB1YktleSk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IHN0cmlwZS5lbGVtZW50cyhlbGVtZW50c09wdGlvbnMpLFxuICAgIHN0cmlwZVxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0ID0gYXN5bmMgKHN0cmlwZVB1YktleSwgdG90YWxBbW91bnRBdG9tLCBjdXJyZW5jeSwgaXNBbW91bnRQZW5kaW5nLCBpc0xpbmtPbmx5KSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICBjb25zdCBzdHJpcGVDdXJyZW5jeSA9IG91ckN1cnJlbmN5VG9UaGVpcnNbY3VycmVuY3kudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICBjb25zdCBwYXltZW50UmVxdWVzdCA9IHN0cmlwZS5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IHN0cmlwZUN1cnJlbmN5LFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiB0b3RhbEFtb3VudEF0b20sXG4gICAgICBwZW5kaW5nOiBpc0Ftb3VudFBlbmRpbmdcbiAgICB9LFxuICAgIC8vIHJlcXVlc3RTaGlwcGluZzogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiB0cnVlLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXSBcbiAgfSk7XG4gIHJldHVybiBwYXltZW50UmVxdWVzdDtcbn07XG5jb25zdCBzbGVlcCA9ICh0aW1lb3V0TXMpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0TXMpO1xuICB9KTtcbn07XG5jb25zdCBpc1N0cmlwZUpzUHJlc2VudCA9ICgpID0+IHtcbiAgcmV0dXJuIFwiU3RyaXBlXCIgaW4gd2luZG93O1xufTtcbmNvbnN0IHdhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kID0gYXN5bmMgKHBheW1lbnRSZXF1ZXN0KSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHBheW1lbnRSZXF1ZXN0Lm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAoZXZ0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgZXZ0KTtcbiAgICAgICAgcmVzb2x2ZShldnQpO1xuICAgICAgfSk7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcInRva2VuXCIsIGFzeW5jIChldnQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgZXZ0KTtcbiAgICAgIH0pO1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBjb25maXJtU3RyaXBlUHJQTSA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtKSA9PiB7XG4gIGlmICghbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayB8fCAhbmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KG5leHRBY3Rpb25NZXRhZGF0YSl9YCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogc3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKGNvbmZpcm1SZXN1bHQuZXJyb3IpIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcImZhaWxcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtjb25maXJtUmVzdWx0LmVycm9yLm1lc3NhZ2UgPz8gYHVua25vd25gfWApO1xuICB9IGVsc2Uge1xuICAgIHN0cmlwZVBtLmNvbXBsZXRlKFwic3VjY2Vzc1wiKTtcbiAgfVxuICByZXR1cm4gY29uZmlybVJlc3VsdDtcbn07XG5jb25zdCBsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93ID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUobmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayk7XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUNhcmRTZXR1cChuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkXG4gIH0pO1xuICBjb25zdCByZXN1bHRTdGF0dXMgPSBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5zdGF0dXM7XG4gIGlmIChyZXN1bHRTdGF0dXMgPT09IFwic3VjY2VlZGVkXCIpIHtcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcG1faWQpO1xuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQpO1xuICB9IGVsc2UgaWYgKHJlc3VsdFN0YXR1cyA9PT0gXCJjYW5jZWxlZFwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtjb25maXJtUmVzdWx0LmVycm9yPy5tZXNzYWdlID8/IGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQ/Lmxhc3Rfc2V0dXBfZXJyb3I/Lm1lc3NhZ2UgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICAgICk7XG4gIH1cbn07XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBVcGRhdGVzIHRvIHRoaXMgZmlsZSBzaG91bGQgYWxzbyBiZSByZXBsaWNhdGVkIHRvIEBvcGVudGVsZW1ldHJ5L2NvcmUgdG9vLlxuLyoqXG4gKiAtIGdsb2JhbFRoaXMgKE5ldyBzdGFuZGFyZClcbiAqIC0gc2VsZiAoV2lsbCByZXR1cm4gdGhlIGN1cnJlbnQgd2luZG93IGluc3RhbmNlIGZvciBzdXBwb3J0ZWQgYnJvd3NlcnMpXG4gKiAtIHdpbmRvdyAoZmFsbGJhY2sgZm9yIG9sZGVyIGJyb3dzZXIgaW1wbGVtZW50YXRpb25zKVxuICogLSBnbG9iYWwgKE5vZGVKUyBpbXBsZW1lbnRhdGlvbilcbiAqIC0gPG9iamVjdD4gKFdoZW4gYWxsIGVsc2UgZmFpbHMpXG4gKi9cbi8qKiBvbmx5IGdsb2JhbHMgdGhhdCBjb21tb24gdG8gbm9kZSBhbmQgYnJvd3NlcnMgYXJlIGFsbG93ZWQgKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBub2RlL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL2VzLWJ1aWx0aW5zLCBuby11bmRlZlxudmFyIF9nbG9iYWxUaGlzID0gdHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnXG4gICAgPyBnbG9iYWxUaGlzXG4gICAgOiB0eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCdcbiAgICAgICAgPyBzZWxmXG4gICAgICAgIDogdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gd2luZG93XG4gICAgICAgICAgICA6IHR5cGVvZiBnbG9iYWwgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgPyBnbG9iYWxcbiAgICAgICAgICAgICAgICA6IHt9O1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gdGhpcyBpcyBhdXRvZ2VuZXJhdGVkIGZpbGUsIHNlZSBzY3JpcHRzL3ZlcnNpb24tdXBkYXRlLmpzXG52YXIgVkVSU0lPTiA9ICcxLjkuMCc7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgcmUgPSAvXihcXGQrKVxcLihcXGQrKVxcLihcXGQrKSgtKC4rKSk/JC87XG4vKipcbiAqIENyZWF0ZSBhIGZ1bmN0aW9uIHRvIHRlc3QgYW4gQVBJIHZlcnNpb24gdG8gc2VlIGlmIGl0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgcHJvdmlkZWQgb3duVmVyc2lvbi5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gaGFzIHRoZSBmb2xsb3dpbmcgc2VtYW50aWNzOlxuICogLSBFeGFjdCBtYXRjaCBpcyBhbHdheXMgY29tcGF0aWJsZVxuICogLSBNYWpvciB2ZXJzaW9ucyBtdXN0IG1hdGNoIGV4YWN0bHlcbiAqICAgIC0gMS54IHBhY2thZ2UgY2Fubm90IHVzZSBnbG9iYWwgMi54IHBhY2thZ2VcbiAqICAgIC0gMi54IHBhY2thZ2UgY2Fubm90IHVzZSBnbG9iYWwgMS54IHBhY2thZ2VcbiAqIC0gVGhlIG1pbm9yIHZlcnNpb24gb2YgdGhlIEFQSSBtb2R1bGUgcmVxdWVzdGluZyBhY2Nlc3MgdG8gdGhlIGdsb2JhbCBBUEkgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG1pbm9yIHZlcnNpb24gb2YgdGhpcyBBUElcbiAqICAgIC0gMS4zIHBhY2thZ2UgbWF5IHVzZSAxLjQgZ2xvYmFsIGJlY2F1c2UgdGhlIGxhdGVyIGdsb2JhbCBjb250YWlucyBhbGwgZnVuY3Rpb25zIDEuMyBleHBlY3RzXG4gKiAgICAtIDEuNCBwYWNrYWdlIG1heSBOT1QgdXNlIDEuMyBnbG9iYWwgYmVjYXVzZSBpdCBtYXkgdHJ5IHRvIGNhbGwgZnVuY3Rpb25zIHdoaWNoIGRvbid0IGV4aXN0IG9uIDEuM1xuICogLSBJZiB0aGUgbWFqb3IgdmVyc2lvbiBpcyAwLCB0aGUgbWlub3IgdmVyc2lvbiBpcyB0cmVhdGVkIGFzIHRoZSBtYWpvciBhbmQgdGhlIHBhdGNoIGlzIHRyZWF0ZWQgYXMgdGhlIG1pbm9yXG4gKiAtIFBhdGNoIGFuZCBidWlsZCB0YWcgZGlmZmVyZW5jZXMgYXJlIG5vdCBjb25zaWRlcmVkIGF0IHRoaXMgdGltZVxuICpcbiAqIEBwYXJhbSBvd25WZXJzaW9uIHZlcnNpb24gd2hpY2ggc2hvdWxkIGJlIGNoZWNrZWQgYWdhaW5zdFxuICovXG5mdW5jdGlvbiBfbWFrZUNvbXBhdGliaWxpdHlDaGVjayhvd25WZXJzaW9uKSB7XG4gICAgdmFyIGFjY2VwdGVkVmVyc2lvbnMgPSBuZXcgU2V0KFtvd25WZXJzaW9uXSk7XG4gICAgdmFyIHJlamVjdGVkVmVyc2lvbnMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIG15VmVyc2lvbk1hdGNoID0gb3duVmVyc2lvbi5tYXRjaChyZSk7XG4gICAgaWYgKCFteVZlcnNpb25NYXRjaCkge1xuICAgICAgICAvLyB3ZSBjYW5ub3QgZ3VhcmFudGVlIGNvbXBhdGliaWxpdHkgc28gd2UgYWx3YXlzIHJldHVybiBub29wXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBmYWxzZTsgfTtcbiAgICB9XG4gICAgdmFyIG93blZlcnNpb25QYXJzZWQgPSB7XG4gICAgICAgIG1ham9yOiArbXlWZXJzaW9uTWF0Y2hbMV0sXG4gICAgICAgIG1pbm9yOiArbXlWZXJzaW9uTWF0Y2hbMl0sXG4gICAgICAgIHBhdGNoOiArbXlWZXJzaW9uTWF0Y2hbM10sXG4gICAgICAgIHByZXJlbGVhc2U6IG15VmVyc2lvbk1hdGNoWzRdLFxuICAgIH07XG4gICAgLy8gaWYgb3duVmVyc2lvbiBoYXMgYSBwcmVyZWxlYXNlIHRhZywgdmVyc2lvbnMgbXVzdCBtYXRjaCBleGFjdGx5XG4gICAgaWYgKG93blZlcnNpb25QYXJzZWQucHJlcmVsZWFzZSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBpc0V4YWN0bWF0Y2goZ2xvYmFsVmVyc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbFZlcnNpb24gPT09IG93blZlcnNpb247XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9yZWplY3Qodikge1xuICAgICAgICByZWplY3RlZFZlcnNpb25zLmFkZCh2KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBfYWNjZXB0KHYpIHtcbiAgICAgICAgYWNjZXB0ZWRWZXJzaW9ucy5hZGQodik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gaXNDb21wYXRpYmxlKGdsb2JhbFZlcnNpb24pIHtcbiAgICAgICAgaWYgKGFjY2VwdGVkVmVyc2lvbnMuaGFzKGdsb2JhbFZlcnNpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVqZWN0ZWRWZXJzaW9ucy5oYXMoZ2xvYmFsVmVyc2lvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZ2xvYmFsVmVyc2lvbk1hdGNoID0gZ2xvYmFsVmVyc2lvbi5tYXRjaChyZSk7XG4gICAgICAgIGlmICghZ2xvYmFsVmVyc2lvbk1hdGNoKSB7XG4gICAgICAgICAgICAvLyBjYW5ub3QgcGFyc2Ugb3RoZXIgdmVyc2lvblxuICAgICAgICAgICAgLy8gd2UgY2Fubm90IGd1YXJhbnRlZSBjb21wYXRpYmlsaXR5IHNvIHdlIGFsd2F5cyBub29wXG4gICAgICAgICAgICByZXR1cm4gX3JlamVjdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZ2xvYmFsVmVyc2lvblBhcnNlZCA9IHtcbiAgICAgICAgICAgIG1ham9yOiArZ2xvYmFsVmVyc2lvbk1hdGNoWzFdLFxuICAgICAgICAgICAgbWlub3I6ICtnbG9iYWxWZXJzaW9uTWF0Y2hbMl0sXG4gICAgICAgICAgICBwYXRjaDogK2dsb2JhbFZlcnNpb25NYXRjaFszXSxcbiAgICAgICAgICAgIHByZXJlbGVhc2U6IGdsb2JhbFZlcnNpb25NYXRjaFs0XSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gaWYgZ2xvYmFsVmVyc2lvbiBoYXMgYSBwcmVyZWxlYXNlIHRhZywgdmVyc2lvbnMgbXVzdCBtYXRjaCBleGFjdGx5XG4gICAgICAgIGlmIChnbG9iYWxWZXJzaW9uUGFyc2VkLnByZXJlbGVhc2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWFqb3IgdmVyc2lvbnMgbXVzdCBtYXRjaFxuICAgICAgICBpZiAob3duVmVyc2lvblBhcnNlZC5tYWpvciAhPT0gZ2xvYmFsVmVyc2lvblBhcnNlZC5tYWpvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG93blZlcnNpb25QYXJzZWQubWFqb3IgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLm1pbm9yID09PSBnbG9iYWxWZXJzaW9uUGFyc2VkLm1pbm9yICYmXG4gICAgICAgICAgICAgICAgb3duVmVyc2lvblBhcnNlZC5wYXRjaCA8PSBnbG9iYWxWZXJzaW9uUGFyc2VkLnBhdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9hY2NlcHQoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX3JlamVjdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3duVmVyc2lvblBhcnNlZC5taW5vciA8PSBnbG9iYWxWZXJzaW9uUGFyc2VkLm1pbm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gX2FjY2VwdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3JlamVjdChnbG9iYWxWZXJzaW9uKTtcbiAgICB9O1xufVxuLyoqXG4gKiBUZXN0IGFuIEFQSSB2ZXJzaW9uIHRvIHNlZSBpZiBpdCBpcyBjb21wYXRpYmxlIHdpdGggdGhpcyBBUEkuXG4gKlxuICogLSBFeGFjdCBtYXRjaCBpcyBhbHdheXMgY29tcGF0aWJsZVxuICogLSBNYWpvciB2ZXJzaW9ucyBtdXN0IG1hdGNoIGV4YWN0bHlcbiAqICAgIC0gMS54IHBhY2thZ2UgY2Fubm90IHVzZSBnbG9iYWwgMi54IHBhY2thZ2VcbiAqICAgIC0gMi54IHBhY2thZ2UgY2Fubm90IHVzZSBnbG9iYWwgMS54IHBhY2thZ2VcbiAqIC0gVGhlIG1pbm9yIHZlcnNpb24gb2YgdGhlIEFQSSBtb2R1bGUgcmVxdWVzdGluZyBhY2Nlc3MgdG8gdGhlIGdsb2JhbCBBUEkgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG1pbm9yIHZlcnNpb24gb2YgdGhpcyBBUElcbiAqICAgIC0gMS4zIHBhY2thZ2UgbWF5IHVzZSAxLjQgZ2xvYmFsIGJlY2F1c2UgdGhlIGxhdGVyIGdsb2JhbCBjb250YWlucyBhbGwgZnVuY3Rpb25zIDEuMyBleHBlY3RzXG4gKiAgICAtIDEuNCBwYWNrYWdlIG1heSBOT1QgdXNlIDEuMyBnbG9iYWwgYmVjYXVzZSBpdCBtYXkgdHJ5IHRvIGNhbGwgZnVuY3Rpb25zIHdoaWNoIGRvbid0IGV4aXN0IG9uIDEuM1xuICogLSBJZiB0aGUgbWFqb3IgdmVyc2lvbiBpcyAwLCB0aGUgbWlub3IgdmVyc2lvbiBpcyB0cmVhdGVkIGFzIHRoZSBtYWpvciBhbmQgdGhlIHBhdGNoIGlzIHRyZWF0ZWQgYXMgdGhlIG1pbm9yXG4gKiAtIFBhdGNoIGFuZCBidWlsZCB0YWcgZGlmZmVyZW5jZXMgYXJlIG5vdCBjb25zaWRlcmVkIGF0IHRoaXMgdGltZVxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIHZlcnNpb24gb2YgdGhlIEFQSSByZXF1ZXN0aW5nIGFuIGluc3RhbmNlIG9mIHRoZSBnbG9iYWwgQVBJXG4gKi9cbnZhciBpc0NvbXBhdGlibGUgPSBfbWFrZUNvbXBhdGliaWxpdHlDaGVjayhWRVJTSU9OKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBtYWpvciA9IFZFUlNJT04uc3BsaXQoJy4nKVswXTtcbnZhciBHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZID0gU3ltYm9sLmZvcihcIm9wZW50ZWxlbWV0cnkuanMuYXBpLlwiICsgbWFqb3IpO1xudmFyIF9nbG9iYWwgPSBfZ2xvYmFsVGhpcztcbmZ1bmN0aW9uIHJlZ2lzdGVyR2xvYmFsKHR5cGUsIGluc3RhbmNlLCBkaWFnLCBhbGxvd092ZXJyaWRlKSB7XG4gICAgdmFyIF9hO1xuICAgIGlmIChhbGxvd092ZXJyaWRlID09PSB2b2lkIDApIHsgYWxsb3dPdmVycmlkZSA9IGZhbHNlOyB9XG4gICAgdmFyIGFwaSA9IChfZ2xvYmFsW0dMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVldID0gKF9hID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge1xuICAgICAgICB2ZXJzaW9uOiBWRVJTSU9OLFxuICAgIH0pO1xuICAgIGlmICghYWxsb3dPdmVycmlkZSAmJiBhcGlbdHlwZV0pIHtcbiAgICAgICAgLy8gYWxyZWFkeSByZWdpc3RlcmVkIGFuIEFQSSBvZiB0aGlzIHR5cGVcbiAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcIkBvcGVudGVsZW1ldHJ5L2FwaTogQXR0ZW1wdGVkIGR1cGxpY2F0ZSByZWdpc3RyYXRpb24gb2YgQVBJOiBcIiArIHR5cGUpO1xuICAgICAgICBkaWFnLmVycm9yKGVyci5zdGFjayB8fCBlcnIubWVzc2FnZSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGFwaS52ZXJzaW9uICE9PSBWRVJTSU9OKSB7XG4gICAgICAgIC8vIEFsbCByZWdpc3RlcmVkIEFQSXMgbXVzdCBiZSBvZiB0aGUgc2FtZSB2ZXJzaW9uIGV4YWN0bHlcbiAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcIkBvcGVudGVsZW1ldHJ5L2FwaTogUmVnaXN0cmF0aW9uIG9mIHZlcnNpb24gdlwiICsgYXBpLnZlcnNpb24gKyBcIiBmb3IgXCIgKyB0eXBlICsgXCIgZG9lcyBub3QgbWF0Y2ggcHJldmlvdXNseSByZWdpc3RlcmVkIEFQSSB2XCIgKyBWRVJTSU9OKTtcbiAgICAgICAgZGlhZy5lcnJvcihlcnIuc3RhY2sgfHwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGFwaVt0eXBlXSA9IGluc3RhbmNlO1xuICAgIGRpYWcuZGVidWcoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdGVyZWQgYSBnbG9iYWwgZm9yIFwiICsgdHlwZSArIFwiIHZcIiArIFZFUlNJT04gKyBcIi5cIik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBnZXRHbG9iYWwodHlwZSkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgdmFyIGdsb2JhbFZlcnNpb24gPSAoX2EgPSBfZ2xvYmFsW0dMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVldKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmVyc2lvbjtcbiAgICBpZiAoIWdsb2JhbFZlcnNpb24gfHwgIWlzQ29tcGF0aWJsZShnbG9iYWxWZXJzaW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiAoX2IgPSBfZ2xvYmFsW0dMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVldKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbdHlwZV07XG59XG5mdW5jdGlvbiB1bnJlZ2lzdGVyR2xvYmFsKHR5cGUsIGRpYWcpIHtcbiAgICBkaWFnLmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBVbnJlZ2lzdGVyaW5nIGEgZ2xvYmFsIGZvciBcIiArIHR5cGUgKyBcIiB2XCIgKyBWRVJTSU9OICsgXCIuXCIpO1xuICAgIHZhciBhcGkgPSBfZ2xvYmFsW0dMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVldO1xuICAgIGlmIChhcGkpIHtcbiAgICAgICAgZGVsZXRlIGFwaVt0eXBlXTtcbiAgICB9XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19yZWFkJDMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSQzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG4vKipcbiAqIENvbXBvbmVudCBMb2dnZXIgd2hpY2ggaXMgbWVhbnQgdG8gYmUgdXNlZCBhcyBwYXJ0IG9mIGFueSBjb21wb25lbnQgd2hpY2hcbiAqIHdpbGwgYWRkIGF1dG9tYXRpY2FsbHkgYWRkaXRpb25hbCBuYW1lc3BhY2UgaW4gZnJvbnQgb2YgdGhlIGxvZyBtZXNzYWdlLlxuICogSXQgd2lsbCB0aGVuIGZvcndhcmQgYWxsIG1lc3NhZ2UgdG8gZ2xvYmFsIGRpYWcgbG9nZ2VyXG4gKiBAZXhhbXBsZVxuICogY29uc3QgY0xvZ2dlciA9IGRpYWcuY3JlYXRlQ29tcG9uZW50TG9nZ2VyKHsgbmFtZXNwYWNlOiAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWh0dHAnIH0pO1xuICogY0xvZ2dlci5kZWJ1ZygndGVzdCcpO1xuICogLy8gQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWh0dHAgdGVzdFxuICovXG52YXIgRGlhZ0NvbXBvbmVudExvZ2dlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEaWFnQ29tcG9uZW50TG9nZ2VyKHByb3BzKSB7XG4gICAgICAgIHRoaXMuX25hbWVzcGFjZSA9IHByb3BzLm5hbWVzcGFjZSB8fCAnRGlhZ0NvbXBvbmVudExvZ2dlcic7XG4gICAgfVxuICAgIERpYWdDb21wb25lbnRMb2dnZXIucHJvdG90eXBlLmRlYnVnID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgnZGVidWcnLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvZ1Byb3h5KCdlcnJvcicsIHRoaXMuX25hbWVzcGFjZSwgYXJncyk7XG4gICAgfTtcbiAgICBEaWFnQ29tcG9uZW50TG9nZ2VyLnByb3RvdHlwZS5pbmZvID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgnaW5mbycsIHRoaXMuX25hbWVzcGFjZSwgYXJncyk7XG4gICAgfTtcbiAgICBEaWFnQ29tcG9uZW50TG9nZ2VyLnByb3RvdHlwZS53YXJuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgnd2FybicsIHRoaXMuX25hbWVzcGFjZSwgYXJncyk7XG4gICAgfTtcbiAgICBEaWFnQ29tcG9uZW50TG9nZ2VyLnByb3RvdHlwZS52ZXJib3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgndmVyYm9zZScsIHRoaXMuX25hbWVzcGFjZSwgYXJncyk7XG4gICAgfTtcbiAgICByZXR1cm4gRGlhZ0NvbXBvbmVudExvZ2dlcjtcbn0oKSk7XG5mdW5jdGlvbiBsb2dQcm94eShmdW5jTmFtZSwgbmFtZXNwYWNlLCBhcmdzKSB7XG4gICAgdmFyIGxvZ2dlciA9IGdldEdsb2JhbCgnZGlhZycpO1xuICAgIC8vIHNob3J0Y3V0IGlmIGxvZ2dlciBub3Qgc2V0XG4gICAgaWYgKCFsb2dnZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcmdzLnVuc2hpZnQobmFtZXNwYWNlKTtcbiAgICByZXR1cm4gbG9nZ2VyW2Z1bmNOYW1lXS5hcHBseShsb2dnZXIsIF9fc3ByZWFkQXJyYXkkMyhbXSwgX19yZWFkJDMoYXJncyksIGZhbHNlKSk7XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGF2YWlsYWJsZSBpbnRlcm5hbCBsb2dnaW5nIGxldmVscyBmb3IgdGhlIGRpYWdub3N0aWMgbG9nZ2VyLCB0aGUgbnVtZXJpYyB2YWx1ZXNcbiAqIG9mIHRoZSBsZXZlbHMgYXJlIGRlZmluZWQgdG8gbWF0Y2ggdGhlIG9yaWdpbmFsIHZhbHVlcyBmcm9tIHRoZSBpbml0aWFsIExvZ0xldmVsIHRvIGF2b2lkXG4gKiBjb21wYXRpYmlsaXR5L21pZ3JhdGlvbiBpc3N1ZXMgZm9yIGFueSBpbXBsZW1lbnRhdGlvbiB0aGF0IGFzc3VtZSB0aGUgbnVtZXJpYyBvcmRlcmluZy5cbiAqL1xudmFyIERpYWdMb2dMZXZlbDtcbihmdW5jdGlvbiAoRGlhZ0xvZ0xldmVsKSB7XG4gICAgLyoqIERpYWdub3N0aWMgTG9nZ2luZyBsZXZlbCBzZXR0aW5nIHRvIGRpc2FibGUgYWxsIGxvZ2dpbmcgKGV4Y2VwdCBhbmQgZm9yY2VkIGxvZ3MpICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIk5PTkVcIl0gPSAwXSA9IFwiTk9ORVwiO1xuICAgIC8qKiBJZGVudGlmaWVzIGFuIGVycm9yIHNjZW5hcmlvICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIkVSUk9SXCJdID0gMzBdID0gXCJFUlJPUlwiO1xuICAgIC8qKiBJZGVudGlmaWVzIGEgd2FybmluZyBzY2VuYXJpbyAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJXQVJOXCJdID0gNTBdID0gXCJXQVJOXCI7XG4gICAgLyoqIEdlbmVyYWwgaW5mb3JtYXRpb25hbCBsb2cgbWVzc2FnZSAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJJTkZPXCJdID0gNjBdID0gXCJJTkZPXCI7XG4gICAgLyoqIEdlbmVyYWwgZGVidWcgbG9nIG1lc3NhZ2UgKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiREVCVUdcIl0gPSA3MF0gPSBcIkRFQlVHXCI7XG4gICAgLyoqXG4gICAgICogRGV0YWlsZWQgdHJhY2UgbGV2ZWwgbG9nZ2luZyBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkZXZlbG9wbWVudCwgc2hvdWxkIG9ubHkgYmUgc2V0XG4gICAgICogaW4gYSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC5cbiAgICAgKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiVkVSQk9TRVwiXSA9IDgwXSA9IFwiVkVSQk9TRVwiO1xuICAgIC8qKiBVc2VkIHRvIHNldCB0aGUgbG9nZ2luZyBsZXZlbCB0byBpbmNsdWRlIGFsbCBsb2dnaW5nICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIkFMTFwiXSA9IDk5OTldID0gXCJBTExcIjtcbn0pKERpYWdMb2dMZXZlbCB8fCAoRGlhZ0xvZ0xldmVsID0ge30pKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlcihtYXhMZXZlbCwgbG9nZ2VyKSB7XG4gICAgaWYgKG1heExldmVsIDwgRGlhZ0xvZ0xldmVsLk5PTkUpIHtcbiAgICAgICAgbWF4TGV2ZWwgPSBEaWFnTG9nTGV2ZWwuTk9ORTtcbiAgICB9XG4gICAgZWxzZSBpZiAobWF4TGV2ZWwgPiBEaWFnTG9nTGV2ZWwuQUxMKSB7XG4gICAgICAgIG1heExldmVsID0gRGlhZ0xvZ0xldmVsLkFMTDtcbiAgICB9XG4gICAgLy8gSW4gY2FzZSB0aGUgbG9nZ2VyIGlzIG51bGwgb3IgdW5kZWZpbmVkXG4gICAgbG9nZ2VyID0gbG9nZ2VyIHx8IHt9O1xuICAgIGZ1bmN0aW9uIF9maWx0ZXJGdW5jKGZ1bmNOYW1lLCB0aGVMZXZlbCkge1xuICAgICAgICB2YXIgdGhlRnVuYyA9IGxvZ2dlcltmdW5jTmFtZV07XG4gICAgICAgIGlmICh0eXBlb2YgdGhlRnVuYyA9PT0gJ2Z1bmN0aW9uJyAmJiBtYXhMZXZlbCA+PSB0aGVMZXZlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoZUZ1bmMuYmluZChsb2dnZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGVycm9yOiBfZmlsdGVyRnVuYygnZXJyb3InLCBEaWFnTG9nTGV2ZWwuRVJST1IpLFxuICAgICAgICB3YXJuOiBfZmlsdGVyRnVuYygnd2FybicsIERpYWdMb2dMZXZlbC5XQVJOKSxcbiAgICAgICAgaW5mbzogX2ZpbHRlckZ1bmMoJ2luZm8nLCBEaWFnTG9nTGV2ZWwuSU5GTyksXG4gICAgICAgIGRlYnVnOiBfZmlsdGVyRnVuYygnZGVidWcnLCBEaWFnTG9nTGV2ZWwuREVCVUcpLFxuICAgICAgICB2ZXJib3NlOiBfZmlsdGVyRnVuYygndmVyYm9zZScsIERpYWdMb2dMZXZlbC5WRVJCT1NFKSxcbiAgICB9O1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCQyID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkkMiA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xudmFyIEFQSV9OQU1FJDIgPSAnZGlhZyc7XG4vKipcbiAqIFNpbmdsZXRvbiBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIE9wZW5UZWxlbWV0cnkgaW50ZXJuYWxcbiAqIGRpYWdub3N0aWMgQVBJXG4gKi9cbnZhciBEaWFnQVBJID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIFByaXZhdGUgaW50ZXJuYWwgY29uc3RydWN0b3JcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIERpYWdBUEkoKSB7XG4gICAgICAgIGZ1bmN0aW9uIF9sb2dQcm94eShmdW5jTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGxvZ2dlciA9IGdldEdsb2JhbCgnZGlhZycpO1xuICAgICAgICAgICAgICAgIC8vIHNob3J0Y3V0IGlmIGxvZ2dlciBub3Qgc2V0XG4gICAgICAgICAgICAgICAgaWYgKCFsb2dnZXIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9nZ2VyW2Z1bmNOYW1lXS5hcHBseShsb2dnZXIsIF9fc3ByZWFkQXJyYXkkMihbXSwgX19yZWFkJDIoYXJncyksIGZhbHNlKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFVzaW5nIHNlbGYgbG9jYWwgdmFyaWFibGUgZm9yIG1pbmlmaWNhdGlvbiBwdXJwb3NlcyBhcyAndGhpcycgY2Fubm90IGJlIG1pbmlmaWVkXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgLy8gRGlhZ0FQSSBzcGVjaWZpYyBmdW5jdGlvbnNcbiAgICAgICAgdmFyIHNldExvZ2dlciA9IGZ1bmN0aW9uIChsb2dnZXIsIG9wdGlvbnNPckxvZ0xldmVsKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgICAgIGlmIChvcHRpb25zT3JMb2dMZXZlbCA9PT0gdm9pZCAwKSB7IG9wdGlvbnNPckxvZ0xldmVsID0geyBsb2dMZXZlbDogRGlhZ0xvZ0xldmVsLklORk8gfTsgfVxuICAgICAgICAgICAgaWYgKGxvZ2dlciA9PT0gc2VsZikge1xuICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzbid0IG11Y2ggd2UgY2FuIGRvIGhlcmUuXG4gICAgICAgICAgICAgICAgLy8gTG9nZ2luZyB0byB0aGUgY29uc29sZSBtaWdodCBicmVhayB0aGUgdXNlciBhcHBsaWNhdGlvbi5cbiAgICAgICAgICAgICAgICAvLyBUcnkgdG8gbG9nIHRvIHNlbGYuIElmIGEgbG9nZ2VyIHdhcyBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgaXQgd2lsbCByZWNlaXZlIHRoZSBsb2cuXG4gICAgICAgICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignQ2Fubm90IHVzZSBkaWFnIGFzIHRoZSBsb2dnZXIgZm9yIGl0c2VsZi4gUGxlYXNlIHVzZSBhIERpYWdMb2dnZXIgaW1wbGVtZW50YXRpb24gbGlrZSBDb25zb2xlRGlhZ0xvZ2dlciBvciBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbicpO1xuICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoKF9hID0gZXJyLnN0YWNrKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBlcnIubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zT3JMb2dMZXZlbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zT3JMb2dMZXZlbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nTGV2ZWw6IG9wdGlvbnNPckxvZ0xldmVsLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgb2xkTG9nZ2VyID0gZ2V0R2xvYmFsKCdkaWFnJyk7XG4gICAgICAgICAgICB2YXIgbmV3TG9nZ2VyID0gY3JlYXRlTG9nTGV2ZWxEaWFnTG9nZ2VyKChfYiA9IG9wdGlvbnNPckxvZ0xldmVsLmxvZ0xldmVsKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBEaWFnTG9nTGV2ZWwuSU5GTywgbG9nZ2VyKTtcbiAgICAgICAgICAgIC8vIFRoZXJlIGFscmVhZHkgaXMgYW4gbG9nZ2VyIHJlZ2lzdGVyZWQuIFdlJ2xsIGxldCBpdCBrbm93IGJlZm9yZSBvdmVyd3JpdGluZyBpdC5cbiAgICAgICAgICAgIGlmIChvbGRMb2dnZXIgJiYgIW9wdGlvbnNPckxvZ0xldmVsLnN1cHByZXNzT3ZlcnJpZGVNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YWNrID0gKF9jID0gbmV3IEVycm9yKCkuc3RhY2spICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6ICc8ZmFpbGVkIHRvIGdlbmVyYXRlIHN0YWNrdHJhY2U+JztcbiAgICAgICAgICAgICAgICBvbGRMb2dnZXIud2FybihcIkN1cnJlbnQgbG9nZ2VyIHdpbGwgYmUgb3ZlcndyaXR0ZW4gZnJvbSBcIiArIHN0YWNrKTtcbiAgICAgICAgICAgICAgICBuZXdMb2dnZXIud2FybihcIkN1cnJlbnQgbG9nZ2VyIHdpbGwgb3ZlcndyaXRlIG9uZSBhbHJlYWR5IHJlZ2lzdGVyZWQgZnJvbSBcIiArIHN0YWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZWdpc3Rlckdsb2JhbCgnZGlhZycsIG5ld0xvZ2dlciwgc2VsZiwgdHJ1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIHNlbGYuc2V0TG9nZ2VyID0gc2V0TG9nZ2VyO1xuICAgICAgICBzZWxmLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB1bnJlZ2lzdGVyR2xvYmFsKEFQSV9OQU1FJDIsIHNlbGYpO1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLmNyZWF0ZUNvbXBvbmVudExvZ2dlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERpYWdDb21wb25lbnRMb2dnZXIob3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgICAgIHNlbGYudmVyYm9zZSA9IF9sb2dQcm94eSgndmVyYm9zZScpO1xuICAgICAgICBzZWxmLmRlYnVnID0gX2xvZ1Byb3h5KCdkZWJ1ZycpO1xuICAgICAgICBzZWxmLmluZm8gPSBfbG9nUHJveHkoJ2luZm8nKTtcbiAgICAgICAgc2VsZi53YXJuID0gX2xvZ1Byb3h5KCd3YXJuJyk7XG4gICAgICAgIHNlbGYuZXJyb3IgPSBfbG9nUHJveHkoJ2Vycm9yJyk7XG4gICAgfVxuICAgIC8qKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRGlhZ0FQSSBBUEkgKi9cbiAgICBEaWFnQVBJLmluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBEaWFnQVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH07XG4gICAgcmV0dXJuIERpYWdBUEk7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqIEdldCBhIGtleSB0byB1bmlxdWVseSBpZGVudGlmeSBhIGNvbnRleHQgdmFsdWUgKi9cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHRLZXkoZGVzY3JpcHRpb24pIHtcbiAgICAvLyBUaGUgc3BlY2lmaWNhdGlvbiBzdGF0ZXMgdGhhdCBmb3IgdGhlIHNhbWUgaW5wdXQsIG11bHRpcGxlIGNhbGxzIHNob3VsZFxuICAgIC8vIHJldHVybiBkaWZmZXJlbnQga2V5cy4gRHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhlIEpTIGRlcGVuZGVuY3kgbWFuYWdlbWVudFxuICAgIC8vIHN5c3RlbSwgdGhpcyBjcmVhdGVzIHByb2JsZW1zIHdoZXJlIG11bHRpcGxlIHZlcnNpb25zIG9mIHNvbWUgcGFja2FnZVxuICAgIC8vIGNvdWxkIGhvbGQgZGlmZmVyZW50IGtleXMgZm9yIHRoZSBzYW1lIHByb3BlcnR5LlxuICAgIC8vXG4gICAgLy8gVGhlcmVmb3JlLCB3ZSB1c2UgU3ltYm9sLmZvciB3aGljaCByZXR1cm5zIHRoZSBzYW1lIGtleSBmb3IgdGhlIHNhbWUgaW5wdXQuXG4gICAgcmV0dXJuIFN5bWJvbC5mb3IoZGVzY3JpcHRpb24pO1xufVxudmFyIEJhc2VDb250ZXh0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdCBhIG5ldyBjb250ZXh0IHdoaWNoIGluaGVyaXRzIHZhbHVlcyBmcm9tIGFuIG9wdGlvbmFsIHBhcmVudCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmVudENvbnRleHQgYSBjb250ZXh0IGZyb20gd2hpY2ggdG8gaW5oZXJpdCB2YWx1ZXNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBCYXNlQ29udGV4dChwYXJlbnRDb250ZXh0KSB7XG4gICAgICAgIC8vIGZvciBtaW5pZmljYXRpb25cbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBzZWxmLl9jdXJyZW50Q29udGV4dCA9IHBhcmVudENvbnRleHQgPyBuZXcgTWFwKHBhcmVudENvbnRleHQpIDogbmV3IE1hcCgpO1xuICAgICAgICBzZWxmLmdldFZhbHVlID0gZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gc2VsZi5fY3VycmVudENvbnRleHQuZ2V0KGtleSk7IH07XG4gICAgICAgIHNlbGYuc2V0VmFsdWUgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgQmFzZUNvbnRleHQoc2VsZi5fY3VycmVudENvbnRleHQpO1xuICAgICAgICAgICAgY29udGV4dC5fY3VycmVudENvbnRleHQuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIH07XG4gICAgICAgIHNlbGYuZGVsZXRlVmFsdWUgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBCYXNlQ29udGV4dChzZWxmLl9jdXJyZW50Q29udGV4dCk7XG4gICAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50Q29udGV4dC5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gQmFzZUNvbnRleHQ7XG59KCkpO1xuLyoqIFRoZSByb290IGNvbnRleHQgaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXJlbnQgY29udGV4dCB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBjb250ZXh0ICovXG52YXIgUk9PVF9DT05URVhUID0gbmV3IEJhc2VDb250ZXh0KCk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19yZWFkJDEgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSQxID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG52YXIgTm9vcENvbnRleHRNYW5hZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BDb250ZXh0TWFuYWdlcigpIHtcbiAgICB9XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS5hY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBST09UX0NPTlRFWFQ7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dE1hbmFnZXIucHJvdG90eXBlLndpdGggPSBmdW5jdGlvbiAoX2NvbnRleHQsIGZuLCB0aGlzQXJnKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMzsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gM10gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmbi5jYWxsLmFwcGx5KGZuLCBfX3NwcmVhZEFycmF5JDEoW3RoaXNBcmddLCBfX3JlYWQkMShhcmdzKSwgZmFsc2UpKTtcbiAgICB9O1xuICAgIE5vb3BDb250ZXh0TWFuYWdlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChfY29udGV4dCwgdGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dE1hbmFnZXIucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dE1hbmFnZXIucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIE5vb3BDb250ZXh0TWFuYWdlcjtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19yZWFkID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufTtcbnZhciBBUElfTkFNRSQxID0gJ2NvbnRleHQnO1xudmFyIE5PT1BfQ09OVEVYVF9NQU5BR0VSID0gbmV3IE5vb3BDb250ZXh0TWFuYWdlcigpO1xuLyoqXG4gKiBTaW5nbGV0b24gb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSBPcGVuVGVsZW1ldHJ5IENvbnRleHQgQVBJXG4gKi9cbnZhciBDb250ZXh0QVBJID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKiBFbXB0eSBwcml2YXRlIGNvbnN0cnVjdG9yIHByZXZlbnRzIGVuZCB1c2VycyBmcm9tIGNvbnN0cnVjdGluZyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgQVBJICovXG4gICAgZnVuY3Rpb24gQ29udGV4dEFQSSgpIHtcbiAgICB9XG4gICAgLyoqIEdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBDb250ZXh0IEFQSSAqL1xuICAgIENvbnRleHRBUEkuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IENvbnRleHRBUEkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGN1cnJlbnQgY29udGV4dCBtYW5hZ2VyLlxuICAgICAqXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgY29udGV4dCBtYW5hZ2VyIHdhcyBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCwgZWxzZSBmYWxzZVxuICAgICAqL1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLnNldEdsb2JhbENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24gKGNvbnRleHRNYW5hZ2VyKSB7XG4gICAgICAgIHJldHVybiByZWdpc3Rlckdsb2JhbChBUElfTkFNRSQxLCBjb250ZXh0TWFuYWdlciwgRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEdldCB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb250ZXh0XG4gICAgICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5hY3RpdmUoKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEV4ZWN1dGUgYSBmdW5jdGlvbiB3aXRoIGFuIGFjdGl2ZSBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIGJlIGFjdGl2ZSBkdXJpbmcgZnVuY3Rpb24gZXhlY3V0aW9uXG4gICAgICogQHBhcmFtIGZuIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgaW4gYSBjb250ZXh0XG4gICAgICogQHBhcmFtIHRoaXNBcmcgb3B0aW9uYWwgcmVjZWl2ZXIgdG8gYmUgdXNlZCBmb3IgY2FsbGluZyBmblxuICAgICAqIEBwYXJhbSBhcmdzIG9wdGlvbmFsIGFyZ3VtZW50cyBmb3J3YXJkZWQgdG8gZm5cbiAgICAgKi9cbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24gKGNvbnRleHQsIGZuLCB0aGlzQXJnKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAzOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAzXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkpLndpdGguYXBwbHkoX2EsIF9fc3ByZWFkQXJyYXkoW2NvbnRleHQsIGZuLCB0aGlzQXJnXSwgX19yZWFkKGFyZ3MpLCBmYWxzZSkpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQmluZCBhIGNvbnRleHQgdG8gYSB0YXJnZXQgZnVuY3Rpb24gb3IgZXZlbnQgZW1pdHRlclxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBiaW5kIHRvIHRoZSBldmVudCBlbWl0dGVyIG9yIGZ1bmN0aW9uLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb250ZXh0XG4gICAgICogQHBhcmFtIHRhcmdldCBmdW5jdGlvbiBvciBldmVudCBlbWl0dGVyIHRvIGJpbmRcbiAgICAgKi9cbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGNvbnRleHQsIHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5iaW5kKGNvbnRleHQsIHRhcmdldCk7XG4gICAgfTtcbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS5fZ2V0Q29udGV4dE1hbmFnZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRHbG9iYWwoQVBJX05BTUUkMSkgfHwgTk9PUF9DT05URVhUX01BTkFHRVI7XG4gICAgfTtcbiAgICAvKiogRGlzYWJsZSBhbmQgcmVtb3ZlIHRoZSBnbG9iYWwgY29udGV4dCBtYW5hZ2VyICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5kaXNhYmxlKCk7XG4gICAgICAgIHVucmVnaXN0ZXJHbG9iYWwoQVBJX05BTUUkMSwgRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICB9O1xuICAgIHJldHVybiBDb250ZXh0QVBJO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBUcmFjZUZsYWdzO1xuKGZ1bmN0aW9uIChUcmFjZUZsYWdzKSB7XG4gICAgLyoqIFJlcHJlc2VudHMgbm8gZmxhZyBzZXQuICovXG4gICAgVHJhY2VGbGFnc1tUcmFjZUZsYWdzW1wiTk9ORVwiXSA9IDBdID0gXCJOT05FXCI7XG4gICAgLyoqIEJpdCB0byByZXByZXNlbnQgd2hldGhlciB0cmFjZSBpcyBzYW1wbGVkIGluIHRyYWNlIGZsYWdzLiAqL1xuICAgIFRyYWNlRmxhZ3NbVHJhY2VGbGFnc1tcIlNBTVBMRURcIl0gPSAxXSA9IFwiU0FNUExFRFwiO1xufSkoVHJhY2VGbGFncyB8fCAoVHJhY2VGbGFncyA9IHt9KSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgSU5WQUxJRF9TUEFOSUQgPSAnMDAwMDAwMDAwMDAwMDAwMCc7XG52YXIgSU5WQUxJRF9UUkFDRUlEID0gJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJztcbnZhciBJTlZBTElEX1NQQU5fQ09OVEVYVCA9IHtcbiAgICB0cmFjZUlkOiBJTlZBTElEX1RSQUNFSUQsXG4gICAgc3BhbklkOiBJTlZBTElEX1NQQU5JRCxcbiAgICB0cmFjZUZsYWdzOiBUcmFjZUZsYWdzLk5PTkUsXG59O1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBUaGUgTm9uUmVjb3JkaW5nU3BhbiBpcyB0aGUgZGVmYXVsdCB7QGxpbmsgU3Bhbn0gdGhhdCBpcyB1c2VkIHdoZW4gbm8gU3BhblxuICogaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlLiBBbGwgb3BlcmF0aW9ucyBhcmUgbm8tb3AgaW5jbHVkaW5nIGNvbnRleHRcbiAqIHByb3BhZ2F0aW9uLlxuICovXG52YXIgTm9uUmVjb3JkaW5nU3BhbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb25SZWNvcmRpbmdTcGFuKF9zcGFuQ29udGV4dCkge1xuICAgICAgICBpZiAoX3NwYW5Db250ZXh0ID09PSB2b2lkIDApIHsgX3NwYW5Db250ZXh0ID0gSU5WQUxJRF9TUEFOX0NPTlRFWFQ7IH1cbiAgICAgICAgdGhpcy5fc3BhbkNvbnRleHQgPSBfc3BhbkNvbnRleHQ7XG4gICAgfVxuICAgIC8vIFJldHVybnMgYSBTcGFuQ29udGV4dC5cbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5zcGFuQ29udGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NwYW5Db250ZXh0O1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoX2tleSwgX3ZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKF9hdHRyaWJ1dGVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5hZGRFdmVudCA9IGZ1bmN0aW9uIChfbmFtZSwgX2F0dHJpYnV0ZXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5hZGRMaW5rID0gZnVuY3Rpb24gKF9saW5rKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuYWRkTGlua3MgPSBmdW5jdGlvbiAoX2xpbmtzKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5zZXRTdGF0dXMgPSBmdW5jdGlvbiAoX3N0YXR1cykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUudXBkYXRlTmFtZSA9IGZ1bmN0aW9uIChfbmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKF9lbmRUaW1lKSB7IH07XG4gICAgLy8gaXNSZWNvcmRpbmcgYWx3YXlzIHJldHVybnMgZmFsc2UgZm9yIE5vblJlY29yZGluZ1NwYW4uXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuaXNSZWNvcmRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUucmVjb3JkRXhjZXB0aW9uID0gZnVuY3Rpb24gKF9leGNlcHRpb24sIF90aW1lKSB7IH07XG4gICAgcmV0dXJuIE5vblJlY29yZGluZ1NwYW47XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBzcGFuIGtleVxuICovXG52YXIgU1BBTl9LRVkgPSBjcmVhdGVDb250ZXh0S2V5KCdPcGVuVGVsZW1ldHJ5IENvbnRleHQgS2V5IFNQQU4nKTtcbi8qKlxuICogUmV0dXJuIHRoZSBzcGFuIGlmIG9uZSBleGlzdHNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIGdldCBzcGFuIGZyb21cbiAqL1xuZnVuY3Rpb24gZ2V0U3Bhbihjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQuZ2V0VmFsdWUoU1BBTl9LRVkpIHx8IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogR2V0cyB0aGUgc3BhbiBmcm9tIHRoZSBjdXJyZW50IGNvbnRleHQsIGlmIG9uZSBleGlzdHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFjdGl2ZVNwYW4oKSB7XG4gICAgcmV0dXJuIGdldFNwYW4oQ29udGV4dEFQSS5nZXRJbnN0YW5jZSgpLmFjdGl2ZSgpKTtcbn1cbi8qKlxuICogU2V0IHRoZSBzcGFuIG9uIGEgY29udGV4dFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gdXNlIGFzIHBhcmVudFxuICogQHBhcmFtIHNwYW4gc3BhbiB0byBzZXQgYWN0aXZlXG4gKi9cbmZ1bmN0aW9uIHNldFNwYW4oY29udGV4dCwgc3Bhbikge1xuICAgIHJldHVybiBjb250ZXh0LnNldFZhbHVlKFNQQU5fS0VZLCBzcGFuKTtcbn1cbi8qKlxuICogUmVtb3ZlIGN1cnJlbnQgc3BhbiBzdG9yZWQgaW4gdGhlIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIGRlbGV0ZSBzcGFuIGZyb21cbiAqL1xuZnVuY3Rpb24gZGVsZXRlU3Bhbihjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQuZGVsZXRlVmFsdWUoU1BBTl9LRVkpO1xufVxuLyoqXG4gKiBXcmFwIHNwYW4gY29udGV4dCBpbiBhIE5vb3BTcGFuIGFuZCBzZXQgYXMgc3BhbiBpbiBhIG5ld1xuICogY29udGV4dFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gc2V0IGFjdGl2ZSBzcGFuIG9uXG4gKiBAcGFyYW0gc3BhbkNvbnRleHQgc3BhbiBjb250ZXh0IHRvIGJlIHdyYXBwZWRcbiAqL1xuZnVuY3Rpb24gc2V0U3BhbkNvbnRleHQoY29udGV4dCwgc3BhbkNvbnRleHQpIHtcbiAgICByZXR1cm4gc2V0U3Bhbihjb250ZXh0LCBuZXcgTm9uUmVjb3JkaW5nU3BhbihzcGFuQ29udGV4dCkpO1xufVxuLyoqXG4gKiBHZXQgdGhlIHNwYW4gY29udGV4dCBvZiB0aGUgc3BhbiBpZiBpdCBleGlzdHMuXG4gKlxuICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBnZXQgdmFsdWVzIGZyb21cbiAqL1xuZnVuY3Rpb24gZ2V0U3BhbkNvbnRleHQoY29udGV4dCkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gZ2V0U3Bhbihjb250ZXh0KSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNwYW5Db250ZXh0KCk7XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgVkFMSURfVFJBQ0VJRF9SRUdFWCA9IC9eKFswLTlhLWZdezMyfSkkL2k7XG52YXIgVkFMSURfU1BBTklEX1JFR0VYID0gL15bMC05YS1mXXsxNn0kL2k7XG5mdW5jdGlvbiBpc1ZhbGlkVHJhY2VJZCh0cmFjZUlkKSB7XG4gICAgcmV0dXJuIFZBTElEX1RSQUNFSURfUkVHRVgudGVzdCh0cmFjZUlkKSAmJiB0cmFjZUlkICE9PSBJTlZBTElEX1RSQUNFSUQ7XG59XG5mdW5jdGlvbiBpc1ZhbGlkU3BhbklkKHNwYW5JZCkge1xuICAgIHJldHVybiBWQUxJRF9TUEFOSURfUkVHRVgudGVzdChzcGFuSWQpICYmIHNwYW5JZCAhPT0gSU5WQUxJRF9TUEFOSUQ7XG59XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHtAbGluayBTcGFuQ29udGV4dH0gaXMgdmFsaWQuXG4gKiBAcmV0dXJuIHRydWUgaWYgdGhpcyB7QGxpbmsgU3BhbkNvbnRleHR9IGlzIHZhbGlkLlxuICovXG5mdW5jdGlvbiBpc1NwYW5Db250ZXh0VmFsaWQoc3BhbkNvbnRleHQpIHtcbiAgICByZXR1cm4gKGlzVmFsaWRUcmFjZUlkKHNwYW5Db250ZXh0LnRyYWNlSWQpICYmIGlzVmFsaWRTcGFuSWQoc3BhbkNvbnRleHQuc3BhbklkKSk7XG59XG4vKipcbiAqIFdyYXAgdGhlIGdpdmVuIHtAbGluayBTcGFuQ29udGV4dH0gaW4gYSBuZXcgbm9uLXJlY29yZGluZyB7QGxpbmsgU3Bhbn1cbiAqXG4gKiBAcGFyYW0gc3BhbkNvbnRleHQgc3BhbiBjb250ZXh0IHRvIGJlIHdyYXBwZWRcbiAqIEByZXR1cm5zIGEgbmV3IG5vbi1yZWNvcmRpbmcge0BsaW5rIFNwYW59IHdpdGggdGhlIHByb3ZpZGVkIGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gd3JhcFNwYW5Db250ZXh0KHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuIG5ldyBOb25SZWNvcmRpbmdTcGFuKHNwYW5Db250ZXh0KTtcbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBjb250ZXh0QXBpID0gQ29udGV4dEFQSS5nZXRJbnN0YW5jZSgpO1xuLyoqXG4gKiBOby1vcCBpbXBsZW1lbnRhdGlvbnMgb2Yge0BsaW5rIFRyYWNlcn0uXG4gKi9cbnZhciBOb29wVHJhY2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BUcmFjZXIoKSB7XG4gICAgfVxuICAgIC8vIHN0YXJ0U3BhbiBzdGFydHMgYSBub29wIHNwYW4uXG4gICAgTm9vcFRyYWNlci5wcm90b3R5cGUuc3RhcnRTcGFuID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMsIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKGNvbnRleHQgPT09IHZvaWQgMCkgeyBjb250ZXh0ID0gY29udGV4dEFwaS5hY3RpdmUoKTsgfVxuICAgICAgICB2YXIgcm9vdCA9IEJvb2xlYW4ob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnJvb3QpO1xuICAgICAgICBpZiAocm9vdCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb25SZWNvcmRpbmdTcGFuKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcmVudEZyb21Db250ZXh0ID0gY29udGV4dCAmJiBnZXRTcGFuQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgaWYgKGlzU3BhbkNvbnRleHQocGFyZW50RnJvbUNvbnRleHQpICYmXG4gICAgICAgICAgICBpc1NwYW5Db250ZXh0VmFsaWQocGFyZW50RnJvbUNvbnRleHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE5vblJlY29yZGluZ1NwYW4ocGFyZW50RnJvbUNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb25SZWNvcmRpbmdTcGFuKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE5vb3BUcmFjZXIucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uIChuYW1lLCBhcmcyLCBhcmczLCBhcmc0KSB7XG4gICAgICAgIHZhciBvcHRzO1xuICAgICAgICB2YXIgY3R4O1xuICAgICAgICB2YXIgZm47XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIGZuID0gYXJnMjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBvcHRzID0gYXJnMjtcbiAgICAgICAgICAgIGZuID0gYXJnMztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9wdHMgPSBhcmcyO1xuICAgICAgICAgICAgY3R4ID0gYXJnMztcbiAgICAgICAgICAgIGZuID0gYXJnNDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFyZW50Q29udGV4dCA9IGN0eCAhPT0gbnVsbCAmJiBjdHggIT09IHZvaWQgMCA/IGN0eCA6IGNvbnRleHRBcGkuYWN0aXZlKCk7XG4gICAgICAgIHZhciBzcGFuID0gdGhpcy5zdGFydFNwYW4obmFtZSwgb3B0cywgcGFyZW50Q29udGV4dCk7XG4gICAgICAgIHZhciBjb250ZXh0V2l0aFNwYW5TZXQgPSBzZXRTcGFuKHBhcmVudENvbnRleHQsIHNwYW4pO1xuICAgICAgICByZXR1cm4gY29udGV4dEFwaS53aXRoKGNvbnRleHRXaXRoU3BhblNldCwgZm4sIHVuZGVmaW5lZCwgc3Bhbik7XG4gICAgfTtcbiAgICByZXR1cm4gTm9vcFRyYWNlcjtcbn0oKSk7XG5mdW5jdGlvbiBpc1NwYW5Db250ZXh0KHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuICh0eXBlb2Ygc3BhbkNvbnRleHQgPT09ICdvYmplY3QnICYmXG4gICAgICAgIHR5cGVvZiBzcGFuQ29udGV4dFsnc3BhbklkJ10gPT09ICdzdHJpbmcnICYmXG4gICAgICAgIHR5cGVvZiBzcGFuQ29udGV4dFsndHJhY2VJZCddID09PSAnc3RyaW5nJyAmJlxuICAgICAgICB0eXBlb2Ygc3BhbkNvbnRleHRbJ3RyYWNlRmxhZ3MnXSA9PT0gJ251bWJlcicpO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIE5PT1BfVFJBQ0VSID0gbmV3IE5vb3BUcmFjZXIoKTtcbi8qKlxuICogUHJveHkgdHJhY2VyIHByb3ZpZGVkIGJ5IHRoZSBwcm94eSB0cmFjZXIgcHJvdmlkZXJcbiAqL1xudmFyIFByb3h5VHJhY2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFByb3h5VHJhY2VyKF9wcm92aWRlciwgbmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLl9wcm92aWRlciA9IF9wcm92aWRlcjtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG4gICAgUHJveHlUcmFjZXIucHJvdG90eXBlLnN0YXJ0U3BhbiA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRUcmFjZXIoKS5zdGFydFNwYW4obmFtZSwgb3B0aW9ucywgY29udGV4dCk7XG4gICAgfTtcbiAgICBQcm94eVRyYWNlci5wcm90b3R5cGUuc3RhcnRBY3RpdmVTcGFuID0gZnVuY3Rpb24gKF9uYW1lLCBfb3B0aW9ucywgX2NvbnRleHQsIF9mbikge1xuICAgICAgICB2YXIgdHJhY2VyID0gdGhpcy5fZ2V0VHJhY2VyKCk7XG4gICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KHRyYWNlci5zdGFydEFjdGl2ZVNwYW4sIHRyYWNlciwgYXJndW1lbnRzKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFRyeSB0byBnZXQgYSB0cmFjZXIgZnJvbSB0aGUgcHJveHkgdHJhY2VyIHByb3ZpZGVyLlxuICAgICAqIElmIHRoZSBwcm94eSB0cmFjZXIgcHJvdmlkZXIgaGFzIG5vIGRlbGVnYXRlLCByZXR1cm4gYSBub29wIHRyYWNlci5cbiAgICAgKi9cbiAgICBQcm94eVRyYWNlci5wcm90b3R5cGUuX2dldFRyYWNlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRyYWNlciA9IHRoaXMuX3Byb3ZpZGVyLmdldERlbGVnYXRlVHJhY2VyKHRoaXMubmFtZSwgdGhpcy52ZXJzaW9uLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICBpZiAoIXRyYWNlcikge1xuICAgICAgICAgICAgcmV0dXJuIE5PT1BfVFJBQ0VSO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RlbGVnYXRlID0gdHJhY2VyO1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGU7XG4gICAgfTtcbiAgICByZXR1cm4gUHJveHlUcmFjZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUge0BsaW5rIFRyYWNlclByb3ZpZGVyfSB3aGljaCByZXR1cm5zIGFuIGltcG90ZW50XG4gKiBUcmFjZXIgZm9yIGFsbCBjYWxscyB0byBgZ2V0VHJhY2VyYC5cbiAqXG4gKiBBbGwgb3BlcmF0aW9ucyBhcmUgbm8tb3AuXG4gKi9cbnZhciBOb29wVHJhY2VyUHJvdmlkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTm9vcFRyYWNlclByb3ZpZGVyKCkge1xuICAgIH1cbiAgICBOb29wVHJhY2VyUHJvdmlkZXIucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uIChfbmFtZSwgX3ZlcnNpb24sIF9vcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgTm9vcFRyYWNlcigpO1xuICAgIH07XG4gICAgcmV0dXJuIE5vb3BUcmFjZXJQcm92aWRlcjtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgTk9PUF9UUkFDRVJfUFJPVklERVIgPSBuZXcgTm9vcFRyYWNlclByb3ZpZGVyKCk7XG4vKipcbiAqIFRyYWNlciBwcm92aWRlciB3aGljaCBwcm92aWRlcyB7QGxpbmsgUHJveHlUcmFjZXJ9cy5cbiAqXG4gKiBCZWZvcmUgYSBkZWxlZ2F0ZSBpcyBzZXQsIHRyYWNlcnMgcHJvdmlkZWQgYXJlIE5vT3AuXG4gKiAgIFdoZW4gYSBkZWxlZ2F0ZSBpcyBzZXQsIHRyYWNlcyBhcmUgcHJvdmlkZWQgZnJvbSB0aGUgZGVsZWdhdGUuXG4gKiAgIFdoZW4gYSBkZWxlZ2F0ZSBpcyBzZXQgYWZ0ZXIgdHJhY2VycyBoYXZlIGFscmVhZHkgYmVlbiBwcm92aWRlZCxcbiAqICAgYWxsIHRyYWNlcnMgYWxyZWFkeSBwcm92aWRlZCB3aWxsIHVzZSB0aGUgcHJvdmlkZWQgZGVsZWdhdGUgaW1wbGVtZW50YXRpb24uXG4gKi9cbnZhciBQcm94eVRyYWNlclByb3ZpZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFByb3h5VHJhY2VyUHJvdmlkZXIoKSB7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBhIHtAbGluayBQcm94eVRyYWNlcn1cbiAgICAgKi9cbiAgICBQcm94eVRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbiAobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5nZXREZWxlZ2F0ZVRyYWNlcihuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbmV3IFByb3h5VHJhY2VyKHRoaXMsIG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpKTtcbiAgICB9O1xuICAgIFByb3h5VHJhY2VyUHJvdmlkZXIucHJvdG90eXBlLmdldERlbGVnYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl9kZWxlZ2F0ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogTk9PUF9UUkFDRVJfUFJPVklERVI7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGRlbGVnYXRlIHRyYWNlciBwcm92aWRlclxuICAgICAqL1xuICAgIFByb3h5VHJhY2VyUHJvdmlkZXIucHJvdG90eXBlLnNldERlbGVnYXRlID0gZnVuY3Rpb24gKGRlbGVnYXRlKSB7XG4gICAgICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgfTtcbiAgICBQcm94eVRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5nZXREZWxlZ2F0ZVRyYWNlciA9IGZ1bmN0aW9uIChuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuX2RlbGVnYXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0VHJhY2VyKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpO1xuICAgIH07XG4gICAgcmV0dXJuIFByb3h5VHJhY2VyUHJvdmlkZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIFNwYW5LaW5kO1xuKGZ1bmN0aW9uIChTcGFuS2luZCkge1xuICAgIC8qKiBEZWZhdWx0IHZhbHVlLiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBpcyB1c2VkIGludGVybmFsbHkuICovXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJJTlRFUk5BTFwiXSA9IDBdID0gXCJJTlRFUk5BTFwiO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBzcGFuIGNvdmVycyBzZXJ2ZXItc2lkZSBoYW5kbGluZyBvZiBhbiBSUEMgb3Igb3RoZXJcbiAgICAgKiByZW1vdGUgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIlNFUlZFUlwiXSA9IDFdID0gXCJTRVJWRVJcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBjb3ZlcnMgdGhlIGNsaWVudC1zaWRlIHdyYXBwZXIgYXJvdW5kIGFuIFJQQyBvclxuICAgICAqIG90aGVyIHJlbW90ZSByZXF1ZXN0LlxuICAgICAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiQ0xJRU5UXCJdID0gMl0gPSBcIkNMSUVOVFwiO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBzcGFuIGRlc2NyaWJlcyBwcm9kdWNlciBzZW5kaW5nIGEgbWVzc2FnZSB0byBhXG4gICAgICogYnJva2VyLiBVbmxpa2UgY2xpZW50IGFuZCBzZXJ2ZXIsIHRoZXJlIGlzIG5vIGRpcmVjdCBjcml0aWNhbCBwYXRoIGxhdGVuY3lcbiAgICAgKiByZWxhdGlvbnNoaXAgYmV0d2VlbiBwcm9kdWNlciBhbmQgY29uc3VtZXIgc3BhbnMuXG4gICAgICovXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJQUk9EVUNFUlwiXSA9IDNdID0gXCJQUk9EVUNFUlwiO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBzcGFuIGRlc2NyaWJlcyBjb25zdW1lciByZWNlaXZpbmcgYSBtZXNzYWdlIGZyb20gYVxuICAgICAqIGJyb2tlci4gVW5saWtlIGNsaWVudCBhbmQgc2VydmVyLCB0aGVyZSBpcyBubyBkaXJlY3QgY3JpdGljYWwgcGF0aCBsYXRlbmN5XG4gICAgICogcmVsYXRpb25zaGlwIGJldHdlZW4gcHJvZHVjZXIgYW5kIGNvbnN1bWVyIHNwYW5zLlxuICAgICAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiQ09OU1VNRVJcIl0gPSA0XSA9IFwiQ09OU1VNRVJcIjtcbn0pKFNwYW5LaW5kIHx8IChTcGFuS2luZCA9IHt9KSk7XG5cbi8qKlxuICogQW4gZW51bWVyYXRpb24gb2Ygc3RhdHVzIGNvZGVzLlxuICovXG52YXIgU3BhblN0YXR1c0NvZGU7XG4oZnVuY3Rpb24gKFNwYW5TdGF0dXNDb2RlKSB7XG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc3RhdHVzLlxuICAgICAqL1xuICAgIFNwYW5TdGF0dXNDb2RlW1NwYW5TdGF0dXNDb2RlW1wiVU5TRVRcIl0gPSAwXSA9IFwiVU5TRVRcIjtcbiAgICAvKipcbiAgICAgKiBUaGUgb3BlcmF0aW9uIGhhcyBiZWVuIHZhbGlkYXRlZCBieSBhbiBBcHBsaWNhdGlvbiBkZXZlbG9wZXIgb3JcbiAgICAgKiBPcGVyYXRvciB0byBoYXZlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXG4gICAgICovXG4gICAgU3BhblN0YXR1c0NvZGVbU3BhblN0YXR1c0NvZGVbXCJPS1wiXSA9IDFdID0gXCJPS1wiO1xuICAgIC8qKlxuICAgICAqIFRoZSBvcGVyYXRpb24gY29udGFpbnMgYW4gZXJyb3IuXG4gICAgICovXG4gICAgU3BhblN0YXR1c0NvZGVbU3BhblN0YXR1c0NvZGVbXCJFUlJPUlwiXSA9IDJdID0gXCJFUlJPUlwiO1xufSkoU3BhblN0YXR1c0NvZGUgfHwgKFNwYW5TdGF0dXNDb2RlID0ge30pKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIFNwbGl0IG1vZHVsZS1sZXZlbCB2YXJpYWJsZSBkZWZpbml0aW9uIGludG8gc2VwYXJhdGUgZmlsZXMgdG8gYWxsb3dcbi8vIHRyZWUtc2hha2luZyBvbiBlYWNoIGFwaSBpbnN0YW5jZS5cbi8qKiBFbnRyeXBvaW50IGZvciBjb250ZXh0IEFQSSAqL1xudmFyIGNvbnRleHQgPSBDb250ZXh0QVBJLmdldEluc3RhbmNlKCk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgQVBJX05BTUUgPSAndHJhY2UnO1xuLyoqXG4gKiBTaW5nbGV0b24gb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSBPcGVuVGVsZW1ldHJ5IFRyYWNpbmcgQVBJXG4gKi9cbnZhciBUcmFjZUFQSSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKiogRW1wdHkgcHJpdmF0ZSBjb25zdHJ1Y3RvciBwcmV2ZW50cyBlbmQgdXNlcnMgZnJvbSBjb25zdHJ1Y3RpbmcgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEFQSSAqL1xuICAgIGZ1bmN0aW9uIFRyYWNlQVBJKCkge1xuICAgICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyID0gbmV3IFByb3h5VHJhY2VyUHJvdmlkZXIoKTtcbiAgICAgICAgdGhpcy53cmFwU3BhbkNvbnRleHQgPSB3cmFwU3BhbkNvbnRleHQ7XG4gICAgICAgIHRoaXMuaXNTcGFuQ29udGV4dFZhbGlkID0gaXNTcGFuQ29udGV4dFZhbGlkO1xuICAgICAgICB0aGlzLmRlbGV0ZVNwYW4gPSBkZWxldGVTcGFuO1xuICAgICAgICB0aGlzLmdldFNwYW4gPSBnZXRTcGFuO1xuICAgICAgICB0aGlzLmdldEFjdGl2ZVNwYW4gPSBnZXRBY3RpdmVTcGFuO1xuICAgICAgICB0aGlzLmdldFNwYW5Db250ZXh0ID0gZ2V0U3BhbkNvbnRleHQ7XG4gICAgICAgIHRoaXMuc2V0U3BhbiA9IHNldFNwYW47XG4gICAgICAgIHRoaXMuc2V0U3BhbkNvbnRleHQgPSBzZXRTcGFuQ29udGV4dDtcbiAgICB9XG4gICAgLyoqIEdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBUcmFjZSBBUEkgKi9cbiAgICBUcmFjZUFQSS5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBuZXcgVHJhY2VBUEkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGN1cnJlbnQgZ2xvYmFsIHRyYWNlci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHRyYWNlciBwcm92aWRlciB3YXMgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQsIGVsc2UgZmFsc2VcbiAgICAgKi9cbiAgICBUcmFjZUFQSS5wcm90b3R5cGUuc2V0R2xvYmFsVHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbiAocHJvdmlkZXIpIHtcbiAgICAgICAgdmFyIHN1Y2Nlc3MgPSByZWdpc3Rlckdsb2JhbChBUElfTkFNRSwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciwgRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIuc2V0RGVsZWdhdGUocHJvdmlkZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZ2xvYmFsIHRyYWNlciBwcm92aWRlci5cbiAgICAgKi9cbiAgICBUcmFjZUFQSS5wcm90b3R5cGUuZ2V0VHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRHbG9iYWwoQVBJX05BTUUpIHx8IHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXI7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgdHJhY2VyIGZyb20gdGhlIGdsb2JhbCB0cmFjZXIgcHJvdmlkZXIuXG4gICAgICovXG4gICAgVHJhY2VBUEkucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uIChuYW1lLCB2ZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRyYWNlclByb3ZpZGVyKCkuZ2V0VHJhY2VyKG5hbWUsIHZlcnNpb24pO1xuICAgIH07XG4gICAgLyoqIFJlbW92ZSB0aGUgZ2xvYmFsIHRyYWNlciBwcm92aWRlciAqL1xuICAgIFRyYWNlQVBJLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB1bnJlZ2lzdGVyR2xvYmFsKEFQSV9OQU1FLCBEaWFnQVBJLmluc3RhbmNlKCkpO1xuICAgICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyID0gbmV3IFByb3h5VHJhY2VyUHJvdmlkZXIoKTtcbiAgICB9O1xuICAgIHJldHVybiBUcmFjZUFQSTtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBTcGxpdCBtb2R1bGUtbGV2ZWwgdmFyaWFibGUgZGVmaW5pdGlvbiBpbnRvIHNlcGFyYXRlIGZpbGVzIHRvIGFsbG93XG4vLyB0cmVlLXNoYWtpbmcgb24gZWFjaCBhcGkgaW5zdGFuY2UuXG4vKiogRW50cnlwb2ludCBmb3IgdHJhY2UgQVBJICovXG52YXIgdHJhY2UgPSBUcmFjZUFQSS5nZXRJbnN0YW5jZSgpO1xuXG5jb25zdCBjcmVhdGVDREVTcGFuID0gYXN5bmMgKGNkZUNvbm4sIGRhdGEsIG9wZXJhdGlvbikgPT4ge1xuICBjb25zdCB0cmFjZXIgPSB0cmFjZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpO1xuICBjb25zdCBwYXJlbnRDb250ZXh0ID0gY29udGV4dC5hY3RpdmUoKTtcbiAgY29uc3Qgc3BhbiA9IHRyYWNlci5zdGFydFNwYW4oXG4gICAgYGNkZS4ke2RhdGEudHlwZX1gLFxuICAgIHtcbiAgICAgIGtpbmQ6IFNwYW5LaW5kLkNMSUVOVCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgXCJtZXNzYWdlLnR5cGVcIjogZGF0YS50eXBlLFxuICAgICAgICAuLi5jZGVDb25uLnRyYWNpbmdDb250ZXh0ICYmIHtcbiAgICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgIFwib2pzLmZvcm1JZFwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LmZvcm1JZCxcbiAgICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQudmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LmJhc2VVcmwsXG4gICAgICAgICAgXCJvanMucmVmZXJyZXJcIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5yZWZlcnJlclxuICAgICAgICB9LFxuICAgICAgICBcImNkZS5tZXNzYWdlLnR5cGVcIjogZGF0YS50eXBlLFxuICAgICAgICBcImNkZS5tZXNzYWdlLnBheWxvYWRcIjogSlNPTi5zdHJpbmdpZnkoZGF0YS5wYXlsb2FkKVxuICAgICAgfVxuICAgIH0sXG4gICAgcGFyZW50Q29udGV4dFxuICApO1xuICByZXR1cm4gY29udGV4dC53aXRoKHRyYWNlLnNldFNwYW4ocGFyZW50Q29udGV4dCwgc3BhbiksIGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3BlcmF0aW9uKCk7XG4gICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgbWVzc2FnZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIlxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc3Bhbi5lbmQoKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IGNyZWF0ZVRyYWNraW5nU3BhbiA9IGFzeW5jIChvcHRpb25zLCBvcGVyYXRpb24pID0+IHtcbiAgY29uc3QgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKTtcbiAgY29uc3QgcGFyZW50Q29udGV4dCA9IGNvbnRleHQuYWN0aXZlKCk7XG4gIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKFxuICAgIGBmb3JtLiR7b3B0aW9ucy5zcGFuTmFtZX1gLFxuICAgIHtcbiAgICAgIGtpbmQ6IFNwYW5LaW5kLkNMSUVOVCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBvcHRpb25zLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IG9wdGlvbnMuZGV2aWNlVG9rZW4sXG4gICAgICAgIFwib2pzLmZvcm1JZFwiOiBvcHRpb25zLmZvcm1JZCxcbiAgICAgICAgXCJvanMudmVyc2lvblwiOiBvcHRpb25zLnZlcnNpb24sXG4gICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiBvcHRpb25zLnJlbGVhc2VWZXJzaW9uLFxuICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiBvcHRpb25zLmJhc2VVcmwsXG4gICAgICAgIFwib2pzLnJlZmVycmVyXCI6IG9wdGlvbnMucmVmZXJyZXIsXG4gICAgICAgIC4uLm9wdGlvbnMucGF5bWVudFJvdXRlSWQgJiYgeyBcInBheW1lbnQucm91dGVfaWRcIjogb3B0aW9ucy5wYXltZW50Um91dGVJZCB9XG4gICAgICB9XG4gICAgfSxcbiAgICBwYXJlbnRDb250ZXh0XG4gICk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3BlcmF0aW9uKCk7XG4gICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCI7XG4gICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2VcbiAgICB9KTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfSBmaW5hbGx5IHtcbiAgICBzcGFuLmVuZCgpO1xuICB9XG59O1xuXG5jbGFzcyBDZGVFcnJvciBleHRlbmRzIEN1c3RvbUVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBjb25zdCBmcmllbmRseU1lc3NhZ2UgPSBgJHtyZXNwb25zZS5tZXNzYWdlfWA7XG4gICAgc3VwZXIoZnJpZW5kbHlNZXNzYWdlKTtcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IHF1ZXJ5Q0RFID0gYXN5bmMgKGNkZUNvbm4sIGRhdGEsIHJlc3BvbnNlU2NoZW1hLCB0cmFja2luZ0tleSkgPT4ge1xuICByZXR1cm4gY3JlYXRlQ0RFU3BhbihjZGVDb25uLCBkYXRhLCBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHRyYWNraW5nS2V5KSB7XG4gICAgICB0cmFjayh0cmFja2luZ0tleSwge1xuICAgICAgICAuLi5kYXRhXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjZGVDb25uLnNlbmQoZGF0YSk7XG4gICAgaWYgKGlzQ0RFUmVzcG9uc2VFcnJvcihyZXNwb25zZSkpIHtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBuYXZpZ2F0b3IuY29ubmVjdGlvbjtcbiAgICAgIHRyYWNrKFwiY2RlX3Jlc3BvbnNlX2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3JfbWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZSxcbiAgICAgICAgbWVzc2FnZV90eXBlOiBkYXRhLnR5cGUsXG4gICAgICAgIHVzZXJfYWdlbnQ6IG5hdmlnYXRvci51c2VyQWdlbnQsXG4gICAgICAgIG9ubGluZTogbmF2aWdhdG9yLm9uTGluZSxcbiAgICAgICAgaGFzX2ZvY3VzOiBkb2N1bWVudC5oYXNGb2N1cygpLFxuICAgICAgICBocmVmOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgICAgZG9jdW1lbnRfdmlzaWJpbGl0eV9zdGF0ZTogZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlLFxuICAgICAgICBjb25uZWN0aW9uX2Rvd25saW5rOiBjb25uZWN0aW9uPy5kb3dubGluayxcbiAgICAgICAgY29ubmVjdGlvbl9lZmZlY3RpdmVfdHlwZTogY29ubmVjdGlvbj8uZWZmZWN0aXZlVHlwZSxcbiAgICAgICAgY29ubmVjdGlvbl9ydHQ6IGNvbm5lY3Rpb24/LnJ0dCxcbiAgICAgICAgY29ubmVjdGlvbl9zYXZlX2RhdGE6IGNvbm5lY3Rpb24/LnNhdmVEYXRhXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBDZGVFcnJvcihyZXNwb25zZSk7XG4gICAgfVxuICAgIGlmICghY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEocmVzcG9uc2UsIHJlc3BvbnNlU2NoZW1hKSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2VTY2hlbWEuc2FmZVBhcnNlKHJlc3BvbnNlKTtcbiAgICAgIGlmIChyZXN1bHQuc3VjY2VzcykgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIHJlc3BvbnNlU2NoZW1hLCBcIkFjdHVhbDpcIiwgcmVzcG9uc2UpO1xuICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgIH1cbiAgICBpZiAodHJhY2tpbmdLZXkpIHtcbiAgICAgIHRyYWNrKHRyYWNraW5nS2V5LCB7XG4gICAgICAgIC4uLnJlc3BvbnNlXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9KTtcbn07XG5jb25zdCBjaGVja0lmQ29uZm9ybXNUb1NjaGVtYSA9ICh2YWx1ZSwgc2NoZW1hKSA9PiB7XG4gIHJldHVybiBzY2hlbWEuc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzO1xufTtcbmNvbnN0IGlzQ0RFUmVzcG9uc2VFcnJvciA9IChyZXNwb25zZSkgPT4ge1xuICByZXR1cm4gQ0RFUmVzcG9uc2VFcnJvci5zYWZlUGFyc2UocmVzcG9uc2UpLnN1Y2Nlc3M7XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRQcmV2aWV3ID0gYXN5bmMgKGNkZUNvbm4sIHJlcXVlc3QpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByZXF1ZXN0IH0sIFByZXZpZXdDaGVja291dFJlc3BvbnNlKTtcbn07XG5jb25zdCBnZXRQcmVmaWxsID0gYXN5bmMgKGNkZUNvbm4pID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBQYXltZW50Rm9ybVByZWZpbGwpO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwidjJfc3RhcnRfcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSxcbiAgICBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UsXG4gICAgXCJzdGFydF9wYXltZW50X2Zsb3dcIlxuICApO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQgfSxcbiAgICBTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSxcbiAgICBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIlxuICApO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUiA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHRyYWNrKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCB7XG4gICAgLi4ucGF5bG9hZFxuICB9KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZCB9LCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICB0cmFjayhcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJfcmVzdWx0XCIsIHtcbiAgICAuLi5yZXN1bHRcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuY29uc3QgY29uZmlybVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImNvbmZpcm1fcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSxcbiAgICBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSxcbiAgICBcImNvbmZpcm1fcGF5bWVudF9mbG93XCJcbiAgKTtcbn07XG5jb25zdCBmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkIH0sXG4gICAgU2V0dXBDaGVja291dFJlc3BvbnNlLFxuICAgIFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIlxuICApO1xufTtcbmNvbnN0IGNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkIH0sXG4gICAgQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSxcbiAgICBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiXG4gICk7XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRWYWx1ZSA9IGFzeW5jIChjZGVDb25uLCBzZWN1cmVUb2tlbiwgcHJvbW9Db2RlKSA9PiB7XG4gIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlldyhjZGVDb25uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBzZWN1cmVUb2tlbixcbiAgICBwcm9tb3Rpb25fY29kZTogcHJvbW9Db2RlXG4gIH0pO1xuICBjb25zdCBjdXJyZW5jaWVzID0gbmV3IFNldChjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LmN1cnJlbmN5KSk7XG4gIGlmIChjdXJyZW5jaWVzLnNpemUgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHtjdXJyZW5jaWVzLnNpemV9YCk7XG4gIH1cbiAgY29uc3QgY3VycmVuY3kgPSBjdXJyZW5jaWVzLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiO1xuICBjb25zdCBhbW91bnRBdG9tID0gc3VtKGNoZWNrb3V0UHJldmlldy5wcmV2aWV3Lmludm9pY2VzLm1hcCgoaW52KSA9PiBpbnYucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3ksXG4gICAgYW1vdW50QXRvbVxuICB9O1xufTtcbmNvbnN0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudCA9IGFzeW5jIChjZGVDb25uLCBzZWN1cmVUb2tlbiwgaXNTZXR1cE1vZGUsIHByb21vQ29kZSkgPT4ge1xuICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB9IGVsc2Uge1xuICAgIHByb21vQ29kZSA9ICFwcm9tb0NvZGUgPyB2b2lkIDAgOiBwcm9tb0NvZGU7XG4gICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJwcm9tb0NvZGVcIikgJiYgIXByb21vQ29kZSkge1xuICAgICAgcHJvbW9Db2RlID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInByb21vQ29kZVwiKTtcbiAgICB9XG4gICAgY29uc3QgY2hlY2tvdXRQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRWYWx1ZShjZGVDb25uLCBzZWN1cmVUb2tlbiwgcHJvbW9Db2RlKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBjaGVja291dFByZXZpZXcuYW1vdW50QXRvbSwgY3VycmVuY3k6IGNoZWNrb3V0UHJldmlldy5jdXJyZW5jeSB9O1xuICB9XG59O1xuY29uc3QgdG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyA9IGFzeW5jIChhbGxDZGVDb25uZWN0aW9ucywgcGF5bG9hZCkgPT4ge1xuICBpZiAoYWxsQ2RlQ29ubmVjdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgfVxuICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKGFsbENkZUNvbm5lY3Rpb25zLnZhbHVlcygpKS5tYXAoXG4gICAgICAoY2RlQ29ubikgPT4gcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZCB9LCBUb2tlbml6ZUNhcmRSZXNwb25zZSlcbiAgICApXG4gICk7XG4gIHJldHVybiByZXNwb25zZXM7XG59O1xuY29uc3QgY2hlY2tvdXRDYXJkRWxlbWVudHMgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkIH0sXG4gICAgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UsXG4gICAgXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCJcbiAgKTtcbn07XG5jb25zdCBzZXR1cENoZWNrb3V0ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkIH0sIFNldHVwQ2hlY2tvdXRSZXNwb25zZSwgXCJzZXR1cF9jaGVja291dFwiKTtcbn07XG5jb25zdCBwZXJmb3JtQ2hlY2tvdXQgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQgfSwgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UsIFwicGVyZm9ybV9jaGVja291dFwiKTtcbn07XG5jb25zdCBDREVfUE9MTElOR19JTlRFUlZBTCA9IDFlMztcbmNvbnN0IHBpbmdDZGVGb3JTdGF0dXMgPSBhc3luYyAoaWZyYW1lLCBjaGlsZE9yaWdpbiwgdHlwZSwgcmVzcG9uc2VNb2RlbCkgPT4ge1xuICBjb25zb2xlLmxvZyhjaGlsZE9yaWdpbik7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lLFxuICAgIGRlYnVnOiB0cnVlLFxuICAgIHRpbWVvdXQ6IENERV9QT0xMSU5HX0lOVEVSVkFMLFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KTtcbiAgY29uc3QgY29ubmVjdGlvbk9iaiA9IGF3YWl0IGNvbm5lY3Rpb24ucHJvbWlzZTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcXVlcnlDREUoY29ubmVjdGlvbk9iaiwgeyB0eXBlIH0sIHJlc3BvbnNlTW9kZWwpO1xuICBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuY29uc3QgcHJlcGFyZVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSxcbiAgICBQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSxcbiAgICBcInByZXBhcmVfcGF5bWVudF9mbG93XCJcbiAgKTtcbn07XG5jb25zdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUgPSBhc3luYyAoY2RlQ29ubiwgZXJyb3JNZXNzYWdlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHsgbWVzc2FnZTogZXJyb3JNZXNzYWdlIH07XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBxdWVyeUNERShcbiAgICAgIGNkZUNvbm4sXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQgfSxcbiAgICAgIENoZWNrb3V0U3RhbmRhcmRFcnJvclJlc3BvbnNlXG4gICAgKTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZXJyb3JfY29kZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBnZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGU6XCIsIGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgIHJldHVybiBcIlBBWU1FTlRfRkFJTEVEX0dFTkVSSUNcIjtcbiAgfVxufTtcbmNvbnN0IHNldFVzZXJEZXZpY2VUb2tlbiA9IGFzeW5jIChjZGVDb25uLCBkZXZpY2VUb2tlbikgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwic2V0X3VzZXJfZGV2aWNlX3Rva2VuXCIsIHBheWxvYWQ6IHsgZGV2aWNlX3Rva2VuOiBkZXZpY2VUb2tlbiB9IH0sXG4gICAgU2V0VXNlckRldmljZVRva2VuUmVzcG9uc2VcbiAgKTtcbn07XG5cbmNvbnN0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QgPSBhc3luYyAob2JqKSA9PiB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8ICFvYmopIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwaW5nID0geyB0eXBlOiBcInBpbmdcIiB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9iai5zZW5kKHBpbmcpO1xuICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpgLCBlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5jb25zdCBpc1Jlc3VsdFZhbGlkID0gKG9iaiwgaXNWYWxpZCkgPT4ge1xuICByZXR1cm4gISFvYmogJiYgaXNWYWxpZDtcbn07XG5cbmNvbnN0IEZSQU1FX0JBU0VfVVJMID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuXG4vLyBUaGVzZSB2YWx1ZXMgc2hvdWxkIE5FVkVSIGNoYW5nZS4gVGhlIHZhbHVlcyBhcmUgcHJlY2lzZWx5IGZvclxuLy8gZ2VuZXJhdGluZyBVTElEcy5cbmNvbnN0IEVOQ09ESU5HID0gXCIwMTIzNDU2Nzg5QUJDREVGR0hKS01OUFFSU1RWV1hZWlwiOyAvLyBDcm9ja2ZvcmQncyBCYXNlMzJcbmNvbnN0IEVOQ09ESU5HX0xFTiA9IDMyOyAvLyBmcm9tIEVOQ09ESU5HLmxlbmd0aDtcbmNvbnN0IFJBTkRPTV9MRU4gPSAxNjtcbmNvbnN0IFRJTUVfTEVOID0gMTA7XG5jb25zdCBUSU1FX01BWCA9IDI4MTQ3NDk3NjcxMDY1NTsgLy8gZnJvbSBNYXRoLnBvdygyLCA0OCkgLSAxO1xuXG52YXIgVUxJREVycm9yQ29kZTtcbihmdW5jdGlvbiAoVUxJREVycm9yQ29kZSkge1xuICAgIFVMSURFcnJvckNvZGVbXCJCYXNlMzJJbmNvcnJlY3RFbmNvZGluZ1wiXSA9IFwiQjMyX0VOQ19JTlZBTElEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkRlY29kZVRpbWVJbnZhbGlkQ2hhcmFjdGVyXCJdID0gXCJERUNfVElNRV9DSEFSXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkRlY29kZVRpbWVWYWx1ZU1hbGZvcm1lZFwiXSA9IFwiREVDX1RJTUVfTUFMRk9STUVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkVuY29kZVRpbWVOZWdhdGl2ZVwiXSA9IFwiRU5DX1RJTUVfTkVHXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkVuY29kZVRpbWVTaXplRXhjZWVkZWRcIl0gPSBcIkVOQ19USU1FX1NJWkVfRVhDRUVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZFwiXSA9IFwiRU5DX1RJTUVfTUFMRk9STUVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIlBSTkdEZXRlY3RGYWlsdXJlXCJdID0gXCJQUk5HX0RFVEVDVFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJVTElESW52YWxpZFwiXSA9IFwiVUxJRF9JTlZBTElEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIlVuZXhwZWN0ZWRcIl0gPSBcIlVORVhQRUNURURcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiVVVJREludmFsaWRcIl0gPSBcIlVVSURfSU5WQUxJRFwiO1xufSkoVUxJREVycm9yQ29kZSB8fCAoVUxJREVycm9yQ29kZSA9IHt9KSk7XG5jbGFzcyBVTElERXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoZXJyb3JDb2RlLCBtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKGAke21lc3NhZ2V9ICgke2Vycm9yQ29kZX0pYCk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiVUxJREVycm9yXCI7XG4gICAgICAgIHRoaXMuY29kZSA9IGVycm9yQ29kZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJhbmRvbUNoYXIocHJuZykge1xuICAgIC8vIEN1cnJlbnRseSBQUk5HcyBnZW5lcmF0ZSBmcmFjdGlvbnMgZnJvbSAwIHRvIF9sZXNzIHRoYW5fIDEsIHNvIG5vIFwiJVwiIGlzIG5lY2Vzc2FyeS5cbiAgICAvLyBIb3dldmVyLCBqdXN0IGluIGNhc2UgYSBmdXR1cmUgUFJORyBjYW4gZ2VuZXJhdGUgMSxcbiAgICAvLyB3ZSBhcmUgYXBwbHlpbmcgXCIlIEVOQ09ESU5HIExFTlwiIHRvIHdyYXAgYmFjayB0byB0aGUgZmlyc3QgY2hhcmFjdGVyXG4gICAgY29uc3QgcmFuZG9tUG9zaXRpb24gPSBNYXRoLmZsb29yKHBybmcoKSAqIEVOQ09ESU5HX0xFTikgJSBFTkNPRElOR19MRU47XG4gICAgcmV0dXJuIEVOQ09ESU5HLmNoYXJBdChyYW5kb21Qb3NpdGlvbik7XG59XG4vKipcbiAqIERldGVjdCB0aGUgYmVzdCBQUk5HIChwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IpXG4gKiBAcGFyYW0gcm9vdCBUaGUgcm9vdCB0byBjaGVjayBmcm9tIChnbG9iYWwvd2luZG93KVxuICogQHJldHVybnMgVGhlIFBSTkcgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0UFJORyhyb290KSB7XG4gICAgY29uc3Qgcm9vdExvb2t1cCA9IGRldGVjdFJvb3QoKTtcbiAgICBjb25zdCBnbG9iYWxDcnlwdG8gPSAocm9vdExvb2t1cCAmJiAocm9vdExvb2t1cC5jcnlwdG8gfHwgcm9vdExvb2t1cC5tc0NyeXB0bykpIHx8XG4gICAgICAgIChudWxsKTtcbiAgICBpZiAodHlwZW9mIGdsb2JhbENyeXB0bz8uZ2V0UmFuZG9tVmFsdWVzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDEpO1xuICAgICAgICAgICAgZ2xvYmFsQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhidWZmZXIpO1xuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclswXSAvIDB4ZmY7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBnbG9iYWxDcnlwdG8/LnJhbmRvbUJ5dGVzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IGdsb2JhbENyeXB0by5yYW5kb21CeXRlcygxKS5yZWFkVUludDgoKSAvIDB4ZmY7XG4gICAgfVxuICAgIGVsc2UgO1xuICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5QUk5HRGV0ZWN0RmFpbHVyZSwgXCJGYWlsZWQgdG8gZmluZCBhIHJlbGlhYmxlIFBSTkdcIik7XG59XG5mdW5jdGlvbiBkZXRlY3RSb290KCkge1xuICAgIGlmIChpbldlYldvcmtlcigpKVxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gd2luZG93O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gZ2xvYmFsO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbFRoaXM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZW5jb2RlUmFuZG9tKGxlbiwgcHJuZykge1xuICAgIGxldCBzdHIgPSBcIlwiO1xuICAgIGZvciAoOyBsZW4gPiAwOyBsZW4tLSkge1xuICAgICAgICBzdHIgPSByYW5kb21DaGFyKHBybmcpICsgc3RyO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuLyoqXG4gKiBFbmNvZGUgdGhlIHRpbWUgcG9ydGlvbiBvZiBhIFVMSURcbiAqIEBwYXJhbSBub3cgVGhlIGN1cnJlbnQgdGltZXN0YW1wXG4gKiBAcGFyYW0gbGVuIExlbmd0aCB0byBnZW5lcmF0ZVxuICogQHJldHVybnMgVGhlIGVuY29kZWQgdGltZVxuICovXG5mdW5jdGlvbiBlbmNvZGVUaW1lKG5vdywgbGVuID0gVElNRV9MRU4pIHtcbiAgICBpZiAoaXNOYU4obm93KSkge1xuICAgICAgICB0aHJvdyBuZXcgVUxJREVycm9yKFVMSURFcnJvckNvZGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkLCBgVGltZSBtdXN0IGJlIGEgbnVtYmVyOiAke25vd31gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm93ID4gVElNRV9NQVgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVTaXplRXhjZWVkZWQsIGBDYW5ub3QgZW5jb2RlIGEgdGltZSBsYXJnZXIgdGhhbiAke1RJTUVfTUFYfTogJHtub3d9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vdyA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVOZWdhdGl2ZSwgYFRpbWUgbXVzdCBiZSBwb3NpdGl2ZTogJHtub3d9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKE51bWJlci5pc0ludGVnZXIobm93KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhbiBpbnRlZ2VyOiAke25vd31gKTtcbiAgICB9XG4gICAgbGV0IG1vZCwgc3RyID0gXCJcIjtcbiAgICBmb3IgKGxldCBjdXJyZW50TGVuID0gbGVuOyBjdXJyZW50TGVuID4gMDsgY3VycmVudExlbi0tKSB7XG4gICAgICAgIG1vZCA9IG5vdyAlIEVOQ09ESU5HX0xFTjtcbiAgICAgICAgc3RyID0gRU5DT0RJTkcuY2hhckF0KG1vZCkgKyBzdHI7XG4gICAgICAgIG5vdyA9IChub3cgLSBtb2QpIC8gRU5DT0RJTkdfTEVOO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuZnVuY3Rpb24gaW5XZWJXb3JrZXIoKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIFVMSURcbiAqIEBwYXJhbSBzZWVkVGltZSBPcHRpb25hbCB0aW1lIHNlZWRcbiAqIEBwYXJhbSBwcm5nIE9wdGlvbmFsIFBSTkcgZnVuY3Rpb25cbiAqIEByZXR1cm5zIEEgVUxJRCBzdHJpbmdcbiAqIEBleGFtcGxlXG4gKiAgdWxpZCgpOyAvLyBcIjAxSE5aWEQwN001Q0VONVhBNjZFTVpTUlpXXCJcbiAqL1xuZnVuY3Rpb24gdWxpZChzZWVkVGltZSwgcHJuZykge1xuICAgIGNvbnN0IGN1cnJlbnRQUk5HID0gZGV0ZWN0UFJORygpO1xuICAgIGNvbnN0IHNlZWQgPSBEYXRlLm5vdygpIDtcbiAgICByZXR1cm4gZW5jb2RlVGltZShzZWVkLCBUSU1FX0xFTikgKyBlbmNvZGVSYW5kb20oUkFORE9NX0xFTiwgY3VycmVudFBSTkcpO1xufVxuXG5jb25zdCBDT09LSUVfTkFNRSA9IFwib3BfYW5hbHl0aWNzX2RldmljZV90b2tlblwiO1xuY29uc3QgZ2V0RGV2aWNlVG9rZW4gPSAoKSA9PiB7XG4gIGNvbnN0IGV4aXN0aW5nQ29va2llID0gZG9jdW1lbnQuY29va2llLnNwbGl0KFwiO1wiKS5maW5kKChjb29raWUpID0+IGNvb2tpZS5pbmNsdWRlcyhDT09LSUVfTkFNRSkpO1xuICBpZiAoZXhpc3RpbmdDb29raWUpIHtcbiAgICByZXR1cm4gZXhpc3RpbmdDb29raWUuc3BsaXQoXCI9XCIpWzFdO1xuICB9XG4gIGNvbnN0IHRva2VuID0gdWxpZCgpO1xuICBzZXREZXZpY2VUb2tlbih0b2tlbik7XG4gIHJldHVybiB0b2tlbjtcbn07XG5jb25zdCBzZXREZXZpY2VUb2tlbiA9ICh0b2tlbikgPT4ge1xuICBjb25zdCBvbmVZZWFyRnJvbU5vdyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpO1xuICBvbmVZZWFyRnJvbU5vdy5zZXRGdWxsWWVhcihvbmVZZWFyRnJvbU5vdy5nZXRGdWxsWWVhcigpICsgMSk7XG4gIGRvY3VtZW50LmNvb2tpZSA9IGAke0NPT0tJRV9OQU1FfT0ke3Rva2VufTsgcGF0aD0vOyBleHBpcmVzPSR7b25lWWVhckZyb21Ob3cudG9VVENTdHJpbmcoKX1gO1xufTtcblxuY29uc3QgZXh0cmFjdElzc3Vlc1BlckZpZWxkID0gKGVycm9yKSA9PiB7XG4gIGNvbnN0IGlzc3Vlc1BlckZpZWxkID0ge307XG4gIE9iamVjdC5lbnRyaWVzKGVycm9yKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gRmllbGROYW1lRW51bS5wYXJzZShrZXkpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5fZXJyb3JzKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWUuX2Vycm9ycztcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNzdWVzUGVyRmllbGQ7XG59O1xuXG5jb25zdCBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0gPSAoZm9ybURpdiwgaW5pdGlhbERpY3QpID0+IHtcbiAgY29uc3QgaW5jbHVkZWRJbnB1dHMgPSBBcnJheS5mcm9tKGZvcm1EaXYucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKTtcbiAgY29uc3QgZXh0cmFEYXRhID0gaW5jbHVkZWRJbnB1dHMucmVkdWNlKChhY2MsIGlucHV0KSA9PiB7XG4gICAgY29uc3Qga2V5ID0gaW5wdXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICAgIGlmICgha2V5KSByZXR1cm4gYWNjO1xuICAgIGNvbnN0IHZhbHVlID0gaW5wdXQudHlwZSA9PT0gXCJjaGVja2JveFwiID8gaW5wdXQuY2hlY2tlZCA6IGlucHV0LnZhbHVlO1xuICAgIHJldHVybiB7IC4uLmFjYywgW2tleV06IHZhbHVlIH07XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGV4dHJhRGF0YTtcbn07XG5jb25zdCBwYXJzZUV2ZW50UGF5bG9hZCA9IChldmVudERhdGEpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRWxlbWVudEV2ZW50LnBhcnNlKGV2ZW50RGF0YSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgZXZlbnQgcGF5bG9hZDpcIiwgZXZlbnREYXRhLCBlcnJvcik7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmNvbnN0IGdlbmVyYXRlQW5vbnltb3VzVmFsdWVzID0gKCkgPT4ge1xuICBjb25zdCBpZCA9IHY0KCkuc3BsaXQoXCItXCIpWzBdO1xuICByZXR1cm4ge1xuICAgIGZpcnN0TmFtZTogYHh4XyR7aWR9YCxcbiAgICBsYXN0TmFtZTogYHh4XyR7aWR9YCxcbiAgICBlbWFpbDogYHh4XyR7aWR9QGVtYWlsLmNvbWAsXG4gICAgemlwQ29kZTogYHh4XyR7aWR9YCxcbiAgICBjb3VudHJ5OiBgVVNgXG4gIH07XG59O1xuY29uc3QgZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMgPSAoZmllbGRzKSA9PiB7XG4gIHJldHVybiB7XG4gICAgbGluZTE6IGZpZWxkc1tGaWVsZE5hbWUuTElORTFdLFxuICAgIGxpbmUyOiBmaWVsZHNbRmllbGROYW1lLkxJTkUyXSxcbiAgICBsaW5lMzogZmllbGRzW0ZpZWxkTmFtZS5MSU5FM10sXG4gICAgY2l0eTogZmllbGRzW0ZpZWxkTmFtZS5DSVRZXSxcbiAgICBzdGF0ZTogZmllbGRzW0ZpZWxkTmFtZS5TVEFURV0sXG4gICAgY291bnRyeTogZmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICB6aXBfY29kZTogZmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV1cbiAgfTtcbn07XG5jb25zdCBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMgPSAoZmllbGRzLCBjaGVja291dF9zZXR0aW5ncykgPT4ge1xuICBpZiAoIWNoZWNrb3V0X3NldHRpbmdzLnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzKSByZXR1cm47XG4gIHJldHVybiB7XG4gICAgbGluZTE6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTFdLFxuICAgIGxpbmUyOiBmaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUyXSxcbiAgICBsaW5lMzogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FM10sXG4gICAgY2l0eTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSxcbiAgICBzdGF0ZTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0sXG4gICAgY291bnRyeTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSxcbiAgICB6aXBfY29kZTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV1cbiAgfTtcbn07XG5jb25zdCBnZXRGdWxsTmFtZSA9IChmaXJzdE5hbWUsIGxhc3ROYW1lKSA9PiB7XG4gIHJldHVybiBbZmlyc3ROYW1lLCBsYXN0TmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xufTtcblxuY29uc3Qgc3R5bGVzID0gKHsgd2lkdGgsIGhlaWdodCB9KSA9PiBgXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cblxuLm92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogMjE0NzQ4MzY0OCAhaW1wb3J0YW50O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xufVxuLmNvbnRhaW5lciB7XG4gIG1heC13aWR0aDogJHt3aWR0aCA/PyBcIjUwMHB4XCJ9O1xuICBtYXgtaGVpZ2h0OiAke2hlaWdodCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2Utb3V0O1xufVxuLmZyYW1lLCAjYWR5ZW4tY29udGFpbmVyLCAjYWR5ZW4tY29udGFpbmVyID4gKiB7XG4gIG1heC13aWR0aDogJHt3aWR0aCA/PyBcIjUwMHB4XCJ9O1xuICBtYXgtaGVpZ2h0OiAke2hlaWdodCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBib3JkZXI6IG5vbmU7XG59XG4uY2FuY2VsLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0b3A6IC0xLjVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIHJpZ2h0OiAwO1xufVxuYDtcbmNvbnN0IGJhbmtTZWxlY3RvclN0eWxlcyA9ICh7IHdpZHRoLCBoZWlnaHQgfSkgPT4gYFxuQGtleWZyYW1lcyBmYWRlSW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG5cbi5vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6IDIxNDc0ODM2NDggIWltcG9ydGFudDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbi5jb250YWluZXIge1xuICBtYXgtd2lkdGg6ICR7d2lkdGggPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHtoZWlnaHQgPz8gXCI2MDBweFwifTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGFuaW1hdGlvbjogZmFkZUluIDAuM3MgZWFzZS1vdXQ7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgYm94LXNoYWRvdzogMCAxMHB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuLmJhbmstc2VsZWN0b3ItY29udGVudCB7XG4gIHBhZGRpbmc6IDI0cHg7XG4gIG1heC1oZWlnaHQ6IGNhbGMoJHtoZWlnaHQgPz8gXCI2MDBweFwifSAtIDQ4cHgpO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuLmJhbmstc2VsZWN0b3ItaGVhZGVyIHtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBmb250LXdlaWdodDogNjAwO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBjb2xvcjogIzFhMWExYTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmJhbmstbGlzdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMTJweDtcbn1cbi5iYW5rLWl0ZW0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiAxNnB4O1xuICBib3JkZXI6IDJweCBzb2xpZCAjZTVlNWU1O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbn1cbi5iYW5rLWl0ZW06aG92ZXIge1xuICBib3JkZXItY29sb3I6ICMzYjgyZjY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGZhZmM7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbiAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG59XG4uYmFuay1pdGVtOmFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cbi5iYW5rLWxvZ28ge1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIG9iamVjdC1maXQ6IGNvbnRhaW47XG4gIG1hcmdpbi1yaWdodDogMTZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U5ZWNlZjtcbn1cbi5iYW5rLWxvZ28tcGxhY2Vob2xkZXIge1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tcmlnaHQ6IDE2cHg7XG4gIGNvbG9yOiAjNmM3NTdkO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLmJhbmstaW5mbyB7XG4gIGZsZXg6IDE7XG59XG4uYmFuay1kaXNwbGF5LW5hbWUge1xuICBmb250LXNpemU6IDFyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiAjMWExYTFhO1xuICBtYXJnaW4tYm90dG9tOiAycHg7XG59XG4uYmFuay1uYW1lIHtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgY29sb3I6ICM2Yzc1N2Q7XG59XG4uY2FuY2VsLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0b3A6IC0xLjVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIHJpZ2h0OiAwO1xufVxuYDtcbmNvbnN0IGNyZWF0ZUFuZE9wZW5GcmFtZSA9ICh1cmwsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyBpZCwgdGl0bGUsIHdpZHRoLCBoZWlnaHQsIG5hbWUgfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtzdHlsZXMoeyB3aWR0aCwgaGVpZ2h0IH0pfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke3VybH1cIiBjbGFzcz1cImZyYW1lXCIgaWQ9XCIke2lkID8/IFwidGhyZWUtZHMtaWZyYW1lXCJ9XCIgdGl0bGU9XCIke3RpdGxlID8/IFwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwifVwiIGFsbG93PVwicGF5bWVudFwiIG5hbWU9XCIke25hbWUgPz8gXCJ0aHJlZS1kcy1pZnJhbWVcIn1cIj48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICBjb25zdCBpZnJhbWUgPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpO1xuICBjb25zdCBjYW5jZWxCdXR0b24gPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChob3N0KTtcbiAgcmV0dXJuIHsgaG9zdCwgaWZyYW1lLCBjYW5jZWxCdXR0b24gfTtcbn07XG5jb25zdCBjcmVhdGVBbmRPcGVuQmFua1NlbGVjdG9yID0gKGJhbmtzLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdGl0bGUgfSA9IG9wdGlvbnMgPz8ge307XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gICAgY29uc3QgYmFua0xpc3RIdG1sID0gYmFua3MubWFwKChiYW5rLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbG9nb0h0bWwgPSBiYW5rLnJlc291cmNlcy5sb2dvX3VybCA/IGA8aW1nIHNyYz1cIiR7YmFuay5yZXNvdXJjZXMubG9nb191cmx9XCIgYWx0PVwiJHtiYW5rLmRpc3BsYXlfbmFtZX1cIiBjbGFzcz1cImJhbmstbG9nb1wiIC8+YCA6IGA8ZGl2IGNsYXNzPVwiYmFuay1sb2dvLXBsYWNlaG9sZGVyXCI+JHtiYW5rLmRpc3BsYXlfbmFtZS5zdWJzdHJpbmcoMCwgMikudG9VcHBlckNhc2UoKX08L2Rpdj5gO1xuICAgICAgcmV0dXJuIGBcbiAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstaXRlbVwiIGRhdGEtYmFuay1pbmRleD1cIiR7aW5kZXh9XCI+XG4gICAgICAgICAgJHtsb2dvSHRtbH1cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1pbmZvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1kaXNwbGF5LW5hbWVcIj4ke2JhbmsuZGlzcGxheV9uYW1lfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstbmFtZVwiPiR7YmFuay5iYW5rX25hbWV9PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGBcbiAgICAgIDxzdHlsZT5cbiAgICAgICAgJHtiYW5rU2VsZWN0b3JTdHlsZXMoeyB3aWR0aCwgaGVpZ2h0IH0pfVxuICAgICAgPC9zdHlsZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLXNlbGVjdG9yLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLXNlbGVjdG9yLWhlYWRlclwiPiR7dGl0bGUgPz8gXCJTZWxlY3QgeW91ciBiYW5rXCJ9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1saXN0XCI+XG4gICAgICAgICAgICAgICR7YmFua0xpc3RIdG1sfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBjb25zdCBzaGFkb3dSb290ID0gaG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgICBzaGFkb3dSb290LmFwcGVuZENoaWxkKHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpKTtcbiAgICBjb25zdCBjYW5jZWxCdXR0b24gPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgICBjb25zdCBiYW5rSXRlbXMgPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYmFuay1pdGVtXCIpO1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGhvc3QpO1xuICAgIH07XG4gICAgY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICByZWplY3QobmV3IEVycm9yKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpKTtcbiAgICB9KTtcbiAgICBiYW5rSXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZXNvbHZlKGJhbmtzW2luZGV4XSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpO1xuICB9KTtcbn07XG5jb25zdCBjcmVhdGVBbmRPcGVuTWljcm9EZXBvc2l0Rm9ybSA9IChwYXltZW50TWV0aG9kVHlwZSwgb3B0aW9ucykgPT4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGJhc2VVcmwgfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYGFwcC9kaXJlY3RfZGViaXQvbWljcm9fZGVwb3NpdC8/dHlwZT0ke3BheW1lbnRNZXRob2RUeXBlfWAsIGJhc2VVcmwpLnRvU3RyaW5nKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBjcmVhdGVBbmRPcGVuRnJhbWUodXJsLCB7IHdpZHRoLCBoZWlnaHQsIHRpdGxlOiBcIk1pY3JvIERlcG9zaXQgRm9ybVwiIH0pO1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIikpO1xuICAgIH07XG4gICAgY29uc3Qgb25TdWNjZXNzID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiAmJiByZXNwb25zZS5wYXlsb2FkKSB7XG4gICAgICAgIGlmIChcImVycm9yXCIgaW4gcmVzcG9uc2UucGF5bG9hZCkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IocmVzcG9uc2UucGF5bG9hZC5lcnJvcikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UucGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gZmFpbGVkXCIpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2FuY2VsKTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoXG4gICAgICBlbGVtZW50cy5pZnJhbWUsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBuZXcgVVJMKGJhc2VVcmwpLm9yaWdpbixcbiAgICAgIFwibWljcm8tZGVwb3NpdC1zdGF0dXNcIixcbiAgICAgIE1pY3JvRGVwb3NpdFN0YXR1c1Jlc3BvbnNlXG4gICAgKTtcbiAgICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gICAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgfTtcbiAgICBjb25zdCBvcmlnaW5hbEhhbmRsZUNhbmNlbCA9IGhhbmRsZUNhbmNlbDtcbiAgICBjb25zdCB3cmFwcGVkSGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgY2xlYW51cEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgICBvcmlnaW5hbEhhbmRsZUNhbmNlbCgpO1xuICAgIH07XG4gICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgd3JhcHBlZEhhbmRsZUNhbmNlbCk7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gc3RhcnRQb2xsaW5nKGlmcmFtZSwgb25TdWNjZXNzLCBjaGlsZE9yaWdpbiwgdHlwZSwgcmVzcG9uc2VNb2RlbCkge1xuICBjb25zdCBoYW5kbGVQb2xsaW5nID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBwaW5nQ2RlRm9yU3RhdHVzKGlmcmFtZSwgY2hpbGRPcmlnaW4sIHR5cGUsIHJlc3BvbnNlTW9kZWwpO1xuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgICAgIG9uU3VjY2VzcyhzdGF0dXMpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgfVxuICB9O1xuICBoYW5kbGVQb2xsaW5nKCk7XG4gIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHNldEludGVydmFsKGhhbmRsZVBvbGxpbmcsIENERV9QT0xMSU5HX0lOVEVSVkFMKTtcbiAgcmV0dXJuIHBvbGxpbmdJbnRlcnZhbDtcbn1cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50cyh7XG4gIGVsZW1lbnRzLFxuICBwb2xsaW5nSW50ZXJ2YWwsXG4gIHJlc29sdmVcbn0pIHtcbiAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZ0ludGVydmFsKTtcbiAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICBlbGVtZW50cy5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9ICgpID0+IHtcbiAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIH07XG4gIHJldHVybiBjbGVhbnVwRXZlbnRMaXN0ZW5lcnM7XG59XG5hc3luYyBmdW5jdGlvbiBzdGFydDNkc1ZlcmlmaWNhdGlvbihwYXJhbXMpIHtcbiAgY29uc3QgeyB1cmwsIGJhc2VVcmwsIGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LCBmcmFtZVRpdGxlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGVsZW1lbnRzID0gY3JlYXRlQW5kT3BlbkZyYW1lKHVybCwgeyB3aWR0aDogZnJhbWVXaWR0aCwgaGVpZ2h0OiBmcmFtZUhlaWdodCwgdGl0bGU6IGZyYW1lVGl0bGUgfSk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChzdGF0dXMpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgICAgfSwgMWUzKTtcbiAgICAgIHJlc29sdmUoc3RhdHVzKTtcbiAgICAgIGNsZWFudXBFdmVudExpc3RlbmVycz8uKCk7XG4gICAgfTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoXG4gICAgICBlbGVtZW50cy5pZnJhbWUsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBuZXcgVVJMKGJhc2VVcmwpLm9yaWdpbixcbiAgICAgIFwicGluZy0zZHMtc3RhdHVzXCIsXG4gICAgICBQaW5nM0RTU3RhdHVzUmVzcG9uc2VcbiAgICApO1xuICAgIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9IGhhbmRsZUV2ZW50cyh7XG4gICAgICBlbGVtZW50cyxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbCxcbiAgICAgIHJlc29sdmVcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24ocGFyYW1zKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyAhPT0gVGhyZWVEU1N0YXR1cy5TVUNDRVNTKSB7XG4gICAgYXNzZXJ0TmV2ZXIocmVzdWx0LnN0YXR1cyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBocmVmOiByZXN1bHQuaHJlZlxuICB9O1xufTtcbmNvbnN0IG9wZW5Qb3B1cFdpbmRvdyA9IChwb3B1cE5hbWUsIHVybCwgb3B0aW9ucykgPT4ge1xuICBjb25zdCB0YXJnZXQgPSBvcHRpb25zID8gYG9wZW5wYXktJHtwb3B1cE5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV0rL2csIFwiLVwiKX1gIDogXCJfYmxhbmtcIjtcbiAgY29uc3QgZmVhdHVyZXMgPSBvcHRpb25zID8gW1xuICAgIFwicG9wdXA9eWVzXCIsXG4gICAgYHdpZHRoPSR7b3B0aW9ucy53aWR0aH1gLFxuICAgIGBoZWlnaHQ9JHtvcHRpb25zLmhlaWdodH1gLFxuICAgIGBsZWZ0PSR7TWF0aC5yb3VuZCh3aW5kb3cuc2NyZWVuWCArICh3aW5kb3cub3V0ZXJXaWR0aCAtIG9wdGlvbnMud2lkdGgpIC8gMil9YCxcbiAgICBgdG9wPSR7TWF0aC5yb3VuZCh3aW5kb3cuc2NyZWVuWSArICh3aW5kb3cub3V0ZXJIZWlnaHQgLSBvcHRpb25zLmhlaWdodCkgLyAyKX1gLFxuICAgIFwicmVzaXphYmxlPXllc1wiLFxuICAgIFwic2Nyb2xsYmFycz15ZXNcIlxuICBdLmpvaW4oXCIsXCIpIDogdm9pZCAwO1xuICBjb25zdCBwb3B1cFdpbmRvdyA9IHdpbmRvdy5vcGVuKHVybCwgdGFyZ2V0LCBmZWF0dXJlcyk7XG4gIGlmICghcG9wdXBXaW5kb3cpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cG9wdXBOYW1lfSBwb3B1cCB3aW5kb3cgYmxvY2tlZC4gUGxlYXNlIGFsbG93IHBvcHVwcyBmb3IgdGhpcyBzaXRlLmApO1xuICB9XG4gIHBvcHVwV2luZG93LmZvY3VzKCk7XG4gIHJldHVybiBwb3B1cFdpbmRvdztcbn07XG5jb25zdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0ID0gYXN5bmMgKHBvcHVwTmFtZSwgY2RlQ29ubiwgZXhwZWN0ZWRWZXJpZnlUb2tlbiwgdXJsKSA9PiB7XG4gIGNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9wdXAtdmVyaWZ5XCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHBvcHVwV2luZG93ID0gb3BlblBvcHVwV2luZG93KHBvcHVwTmFtZSwgdXJsKTtcbiAgICBjb25zdCBwb2xsaW5nID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdmVyaWZ5UmVzdWx0ID0gYXdhaXQgY2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWQoY2RlQ29ubiwgZXhwZWN0ZWRWZXJpZnlUb2tlbik7XG4gICAgICAgIGlmICh2ZXJpZnlSZXN1bHQucHJlc2VudCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZyk7XG4gICAgICAgICAgcG9wdXBXaW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICByZXNvbHZlKHsgaHJlZjogdmVyaWZ5UmVzdWx0LmhyZWYgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocG9wdXBXaW5kb3cuY2xvc2VkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3BvcHVwTmFtZX0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyX18oZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZyk7XG4gICAgICAgIHJlamVjdChnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn07XG5cbmNvbnN0IGRldGVjdExhbmd1YWdlID0gKCkgPT4ge1xuICBjb25zdCBsYW5ndWFnZXMgPSBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXMubGVuZ3RoID8gbmF2aWdhdG9yLmxhbmd1YWdlcyA6IFtuYXZpZ2F0b3IubGFuZ3VhZ2VdO1xuICBsZXQgbGFuZ3VhZ2UgPSBsYW5ndWFnZXM/LlswXTtcbiAgaWYgKGxhbmd1YWdlKSB7XG4gICAgbGFuZ3VhZ2UgPSBsYW5ndWFnZS5zcGxpdChcIi1cIilbMF07XG4gIH1cbiAgcmV0dXJuIGxhbmd1YWdlO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kdywgZXJyX186IGVycl9fJHcgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuY29uc3QgY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEgPSAoe1xuICByZXF1aXJlX3ppcF9jb2RlLFxuICByZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzLFxuICByZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyxcbiAgcGF5bWVudF9tZXRob2QsXG4gIGlzQnVzaW5lc3NQdXJjaGFzZVxufSwgbm9uQ2RlRm9ybUlucHV0cykgPT4ge1xuICBjb25zdCBjb25kaXRpb25hbEZpZWxkcyA9IHt9O1xuICBpZiAocGF5bWVudF9tZXRob2QgPT09IFwiYWNoXCIpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSB6LnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gei5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KTtcbiAgfVxuICBpZiAocmVxdWlyZV96aXBfY29kZSkge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAocmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzcykge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5MSU5FMV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuQ0lUWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU1RBVEVdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkNPVU5UUlldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChyZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcykge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19CVVNJTkVTU19QVVJDSEFTRV0gPz8gaXNCdXNpbmVzc1B1cmNoYXNlKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkJVU0lORVNTX05BTUVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKE9iamVjdC5rZXlzKGNvbmRpdGlvbmFsRmllbGRzKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUmVxdWlyZWRGb3JtRmllbGRzO1xuICB9XG4gIHJldHVybiBSZXF1aXJlZEZvcm1GaWVsZHMuZXh0ZW5kKGNvbmRpdGlvbmFsRmllbGRzKTtcbn07XG5jb25zdCB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHMgPSAobm9uQ2RlRm9ybUlucHV0cywgb25WYWxpZGF0aW9uRXJyb3IsIGRlZmF1bHRGaWVsZFZhbHVlcyA9IHt9KSA9PiB7XG4gIGlmIChkZWZhdWx0RmllbGRWYWx1ZXMpIHtcbiAgICBsb2dfXyR3KGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShkZWZhdWx0RmllbGRWYWx1ZXMpfWApO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0RmllbGRWYWx1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGVmYXVsdEZpZWxkVmFsdWVzW2tleV07XG4gICAgICBpZiAoIW5vbkNkZUZvcm1JbnB1dHNba2V5XSkge1xuICAgICAgICBub25DZGVGb3JtSW5wdXRzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSA9ICEhbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXTtcbiAgaWYgKG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10pIHtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTJdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTJdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUzXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUzXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNJVFldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNUQVRFXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNPVU5UUlldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXTtcbiAgfVxuICBjb25zdCB2YWxpZGF0aW9uU2NoZW1hID0gY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEoZGVmYXVsdEZpZWxkVmFsdWVzLCBub25DZGVGb3JtSW5wdXRzKTtcbiAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGlvblNjaGVtYS5zYWZlUGFyc2Uobm9uQ2RlRm9ybUlucHV0cyk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSByZXN1bHQuZXJyb3IuZm9ybWF0KCk7XG4gICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgY29uc3QgaXNzdWVLZXlzID0gT2JqZWN0LmtleXMoaXNzdWVzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlzc3VlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gaXNzdWVLZXlzW2ldO1xuICAgICAgY29uc3QgZXJyb3JzID0gaXNzdWVzW2ZpZWxkTmFtZV07XG4gICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9ycywgZmllbGROYW1lKTtcbiAgICB9XG4gICAgZXJyX18kdyhcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGlzc3Vlcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQWxtb3N0IHRoZXJlISBKdXN0IGEgZmV3IHRoaW5ncyBoaWdobGlnaHRlZCBhYm92ZSB0byBmaXggYmVmb3JlIHlvdSBjYW4gc3VibWl0LlwiKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LmRhdGE7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyR2LCBlcnJfXzogZXJyX18kdiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcztcbmNvbnN0IHZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyA9ICh0b2tlbml6ZVJlc3VsdHMsIG9uVmFsaWRhdGlvbkVycm9yKSA9PiB7XG4gIGZvciAoY29uc3QgdG9rZW5pemVSZXN1bHQgb2YgdG9rZW5pemVSZXN1bHRzKSB7XG4gICAgaWYgKHRva2VuaXplUmVzdWx0LnN1Y2Nlc3MgPT09IGZhbHNlKSB7XG4gICAgICB0b2tlbml6ZVJlc3VsdC5lcnJvcnMuZm9yRWFjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gQWxsRmllbGROYW1lcy5zYWZlUGFyc2UoZXJyb3IuZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgICAgICAgZXJyX18kdihgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke2Vycm9yLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIGVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBwYXJzZWQuZGF0YTtcbiAgICAgICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9yLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbG9nX18kdihgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkodG9rZW5pemVSZXN1bHQuZXJyb3JzKX1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyB3aGlsZSB0b2tlbml6aW5nIGNhcmRcIik7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCB7IGVycl9fOiBlcnJfXyR1IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vblwiKTtcbmNvbnN0IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtyZXNwb25zZS5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICB9XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiByZXNwb25zZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn07XG5jb25zdCBmaW5kQ3BtTWF0Y2hpbmdUeXBlID0gKGFsbENQTXMsIHpvZE1vZGVsKSA9PiB7XG4gIGNvbnN0IGNwbSA9IGFsbENQTXMuZmluZCgoY3BtMikgPT4gem9kTW9kZWwuc2FmZVBhcnNlKGNwbTIpLnN1Y2Nlc3MpO1xuICBpZiAoIWNwbSkge1xuICAgIGVycl9fJHUoYE5vIENQTXMgZm91bmQgZm9yIG1vZGVsLiBBbGwgbW9kZWxzOmAsIGFsbENQTXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWxgKTtcbiAgfVxuICByZXR1cm4gem9kTW9kZWwucGFyc2UoY3BtKTtcbn07XG5jb25zdCBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtID0gKGZpZWxkcywgY2hlY2tvdXRfc2V0dGluZ3MpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGZpZWxkcy5lbWFpbCxcbiAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBmaWVsZHMubGFzdE5hbWUsXG4gICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGZpZWxkcy5maXJzdE5hbWUsXG4gICAgY3VzdG9tZXJfYnVzaW5lc3NfbmFtZTogZmllbGRzLmJ1c2luZXNzTmFtZSxcbiAgICBjdXN0b21lcl90YXhfaWQ6IGZpZWxkcy50YXhJZCxcbiAgICBjdXN0b21lcl90YXhfaWRfdHlwZTogZmllbGRzLnRheElkVHlwZSxcbiAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMoZmllbGRzKSxcbiAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKGZpZWxkcywgY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpLFxuICAgIG5ld19jdXN0b21lcl9waG9uZTogZmllbGRzLnBob25lXG4gIH07XG59O1xuY29uc3QgcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCA9IGFzeW5jIChhcmdzKSA9PiB7XG4gIGNvbnN0IHsgbG9nX186IGxvZ19fMiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoYXJncy5sb2dQcmVmaXgpO1xuICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhcmdzLmFueUNkZUNvbm5lY3Rpb24pO1xuICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoYXJncy5jb25maXJtUmVzdWx0KTtcbiAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgbG9nX18yKGBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kLi4uYCk7XG4gICAgY29uc3Qgc2V0dXBSZXN1bHQgPSBhd2FpdCBmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZChhcmdzLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHBtX2lkOiBjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZFxuICAgIH0pO1xuICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBzZXR1cFJlc3VsdCB9O1xuICB9IGVsc2Uge1xuICAgIGlmIChhcmdzLnVzZVBheUZpcnN0Rmxvdykge1xuICAgICAgbG9nX18yKGBVc2luZyBwYXktZmlyc3QgZmxvdy4uLmApO1xuICAgICAgaWYgKCFhcmdzLmNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICAgICAgZXJyX18kdShcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGFyZ3MuY29uZmlybVJlc3VsdCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGFyZ3MuY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcGF5bWVudF9pbnB1dDogeyBwcm92aWRlcl90eXBlOiBhcmdzLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlciB9LFxuICAgICAgY3VzdG9tZXJfZW1haWw6IGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBjdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhhcmdzLnJlcXVpcmVkRm9ybUZpZWxkcyksXG4gICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMoYXJncy5yZXF1aXJlZEZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogY3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogYXJncy5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9O1xuICAgIGxvZ19fMihgRG9pbmcgY2hlY2tvdXQuLi5gLCBjaGVja291dFJlcXVlc3QpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcmZvcm1DaGVja291dChhcmdzLmFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgfVxufTtcblxuY29uc3QgUGF5bWVudFByb2Nlc3NvciA9IHouZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCIsIFwiYWR5ZW5cIiwgXCJwYXlwYWxcIiwgXCJwb2NreXRcIiwgXCJsb29wXCJdKTtcbih7XG4gIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZX0pO1xuY29uc3QgbG9hZFNjcmlwdCA9ICh7XG4gIHNjcmlwdElkLFxuICBzcmMsXG4gIGNoZWNrTG9hZGVkRm5cbn0pID0+IHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgc2NyaXB0LnNyYyA9IHNyYztcbiAgICBzY3JpcHQuaWQgPSBzY3JpcHRJZDtcbiAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xuICAgIGNvbnN0IGV4aXN0aW5nU2NyaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2NyaXB0SWQpO1xuICAgIGlmIChjaGVja0xvYWRlZEZuKCkpIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9IGVsc2UgaWYgKGV4aXN0aW5nU2NyaXB0KSB7XG4gICAgICBzY3JpcHQgPSBleGlzdGluZ1NjcmlwdDtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cbiAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwibG9hZFwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBldmVudExpc3RlbmVyQ29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IGV2ZW50TGlzdGVuZXJDb250cm9sbGVyLnNpZ25hbCB9XG4gICAgKTtcbiAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwiZXJyb3JcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgcmVqZWN0KFwiRmFpbGVkIHRvIGxvYWQgdGhlIHNjcmlwdFwiKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIuc2lnbmFsIH1cbiAgICApO1xuICB9KTtcbn07XG5cbmNvbnN0IGdldFBheW1lbnREYXRhUmVxdWVzdCA9ICh7XG4gIGdhdGV3YXksXG4gIGdhdGV3YXlNZXJjaGFudElkLFxuICBtZXJjaGFudE5hbWUsXG4gIG1lcmNoYW50SWQsXG4gIGluaXRpYWxQcmV2aWV3LFxuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICBwcmVmaWxsXG59KSA9PiB7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmFtb3VudEF0b20gPz8gaW5pdGlhbFByZXZpZXc/LmFtb3VudEF0b20gPz8gMDtcbiAgY29uc3QgdG90YWxQcmljZSA9IE1hdGgubWF4KGFtb3VudEF0b20gLyAxMDAsIDApO1xuICBjb25zdCBjdXJyZW5jeUNvZGUgPSAob3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uYW1vdW50Py5jdXJyZW5jeSA/PyBwcmVmaWxsPy5jdXJyZW5jeSA/PyBpbml0aWFsUHJldmlldy5jdXJyZW5jeSkudG9VcHBlckNhc2UoKTtcbiAgY29uc3QgYmFzZVJlcXVlc3QgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogdHJ1ZSxcbiAgICAgICAgICBhbGxvd1ByZXBhaWRDYXJkczogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5LFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6IHRydWUsXG4gICAgc2hpcHBpbmdBZGRyZXNzUmVxdWlyZWQ6IHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IG1lcmNoYW50SWQgPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZVxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlLFxuICAgICAgdG90YWxQcmljZVN0YXR1czogb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8ucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiB0b3RhbFByaWNlLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIGlmICghb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QpIHJldHVybiBiYXNlUmVxdWVzdDtcbiAgaWYgKHR5cGVvZiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4geyAuLi5iYXNlUmVxdWVzdCwgLi4ub3ZlcnJpZGVQYXltZW50UmVxdWVzdC5nb29nbGVQYXlQYXltZW50UmVxdWVzdChiYXNlUmVxdWVzdCkgfTtcbiAgfVxuICByZXR1cm4geyAuLi5iYXNlUmVxdWVzdCwgLi4ub3ZlcnJpZGVQYXltZW50UmVxdWVzdC5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9O1xufTtcbmNvbnN0IGxvYWRHb29nbGVQYXlTY3JpcHQgPSAoKSA9PiB7XG4gIHJldHVybiBsb2FkU2NyaXB0KHtcbiAgICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2dvb2dsZV9wYXlfc2RrXCIsXG4gICAgc3JjOiBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIixcbiAgICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5nb29nbGU/LnBheW1lbnRzPy5hcGlcbiAgfSk7XG59O1xubGV0IHBheW1lbnRzQ2xpZW50ID0gbnVsbDtcbmNvbnN0IGdldEdvb2dsZVBheUVudmlyb25tZW50ID0gYXN5bmMgKGJhc2VVcmwpID0+IHtcbiAgY29uc3QgZW52ID0gYXdhaXQgZ2V0Q3VycmVudEVudihiYXNlVXJsKTtcbiAgcmV0dXJuIGVudiA9PT0gXCJwcm9kXCIgPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiO1xufTtcbmNvbnN0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50ID0gYXN5bmMgKGJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCkgPT4ge1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGF3YWl0IGdldEdvb2dsZVBheUVudmlyb25tZW50KGJhc2VVcmwpO1xuICBpZiAocGF5bWVudHNDbGllbnQgPT09IG51bGwpIHtcbiAgICBwYXltZW50c0NsaWVudCA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgICBlbnZpcm9ubWVudCxcbiAgICAgIG1lcmNoYW50SW5mbzogcGF5bWVudERhdGFSZXF1ZXN0Lm1lcmNoYW50SW5mb1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBwYXltZW50c0NsaWVudDtcbn07XG5jb25zdCBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICBjb25zdCBjb21tb25BY3Rpb24gPSByZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICBpZiAoIWNvbW1vbkFjdGlvbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UoY29tbW9uQWN0aW9uKTtcbn07XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheSA9IChmb3JtSW5wdXRzLCBwYXltZW50RGF0YSkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8uaW5mbz8uYmlsbGluZ0FkZHJlc3M7XG4gIGNvbnN0IHNoaXBwaW5nQWRkcmVzcyA9IHBheW1lbnREYXRhLnNoaXBwaW5nQWRkcmVzcztcbiAgaWYgKGJpbGxpbmdBZGRyZXNzKSB7XG4gICAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5sYXN0TmFtZVBhcnRzXSA9IGJpbGxpbmdBZGRyZXNzLm5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgICBjb25zdCBwYXllckxhc3ROYW1lID0gbGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBwYXltZW50RGF0YS5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MSU5FMV0gPSBpbnB1dHNbRmllbGROYW1lLkxJTkUxXSB8fCBiaWxsaW5nQWRkcmVzcy5hZGRyZXNzMSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTElORTJdID0gaW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl0gfHwgYmlsbGluZ0FkZHJlc3MuYWRkcmVzczIgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxJTkUzXSA9IGlucHV0c1tGaWVsZE5hbWUuTElORTNdIHx8IGJpbGxpbmdBZGRyZXNzLmFkZHJlc3MzIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DSVRZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ0lUWV0gfHwgYmlsbGluZ0FkZHJlc3MubG9jYWxpdHkgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlNUQVRFXSA9IGlucHV0c1tGaWVsZE5hbWUuU1RBVEVdIHx8IGJpbGxpbmdBZGRyZXNzLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IGJpbGxpbmdBZGRyZXNzLmNvdW50cnlDb2RlIHx8IFwiVVNcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IGJpbGxpbmdBZGRyZXNzLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IGZpcnN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcGF5ZXJGaXJzdE5hbWUgfHwgXCJcIjtcbiAgICBjb25zdCBsYXN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiXCI7XG4gICAgaWYgKGZpcnN0TmFtZSB8fCBsYXN0TmFtZSkge1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgICB9XG4gIH1cbiAgaWYgKHNoaXBwaW5nQWRkcmVzcykge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTFdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gfHwgc2hpcHBpbmdBZGRyZXNzLmFkZHJlc3MxIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMl0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUyXSB8fCBzaGlwcGluZ0FkZHJlc3MuYWRkcmVzczIgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUzXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdIHx8IHNoaXBwaW5nQWRkcmVzcy5hZGRyZXNzMyB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldIHx8IHNoaXBwaW5nQWRkcmVzcy5sb2NhbGl0eSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV0gfHwgc2hpcHBpbmdBZGRyZXNzLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0gfHwgc2hpcHBpbmdBZGRyZXNzLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldIHx8IHNoaXBwaW5nQWRkcmVzcy5jb3VudHJ5Q29kZSB8fCBcIlVTXCI7XG4gIH1cbiAgcmV0dXJuIGlucHV0cztcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHUsIGVycl9fOiBlcnJfXyR0IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1iYWNzXCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4QkFDU0Zsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgdmVyaWZpY2F0aW9uTWV0aG9kID0gY3VzdG9tUGFyYW1zLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInRydWVsYXllclwiO1xuICAgIGxldCBtaWNyb0RlcG9zaXREYXRhID0gbnVsbDtcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgbG9nX18kdShcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBtaWNyb0RlcG9zaXREYXRhID0gYXdhaXQgY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0oXCJiYWNzX2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMzUwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJHUoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kdShcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBhdmFpbGFibGVCYW5rcyA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5hdmFpbGFibGVfYmFua3M7XG4gICAgbGV0IHNlbGVjdGVkQmFuaztcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcInRydWVsYXllclwiICYmIGF2YWlsYWJsZUJhbmtzICYmIGF2YWlsYWJsZUJhbmtzLmxlbmd0aCA+PSAxKSB7XG4gICAgICBsb2dfXyR1KFwiTXVsdGlwbGUgYmFua3MgYXZhaWxhYmxlLCBzaG93aW5nIGJhbmsgc2VsZWN0b3IuLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBzZWxlY3RlZEJhbmsgPSBhd2FpdCBjcmVhdGVBbmRPcGVuQmFua1NlbGVjdG9yKGF2YWlsYWJsZUJhbmtzLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNTAwcHhcIixcbiAgICAgICAgICB0aXRsZTogXCJTZWxlY3QgYmFua1wiXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyR1KGBCYW5rIHNlbGVjdGVkOiAke3NlbGVjdGVkQmFuay5kaXNwbGF5X25hbWV9YCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dfXyR1KFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGJpbGxpbmdBZGRyZXNzID0gZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgY29uc3QgZGlyZWN0RGViaXREYXRhID0ge1xuICAgICAgdHlwZTogXCJiYWNzX2RpcmVjdF9kZWJpdFwiLFxuICAgICAgYmFjc19kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gVHJ1ZUxheWVyXG4gICAgICAgIGJhbmtfbmFtZTogc2VsZWN0ZWRCYW5rPy5iYW5rX25hbWUsXG4gICAgICAgIC8vIE1pY3JvZGVwb3NpdFxuICAgICAgICBvd25lcl9uYW1lOiBnZXRGdWxsTmFtZShub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSwgbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGNvdW50cnlfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgIGFjY291bnRfbnVtYmVyOiBtaWNyb0RlcG9zaXREYXRhPy5hY2NvdW50X251bWJlcixcbiAgICAgICAgc29ydF9jb2RlOiBtaWNyb0RlcG9zaXREYXRhPy5zb3J0X2NvZGUsXG4gICAgICAgIGFkZHJlc3M6IHsgLi4uYmlsbGluZ0FkZHJlc3MsIHRvd246IGJpbGxpbmdBZGRyZXNzLmNpdHksIHBvc3Rjb2RlOiBiaWxsaW5nQWRkcmVzcy56aXBfY29kZSB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IGRpcmVjdERlYml0RGF0YVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApPy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHJlZGlyZWN0VXJsKSB7XG4gICAgICBsb2dfXyR1KFwiQkFDUyB2ZXJpZmljYXRpb24gcmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkJBQ1MgdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgbG9nX18kdShg4pWwIEJBQ1MgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCQUNTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQkFDUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuZXdDb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWJhY3NcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IG5ld0NvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kdChcIkJBQ1MgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyR0LCBlcnJfXzogZXJyX18kcyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtZWZ0XCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4RUZURmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCB2ZXJpZmljYXRpb25NZXRob2QgPSBjdXN0b21QYXJhbXMudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwicGxhaWRcIjtcbiAgICBsZXQgbWljcm9EZXBvc2l0RGF0YSA9IG51bGw7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJtaWNyb19kZXBvc2l0XCIpIHtcbiAgICAgIGxvZ19fJHQoXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWljcm9EZXBvc2l0RGF0YSA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5NaWNyb0RlcG9zaXRGb3JtKFwiZWZ0X2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNDUwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJHQoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kdChcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBkaXJlY3REZWJpdERhdGEgPSB7XG4gICAgICB0eXBlOiBcImVmdF9kaXJlY3RfZGViaXRcIixcbiAgICAgIGVmdF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gUGxhaWRcbiAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogY3VzdG9tUGFyYW1zLmlzQnVzaW5lc3NBY2NvdW50ID8/IGZhbHNlLFxuICAgICAgICBvd25lcl9uYW1lOiBnZXRGdWxsTmFtZShub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSwgbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIC8vIE1pY3JvZGVwb3NpdFxuICAgICAgICBpbnN0aXR1dGlvbl9udW1iZXI6IG1pY3JvRGVwb3NpdERhdGE/Lmluc3RpdHV0aW9uX251bWJlcixcbiAgICAgICAgdHJhbnNpdF9udW1iZXI6IG1pY3JvRGVwb3NpdERhdGE/LnRyYW5zaXRfbnVtYmVyLFxuICAgICAgICBhY2NvdW50X251bWJlcjogbWljcm9EZXBvc2l0RGF0YT8uYWNjb3VudF9udW1iZXJcbiAgICAgICAgLy8gbWFuZGF0ZV92ZXJzaW9uOiB1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiB2ZXJpZmljYXRpb25NZXRob2QsXG4gICAgICAgIGRpcmVjdF9kZWJpdF9kYXRhOiBkaXJlY3REZWJpdERhdGFcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKT8ucmVkaXJlY3RfdXJsO1xuICAgIGlmIChyZWRpcmVjdFVybCkge1xuICAgICAgbG9nX18kdChcIkVGVCB2ZXJpZmljYXRpb24gcmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkVGVCB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBsb2dfXyR0KGDilbAgRUZUIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRUZUIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRUZUIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZWZ0XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBuZXdDb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJHMoXCJFRlQgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRzLCBlcnJfXzogZXJyX18kciB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtc2VwYVwiKTtcbmNvbnN0IHJ1bkFpcndhbGxleFNFUEFGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHZlcmlmaWNhdGlvbk1ldGhvZCA9IGN1c3RvbVBhcmFtcy52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJ0cnVlbGF5ZXJcIjtcbiAgICBsZXQgbWljcm9EZXBvc2l0RGF0YSA9IG51bGw7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJtaWNyb19kZXBvc2l0XCIpIHtcbiAgICAgIGxvZ19fJHMoXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWljcm9EZXBvc2l0RGF0YSA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5NaWNyb0RlcG9zaXRGb3JtKFwic2VwYV9kaXJlY3RfZGViaXRcIiwge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjMwMHB4XCIsXG4gICAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRzKFwiTWljcm8gZGVwb3NpdCBkYXRhIGNvbGxlY3RlZFwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ19fJHMoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydEZsb3dOZXh0QWN0aW9ucyA9IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgY29uc2VudElkID0gc3RhcnRGbG93TmV4dEFjdGlvbnM/LmNvbnNlbnRfaWQ7XG4gICAgY29uc3QgYXZhaWxhYmxlQmFua3MgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uYXZhaWxhYmxlX2JhbmtzO1xuICAgIGxldCBzZWxlY3RlZEJhbms7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJ0cnVlbGF5ZXJcIiAmJiBhdmFpbGFibGVCYW5rcyAmJiBhdmFpbGFibGVCYW5rcy5sZW5ndGggPj0gMSkge1xuICAgICAgbG9nX18kcyhcIk11bHRpcGxlIGJhbmtzIGF2YWlsYWJsZSwgc2hvd2luZyBiYW5rIHNlbGVjdG9yLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2VsZWN0ZWRCYW5rID0gYXdhaXQgY3JlYXRlQW5kT3BlbkJhbmtTZWxlY3RvcihhdmFpbGFibGVCYW5rcywge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjUwMHB4XCIsXG4gICAgICAgICAgdGl0bGU6IFwiU2VsZWN0IGJhbmtcIlxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kcyhgQmFuayBzZWxlY3RlZDogJHtzZWxlY3RlZEJhbmsuZGlzcGxheV9uYW1lfWApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kcyhcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcInNlcGFfZGlyZWN0X2RlYml0XCIsXG4gICAgICAgICAgc2VwYV9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgICAgIC8vIHRydWVsYXllclxuICAgICAgICAgICAgYmFua19uYW1lOiBzZWxlY3RlZEJhbms/LmJhbmtfbmFtZSxcbiAgICAgICAgICAgIGNvdW50cnlfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgICAvLyBtaWNyb2RlcG9zaXRcbiAgICAgICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgICAgICBpYmFuOiBtaWNyb0RlcG9zaXREYXRhPy5pYmFuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk/LnJlZGlyZWN0X3VybDtcbiAgICBpZiAocmVkaXJlY3RVcmwpIHtcbiAgICAgIGxvZ19fJHMoXCJTRVBBIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiU0VQQSB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBsb2dfXyRzKGDilbAgU0VQQSB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNFUEEgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTRVBBIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtc2VwYVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogbmV3Q29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRyKFwiU0VQQSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHIsIGVycl9fOiBlcnJfXyRxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFpcndhbGxleC1jY1wiKTtcbmNvbnN0IEFpcndhbGxleDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzID0gei5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBwYXJzZVJlc3BvbnNlSGVhZGVycyQzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gQWlyd2FsbGV4M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMuc2FmZVBhcnNlKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG4gICAgY29uc3QgZGV2RXJyID0gYEFpcndhbGxleCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gO1xuICAgIGVycl9fJHEoZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdICE9PSB2b2lkIDA7XG59O1xuY29uc3QgcGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmID0gKGhyZWYpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBpbnRlbnRJZCA9IG5ldyBVUkwoaHJlZiA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCFpbnRlbnRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICB9XG4gICAgbG9nX18kcihgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHtpbnRlbnRJZH1dYCk7XG4gICAgcmV0dXJuIGludGVudElkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVyck1zZyA9IGBFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LmA7XG4gICAgZXJyX18kcShlcnJNc2csIGBSZXN1bHRpbmcgVVJMOiAke2hyZWZ9LlxuRXJyb3I6ICR7Z2V0RXJyb3JNZXNzYWdlKGVycm9yKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgfVxufTtcbmNvbnN0IHJ1bkFpcndhbGxleDNkc0Zsb3cgPSBhc3luYyAoYmFzZVVybCwgZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDMoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCh7IHVybDogaGVhZGVyc1tcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdLCBiYXNlVXJsIH0pO1xuICBjb25zdCBpbnRlbnRJZCA9IHBhcnNlSW50ZW50SWRGcm9tM2RzSHJlZihyZXN1bHQuaHJlZiA/PyBcIlwiKTtcbiAgY29uc3QgaW5pdGlhbEludGVudElkID0gaGVhZGVyc1tcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiXTtcbiAgaWYgKGluaXRpYWxJbnRlbnRJZCAhPT0gaW50ZW50SWQpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7aW50ZW50SWR9KSBkb2VzIG5vdCBtYXRjaCB0aGUgaW5pdGlhbCBpbnRlbnQgSUQgKCR7aW5pdGlhbEludGVudElkfSkuYDtcbiAgICBlcnJfXyRxKGRldkVycik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICBjb25zdCBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBpbnRlbnRJZCxcbiAgICAgIGNvbnNlbnRfaWQ6IGhlYWRlcnNbXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiXVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGV4dHJhTWV0YWRhdGFGb3JDaGVja291dDtcbn07XG5jb25zdCBBcHBsZVBheUNwbSQyID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgR29vZ2xlUGF5Q3BtJDIgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5jb25zdCBsb2FkQXBwbGVQYXlTY3JpcHQgPSAoKSA9PiB7XG4gIHJldHVybiBsb2FkU2NyaXB0KHtcbiAgICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2FwcGxlX3BheV9zZGtcIixcbiAgICBzcmM6IFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tL2pzYXBpLzEubGF0ZXN0L2FwcGxlLXBheS1zZGsuanNcIixcbiAgICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5BcHBsZVBheVNlc3Npb25cbiAgfSk7XG59O1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheSA9IChmb3JtSW5wdXRzLCBhcHBsZVBheVBheW1lbnQpID0+IHtcbiAgY29uc3QgcG1CaWxsaW5nQ29udGFjdCA9IGFwcGxlUGF5UGF5bWVudC50b2tlbi5wYXltZW50TWV0aG9kLmJpbGxpbmdDb250YWN0O1xuICBjb25zdCBiaWxsaW5nQ29udGFjdCA9IGFwcGxlUGF5UGF5bWVudC5iaWxsaW5nQ29udGFjdDtcbiAgY29uc3Qgc2hpcHBpbmdDb250YWN0ID0gYXBwbGVQYXlQYXltZW50LnNoaXBwaW5nQ29udGFjdDtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGlmIChwbUJpbGxpbmdDb250YWN0IHx8IGJpbGxpbmdDb250YWN0IHx8IHNoaXBwaW5nQ29udGFjdCkge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgcG1CaWxsaW5nQ29udGFjdD8uZW1haWxBZGRyZXNzIHx8IGJpbGxpbmdDb250YWN0Py5lbWFpbEFkZHJlc3MgfHwgc2hpcHBpbmdDb250YWN0Py5lbWFpbEFkZHJlc3MgfHwgXCJvcF91bmZpbGxlZEBlbWFpbC5jb21cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBwbUJpbGxpbmdDb250YWN0Py5jb3VudHJ5Q29kZSB8fCBiaWxsaW5nQ29udGFjdD8uY291bnRyeUNvZGUgfHwgc2hpcHBpbmdDb250YWN0Py5jb3VudHJ5Q29kZSB8fCBcIlVTXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBwbUJpbGxpbmdDb250YWN0Py5wb3N0YWxDb2RlIHx8IGJpbGxpbmdDb250YWN0Py5wb3N0YWxDb2RlIHx8IHNoaXBwaW5nQ29udGFjdD8ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwbUJpbGxpbmdDb250YWN0Py5naXZlbk5hbWUgfHwgYmlsbGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBcIlwiO1xuICAgIGNvbnN0IGxhc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgYmlsbGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgc2hpcHBpbmdDb250YWN0Py5mYW1pbHlOYW1lIHx8IFwiXCI7XG4gICAgaWYgKGZpcnN0TmFtZSB8fCBsYXN0TmFtZSkge1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlucHV0cztcbn07XG56Lm9iamVjdCh7XG4gIGRhdGE6IHoub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gICAgZXJyb3JzOiB6LmFycmF5KHouYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6LnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6LmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuY29uc3QgY3JlYXRlUmVjdXJyaW5nUGF5bWVudFJlcXVlc3QgPSAoe1xuICB0b3RhbCxcbiAgcHJlZmlsbFxufSkgPT4ge1xuICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IHRvdGFsLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke3ByZWZpbGwudG9rZW59YCwgRlJBTUVfQkFTRV9VUkwpLnRvU3RyaW5nKClcbiAgICB9O1xuICB9XG4gIGNvbnN0IGxpbmVJdGVtID0gcHJlZmlsbC5saW5lX2l0ZW1zPy5bMF07XG4gIGlmICghbGluZUl0ZW0pIHJldHVybiB2b2lkIDA7XG4gIGNvbnN0IGFwcGxlSW50ZXJ2YWxVbml0ID0gbGluZUl0ZW0/LmJpbGxpbmdfaW50ZXJ2YWwgPT09IFwid2Vla1wiID8gXCJkYXlcIiA6IGxpbmVJdGVtPy5iaWxsaW5nX2ludGVydmFsO1xuICBjb25zdCBhcHBsZUludGVydmFsQ291bnQgPSBsaW5lSXRlbT8uYmlsbGluZ19pbnRlcnZhbF9jb3VudCA/IGxpbmVJdGVtPy5iaWxsaW5nX2ludGVydmFsID09PSBcIndlZWtcIiA/IGxpbmVJdGVtPy5iaWxsaW5nX2ludGVydmFsX2NvdW50ICogNyA6IGxpbmVJdGVtPy5iaWxsaW5nX2ludGVydmFsX2NvdW50IDogdm9pZCAwO1xuICByZXR1cm4ge1xuICAgIHBheW1lbnREZXNjcmlwdGlvbjogbGluZUl0ZW0/LmRlc2NyaXB0aW9uID8/IFwiXCIsXG4gICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgIGFtb3VudDogdG90YWwuYW1vdW50LFxuICAgICAgbGFiZWw6IGxpbmVJdGVtPy5kZXNjcmlwdGlvbiA/PyBcIlwiLFxuICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsVW5pdDogYXBwbGVJbnRlcnZhbFVuaXQsXG4gICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxDb3VudDogYXBwbGVJbnRlcnZhbENvdW50LFxuICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgIHR5cGU6IFwiZmluYWxcIlxuICAgIH0sXG4gICAgbWFuYWdlbWVudFVSTDogYGh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tL3BheS8ke3ByZWZpbGwudG9rZW59YFxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZUFwcGxlUGF5VG90YWwgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICBpbml0aWFsUHJldmlldyxcbiAgcHJlZmlsbCxcbiAgZGVmYXVsdExhYmVsID0gXCJUb3RhbFwiXG59KSA9PiB7XG4gIGNvbnN0IGN1cnJlbmN5Q29kZSA9IChvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmN1cnJlbmN5ID8/IHByZWZpbGw/LmN1cnJlbmN5ID8/IGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCBhbW91bnRBdG9tID0gb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uYW1vdW50Py5hbW91bnRBdG9tID8/IGluaXRpYWxQcmV2aWV3Py5hbW91bnRBdG9tID8/IDA7XG4gIGNvbnN0IGFtb3VudCA9IChhbW91bnRBdG9tIC8gMTAwKS50b0ZpeGVkKDIpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5Q29kZSxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmxhYmVsID8/IGRlZmF1bHRMYWJlbCA/PyBcIlRvdGFsXCIsXG4gICAgICB0eXBlOiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5wZW5kaW5nID8gXCJwZW5kaW5nXCIgOiBcImZpbmFsXCIsXG4gICAgICBhbW91bnRcbiAgICB9XG4gIH07XG59O1xuY29uc3QgZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gIGluaXRpYWxQcmV2aWV3LFxuICBwcmVmaWxsLFxuICBkZWZhdWx0TGFiZWxcbn0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW5jeUNvZGUsIHRvdGFsIH0gPSBjcmVhdGVBcHBsZVBheVRvdGFsKHtcbiAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgIGluaXRpYWxQcmV2aWV3LFxuICAgIHByZWZpbGwsXG4gICAgZGVmYXVsdExhYmVsXG4gIH0pO1xuICBsZXQgcGF5bWVudFJlcXVlc3QgPSB7XG4gICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICBjdXJyZW5jeUNvZGUsXG4gICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1xuICAgICAgXCJlbWFpbFwiLFxuICAgICAgLi4ucHJlZmlsbC5jaGVja291dF9zZXR0aW5ncy5yZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyA/IFtcInBvc3RhbEFkZHJlc3NcIl0gOiBbXVxuICAgIF0sXG4gICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCIsIFwiamNiXCJdLFxuICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXCJzdXBwb3J0czNEU1wiLCBcInN1cHBvcnRzQ3JlZGl0XCIsIFwic3VwcG9ydHNEZWJpdFwiXSxcbiAgICB0b3RhbFxuICB9O1xuICBjb25zdCBpc0FsbFJlY3VycmluZyA9IHByZWZpbGwubGluZV9pdGVtcy5ldmVyeSgoaXRlbSkgPT4gaXRlbS5iaWxsaW5nX2ludGVydmFsICYmIGl0ZW0uYmlsbGluZ19pbnRlcnZhbF9jb3VudCk7XG4gIGlmIChpc0FsbFJlY3VycmluZykge1xuICAgIHBheW1lbnRSZXF1ZXN0LnJlY3VycmluZ1BheW1lbnRSZXF1ZXN0ID0gY3JlYXRlUmVjdXJyaW5nUGF5bWVudFJlcXVlc3Qoe1xuICAgICAgdG90YWwsXG4gICAgICBwcmVmaWxsXG4gICAgfSk7XG4gIH1cbiAgaWYgKCFvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KSByZXR1cm4gcGF5bWVudFJlcXVlc3Q7XG4gIGlmICh0eXBlb2Ygb3ZlcnJpZGVQYXltZW50UmVxdWVzdC5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBwYXltZW50UmVxdWVzdCA9IHtcbiAgICAgIC4uLnBheW1lbnRSZXF1ZXN0LFxuICAgICAgLi4ub3ZlcnJpZGVQYXltZW50UmVxdWVzdC5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHBheW1lbnRSZXF1ZXN0KVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcGF5bWVudFJlcXVlc3QgPSB7IC4uLnBheW1lbnRSZXF1ZXN0LCAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgfTtcbiAgfVxuICByZXR1cm4gcGF5bWVudFJlcXVlc3Q7XG59O1xuXG5jb25zdCBBZHllbkVudmlyb25tZW50ID0gei5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKTtcbmNvbnN0IEFkeWVuTG9jYWxlID0gei5lbnVtKFtcbiAgXCJhclwiLFxuICBcImJnLUJHXCIsXG4gIFwiY2EtRVNcIixcbiAgXCJjcy1DWlwiLFxuICBcImRhLURLXCIsXG4gIFwiZGUtREVcIixcbiAgXCJlbC1HUlwiLFxuICBcImVuLVVTXCIsXG4gIFwiZXMtRVNcIixcbiAgXCJldC1FRVwiLFxuICBcImZpLUZJXCIsXG4gIFwiZnItRlJcIixcbiAgXCJoci1IUlwiLFxuICBcImh1LUhVXCIsXG4gIFwiaXMtSVNcIixcbiAgXCJpdC1JVFwiLFxuICBcImphLUpQXCIsXG4gIFwia28tS1JcIixcbiAgXCJsdC1MVFwiLFxuICBcImx2LUxWXCIsXG4gIFwibmwtTkxcIixcbiAgXCJuby1OT1wiLFxuICBcInBsLVBMXCIsXG4gIFwicHQtQlJcIixcbiAgXCJwdC1QVFwiLFxuICBcInJvLVJPXCIsXG4gIFwicnUtUlVcIixcbiAgXCJzay1TS1wiLFxuICBcInNsLVNJXCIsXG4gIFwic3YtU0VcIixcbiAgXCJ6aC1DTlwiLFxuICBcInpoLVRXXCJcbl0pO1xuY29uc3QgeyBsb2dfXzogbG9nX18kcSwgZXJyX186IGVycl9fJHAgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYWR5ZW4tY2NcIik7XG5jb25zdCBBZHllbjNkc1Jlc3BvbnNlSGVhZGVycyA9IHoub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tY2xpZW50LWtleVwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IEFkeWVuRW52aXJvbm1lbnQsXG4gIFwib3AtYWR5ZW4tYWN0aW9uXCI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG5jb25zdCBwYXJzZVJlc3BvbnNlSGVhZGVycyQyID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gQWR5ZW4zZHNSZXNwb25zZUhlYWRlcnMuc2FmZVBhcnNlKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgZXJyX18kcChgQWR5ZW4gM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlcnJvclJlc3BvbnNlSGVhZGVycyl9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBkZWNvZGVBZHllbkFjdGlvbiA9IChhY3Rpb24pID0+IHtcbiAgY29uc3QgZGVzZXJpYWxpemVkID0gSlNPTi5wYXJzZShhY3Rpb24pO1xuICByZXR1cm4gZGVzZXJpYWxpemVkO1xufTtcbmNvbnN0IGlzQWR5ZW5BdmFpbGFibGUgPSAoKSA9PiB7XG4gIHJldHVybiBcIkFkeWVuV2ViXCIgaW4gd2luZG93ICYmIFwiQWR5ZW5DaGVja291dFwiIGluIHdpbmRvd1tcIkFkeWVuV2ViXCJdO1xufTtcbmNvbnN0IGdldEFkeWVuQ2hlY2tvdXQgPSBhc3luYyAoKSA9PiB7XG4gIGxvZ19fJHEoXCJXYWl0aW5nIGZvciBBZHllbiBTREsgdG8gbG9hZC4uLlwiKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgaWYgKCFpc0FkeWVuQXZhaWxhYmxlKCkpIHtcbiAgICAgIGF3YWl0IHNsZWVwKDUwMCk7XG4gICAgfVxuICB9XG4gIGlmICghaXNBZHllbkF2YWlsYWJsZSgpKSB7XG4gICAgZXJyX18kcChcIkFkeWVuIFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgbG9nX18kcShcIkFkeWVuIFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICByZXR1cm4gd2luZG93W1wiQWR5ZW5XZWJcIl1bXCJBZHllbkNoZWNrb3V0XCJdO1xufTtcbmNvbnN0IGhhbmRsZUFkeWVuM2RzID0gKHBhcmFtcykgPT4ge1xuICBjb25zdCB7IGhlYWRlcnMsIGxvY2FsZSwgY291bnRyeUNvZGUsIGNvbXBvbmVudCwgaG9zdCwgY2FuY2VsQnV0dG9uIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGFjdGlvbiA9IGRlY29kZUFkeWVuQWN0aW9uKGhlYWRlcnNbXCJvcC1hZHllbi1hY3Rpb25cIl0pO1xuICBsb2dfXyRxKGBSdW5uaW5nIEFkeWVuIDNEUyBmbG93IGZvciBhY3Rpb24gdHlwZTogJHthY3Rpb24udHlwZX1gKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGxvZ19fJHEoXCJDbGVhbmluZyB1cCBBZHllbiAzRFMgZmxvd1wiKTtcbiAgICAgIGNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DYW5jZWwpO1xuICAgICAgaG9zdC5yZW1vdmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uUGF5bWVudEZhaWxlZCA9IChzdGF0ZSkgPT4ge1xuICAgICAgZXJyX18kcChcIkF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUmVzdWx0OlwiLCBzdGF0ZSk7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkZBSUxVUkUsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBvbkVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICBlcnJfXyRwKFwiQWR5ZW4gZXJyb3I6XCIsIGVycm9yKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuRkFJTFVSRSwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG9uQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBjYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2FuY2VsKTtcbiAgICBjb25zdCBvbkFkZGl0aW9uYWxEZXRhaWxzID0gKHN0YXRlLCBfLCBfXykgPT4ge1xuICAgICAgaG9zdC5yZW1vdmUoKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuU1VDQ0VTUywgYWRkaXRpb25hbERldGFpbHM6IHN0YXRlLCBjbGVhbnVwIH0pO1xuICAgIH07XG4gICAgZ2V0QWR5ZW5DaGVja291dCgpLnRoZW4oXG4gICAgICAoYWR5ZW5DaGVja291dCkgPT4gYWR5ZW5DaGVja291dCh7XG4gICAgICAgIGNsaWVudEtleTogaGVhZGVyc1tcIm9wLWFkeWVuLWNsaWVudC1rZXlcIl0sXG4gICAgICAgIGVudmlyb25tZW50OiBoZWFkZXJzW1wib3AtYWR5ZW4tZW52aXJvbm1lbnRcIl0sXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgY291bnRyeUNvZGUsXG4gICAgICAgIG9uQWRkaXRpb25hbERldGFpbHMsXG4gICAgICAgIG9uUGF5bWVudEZhaWxlZCxcbiAgICAgICAgb25FcnJvclxuICAgICAgfSlcbiAgICApLnRoZW4oKGNoZWNrb3V0KSA9PiB7XG4gICAgICBjaGVja291dC5jcmVhdGVGcm9tQWN0aW9uKGFjdGlvbiwgeyBjaGFsbGVuZ2VXaW5kb3dTaXplOiBcIjAzXCIgfSkubW91bnQoY29tcG9uZW50KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuY29uc3QgZGV0ZXJtaW5lTG9jYWxlID0gKHByZWZpbGxMb2NhbGUpID0+IHtcbiAgY29uc3QgYnJvd3NlckxvY2FsZSA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIDogbmF2aWdhdG9yLmxhbmd1YWdlO1xuICBjb25zdCBsb2NhbGUgPSBwcmVmaWxsTG9jYWxlID8/IGJyb3dzZXJMb2NhbGU7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gQWR5ZW5Mb2NhbGUuc2FmZVBhcnNlKGxvY2FsZSk7XG4gIGlmICghcGFyc2VSZXN1bHQuc3VjY2Vzcykge1xuICAgIGVycl9fJHAoYFJlc29sdmVkIGludmFsaWQgbG9jYWxlOiAke2xvY2FsZX0uIERlZmF1bHRpbmcgdG8gZW4tVVMuYCk7XG4gICAgcmV0dXJuIFwiZW4tVVNcIjtcbiAgfVxuICBsb2dfXyRxKGBSZXNvbHZlZCBsb2NhbGU6ICR7cGFyc2VSZXN1bHQuZGF0YX1gKTtcbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgcmV0dXJuIGVycm9yUmVzcG9uc2VIZWFkZXJzPy5bXCJvcC1hZHllbi1hY3Rpb25cIl0gIT09IHZvaWQgMDtcbn07XG5jb25zdCBydW5BZHllbjNkc0Zsb3cgPSBhc3luYyAoY291bnRyeUNvZGUsIGVycm9yUmVzcG9uc2VIZWFkZXJzLCBwcmVmaWxsTG9jYWxlKSA9PiB7XG4gIGNvbnN0IGhlYWRlcnMgPSBwYXJzZVJlc3BvbnNlSGVhZGVycyQyKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgY29uc3QgY29tcG9uZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29tcG9uZW50LmlkID0gXCJhZHllbi1jb250YWluZXJcIjtcbiAgY29uc3QgeyBob3N0LCBpZnJhbWUsIGNhbmNlbEJ1dHRvbiB9ID0gY3JlYXRlQW5kT3BlbkZyYW1lKFwiaHR0cDovL2V4YW1wbGUuY29tXCIpO1xuICBpZnJhbWUucmVwbGFjZVdpdGgoY29tcG9uZW50KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlQWR5ZW4zZHMoe1xuICAgIGhlYWRlcnMsXG4gICAgbG9jYWxlOiBkZXRlcm1pbmVMb2NhbGUocHJlZmlsbExvY2FsZSksXG4gICAgY291bnRyeUNvZGUsXG4gICAgY29tcG9uZW50LFxuICAgIGhvc3QsXG4gICAgY2FuY2VsQnV0dG9uXG4gIH0pO1xuICByZXN1bHQuY2xlYW51cCgpO1xuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLlNVQ0NFU1MpIHtcbiAgICBpZiAoIXJlc3VsdC5hZGRpdGlvbmFsRGV0YWlscykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWQgYnV0IG5vIGFkZGl0aW9uYWwgZGV0YWlscyB3ZXJlIHJldHVybmVkXCIpO1xuICAgIH1cbiAgICBsb2dfXyRxKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWRcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICAgIGFkZGl0aW9uYWxfZGV0YWlsczogcmVzdWx0LmFkZGl0aW9uYWxEZXRhaWxzLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGFzc2VydE5ldmVyKHJlc3VsdC5zdGF0dXMpO1xuICB9XG59O1xuY29uc3QgQXBwbGVQYXlDcG0kMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgR29vZ2xlUGF5Q3BtJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHAgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMihldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgcHJlcGFyZVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheV9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGV2ZW50LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogY29udGV4dC5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBjb25zdCBwYXltZW50U2Vzc2lvblJlc3BvbnNlID0gbmV4dEFjdGlvbk1ldGFkYXRhPy5bXCJhcHBsZV9wYXlfc2Vzc2lvblwiXTtcbiAgICBpZiAoIXBheW1lbnRTZXNzaW9uUmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB9XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKHBheW1lbnRTZXNzaW9uUmVzcG9uc2UpO1xuICAgIHRyYWNrKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ucGF5bWVudFNlc3Npb25SZXNwb25zZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb250ZXh0LnNlc3Npb24uYWJvcnQoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVBheW1lbnRBdXRob3JpemVkJDIoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXltZW50RGF0YSA9IGV2ZW50LnBheW1lbnQ7XG4gICAgY29uc3QgZm9ybUlucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkoY29udGV4dC5ub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgZm9ybUlucHV0cyxcbiAgICAgIGNvbnRleHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBjb250ZXh0LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgY29udGV4dC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKVxuICAgIH0pO1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYnJvd3Nlcl9pbmZvOiBnZXRGcmF1ZE1ldGFkYXRhKCksXG4gICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IGJ0b2EoSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4ucGF5bWVudERhdGEpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgbG9nX18kcChcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgIGNvbnN0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhZHllbi1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJG8sIGVycl9fOiBlcnJfXyRvIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFkeWVuLWFwcGxlLXBheVwiKTtcbmNvbnN0IGluaXRBZHllbkFwcGxlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSQxKTtcbiAgICBpZiAoIWFwcGxlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJG8oXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEFwcGxlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpIHtcbiAgICAgIGxvZ19fJG8oXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRvKFwiQXBwbGUgUGF5IExvYWRlZFwiKTtcbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudHMgPSBhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCk7XG4gICAgaWYgKCFjYW5NYWtlUGF5bWVudHMpIHtcbiAgICAgIGxvZ19fJG8oXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBhcHBsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkFwcGxlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgT2pzRmxvd3MuYWR5ZW5BcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBhcHBsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRvKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uQXBwbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQWR5ZW5BcHBsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBmb3JtQ2FsbGJhY2tzXG4gIH0pID0+IHtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSQxKTtcbiAgICBjb25zdCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsIGluaXRpYWxQcmV2aWV3IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBwcmVmaWxsOiB7XG4gICAgICAgIC4uLnByZWZpbGxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pO1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHBheW1lbnRSZXF1ZXN0KTtcbiAgICBjb25zdCBzZXNzaW9uQ29udGV4dCA9IHtcbiAgICAgIHNlc3Npb24sXG4gICAgICBjb25uZWN0aW9uOiBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogYXBwbGVQYXlDcG0ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBjdXN0b21QYXJhbXM/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBleGNsdWRlUHJvcHMocHJlZmlsbCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGxvZ19fJG8oXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50JDIoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbml0aWFsUHJldmlldzIgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogY3JlYXRlQXBwbGVQYXlUb3RhbCh7XG4gICAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXMub3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiBpbml0aWFsUHJldmlldzIsXG4gICAgICAgICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgICAgIHByZWZpbGxcbiAgICAgICAgICB9KS50b3RhbFxuICAgICAgICB9O1xuICAgICAgICBzZXNzaW9uLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih1cGRhdGUpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMihldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9uY2FuY2VsID0gaGFuZGxlQ2FuY2VsO1xuICAgICAgc2Vzc2lvbi5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGVycl9fJG8oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRuLCBlcnJfXzogZXJyX18kbiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhZHllbi1nb29nbGUtcGF5XCIpO1xuY29uc3QgaW5pdEFkeWVuR29vZ2xlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDEpO1xuICAgIGlmICghZ29vZ2xlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJG4oXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyRuKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kbihcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEdvb2dsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSkge1xuICAgICAgZXJyX18kbihcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGVudmlyb25tZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQoY29udGV4dC5iYXNlVXJsKTtcbiAgICBpZiAoZW52aXJvbm1lbnQgPT09IFwiUFJPRFVDVElPTlwiICYmICFwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpIHtcbiAgICAgIGVycl9fJG4oXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRuKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgICAgcHJlZmlsbCxcbiAgICAgICAgZ2F0ZXdheTogXCJhZHllblwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBjb25zdCB7IHJlc3VsdDogaXNSZWFkeVRvUGF5IH0gPSBhd2FpdCBjbGllbnQuaXNSZWFkeVRvUGF5KHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBpZiAoIWlzUmVhZHlUb1BheSkge1xuICAgICAgICBsb2dfXyRuKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIik7XG4gICAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJG4oXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCBlcnIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBvbkdvb2dsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9qc0Zsb3dzLmFkeWVuR29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGdvb2dsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRuKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkdvb2dsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BZHllbkdvb2dsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyRuKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMSk7XG4gICAgY29uc3QgeyBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgcHJlZmlsbCxcbiAgICAgIGdhdGV3YXk6IFwiYWR5ZW5cIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGdvb2dsZVBheUNwbS5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGV4Y2x1ZGVQcm9wcyhwcmVmaWxsLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YSA9IGF3YWl0IGNsaWVudC5sb2FkUGF5bWVudERhdGEocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGxvZ19fJG4oXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheShub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICAgIG1lcmdlZElucHV0cyxcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApO1xuICAgICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFBheW1lbnRUb2tlbiA9IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy50b2tlbml6YXRpb25EYXRhPy50b2tlbjtcbiAgICAgIGlmICghZW5jcnlwdGVkUGF5bWVudFRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzdGFydEZsb3dOZXh0QWN0aW9ucyA9IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgICBsb2dfXyRuKFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwgc3RhcnRGbG93TmV4dEFjdGlvbnMpO1xuICAgICAgbGV0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgICBicm93c2VyX2luZm86IGdldEZyYXVkTWV0YWRhdGEoKSxcbiAgICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YToge1xuICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy50b2tlbml6YXRpb25EYXRhPy50b2tlblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2dfXyRuKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICBsZXQgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWR5ZW4tM2RzXCIpO1xuICAgICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YSAmJiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIGxvZ19fJG4oXCJBZHllbiAzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICAgICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICAgIHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJG4oYOKVsCBBZHllbiAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEgJiYgIW91clBtSWQpIHtcbiAgICAgICAgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICAgIHRoZWlyX3BtX2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQsXG4gICAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRuKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2UgYWZ0ZXIgM0RTXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICB9XG4gICAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCBtZXRob2QgSUQgZm91bmRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhZHllbi1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kbihcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kbSwgZXJyX186IGVycl9fJG0gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWFjaFwiKTtcbmNvbnN0IHJ1bkFpcndhbGxleEFDSEZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgdmVyaWZpY2F0aW9uTWV0aG9kID0gY3VzdG9tUGFyYW1zLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInBsYWlkXCI7XG4gICAgbGV0IG1pY3JvRGVwb3NpdERhdGEgPSBudWxsO1xuICAgIGlmICh2ZXJpZmljYXRpb25NZXRob2QgPT09IFwibWljcm9fZGVwb3NpdFwiKSB7XG4gICAgICBsb2dfXyRtKFwiTWljcm8gZGVwb3NpdCB2ZXJpZmljYXRpb24gc2VsZWN0ZWQsIHNob3dpbmcgZm9ybS4uLlwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1pY3JvRGVwb3NpdERhdGEgPSBhd2FpdCBjcmVhdGVBbmRPcGVuTWljcm9EZXBvc2l0Rm9ybShcImFjaF9kaXJlY3RfZGViaXRcIiwge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjQwMHB4XCIsXG4gICAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRtKFwiTWljcm8gZGVwb3NpdCBkYXRhIGNvbGxlY3RlZFwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ19fJG0oXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydEZsb3dOZXh0QWN0aW9ucyA9IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgY29uc2VudElkID0gc3RhcnRGbG93TmV4dEFjdGlvbnM/LmNvbnNlbnRfaWQ7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiB2ZXJpZmljYXRpb25NZXRob2QsXG4gICAgICAgIGRpcmVjdF9kZWJpdF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJhY2hfZGlyZWN0X2RlYml0XCIsXG4gICAgICAgICAgYWNoX2RpcmVjdF9kZWJpdDoge1xuICAgICAgICAgICAgLy9wbGFpZCB2ZXJpZmljYXRpb24gcmVxdWlyZWQgZmllbGRzXG4gICAgICAgICAgICBidXNpbmVzc19hY2NvdW50OiBjdXN0b21QYXJhbXMuaXNCdXNpbmVzc0FjY291bnQgPz8gZmFsc2UsXG4gICAgICAgICAgICBvd25lcl9uYW1lOiBnZXRGdWxsTmFtZShub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSwgbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSksXG4gICAgICAgICAgICBvd25lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICAgICAgLy9BQ0ggbWljcm8gZGVwb3NpdCB2ZXJpZmljYXRpb24gcmVxdWlyZWQgZmllbGRzXG4gICAgICAgICAgICBhY2NvdW50X251bWJlcjogbWljcm9EZXBvc2l0RGF0YT8uYWNjb3VudF9udW1iZXIsXG4gICAgICAgICAgICBhYmFfcm91dGluZ19udW1iZXI6IG1pY3JvRGVwb3NpdERhdGE/LmFiYV9yb3V0aW5nX251bWJlclxuICAgICAgICAgICAgLy8gbWFuZGF0ZV92ZXJzaW9uOiAnMS4wJyxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKT8ucmVkaXJlY3RfdXJsO1xuICAgIGlmIChyZWRpcmVjdFVybCkge1xuICAgICAgbG9nX18kbShcIlBsYWlkIHZlcmlmaWNhdGlvbiBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiQUNIIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJG0oYOKVsCBQbGFpZCB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsYWlkIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxhaWQgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmV3Q29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1hY2hcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IG5ld0NvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kbShcIkFDSCBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGwgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMShldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgcHJlcGFyZVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZXZlbnQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBjb250ZXh0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGNvbnN0IHBheW1lbnRTZXNzaW9uUmVzcG9uc2UgPSBuZXh0QWN0aW9uTWV0YWRhdGE/LltcImFwcGxlX3BheV9zZXNzaW9uXCJdO1xuICAgIGlmICghcGF5bWVudFNlc3Npb25SZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24ocGF5bWVudFNlc3Npb25SZXNwb25zZSk7XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5wYXltZW50U2Vzc2lvblJlc3BvbnNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnRleHQuc2Vzc2lvbi5hYm9ydCgpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlM0RTKG5leHRBY3Rpb25NZXRhZGF0YSwgY29udGV4dCkge1xuICBpZiAoIW5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmRcIik7XG4gIH1cbiAgbG9nX18kbChcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIG5leHRBY3Rpb25NZXRhZGF0YSk7XG4gIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLFxuICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICB9KTtcbiAgbG9nX18kbChg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgfVxuICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfVxuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgdGhlaXJfcG1faWQ6IG5leHRBY3Rpb25NZXRhZGF0YS50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEuY29uc2VudF9pZCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgfVxuICB9KTtcbiAgbG9nX18kbChcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICByZXR1cm4gY29uZmlybVJlc3VsdDtcbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVBheW1lbnRBdXRob3JpemVkJDEoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXltZW50RGF0YSA9IGV2ZW50LnBheW1lbnQ7XG4gICAgY29uc3QgZm9ybUlucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkoY29udGV4dC5ub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgZm9ybUlucHV0cyxcbiAgICAgIGNvbnRleHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBjb250ZXh0LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgY29udGV4dC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKVxuICAgIH0pO1xuICAgIGNvbnN0IHJlcXVpcmVkVXNlckFjdGlvbnMgPSBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdO1xuICAgIGNvbnN0IGNvbnNlbnRJZCA9IHJlcXVpcmVkVXNlckFjdGlvbnMuY29uc2VudF9pZDtcbiAgICBpZiAoIWNvbnNlbnRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uc2VudCBJRCByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB9XG4gICAgbGV0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZCxcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFwcGxlcGF5XCIsXG4gICAgICAgICAgYXBwbGVwYXk6IHtcbiAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgbG9nX18kbChcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApO1xuICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGE/LnJlZGlyZWN0X3VybCAmJiBuZXh0QWN0aW9uTWV0YWRhdGEuY29uc2VudF9pZCAmJiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQpIHtcbiAgICAgIGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBoYW5kbGUzRFMobmV4dEFjdGlvbk1ldGFkYXRhLCBjb250ZXh0KTtcbiAgICAgIG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICB9XG4gICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXd4LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuY29uc3QgeyBsb2dfXzogbG9nX18kaywgZXJyX186IGVycl9fJGwgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWFwcGxlLXBheVwiKTtcbmNvbnN0IGluaXRBaXJ3YWxsZXhBcHBsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCB1bmF2YWlsYWJsZVJlc3VsdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDIpO1xuICAgIGlmICghYXBwbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kayhcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkQXBwbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSkge1xuICAgICAgbG9nX18kayhcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGsoXCJBcHBsZSBQYXkgTG9hZGVkXCIpO1xuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50cyA9IGF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKTtcbiAgICBpZiAoIWNhbk1ha2VQYXltZW50cykge1xuICAgICAgbG9nX18kayhcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGFwcGxlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uQXBwbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBPanNGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBhcHBsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRsKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkFwcGxlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkFpcndhbGxleEFwcGxlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGZvcm1DYWxsYmFja3NcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDIpO1xuICAgIGNvbnN0IHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBwYXltZW50UmVxdWVzdCA9IGdldEFwcGxlUGF5UGF5bWVudFJlcXVlc3Qoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjdXN0b21QYXJhbXMuaW5pdGlhbFByZXZpZXcsXG4gICAgICBwcmVmaWxsOiB7XG4gICAgICAgIC4uLnByZWZpbGxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pO1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHBheW1lbnRSZXF1ZXN0KTtcbiAgICBjb25zdCBzZXNzaW9uQ29udGV4dCA9IHtcbiAgICAgIHNlc3Npb24sXG4gICAgICBjb25uZWN0aW9uOiBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogYXBwbGVQYXlDcG0ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBjdXN0b21QYXJhbXM/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBleGNsdWRlUHJvcHMocHJlZmlsbCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGxvZ19fJGsoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbmNhbmNlbCA9IGhhbmRsZUNhbmNlbDtcbiAgICAgIHNlc3Npb24ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogY3JlYXRlQXBwbGVQYXlUb3RhbCh7XG4gICAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXMub3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgICAgICAgZGVmYXVsdExhYmVsOiBhcHBsZVBheUNwbT8ubWV0YWRhdGE/LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgICAgICBwcmVmaWxsXG4gICAgICAgICAgfSkudG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odXBkYXRlKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVBheW1lbnRBdXRob3JpemVkJDEoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGVycl9fJGwoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRqLCBlcnJfXzogZXJyX18kayB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtZ29vZ2xlLXBheVwiKTtcbmNvbnN0IGluaXRBaXJ3YWxsZXhHb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDIpO1xuICAgIGlmICghZ29vZ2xlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGooXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyRrKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kaihcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEdvb2dsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSkge1xuICAgICAgZXJyX18kayhcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGVudmlyb25tZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQoY29udGV4dC5iYXNlVXJsKTtcbiAgICBpZiAoZW52aXJvbm1lbnQgPT09IFwiUFJPRFVDVElPTlwiICYmICFwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpIHtcbiAgICAgIGVycl9fJGsoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRqKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgICAgcHJlZmlsbCxcbiAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgY29uc3QgeyByZXN1bHQ6IGlzUmVhZHlUb1BheSB9ID0gYXdhaXQgY2xpZW50LmlzUmVhZHlUb1BheShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgaWYgKCFpc1JlYWR5VG9QYXkpIHtcbiAgICAgICAgbG9nX18kaihcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpO1xuICAgICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRrKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgZXJyKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3Qgb25Hb29nbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBPanNGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZ29vZ2xlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJGsoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkdvb2dsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BaXJ3YWxsZXhHb29nbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kaihcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDIpO1xuICAgIGNvbnN0IHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgIHByZWZpbGwsXG4gICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgdHJhY2soXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogZ29vZ2xlUGF5Q3BtLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogZXhjbHVkZVByb3BzKHByZWZpbGwsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhID0gYXdhaXQgY2xpZW50LmxvYWRQYXltZW50RGF0YShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgbG9nX18kaihcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5KG5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgICAgbWVyZ2VkSW5wdXRzLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgY3VzdG9tUGFyYW1zPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICBsb2dfXyRqKFwiX19fXCIsIG5vbkNkZUZvcm1GaWVsZHMpO1xuICAgICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFBheW1lbnRUb2tlbiA9IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy50b2tlbml6YXRpb25EYXRhPy50b2tlbjtcbiAgICAgIGlmICghZW5jcnlwdGVkUGF5bWVudFRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzdGFydEZsb3dOZXh0QWN0aW9ucyA9IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgICBsb2dfXyRqKFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwgc3RhcnRGbG93TmV4dEFjdGlvbnMpO1xuICAgICAgbGV0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgICAvLyBHb29nbGVQYXkncyBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbiBwcm92aWRlZCB0byB2ZXJpZnkgdGhlIGNvbnNlbnQgZmlyc3RcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogc3RhcnRGbG93TmV4dEFjdGlvbnM/LmNvbnNlbnRfaWQsXG4gICAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZ29vZ2xlcGF5XCIsXG4gICAgICAgICAgICBnb29nbGVwYXk6IHtcbiAgICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IGVuY3J5cHRlZFBheW1lbnRUb2tlblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2dfXyRqKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICBsZXQgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICAgKTtcbiAgICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEgJiYgbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCkge1xuICAgICAgICBsb2dfXyRqKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgbmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgICB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRqKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhICYmICFvdXJQbUlkKSB7XG4gICAgICAgIGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICB0aGVpcl9wbV9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkLFxuICAgICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IG5leHRBY3Rpb25NZXRhZGF0YS5jb25zZW50X2lkXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kaihcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICB9XG4gICAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGsoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGksIGVycl9fOiBlcnJfXyRqIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImtsYXJuYVwiKTtcbmNvbnN0IEFpcndhbGxleEtsYXJuYUNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImtsYXJuYVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHt9KS5udWxsaXNoKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIilcbn0pO1xuY29uc3QgaW5pdEFpcndhbGxleEtsYXJuYUZsb3cgPSBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgY29uc3Qga2xhcm5hQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFpcndhbGxleEtsYXJuYUNwbSk7XG4gIGlmICgha2xhcm5hQ3BtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiS2xhcm5hIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgfVxuICBjb25zdCBzdGFydEZsb3cgPSAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIE9qc0Zsb3dzLmFpcndhbGxleEtsYXJuYS5ydW4oe1xuICAgICAgY29udGV4dCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDoga2xhcm5hQ3BtLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgY3VzdG9tUGFyYW1zOiBjdXN0b21QYXJhbXMgPz8ge31cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgIHN0YXJ0Rmxvd1xuICB9O1xufTtcbmNvbnN0IHJ1bkFpcndhbGxleEtsYXJuYUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICB0cnkge1xuICAgICAgbG9nX18kaShgUnVubmluZyBLbGFybmEgZmxvdy4uLmAsIGN1c3RvbVBhcmFtcyk7XG4gICAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgICBjb25zdCBpc0Fub255bW91cyA9IGZhbHNlO1xuICAgICAgbG9nX18kaShgVmVyaWZ5aW5nIENQTS4uLmApO1xuICAgICAgY29uc3QgY3BtID0gQWlyd2FsbGV4S2xhcm5hQ3BtLnBhcnNlKGNoZWNrb3V0UGF5bWVudE1ldGhvZCk7XG4gICAgICBsb2dfXyRpKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzYCk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsIHtcbiAgICAgICAgLi4uaXNBbm9ueW1vdXMgPyBnZW5lcmF0ZUFub255bW91c1ZhbHVlcygpIDogdm9pZCAwLFxuICAgICAgICAuLi5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5ld0N1c3RvbWVyRmllbGRzID0gY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICAgIGxvZ19fJGkoXCJOZXcgY3VzdG9tZXIgZmllbGRzXCIsIG5ld0N1c3RvbWVyRmllbGRzKTtcbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncylcbiAgICAgIH0pO1xuICAgICAgY29uc29sZS5sb2coXCJzdGFydFBheW1lbnRGbG93UmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImtsYXJuYVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGNwbSxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0OiB7XG4gICAgICAgICAgcGF5bWVudF9tZXRob2RzOiBbXVxuICAgICAgICB9LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGooXCJLbGFybmEgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7IHBheW1lbnRfbWV0aG9kOiBcImtsYXJuYVwiLCBlcnJvcjogZXJyIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCBBcHBsZVBheUNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBHb29nbGVQYXlDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGVNZXJjaGFudChldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgcHJlcGFyZVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBldmVudC52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IGNvbnRleHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UubmV4dF9hY3Rpb25fbWV0YWRhdGE7XG4gICAgY29uc3QgcGF5bWVudFNlc3Npb25SZXNwb25zZSA9IG5leHRBY3Rpb25NZXRhZGF0YT8uW1wiYXBwbGVfcGF5X3Nlc3Npb25cIl07XG4gICAgaWYgKCFwYXltZW50U2Vzc2lvblJlc3BvbnNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgfVxuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihwYXltZW50U2Vzc2lvblJlc3BvbnNlKTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLnBheW1lbnRTZXNzaW9uUmVzcG9uc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29udGV4dC5zZXNzaW9uLmFib3J0KCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVQYXltZW50QXV0aG9yaXplZChldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHBheW1lbnREYXRhID0gZXZlbnQucGF5bWVudDtcbiAgICBjb25zdCBmb3JtSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheShjb250ZXh0Lm5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoZm9ybUlucHV0cywgY29udGV4dC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgY29udGV4dC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3QgbW9iaWxlV2FsbGV0UGF5bWVudERhdGEgPSB7XG4gICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uQVBQTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShwYXltZW50RGF0YS50b2tlbi5wYXltZW50RGF0YSkpXG4gICAgfTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjb250ZXh0LnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiBtb2JpbGVXYWxsZXRQYXltZW50RGF0YVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuY29uc3QgeyBsb2dfXzogbG9nX18kaCwgZXJyX186IGVycl9fJGkgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXV0aG5ldC1hcHBsZXBheVwiKTtcbmNvbnN0IGluaXRBdXRobmV0QXBwbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0pO1xuICAgIGlmICghYXBwbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kaChcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkQXBwbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSkge1xuICAgICAgbG9nX18kaChcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50cyA9IGF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKTtcbiAgICBpZiAoIWNhbk1ha2VQYXltZW50cykge1xuICAgICAgbG9nX18kaChcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGFwcGxlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uQXBwbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBPanNGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBhcHBsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRpKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IGVyclxuICAgICAgICB9KTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25BcHBsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BdXRobmV0QXBwbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgZm9ybUNhbGxiYWNrc1xuICB9KSA9PiB7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0KHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIHByZWZpbGwsXG4gICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pO1xuICAgIHRyYWNrKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbCxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCBwYXltZW50UmVxdWVzdCk7XG4gICAgY29uc3Qgc2Vzc2lvbkNvbnRleHQgPSB7XG4gICAgICBzZXNzaW9uLFxuICAgICAgY29ubmVjdGlvbjogY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBpc1NldHVwTW9kZSxcbiAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3NcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXNzaW9uLm9uY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBsb2dfXyRoKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgaGFuZGxlVmFsaWRhdGVNZXJjaGFudChldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3MiA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiBjcmVhdGVBcHBsZVBheVRvdGFsKHtcbiAgICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IGluaXRpYWxQcmV2aWV3MixcbiAgICAgICAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICAgICAgcHJlZmlsbFxuICAgICAgICAgIH0pLnRvdGFsXG4gICAgICAgIH07XG4gICAgICAgIHNlc3Npb24uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVQYXltZW50QXV0aG9yaXplZChldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kaShcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGcsIGVycl9fOiBlcnJfXyRoIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF1dGhuZXQtZ29vZ2xlcGF5XCIpO1xuY29uc3QgaW5pdEF1dGhuZXRHb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kZyhcIkluaXRpYWxpemluZyBBdXRobmV0IEdvb2dsZVBheSBmbG93XCIpO1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0pO1xuICAgIGlmICghZ29vZ2xlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGcoXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyRoKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZyhcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEdvb2dsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSkge1xuICAgICAgZXJyX18kaChcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGcoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgICBwcmVmaWxsLFxuICAgICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBjb25zdCB7IHJlc3VsdDogaXNSZWFkeVRvUGF5IH0gPSBhd2FpdCBjbGllbnQuaXNSZWFkeVRvUGF5KHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBpZiAoIWlzUmVhZHlUb1BheSkge1xuICAgICAgICBsb2dfXyRnKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIik7XG4gICAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGgoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCBlcnIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBvbkdvb2dsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBnb29nbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kaChcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICB0cmFjayhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IGVyclxuICAgICAgICB9KTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25Hb29nbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQXV0aG5ldEdvb2dsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtKTtcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gZ29vZ2xlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgcHJlZmlsbCxcbiAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICB0cmFjayhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGEgPSBhd2FpdCBjbGllbnQubG9hZFBheW1lbnREYXRhKHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBsb2dfXyRnKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhHb29nbGVQYXkobm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG1lcmdlZElucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFBheW1lbnRUb2tlbiA9IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy50b2tlbml6YXRpb25EYXRhPy50b2tlbjtcbiAgICAgIGlmICghZW5jcnlwdGVkUGF5bWVudFRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICAgIH0pO1xuICAgICAgbG9nX18kZyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uR09PR0xFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgICAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoZW5jcnlwdGVkUGF5bWVudFRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRoKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCBnZXRGcmF1ZE1ldGFkYXRhID0gKCkgPT4ge1xuICBjb25zdCBzY3JlZW5faGVpZ2h0ID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLmhlaWdodCA6IG51bGw7XG4gIGNvbnN0IHNjcmVlbl93aWR0aCA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi53aWR0aCA6IG51bGw7XG4gIGNvbnN0IGNvbG9yX2RlcHRoID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLmNvbG9yRGVwdGggOiBudWxsO1xuICBjb25zdCBqYXZhX2VuYWJsZWQgPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IuamF2YUVuYWJsZWQoKSA6IGZhbHNlO1xuICBjb25zdCB1c2VyX2FnZW50ID0gd2luZG93ICYmIHdpbmRvdy5uYXZpZ2F0b3IgPyB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCA6IG51bGw7XG4gIGNvbnN0IGFjY2VwdF9oZWFkZXIgPSBcInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjhcIjtcbiAgbGV0IGxhbmd1YWdlID0gbnVsbDtcbiAgaWYgKHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yKSB7XG4gICAgbGFuZ3VhZ2UgPSB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlID8gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSA6IHdpbmRvdy5uYXZpZ2F0b3IuYnJvd3Nlckxhbmd1YWdlO1xuICB9XG4gIGNvbnN0IHRpbWVfem9uZV9vZmZzZXQgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHJldHVybiB7XG4gICAgY29sb3JfZGVwdGgsXG4gICAgamF2YV9lbmFibGVkLFxuICAgIGphdmFzY3JpcHRfZW5hYmxlZDogdHJ1ZSxcbiAgICBsYW5ndWFnZSxcbiAgICBzY3JlZW5faGVpZ2h0LFxuICAgIHNjcmVlbl93aWR0aCxcbiAgICB0aW1lX3pvbmVfb2Zmc2V0LFxuICAgIHVzZXJfYWdlbnQsXG4gICAgYWNjZXB0X2hlYWRlclxuICB9O1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kZiwgZXJyX186IGVycl9fJGcgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY3licy1mcmFtZVwiKTtcbmNvbnN0IGF0dGFjaERldmljZURhdGFDb2xsZWN0b3IgPSAocG9zdFVybCwgYWNjZXNzVG9rZW4pID0+IHtcbiAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcbiAgaWZyYW1lLm5hbWUgPSBcImNhcmRpbmFsX2NvbGxlY3Rpb25faWZyYW1lXCI7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gIGlmcmFtZS5zdHlsZS53aWR0aCA9IFwiMTBweFwiO1xuICBpZnJhbWUuc3R5bGUuaGVpZ2h0ID0gXCIxMHB4XCI7XG4gIGNvbnN0IGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgZm9ybS5hY3Rpb24gPSBwb3N0VXJsO1xuICBmb3JtLm1ldGhvZCA9IFwiUE9TVFwiO1xuICBmb3JtLnRhcmdldCA9IGlmcmFtZS5uYW1lO1xuICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgaW5wdXQudHlwZSA9IFwiaGlkZGVuXCI7XG4gIGlucHV0Lm5hbWUgPSBcIkpXVFwiO1xuICBpbnB1dC52YWx1ZSA9IGFjY2Vzc1Rva2VuO1xuICBmb3JtLmFwcGVuZENoaWxkKGlucHV0KTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZvcm0pO1xuICBjb25zdCBkZXRhY2ggPSAoKSA9PiB7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZm9ybSk7XG4gIH07XG4gIHJldHVybiB7IGZvcm0sIGRldGFjaCB9O1xufTtcbmNvbnN0IHJ1bkRldmljZURhdGFDb2xsZWN0aW9uID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHsgcG9zdFVybCwgYWNjZXNzVG9rZW4gfSA9IHBhcmFtcztcbiAgICBjb25zdCBleHBlY3RlZE9yaWdpbiA9IG5ldyBVUkwocG9zdFVybCkub3JpZ2luO1xuICAgIGNvbnN0IHsgZm9ybSwgZGV0YWNoIH0gPSBhdHRhY2hEZXZpY2VEYXRhQ29sbGVjdG9yKHBvc3RVcmwsIGFjY2Vzc1Rva2VuKTtcbiAgICBsb2dfXyRmKFwiQXR0YWNoZWQgZGV2aWNlIGRhdGEgY29sbGVjdG9yXCIpO1xuICAgIGNvbnN0IGhhbmRsZUNvbGxlY3Rpb25FdmVudCA9IChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50Lm9yaWdpbiAhPT0gZXhwZWN0ZWRPcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XG4gICAgICBsb2dfXyRmKFwiUmVjZWl2ZWQgZXZlbnQgZnJvbSBkZXZpY2UgZGF0YSBjb2xsZWN0b3I6XCIsIGRhdGEpO1xuICAgICAgaWYgKGRhdGFbXCJNZXNzYWdlVHlwZVwiXSA9PT0gXCJwcm9maWxlLmNvbXBsZXRlZFwiKSB7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGRldGFjaCgpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZUNvbGxlY3Rpb25FdmVudCk7XG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZUNvbGxlY3Rpb25FdmVudCk7XG4gICAgICBsb2dfXyRmKFwiQXR0YWNoZWQgbGlzdGVuZXIgdG8gd2luZG93XCIpO1xuICAgICAgZm9ybS5zdWJtaXQoKTtcbiAgICAgIGxvZ19fJGYoXCJTdWJtaXR0ZWQgZm9ybVwiKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyX18kZyhcIkVycm9yIHN1Ym1pdHRpbmcgZm9ybTpcIiwgZXJyb3IpO1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IHJ1blBheWVyQXV0aCA9IChwYXJhbXMpID0+IHtcbiAgY29uc3QgeyBzdGVwVXBVcmwsIGFjY2Vzc1Rva2VuLCBtZXJjaGFudERhdGEsIGlmcmFtZSwgaG9zdCB9ID0gcGFyYW1zO1xuICBjb25zdCBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZvcm1cIik7XG4gIGZvcm0uYWN0aW9uID0gc3RlcFVwVXJsO1xuICBmb3JtLm1ldGhvZCA9IFwiUE9TVFwiO1xuICBmb3JtLnRhcmdldCA9IGlmcmFtZS5uYW1lO1xuICBjb25zdCB0b2tlbklucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICB0b2tlbklucHV0LnR5cGUgPSBcImhpZGRlblwiO1xuICB0b2tlbklucHV0Lm5hbWUgPSBcIkpXVFwiO1xuICB0b2tlbklucHV0LnZhbHVlID0gYWNjZXNzVG9rZW47XG4gIGNvbnN0IG1kSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gIG1kSW5wdXQudHlwZSA9IFwiaGlkZGVuXCI7XG4gIG1kSW5wdXQubmFtZSA9IFwiTURcIjtcbiAgbWRJbnB1dC52YWx1ZSA9IG1lcmNoYW50RGF0YTtcbiAgZm9ybS5hcHBlbmRDaGlsZCh0b2tlbklucHV0KTtcbiAgZm9ybS5hcHBlbmRDaGlsZChtZElucHV0KTtcbiAgaG9zdC5hcHBlbmRDaGlsZChmb3JtKTtcbiAgcmV0dXJuIGZvcm07XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRlLCBlcnJfXzogZXJyX18kZiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjeWJzXCIpO1xuY29uc3QgQ3liZXJzb3VyY2VBY3Rpb25QYXlsb2FkID0gei5vYmplY3Qoe1xuICBzdGVwX3VwX3VybDogei5zdHJpbmcoKSxcbiAgYWNjZXNzX3Rva2VuOiB6LnN0cmluZygpLFxuICBkZF91cmw6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgZGRfdG9rZW46IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgbWVyY2hhbnRfZGF0YTogei5zdHJpbmcoKVxufSk7XG5jb25zdCBGUklFTkRMWV9FUlIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG5jb25zdCBwYXJzZVJlc3BvbnNlSGVhZGVycyQxID0gKHVzZXJBY3Rpb24pID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBDeWJlcnNvdXJjZUFjdGlvblBheWxvYWQuc2FmZVBhcnNlKHVzZXJBY3Rpb24pO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRmKGBDeWJlcnNvdXJjZSAzRFMgaXMgcmVxdWlyZWQgYnV0IHVzZXIgYWN0aW9uIGlzIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KHVzZXJBY3Rpb24pfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihGUklFTkRMWV9FUlIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc0N5YmVyc291cmNlM2RzID0gKHVzZXJBY3Rpb24pID0+IHtcbiAgcmV0dXJuIHVzZXJBY3Rpb25bXCJ0eXBlXCJdID09PSBcImN5YmVyc291cmNlX3BheWVyX2F1dGhcIjtcbn07XG5jb25zdCBoYW5kbGVDeWJlcnNvdXJjZTNkcyA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgY29uc3QgeyBzdGVwVXBVcmwsIGFjY2Vzc1Rva2VuLCBtZXJjaGFudERhdGEsIGlmcmFtZSwgaG9zdCwgY2FuY2VsQnV0dG9uIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGV4cGVjdGVkT3JpZ2luID0gbmV3IFVSTChzdGVwVXBVcmwpLm9yaWdpbjtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGxvZ19fJGUoXCJDbGVhbmluZyB1cCBDeWJlcnNvdXJjZSAzRFMgZmxvd1wiKTtcbiAgICAgIGNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DYW5jZWwpO1xuICAgICAgaG9zdC5yZW1vdmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgbG9nX18kZShcIkN5YmVyc291cmNlIDNEUyBjYW5jZWxsZWRcIik7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChzdGF0dXMpID0+IHtcbiAgICAgIGxvZ19fJGUoXCJDeWJlcnNvdXJjZSAzRFMgY29tcGxldGVkIHdpdGggc3RhdHVzOlwiLCBzdGF0dXMpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogc3RhdHVzLnN0YXR1cywgY2xlYW51cCB9KTtcbiAgICAgIGNsZWFudXBQb2xsaW5nKCk7XG4gICAgfTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoaWZyYW1lLCBvblN1Y2Nlc3MsIGV4cGVjdGVkT3JpZ2luLCBcInBpbmctM2RzLXN0YXR1c1wiLCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UpO1xuICAgIGNvbnN0IGNsZWFudXBQb2xsaW5nID0gaGFuZGxlRXZlbnRzKHtcbiAgICAgIGVsZW1lbnRzOiB7IGhvc3QsIGNhbmNlbEJ1dHRvbiB9LFxuICAgICAgcG9sbGluZ0ludGVydmFsLFxuICAgICAgcmVzb2x2ZTogKHN0YXR1cykgPT4ge1xuICAgICAgICByZXNvbHZlKHsgc3RhdHVzOiBzdGF0dXMuc3RhdHVzLCBjbGVhbnVwIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DYW5jZWwpO1xuICAgIGNvbnN0IGZvcm0gPSBydW5QYXllckF1dGgoe1xuICAgICAgc3RlcFVwVXJsLFxuICAgICAgYWNjZXNzVG9rZW4sXG4gICAgICBtZXJjaGFudERhdGEsXG4gICAgICBpZnJhbWUsXG4gICAgICBob3N0XG4gICAgfSk7XG4gICAgZm9ybS5zdWJtaXQoKTtcbiAgfSk7XG59O1xuY29uc3QgcnVuQ3liZXJzb3VyY2UzZHNGbG93ID0gYXN5bmMgKHVzZXJBY3Rpb24pID0+IHtcbiAgY29uc3QgcGF5bG9hZCA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDEodXNlckFjdGlvbik7XG4gIGNvbnN0IHsgc3RlcF91cF91cmwsIGFjY2Vzc190b2tlbiwgZGRfdXJsLCBkZF90b2tlbiwgbWVyY2hhbnRfZGF0YSB9ID0gcGF5bG9hZDtcbiAgaWYgKGRkX3VybCAmJiBkZF90b2tlbikge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25SZXN1bHQgPSBhd2FpdCBydW5EZXZpY2VEYXRhQ29sbGVjdGlvbih7XG4gICAgICBwb3N0VXJsOiBkZF91cmwsXG4gICAgICBhY2Nlc3NUb2tlbjogZGRfdG9rZW5cbiAgICB9KTtcbiAgICBsb2dfXyRlKFwiRGV2aWNlIGRhdGEgY29sbGVjdGlvbiBjb21wbGV0ZWQgd2l0aCBzdGF0dXM6XCIsIGNvbGxlY3Rpb25SZXN1bHQuU3RhdHVzKTtcbiAgfSBlbHNlIHtcbiAgICBlcnJfXyRmKFwiTm8gZGV2aWNlIGRhdGEgY29sbGVjdGlvbiBVUkwgb3IgdG9rZW4gcHJvdmlkZWRcIik7XG4gIH1cbiAgY29uc3QgeyBob3N0LCBpZnJhbWUsIGNhbmNlbEJ1dHRvbiB9ID0gY3JlYXRlQW5kT3BlbkZyYW1lKFwiXCIsIHsgbmFtZTogXCJjYXJkaW5hbF9hdXRoX2lmcmFtZVwiIH0pO1xuICBsb2dfXyRlKFwiUnVubmluZyBDeWJlcnNvdXJjZSAzRFMgZmxvd1wiKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlQ3liZXJzb3VyY2UzZHMoe1xuICAgIHN0ZXBVcFVybDogc3RlcF91cF91cmwsXG4gICAgYWNjZXNzVG9rZW46IGFjY2Vzc190b2tlbixcbiAgICBtZXJjaGFudERhdGE6IG1lcmNoYW50X2RhdGEsXG4gICAgaWZyYW1lLFxuICAgIGhvc3QsXG4gICAgY2FuY2VsQnV0dG9uXG4gIH0pO1xuICByZXN1bHQuY2xlYW51cCgpO1xuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLlNVQ0NFU1MpIHtcbiAgICBsb2dfXyRlKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWRcIik7XG4gICAgcmV0dXJuO1xuICB9IGVsc2Uge1xuICAgIGFzc2VydE5ldmVyKHJlc3VsdC5zdGF0dXMpO1xuICB9XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRkLCBlcnJfXzogZXJyX18kZSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJwb2NreXQtY2NcIik7XG5jb25zdCBQb2NreXQzZHNFcnJvclJlc3BvbnNlSGVhZGVycyA9IHoub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgcGFyc2VSZXNwb25zZUhlYWRlcnMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBQb2NreXQzZHNFcnJvclJlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JSZXNwb25zZUhlYWRlcnMpfWA7XG4gICAgZXJyX18kZShkZXZFcnIpO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgcGFyc2VWYXVsdElkRnJvbTNkc0hyZWYgPSAoaHJlZikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHZhdWx0SWQgPSBuZXcgVVJMKGhyZWYgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInZhdWx0SWRcIik7XG4gICAgaWYgKCF2YXVsdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICB9XG4gICAgbG9nX18kZChgM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbVmF1bHQgSUQ6ICR7dmF1bHRJZH1dYCk7XG4gICAgcmV0dXJuIHZhdWx0SWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgZXJyTXNnID0gYEVycm9yIHZlcmlmeWluZyAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5gO1xuICAgIGVycl9fJGUoZXJyTXNnLCBgUmVzdWx0aW5nIFVSTDogJHtocmVmfS5cbkVycm9yOiAke2dldEVycm9yTWVzc2FnZShlcnJvcil9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XG4gIH1cbn07XG5jb25zdCBwYXJzZUFyZ0Zyb21IcmVmID0gKGhyZWYsIGFyZ05hbWUpID0+IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChocmVmKTtcbiAgcmV0dXJuIHVybC5zZWFyY2hQYXJhbXMuZ2V0KGFyZ05hbWUpO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc1BvY2t5dDNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLXBvY2t5dC0zZHMtdXJsXCJdICE9PSB2b2lkIDA7XG59O1xuY29uc3QgcnVuUG9ja3l0M2RzRmxvdyA9IGFzeW5jIChiYXNlVXJsLCBlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBoZWFkZXJzID0gcGFyc2VSZXNwb25zZUhlYWRlcnMoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCh7IHVybDogaGVhZGVyc1tcIm9wLXBvY2t5dC0zZHMtdXJsXCJdLCBiYXNlVXJsIH0pO1xuICBjb25zdCB2YXVsdElkID0gcGFyc2VWYXVsdElkRnJvbTNkc0hyZWYocmVzdWx0LmhyZWYgPz8gXCJcIik7XG4gIGNvbnN0IGV4dHJhTWV0YWRhdGFGb3JDaGVja291dCA9IHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgdmF1bHRfaWQ6IHZhdWx0SWQsXG4gICAgICB0cmFuc2FjdGlvbl9ubzogaGVhZGVyc1tcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IGhlYWRlcnNbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xuICByZXR1cm4gZXh0cmFNZXRhZGF0YUZvckNoZWNrb3V0O1xufTtcblxuY29uc3QgeyBsb2dfXzogc3RyaXBlTG9nX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWNjXCIpO1xuY29uc3QgU3RyaXBlM0RTTWV0YWRhdGFQYXlsb2FkID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBzdHJpcGVDQzNEU0Zsb3cgPSBhc3luYyAobmV4dEFjdGlvbk1ldGFkYXRhKSA9PiB7XG4gIHRyYWNrKFwiM2RzX3N0cmlwZV9yZWRpcmVjdFwiLCB7XG4gICAgLi4ubmV4dEFjdGlvbk1ldGFkYXRhXG4gIH0pO1xuICBzdHJpcGVMb2dfXyhg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldC5zdWJzdHJpbmcoMCwgOCl9Li4uXWApO1xuICBhd2FpdCBsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93KG5leHRBY3Rpb25NZXRhZGF0YSk7XG4gIHRyYWNrKFwiM2RzX3N0cmlwZV9jb21wbGV0ZVwiKTtcbiAgc3RyaXBlTG9nX18oXCLilbAgU3RyaXBlIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIik7XG59O1xuY29uc3QgcGFyc2VVc2VyRkVQYXlsb2FkID0gKHBheWxvYWQpID0+IHtcbiAgY29uc3QgcGFyc2VkID0gU3RyaXBlM0RTTWV0YWRhdGFQYXlsb2FkLnNhZmVQYXJzZShwYXlsb2FkKTtcbiAgaWYgKCFwYXJzZWQuc3VjY2Vzcykge1xuICAgIHRocm93IG5ldyBFcnJvcihgU3RyaXBlIDNEUyBtZXRhZGF0YSBoYXMgdW5leHBlY3RlZCBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkocGFyc2VkLmVycm9yLmVycm9ycyl9YCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzdHJpcGVfcGs6IHBhcnNlZC5kYXRhLnN0cmlwZV9wayxcbiAgICBjbGllbnRfc2VjcmV0OiBwYXJzZWQuZGF0YS5jbGllbnRfc2VjcmV0LFxuICAgIHN0cmlwZV9wbV9pZDogcGFyc2VkLmRhdGEuc3RyaXBlX3BtX2lkXG4gIH07XG59O1xuY29uc3QgYnVpbGRTdHJpcGVCbnBsUmV0dXJuVXJsID0gKGJhc2VVcmwsIGNoZWNrb3V0QXR0ZW1wdElkKSA9PiB7XG4gIGlmICghY2hlY2tvdXRBdHRlbXB0SWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBhdHRlbXB0IElEIGlzIHJlcXVpcmVkIGZvciBTdHJpcGUgQk5QTCByZWRpcmVjdFwiKTtcbiAgfVxuICBjb25zdCByZXR1cm5VcmwgPSBuZXcgVVJMKFwiL2FwcC9wb3N0LWFjdGlvbi9yZWRpcmVjdC9cIiwgYmFzZVVybCk7XG4gIHJldHVyblVybC5zZWFyY2hQYXJhbXMuc2V0KFwiY2F0dFwiLCBjaGVja291dEF0dGVtcHRJZCk7XG4gIHJldHVyblVybC5zZWFyY2hQYXJhbXMuc2V0KFwib3BlbnBheV9wb3B1cFwiLCBcInRydWVcIik7XG4gIHJldHVybiByZXR1cm5VcmwudG9TdHJpbmcoKTtcbn07XG5jb25zdCBCTlBMX1BPUFVQX1JFU0VSVkFUSU9OX1RJTUVPVVRfTVMgPSA2MCAqIDFlMztcbmNvbnN0IEJOUExfUE9QVVBfV0lORE9XX09QVElPTlMgPSB7IHdpZHRoOiA1MDAsIGhlaWdodDogNzAwIH07XG5sZXQgYWN0aXZlQm5wbFBvcHVwID0gbnVsbDtcbmNvbnN0IGNsb3NlU3RyaXBlQm5wbFBvcHVwID0gKHBvcHVwKSA9PiB7XG4gIGlmICghcG9wdXApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHBvcHVwLnRpbWVvdXQpIHtcbiAgICBjbGVhclRpbWVvdXQocG9wdXAudGltZW91dCk7XG4gICAgcG9wdXAudGltZW91dCA9IG51bGw7XG4gIH1cbiAgcG9wdXAuYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gIHBvcHVwLndpbmRvdy5jbG9zZSgpO1xuICBpZiAoYWN0aXZlQm5wbFBvcHVwID09PSBwb3B1cCkge1xuICAgIGFjdGl2ZUJucGxQb3B1cCA9IG51bGw7XG4gIH1cbn07XG5jb25zdCBhYm9ydFN0cmlwZUJucGxQb3B1cEZsb3cgPSAoKSA9PiBjbG9zZVN0cmlwZUJucGxQb3B1cChhY3RpdmVCbnBsUG9wdXApO1xubGV0IGFjdGl2ZVN0cmlwZUJucGxGbG93ID0gbnVsbDtcbmNvbnN0IGNyZWF0ZVN0cmlwZUJucGxGbG93Q29udHJvbGxlciA9IChydW4pID0+IHtcbiAgY29uc3Qgb3duZXIgPSB7fTtcbiAgY29uc3QgYWJvcnRBY3RpdmVGbG93ID0gKCkgPT4ge1xuICAgIGFjdGl2ZVN0cmlwZUJucGxGbG93Py5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICBhY3RpdmVTdHJpcGVCbnBsRmxvdyA9IG51bGw7XG4gICAgYWJvcnRTdHJpcGVCbnBsUG9wdXBGbG93KCk7XG4gIH07XG4gIGNvbnN0IGFib3J0RmxvdyA9ICgpID0+IHtcbiAgICBpZiAoYWN0aXZlU3RyaXBlQm5wbEZsb3c/Lm93bmVyID09PSBvd25lcikge1xuICAgICAgYWJvcnRBY3RpdmVGbG93KCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBzdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgYWJvcnRBY3RpdmVGbG93KCk7XG4gICAgY29uc3QgY3VycmVudEZsb3cgPSB7XG4gICAgICBvd25lcixcbiAgICAgIGFib3J0Q29udHJvbGxlcjogbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgfTtcbiAgICBhY3RpdmVTdHJpcGVCbnBsRmxvdyA9IGN1cnJlbnRGbG93O1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBydW4oY3VzdG9tUGFyYW1zLCBjdXJyZW50Rmxvdy5hYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGFjdGl2ZVN0cmlwZUJucGxGbG93ID09PSBjdXJyZW50Rmxvdykge1xuICAgICAgICBhY3RpdmVTdHJpcGVCbnBsRmxvdyA9IG51bGw7XG4gICAgICAgIGFib3J0U3RyaXBlQm5wbFBvcHVwRmxvdygpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHsgc3RhcnRGbG93LCBhYm9ydEZsb3cgfTtcbn07XG5jb25zdCB0aHJvd0lmU3RyaXBlQm5wbEZsb3dBYm9ydGVkID0gKGFib3J0U2lnbmFsLCBwb3B1cE5hbWUpID0+IHtcbiAgaWYgKGFib3J0U2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cG9wdXBOYW1lfSBwYXltZW50IGNhbmNlbGxlZGApO1xuICB9XG59O1xuY29uc3QgU1RSSVBFX0JOUExfUE9QVVBfQkxPQ0tFRF9FUlJPUiA9IFwiRmFpbGVkIHRvIG9wZW4gcG9wdXAg4oCUIHBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZVwiO1xuY29uc3QgcmVzZXJ2ZVN0cmlwZUJucGxQb3B1cCA9IChwb3B1cE5hbWUpID0+IHtcbiAgYWJvcnRTdHJpcGVCbnBsUG9wdXBGbG93KCk7XG4gIHRyeSB7XG4gICAgY29uc3QgcG9wdXAgPSBvcGVuUG9wdXBXaW5kb3cocG9wdXBOYW1lLCBcImFib3V0OmJsYW5rXCIsIEJOUExfUE9QVVBfV0lORE9XX09QVElPTlMpO1xuICAgIHRyeSB7XG4gICAgICBwb3B1cC5kb2N1bWVudC50aXRsZSA9IGBPcGVuaW5nICR7cG9wdXBOYW1lfeKApmA7XG4gICAgICBwb3B1cC5kb2N1bWVudC5ib2R5LnRleHRDb250ZW50ID0gYE9wZW5pbmcgJHtwb3B1cE5hbWV94oCmYDtcbiAgICAgIHBvcHVwLmRvY3VtZW50LmJvZHkuc3R5bGUuY3NzVGV4dCA9IFtcbiAgICAgICAgXCJhbGlnbi1pdGVtczpjZW50ZXJcIixcbiAgICAgICAgXCJiYWNrZ3JvdW5kOiNmZmZcIixcbiAgICAgICAgXCJjb2xvcjojMTExODI3XCIsXG4gICAgICAgIFwiZGlzcGxheTpmbGV4XCIsXG4gICAgICAgICdmb250OjUwMCAxNnB4IHN5c3RlbS11aSwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxcIlNlZ29lIFVJXCIsc2Fucy1zZXJpZicsXG4gICAgICAgIFwianVzdGlmeS1jb250ZW50OmNlbnRlclwiLFxuICAgICAgICBcIm1hcmdpbjowXCIsXG4gICAgICAgIFwibWluLWhlaWdodDoxMDB2aFwiXG4gICAgICBdLmpvaW4oXCI7XCIpO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgICBjb25zdCBwb3B1cEhhbmRsZSA9IHtcbiAgICAgIHdpbmRvdzogcG9wdXAsXG4gICAgICB0aW1lb3V0OiBudWxsLFxuICAgICAgYWJvcnRDb250cm9sbGVyOiBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICB9O1xuICAgIHBvcHVwSGFuZGxlLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNsb3NlU3RyaXBlQm5wbFBvcHVwKHBvcHVwSGFuZGxlKSwgQk5QTF9QT1BVUF9SRVNFUlZBVElPTl9USU1FT1VUX01TKTtcbiAgICBhY3RpdmVCbnBsUG9wdXAgPSBwb3B1cEhhbmRsZTtcbiAgICByZXR1cm4gcG9wdXBIYW5kbGU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgc3RyaXBlTG9nX18oYOKUnCBDb3VsZCBub3Qgb3BlbiB0aGUgJHtwb3B1cE5hbWV9IHBvcHVwYCwgZXJyb3IpO1xuICAgIHRocm93IG5ldyBFcnJvcihTVFJJUEVfQk5QTF9QT1BVUF9CTE9DS0VEX0VSUk9SKTtcbiAgfVxufTtcbmNvbnN0IHdpdGhSZXNlcnZlZFN0cmlwZUJucGxQb3B1cCA9IGFzeW5jICh1c2VSZWRpcmVjdEZsb3csIHBvcHVwTmFtZSwgcnVuKSA9PiB7XG4gIGNvbnN0IHBvcHVwSGFuZGxlID0gdXNlUmVkaXJlY3RGbG93ID8gcmVzZXJ2ZVN0cmlwZUJucGxQb3B1cChwb3B1cE5hbWUpIDogbnVsbDtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcnVuKHBvcHVwSGFuZGxlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjbG9zZVN0cmlwZUJucGxQb3B1cChwb3B1cEhhbmRsZSk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5jb25zdCBjbGFpbVJlc2VydmVkU3RyaXBlQm5wbFBvcHVwID0gKHBvcHVwSGFuZGxlLCB1cmwpID0+IHtcbiAgaWYgKGFjdGl2ZUJucGxQb3B1cCAhPT0gcG9wdXBIYW5kbGUgfHwgcG9wdXBIYW5kbGUuYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgeyB3aW5kb3c6IHBvcHVwIH0gPSBwb3B1cEhhbmRsZTtcbiAgaWYgKHBvcHVwSGFuZGxlLnRpbWVvdXQpIHtcbiAgICBjbGVhclRpbWVvdXQocG9wdXBIYW5kbGUudGltZW91dCk7XG4gICAgcG9wdXBIYW5kbGUudGltZW91dCA9IG51bGw7XG4gIH1cbiAgaWYgKHBvcHVwLmNsb3NlZCkge1xuICAgIGNsb3NlU3RyaXBlQm5wbFBvcHVwKHBvcHVwSGFuZGxlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwb3B1cC5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICBwb3B1cC5mb2N1cygpO1xuICByZXR1cm4gcG9wdXA7XG59O1xuY29uc3QgQk5QTF9QT1BVUF9QT0xMX0lOVEVSVkFMX01TID0gMWUzO1xuY29uc3QgQk5QTF9QT1BVUF9QT0xMX0xJTUlUID0gMTUgKiA2MDtcbmNvbnN0IEJOUExfUE9QVVBfUE9MTFNfQUZURVJfQ0xPU0UgPSAzMDtcbmNvbnN0IEJOUExfRkFJTEVEX1NUQVRVU0VTID0gW1wicmVxdWlyZXNfcGF5bWVudF9tZXRob2RcIiwgXCJjYW5jZWxlZFwiXTtcbmNvbnN0IEJOUExfQVVUSE9SSVpFRF9TVEFUVVNFUyA9IFtcInByb2Nlc3NpbmdcIiwgXCJzdWNjZWVkZWRcIl07XG5jb25zdCB3YWl0Rm9yU3RyaXBlQm5wbFBvcHVwUG9sbCA9IChzaWduYWwpID0+IHtcbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfTtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0sIEJOUExfUE9QVVBfUE9MTF9JTlRFUlZBTF9NUyk7XG4gICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gIH0pO1xufTtcbmNvbnN0IHdhaXRGb3JTdHJpcGVCbnBsUG9wdXAgPSBhc3luYyAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlLCBjbGllbnRTZWNyZXQsIHBvcHVwTmFtZSwgcmVkaXJlY3RVcmwsIHBvcHVwSGFuZGxlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBvcHVwV2luZG93ID0gY2xhaW1SZXNlcnZlZFN0cmlwZUJucGxQb3B1cChwb3B1cEhhbmRsZSwgcmVkaXJlY3RVcmwpO1xuICBpZiAoIXBvcHVwV2luZG93KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3BvcHVwTmFtZX0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgfVxuICBsZXQgcG9sbHNBZnRlckNsb3NlID0gQk5QTF9QT1BVUF9QT0xMU19BRlRFUl9DTE9TRTtcbiAgdHJ5IHtcbiAgICBmb3IgKGxldCBwb2xsID0gMDsgcG9sbCA8IEJOUExfUE9QVVBfUE9MTF9MSU1JVDsgcG9sbCsrKSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yU3RyaXBlQm5wbFBvcHVwUG9sbChwb3B1cEhhbmRsZS5hYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICAgIGlmIChwb3B1cEhhbmRsZS5hYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3BvcHVwTmFtZX0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgIH1cbiAgICAgIGxldCBwYXltZW50SW50ZW50O1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyaXBlLnJldHJpZXZlUGF5bWVudEludGVudChjbGllbnRTZWNyZXQpO1xuICAgICAgICBwYXltZW50SW50ZW50ID0gcmVzdWx0LnBheW1lbnRJbnRlbnQ7XG4gICAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgICBzdHJpcGVMb2dfXyhg4pScICR7cG9wdXBOYW1lfSBwYXltZW50IHN0YXR1cyBjaGVjayBmYWlsZWQsIHJldHJ5aW5nLi4uYCwgcmVzdWx0LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3RyaXBlTG9nX18oYOKUnCAke3BvcHVwTmFtZX0gcGF5bWVudCBzdGF0dXMgY2hlY2sgZmFpbGVkLCByZXRyeWluZy4uLmAsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXR1cyA9IHBheW1lbnRJbnRlbnQ/LnN0YXR1cztcbiAgICAgIGlmIChzdGF0dXMgJiYgQk5QTF9GQUlMRURfU1RBVFVTRVMuaW5jbHVkZXMoc3RhdHVzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cG9wdXBOYW1lfSBwYXltZW50IHdhcyBub3QgYXV0aG9yaXplZGApO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXR1cyAmJiBCTlBMX0FVVEhPUklaRURfU1RBVFVTRVMuaW5jbHVkZXMoc3RhdHVzKSkge1xuICAgICAgICBzdHJpcGVMb2dfXyhg4pWwICR7cG9wdXBOYW1lfSBwb3B1cCBmbG93IGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgJiYgc3RhdHVzICE9PSBcInJlcXVpcmVzX2FjdGlvblwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtwb3B1cE5hbWV9IHBheW1lbnQgaGFzIHVuZXhwZWN0ZWQgU3RyaXBlIHN0YXR1czogJHtzdGF0dXN9YCk7XG4gICAgICB9XG4gICAgICBpZiAocG9wdXBXaW5kb3cuY2xvc2VkKSB7XG4gICAgICAgIGlmICgtLXBvbGxzQWZ0ZXJDbG9zZSA8PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3BvcHVwTmFtZX0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcG9sbHNBZnRlckNsb3NlID0gQk5QTF9QT1BVUF9QT0xMU19BRlRFUl9DTE9TRTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RyaXBlTG9nX18oYOKVsCBUaW1lZCBvdXQgY2hlY2tpbmcgJHtwb3B1cE5hbWV9IHBheW1lbnQgc3RhdHVzIGluIHRoZSBicm93c2VyOyBjaGVja2luZyB3aXRoIHRoZSBzZXJ2ZXIuLi5gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbG9zZVN0cmlwZUJucGxQb3B1cChwb3B1cEhhbmRsZSk7XG4gICAgd2luZG93LmZvY3VzKCk7XG4gIH1cbn07XG5jb25zdCBCTlBMX0NPTkZJUk1fUkVUUllfTElNSVQgPSAxMjA7XG5jb25zdCBjb25maXJtU3RyaXBlQm5wbFBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHJlcXVlc3QpID0+IHtcbiAgY29uc3QgcG9wdXBSZXF1ZXN0ID0ge1xuICAgIC4uLnJlcXVlc3QsXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAuLi5yZXF1ZXN0LnByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YSxcbiAgICAgIHN0cmlwZV9ibnBsX3BvcHVwX2Zsb3c6IHRydWVcbiAgICB9XG4gIH07XG4gIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgQk5QTF9DT05GSVJNX1JFVFJZX0xJTUlUOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhjZGVDb25uLCBwb3B1cFJlcXVlc3QpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWdldEVycm9yTWVzc2FnZShlcnJvcikuaW5jbHVkZXMoXCJbUFBBX1JFVFJZXVwiKSkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIHN0cmlwZUxvZ19fKFwi4pScIFRoZSBwb3N0LWFjdGlvbiByZWRpcmVjdCBpcyBzdGlsbCBjb25maXJtaW5nIHRoaXMgcGF5bWVudCwgcmV0cnlpbmcuLi5cIik7XG4gICAgICBhd2FpdCBzbGVlcChCTlBMX1BPUFVQX1BPTExfSU5URVJWQUxfTVMpO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJUaW1lZCBvdXQgd2hpbGUgY29uZmlybWluZyB0aGUgcGF5bWVudC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBiZWZvcmUgcGF5aW5nIGFnYWluLlwiKTtcbn07XG5cbmNvbnN0IE1BWF9DT05GSVJNX0xPT1BfSVRFUkFUSU9OUyA9IDQ7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyRjLCBlcnJfXzogZXJyX18kZCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJ1bmlmaWVkLWNjXCIpO1xuY29uc3QgdW5zYWZlbHlSdW5VbmlmaWVkQ2NGbG93ID0gYXN5bmMgKHtcbiAgY29udGV4dCxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBub25DZGVGb3JtSW5wdXRzLFxuICBmb3JtQ2FsbGJhY2tzLFxuICBjdXN0b21QYXJhbXNcbn0pID0+IHtcbiAgbG9nX18kYyhg4pScIFJ1bm5pbmcgdW5pZmllZCBDQyBmbG93Li4uYCwgeyBjaGVja291dFBheW1lbnRNZXRob2QgfSk7XG4gIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICBsb2dfXyRjKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3ByZWZpbGwubW9kZX1dYCk7XG4gIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gIGNvbnN0IGNvbW1vbkNoZWNrb3V0UGFyYW1zID0ge1xuICAgIHNlc3Npb25faWQ6IGNvbnRleHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sXG4gICAgICAvLyBCcm93c2VyIGRhdGEgbGV0cyBwcm9jZXNzb3JzIChlLmcuIEFkeWVuKSBydW4gZnJpY3Rpb25sZXNzIDNEUyBvbiBjdXN0b21lci1wcmVzZW50IGNoYXJnZXNcbiAgICAgIGJyb3dzZXI6IGdldEZyYXVkTWV0YWRhdGEoKSxcbiAgICAgIC8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgaW4gdGhlIGNoZWNrb3V0IGF0dGVtcHQgbG9nc1xuICAgICAgZGV2aWNlVG9rZW46IGdldERldmljZVRva2VuKClcbiAgICB9LFxuICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6IHRydWUsXG4gICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiB7XG4gICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9LFxuICAgIHBheW1lbnRfcm91dGVfaWQ6IGN1c3RvbVBhcmFtcy5wYXltZW50Um91dGVJZFxuICB9O1xuICBlcnJfXyRkKGN1c3RvbVBhcmFtcywgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICBsb2dfXyRjKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gUGFydGlhbCBQTXMgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkXG4gIH0pO1xuICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICBjb25zdCBzdGFydFBmUmVzdWx0ID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvd0ZvckNDKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgbG9nX18kYyhg4pScIHN0YXJ0UGYgcmVzdWx0YCwgc3RhcnRQZlJlc3VsdCk7XG4gIGlmIChzdGFydFBmUmVzdWx0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmV0dXJuU3VjY2Vzc1Jlc3VsdChwcmVmaWxsLm1vZGUsIHN0YXJ0UGZSZXN1bHQpO1xuICB9XG4gIGlmICghc3RhcnRQZlJlc3VsdC5jaGVja291dF9hdHRlbXB0X2lkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgYXR0ZW1wdCBJRCBmcm9tIFBGIHJlc3VsdFwiKTtcbiAgfVxuICByZXR1cm4gcnVuQ29uZmlybUxvb3Aoe1xuICAgIGNvbnRleHQsXG4gICAgcHJlZmlsbCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLFxuICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgc3RhcnRQZlJlc3VsdCxcbiAgICBjaGVja291dEF0dGVtcHRJZDogc3RhcnRQZlJlc3VsdC5jaGVja291dF9hdHRlbXB0X2lkXG4gIH0pO1xufTtcbmNvbnN0IHJ1bkNvbmZpcm1Mb29wID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICBjb25zdCB7XG4gICAgY29udGV4dCxcbiAgICBwcmVmaWxsLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICBzdGFydFBmUmVzdWx0LFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkXG4gIH0gPSBwYXJhbXM7XG4gIGxldCBwZlJlc3VsdCA9IHN0YXJ0UGZSZXN1bHQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTUFYX0NPTkZJUk1fTE9PUF9JVEVSQVRJT05TOyBpKyspIHtcbiAgICBsb2dfXyRjKGDilJwgUnVubmluZyBjb25maXJtIGxvb3AgaXRlcmF0aW9uICR7aX1gKTtcbiAgICB0cmFjayhcInVuaWZpZWRfY2NfY29uZmlybV9sb29wX2l0ZXJhdGlvblwiLCB7IGl0ZXJhdGlvbjogaSB9KTtcbiAgICBjb25zdCB7IHVzZXJBY3Rpb24gfSA9IHZhbGlkYXRlUGZSZXN1bHRVc2VyQWN0aW9uKHBmUmVzdWx0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlckFjdGlvblJlc3VsdCA9IGF3YWl0IHJ1blJlcXVpcmVkVXNlckFjdGlvbihjb250ZXh0LmJhc2VVcmwsIHVzZXJBY3Rpb24sIHByZWZpbGwsIG5vbkNkZUZvcm1JbnB1dHMpO1xuICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLmNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhLFxuICAgICAgICAuLi51c2VyQWN0aW9uUmVzdWx0Lm1ldGFkYXRhRm9yQ29uZmlybVN0ZXBcbiAgICAgIH07XG4gICAgICBsb2dfXyRjKGDilJwgTmV3IGV4dHJhIG1ldGFkYXRhYCwgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgICAgZXJyX18kZChg4pScIEVycm9yIGluIHJ1bm5pbmcgdXNlciBhY3Rpb24gaW4gaXRlcmF0aW9uICR7aX0uIENvbnRpbnVpbmcgdG8gY29uZmlybSBzdGVwLi4uYCwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRyYWNrKFwidW5pZmllZF9jY191c2VyX2FjdGlvbl9lcnJvclwiLCB7IGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSwgaXRlcmF0aW9uOiBpIH0pO1xuICAgIH1cbiAgICBwZlJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjaGVja291dEF0dGVtcHRJZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFcbiAgICB9KTtcbiAgICBsb2dfXyRjKGDilJwgY29uZmlybVBmIHJlc3VsdCAoaXRlcmF0aW9uICR7aX0pYCwgcGZSZXN1bHQpO1xuICAgIGlmIChwZlJlc3VsdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmV0dXJuU3VjY2Vzc1Jlc3VsdChwcmVmaWxsLm1vZGUsIHBmUmVzdWx0KTtcbiAgICB9XG4gIH1cbiAgdHJhY2soXCJ1bmlmaWVkX2NjX3VuZXhwZWN0ZWRfYnJhbmNoXCIsIHtcbiAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogcGZSZXN1bHQuY2hlY2tvdXRfYXR0ZW1wdF9pZCxcbiAgICBjb25maXJtUEZSZXN1bHQ6IHBmUmVzdWx0XG4gIH0pO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBlcnJvciwgcGxlYXNlIHRyeSBhbm90aGVyIHBheW1lbnQgbWV0aG9kXCIpO1xufTtcbmNvbnN0IHJ1blJlcXVpcmVkVXNlckFjdGlvbiA9IGFzeW5jIChiYXNlVXJsLCB1c2VyQWN0aW9uLCBwcmVmaWxsLCBub25DZGVGb3JtSW5wdXRzKSA9PiB7XG4gIGlmICh1c2VyQWN0aW9uLl91bmlmaWVkX2NjX2FjdGlvbl9uYW1lID09PSBcIjNEU19SRVFVSVJFRFwiKSB7XG4gICAgaWYgKHVzZXJBY3Rpb24udHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpIHtcbiAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhwYXJzZVVzZXJGRVBheWxvYWQodXNlckFjdGlvbikpO1xuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICB9IGVsc2UgaWYgKGNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyh1c2VyQWN0aW9uKSkge1xuICAgICAgY29uc3QgYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkFpcndhbGxleDNkc0Zsb3coYmFzZVVybCwgdXNlckFjdGlvbik7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFpcndhbGxleDogYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCB9IH07XG4gICAgfSBlbHNlIGlmIChjaGVja0lmUmVxdWlyZXNBZHllbjNkcyh1c2VyQWN0aW9uKSkge1xuICAgICAgY29uc3QgYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWR5ZW4zZHNGbG93KFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgdXNlckFjdGlvbixcbiAgICAgICAgcHJlZmlsbC5sb2NhbGVcbiAgICAgICk7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFkeWVuOiBhZHllbk1ldGFkYXRhRm9yQ2hlY2tvdXQgfSB9O1xuICAgIH0gZWxzZSBpZiAoY2hlY2tJZlJlcXVpcmVzQ3liZXJzb3VyY2UzZHModXNlckFjdGlvbikpIHtcbiAgICAgIGF3YWl0IHJ1bkN5YmVyc291cmNlM2RzRmxvdyh1c2VyQWN0aW9uKTtcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHt9IH07XG4gICAgfSBlbHNlIGlmIChjaGVja0lmTGVnYWN5M0RTUGF0aCh1c2VyQWN0aW9uKSkge1xuICAgICAgYXdhaXQgY29tbW9uQ0MzRFNGbG93KHsgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBbdXNlckFjdGlvbl0gfSwgYmFzZVVybCk7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7fSB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCAzRFMgdXNlciBhY3Rpb246ICR7SlNPTi5zdHJpbmdpZnkodXNlckFjdGlvbil9YCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlcXVpcmVkIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHVzZXJBY3Rpb24pfWApO1xuICB9XG59O1xuY29uc3QgY2hlY2tJZkxlZ2FjeTNEU1BhdGggPSAodXNlckFjdGlvbikgPT4ge1xuICB0cnkge1xuICAgIHBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhKFt1c2VyQWN0aW9uXSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuY29uc3QgdmFsaWRhdGVQZlJlc3VsdFVzZXJBY3Rpb24gPSAocGZSZXN1bHQpID0+IHtcbiAgaWYgKCFwZlJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSBpZiAocGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIHJlcXVpcmVkIHVzZXIgYWN0aW9uc1wiKTtcbiAgfSBlbHNlIGlmIChwZlJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG11bHRpcGxlIHJlcXVpcmVkIHVzZXIgYWN0aW9uc1wiKTtcbiAgfVxuICBjb25zdCB1c2VyQWN0aW9uID0gVXNlckFjdGlvbkZFUGF5bG9hZC5zYWZlUGFyc2UocGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbiAgaWYgKCF1c2VyQWN0aW9uLnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRkKFwiVXNlciBhY3Rpb24gcmF3IHBheWxvYWRcIiwgcGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbiAgICBlcnJfXyRkKFwiUGFyc2luZyBlcnJvclwiLCB1c2VyQWN0aW9uLmVycm9yKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzY2hlbWEgb2YgdXNlciBhY3Rpb24gcGF5bG9hZCBpcyBub3QgdmFsaWRcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB1c2VyQWN0aW9uOiB1c2VyQWN0aW9uLmRhdGFcbiAgfTtcbn07XG5jb25zdCByZXR1cm5TdWNjZXNzUmVzdWx0ID0gKHByZWZpbGxNb2RlLCBwZlJlc3VsdCkgPT4ge1xuICBpZiAocHJlZmlsbE1vZGUgPT09IFwic2V0dXBcIikge1xuICAgIGNvbnN0IHBheW1lbnRNZXRob2RJZCA9IHBmUmVzdWx0LmNjX3BtX2lkID8/IHBmUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdLmlkO1xuICAgIGlmICghcGF5bWVudE1ldGhvZElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBDQyBQTSBJRCBvciBwYXltZW50X21ldGhvZHMgZm91bmQgaW4gUEYgcmVzdWx0XCIpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBwYXltZW50TWV0aG9kSWRcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGlmICghcGZSZXN1bHQuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgc3VjY2VzcyByZXNwb25zZSBmcm9tIHN0YXJ0UEZcIik7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IHBmUmVzdWx0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICB9O1xuICB9XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRiLCBlcnJfXzogZXJyX18kYyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IHJ1bkNvbW1vbkNjRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJGIoYOKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uYCwgeyBjaGVja291dFBheW1lbnRNZXRob2QgfSk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICB0cmFjayhcImNvbW1vbl9jY19mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgLi4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJlZmlsbFxuICAgIH0pO1xuICAgIGNvbnN0IHVuaWZpZWRDQ1JvbGxvdXRSYXRpbyA9IHByZWZpbGwuZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzPy5bXCJ1bmlmaWVkX2NjXCJdID8/IDA7XG4gICAgbG9nX18kYihg4pScIFVuaWZpZWQgQ0Mgcm9sbG91dDogJHtNYXRoLnJvdW5kKHVuaWZpZWRDQ1JvbGxvdXRSYXRpbyAqIDEwMCl9JWApO1xuICAgIGNvbnN0IHJvbGwgPSBNYXRoLnJhbmRvbSgpO1xuICAgIGNvbnN0IHVzZVVuaWZpZWRDQ0Zsb3cgPSByb2xsIDwgdW5pZmllZENDUm9sbG91dFJhdGlvO1xuICAgIGNvbnN0IHVjY1JvbGxUcmFja2luZ01ldGFkYXRhID0ge1xuICAgICAgcm9sbCxcbiAgICAgIHVuaWZpZWRDQ1JvbGxvdXRSYXRpbyxcbiAgICAgIHVzZVVuaWZpZWRDQ0Zsb3dcbiAgICB9O1xuICAgIGlmICh1c2VVbmlmaWVkQ0NGbG93KSB7XG4gICAgICBsb2dfXyRiKGDilJwgUGlja2VkIHVuaWZpZWQgQ0MgZmxvdyAoJHtyb2xsfSB2cyAke3VuaWZpZWRDQ1JvbGxvdXRSYXRpb30pYCk7XG4gICAgICB0cmFjayhcInVuaWZpZWRfY2NfZmxvd19waWNrZWRcIiwgdWNjUm9sbFRyYWNraW5nTWV0YWRhdGEpO1xuICAgICAgcmV0dXJuIHVuc2FmZWx5UnVuVW5pZmllZENjRmxvdyh7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zLFxuICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyRiKGDilJwgUGlja2VkIGxlZ2FjeSBDQyBmbG93ICgke3JvbGx9IHZzICR7dW5pZmllZENDUm9sbG91dFJhdGlvfSlgKTtcbiAgICAgIHRyYWNrKFwibGVnYWN5X2NjX2Zsb3dfcGlja2VkXCIsIHVjY1JvbGxUcmFja2luZ01ldGFkYXRhKTtcbiAgICB9XG4gICAgbG9nX18kYihg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBjb25zdCBjb21tb25DaGVja291dFBhcmFtcyA9IHtcbiAgICAgIHNlc3Npb25faWQ6IGNvbnRleHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICAgICAgLy8gQnJvd3NlciBkYXRhIGxldHMgcHJvY2Vzc29ycyAoZS5nLiBBZHllbikgcnVuIGZyaWN0aW9ubGVzcyAzRFMgb24gY3VzdG9tZXItcHJlc2VudCBjaGFyZ2VzXG4gICAgICAgIGJyb3dzZXI6IGdldEZyYXVkTWV0YWRhdGEoKVxuICAgICAgfSxcbiAgICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6IGZhbHNlLFxuICAgICAgcGF5bWVudF9yb3V0ZV9pZDogY3VzdG9tUGFyYW1zLnBheW1lbnRSb3V0ZUlkLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKCksXG4gICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgbG9nX18kYihg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIGxvZ19fJGIoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7cHJlZmlsbC50b2tlbn1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNldHVwQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyRiKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7cmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJGIoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJGIoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDZGVFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3Iub3JpZ2luYWxFcnJvck1lc3NhZ2UuaW5jbHVkZXMoXCIzRFNfUkVRVUlSRURcIikpIHtcbiAgICAgICAgICBsb2dfXyRiKGDilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93YCk7XG4gICAgICAgICAgbG9nX18kYihcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICB0cmFjayhcIjNkc19yZXF1aXJlZFwiLCB7XG4gICAgICAgICAgICAuLi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgICAgICAuLi5lcnJvci5yZXNwb25zZS5oZWFkZXJzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgZXJySGVhZGVycyA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnMgPz8ge307XG4gICAgICAgICAgaWYgKFwib3AtZXhpc3RpbmctY2MtcG0taWRcIiBpbiBlcnJIZWFkZXJzKSB7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leGlzdGluZ19jY19wbV9pZCA9IGVyckhlYWRlcnNbXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiXTtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBFeGlzdGluZyBDQyBQTSBJRDogJHtjb21tb25DaGVja291dFBhcmFtcy5leGlzdGluZ19jY19wbV9pZH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNQb2NreXQzZHMgPSBjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzUG9ja3l0M2RzKSB7XG4gICAgICAgICAgICBsb2dfXyRiKGDilJwgUG9ja3l0IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIFBvY2t5dCAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IHBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5Qb2NreXQzZHNGbG93KGNvbnRleHQuYmFzZVVybCwgZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcInBvY2t5dFwiXSA9IHBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlcXVpcmVzQWlyd2FsbGV4M2RzID0gY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzKGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGlmIChyZXF1aXJlc0FpcndhbGxleDNkcykge1xuICAgICAgICAgICAgbG9nX18kYihg4pScIEFpcndhbGxleCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBaXJ3YWxsZXggM0RTIGZsb3cuYCk7XG4gICAgICAgICAgICBjb25zdCBhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWlyd2FsbGV4M2RzRmxvdyhjb250ZXh0LmJhc2VVcmwsIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJhaXJ3YWxsZXhcIl0gPSBhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXF1aXJlc0FkeWVuM2RzID0gY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzQWR5ZW4zZHMpIHtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBBZHllbiAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBZHllbiAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGFkeWVuTWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkFkeWVuM2RzRmxvdyhcbiAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgICAgIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICAgIHByZWZpbGwubG9jYWxlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJhZHllblwiXSA9IGFkeWVuTWV0YWRhdGFGb3JDaGVja291dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc3RhcnRQZlJlc3VsdCA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgbG9nX18kYihg4pScIFN0YXJ0IHBheW1lbnQgZmxvdyByZXN1bHQ6YCwgc3RhcnRQZlJlc3VsdCk7XG4gICAgICAgICAgY29uc3QgY3liZXJzb3VyY2VBY3Rpb24gPSBzdGFydFBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKFxuICAgICAgICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiY3liZXJzb3VyY2VfcGF5ZXJfYXV0aFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoY3liZXJzb3VyY2VBY3Rpb24pIHtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBDeWJlcnNvdXJjZSAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBDeWJlcnNvdXJjZSAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCA9IEN5YmVyc291cmNlQWN0aW9uUGF5bG9hZC5wYXJzZShjeWJlcnNvdXJjZUFjdGlvbik7XG4gICAgICAgICAgICBjb25zdCBjeWJlcnNvdXJjZU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5DeWJlcnNvdXJjZTNkc0Zsb3coe1xuICAgICAgICAgICAgICAuLi5jeWJlcnNvdXJjZUFjdGlvblBheWxvYWQsXG4gICAgICAgICAgICAgIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgICBfdW5pZmllZF9jY19wY2NzX2lkOiBcIlwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhW1wiY3liZXJzb3VyY2VcIl0gPSBjeWJlcnNvdXJjZU1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVN0cmlwZUZsb3cgPSBlcnJvci5yZXNwb25zZS5oZWFkZXJzPy5bXCJvcC1zaG91bGQtdXNlLW5ldy1mbG93XCJdICE9PSBcInRydWVcIjtcbiAgICAgICAgICBpZiAoIXJlcXVpcmVzUG9ja3l0M2RzICYmICFjeWJlcnNvdXJjZUFjdGlvbikge1xuICAgICAgICAgICAgaWYgKHNob3VsZFVzZVN0cmlwZUZsb3cpIHtcbiAgICAgICAgICAgICAgbG9nX18kYihg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd2ApO1xuICAgICAgICAgICAgICBhd2FpdCBzdHJpcGVDQzNEU0Zsb3cocGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbG9nX18kYihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvd2ApO1xuICAgICAgICAgICAgICBhd2FpdCBjb21tb25DQzNEU0Zsb3coc3RhcnRQZlJlc3VsdCwgY29udGV4dC5iYXNlVXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nX18kYihg4pScIFByZS1zdGFydCAzRFMgaXMgc3VjY2Vzc2Z1bCwgb3RoZXIgM0RTIGZsb3dzIHdpbGwgYmUgc2tpcHBlZC5gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgY2NQbUlkID0gc3RhcnRQZlJlc3VsdC5jY19wbV9pZDtcbiAgICAgICAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBbY2NfcG1faWQ6ICR7Y2NQbUlkfV1gKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBjY1BtSWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9nX18kYihg4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6YCwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBsb2dfXyRiKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Y3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7IXNob3VsZFVzZVN0cmlwZUZsb3cgPyBcIm5ld1wiIDogXCJsZWdhY3lcIn1dYCk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgIC4uLmNvbW1vbkNoZWNrb3V0UGFyYW1zLFxuICAgICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogY2NQbUlkLFxuICAgICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiBzaG91bGRVc2VTdHJpcGVGbG93XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycl9fJGMoYOKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERWApO1xuICAgICAgZXJyX18kYyhlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbik7XG5jb25zdCBwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICBjb25zdCBzdHJpcGVBY3Rpb24gPSByZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpO1xuICBpZiAoIXN0cmlwZUFjdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICB9XG4gIHJldHVybiBTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEucGFyc2Uoc3RyaXBlQWN0aW9uKTtcbn07XG5jb25zdCBjb21tb24zRFNBY3Rpb25UeXBlcyA9IFtcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiwgXCJhZHllblwiXTtcbmNvbnN0IHBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT4ge1xuICBjb25zdCBjb21tb25BY3Rpb24gPSByZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBjb21tb24zRFNBY3Rpb25UeXBlcy5pbmNsdWRlcyhhY3Rpb24udHlwZSkpO1xuICBpZiAoIWNvbW1vbkFjdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICB9XG4gIHJldHVybiBDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UoY29tbW9uQWN0aW9uKTtcbn07XG5jb25zdCBjb21tb25DQzNEU0Zsb3cgPSBhc3luYyAoc3RhcnRQZlJlc3VsdCwgYmFzZVVybCkgPT4ge1xuICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgbG9nX18kYihg4pScIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlgKTtcbiAgICB0cmFjayhcIjNkc19jb21wbGV0ZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbG9nX18kYihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke25leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmx9XWApO1xuICB0cmFjayhcIjNkc19yZWRpcmVjdFwiLCB7XG4gICAgLi4ubmV4dEFjdGlvbk1ldGFkYXRhXG4gIH0pO1xuICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oeyB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsIGJhc2VVcmwgfSk7XG4gIGxvZ19fJGIoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdHJhY2soXCIzZHNfY2FuY2VsbGVkXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRyYWNrKFwiM2RzX2ZhaWx1cmVcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbiAgdHJhY2soXCJjb21tb25fM2RzX2NvbXBsZXRlZFwiKTtcbn07XG5cbmNvbnN0IExvb3BDcnlwdG9DcG0gPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJsb29wXCIpLFxuICBwcm92aWRlcjogei5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIG1lcmNoYW50X2lkOiB6LnN0cmluZygpLFxuICAgIGVudGl0eV9pZDogei5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHouc3RyaW5nKCksXG4gICAgc3VwcG9ydGVkX2N1cnJlbmNpZXM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRhLCBlcnJfXzogZXJyX18kYiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJsb29wLWNyeXB0b1wiKTtcbmNvbnN0IGluaXRMb29wRmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQgfSkgPT4ge1xuICAgIGxvZ19fJGEoYENoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgTG9vcCBDcnlwdG8uLi5gKTtcbiAgICBjb25zdCBjaGVja291dFBheW1lbnRNZXRob2QgPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgTG9vcENyeXB0b0NwbSk7XG4gICAgbG9nX18kYShgY2hlY2tvdXRQYXltZW50TWV0aG9kOiAke0pTT04uc3RyaW5naWZ5KGNoZWNrb3V0UGF5bWVudE1ldGhvZCl9YCk7XG4gICAgbG9nX18kYShgU3RhcnRpbmcgTG9vcCBDcnlwdG8gZmxvdy4uLmApO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBwcmVGbG93TmV4dEFjdGlvbk1ldGFkYXRhID0gYXdhaXQgcHJlcGFyZVBheW1lbnRGbG93KGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH0pO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KFxuICAgICAgY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgcHJlZmlsbC50b2tlbixcbiAgICAgIGlzU2V0dXBNb2RlLFxuICAgICAgdm9pZCAwXG4gICAgKTtcbiAgICBpZiAoIWlzU2V0dXBNb2RlICYmICFjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXMuaW5jbHVkZXMocHJlZmlsbC5jdXJyZW5jeSkpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ3VycmVuY3kgJHtwcmVmaWxsLmN1cnJlbmN5fSBub3QgZW5hYmxlZCBmb3IgTG9vcC4gRW5hYmxlZCBjdXJyZW5jaWVzOiAke2NoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llc31gXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEgfHwgIXByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEubmV4dF9hY3Rpb25fbWV0YWRhdGEpIHtcbiAgICAgIHRocm93IEVycm9yKFwiRmFpbGVkIHRvIGZldGNoIG5lY2Vzc2FyeSBzZXR1cCBkYXRhIGZvciBMb29wXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXltZW50U2V0dXBJbmZvID0gcHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBsZXQgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IHBheW1lbnRTZXR1cEluZm9bXCJhdXRob3JpemF0aW9uX2Ftb3VudFwiXTtcbiAgICBsZXQgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IHBheW1lbnRTZXR1cEluZm9bXCJtaW5fYXV0aG9yaXphdGlvbl9hbW91bnRcIl07XG4gICAgY29uc3QgYWxsb3dDdXN0b21lclRvQ2hvb3NlQXV0aCA9IHBheW1lbnRTZXR1cEluZm9bXCJhbGxvd19jdXN0b21lcl90b19jaG9vc2VfYXV0aFwiXTtcbiAgICBsZXQgY2hhcmdlQW1vdW50VXNkQXRvbTtcbiAgICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICAgIGNoYXJnZUFtb3VudFVzZEF0b20gPSAwO1xuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQsIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFyZ2VBbW91bnRVc2RBdG9tID0gKGluaXRpYWxQcmV2aWV3ID8gaW5pdGlhbFByZXZpZXcuYW1vdW50QXRvbSA6IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20pICogcGF5bWVudFNldHVwSW5mb1tcInRva2VuX3ByaWNlXCJdO1xuICAgICAgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQsIGNoYXJnZUFtb3VudFVzZEF0b20pO1xuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQsIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQpO1xuICAgIH1cbiAgICBjb25zdCBwYXltZW50VXNkQW1vdW50ID0gY2hhcmdlQW1vdW50VXNkQXRvbTtcbiAgICBjb25zdCBjdXN0b21lclJlZklkID0gdjQoKTtcbiAgICBjb25zdCB3aWRnZXRQcm9wcyA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQsXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50LFxuICAgICAgY3VzdG9tZXJSZWZJZCxcbiAgICAgIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQsXG4gICAgICBhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoXG4gICAgfTtcbiAgICBjb25zdCBpbml0TG9vcENvbm5lY3RQcm9wcyA9IHtcbiAgICAgIGFwaVRva2VuOiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuYXBpX3Rva2VuLFxuICAgICAgZW50aXR5SWQ6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5lbnRpdHlfaWQsXG4gICAgICBtZXJjaGFudElkOiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLmVudmlyb25tZW50XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICB3aWRnZXRQcm9wcyxcbiAgICAgIGluaXRMb29wQ29ubmVjdFByb3BzXG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkxvb3BGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kYShgUnVubmluZyBMb29wIGZsb3cuLi5gKTtcbiAgICBsb2dfXyRhKFwiY29udGV4dFwiLCBjb250ZXh0KTtcbiAgICBsb2dfXyRhKFwiY2hlY2tvdXRQYXltZW50TWV0aG9kXCIsIGNoZWNrb3V0UGF5bWVudE1ldGhvZCk7XG4gICAgbG9nX18kYShcIm5vbkNkZUZvcm1JbnB1dHNcIiwgbm9uQ2RlRm9ybUlucHV0cyk7XG4gICAgbG9nX18kYShcImZsb3dDYWxsYmFja3NcIiwgZm9ybUNhbGxiYWNrcyk7XG4gICAgbG9nX18kYShcImN1c3RvbVBhcmFtc1wiLCBjdXN0b21QYXJhbXMpO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kYShg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgaXNDaGVja291dE1vZGUgPSBwcmVmaWxsLm1vZGUgIT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBjdXN0b21lckZpZWxkcyA9IGNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgaWYgKCFjdXN0b21QYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gRmFpbGVkIHRvIHByb3Blcmx5IHN1Ym1pdCBmb3JtIGRhdGEuXCIpO1xuICAgIH1cbiAgICBpZiAoIWN1c3RvbVBhcmFtcy5zdWNjZXNzKSB7XG4gICAgICB0cmFjayhcImxvb3BfcGF5X2Zsb3dfZmFpbHVyZVwiLCBjdXN0b21QYXJhbXMpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBTdWNjZXNzIGlzIG5vdCB0cnVlLlwiKTtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAuLi5jdXN0b21lckZpZWxkcyxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogaXNDaGVja291dE1vZGUsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGlzQ2hlY2tvdXRNb2RlID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogY3VzdG9tUGFyYW1zLnBheW1lbnRNZXRob2QucGF5bWVudE1ldGhvZElkLFxuICAgICAgLy8gTk9URTogd2UgZG8gaGF2ZSB0aGUgY2hlY2tvdXQgYXR0ZW1wdCBpZCBoZXJlIGV2ZW4gaWYgaXRzIGEgc2V0dXAsIGJ1dCBmb3Igbm93IHdlIGRvbid0IGluY2x1ZGUgaXRcbiAgICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBjaGVja291dCBhdHRlbXB0IHN1cHBvcnQgZm9yIHNldHVwIGludGVudHMuXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBpc0NoZWNrb3V0TW9kZSA/IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5jaGVja291dF9hdHRlbXB0X2lkIDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGxvb3BfY3VzdG9tZXI6IGN1c3RvbVBhcmFtcy5jdXN0b21lcixcbiAgICAgICAgbG9vcF9wYXltZW50X21ldGhvZDogY3VzdG9tUGFyYW1zLnBheW1lbnRNZXRob2QsXG4gICAgICAgIGxvb3Bfc3VjY2VzczogY3VzdG9tUGFyYW1zLnN1Y2Nlc3MsXG4gICAgICAgIGxvb3BfcGF5aW5faWQ6IGN1c3RvbVBhcmFtcy5wYXlpbklkXG4gICAgICB9XG4gICAgfSk7XG4gICAgbG9nX18kYShgQ29uZmlybSByZXN1bHQ6ICR7Y29uZmlybVJlc3VsdH1gKTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJGEoYERvaW5nIHBheW1lbnQgc2V0dXAuLi5gKTtcbiAgICAgIGxvZ19fJGEoYOKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OmAsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgbG9nX18kYShg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2NyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyRhKGBEb2luZyBjaGVja291dC4uLmApO1xuICAgICAgaWYgKCFjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICAgIGVycl9fJGIoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDksIGVycl9fOiBlcnJfXyRhIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInBheXBhbFwiKTtcbmNvbnN0IFBheXBhbENwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHsgY2xpZW50X2lkOiB6LnN0cmluZygpIH0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbmNvbnN0IGluaXRQYXlwYWxGbG93ID0gYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gIGNvbnN0IHBheXBhbENwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBQYXlwYWxDcG0pO1xuICBpZiAoIXBheXBhbENwbSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlBheVBhbCBDUE0gbm90IGZvdW5kIGluIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHNcIik7XG4gIH1cbiAgY29uc3Qgc3RhcnRGbG93ID0gKCkgPT4ge1xuICAgIHJldHVybiBPanNGbG93cy5wYXlwYWwucnVuKHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHBheXBhbENwbSxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgc3RhcnRGbG93XG4gIH07XG59O1xuY29uc3QgcnVuUGF5cGFsRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBsb2dfXyQ5KGBSdW5uaW5nIFBheVBhbCBmbG93Li4uYCk7XG4gICAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgICBjb25zdCB7IGlzQW5vbnltb3VzLCB1c2VSZWRpcmVjdEZsb3cgfSA9IGN1c3RvbVBhcmFtcy5zZXR0aW5ncyA/PyB7fTtcbiAgICAgIGxvZ19fJDkoYFZlcmlmeWluZyBDUE0uLi5gKTtcbiAgICAgIGNvbnN0IGNwbSA9IFBheXBhbENwbS5wYXJzZShjaGVja291dFBheW1lbnRNZXRob2QpO1xuICAgICAgbG9nX18kOShg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc2ApO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLCB7XG4gICAgICAgIC4uLmlzQW5vbnltb3VzID8gZ2VuZXJhdGVBbm9ueW1vdXNWYWx1ZXMoKSA6IHZvaWQgMCxcbiAgICAgICAgLi4ucHJlZmlsbC5jaGVja291dF9zZXR0aW5nc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBuZXdDdXN0b21lckZpZWxkcyA9IGNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgICBsb2dfXyQ5KGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtwcmVmaWxsLm1vZGV9YCk7XG4gICAgICBjb25zdCBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93ID0gdjQoKTtcbiAgICAgIGNvbnN0IGlzUGF5Rmlyc3RGbG93ID0gZmFsc2U7XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVxdWVzdCA9IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY3BtLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY3BtLFxuICAgICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGlzUGF5Rmlyc3RGbG93LFxuICAgICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGlzUGF5Rmlyc3RGbG93ID8ge1xuICAgICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgICAgfSA6IHZvaWQgMCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiB1c2VSZWRpcmVjdEZsb3csXG4gICAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3dcbiAgICAgICAgfSxcbiAgICAgICAgLi4ubmV3Q3VzdG9tZXJGaWVsZHNcbiAgICAgIH07XG4gICAgICBjb25zdCBwcmVBY3Rpb25VcmwgPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCBjb250ZXh0LmJhc2VVcmwpLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBlbmNvZGVkUmVxdWVzdCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoc3RhcnRQYXltZW50Rmxvd1JlcXVlc3QpKTtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBzdDogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcjogZW5jb2RlZFJlcXVlc3RcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSBgJHtwcmVBY3Rpb25Vcmx9PyR7c2VhcmNoUGFyYW1zLnRvU3RyaW5nKCl9YDtcbiAgICAgIGlmICh1c2VSZWRpcmVjdEZsb3cpIHtcbiAgICAgICAgbG9nX18kOShcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZWRpcmVjdFVybDtcbiAgICAgICAgYXdhaXQgc2xlZXAoMjAgKiAxZTMpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBheXBhbEZsb3dSZXN1bHQgPSBhd2FpdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0KFxuICAgICAgICBcIlBheVBhbFwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93LFxuICAgICAgICByZWRpcmVjdFVybFxuICAgICAgKTtcbiAgICAgIGxvZ19fJDkoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgcGF5cGFsRmxvd1Jlc3VsdCk7XG4gICAgICBjb25zdCBjaGVja291dEF0dGVtcHRJZCA9IHBhcnNlQXJnRnJvbUhyZWYocGF5cGFsRmxvd1Jlc3VsdC5ocmVmLCBcImNhdHRcIik7XG4gICAgICBjb25zdCBhcHByb3ZhbFNlc3Npb25JZCA9IHBhcnNlQXJnRnJvbUhyZWYocGF5cGFsRmxvd1Jlc3VsdC5ocmVmLCBcImFwcHJvdmFsX3Nlc3Npb25faWRcIik7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBpc1BheUZpcnN0RmxvdyA/IGNoZWNrb3V0QXR0ZW1wdElkIDogdm9pZCAwLFxuICAgICAgICB0aGVpcl9wbV9pZDogaXNQYXlGaXJzdEZsb3cgPyBhcHByb3ZhbFNlc3Npb25JZCA6IHZvaWQgMFxuICAgICAgfSk7XG4gICAgICBsb2dfXyQ5KFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwicGF5cGFsXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogY3BtLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogaXNQYXlGaXJzdEZsb3dcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kYShcIlBheVBhbCBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHsgcGF5bWVudF9tZXRob2Q6IFwicGF5cGFsXCIsIGVycm9yOiBlcnIgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDgsIGVycl9fOiBlcnJfXyQ5IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInBvY2t5dC1wYXlwYWxcIik7XG5jb25zdCBQb2NreXRQYXlwYWxDcG0gPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xuei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6LnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0UG9ja3l0UGF5cGFsRmxvdyA9IGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICBjb25zdCBwb2NreXRQYXlwYWxDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgUG9ja3l0UGF5cGFsQ3BtKTtcbiAgaWYgKCFwb2NreXRQYXlwYWxDcG0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb2NreXQgUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgfVxuICBjb25zdCBzdGFydEZsb3cgPSAoKSA9PiB7XG4gICAgcmV0dXJuIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgY29udGV4dCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcG9ja3l0UGF5cGFsQ3BtLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiB7fSB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICBzdGFydEZsb3dcbiAgfTtcbn07XG5jb25zdCBydW5Qb2NreXRQYXlwYWxGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kOChgUnVubmluZyBQb2NreXQgUGF5cGFsIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDgoYFZlcmlmeWluZyBDUE0uLi5gKTtcbiAgICBjb25zdCBjcG0gPSBQb2NreXRQYXlwYWxDcG0ucGFyc2UoY2hlY2tvdXRQYXltZW50TWV0aG9kKTtcbiAgICBsb2dfXyQ4KGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzYCk7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBjdXN0b21QYXJhbXM/LnNldHRpbmdzO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHNldHRpbmdzPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIGNvbnN0IG5ld0N1c3RvbWVyRmllbGRzID0gY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICBsb2dfXyQ4KGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtwcmVmaWxsLm1vZGV9YCk7XG4gICAgY29uc3QgZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyA9IHY0KCk7XG4gICAgY29uc3QgaXNQYXlGaXJzdEZsb3cgPSBwcmVmaWxsLm1vZGUgIT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVxdWVzdCA9IHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNwbS5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjcG0sXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGlzUGF5Rmlyc3RGbG93LFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBpc1BheUZpcnN0RmxvdyA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiAhIWN1c3RvbVBhcmFtcz8uc2V0dGluZ3M/LnVzZVJlZGlyZWN0RmxvdyxcbiAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3dcbiAgICAgIH0sXG4gICAgICAuLi5uZXdDdXN0b21lckZpZWxkc1xuICAgIH07XG4gICAgY29uc3QgcHJlQWN0aW9uVXJsID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgY29udGV4dC5iYXNlVXJsKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGVuY29kZWRSZXF1ZXN0ID0gYnRvYShKU09OLnN0cmluZ2lmeShzdGFydFBheW1lbnRGbG93UmVxdWVzdCkpO1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgc3Q6IHByZWZpbGwudG9rZW4sXG4gICAgICByOiBlbmNvZGVkUmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gYCR7cHJlQWN0aW9uVXJsfT8ke3NlYXJjaFBhcmFtcy50b1N0cmluZygpfWA7XG4gICAgaWYgKGN1c3RvbVBhcmFtcz8uc2V0dGluZ3M/LnVzZVJlZGlyZWN0Rmxvdykge1xuICAgICAgbG9nX18kOChcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVkaXJlY3RVcmw7XG4gICAgICBhd2FpdCBzbGVlcCgyMCAqIDFlMyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICB9XG4gICAgbG9nX18kOChcIlN0YXJ0aW5nIHBvcHVwIG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICBsb2dfXyQ4KGBPcGVuaW5nIHBheXBhbCBpZnJhbWUuLi5gKTtcbiAgICBjb25zdCBwYXlwYWxGbG93UmVzdWx0ID0gYXdhaXQgc3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdChcbiAgICAgIFwiUGF5UGFsXCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyxcbiAgICAgIHJlZGlyZWN0VXJsXG4gICAgKTtcbiAgICBsb2dfXyQ4KFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIHBheXBhbEZsb3dSZXN1bHQpO1xuICAgIGNvbnN0IHZhdWx0SWQgPSBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYpO1xuICAgIGNvbnN0IGNoZWNrb3V0QXR0ZW1wdElkID0gcGFyc2VBcmdGcm9tSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYsIFwiY2F0dFwiKTtcbiAgICBpZiAoIWNoZWNrb3V0QXR0ZW1wdElkKSB7XG4gICAgICBlcnJfXyQ5KFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMOlwiLCBwYXlwYWxGbG93UmVzdWx0LmhyZWYpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMXCIpO1xuICAgIH1cbiAgICBsb2dfXyQ4KGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyB1c2luZyB2YXVsdCBJRCAke3ZhdWx0SWR9YCk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogdmF1bHRJZCxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGlzUGF5Rmlyc3RGbG93ID8gY2hlY2tvdXRBdHRlbXB0SWQgOiB2b2lkIDBcbiAgICB9KTtcbiAgICBsb2dfXyQ4KFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHNbMF0uaWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICAgIGVycl9fJDkoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDcsIGVycl9fOiBlcnJfXyQ4IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1hZmZpcm1cIik7XG5jb25zdCBTdHJpcGVBZmZpcm1DcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhZmZpcm1cIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IFN0cmlwZUFmZmlybVJlcXVpcmVkVXNlckFjdGlvbnMgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpLm51bGxpc2goKSxcbiAgICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGluaXRTdHJpcGVBZmZpcm1GbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kNyhgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgQWZmaXJtLi4uYCk7XG4gICAgY29uc3Qgc3RyaXBlQWZmaXJtQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUFmZmlybUNwbSk7XG4gICAgaWYgKCFzdHJpcGVBZmZpcm1DcG0pIHtcbiAgICAgIGxvZ19fJDcoYE5vIFN0cmlwZSBBZmZpcm0gQ1BNIGZvdW5kYCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgICB9LFxuICAgICAgICBhYm9ydEZsb3c6ICgpID0+IHtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgbG9nX18kNyhgU3RhcnRpbmcgc3RyaXBlIGFmZmlybSBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGlmIChpc1NldHVwTW9kZSkge1xuICAgICAgbG9nX18kNyhgU2V0dXAgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBTdHJpcGUgQWZmaXJtIGZsb3dgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICAgIH0sXG4gICAgICAgIGFib3J0RmxvdzogKCkgPT4ge1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB7IHN0YXJ0RmxvdywgYWJvcnRGbG93IH0gPSBjcmVhdGVTdHJpcGVCbnBsRmxvd0NvbnRyb2xsZXIoXG4gICAgICBhc3luYyAoY3VzdG9tUGFyYW1zLCBhYm9ydFNpZ25hbCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBPanNGbG93cy5zdHJpcGVBZmZpcm0ucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHN0cmlwZUFmZmlybUNwbSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczogY3VzdG9tUGFyYW1zID8/IHt9LFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogdHJ1ZSB9LFxuICAgICAgICAgICAgYWJvcnRTaWduYWxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBlcnJfXyQ4KGBFcnJvciBzdGFydGluZyBBZmZpcm0gZmxvdzpgLCBlcnJvcik7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIHN0YXJ0RmxvdyxcbiAgICAgIGFib3J0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5TdHJpcGVBZmZpcm1GbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBhYm9ydFNpZ25hbFxuICB9KSA9PiB7XG4gICAgbG9nX18kNyhgUnVubmluZyBTdHJpcGUgQWZmaXJtIHBheS1maXJzdCBmbG93Li4uYCk7XG4gICAgY29uc3QgZmxvd0Fib3J0U2lnbmFsID0gYWJvcnRTaWduYWwgPz8gbmV3IEFib3J0Q29udHJvbGxlcigpLnNpZ25hbDtcbiAgICByZXR1cm4gd2l0aFJlc2VydmVkU3RyaXBlQm5wbFBvcHVwKGN1c3RvbVBhcmFtcy51c2VSZWRpcmVjdEZsb3csIFwiQWZmaXJtXCIsIGFzeW5jIChwb3B1cEhhbmRsZSkgPT4ge1xuICAgICAgY29uc3QgdXNlUG9wdXAgPSAhIXBvcHVwSGFuZGxlO1xuICAgICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgICAgdGhyb3dJZlN0cmlwZUJucGxGbG93QWJvcnRlZChmbG93QWJvcnRTaWduYWwsIFwiQWZmaXJtXCIpO1xuICAgICAgbG9nX18kNyhgVmFsaWRhdGluZyBmb3JtIGZpZWxkcy4uLmApO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgICAgfSk7XG4gICAgICBsb2dfXyQ3KGBDcmVhdGluZyBjYXJ0IGluZm8gZm9yIHBheS1maXJzdCBmbG93Li4uYCk7XG4gICAgICBjb25zdCBjYXJ0SW5mbyA9IHtcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICBwcmljZV9pZDogaXRlbS5wcmljZV9pZCxcbiAgICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eVxuICAgICAgICB9KSksXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0gfHwgdm9pZCAwLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH07XG4gICAgICBsb2dfXyQ3KGBTdGFydGluZyBwYXktZmlyc3QgcGF5bWVudCBmbG93IGZvciBBZmZpcm0uLi5gKTtcbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogdHJ1ZSxcbiAgICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBjYXJ0SW5mbyxcbiAgICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICAgIH0pO1xuICAgICAgdGhyb3dJZlN0cmlwZUJucGxGbG93QWJvcnRlZChmbG93QWJvcnRTaWduYWwsIFwiQWZmaXJtXCIpO1xuICAgICAgbG9nX18kNyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gU3RyaXBlQWZmaXJtUmVxdWlyZWRVc2VyQWN0aW9ucy5wYXJzZShcbiAgICAgICAgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHsgY2xpZW50X3NlY3JldCB9ID0gbmV4dEFjdGlvbk1ldGFkYXRhWzBdO1xuICAgICAgbG9nX18kNyhcIkNsaWVudCBzZWNyZXQgZm9yIHBheW1lbnQgaW50ZW50XCIsIGNsaWVudF9zZWNyZXQpO1xuICAgICAgY29uc3Qgc3RyaXBlQWZmaXJtQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUFmZmlybUNwbSk7XG4gICAgICBpZiAoIXN0cmlwZUFmZmlybUNwbSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJpcGUgQWZmaXJtIENQTSBub3QgZm91bmRcIik7XG4gICAgICB9XG4gICAgICBjb25zdCB7IHN0cmlwZSB9ID0gYXdhaXQgY3JlYXRlU3RyaXBlRWxlbWVudHMoc3RyaXBlQWZmaXJtQ3BtLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgICBtb2RlOiBcInBheW1lbnRcIixcbiAgICAgICAgLy8gVXNlIHBheW1lbnQgbW9kZSBmb3IgcGF5LWZpcnN0IGZsb3dcbiAgICAgICAgY3VycmVuY3k6IHByZWZpbGwuY3VycmVuY3kgPz8gXCJ1c2RcIixcbiAgICAgICAgYW1vdW50OiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9KTtcbiAgICAgIHRocm93SWZTdHJpcGVCbnBsRmxvd0Fib3J0ZWQoZmxvd0Fib3J0U2lnbmFsLCBcIkFmZmlybVwiKTtcbiAgICAgIGxvZ19fJDcoXCJTdHJpcGUgaW5zdGFuY2UgY3JlYXRlZFwiLCBzdHJpcGUpO1xuICAgICAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKTtcbiAgICAgIGNvbnN0IGN1c3RvbWVyTmFtZSA9IGAke25vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdfSAke25vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV19YDtcbiAgICAgIGNvbnN0IGFmZmlybVBheW1lbnREYXRhID0ge1xuICAgICAgICAvLyBUaGUgcG9wdXAgbGFuZHMgYmFjayBvbiB0aGUgcG9zdC1hY3Rpb24gcGFnZSwgd2hpY2ggZmluYWxpemVzIHRoZSBjaGVja291dCBzZXJ2ZXItc2lkZVxuICAgICAgICByZXR1cm5fdXJsOiB1c2VQb3B1cCA/IGJ1aWxkU3RyaXBlQm5wbFJldHVyblVybChjb250ZXh0LmJhc2VVcmwsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5jaGVja291dF9hdHRlbXB0X2lkKSA6IG5ldyBVUkwoXCIvYXBwLzNkcy9zdWNjZXNzL1wiLCBjb250ZXh0LmJhc2VVcmwpLnRvU3RyaW5nKCksXG4gICAgICAgIHBheW1lbnRfbWV0aG9kOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiB7XG4gICAgICAgICAgICBlbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICAgICAgbmFtZTogY3VzdG9tZXJOYW1lLFxuICAgICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgICBsaW5lMTogYmlsbGluZ0FkZHJlc3MubGluZTEsXG4gICAgICAgICAgICAgIGxpbmUyOiBiaWxsaW5nQWRkcmVzcy5saW5lMiB8fCB2b2lkIDAsXG4gICAgICAgICAgICAgIGNpdHk6IGJpbGxpbmdBZGRyZXNzLmNpdHksXG4gICAgICAgICAgICAgIHN0YXRlOiBiaWxsaW5nQWRkcmVzcy5zdGF0ZSxcbiAgICAgICAgICAgICAgY291bnRyeTogYmlsbGluZ0FkZHJlc3MuY291bnRyeSxcbiAgICAgICAgICAgICAgcG9zdGFsX2NvZGU6IGJpbGxpbmdBZGRyZXNzLnppcF9jb2RlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgYWZmaXJtT3B0aW9ucyA9IHtcbiAgICAgICAgLy8gV2Ugb3BlbiB0aGUgYXV0aG9yaXphdGlvbiBwYWdlIG91cnNlbHZlcyAobmV3IHRhYiBvciBpZnJhbWUpLCBzbyBTdHJpcGUgbXVzdCBub3QgbmF2aWdhdGUgdGhlIHBhZ2VcbiAgICAgICAgaGFuZGxlQWN0aW9uczogZmFsc2VcbiAgICAgIH07XG4gICAgICBsb2dfXyQ3KGBDb25maXJtaW5nIEFmZmlybSBwYXltZW50IHdpdGggY2xpZW50IHNlY3JldDogJHtjbGllbnRfc2VjcmV0fWApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBlcnJvciwgcGF5bWVudEludGVudCB9ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1BZmZpcm1QYXltZW50KFxuICAgICAgICAgIGNsaWVudF9zZWNyZXQsXG4gICAgICAgICAgYWZmaXJtUGF5bWVudERhdGEsXG4gICAgICAgICAgYWZmaXJtT3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICB0aHJvd0lmU3RyaXBlQm5wbEZsb3dBYm9ydGVkKGZsb3dBYm9ydFNpZ25hbCwgXCJBZmZpcm1cIik7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIGVycl9fJDgoXCJBZmZpcm0gcGF5bWVudCBjb25maXJtYXRpb24gZXJyb3I6XCIsIGVycm9yKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFmZmlybSBwYXltZW50IGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICAgIGxvZ19fJDcoXCJBZmZpcm0gcGF5bWVudCBjb25maXJtZWQgc3VjY2Vzc2Z1bGx5XCIsIHBheW1lbnRJbnRlbnQpO1xuICAgICAgICBjb25zdCByZWRpcmVjdFVybCA9IHBheW1lbnRJbnRlbnQ/Lm5leHRfYWN0aW9uPy5yZWRpcmVjdF90b191cmw/LnVybDtcbiAgICAgICAgaWYgKCFyZWRpcmVjdFVybCkge1xuICAgICAgICAgIGVycl9fJDgoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gQWZmaXJtIHBheW1lbnQgY29uZmlybWF0aW9uXCIpO1xuICAgICAgICAgIGlmICh1c2VQb3B1cCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kIGluIEFmZmlybSBwYXltZW50IGNvbmZpcm1hdGlvblwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKFwiQWZmaXJtIHBheW1lbnQgZmFpbGVkXCIpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICAgICAgaW52b2ljZV91cmxzOiBbXSxcbiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkczogW10sXG4gICAgICAgICAgICAgIGN1c3RvbWVyX2lkOiBcIlwiLFxuICAgICAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogXCJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvcHVwSGFuZGxlKSB7XG4gICAgICAgICAgbG9nX18kNyhcIlBheW1lbnQgcmVxdWlyZXMgYWRkaXRpb25hbCBhY3Rpb24sIG9wZW5pbmcgaXQgaW4gYSBuZXcgdGFiLi4uXCIpO1xuICAgICAgICAgIGF3YWl0IHdhaXRGb3JTdHJpcGVCbnBsUG9wdXAoe1xuICAgICAgICAgICAgc3RyaXBlLFxuICAgICAgICAgICAgY2xpZW50U2VjcmV0OiBjbGllbnRfc2VjcmV0LFxuICAgICAgICAgICAgcG9wdXBOYW1lOiBcIkFmZmlybVwiLFxuICAgICAgICAgICAgcmVkaXJlY3RVcmwsXG4gICAgICAgICAgICBwb3B1cEhhbmRsZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ19fJDcoXCJQYXltZW50IHJlcXVpcmVzIGFkZGl0aW9uYWwgYWN0aW9uLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICAgICAgZnJhbWVUaXRsZTogXCJBZmZpcm0gdmVyaWZpY2F0aW9uXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJWZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvd0lmU3RyaXBlQm5wbEZsb3dBYm9ydGVkKGZsb3dBYm9ydFNpZ25hbCwgXCJBZmZpcm1cIik7XG4gICAgICAgIGxvZ19fJDcoXCJWZXJpZmljYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICAgICAgY29uc3QgdGhlaXJQYXltZW50TWV0aG9kID0gcGF5bWVudEludGVudD8ucGF5bWVudF9tZXRob2Q/LnRvU3RyaW5nKCkgPz8gdm9pZCAwO1xuICAgICAgICBjb25zdCBjb25maXJtID0gdXNlUG9wdXAgPyBjb25maXJtU3RyaXBlQm5wbFBheW1lbnRGbG93IDogY29uZmlybVBheW1lbnRGbG93O1xuICAgICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybShhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5jaGVja291dF9hdHRlbXB0X2lkLFxuICAgICAgICAgIHRoZWlyX3BtX2lkOiB0aGVpclBheW1lbnRNZXRob2RcbiAgICAgICAgfSk7XG4gICAgICAgIHRocm93SWZTdHJpcGVCbnBsRmxvd0Fib3J0ZWQoZmxvd0Fib3J0U2lnbmFsLCBcIkFmZmlybVwiKTtcbiAgICAgICAgbG9nX18kNyhcIlBheW1lbnQgZmxvdyBjb25maXJtZWRcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgICBsb2dQcmVmaXg6IFwic3RyaXBlLWFmZmlybVwiLFxuICAgICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICAgIHVzZVBheUZpcnN0RmxvdzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycl9fJDgoXCJFcnJvciBpbiBBZmZpcm0gcGF5bWVudCBmbG93OlwiLCBlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ2LCBlcnJfXzogZXJyX18kNyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtYWZ0ZXJwYXlcIik7XG5jb25zdCBTdHJpcGVBZnRlcnBheUNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFmdGVycGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBTdHJpcGVBZnRlcnBheVJlcXVpcmVkVXNlckFjdGlvbnMgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpLm51bGxpc2goKSxcbiAgICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGluaXRTdHJpcGVBZnRlcnBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQ2KGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBBZnRlcnBheS4uLmApO1xuICAgIGNvbnN0IHN0cmlwZUFmdGVycGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUFmdGVycGF5Q3BtKTtcbiAgICBpZiAoIXN0cmlwZUFmdGVycGF5Q3BtKSB7XG4gICAgICBsb2dfXyQ2KGBObyBTdHJpcGUgQWZ0ZXJwYXkgQ1BNIGZvdW5kYCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgICB9LFxuICAgICAgICBhYm9ydEZsb3c6ICgpID0+IHtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgbG9nX18kNihgU3RhcnRpbmcgc3RyaXBlIGFmdGVycGF5IGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgaWYgKGlzU2V0dXBNb2RlKSB7XG4gICAgICBsb2dfXyQ2KGBTZXR1cCBtb2RlIG5vdCBzdXBwb3J0ZWQgZm9yIFN0cmlwZSBBZnRlcnBheSBmbG93YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgICB9LFxuICAgICAgICBhYm9ydEZsb3c6ICgpID0+IHtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgeyBzdGFydEZsb3csIGFib3J0RmxvdyB9ID0gY3JlYXRlU3RyaXBlQm5wbEZsb3dDb250cm9sbGVyKFxuICAgICAgYXN5bmMgKGN1c3RvbVBhcmFtcywgYWJvcnRTaWduYWwpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgT2pzRmxvd3Muc3RyaXBlQWZ0ZXJwYXkucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHN0cmlwZUFmdGVycGF5Q3BtLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBjdXN0b21QYXJhbXMgPz8ge30sXG4gICAgICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiB0cnVlIH0sXG4gICAgICAgICAgICBhYm9ydFNpZ25hbFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGVycl9fJDcoYEVycm9yIHN0YXJ0aW5nIEFmdGVycGF5IGZsb3c6YCwgZXJyb3IpO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBzdGFydEZsb3csXG4gICAgICBhYm9ydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlQWZ0ZXJwYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBhYm9ydFNpZ25hbFxuICB9KSA9PiB7XG4gICAgbG9nX18kNihgUnVubmluZyBTdHJpcGUgQWZ0ZXJwYXkgcGF5LWZpcnN0IGZsb3cuLi5gKTtcbiAgICBjb25zdCBmbG93QWJvcnRTaWduYWwgPSBhYm9ydFNpZ25hbCA/PyBuZXcgQWJvcnRDb250cm9sbGVyKCkuc2lnbmFsO1xuICAgIHJldHVybiB3aXRoUmVzZXJ2ZWRTdHJpcGVCbnBsUG9wdXAoY3VzdG9tUGFyYW1zLnVzZVJlZGlyZWN0RmxvdywgXCJBZnRlcnBheVwiLCBhc3luYyAocG9wdXBIYW5kbGUpID0+IHtcbiAgICAgIGNvbnN0IHVzZVBvcHVwID0gISFwb3B1cEhhbmRsZTtcbiAgICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICAgIHRocm93SWZTdHJpcGVCbnBsRmxvd0Fib3J0ZWQoZmxvd0Fib3J0U2lnbmFsLCBcIkFmdGVycGF5XCIpO1xuICAgICAgbG9nX18kNihgVmFsaWRhdGluZyBmb3JtIGZpZWxkcy4uLmApO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgICAgfSk7XG4gICAgICBsb2dfXyQ2KGBDcmVhdGluZyBjYXJ0IGluZm8gZm9yIHBheS1maXJzdCBmbG93Li4uYCk7XG4gICAgICBjb25zdCBjYXJ0SW5mbyA9IHtcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICBwcmljZV9pZDogaXRlbS5wcmljZV9pZCxcbiAgICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eVxuICAgICAgICB9KSksXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0gfHwgdm9pZCAwLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH07XG4gICAgICBsb2dfXyQ2KGBTdGFydGluZyBwYXktZmlyc3QgcGF5bWVudCBmbG93IGZvciBBZnRlcnBheS4uLmApO1xuICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgdXNlX3BheV9maXJzdF9mbG93OiB0cnVlLFxuICAgICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGNhcnRJbmZvLFxuICAgICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgICAgfSk7XG4gICAgICB0aHJvd0lmU3RyaXBlQm5wbEZsb3dBYm9ydGVkKGZsb3dBYm9ydFNpZ25hbCwgXCJBZnRlcnBheVwiKTtcbiAgICAgIGxvZ19fJDYoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IFN0cmlwZUFmdGVycGF5UmVxdWlyZWRVc2VyQWN0aW9ucy5wYXJzZShcbiAgICAgICAgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHsgY2xpZW50X3NlY3JldCB9ID0gbmV4dEFjdGlvbk1ldGFkYXRhWzBdO1xuICAgICAgbG9nX18kNihcIkNsaWVudCBzZWNyZXQgZm9yIHBheW1lbnQgaW50ZW50XCIsIGNsaWVudF9zZWNyZXQpO1xuICAgICAgY29uc3Qgc3RyaXBlQWZ0ZXJwYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlQWZ0ZXJwYXlDcG0pO1xuICAgICAgaWYgKCFzdHJpcGVBZnRlcnBheUNwbSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJpcGUgQWZ0ZXJwYXkgQ1BNIG5vdCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgc3RyaXBlIH0gPSBhd2FpdCBjcmVhdGVTdHJpcGVFbGVtZW50cyhzdHJpcGVBZnRlcnBheUNwbS5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgICAgbW9kZTogXCJwYXltZW50XCIsXG4gICAgICAgIC8vIFVzZSBwYXltZW50IG1vZGUgZm9yIHBheS1maXJzdCBmbG93XG4gICAgICAgIGN1cnJlbmN5OiBwcmVmaWxsLmN1cnJlbmN5ID8/IFwidXNkXCIsXG4gICAgICAgIGFtb3VudDogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSk7XG4gICAgICB0aHJvd0lmU3RyaXBlQm5wbEZsb3dBYm9ydGVkKGZsb3dBYm9ydFNpZ25hbCwgXCJBZnRlcnBheVwiKTtcbiAgICAgIGxvZ19fJDYoXCJTdHJpcGUgaW5zdGFuY2UgY3JlYXRlZFwiLCBzdHJpcGUpO1xuICAgICAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKTtcbiAgICAgIGNvbnN0IGN1c3RvbWVyTmFtZSA9IGAke25vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdfSAke25vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV19YDtcbiAgICAgIGNvbnN0IGFmdGVycGF5UGF5bWVudERhdGEgPSB7XG4gICAgICAgIC8vIFRoZSBwb3B1cCBsYW5kcyBiYWNrIG9uIHRoZSBwb3N0LWFjdGlvbiBwYWdlLCB3aGljaCBmaW5hbGl6ZXMgdGhlIGNoZWNrb3V0IHNlcnZlci1zaWRlXG4gICAgICAgIHJldHVybl91cmw6IHVzZVBvcHVwID8gYnVpbGRTdHJpcGVCbnBsUmV0dXJuVXJsKGNvbnRleHQuYmFzZVVybCwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLmNoZWNrb3V0X2F0dGVtcHRfaWQpIDogbmV3IFVSTChcIi9hcHAvM2RzL3N1Y2Nlc3MvXCIsIGNvbnRleHQuYmFzZVVybCkudG9TdHJpbmcoKSxcbiAgICAgICAgcGF5bWVudF9tZXRob2Q6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IHtcbiAgICAgICAgICAgIGVtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgICAgICBuYW1lOiBjdXN0b21lck5hbWUsXG4gICAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICAgIGxpbmUxOiBiaWxsaW5nQWRkcmVzcy5saW5lMSxcbiAgICAgICAgICAgICAgbGluZTI6IGJpbGxpbmdBZGRyZXNzLmxpbmUyIHx8IHZvaWQgMCxcbiAgICAgICAgICAgICAgY2l0eTogYmlsbGluZ0FkZHJlc3MuY2l0eSxcbiAgICAgICAgICAgICAgc3RhdGU6IGJpbGxpbmdBZGRyZXNzLnN0YXRlLFxuICAgICAgICAgICAgICBjb3VudHJ5OiBiaWxsaW5nQWRkcmVzcy5jb3VudHJ5LFxuICAgICAgICAgICAgICBwb3N0YWxfY29kZTogYmlsbGluZ0FkZHJlc3MuemlwX2NvZGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBhZnRlcnBheU9wdGlvbnMgPSB7XG4gICAgICAgIC8vIFdlIG9wZW4gdGhlIGF1dGhvcml6YXRpb24gcGFnZSBvdXJzZWx2ZXMgKG5ldyB0YWIgb3IgaWZyYW1lKSwgc28gU3RyaXBlIG11c3Qgbm90IG5hdmlnYXRlIHRoZSBwYWdlXG4gICAgICAgIGhhbmRsZUFjdGlvbnM6IGZhbHNlXG4gICAgICB9O1xuICAgICAgbG9nX18kNihgQ29uZmlybWluZyBBZnRlcnBheSBwYXltZW50IHdpdGggY2xpZW50IHNlY3JldDogJHtjbGllbnRfc2VjcmV0fWApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29uZmlybWF0aW9uUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1BZnRlcnBheUNsZWFycGF5UGF5bWVudChcbiAgICAgICAgICBjbGllbnRfc2VjcmV0LFxuICAgICAgICAgIGFmdGVycGF5UGF5bWVudERhdGEsXG4gICAgICAgICAgYWZ0ZXJwYXlPcHRpb25zXG4gICAgICAgICk7XG4gICAgICAgIHRocm93SWZTdHJpcGVCbnBsRmxvd0Fib3J0ZWQoZmxvd0Fib3J0U2lnbmFsLCBcIkFmdGVycGF5XCIpO1xuICAgICAgICBpZiAoY29uZmlybWF0aW9uUmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgZXJyX18kNyhcIkFmdGVycGF5IHBheW1lbnQgY29uZmlybWF0aW9uIGVycm9yOlwiLCBjb25maXJtYXRpb25SZXN1bHQuZXJyb3IpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQWZ0ZXJwYXkgcGF5bWVudCBmYWlsZWQ6ICR7Y29uZmlybWF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbG9nX18kNihgQWZ0ZXJwYXkgcGF5bWVudCBjb25maXJtYXRpb24gcmVzdWx0OmAsIGNvbmZpcm1hdGlvblJlc3VsdCk7XG4gICAgICAgIGlmIChjb25maXJtYXRpb25SZXN1bHQucGF5bWVudEludGVudD8ubmV4dF9hY3Rpb24/LnR5cGUgIT09IFwicmVkaXJlY3RfdG9fdXJsXCIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gQWZ0ZXJwYXkgcGF5bWVudCBjb25maXJtYXRpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtYXRpb25SZXN1bHQucGF5bWVudEludGVudC5uZXh0X2FjdGlvbi5yZWRpcmVjdF90b191cmw/LnVybDtcbiAgICAgICAgaWYgKCFyZWRpcmVjdFVybCkge1xuICAgICAgICAgIGVycl9fJDcoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gQWZ0ZXJwYXkgcGF5bWVudCBjb25maXJtYXRpb25cIik7XG4gICAgICAgICAgaWYgKHVzZVBvcHVwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gQWZ0ZXJwYXkgcGF5bWVudCBjb25maXJtYXRpb25cIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihcIkFmdGVycGF5IHBheW1lbnQgZmFpbGVkXCIpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICAgICAgaW52b2ljZV91cmxzOiBbXSxcbiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkczogW10sXG4gICAgICAgICAgICAgIGN1c3RvbWVyX2lkOiBcIlwiLFxuICAgICAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogXCJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvcHVwSGFuZGxlKSB7XG4gICAgICAgICAgbG9nX18kNihcIkFmdGVycGF5IHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgb3BlbmluZyBpdCBpbiBhIG5ldyB0YWIuLi5cIik7XG4gICAgICAgICAgYXdhaXQgd2FpdEZvclN0cmlwZUJucGxQb3B1cCh7XG4gICAgICAgICAgICBzdHJpcGUsXG4gICAgICAgICAgICBjbGllbnRTZWNyZXQ6IGNsaWVudF9zZWNyZXQsXG4gICAgICAgICAgICBwb3B1cE5hbWU6IFwiQWZ0ZXJwYXlcIixcbiAgICAgICAgICAgIHJlZGlyZWN0VXJsLFxuICAgICAgICAgICAgcG9wdXBIYW5kbGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dfXyQ2KFwiQWZ0ZXJwYXkgdmVyaWZpY2F0aW9uIHJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICAgICAgZnJhbWVUaXRsZTogXCJBZnRlcnBheSB2ZXJpZmljYXRpb25cIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxvZ19fJDYoYOKVsCBBZnRlcnBheSB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWZ0ZXJwYXkgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBZnRlcnBheSB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvd0lmU3RyaXBlQm5wbEZsb3dBYm9ydGVkKGZsb3dBYm9ydFNpZ25hbCwgXCJBZnRlcnBheVwiKTtcbiAgICAgICAgbG9nX18kNihcIkFmdGVycGF5IHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQsIGNvbmZpcm1pbmcgd2l0aCBiYWNrZW5kLi4uXCIpO1xuICAgICAgICBjb25zdCB0aGVpclBheW1lbnRNZXRob2QgPSBjb25maXJtYXRpb25SZXN1bHQucGF5bWVudEludGVudC5wYXltZW50X21ldGhvZD8udG9TdHJpbmcoKSA/PyB2b2lkIDA7XG4gICAgICAgIGNvbnN0IGNvbmZpcm0gPSB1c2VQb3B1cCA/IGNvbmZpcm1TdHJpcGVCbnBsUGF5bWVudEZsb3cgOiBjb25maXJtUGF5bWVudEZsb3c7XG4gICAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtKGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLmNoZWNrb3V0X2F0dGVtcHRfaWQsXG4gICAgICAgICAgdGhlaXJfcG1faWQ6IHRoZWlyUGF5bWVudE1ldGhvZFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3dJZlN0cmlwZUJucGxGbG93QWJvcnRlZChmbG93QWJvcnRTaWduYWwsIFwiQWZ0ZXJwYXlcIik7XG4gICAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgICBsb2dQcmVmaXg6IFwic3RyaXBlLWFmdGVycGF5XCIsXG4gICAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyX18kNyhcIkVycm9yIGluIEFmdGVycGF5IGNoZWNrb3V0IGZsb3c6XCIsIGVycm9yKTtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIkFmdGVycGF5IHBheW1lbnQgZmFpbGVkXCI7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ1LCBlcnJfXzogZXJyX18kNiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUta2xhcm5hXCIpO1xuY29uc3QgU3RyaXBlS2xhcm5hQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwia2xhcm5hXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBTdHJpcGVLbGFybmFSZXF1aXJlZFVzZXJBY3Rpb25zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5udWxsaXNoKCksXG4gICAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0U3RyaXBlS2xhcm5hRmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGxvZ19fJDUoYENoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIEtsYXJuYS4uLmApO1xuICAgIGNvbnN0IHN0cmlwZUtsYXJuYUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVLbGFybmFDcG0pO1xuICAgIGlmICghc3RyaXBlS2xhcm5hQ3BtKSB7XG4gICAgICBsb2dfXyQ1KGBObyBTdHJpcGUgS2xhcm5hIENQTSBmb3VuZGApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgICAgfSxcbiAgICAgICAgYWJvcnRGbG93OiAoKSA9PiB7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGxvZ19fJDUoYFN0YXJ0aW5nIHN0cmlwZSBrbGFybmEgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICAgIGxvZ19fJDUoYFNldHVwIG1vZGUgaXMgbm90IHN1cHBvcnRlZCBmb3IgU3RyaXBlIEtsYXJuYSBmbG93YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgICB9LFxuICAgICAgICBhYm9ydEZsb3c6ICgpID0+IHtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgeyBzdGFydEZsb3csIGFib3J0RmxvdyB9ID0gY3JlYXRlU3RyaXBlQm5wbEZsb3dDb250cm9sbGVyKFxuICAgICAgYXN5bmMgKGN1c3RvbVBhcmFtcywgYWJvcnRTaWduYWwpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgT2pzRmxvd3Muc3RyaXBlS2xhcm5hLnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBzdHJpcGVLbGFybmFDcG0sXG4gICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IGN1c3RvbVBhcmFtcyA/PyB7fSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6IHRydWUgfSxcbiAgICAgICAgICAgIGFib3J0U2lnbmFsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgZXJyX18kNihgRXJyb3Igc3RhcnRpbmcgS2xhcm5hIGZsb3c6YCwgZXJyb3IpO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBzdGFydEZsb3csXG4gICAgICBhYm9ydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlS2xhcm5hRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgYWJvcnRTaWduYWxcbiAgfSkgPT4ge1xuICAgIGxvZ19fJDUoYFJ1bm5pbmcgU3RyaXBlIEtsYXJuYSBwYXktZmlyc3QgZmxvdy4uLmApO1xuICAgIGNvbnN0IGZsb3dBYm9ydFNpZ25hbCA9IGFib3J0U2lnbmFsID8/IG5ldyBBYm9ydENvbnRyb2xsZXIoKS5zaWduYWw7XG4gICAgcmV0dXJuIHdpdGhSZXNlcnZlZFN0cmlwZUJucGxQb3B1cChjdXN0b21QYXJhbXMudXNlUmVkaXJlY3RGbG93LCBcIktsYXJuYVwiLCBhc3luYyAocG9wdXBIYW5kbGUpID0+IHtcbiAgICAgIGNvbnN0IHVzZVBvcHVwID0gISFwb3B1cEhhbmRsZTtcbiAgICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICAgIHRocm93SWZTdHJpcGVCbnBsRmxvd0Fib3J0ZWQoZmxvd0Fib3J0U2lnbmFsLCBcIktsYXJuYVwiKTtcbiAgICAgIGxvZ19fJDUoYFZhbGlkYXRpbmcgZm9ybSBmaWVsZHMuLi5gKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgbG9nX18kNShgQ3JlYXRpbmcgY2FydCBpbmZvIGZvciBwYXktZmlyc3QgZmxvdy4uLmApO1xuICAgICAgY29uc3QgY2FydEluZm8gPSB7XG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgICAgcHJpY2VfaWQ6IGl0ZW0ucHJpY2VfaWQsXG4gICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHlcbiAgICAgICAgfSkpLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdIHx8IHZvaWQgMCxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9O1xuICAgICAgbG9nX18kNShgU3RhcnRpbmcgcGF5LWZpcnN0IHBheW1lbnQgZmxvdyBmb3IgS2xhcm5hLi4uYCk7XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHRydWUsXG4gICAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogY2FydEluZm8sXG4gICAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgICB9KTtcbiAgICAgIHRocm93SWZTdHJpcGVCbnBsRmxvd0Fib3J0ZWQoZmxvd0Fib3J0U2lnbmFsLCBcIktsYXJuYVwiKTtcbiAgICAgIGxvZ19fJDUoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IFN0cmlwZUtsYXJuYVJlcXVpcmVkVXNlckFjdGlvbnMucGFyc2UoXG4gICAgICAgIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNcbiAgICAgICk7XG4gICAgICBjb25zdCB7IGNsaWVudF9zZWNyZXQgfSA9IG5leHRBY3Rpb25NZXRhZGF0YVswXTtcbiAgICAgIGxvZ19fJDUoXCJDbGllbnQgc2VjcmV0IGZvciBwYXltZW50IGludGVudFwiLCBjbGllbnRfc2VjcmV0KTtcbiAgICAgIGNvbnN0IHN0cmlwZUtsYXJuYUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVLbGFybmFDcG0pO1xuICAgICAgaWYgKCFzdHJpcGVLbGFybmFDcG0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyaXBlIEtsYXJuYSBDUE0gbm90IGZvdW5kXCIpO1xuICAgICAgfVxuICAgICAgY29uc3QgeyBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUtsYXJuYUNwbS5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgICAgbW9kZTogXCJwYXltZW50XCIsXG4gICAgICAgIC8vIFVzZSBwYXltZW50IG1vZGUgZm9yIHBheS1maXJzdCBmbG93XG4gICAgICAgIGN1cnJlbmN5OiBwcmVmaWxsLmN1cnJlbmN5ID8/IFwidXNkXCIsXG4gICAgICAgIGFtb3VudDogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSk7XG4gICAgICB0aHJvd0lmU3RyaXBlQm5wbEZsb3dBYm9ydGVkKGZsb3dBYm9ydFNpZ25hbCwgXCJLbGFybmFcIik7XG4gICAgICBsb2dfXyQ1KFwiU3RyaXBlIGluc3RhbmNlIGNyZWF0ZWRcIiwgc3RyaXBlKTtcbiAgICAgIGNvbnN0IGJpbGxpbmdBZGRyZXNzID0gZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgICBjb25zdCBjdXN0b21lck5hbWUgPSBgJHtub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXX0gJHtub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdfWA7XG4gICAgICBjb25zdCBrbGFybmFQYXltZW50RGF0YSA9IHtcbiAgICAgICAgLy8gVGhlIHBvcHVwIGxhbmRzIGJhY2sgb24gdGhlIHBvc3QtYWN0aW9uIHBhZ2UsIHdoaWNoIGZpbmFsaXplcyB0aGUgY2hlY2tvdXQgc2VydmVyLXNpZGVcbiAgICAgICAgcmV0dXJuX3VybDogdXNlUG9wdXAgPyBidWlsZFN0cmlwZUJucGxSZXR1cm5VcmwoY29udGV4dC5iYXNlVXJsLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UuY2hlY2tvdXRfYXR0ZW1wdF9pZCkgOiBuZXcgVVJMKFwiL2FwcC8zZHMvc3VjY2Vzcy9cIiwgY29udGV4dC5iYXNlVXJsKS50b1N0cmluZygpLFxuICAgICAgICBwYXltZW50X21ldGhvZDoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczoge1xuICAgICAgICAgICAgZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgICAgIG5hbWU6IGN1c3RvbWVyTmFtZSxcbiAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgbGluZTE6IGJpbGxpbmdBZGRyZXNzLmxpbmUxLFxuICAgICAgICAgICAgICBsaW5lMjogYmlsbGluZ0FkZHJlc3MubGluZTIgfHwgdm9pZCAwLFxuICAgICAgICAgICAgICBjaXR5OiBiaWxsaW5nQWRkcmVzcy5jaXR5LFxuICAgICAgICAgICAgICBzdGF0ZTogYmlsbGluZ0FkZHJlc3Muc3RhdGUsXG4gICAgICAgICAgICAgIGNvdW50cnk6IGJpbGxpbmdBZGRyZXNzLmNvdW50cnksXG4gICAgICAgICAgICAgIHBvc3RhbF9jb2RlOiBiaWxsaW5nQWRkcmVzcy56aXBfY29kZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGtsYXJuYU9wdGlvbnMgPSB7XG4gICAgICAgIC8vIFdlIG9wZW4gdGhlIGF1dGhvcml6YXRpb24gcGFnZSBvdXJzZWx2ZXMgKG5ldyB0YWIgb3IgaWZyYW1lKSwgc28gU3RyaXBlIG11c3Qgbm90IG5hdmlnYXRlIHRoZSBwYWdlXG4gICAgICAgIGhhbmRsZUFjdGlvbnM6IGZhbHNlXG4gICAgICB9O1xuICAgICAgbG9nX18kNShgQ29uZmlybWluZyBLbGFybmEgcGF5bWVudCB3aXRoIGNsaWVudCBzZWNyZXQ6ICR7Y2xpZW50X3NlY3JldH1gKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbmZpcm1hdGlvblJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtS2xhcm5hUGF5bWVudChjbGllbnRfc2VjcmV0LCBrbGFybmFQYXltZW50RGF0YSwga2xhcm5hT3B0aW9ucyk7XG4gICAgICAgIHRocm93SWZTdHJpcGVCbnBsRmxvd0Fib3J0ZWQoZmxvd0Fib3J0U2lnbmFsLCBcIktsYXJuYVwiKTtcbiAgICAgICAgaWYgKGNvbmZpcm1hdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgICAgIGVycl9fJDYoXCJLbGFybmEgcGF5bWVudCBjb25maXJtYXRpb24gZXJyb3I6XCIsIGNvbmZpcm1hdGlvblJlc3VsdC5lcnJvcik7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBLbGFybmEgcGF5bWVudCBmYWlsZWQ6ICR7Y29uZmlybWF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpcm1hdGlvblJlc3VsdC5wYXltZW50SW50ZW50Py5uZXh0X2FjdGlvbj8udHlwZSAhPT0gXCJyZWRpcmVjdF90b191cmxcIikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZCBpbiBLbGFybmEgcGF5bWVudCBjb25maXJtYXRpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtYXRpb25SZXN1bHQucGF5bWVudEludGVudC5uZXh0X2FjdGlvbi5yZWRpcmVjdF90b191cmw/LnVybDtcbiAgICAgICAgaWYgKCFyZWRpcmVjdFVybCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZCBpbiBLbGFybmEgcGF5bWVudCBjb25maXJtYXRpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvcHVwSGFuZGxlKSB7XG4gICAgICAgICAgbG9nX18kNShcIktsYXJuYSB2ZXJpZmljYXRpb24gcmVxdWlyZWQsIG9wZW5pbmcgaXQgaW4gYSBuZXcgdGFiLi4uXCIpO1xuICAgICAgICAgIGF3YWl0IHdhaXRGb3JTdHJpcGVCbnBsUG9wdXAoe1xuICAgICAgICAgICAgc3RyaXBlLFxuICAgICAgICAgICAgY2xpZW50U2VjcmV0OiBjbGllbnRfc2VjcmV0LFxuICAgICAgICAgICAgcG9wdXBOYW1lOiBcIktsYXJuYVwiLFxuICAgICAgICAgICAgcmVkaXJlY3RVcmwsXG4gICAgICAgICAgICBwb3B1cEhhbmRsZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ19fJDUoXCJLbGFybmEgdmVyaWZpY2F0aW9uIHJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICAgICAgZnJhbWVUaXRsZTogXCJLbGFybmEgdmVyaWZpY2F0aW9uXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsb2dfXyQ1KGDilbAgS2xhcm5hIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJLbGFybmEgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJLbGFybmEgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3dJZlN0cmlwZUJucGxGbG93QWJvcnRlZChmbG93QWJvcnRTaWduYWwsIFwiS2xhcm5hXCIpO1xuICAgICAgICBjb25zdCB0aGVpclBheW1lbnRNZXRob2QgPSBjb25maXJtYXRpb25SZXN1bHQucGF5bWVudEludGVudC5wYXltZW50X21ldGhvZD8udG9TdHJpbmcoKSA/PyB2b2lkIDA7XG4gICAgICAgIGNvbnN0IGNvbmZpcm0gPSB1c2VQb3B1cCA/IGNvbmZpcm1TdHJpcGVCbnBsUGF5bWVudEZsb3cgOiBjb25maXJtUGF5bWVudEZsb3c7XG4gICAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtKGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLmNoZWNrb3V0X2F0dGVtcHRfaWQsXG4gICAgICAgICAgdGhlaXJfcG1faWQ6IHRoZWlyUGF5bWVudE1ldGhvZFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3dJZlN0cmlwZUJucGxGbG93QWJvcnRlZChmbG93QWJvcnRTaWduYWwsIFwiS2xhcm5hXCIpO1xuICAgICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgICAgbG9nUHJlZml4OiBcInN0cmlwZS1rbGFybmFcIixcbiAgICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBlcnJfXyQ2KFwiRXJyb3IgaW4gS2xhcm5hIGNoZWNrb3V0IGZsb3c6XCIsIGVycm9yKTtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIktsYXJuYSBwYXltZW50IGZhaWxlZFwiO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuKTtcblxuY29uc3QgT0pTX1NUUklQRV9MSU5LX0JUTl9JRCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiO1xuY29uc3QgeyBsb2dfXzogbG9nX18kNCwgZXJyX186IGVycl9fJDUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWxpbmtcIik7XG5jb25zdCBTdHJpcGVMaW5rQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IFN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0U3RyaXBlTGlua0Zsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCBpbml0UGFyYW1zID0gY29udGV4dC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgbG9nX18kNChgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLmApO1xuICAgIGNvbnN0IHN0cmlwZUxpbmtDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlTGlua0NwbSk7XG4gICAgbG9nX18kNChgU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyQ0KGBDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5gKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCB7IGVsZW1lbnRzLCBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUxpbmtDcG0ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogaW5pdGlhbFByZXZpZXcuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIGNvbnN0IGxpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQgPSBlbGVtZW50cy5jcmVhdGUoXCJsaW5rQXV0aGVudGljYXRpb25cIik7XG4gICAgbG9nX18kNChgQ3JlYXRpbmcgZXhwcmVzcyBjaGVja291dC4uLmApO1xuICAgIGNvbnN0IGV4cHJlc3NDaGVja291dEVsZW1lbnQgPSBlbGVtZW50cy5jcmVhdGUoXCJleHByZXNzQ2hlY2tvdXRcIiwge1xuICAgICAgYnV0dG9uSGVpZ2h0OiBpbml0UGFyYW1zPy5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVuZGVyTGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudCA9IChzZWxlY3Rvciwgc2lsZW50KSA9PiB7XG4gICAgICBsZXQgcGFyZW50Q29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICBpZiAoIXBhcmVudENvbnRhaW5lcikge1xuICAgICAgICBlcnJfXyQ1KGBSZWNvbW1hbmRlZCB0byByZW5kZXIgYSBjb250YWluZXIgd2l0aCAke3NlbGVjdG9yfSB0byBhdm9pZCByZW5kZXJpbmcgaW4gdGhlIGJvZHlgKTtcbiAgICAgICAgcGFyZW50Q29udGFpbmVyID0gZG9jdW1lbnQuYm9keTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBwYXJlbnRDb250YWluZXI/LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG4gICAgICBsaW5rQXV0aGVudGljYXRpb25FbGVtZW50Lm1vdW50KGNvbnRhaW5lcik7XG4gICAgICBsZXQgaXNBdXRoZW50aWNhdGVkID0gZmFsc2U7XG4gICAgICBsZXQgaXNMaW5rQXV0aFJlYWR5ID0gZmFsc2U7XG4gICAgICBsaW5rQXV0aGVudGljYXRpb25FbGVtZW50Lm9uY2UoXCJyZWFkeVwiLCAoKSA9PiB7XG4gICAgICAgIGlzTGlua0F1dGhSZWFkeSA9IHRydWU7XG4gICAgICAgIGluaXRQYXJhbXM/Lm9uQXV0aGVudGljYXRpb25FbGVtZW50UmVhZHk/LigpO1xuICAgICAgfSk7XG4gICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICAgICAgY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgICAgICBjb250YWluZXIuc3R5bGUudG9wID0gXCItMTAwMHB4XCI7XG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gXCItMTAwMHB4XCI7XG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS56SW5kZXggPSBcIi0xXCI7XG4gICAgICAgIGxpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQub24oXCJjaGFuZ2VcIiwgKGUpID0+IHtcbiAgICAgICAgICBpc0F1dGhlbnRpY2F0ZWQgPSBlLmNvbXBsZXRlIHx8ICEhZS52YWx1ZS5lbWFpbDtcbiAgICAgICAgICBpZiAoaXNMaW5rQXV0aFJlYWR5KSB7XG4gICAgICAgICAgICBpbml0UGFyYW1zPy5vbkF1dGhlbnRpY2F0aW9uU3RhdHVzQ2hhbmdlPy4oaXNBdXRoZW50aWNhdGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpZnJhbWUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcihcImlmcmFtZVwiKTtcbiAgICAgICAgaWYgKGlmcmFtZSkge1xuICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gaWZyYW1lLm9mZnNldEhlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IGlzUG9zc2libGVBdXRoZW50aWNhdGVkID0gaGVpZ2h0ID4gMTYwO1xuICAgICAgICAgICAgaWYgKGlzTGlua0F1dGhSZWFkeSkge1xuICAgICAgICAgICAgICBpbml0UGFyYW1zPy5vbkF1dGhlbnRpY2F0aW9uU3RhdHVzQ2hhbmdlPy4oaXNBdXRoZW50aWNhdGVkIHx8IGlzUG9zc2libGVBdXRoZW50aWNhdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGlmcmFtZSwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFtcInN0eWxlXCJdIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudDtcbiAgICB9O1xuICAgIGNvbnN0IG1vdW50QnV0dG9uID0gKHNlbGVjdG9yKSA9PiB7XG4gICAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50Lm1vdW50KHNlbGVjdG9yID8gc2VsZWN0b3IgOiBgIyR7T0pTX1NUUklQRV9MSU5LX0JUTl9JRH1gKTtcbiAgICB9O1xuICAgIGNvbnN0IGRpc21vdW50QnV0dG9uID0gKCkgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC51bm1vdW50KCk7XG4gICAgfTtcbiAgICBpZiAoaW5pdFBhcmFtcz8uZG9Ob3RNb3VudE9uSW5pdCkge1xuICAgICAgbG9nX18kNChgTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQ0KGBNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5gKTtcbiAgICAgIG1vdW50QnV0dG9uKCk7XG4gICAgfVxuICAgIGlmIChpbml0UGFyYW1zPy5zaWxlbnRseUNoZWNrQXV0aGVudGljYXRpb24pIHtcbiAgICAgIGxvZ19fJDQoYFNpbGVudGx5IG1vdW50aW5nIGxpbmsgYXV0aGVudGljYXRpb24gZWxlbWVudCBhdCAjJHtPSlNfU1RSSVBFX0xJTktfQlROX0lEfS4uLmApO1xuICAgICAgcmVuZGVyTGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudChgIyR7T0pTX1NUUklQRV9MSU5LX0JUTl9JRH1gLCB0cnVlKTtcbiAgICB9XG4gICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5vbihcImNsaWNrXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgbG9nX18kNChcIlN0cmlwZSBMaW5rIGJ1dHRvbiBjbGlja2VkXCIpO1xuICAgICAgaWYgKGluaXRQYXJhbXM/Lm92ZXJyaWRlTGlua1N1Ym1pdCkge1xuICAgICAgICBjb25zdCBzaG91bGRTdWJtaXQgPSBhd2FpdCBpbml0UGFyYW1zLm92ZXJyaWRlTGlua1N1Ym1pdCgpO1xuICAgICAgICBpZiAoIXNob3VsZFN1Ym1pdCkge1xuICAgICAgICAgIGxvZ19fJDQoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBldmVudC5yZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5vbihcImNvbmZpcm1cIiwgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICBsb2dfXyQ0KFwiU3RyaXBlIExpbmsgd2luZG93IGNvbmZpcm1lZFwiLCBldmVudCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdHJpcGUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IGV2ZW50LmJpbGxpbmdEZXRhaWxzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikge1xuICAgICAgICBlcnJfXyQ1KFwiZXJyb3JcIiwgcmVzdWx0LmVycm9yKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKHJlc3VsdC5lcnJvci5tZXNzYWdlID8/IFwiU3RyaXBlIExpbmsgdW5rbm93biBlcnJvclwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJDQoXCJwYXltZW50TWV0aG9kXCIsIHJlc3VsdC5wYXltZW50TWV0aG9kKTtcbiAgICAgICAgT2pzRmxvd3Muc3RyaXBlTGluay5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBzdHJpcGVMaW5rQ3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHN0cmlwZVBNOiByZXN1bHQucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6IHRydWUgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBjb250cm9sbGVyOiB7XG4gICAgICAgIG1vdW50QnV0dG9uLFxuICAgICAgICBkaXNtb3VudEJ1dHRvbixcbiAgICAgICAgbW91bnRMaW5rQXV0aGVudGljYXRpb25FbGVtZW50OiAoc2VsZWN0b3IpID0+IHJlbmRlckxpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQoc2VsZWN0b3IsIGZhbHNlKSxcbiAgICAgICAgd2FpdEZvckJ1dHRvblRvTW91bnQ6IGFzeW5jICgpID0+IGF3YWl0IGdldEVsZW1lbnRCeUlkQXN5bmMoT0pTX1NUUklQRV9MSU5LX0JUTl9JRClcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlTGlua0Zsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyQ0KGBSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDQoYE1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5gKTtcbiAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBNKG5vbkNkZUZvcm1JbnB1dHMsIGN1c3RvbVBhcmFtcy5zdHJpcGVQTSk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG1lcmdlZElucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBsb2dfXyQ0KGBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogY3VzdG9tUGFyYW1zLnN0cmlwZVBNLmlkLFxuICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgbG9nX18kNChcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IFN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zLnBhcnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpO1xuICAgIGNvbnN0IG91ckV4aXN0aW5nUG1JZCA9IG5leHRBY3Rpb25NZXRhZGF0YVswXS5vdXJfZXhpc3RpbmdfcG1faWQ7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQ0KGBEb2luZyBwYXltZW50IHNldHVwLi4uYCk7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogb3VyRXhpc3RpbmdQbUlkXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQ0KGBEb2luZyBjaGVja291dC4uLmApO1xuICAgICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgfVxuICB9XG4pO1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSA9IChmb3JtSW5wdXRzLCBzdHJpcGVQbSkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5wYXllckxhc3ROYW1lUGFydHNdID0gc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLm5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgc3RyaXBlUG1bXCJsaW5rXCJdPy5lbWFpbCB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiO1xuICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5wb3N0YWxfY29kZSB8fCBcIjAwMDAwXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5jb3VudHJ5IHx8IFwiVVNcIjtcbiAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIlwiO1xuICBjb25zdCBsYXN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiXCI7XG4gIGlmIChmaXJzdE5hbWUgfHwgbGFzdE5hbWUpIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICB9IGVsc2Uge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgfVxuICBsb2dfXyQ0KGBGaW5hbCBmb3JtIGlucHV0czpgLCBpbnB1dHMpO1xuICByZXR1cm4gaW5wdXRzO1xufTtcbmNvbnN0IGdldEVsZW1lbnRCeUlkQXN5bmMgPSAoaWQpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gIGNvbnN0IGdldEVsZW1lbnQgPSAoKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcmVzb2x2ZShlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGdldEVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbiAgZ2V0RWxlbWVudCgpO1xufSk7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDMsIGVycl9fOiBlcnJfXyQ0IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1wclwiKTtcbmNvbnN0IFN0cmlwZVByQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei51bmlvbihbei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IGluaXRTdHJpcGVQckZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQzKGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLmApO1xuICAgIGNvbnN0IGNoZWNrb3V0UGF5bWVudE1ldGhvZCA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVQckNwbSk7XG4gICAgbG9nX18kMyhgSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGxvZ19fJDMoYEdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudGApO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHByID0gYXdhaXQgY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QoXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuc3RyaXBlX3BrLFxuICAgICAgaW5pdGlhbFByZXZpZXcuYW1vdW50QXRvbSxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5LFxuICAgICAgaXNTZXR1cE1vZGVcbiAgICApO1xuICAgIGxvZ19fJDMoYENoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRgKTtcbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudCA9IGF3YWl0IHByLmNhbk1ha2VQYXltZW50KCk7XG4gICAgaWYgKGNhbk1ha2VQYXltZW50ID09PSBudWxsKSB7XG4gICAgICBlcnJfXyQ0KGBjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsYCk7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHJlYXNvbjogXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIgfTtcbiAgICB9XG4gICAgbG9nX18kMyhgU3RyaXBlIFBSIGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBDYW4gbWFrZSBwYXltZW50YCwgY2FuTWFrZVBheW1lbnQpO1xuICAgIGNvbnN0IHJ1blN0cmlwZVByRmxvdzIgPSAocHJvdmlkZXIsIHBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIE9qc0Zsb3dzLnN0cmlwZVBSLnJ1bih7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHByb3ZpZGVyKSxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlciwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICAgICAgcHIsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7IGFwcGxlUGF5OiBjYW5NYWtlUGF5bWVudC5hcHBsZVBheSwgZ29vZ2xlUGF5OiBjYW5NYWtlUGF5bWVudC5nb29nbGVQYXkgfSxcbiAgICAgICAgICBzdGFydEZsb3c6IHJ1blN0cmlwZVByRmxvdzJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBwcixcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogY2FuTWFrZVBheW1lbnQuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiBydW5TdHJpcGVQckZsb3cyXG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZVByRmxvdyQxID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBpbml0UmVzdWx0XG4gIH0pID0+IHtcbiAgICBsb2dfXyQzKGBSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgaWYgKGN1c3RvbVBhcmFtcy5wcm92aWRlciAhPT0gY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2N1c3RvbVBhcmFtcy5wcm92aWRlcn0sIGdvdCAke2NoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcn1gKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwciA9IGluaXRSZXN1bHQucHI7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBvdmVycmlkZSA9IGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdDtcbiAgICBjb25zdCBhcHBsZVBheVBheW1lbnRSZXF1ZXN0ID0gb3ZlcnJpZGUgPyB0eXBlb2Ygb3ZlcnJpZGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PT0gXCJmdW5jdGlvblwiID8gb3ZlcnJpZGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCh7fSkgOiBvdmVycmlkZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0IDogdm9pZCAwO1xuICAgIGNvbnN0IG5lZWRzRnJlc2hQcmV2aWV3ID0gISFzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwicHJvbW9Db2RlXCIpO1xuICAgIGlmICghcHIuaXNTaG93aW5nKCkpIHtcbiAgICAgIGlmIChuZWVkc0ZyZXNoUHJldmlldykge1xuICAgICAgICBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCkudGhlbihcbiAgICAgICAgICAoZnJlc2hQcmV2aWV3KSA9PiB7XG4gICAgICAgICAgICBpZiAob3ZlcnJpZGUpIHtcbiAgICAgICAgICAgICAgbG9nX18kMyhgT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aGAsIG92ZXJyaWRlLCBgZnJlc2hQcmV2aWV3OmAsIGZyZXNoUHJldmlldyk7XG4gICAgICAgICAgICAgIGNvbnN0IG1lcmdlZEFtb3VudCA9IG92ZXJyaWRlLmFtb3VudCA/PyBmcmVzaFByZXZpZXc7XG4gICAgICAgICAgICAgIHVwZGF0ZVByV2l0aEFtb3VudChcbiAgICAgICAgICAgICAgICBwcixcbiAgICAgICAgICAgICAgICBtZXJnZWRBbW91bnQsXG4gICAgICAgICAgICAgICAgb3ZlcnJpZGUucGVuZGluZyA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBhcHBsZVBheVBheW1lbnRSZXF1ZXN0LFxuICAgICAgICAgICAgICAgIG92ZXJyaWRlLmxhYmVsID8/IFwiVG90YWxcIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbG9nX18kMyhgUFIgZmxvdzogTm8gb3ZlcnJpZGUsIHVzaW5nIGZyZXNoIHByZXZpZXc6YCwgZnJlc2hQcmV2aWV3KTtcbiAgICAgICAgICAgICAgdXBkYXRlUHJXaXRoQW1vdW50KHByLCBmcmVzaFByZXZpZXcsIGZhbHNlLCB2b2lkIDAsIFwiVG90YWxcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChvdmVycmlkZSkge1xuICAgICAgICBsb2dfXyQzKGBQUiBmbG93OiB1c2luZyBvdmVycmlkZTpgLCBvdmVycmlkZSk7XG4gICAgICAgIHVwZGF0ZVByV2l0aEFtb3VudChwciwgb3ZlcnJpZGUuYW1vdW50LCBvdmVycmlkZS5wZW5kaW5nLCBhcHBsZVBheVBheW1lbnRSZXF1ZXN0LCBvdmVycmlkZS5sYWJlbCA/PyBcIlRvdGFsXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBsb2dfXyQzKGBTaG93aW5nIFBSIGRpYWxvZy4uLmApO1xuICAgIHByLnNob3coKTtcbiAgICBjb25zdCBzdHJpcGVQbUFkZGVkRXZlbnQgPSBhd2FpdCB3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZChwcik7XG4gICAgbG9nX18kMyhgU3RyaXBlIFBNIGFkZGVkIGV2ZW50OmAsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgbG9nX18kMyhgTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLmApO1xuICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0obm9uQ2RlRm9ybUlucHV0cywgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGxvZ19fJDMoYFBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcCBheW1lbnQgZmxvdy4uLmAsIG5vbkNkZUZvcm1GaWVsZHMpO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUihhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBmaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgbG9nX18kMyhgQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLmApO1xuICAgIGF3YWl0IGNvbmZpcm1TdHJpcGVQclBNKG5leHRBY3Rpb25NZXRhZGF0YSwgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJDMoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLmApO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlblxuICAgICAgfSk7XG4gICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kMyhgUGVyZm9ybWluZyBjaGVja291dC4uLmApO1xuICAgICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgfVxuICB9XG4pO1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQbSA9IChmb3JtSW5wdXRzLCBzdHJpcGVQbUV2dCkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5wYXllckxhc3ROYW1lUGFydHNdID0gc3RyaXBlUG1FdnQucGF5ZXJOYW1lPy50cmltKCk/LnNwbGl0KC9cXHMrLykgPz8gW107XG4gIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBwYXllckxhc3ROYW1lUGFydHMuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICBjb25zdCBiaWxsaW5nQWRkcmVzcyA9IHN0cmlwZVBtRXZ0LnBheW1lbnRNZXRob2Q/LmJpbGxpbmdfZGV0YWlscz8uYWRkcmVzcztcbiAgY29uc3Qgc2hpcHBpbmdBZGRyZXNzID0gc3RyaXBlUG1FdnQuc2hpcHBpbmdBZGRyZXNzO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHN0cmlwZVBtRXZ0LnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiO1xuICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IGJpbGxpbmdBZGRyZXNzPy5wb3N0YWxfY29kZSB8fCBzaGlwcGluZ0FkZHJlc3M/LnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBiaWxsaW5nQWRkcmVzcz8uY291bnRyeSB8fCBzaGlwcGluZ0FkZHJlc3M/LmNvdW50cnkgfHwgXCJVU1wiO1xuICBjb25zdCBmaXJzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBheWVyRmlyc3ROYW1lIHx8IFwiXCI7XG4gIGNvbnN0IGxhc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJcIjtcbiAgaWYgKGZpcnN0TmFtZSB8fCBsYXN0TmFtZSkge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBmaXJzdE5hbWU7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gbGFzdE5hbWU7XG4gIH0gZWxzZSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBcIlwiO1xuICB9XG4gIGxvZ19fJDMoYEZpbmFsIGZvcm0gaW5wdXRzOmAsIGlucHV0cyk7XG4gIHJldHVybiBpbnB1dHM7XG59O1xuY29uc3QgdXBkYXRlUHJXaXRoQW1vdW50ID0gKHByLCBhbW91bnQsIGlzUGVuZGluZywgc3RyaXBlQXBwbGVQYXksIGxhYmVsKSA9PiB7XG4gIHByLnVwZGF0ZSh7XG4gICAgdG90YWw6IGFtb3VudCA/IHtcbiAgICAgIGFtb3VudDogYW1vdW50LmFtb3VudEF0b20sXG4gICAgICBsYWJlbDogbGFiZWwgPz8gXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogaXNQZW5kaW5nXG4gICAgfSA6IHZvaWQgMCxcbiAgICBjdXJyZW5jeTogYW1vdW50Py5jdXJyZW5jeSxcbiAgICAvLyBTdHJpcGUncyBhcHBsZVBheSBvcHRpb24gb25seSBzdXBwb3J0cyAncmVjdXJyaW5nUGF5bWVudFJlcXVlc3QnIHwgJ2RlZmVycmVkUGF5bWVudFJlcXVlc3QnIHwgJ2F1dG9tYXRpY1JlbG9hZFBheW1lbnRSZXF1ZXN0JyBvZiBuYXRpdmUgQXBwbGVQYXkgcGF5bWVudCByZXF1ZXN0XG4gICAgLy8gV2UncmUgYWNjZXB0aW5nIG5hdGl2ZSBQYXltZW50IFJlcXVlc3QgaGVyZSBmb3IgbW9yZSBjb21tb24gdHlwaW5nLlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBzdHJpcGUgZG8gbm90IGV4cGVjdCBhZGRpdGlvbmFsIGZpZWxkc1xuICAgIGFwcGxlUGF5OiBzdHJpcGVBcHBsZVBheVxuICB9KTtcbn07XG5jb25zdCBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke3Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICB9XG4gIHJldHVybiBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufTtcblxuY29uc3QgZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdCA9IChjcG1zLCB3aXRoUHJvdmlkZXIsIHdpdGhQcm9jZXNzb3IpID0+IHtcbiAgY29uc3QgbWF0Y2hlcyA9IGNwbXMuZmlsdGVyKChjcG0pID0+IHtcbiAgICBjb25zdCBtYXRjaGVzUHJvY2Vzc29yID0gd2l0aFByb2Nlc3NvciA9PT0gdm9pZCAwID8gdHJ1ZSA6IGNwbS5wcm9jZXNzb3JfbmFtZSA9PT0gd2l0aFByb2Nlc3NvcjtcbiAgICBjb25zdCBtYXRjaGVzUHJvdmlkZXIgPSBjcG0ucHJvdmlkZXIgPT09IHdpdGhQcm92aWRlcjtcbiAgICByZXR1cm4gbWF0Y2hlc1Byb2Nlc3NvciAmJiBtYXRjaGVzUHJvdmlkZXI7XG4gIH0pO1xuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgY3Btcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7d2l0aFByb3ZpZGVyfScgYW5kIHByb2Nlc3NvciAnJHt3aXRoUHJvY2Vzc29yfSdgKTtcbiAgfVxuICBpZiAobWF0Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICBjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgY3Btcyk7XG4gICAgY29uc29sZS53YXJuKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gICAgdHJhY2soXCJtb3JlX3RoYW5fb25lX2NwbV9mb3VuZFwiLCB7XG4gICAgICBwcm92aWRlcjogd2l0aFByb3ZpZGVyLFxuICAgICAgcHJvY2Vzc29yOiB3aXRoUHJvY2Vzc29yLFxuICAgICAgY3Btc1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBtYXRjaGVzWzBdO1xufTtcbmNvbnN0IE9qc0Zsb3dzID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkNvbW1vbkNjRmxvd1xuICB9LFxuICAvLyBTdHJpcGVcbiAgc3RyaXBlUFI6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlUHJGbG93LFxuICAgIHJ1bjogcnVuU3RyaXBlUHJGbG93JDFcbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IGluaXRTdHJpcGVMaW5rRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZUxpbmtGbG93XG4gIH0sXG4gIHN0cmlwZUtsYXJuYToge1xuICAgIGluaXQ6IGluaXRTdHJpcGVLbGFybmFGbG93LFxuICAgIHJ1bjogcnVuU3RyaXBlS2xhcm5hRmxvd1xuICB9LFxuICBzdHJpcGVBZmZpcm06IHtcbiAgICBpbml0OiBpbml0U3RyaXBlQWZmaXJtRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZUFmZmlybUZsb3dcbiAgfSxcbiAgc3RyaXBlQWZ0ZXJwYXk6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlQWZ0ZXJwYXlGbG93LFxuICAgIHJ1bjogcnVuU3RyaXBlQWZ0ZXJwYXlGbG93XG4gIH0sXG4gIC8vIFBvY2t5dFxuICBwb2NreXRQYXlwYWw6IHtcbiAgICBpbml0OiBpbml0UG9ja3l0UGF5cGFsRmxvdyxcbiAgICBydW46IHJ1blBvY2t5dFBheXBhbEZsb3dcbiAgfSxcbiAgLy8gUGF5UGFsXG4gIHBheXBhbDoge1xuICAgIGluaXQ6IGluaXRQYXlwYWxGbG93LFxuICAgIHJ1bjogcnVuUGF5cGFsRmxvd1xuICB9LFxuICAvLyBLbGFybmFcbiAgYWlyd2FsbGV4S2xhcm5hOiB7XG4gICAgaW5pdDogaW5pdEFpcndhbGxleEtsYXJuYUZsb3csXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhLbGFybmFGbG93XG4gIH0sXG4gIC8vIEFpcndhbGxleFxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QWlyd2FsbGV4R29vZ2xlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFpcndhbGxleEdvb2dsZVBheUZsb3dcbiAgfSxcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4QXBwbGVQYXlGbG93XG4gIH0sXG4gIGFpcndhbGxleEFDSDoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4QUNIRmxvd1xuICB9LFxuICBhaXJ3YWxsZXhFRlQ6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkFpcndhbGxleEVGVEZsb3dcbiAgfSxcbiAgYWlyd2FsbGV4QkFDUzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4QkFDU0Zsb3dcbiAgfSxcbiAgYWlyd2FsbGV4U0VQQToge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4U0VQQUZsb3dcbiAgfSxcbiAgLy8gTG9vcFxuICBsb29wQ3J5cHRvOiB7XG4gICAgaW5pdDogaW5pdExvb3BGbG93LFxuICAgIHJ1bjogcnVuTG9vcEZsb3dcbiAgfSxcbiAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QXV0aG5ldEFwcGxlUGF5RmxvdyxcbiAgICBydW46IHJ1bkF1dGhuZXRBcHBsZVBheUZsb3dcbiAgfSxcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogaW5pdEF1dGhuZXRHb29nbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQXV0aG5ldEdvb2dsZVBheUZsb3dcbiAgfSxcbiAgYWR5ZW5Hb29nbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QWR5ZW5Hb29nbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQWR5ZW5Hb29nbGVQYXlGbG93XG4gIH0sXG4gIGFkeWVuQXBwbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QWR5ZW5BcHBsZVBheUZsb3csXG4gICAgcnVuOiBydW5BZHllbkFwcGxlUGF5Rmxvd1xuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kMiwgZXJyX186IGVycl9fJDMgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiaW5pdC1mbG93c1wiKTtcbmNvbnN0IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyID0gKGZsb3dOYW1lLCBpbml0RmxvdykgPT4ge1xuICBjb25zdCBwdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcixcbiAgICBpbml0aWFsaXplOiBhc3luYyAoaW5pdFBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHB1Ymxpc2hlci5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhpcyBmbG93IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5pdFJlc3VsdCA9IGF3YWl0IGluaXRGbG93KGluaXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyQyKGDinJQgJHtmbG93TmFtZX0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBpbml0UmVzdWx0KTtcbiAgICAgICAgcHVibGlzaGVyLnNldChpbml0UmVzdWx0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycl9fJDMoYPCdma0gJHtmbG93TmFtZX0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIGdldEVycm9yTWVzc2FnZShlcnJvciksIFwiRGV0YWlsczpcIiwgZXJyb3IpO1xuICAgICAgICBwdWJsaXNoZXIudGhyb3coZXJyb3IsIGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEFsbEluaXRGbG93cyA9IGFzeW5jIChmbG93cywgY29udGV4dCwgZm9ybUNhbGxiYWNrcykgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKGZsb3dzKS5tYXAoKGZsb3cpID0+IGZsb3cuaW5pdGlhbGl6ZSh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkpKTtcbn07XG5jb25zdCBjcmVhdGVJbml0Rmxvd3NQdWJsaXNoZXJzID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIC8vIPCfkqEgQWRkIG5ldyBpbml0IGZsb3dzIGhlcmVcbiAgICAvLyBTdHJpcGUgUFJcbiAgICBzdHJpcGVQUjogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgUFJcIiwgT2pzRmxvd3Muc3RyaXBlUFIuaW5pdCksXG4gICAgLy8gU3RyaXBlIExpbmtcbiAgICBzdHJpcGVMaW5rOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlN0cmlwZSBMaW5rXCIsIE9qc0Zsb3dzLnN0cmlwZUxpbmsuaW5pdCksXG4gICAgLy8gU3RyaXBlIEtsYXJuYVxuICAgIHN0cmlwZUtsYXJuYTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgS2xhcm5hXCIsIE9qc0Zsb3dzLnN0cmlwZUtsYXJuYS5pbml0KSxcbiAgICAvLyBTdHJpcGUgQWZmaXJtXG4gICAgc3RyaXBlQWZmaXJtOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlN0cmlwZSBBZmZpcm1cIiwgT2pzRmxvd3Muc3RyaXBlQWZmaXJtLmluaXQpLFxuICAgIC8vIFN0cmlwZSBBZnRlcnBheVxuICAgIHN0cmlwZUFmdGVycGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlN0cmlwZSBBZnRlcnBheVwiLCBPanNGbG93cy5zdHJpcGVBZnRlcnBheS5pbml0KSxcbiAgICAvLyBBaXJ3YWxsZXggR29vZ2xlUGF5XG4gICAgYWlyd2FsbGV4R29vZ2xlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFpcndhbGxleCBHb29nbGVQYXlcIiwgT2pzRmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICAgIGFpcndhbGxleEFwcGxlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFpcndhbGxleCBBcHBsZVBheVwiLCBPanNGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgICAvLyBMb29wXG4gICAgbG9vcDogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJMb29wXCIsIE9qc0Zsb3dzLmxvb3BDcnlwdG8uaW5pdCksXG4gICAgLy8gUGF5UGFsXG4gICAgcGF5cGFsOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlBheVBhbFwiLCBPanNGbG93cy5wYXlwYWwuaW5pdCksXG4gICAgLy8gS2xhcm5hXG4gICAgYWlyd2FsbGV4S2xhcm5hOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIktsYXJuYVwiLCBPanNGbG93cy5haXJ3YWxsZXhLbGFybmEuaW5pdCksXG4gICAgLy8gUG9ja3l0IFBheVBhbFxuICAgIHBvY2t5dFBheXBhbDogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJQb2NreXQgUGF5UGFsXCIsIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5pbml0KSxcbiAgICAvLyBBdXRobmV0IEdvb2dsZVBheVxuICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBdXRobmV0IEdvb2dsZVBheVwiLCBPanNGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkuaW5pdCksXG4gICAgLy8gQXV0aG5ldCBBcHBsZVBheVxuICAgIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkF1dGhuZXQgQXBwbGVQYXlcIiwgT2pzRmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkuaW5pdCksXG4gICAgLy8gQWR5ZW4gR29vZ2xlUGF5XG4gICAgYWR5ZW5Hb29nbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQWR5ZW4gR29vZ2xlUGF5XCIsIE9qc0Zsb3dzLmFkeWVuR29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEFkeWVuIEFwcGxlUGF5XG4gICAgYWR5ZW5BcHBsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBZHllbiBBcHBsZVBheVwiLCBPanNGbG93cy5hZHllbkFwcGxlUGF5LmluaXQpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgfTtcbn07XG5cbmNvbnN0IHsgZXJyX186IGVycl9fJDIgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiZm9ybS1jYWxsYmFja3NcIik7XG5jb25zdCBPcHRpb25hbEZuID0gei5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0gei5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyQyKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRlY3RGcmFtZXdvcmsoKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgIGNvbnN0IG5leHRXaW5kb3cgPSB3aW5kb3c7XG4gICAgaWYgKG5leHRXaW5kb3c/Lm5leHQgfHwgbmV4dFdpbmRvdz8uX19ORVhUX0RBVEFfXyB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI19fbmV4dFwiKSkge1xuICAgICAgcmV0dXJuIFwibmV4dGpzXCIgLyogTmV4dEpTICovO1xuICAgIH1cbiAgICBjb25zdCBudXh0V2luZG93ID0gd2luZG93O1xuICAgIGlmIChudXh0V2luZG93Py5fX05VWFRfXyB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI19fbnV4dFwiKSkge1xuICAgICAgcmV0dXJuIFwibnV4dFwiIC8qIE51eHQgKi87XG4gICAgfVxuICAgIGlmIChPYmplY3Qua2V5cyhkb2N1bWVudCkuZmluZCgoa2V5KSA9PiBrZXkuaW5jbHVkZXMoXCJyZWFjdFwiKSkgfHwgISFBcnJheS5mcm9tKGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcImJvZHkgPiAqXCIpKS5maW5kKFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIF9yZWFjdFJvb3RDb250YWluZXIgZG9lc24ndCBleGlzdFxuICAgICAgKG5vZGUpID0+IG5vZGUuX3JlYWN0Um9vdENvbnRhaW5lclxuICAgICkpIHtcbiAgICAgIHJldHVybiBcInJlYWN0XCIgLyogUmVhY3QgKi87XG4gICAgfVxuICAgIGNvbnN0IHZ1ZVdpbmRvdyA9IHdpbmRvdztcbiAgICBpZiAodnVlV2luZG93Py5WdWUgfHwgdnVlV2luZG93Py5fX1ZVRV9fKSB7XG4gICAgICByZXR1cm4gXCJ2dWVcIiAvKiBWdWUgKi87XG4gICAgfVxuICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpKSB7XG4gICAgICByZXR1cm4gXCJhbmd1bGFyXCIgLyogQW5ndWxhciAqLztcbiAgICB9XG4gICAgcmV0dXJuIFwidmFuaWxsYVwiIC8qIFZhbmlsbGEgKi87XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFwidW5rbm93blwiIC8qIFVua25vd24gKi87XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZyYW1ld29ya1ZlcnNpb24oZnJhbWV3b3JrKSB7XG4gIHRyeSB7XG4gICAgc3dpdGNoIChmcmFtZXdvcmspIHtcbiAgICAgIGNhc2UgXCJyZWFjdFwiIC8qIFJlYWN0ICovOiB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcIm5leHRqc1wiIC8qIE5leHRKUyAqLzoge1xuICAgICAgICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgICAgIGNvbnN0IG5leHRXaW5kb3cgPSB3aW5kb3c7XG4gICAgICAgIHJldHVybiBuZXh0V2luZG93Py5uZXh0Py52ZXJzaW9uIHx8IG5leHRXaW5kb3c/Ll9fTkVYVF9EQVRBX18/LmJ1aWxkSWQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJudXh0XCIgLyogTnV4dCAqLzoge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJ2dWVcIiAvKiBWdWUgKi86IHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwiYW5ndWxhclwiIC8qIEFuZ3VsYXIgKi86IHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnQyID0gZ2V0V2luZG93U2FmZSgpPy5kb2N1bWVudDtcbiAgICAgICAgY29uc3QgbmdWZXJzaW9uRWwgPSBkb2N1bWVudDI/LnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIik7XG4gICAgICAgIHJldHVybiBuZ1ZlcnNpb25FbCA/IG5nVmVyc2lvbkVsLmdldEF0dHJpYnV0ZShcIm5nLXZlcnNpb25cIikgOiBudWxsO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBnZXRGcmFtZXdvcmtJbmZvKCkge1xuICBjb25zdCBmcmFtZXdvcmsgPSBkZXRlY3RGcmFtZXdvcmsoKTtcbiAgY29uc3QgdmVyc2lvbiA9IGdldEZyYW1ld29ya1ZlcnNpb24oZnJhbWV3b3JrKTtcbiAgcmV0dXJuIHsgZnJhbWV3b3JrLCB2ZXJzaW9uIH07XG59XG5cbnZhciBTdWJtaXRNZXRob2RzID0gLyogQF9fUFVSRV9fICovICgoU3VibWl0TWV0aG9kczIpID0+IHtcbiAgU3VibWl0TWV0aG9kczJbXCJjYXJkXCJdID0gXCJjYXJkXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wicG9ja3l0UGF5cGFsXCJdID0gXCJwb2NreXQtcGF5cGFsXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXBwbGVQYXlcIl0gPSBcImFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImdvb2dsZVBheVwiXSA9IFwiZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImxvb3BDcnlwdG9cIl0gPSBcImxvb3AtY3J5cHRvXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wicGF5cGFsXCJdID0gXCJwYXlwYWxcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJrbGFybmFcIl0gPSBcImtsYXJuYVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFmZmlybVwiXSA9IFwiYWZmaXJtXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWZ0ZXJwYXlcIl0gPSBcImFmdGVycGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wic3RyaXBlTGlua1wiXSA9IFwic3RyaXBlLWxpbmtcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhHb29nbGVQYXlcIl0gPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QXBwbGVQYXlcIl0gPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRHb29nbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0QXBwbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZHllbkdvb2dsZVBheVwiXSA9IFwiYWR5ZW4tZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFkeWVuQXBwbGVQYXlcIl0gPSBcImFkeWVuLWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEFDSFwiXSA9IFwiYWlyd2FsbGV4LWFjaFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEVGVFwiXSA9IFwiYWlyd2FsbGV4LWVmdFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEJBQ1NcIl0gPSBcImFpcndhbGxleC1iYWNzXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4U0VQQVwiXSA9IFwiYWlyd2FsbGV4LXNlcGFcIjtcbiAgcmV0dXJuIFN1Ym1pdE1ldGhvZHMyO1xufSkoU3VibWl0TWV0aG9kcyB8fCB7fSk7XG56Lm5hdGl2ZUVudW0oU3VibWl0TWV0aG9kcyk7XG52YXIgUGF5bWVudFByb3ZpZGVyVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFBheW1lbnRQcm92aWRlclR5cGUyKSA9PiB7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiQUNIXCJdID0gXCJhY2hcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJFRlRcIl0gPSBcImVmdFwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkJBQ1NcIl0gPSBcImJhY3NcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJTRVBBXCJdID0gXCJzZXBhXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiQVBQTEVfUEFZXCJdID0gXCJhcHBsZV9wYXlcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJDUkVESVRfQ0FSRFwiXSA9IFwiY3JlZGl0X2NhcmRcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJHT09HTEVfUEFZXCJdID0gXCJnb29nbGVfcGF5XCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiU1RSSVBFX0xJTktcIl0gPSBcInN0cmlwZV9saW5rXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiQ1JZUFRPXCJdID0gXCJjcnlwdG9cIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJQQVlQQUxcIl0gPSBcInBheXBhbFwiO1xuICByZXR1cm4gUGF5bWVudFByb3ZpZGVyVHlwZTI7XG59KShQYXltZW50UHJvdmlkZXJUeXBlIHx8IHt9KTtcblxuY29uc3QgZ2V0QXBwbGVQYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBhcHBsZVBheUluaXRGbG93cyA9IFtpbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXksIGluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheSwgaW5pdEZsb3dzLmFkeWVuQXBwbGVQYXldO1xuICBjb25zdCBhcHBsZVBheUluaXRSZXN1bHRzID0gW107XG4gIGFwcGxlUGF5SW5pdEZsb3dzLmZvckVhY2goKGZsb3cpID0+IHtcbiAgICBjb25zdCBmbG93VmFsdWUgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpZiAoZmxvd1ZhbHVlPy5pc0F2YWlsYWJsZSkge1xuICAgICAgYXBwbGVQYXlJbml0UmVzdWx0cy5wdXNoKGZsb3dWYWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3RyaXBlUFJGbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZVBSRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBjb25zdCBpc0FwcGxlUGF5QXZhaWxhYmxlID0gc3RyaXBlUFJGbG93UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheTtcbiAgICBpZiAoaXNBcHBsZVBheUF2YWlsYWJsZSkge1xuICAgICAgYXBwbGVQYXlJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBzdHJpcGVQUkZsb3dSZXN1bHQuc3RhcnRGbG93KFwiYXBwbGVfcGF5XCIsIHtcbiAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGFwcGxlUGF5SW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBhcHBsZVBheUluaXRSZXN1bHRzLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBzdGFydEFwcGxlUGF5RmxvdyhhcHBsZVBheUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBnZXRHb29nbGVQYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBnb29nbGVQYXlJbml0Rmxvd3MgPSBbaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheSwgaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheSwgaW5pdEZsb3dzLmFkeWVuR29vZ2xlUGF5XTtcbiAgY29uc3QgZ29vZ2xlUGF5SW5pdFJlc3VsdHMgPSBbXTtcbiAgZ29vZ2xlUGF5SW5pdEZsb3dzLmZvckVhY2goKGZsb3cpID0+IHtcbiAgICBjb25zdCBmbG93VmFsdWUgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpZiAoZmxvd1ZhbHVlPy5pc0F2YWlsYWJsZSkge1xuICAgICAgZ29vZ2xlUGF5SW5pdFJlc3VsdHMucHVzaChmbG93VmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHN0cmlwZVBSRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVQUkZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgY29uc3QgaXNHb29nbGVQYXlBdmFpbGFibGUgPSBzdHJpcGVQUkZsb3dSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheTtcbiAgICBpZiAoaXNHb29nbGVQYXlBdmFpbGFibGUpIHtcbiAgICAgIGdvb2dsZVBheUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZVBSRmxvd1Jlc3VsdC5zdGFydEZsb3coXCJnb29nbGVfcGF5XCIsIHtcbiAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGdvb2dsZVBheUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogZ29vZ2xlUGF5SW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0R29vZ2xlUGF5Rmxvdyhnb29nbGVQYXlJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBcHBsZVBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBcHBsZSBQYXkgcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFwcGxlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3Qgc3RhcnRHb29nbGVQYXlGbG93ID0gKGluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpID0+IHtcbiAgaWYgKGN1c3RvbVBhcmFtcz8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgZmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciA9PT0gY3VzdG9tUGFyYW1zLnByb2Nlc3Nvcik7XG4gICAgaWYgKGZsb3c/LmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgR29vZ2xlIFBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgR29vZ2xlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3QgZ2V0S2xhcm5hUHJvY2Vzc29ycyA9IChpbml0Rmxvd3MpID0+IHtcbiAgY29uc3Qga2xhcm5hSW5pdFJlc3VsdHMgPSBbXTtcbiAgY29uc3QgYWlyd2FsbGV4S2xhcm5hRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5haXJ3YWxsZXhLbGFybmEucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoYWlyd2FsbGV4S2xhcm5hRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBrbGFybmFJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gYWlyd2FsbGV4S2xhcm5hRmxvd1Jlc3VsdC5zdGFydEZsb3coY3VzdG9tUGFyYW1zKSxcbiAgICAgIGFib3J0RmxvdzogKCkgPT4ge1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGNvbnN0IHN0cmlwZUtsYXJuYUZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlS2xhcm5hLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZUtsYXJuYUZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAga2xhcm5hSW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZUtsYXJuYUZsb3dSZXN1bHQuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyksXG4gICAgICBhYm9ydEZsb3c6IHN0cmlwZUtsYXJuYUZsb3dSZXN1bHQuYWJvcnRGbG93XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzb3JzOiBrbGFybmFJbml0UmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IGtsYXJuYUluaXRSZXN1bHRzLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBzdGFydEtsYXJuYUZsb3coa2xhcm5hSW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcyk7XG4gICAgfSxcbiAgICBhYm9ydEZsb3c6ICgpID0+IGtsYXJuYUluaXRSZXN1bHRzLmZvckVhY2goKHJlc3VsdCkgPT4gcmVzdWx0LmFib3J0RmxvdygpKVxuICB9O1xufTtcbmNvbnN0IHN0YXJ0S2xhcm5hRmxvdyA9IChpbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKSA9PiB7XG4gIGlmIChjdXN0b21QYXJhbXM/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IGZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IgPT09IGN1c3RvbVBhcmFtcy5wcm9jZXNzb3IpO1xuICAgIGlmIChmbG93Py5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIGZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEtsYXJuYSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgS2xhcm5hIHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5jb25zdCBnZXRBZmZpcm1Qcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBhZmZpcm1Jbml0UmVzdWx0cyA9IFtdO1xuICBjb25zdCBzdHJpcGVBZmZpcm1GbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZUFmZmlybS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVBZmZpcm1GbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGFmZmlybUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBzdHJpcGVBZmZpcm1GbG93UmVzdWx0LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpLFxuICAgICAgYWJvcnRGbG93OiBzdHJpcGVBZmZpcm1GbG93UmVzdWx0LmFib3J0Rmxvd1xuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogYWZmaXJtSW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBhZmZpcm1Jbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRBZmZpcm1GbG93KGFmZmlybUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH0sXG4gICAgYWJvcnRGbG93OiAoKSA9PiBhZmZpcm1Jbml0UmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHJlc3VsdC5hYm9ydEZsb3coKSlcbiAgfTtcbn07XG5jb25zdCBzdGFydEFmZmlybUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBZmZpcm0gcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFmZmlybSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3QgZ2V0QWZ0ZXJwYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBhZnRlcnBheUluaXRSZXN1bHRzID0gW107XG4gIGNvbnN0IHN0cmlwZUFmdGVycGF5Rmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVBZnRlcnBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVBZnRlcnBheUZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgYWZ0ZXJwYXlJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlQWZ0ZXJwYXlGbG93UmVzdWx0LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpLFxuICAgICAgYWJvcnRGbG93OiBzdHJpcGVBZnRlcnBheUZsb3dSZXN1bHQuYWJvcnRGbG93XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzb3JzOiBhZnRlcnBheUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogYWZ0ZXJwYXlJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRBZnRlcnBheUZsb3coYWZ0ZXJwYXlJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9LFxuICAgIGFib3J0RmxvdzogKCkgPT4gYWZ0ZXJwYXlJbml0UmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHJlc3VsdC5hYm9ydEZsb3coKSlcbiAgfTtcbn07XG5jb25zdCBzdGFydEFmdGVycGF5RmxvdyA9IChpbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKSA9PiB7XG4gIGlmIChjdXN0b21QYXJhbXM/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IGZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IgPT09IGN1c3RvbVBhcmFtcy5wcm9jZXNzb3IpO1xuICAgIGlmIChmbG93Py5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIGZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEFmdGVycGF5IHByb2Nlc3NvciAke2N1c3RvbVBhcmFtcy5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCBhdmFpbGFibGVGbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQuaXNBdmFpbGFibGUpO1xuICBpZiAoYXZhaWxhYmxlRmxvdykge1xuICAgIHJldHVybiBhdmFpbGFibGVGbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBBZnRlcnBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kMSwgZXJyX186IGVycl9fJDEgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwidHJhY2VyXCIpO1xuY29uc3QgaW5pdFRyYWNlclNhZmUgPSAodmVyc2lvbiwgYmFzZVVybCkgPT4ge1xuICB0cnkge1xuICAgIGluaXRUcmFjZXJVbnNhZmUodmVyc2lvbiwgYmFzZVVybCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZXJyX18kMShgRXJyb3IgaW5pdGlhbGl6aW5nIHRyYWNlcjogJHtlcnJvcn1gKTtcbiAgfVxufTtcbmxldCBnbG9iYWxUcmFjZXI7XG5jb25zdCBpbml0VHJhY2VyVW5zYWZlID0gYXN5bmMgKHZlcnNpb24sIGJhc2VVcmwpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIGNvbnN0IHNka1RyYWNlV2ViID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwYn1+LmpzJyk7XG4gIGNvbnN0IHsgQ29uc29sZVNwYW5FeHBvcnRlciwgU2ltcGxlU3BhblByb2Nlc3NvciwgV2ViVHJhY2VyUHJvdmlkZXIgfSA9IHNka1RyYWNlV2ViO1xuICBjb25zdCBpbnN0cnVtZW50YXRpb25GZXRjaCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMGp9fi5qcycpO1xuICBjb25zdCB7IEZldGNoSW5zdHJ1bWVudGF0aW9uIH0gPSBpbnN0cnVtZW50YXRpb25GZXRjaDtcbiAgY29uc3QgY29udGV4dFpvbmUgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBrfX4uanMnKTtcbiAgY29uc3QgeyBab25lQ29udGV4dE1hbmFnZXIgfSA9IGNvbnRleHRab25lO1xuICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBlfX4uanMnKTtcbiAgY29uc3QgeyByZWdpc3Rlckluc3RydW1lbnRhdGlvbnMgfSA9IGluc3RydW1lbnRhdGlvbjtcbiAgY29uc3QgcmVzb3VyY2VzID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwMX1+LmpzJyk7XG4gIGNvbnN0IHsgUmVzb3VyY2UgfSA9IHJlc291cmNlcztcbiAgY29uc3QgZGV0ZWN0UmVzb3VyY2VzID0gYXdhaXQgaW1wb3J0KCcuL2RldGVjdC1yZXNvdXJjZXMtIX57MDBufX4uanMnKS50aGVuKG4gPT4gbi5kKTtcbiAgY29uc3QgeyBkZXRlY3RSZXNvdXJjZXNTeW5jIH0gPSBkZXRlY3RSZXNvdXJjZXM7XG4gIGNvbnN0IGV4cG9ydGVyVHJhY2VPdGxwID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwb31+LmpzJyk7XG4gIGNvbnN0IHsgT1RMUFRyYWNlRXhwb3J0ZXIgfSA9IGV4cG9ydGVyVHJhY2VPdGxwO1xuICBjb25zdCBwcm9wYWdhdG9yQjMgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBsfX4uanMnKTtcbiAgY29uc3QgeyBCM1Byb3BhZ2F0b3IsIEIzSW5qZWN0RW5jb2RpbmcgfSA9IHByb3BhZ2F0b3JCMztcbiAgY29uc3Qgc2RrVHJhY2VCYXNlID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwM31+LmpzJyk7XG4gIGNvbnN0IHsgQmF0Y2hTcGFuUHJvY2Vzc29yIH0gPSBzZGtUcmFjZUJhc2U7XG4gIGxvZ19fJDEoYEluaXRpYWxpemluZyB0cmFjZXIgd2l0aCB2ZXJzaW9uICR7dmVyc2lvbn0gYW5kIGJhc2VVcmwgJHtiYXNlVXJsfWApO1xuICBjb25zdCBjb2xsZWN0b3JVcmwgPSBnZXRDb2xsZWN0b3JVcmwoYmFzZVVybCk7XG4gIGxvZ19fJDEoYFVzaW5nIGNvbGxlY3RvciBVUkwgJHtjb2xsZWN0b3JVcmx9YCk7XG4gIGNvbnN0IGV4cG9ydGVyID0gbmV3IE9UTFBUcmFjZUV4cG9ydGVyKHsgdXJsOiBjb2xsZWN0b3JVcmwgfSk7XG4gIGNvbnN0IGJhc2VBdHRycyA9IHtcbiAgICBcInNlcnZpY2UudmVyc2lvblwiOiB2ZXJzaW9uLFxuICAgIFwic2VydmljZS5uYW1lXCI6IFwib2pzXCJcbiAgfTtcbiAgY29uc3QgcHJvdmlkZXIgPSBuZXcgV2ViVHJhY2VyUHJvdmlkZXIoe1xuICAgIHJlc291cmNlOiBuZXcgUmVzb3VyY2UoYmFzZUF0dHJzKS5tZXJnZShkZXRlY3RSZXNvdXJjZXNTeW5jKCkpLFxuICAgIHNwYW5Qcm9jZXNzb3JzOiBbXG4gICAgICBuZXcgU2ltcGxlU3BhblByb2Nlc3NvcihuZXcgQ29uc29sZVNwYW5FeHBvcnRlcigpKSxcbiAgICAgIG5ldyBCYXRjaFNwYW5Qcm9jZXNzb3IoZXhwb3J0ZXIsIHtcbiAgICAgICAgc2NoZWR1bGVkRGVsYXlNaWxsaXM6IDUwMFxuICAgICAgfSlcbiAgICBdXG4gIH0pO1xuICBwcm92aWRlci5yZWdpc3Rlcih7XG4gICAgY29udGV4dE1hbmFnZXI6IG5ldyBab25lQ29udGV4dE1hbmFnZXIoKSxcbiAgICBwcm9wYWdhdG9yOiBuZXcgQjNQcm9wYWdhdG9yKHsgaW5qZWN0RW5jb2Rpbmc6IEIzSW5qZWN0RW5jb2RpbmcuTVVMVElfSEVBREVSIH0pXG4gIH0pO1xuICByZWdpc3Rlckluc3RydW1lbnRhdGlvbnMoe1xuICAgIGluc3RydW1lbnRhdGlvbnM6IFtcbiAgICAgIG5ldyBGZXRjaEluc3RydW1lbnRhdGlvbih7XG4gICAgICAgIHByb3BhZ2F0ZVRyYWNlSGVhZGVyQ29yc1VybHM6IFsvLiovXSxcbiAgICAgICAgLy8gUHJvcGFnYXRlIHRvIGFsbCBVUkxzXG4gICAgICAgIC8vIEV4Y2x1ZGUgQWR5ZW4gVVJMcyAtIHRoZXkgZG8gbm90IGFsbG93IE9QVElPTlMgcmVxdWVzdHNcbiAgICAgICAgLy8gQWxzbyBleGNsdWRlIGxvb3BjcnlwdG8ueHl6XG4gICAgICAgIGlnbm9yZVVybHM6IFsvXmh0dHBzOlxcL1xcLyguKlxcLik/YWR5ZW5cXC5jb20vLCAvXmh0dHBzOlxcL1xcLyguKlxcLik/bG9vcGNyeXB0b1xcLnh5ei9dXG4gICAgICB9KVxuICAgIF1cbiAgfSk7XG4gIGdsb2JhbFRyYWNlciA9IHRyYWNlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIik7XG4gIGxvZ19fJDEoYFRyYWNlciBpbml0aWFsaXplZGApO1xuICByZXR1cm4gZ2xvYmFsVHJhY2VyO1xufTtcbmNvbnN0IGdldENvbGxlY3RvclVybCA9IChmcm9tQmFzZVVybCkgPT4ge1xuICBjb25zdCBiYXNlSG9zdG5hbWUgPSBuZXcgVVJMKGZyb21CYXNlVXJsKS5ob3N0bmFtZTtcbiAgaWYgKGJhc2VIb3N0bmFtZSA9PT0gXCJjZGUub3BlbnBheXN0YWdpbmcuY29tXCIpIHtcbiAgICByZXR1cm4gXCJodHRwczovL290ZWwub3BlbnBheXNhbmRib3guY29tL3YxL3RyYWNlc1wiO1xuICB9IGVsc2UgaWYgKGJhc2VIb3N0bmFtZSA9PT0gXCJjZGUuZ2V0b3BlbnBheS5jb21cIikge1xuICAgIHJldHVybiBcImh0dHBzOi8vb3RlbC5nZXRvcGVucGF5LmNvbS92MS90cmFjZXNcIjtcbiAgfVxuICByZXR1cm4gXCJodHRwOi8vbG9jYWxob3N0OjQzMTkvdjEvdHJhY2VzXCI7XG59O1xuXG5jbGFzcyBPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKGZvcm1JZCwgYmFzZVVybCwgZm9ybUNhbGxiYWNrcywgaW50ZXJuYWxDYWxsYmFja3MpIHtcbiAgICB0aGlzLmhhbmRsZU1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmICghZXZlbnQuc291cmNlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltPSlNdIE5vIHNvdXJjZSBmb3VuZFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGdldENsZWFuT3JpZ2luKGV2ZW50Lm9yaWdpbikgIT09IGdldENsZWFuT3JpZ2luKHRoaXMuYmFzZVVybCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSBcIm9iamVjdFwiICYmIGV2ZW50LmRhdGFbXCJwZW5wYWxcIl0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSBcIm9iamVjdFwiICYmIGV2ZW50LmRhdGFbXCJzb3VyY2VcIl0gJiYgZXZlbnQuZGF0YVtcInNvdXJjZVwiXSA9PT0gXCJyZWFjdC1kZXZ0b29scy1icmlkZ2VcIikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgZXZlbnREYXRhID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGV2ZW50RGF0YSA9IHBhcnNlRXZlbnRQYXlsb2FkKEpTT04ucGFyc2UoZXZlbnQuZGF0YSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUV2ZW50KGV2ZW50RGF0YSk7XG4gICAgICBpZiAoIWlzVmFsaWQpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkLCBwYXlsb2FkIH0gPSBldmVudERhdGE7XG4gICAgICBjb25zdCBldmVudFR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHBheWxvYWQuaGVpZ2h0ID8gYCR7cGF5bG9hZC5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cihlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUsIHtcbiAgICAgICAgICAgIG9iZnVzY2F0ZWRWYWx1ZTogcGF5bG9hZC5vYmZ1c2NhdGVkVmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGFuZ2UoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlLCBwYXlsb2FkLmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmV2ZW50VGFyZ2V0c1tlbGVtZW50SWRdID0gZXZlbnQuc291cmNlO1xuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQocGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcihwYXlsb2FkLm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IocGF5bG9hZC5lbGVtZW50VHlwZSwgcGF5bG9hZC5lcnJvcnMsIGVsZW1lbnRJZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIFVuaGFuZGxlZCBldmVudCB0eXBlOlwiLCBldmVudFR5cGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKGV2ZW50RGF0YSkgPT4ge1xuICAgICAgaWYgKGV2ZW50RGF0YS5mb3JtSWQgIT09IHRoaXMuZm9ybUlkIHx8ICFldmVudERhdGEuZWxlbWVudElkKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiW09KU10gZm9ybUlkXCIsIHRoaXMuZm9ybUlkLCBldmVudERhdGEuZm9ybUlkKTtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm5vbmNlcy5oYXMoZXZlbnREYXRhLm5vbmNlKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgZHVwbGljYXRlIGV2ZW50OlwiLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLm5vbmNlcy5hZGQoZXZlbnREYXRhLm5vbmNlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgdGhpcy5ldmVudFRhcmdldHMgPSB7fTtcbiAgICB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgdGhpcy5mb3JtSWQgPSBmb3JtSWQ7XG4gICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybDtcbiAgICB0aGlzLmZvcm1DYWxsYmFja3MgPSBmb3JtQ2FsbGJhY2tzO1xuICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBpbnRlcm5hbENhbGxiYWNrcztcbiAgfVxufVxuY29uc3QgZ2V0Q2xlYW5PcmlnaW4gPSAodXJsKSA9PiB7XG4gIHJldHVybiBuZXcgVVJMKHVybCkub3JpZ2luO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGlvbihpZnJhbWUsIGNoaWxkT3JpZ2luKSB7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lLFxuICAgIGRlYnVnOiBmYWxzZSxcbiAgICBjaGlsZE9yaWdpblxuICB9KTtcbiAgY29uc3QgY29ubmVjdGlvbk9iaiA9IGF3YWl0IGNvbm5lY3Rpb24ucHJvbWlzZTtcbiAgY29uc3QgaXNWYWxpZE9iamVjdCA9IGF3YWl0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QoY29ubmVjdGlvbk9iaik7XG4gIGlmICghaXNSZXN1bHRWYWxpZChjb25uZWN0aW9uT2JqLCBpc1ZhbGlkT2JqZWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0YCk7XG4gIH1cbiAgcmV0dXJuIGNvbm5lY3Rpb25PYmo7XG59XG5jbGFzcyBDb25uZWN0aW9uTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGFkZENvbm5lY3Rpb24oaWQsIGNvbm5lY3Rpb24pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldChpZCwgY29ubmVjdGlvbik7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbm5lY3Rpb247XG4gIH1cbiAgZ2V0QWxsQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnM7XG4gIH1cbn1cblxuY29uc3Qgc2V0dXBQYXltZW50UmVxdWVzdEhhbmRsZXJzID0gKGluaXRQckZsb3dzLCBjb250ZXh0LCBjYWxsYmFja3MpID0+IHtcbiAgY29uc3QgeyBzdHJpcGVQUiB9ID0gaW5pdFByRmxvd3M7XG4gIHN0cmlwZVBSLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKSB7XG4gICAgICBjb25zdCBpbml0UmVzdWx0ID0gcmVzdWx0LmxvYWRlZFZhbHVlO1xuICAgICAgY29uc3QgY2FuQXBwbGVQYXkgPSBpbml0UmVzdWx0LmlzQXZhaWxhYmxlICYmIGluaXRSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5O1xuICAgICAgY29uc3QgY2FuR29vZ2xlUGF5ID0gaW5pdFJlc3VsdC5pc0F2YWlsYWJsZSAmJiBpbml0UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXk7XG4gICAgICBjb25zdCBmaW5hbFN0YXR1cyA9IHtcbiAgICAgICAgYXBwbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogY2FuQXBwbGVQYXksXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodXNlclBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKGNhbkFwcGxlUGF5KSB7XG4gICAgICAgICAgICAgIHJ1blN0cmlwZVByRmxvdyhcImFwcGxlX3BheVwiLCBpbml0UmVzdWx0LCBjb250ZXh0LCBjYWxsYmFja3MsIHVzZXJQYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGNhbkdvb2dsZVBheSxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1c2VyUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FuR29vZ2xlUGF5KSB7XG4gICAgICAgICAgICAgIHJ1blN0cmlwZVByRmxvdyhcImdvb2dsZV9wYXlcIiwgaW5pdFJlc3VsdCwgY29udGV4dCwgY2FsbGJhY2tzLCB1c2VyUGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjYWxsYmFja3MuZ2V0Lm9uUGF5bWVudFJlcXVlc3RMb2FkKGZpbmFsU3RhdHVzKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IHJ1blN0cmlwZVByRmxvdyA9IChwcm92aWRlciwgaW5pdFJlc3VsdCwgY29udGV4dCwgZm9ybUNhbGxiYWNrcywgcGFyYW1zKSA9PiB7XG4gIHJldHVybiBPanNGbG93cy5zdHJpcGVQUi5ydW4oe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcHJvdmlkZXIpLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBwYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICBpbml0UmVzdWx0XG4gIH0pO1xufTtcblxuY29uc3QgR0VORVJJQ19DT05OX0VSUiA9IGBUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5gO1xuY29uc3QgeyBsb2dfXywgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwib3AtZm9ybVwiKTtcbmNsYXNzIE9wZW5QYXlGb3JtIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgdGhpcy5pc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHRoaXMuY2RlTG9hZEV2ZW50ID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgICB0aGlzLmFueUNkZUNvbm4gPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuY29udGV4dCA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gICAgdGhpcy5pbml0Rmxvd3MgPSBjcmVhdGVJbml0Rmxvd3NQdWJsaXNoZXJzKCk7XG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZUdlbmVyYWxTdWJtaXNzaW9uID0gbnVsbDtcbiAgICB0aGlzLnN0YXJ0Rm9ybUluaXQgPSBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0cmFjZXIgPSB0cmFjZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpO1xuICAgICAgY29uc3Qgc3BhbiA9IHRyYWNlci5zdGFydFNwYW4oXCJmb3JtLmluaXRpYWxpemVcIiwge1xuICAgICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29udGV4dC53aXRoKHRyYWNlLnNldFNwYW4oY29udGV4dC5hY3RpdmUoKSwgc3BhbiksIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjZGVCcmlkZ2VJZnJhbWUgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoRWxlbWVudFR5cGVFbnVtLkNERV9CUklER0UpO1xuICAgICAgICAgIGNkZUJyaWRnZUlmcmFtZS5ub2RlLmlkID0gXCJfX29wX2ludGVybmFsX2NkZV9icmlkZ2VcIjtcbiAgICAgICAgICBjZGVCcmlkZ2VJZnJhbWUubm9kZS5hcmlhSGlkZGVuID0gXCJ0cnVlXCI7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihjZGVCcmlkZ2VJZnJhbWUubm9kZS5zdHlsZSwge1xuICAgICAgICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgICAgICAgIG1hcmdpbjogXCIwcHhcIixcbiAgICAgICAgICAgIHBhZGRpbmc6IFwiMHB4XCIsXG4gICAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgdmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiBcIm5vbmVcIixcbiAgICAgICAgICAgIHVzZXJTZWxlY3Q6IFwibm9uZVwiXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY2RlQnJpZGdlSWZyYW1lLm1vdW50KFwiYm9keVwiKTtcbiAgICAgICAgICBsb2dfXyhcIkNERSBicmlkZ2UgZWxlbWVudCBtb3VudGVkXCIpO1xuICAgICAgICAgIGxvZ19fKFwiSW5pdGlhbGl6aW5nIE9wZW5QYXkgZm9ybTpcIik7XG4gICAgICAgICAgbG9nX18oXCLilJwgV2FpdGluZyBmb3IgQ0RFIGxvYWQgZXZlbnQuLi5cIik7XG4gICAgICAgICAgY29uc3QgY2RlTG9hZGVkID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgICAgdGltZW91dEVyck1zZzogR0VORVJJQ19DT05OX0VSUlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxvZ19fKFwi4pScIENERSBsb2FkIGV2ZW50IHJlY2VpdmVkXCIpO1xuICAgICAgICAgIHNwYW4/LmFkZEV2ZW50KFwid2FpdGluZ19mb3JfY2RlX2Nvbm5lY3Rpb25cIik7XG4gICAgICAgICAgbG9nX18oXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgICAgY29uc3QgY2RlQ29ublNwYW4gPSB0cmFjZXI/LnN0YXJ0U3BhbihcImNkZS5jb25uZWN0XCIsIHZvaWQgMCwgY29udGV4dC5hY3RpdmUoKSk7XG4gICAgICAgICAgY29uc3QgYW55Q2RlQ29ubiA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBHRU5FUklDX0NPTk5fRVJSXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY2RlQ29ublNwYW4/LmVuZCgpO1xuICAgICAgICAgIHNwYW4/LmFkZEV2ZW50KFwiY2RlX2Nvbm5lY3RlZFwiKTtcbiAgICAgICAgICBsb2dfXyhcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKTtcbiAgICAgICAgICBhd2FpdCBzZXRVc2VyRGV2aWNlVG9rZW4oYW55Q2RlQ29ubiwgdGhpcy5kZXZpY2VUb2tlbik7XG4gICAgICAgICAgbG9nX18oXCLilJwgQ3JlYXRpbmcgT0pTIGNvbnRleHQsIHNldHRpbmcgdXAgaGFuZGxlcnMuLi5cIik7XG4gICAgICAgICAgY29uc3Qgb2pzQ29udGV4dCA9IE9wZW5QYXlGb3JtLmJ1aWxkT2pzRmxvd0NvbnRleHQoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgICAgIGNkZUxvYWRlZCxcbiAgICAgICAgICAgIGFueUNkZUNvbm4sXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5jb250ZXh0LnNldChvanNDb250ZXh0KTtcbiAgICAgICAgICBzZXR1cFBheW1lbnRSZXF1ZXN0SGFuZGxlcnModGhpcy5pbml0Rmxvd3MsIG9qc0NvbnRleHQsIHRoaXMuZm9ybUNhbGxiYWNrcyk7XG4gICAgICAgICAgbG9nX18oXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIik7XG4gICAgICAgICAgYXdhaXQgc3RhcnRBbGxJbml0Rmxvd3ModGhpcy5pbml0Rmxvd3MsIG9qc0NvbnRleHQsIHRoaXMuZm9ybUNhbGxiYWNrcyk7XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWQoY2RlTG9hZGVkLnRvdGFsQW1vdW50QXRvbXMsIGNkZUxvYWRlZC5jdXJyZW5jeSk7XG4gICAgICAgICAgbG9nX18oXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKTtcbiAgICAgICAgICBzcGFuPy5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgICAgICB0cmFjayhcImZvcm1fbG9hZGVkXCIpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyKTtcbiAgICAgICAgICBzcGFuPy5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBlcnJfXyhcIuKVsCBFcnJvciBpbml0aWFsaXppbmcgT1AgZm9ybTpcIiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICB0cmFjayhcImZvcm1faW5pdF9lcnJvclwiLCB7XG4gICAgICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWRFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHNwYW4/LmVuZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChoZWlnaHQpID0+IHtcbiAgICAgIHRoaXMuZm9ybVByb3BlcnRpZXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgaWYgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKSB7XG4gICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICBpZiAoIWVsZW1lbnQgfHwgZWxlbWVudC50eXBlID09PSBFbGVtZW50VHlwZUVudW0uQ0RFX0JSSURHRSkgcmV0dXJuO1xuICAgICAgICAgIGVsZW1lbnQubm9kZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5vbkNkZUxvYWRlZCA9IChwYXlsb2FkKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LnNldChwYXlsb2FkKTtcbiAgICAgICAgdHJhY2soXCJjZGVfbG9hZGVkXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5vbkNkZUxvYWRFcnJvciA9IChlcnJNc2cpID0+IHtcbiAgICAgIGlmICghdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5jZGVMb2FkRXZlbnQudGhyb3cobmV3IEVycm9yKGVyck1zZyksIGVyck1zZyk7XG4gICAgICAgIHRyYWNrKFwiY2RlX2xvYWRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiBlcnJNc2dcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZUVsZW1lbnQgPSAoZWxlbWVudFR5cGUsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiY3JlYXRlRWxlbWVudFwiKTtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCB0eXBlID0gX0VsZW1lbnRUeXBlRW51bVpvZC5wYXJzZShlbGVtZW50VHlwZSk7XG4gICAgICBjb25zdCBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhvcHRpb25zKTtcbiAgICAgIGZyYW1lLm5hbWUgPSBgJHt0eXBlfS1lbGVtZW50YDtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtmcmFtZS5uYW1lfS9gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICAgIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZy50b1N0cmluZygpO1xuICAgICAgZnJhbWUuc3JjID0gdXJsLmhyZWY7XG4gICAgICBmcmFtZS5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIjtcbiAgICAgIGZyYW1lLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG4gICAgICBjb25zdCByZWdpc3RlcmVkRWxlbWVudCA9IHRoaXMucmVnaXN0ZXJJZnJhbWUodHlwZSwgZnJhbWUpO1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWRFbGVtZW50O1xuICAgIH07XG4gICAgdGhpcy5yZWdpc3RlcklmcmFtZSA9ICh0eXBlLCBmcmFtZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgbm9kZTogZnJhbWUsXG4gICAgICAgIG1vdW50OiAoc2VsZWN0b3IpID0+IHtcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKT8uYXBwZW5kQ2hpbGQoZnJhbWUpO1xuICAgICAgICAgIHRyYWNrKFwiZWxlbWVudF9tb3VudGVkXCIsIHtcbiAgICAgICAgICAgIGVsZW1lbnRfdHlwZTogdHlwZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5jb25uZWN0VG9FbGVtZW50KHsgdHlwZTogZWxlbWVudC50eXBlLCBub2RlOiBlbGVtZW50Lm5vZGUgfSk7XG4gICAgICBpZiAoIXRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKSB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEX0NWQ106IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNERV9CUklER0VdOiB2b2lkIDBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzW3R5cGVdID0gZWxlbWVudDtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH07XG4gICAgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwicmVmZXJlclwiLCB0aGlzLnJlZmVycmVyKTtcbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCk7XG4gICAgICBpZiAob3B0aW9ucy5zdHlsZXMpIHtcbiAgICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwic3R5bGVzXCIsIGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nKG9wdGlvbnMuc3R5bGVzKSk7XG4gICAgICB9XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuKTtcbiAgICAgIHJldHVybiBxdWVyeVN0cmluZztcbiAgICB9O1xuICAgIHRoaXMuY29ubmVjdFRvRWxlbWVudCA9IChlbGVtZW50KSA9PiB7XG4gICAgICByZXR1cm4gY3JlYXRlVHJhY2tpbmdTcGFuKFxuICAgICAgICB7XG4gICAgICAgICAgc3Bhbk5hbWU6IFwiY29ubmVjdF90b19lbGVtZW50XCIsXG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbm4gPSBhd2FpdCBjcmVhdGVDb25uZWN0aW9uKGVsZW1lbnQubm9kZSk7XG4gICAgICAgICAgY29ubi50cmFjaW5nQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oZWxlbWVudC50eXBlLCBjb25uKTtcbiAgICAgICAgICBpZiAoIXRoaXMuYW55Q2RlQ29ubi5jdXJyZW50LmlzU3VjY2VzcyAmJiBlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRUeXBlRW51bS5DREVfQlJJREdFKSB7XG4gICAgICAgICAgICB0aGlzLmFueUNkZUNvbm4uc2V0KGNvbm4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKS5jYXRjaCgoZXJyKSA9PiBlcnJfXyhcIltGT1JNXSBFcnJvciBjb25uZWN0aW5nIHRvIENERSBpZnJhbWVcIiwgZXJyKSk7XG4gICAgfTtcbiAgICB0aGlzLmdldEZvcm1EaXYgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHk7XG4gICAgfTtcbiAgICB0aGlzLnN1Ym1pdENhcmQgPSBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgZXJyX18oXCJGb3JtIGlzIGFscmVhZHkgc3VibWl0dGluZy4gUGxlYXNlIHdhaXQgZm9yIHRoZSBzdWJtaXNzaW9uIHRvIGZpbmlzaCBiZWZvcmUgc3VibWl0dGluZyBhZ2Fpbi5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gdHJ1ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNyZWF0ZVRyYWNraW5nU3BhbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJzdWJtaXRfY2FyZFwiLFxuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgICBwYXltZW50Um91dGVJZDogcGFyYW1zPy5wYXltZW50Um91dGVJZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJhY2soXCJzdWJtaXRfY2FyZFwiLCB7IC4uLnBhcmFtcyB9KTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcInN1Ym1pdENhcmRcIik7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0MiA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGlmICghY29udGV4dDIpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IE9qc0Zsb3dzLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcmVkaXRfY2FyZFwiKSxcbiAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRDZGVDb25uZWN0aW9uczogdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRBbGxDb25uZWN0aW9ucygpLFxuICAgICAgICAgICAgICAgIHBheW1lbnRSb3V0ZUlkOiBwYXJhbXM/LnBheW1lbnRSb3V0ZUlkXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gY3JlYXRlVHJhY2tpbmdTcGFuKFxuICAgICAgICB7XG4gICAgICAgICAgc3Bhbk5hbWU6IFwiZ2V0X2F2YWlsYWJsZV9wYXltZW50X21ldGhvZHNcIixcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHNcIik7XG4gICAgICAgICAgY29uc3QgY29udGV4dDIgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFjb250ZXh0Mikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBnZXR0aW5nIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHMuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB7IHByb2Nlc3NvcnM6IGFwcGxlUGF5UHJvY2Vzc29ycywgaXNBdmFpbGFibGU6IGlzQXBwbGVQYXlBdmFpbGFibGUgfSA9IGdldEFwcGxlUGF5UHJvY2Vzc29ycyhcbiAgICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB7IHByb2Nlc3NvcnM6IGdvb2dsZVBheVByb2Nlc3NvcnMsIGlzQXZhaWxhYmxlOiBpc0dvb2dsZVBheUF2YWlsYWJsZSB9ID0gZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyhcbiAgICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBwYXlwYWxGbG93UmVzdWx0ID0gdGhpcy5pbml0Rmxvd3MucGF5cGFsLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBjb25zdCBwYXlwYWxBdmFpbGFibGUgPSBwYXlwYWxGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSA/PyBmYWxzZTtcbiAgICAgICAgICBjb25zdCB7IHByb2Nlc3NvcnM6IGtsYXJuYVByb2Nlc3NvcnMsIGlzQXZhaWxhYmxlOiBpc0tsYXJuYUF2YWlsYWJsZSB9ID0gZ2V0S2xhcm5hUHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgY29uc3QgeyBwcm9jZXNzb3JzOiBhZmZpcm1Qcm9jZXNzb3JzLCBpc0F2YWlsYWJsZTogaXNBZmZpcm1BdmFpbGFibGUgfSA9IGdldEFmZmlybVByb2Nlc3NvcnModGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgIGNvbnN0IHsgcHJvY2Vzc29yczogYWZ0ZXJwYXlQcm9jZXNzb3JzLCBpc0F2YWlsYWJsZTogaXNBZnRlcnBheUF2YWlsYWJsZSB9ID0gZ2V0QWZ0ZXJwYXlQcm9jZXNzb3JzKFxuICAgICAgICAgICAgdGhpcy5pbml0Rmxvd3NcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHBvY2t5dFBheXBhbEF2YWlsYWJsZSA9IGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMuc29tZShcbiAgICAgICAgICAgIChtZXRob2QpID0+IG1ldGhvZC5wcm9jZXNzb3JfbmFtZSA9PT0gXCJwb2NreXRcIiAmJiBtZXRob2QucHJvdmlkZXIgPT09IFwicGF5cGFsXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGxvb3BGbG93UmVzdWx0ID0gdGhpcy5pbml0Rmxvd3MubG9vcC5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgY29uc3QgbG9vcENyeXB0b0F2YWlsYWJsZSA9IGxvb3BGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSA/PyBmYWxzZTtcbiAgICAgICAgICBjb25zdCBzdHJpcGVMaW5rRmxvd1Jlc3VsdCA9IHRoaXMuaW5pdEZsb3dzLnN0cmlwZUxpbmsucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGNvbnN0IHN0cmlwZUxpbmtBdmFpbGFibGUgPSBzdHJpcGVMaW5rRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUgPz8gZmFsc2U7XG4gICAgICAgICAgY29uc3QgbWV0aG9kcyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5jYXJkLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBbXSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMuYXBwbGVQYXksXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IGFwcGxlUGF5UHJvY2Vzc29ycyxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IGlzQXBwbGVQYXlBdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMuZ29vZ2xlUGF5LFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBnb29nbGVQYXlQcm9jZXNzb3JzLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogaXNHb29nbGVQYXlBdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMucGF5cGFsLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBwYXlwYWxBdmFpbGFibGUgPyBbUGF5bWVudFByb2Nlc3Nvci5FbnVtLnBheXBhbF0gOiBbXSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IHBheXBhbEF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5rbGFybmEsXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IGtsYXJuYVByb2Nlc3NvcnMsXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBpc0tsYXJuYUF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5hZmZpcm0sXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IGFmZmlybVByb2Nlc3NvcnMsXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBpc0FmZmlybUF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5hZnRlcnBheSxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogYWZ0ZXJwYXlQcm9jZXNzb3JzLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogaXNBZnRlcnBheUF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5wb2NreXRQYXlwYWwsXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IHBvY2t5dFBheXBhbEF2YWlsYWJsZSA/IFtQYXltZW50UHJvY2Vzc29yLkVudW0ucG9ja3l0XSA6IFtdLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogcG9ja3l0UGF5cGFsQXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLmxvb3BDcnlwdG8sXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IGxvb3BDcnlwdG9BdmFpbGFibGUgPyBbUGF5bWVudFByb2Nlc3Nvci5FbnVtLmxvb3BdIDogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBsb29wQ3J5cHRvQXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLnN0cmlwZUxpbmssXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IFtQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlXSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IHN0cmlwZUxpbmtBdmFpbGFibGUsXG4gICAgICAgICAgICAgIGNvbnRyb2xsZXI6IHN0cmlwZUxpbmtGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSA/IHN0cmlwZUxpbmtGbG93UmVzdWx0LmNvbnRyb2xsZXIgOiB2b2lkIDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdO1xuICAgICAgICAgIGNvbnN0IGluaXRGbG93TmFtZU1hcCA9IHtcbiAgICAgICAgICAgIHBheXBhbDogU3VibWl0TWV0aG9kcy5wYXlwYWwsXG4gICAgICAgICAgICBhaXJ3YWxsZXhHb29nbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4R29vZ2xlUGF5LFxuICAgICAgICAgICAgYWlyd2FsbGV4QXBwbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4QXBwbGVQYXksXG4gICAgICAgICAgICBhdXRob3JpemVOZXRHb29nbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYXV0aG9yaXplbmV0R29vZ2xlUGF5LFxuICAgICAgICAgICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYXV0aG9yaXplbmV0QXBwbGVQYXksXG4gICAgICAgICAgICBhZHllbkdvb2dsZVBheTogU3VibWl0TWV0aG9kcy5hZHllbkdvb2dsZVBheSxcbiAgICAgICAgICAgIGFkeWVuQXBwbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYWR5ZW5BcHBsZVBheVxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgbWV0aG9kc19vbGQgPSBPYmplY3QuZW50cmllcyh0aGlzLmluaXRGbG93cykubWFwKChba2V5LCBmbG93XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmxvd1Jlc3VsdCA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGluaXRGbG93TmFtZU1hcFtrZXldID8/IGtleTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIG5hbWU6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IFtdLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogZmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUgPz8gZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIFsuLi5tZXRob2RzX29sZCwgLi4ubWV0aG9kc107XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfTtcbiAgICB0aGlzLmdlbmVyYWxTdWJtaXQgPSBhc3luYyAobWV0aG9kLCBzZXR0aW5ncykgPT4ge1xuICAgICAgY29uc3QgaXNTdHJpcGVCbnBsUmVkaXJlY3QgPSB0aGlzLmlzU3RyaXBlQm5wbFJlZGlyZWN0U3VibWlzc2lvbihtZXRob2QsIHNldHRpbmdzKTtcbiAgICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xuICAgICAgICBpZiAoIWlzU3RyaXBlQm5wbFJlZGlyZWN0IHx8ICF0aGlzLmFjdGl2ZUdlbmVyYWxTdWJtaXNzaW9uPy5pc1N0cmlwZUJucGxSZWRpcmVjdCkge1xuICAgICAgICAgIGVycl9fKFwiRm9ybSBpcyBhbHJlYWR5IHN1Ym1pdHRpbmcuIFBsZWFzZSB3YWl0IGZvciB0aGUgc3VibWlzc2lvbiB0byBmaW5pc2ggYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uXCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFib3J0U3RyaXBlQm5wbEZsb3dzKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWJtaXNzaW9uSWQgPSBTeW1ib2woXCJnZW5lcmFsLXN1Ym1pc3Npb25cIik7XG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XG4gICAgICB0aGlzLmFjdGl2ZUdlbmVyYWxTdWJtaXNzaW9uID0ge1xuICAgICAgICBpZDogc3VibWlzc2lvbklkLFxuICAgICAgICBpc1N0cmlwZUJucGxSZWRpcmVjdFxuICAgICAgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBjcmVhdGVUcmFja2luZ1NwYW4oXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3Bhbk5hbWU6IFwiZ2VuZXJhbF9mb3JtX3N1Ym1pdFwiLFxuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyYWNrKFwiZ2VuZXJhbF9mb3JtX3N1Ym1pdFwiLCB7IG1ldGhvZCwgc2V0dGluZ3MgfSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJnZW5lcmFsU3VibWl0XCIpO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dDIgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBpZiAoIWNvbnRleHQyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuY2FyZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJtaXRDYXJkKHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLnBvY2t5dFBheXBhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5QQVlQQUwsXG4gICAgICAgICAgICAgICAgICAgIFwicG9ja3l0XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3MgfSxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMucGF5cGFsOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5wYXlwYWwucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLlBBWVBBTCxcbiAgICAgICAgICAgICAgICAgICAgXCJwYXlwYWxcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5ncyB9LFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5rbGFybmE6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdyB9ID0gZ2V0S2xhcm5hUHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFmZmlybToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93IH0gPSBnZXRBZmZpcm1Qcm9jZXNzb3JzKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWZ0ZXJwYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdyB9ID0gZ2V0QWZ0ZXJwYXlQcm9jZXNzb3JzKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMubG9vcENyeXB0bzoge1xuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5sb29wQ3J5cHRvLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgXCJjcnlwdG9cIixcbiAgICAgICAgICAgICAgICAgICAgXCJsb29wXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydEZsb3cgfSA9IGdldEFwcGxlUGF5UHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93IH0gPSBnZXRHb29nbGVQYXlQcm9jZXNzb3JzKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBLZWVwaW5nIGV4aXN0aW5nIGNvbW1lbnRlZCBjb2RlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIGluIHRoZSBmdXR1cmUgdmVyc2lvblxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWlyd2FsbGV4R29vZ2xlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFpcndhbGxleEdvb2dsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhaXJ3YWxsZXgtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWlyd2FsbGV4R29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWlyd2FsbGV4QXBwbGVQYXkgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhaXJ3YWxsZXhBcHBsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ2BcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhaXJ3YWxsZXhBcHBsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRHb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdXRob3JpemVOZXRHb29nbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYXV0aG9yaXplTmV0R29vZ2xlUGF5KSB7XG4gICAgICAgICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgICAgICAgYGF1dGhvcml6ZS1uZXQtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYXV0aG9yaXplTmV0R29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmF1dGhvcml6ZW5ldEFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aG9yaXplTmV0QXBwbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhdXRob3JpemVOZXRBcHBsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYXV0aG9yaXplTmV0QXBwbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWR5ZW5Hb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZHllbkdvb2dsZVBheSA9IHRoaXMuaW5pdEZsb3dzLmFkeWVuR29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFkeWVuR29vZ2xlUGF5KSB7XG4gICAgICAgICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgICAgICAgYGFkeWVuLWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkeWVuR29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFkeWVuQXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZHllbkFwcGxlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYWR5ZW5BcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhZHllbkFwcGxlUGF5KSB7XG4gICAgICAgICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgICAgICAgYGFkeWVuLWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWR5ZW5BcHBsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhBQ0g6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLmFpcndhbGxleEFDSC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFBheW1lbnRQcm92aWRlclR5cGUuQUNILFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4RUZUOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhFRlQucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLkVGVCxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEJBQ1M6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLmFpcndhbGxleEJBQ1MucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLkJBQ1MsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhTRVBBOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhTRVBBLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5TRVBBLFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuc3RyaXBlTGluazoge1xuICAgICAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICAgICAgXCJTdHJpcGVMaW5rIGNhbm5vdCBiZSBzdWJtaXR0ZWQgbWFudWFsbHkuIFBsZWFzZSBtb3VudCB0aGUgYnV0dG9uIHByb3Blcmx5IGFuZCBpZiB1c2VyIGNvbXBsZXRlZCB0aGUgcGF5bWVudCBmbG93IHZpYSBTdHJpcGVMaW5rIGJ1dHRvbiwgdGhlIHBheW1lbnQgd2lsbCBiZSBzdWJtaXR0ZWQgYXV0b21hdGljYWxseS5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYXNzZXJ0TmV2ZXIobWV0aG9kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVHZW5lcmFsU3VibWlzc2lvbj8uaWQgPT09IHN1Ym1pc3Npb25JZCkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlR2VuZXJhbFN1Ym1pc3Npb24gPSBudWxsO1xuICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc3VibWl0V2l0aCA9IHRoaXMuZ2VuZXJhbFN1Ym1pdDtcbiAgICB0aGlzLnN1Ym1pdCA9IHRoaXMuc3VibWl0Q2FyZDtcbiAgICB0aGlzLmlzU3RyaXBlQm5wbFJlZGlyZWN0U3VibWlzc2lvbiA9IChtZXRob2QsIHNldHRpbmdzKSA9PiB7XG4gICAgICBpZiAoIVtTdWJtaXRNZXRob2RzLmtsYXJuYSwgU3VibWl0TWV0aG9kcy5hZmZpcm0sIFN1Ym1pdE1ldGhvZHMuYWZ0ZXJwYXldLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgYm5wbFNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgICBpZiAoIWJucGxTZXR0aW5ncz8udXNlUmVkaXJlY3RGbG93KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChibnBsU2V0dGluZ3MucHJvY2Vzc29yKSB7XG4gICAgICAgIHJldHVybiBibnBsU2V0dGluZ3MucHJvY2Vzc29yID09PSBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlO1xuICAgICAgfVxuICAgICAgaWYgKG1ldGhvZCA9PT0gU3VibWl0TWV0aG9kcy5rbGFybmEpIHtcbiAgICAgICAgcmV0dXJuIGdldEtsYXJuYVByb2Nlc3NvcnModGhpcy5pbml0Rmxvd3MpLnByb2Nlc3NvcnNbMF0gPT09IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIHRoaXMuYWJvcnRTdHJpcGVCbnBsRmxvd3MgPSAoKSA9PiB7XG4gICAgICBnZXRLbGFybmFQcm9jZXNzb3JzKHRoaXMuaW5pdEZsb3dzKS5hYm9ydEZsb3coKTtcbiAgICAgIGdldEFmZmlybVByb2Nlc3NvcnModGhpcy5pbml0Rmxvd3MpLmFib3J0RmxvdygpO1xuICAgICAgZ2V0QWZ0ZXJwYXlQcm9jZXNzb3JzKHRoaXMuaW5pdEZsb3dzKS5hYm9ydEZsb3coKTtcbiAgICB9O1xuICAgIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIGxvZ19fKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIik7XG4gICAgICB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJkZXN0cm95XCIpO1xuICAgICAgdGhpcy5hYm9ydFN0cmlwZUJucGxGbG93cygpO1xuICAgICAgdGhpcy5pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50KSBjb250aW51ZTtcbiAgICAgICAgZWxlbWVudC5ub2RlLnJlbW92ZSgpO1xuICAgICAgfVxuICAgICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKTtcbiAgICAgIGRldGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzKCk7XG4gICAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGw7XG4gICAgICBkZWxldGUgd2luZG93W1wib2pzXCJdO1xuICAgICAgdHJhY2soXCJmb3JtX2Rlc3Ryb3llZFwiKTtcbiAgICB9O1xuICAgIHRoaXMudXBkYXRlQ2FsbGJhY2tzID0gKG5ld0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhuZXdDYWxsYmFja3MpO1xuICAgIH07XG4gICAgT3BlblBheUZvcm0uYXNzaWduQXNTaW5nbGV0b24odGhpcyk7XG4gICAgdGhpcy5vanNWZXJzaW9uID0gXCIwLjUuMjZcIjtcbiAgICB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCIwLjUuMjZcIjtcbiAgICB0aGlzLmJhc2VVcmwgPSBjb25maWcuYmFzZVVybCA/PyBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCI7XG4gICAgdGhpcy5jb25maWcgPSB7IC4uLmNvbmZpZywgYmFzZVVybDogdGhpcy5iYXNlVXJsIH07XG4gICAgdGhpcy5mb3JtQ2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5mcm9tT2JqZWN0KGNvbmZpZyk7XG4gICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsO1xuICAgIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YDtcbiAgICB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICB0aGlzLmZvcm1UYXJnZXQgPSBjb25maWcuZm9ybVRhcmdldCA/PyBcImJvZHlcIjtcbiAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfTtcbiAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IENvbm5lY3Rpb25NYW5hZ2VyKCk7XG4gICAgdGhpcy5kZXZpY2VUb2tlbiA9IGdldERldmljZVRva2VuKCk7XG4gICAgYXR0YWNoQW5hbHl0aWNzRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICBjb25zdCB7IGZyYW1ld29yaywgdmVyc2lvbiB9ID0gZ2V0RnJhbWV3b3JrSW5mbygpO1xuICAgIGdldEN1cnJlbnRFbnYodGhpcy5iYXNlVXJsKS50aGVuKChlbnZpcm9ubWVudCkgPT4ge1xuICAgICAgaWYgKCFtZXRyaWNzUHVibGlzaGVyLmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IG1ldHJpY3NDb250ZXh0ID0ge1xuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgICAgZnJhbWV3b3JrLFxuICAgICAgICAgIGZyYW1ld29ya1ZlcnNpb246IHZlcnNpb24sXG4gICAgICAgICAgb2pzVmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIG9qc1JlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyLFxuICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybFxuICAgICAgICB9O1xuICAgICAgICBtZXRyaWNzUHVibGlzaGVyLnNldChtZXRyaWNzQ29udGV4dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJhY2soXCJmb3JtX2luaXRcIik7XG4gICAgY29uc29sZS5sb2coXCJPSlMgVkVSU0lPTlwiLCB0aGlzLm9qc1ZlcnNpb24pO1xuICAgIGlmIChjb25maWcuYWxsb3dUcmFjaW5nID09PSB0cnVlKSB7XG4gICAgICBpbml0VHJhY2VyU2FmZSh0aGlzLm9qc1ZlcnNpb24sIHRoaXMuYmFzZVVybCk7XG4gICAgfVxuICAgIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IE9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSk7XG4gICAgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLm9qc0Zsb3dzID0gT2pzRmxvd3M7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmFzc2lnbkFzU2luZ2xldG9uID0gKGZvcm0pID0+IHtcbiAgICAgIGlmIChPcGVuUGF5Rm9ybS5nZXRJbnN0YW5jZSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICAgICAgfVxuICAgICAgd2luZG93W1wib2pzXCJdID0gZm9ybTtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5nZXRJbnN0YW5jZSA9ICgpID0+IHtcbiAgICAgIHJldHVybiB3aW5kb3dbXCJvanNcIl0gPz8gbnVsbDtcbiAgICB9O1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKGNvbmZpZywgY2RlTG9hZGVkUGF5bG9hZCwgYW55Q2RlQ29ubmVjdGlvbiwgZm9ybURpdikgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIGJhc2VVcmw6IG5ldyBVUkwoY29uZmlnLmJhc2VVcmwgPz8gRlJBTUVfQkFTRV9VUkwpLm9yaWdpbixcbiAgICAgICAgZm9ybURpdixcbiAgICAgICAgZWxlbWVudHNTZXNzaW9uSWQ6IGNkZUxvYWRlZFBheWxvYWQuc2Vzc2lvbklkLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2RzOiBjZGVMb2FkZWRQYXlsb2FkLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGN1c3RvbUluaXRQYXJhbXM6IGNvbmZpZy5jdXN0b21Jbml0UGFyYW1zID8/IHt9LFxuICAgICAgICBwcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb246IGNvbmZpZy5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb25cbiAgICAgIH07XG4gICAgfTtcbiAgfVxuICBjaGVja1ZhbGlkRm9ybUluc3RhbmNlKGNhbGxlciA9IFwidW5rbm93blwiKSB7XG4gICAgY29uc3QgY3VycmVudEluc3RhbmNlID0gT3BlblBheUZvcm0uZ2V0SW5zdGFuY2UoKTtcbiAgICBjb25zdCBkZWJ1Z0luZm8gPSB7XG4gICAgICB0aGlzRm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgIGN1cnJlbnRGb3JtSWQ6IGN1cnJlbnRJbnN0YW5jZT8uZm9ybUlkIHx8IFwibm8tY3VycmVudC1pbnN0YW5jZVwiLFxuICAgICAgaXNEZXN0cm95ZWQ6IHRoaXMuaXNEZXN0cm95ZWQsXG4gICAgICBjaGVja291dFRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLnN1YnN0cmluZygwLCAxMCkgKyBcIi4uLlwiXG4gICAgfTtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgXG4gICAgICBbV2FybmluZ10gSW52YWxpZCBmb3JtIGluc3RhbmNlIGRldGVjdGVkLlxuICAgICAgSXQgbG9va3MgbGlrZSB5b3UgYXJlIHN0aWxsIHVzaW5nIGFuIG9sZCBpbnN0YW5jZSB0aGF0IGhhcyBiZWVuIGRlc3Ryb3llZC5cbiAgICAgIFBsZWFzZSBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgbGF0ZXN0IGluc3RhbmNlIG9mIHRoZSBmb3JtIGFuZCBjbGVhbnVwIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICAgRGVidWcgSW5mbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgLSBjYWxsZXI6ICR7Y2FsbGVyfVxuICAgICAgLSBjYWxsZXJfZm9ybV9pZDogJHtkZWJ1Z0luZm8udGhpc0Zvcm1JZH1cbiAgICAgIC0gY3VycmVudF9hY3RpdmVfZm9ybV9pZDogJHtkZWJ1Z0luZm8uY3VycmVudEZvcm1JZH1cbiAgICAgIC0gaXNfZGVzdHJveWVkOiAke2RlYnVnSW5mby5pc0Rlc3Ryb3llZH1cbiAgICAgIC0gY2hlY2tvdXRfdG9rZW46ICR7ZGVidWdJbmZvLmNoZWNrb3V0VG9rZW59XG4gICAgYDtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkge1xuICAgICAgZXJyX18oZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRyYWNrKFwib3V0ZGF0ZWRfZm9ybV9pbnN0YW5jZVwiLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghY3VycmVudEluc3RhbmNlIHx8IGN1cnJlbnRJbnN0YW5jZS5mb3JtSWQgIT09IHRoaXMuZm9ybUlkKSB7XG4gICAgICBlcnJfXyhlcnJvck1lc3NhZ2UpO1xuICAgICAgdHJhY2soXCJvdXRkYXRlZF9mb3JtX2luc3RhbmNlXCIsIHsgZXJyb3I6IGVycm9yTWVzc2FnZSB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IHsgQ29udGV4dEFQSSBhcyBDLCBEaWFnQVBJIGFzIEQsIEVsZW1lbnRUeXBlRW51bSBhcyBFLCBGaWVsZE5hbWUgYXMgRiwgSU5WQUxJRF9TUEFOX0NPTlRFWFQgYXMgSSwgT3BlblBheUZvcm0gYXMgTywgUHJveHlUcmFjZXIgYXMgUCwgUk9PVF9DT05URVhUIGFzIFIsIFNwYW5LaW5kIGFzIFMsIFRyYWNlRmxhZ3MgYXMgVCwgY29udGV4dCBhcyBhLCBpc1ZhbGlkVHJhY2VJZCBhcyBiLCBjcmVhdGVDb250ZXh0S2V5IGFzIGMsIGlzVmFsaWRTcGFuSWQgYXMgZCwgU3BhblN0YXR1c0NvZGUgYXMgZSwgRGlhZ0xvZ0xldmVsIGFzIGYsIGdldEdsb2JhbCBhcyBnLCBJTlZBTElEX1NQQU5JRCBhcyBoLCBpc1NwYW5Db250ZXh0VmFsaWQgYXMgaSwgSU5WQUxJRF9UUkFDRUlEIGFzIGosIFByb3h5VHJhY2VyUHJvdmlkZXIgYXMgaywgU3VibWl0TWV0aG9kcyBhcyBsLCByZWdpc3Rlckdsb2JhbCBhcyByLCB0cmFjZSBhcyB0LCB1bnJlZ2lzdGVyR2xvYmFsIGFzIHUgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGtCQUFBQSxVQUFzQjtBQUMvQixTQUFTLEtBQUFDLFNBQVM7QUFDbEIsT0FBT0MsUUFBVztBQUNsQixTQUFTLE1BQUFDLFVBQVU7QUFFbkIsU0FBU0MsR0FBU0MsR0FBUUMsR0FBVztBQUNuQyxNQUFJQyxJQUFpQixPQUFPO0FBQzVCLEVBQUFBLElBQWlCQSxFQUFlRixHQUFRQyxDQUFTLElBQUlELEVBQU8sWUFBWUM7QUFDMUU7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RUFBTztBQUM1QztBQTNyQk4sSUFBTThxQyxLQUFOL0M7IiwKICAibmFtZXMiOiBbImNvbm5lY3RUb0NoaWxkIiwgInoiLCAiY2hhbGsiLCAidjQiLCAiZml4UHJvdG8iLCAidGFyZ2V0IiwgInByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJmaXhTdGFjayIsICJmbiIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJfX2V4dGVuZHMkMSIsICJfZXh0ZW5kU3RhdGljcyIsICJkIiwgImIiLCAicCIsICJfXyIsICJDdXN0b21FcnJvciIsICJfc3VwZXIiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIl9FbGVtZW50VHlwZUVudW1ab2QiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiQmFzZUVsZW1lbnRzU3R5bGUiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJFbGVtZW50RXZlbnQiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJUb2tlbml6ZUNhcmRSZXNwb25zZSIsICJUaHJlZURTU3RhdHVzIiwgIlRocmVlRFNTdGF0dXMyIiwgIlBpbmczRFNTdGF0dXNSZXNwb25zZSIsICJDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiQVdYQmFuayIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSIsICJDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJFRlRGb3JtRGF0YSIsICJCQUNTRm9ybURhdGEiLCAiU0VQQUZvcm1EYXRhIiwgIkFDSE1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIkVGVE1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIkJBQ1NNaWNyb0RlcG9zaXRGb3JtRGF0YSIsICJTRVBBTWljcm9EZXBvc2l0Rm9ybURhdGEiLCAiTWljcm9EZXBvc2l0U3RhdHVzUmVzcG9uc2UiLCAibnVsbE9yVW5kZWZPciIsICJDREVSZXNwb25zZUVycm9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZUFkZHJlc3MiLCAiU2V0dXBDaGVja291dFJlc3BvbnNlIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiTmV3Q3VzdG9tZXJGaWVsZHMiLCAiUHJpY2VRdHkiLCAiQ2FydEluZm8iLCAiUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSIsICJTdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAiU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UiLCAiQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2UiLCAiUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UiLCAiU2V0VXNlckRldmljZVRva2VuUmVzcG9uc2UiLCAiVXNlckFjdGlvbkZFUGF5bG9hZCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlIiwgIlpvZEZpZWxkRXJyb3IiLCAiWm9kRmllbGRFcnJvcnMiLCAiTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRSIsICJnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZSIsICJvZ0Vycm9yTWVzc2FnZSIsICJrZXkiLCAiaXNTdHJpbmdpZmllZEpzb25PYmplY3QiLCAic3RyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAicmVzcG9uc2UiLCAiZXJyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMiLCAiZXJyb3JzIiwgImdldEVycm9yTWVzc2FnZSIsICJvYmoiLCAiZTIiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJzdW0iLCAiYXJyIiwgImEiLCAiYmVmb3JlVW5sb2FkSGFuZGxlciIsICJldmVudCIsICJwcmV2ZW50TmF2aWdhdGlvbiIsICJzdG9wUHJldmVudE5hdmlnYXRpb24iLCAiYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMiLCAic2ltcGxlT2pzRmxvdyIsICJhY3RpdmVTdWJtaXNzaW9uIiwgInBhcmFtcyIsICJzdWJtaXNzaW9uIiwgIm9uQWJvcnQiLCAidHJhY2siLCAiZmxvd1Jlc3VsdCIsICJmb3JjZVByb2Nlc3NNZXRyaWNzUXVldWUiLCAiZXJyb3JNZXNzYWdlIiwgImVycm9yQ29kZSIsICJzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUiLCAiYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCIsICJpbml0IiwgImVycl9fIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAiZXh0ZW5kU3RhdGljcyIsICJfX2V4dGVuZHMiLCAiX19hd2FpdGVyIiwgInRoaXNBcmciLCAiX2FyZ3VtZW50cyIsICJQIiwgImdlbmVyYXRvciIsICJhZG9wdCIsICJ2YWx1ZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJmdWxmaWxsZWQiLCAic3RlcCIsICJlIiwgInJlamVjdGVkIiwgInJlc3VsdCIsICJfX2dlbmVyYXRvciIsICJib2R5IiwgIl8iLCAidCIsICJmIiwgInkiLCAiZyIsICJ2ZXJiIiwgIm4iLCAidiIsICJvcCIsICJfX3ZhbHVlcyIsICJvIiwgInMiLCAibSIsICJpIiwgIl9fcmVhZCQ0IiwgInIiLCAiYXIiLCAiX19zcHJlYWRBcnJheSQ0IiwgInRvIiwgImZyb20iLCAicGFjayIsICJsIiwgIl9fYXdhaXQiLCAiX19hc3luY0dlbmVyYXRvciIsICJxIiwgImF3YWl0UmV0dXJuIiwgInJlc3VtZSIsICJzZXR0bGUiLCAiZnVsZmlsbCIsICJfX2FzeW5jVmFsdWVzIiwgImlzRnVuY3Rpb24iLCAidmFsdWUiLCAiY3JlYXRlRXJyb3JDbGFzcyIsICJjcmVhdGVJbXBsIiwgIl9zdXBlciIsICJpbnN0YW5jZSIsICJjdG9yRnVuYyIsICJVbnN1YnNjcmlwdGlvbkVycm9yIiwgImVycm9ycyIsICJlcnIiLCAiaSIsICJhcnJSZW1vdmUiLCAiYXJyIiwgIml0ZW0iLCAiaW5kZXgiLCAiU3Vic2NyaXB0aW9uIiwgImluaXRpYWxUZWFyZG93biIsICJlXzEiLCAiX2EiLCAiZV8yIiwgIl9iIiwgIl9wYXJlbnRhZ2UiLCAiX3BhcmVudGFnZV8xIiwgIl9fdmFsdWVzIiwgIl9wYXJlbnRhZ2VfMV8xIiwgInBhcmVudF8xIiwgImVfMV8xIiwgImluaXRpYWxGaW5hbGl6ZXIiLCAiZSIsICJfZmluYWxpemVycyIsICJfZmluYWxpemVyc18xIiwgIl9maW5hbGl6ZXJzXzFfMSIsICJmaW5hbGl6ZXIiLCAiZXhlY0ZpbmFsaXplciIsICJfX3NwcmVhZEFycmF5JDQiLCAiX19yZWFkJDQiLCAiZV8yXzEiLCAidGVhcmRvd24iLCAicGFyZW50IiwgImVtcHR5IiwgIkVNUFRZX1NVQlNDUklQVElPTiIsICJpc1N1YnNjcmlwdGlvbiIsICJjb25maWciLCAidGltZW91dFByb3ZpZGVyIiwgImhhbmRsZXIiLCAidGltZW91dCIsICJhcmdzIiwgIl9pIiwgImhhbmRsZSIsICJyZXBvcnRVbmhhbmRsZWRFcnJvciIsICJub29wIiwgImVycm9yQ29udGV4dCIsICJjYiIsICJTdWJzY3JpYmVyIiwgIl9fZXh0ZW5kcyIsICJkZXN0aW5hdGlvbiIsICJfdGhpcyIsICJFTVBUWV9PQlNFUlZFUiIsICJuZXh0IiwgImVycm9yIiwgImNvbXBsZXRlIiwgIlNhZmVTdWJzY3JpYmVyIiwgIkNvbnN1bWVyT2JzZXJ2ZXIiLCAicGFydGlhbE9ic2VydmVyIiwgImhhbmRsZVVuaGFuZGxlZEVycm9yIiwgIm9ic2VydmVyT3JOZXh0IiwgImRlZmF1bHRFcnJvckhhbmRsZXIiLCAib2JzZXJ2YWJsZSIsICJpZGVudGl0eSIsICJ4IiwgInBpcGVGcm9tQXJyYXkiLCAiZm5zIiwgImlucHV0IiwgInByZXYiLCAiZm4iLCAiT2JzZXJ2YWJsZSIsICJzdWJzY3JpYmUiLCAib3BlcmF0b3IiLCAic3Vic2NyaWJlciIsICJpc1N1YnNjcmliZXIiLCAic291cmNlIiwgInNpbmsiLCAicHJvbWlzZUN0b3IiLCAiZ2V0UHJvbWlzZUN0b3IiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAib3BlcmF0aW9ucyIsICJpc09ic2VydmVyIiwgImhhc0xpZnQiLCAib3BlcmF0ZSIsICJpbml0IiwgImxpZnRlZFNvdXJjZSIsICJjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIiLCAib25OZXh0IiwgIm9uQ29tcGxldGUiLCAib25FcnJvciIsICJvbkZpbmFsaXplIiwgIk9wZXJhdG9yU3Vic2NyaWJlciIsICJzaG91bGRVbnN1YnNjcmliZSIsICJjbG9zZWRfMSIsICJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsICJTdWJqZWN0IiwgInN1YmplY3QiLCAiQW5vbnltb3VzU3ViamVjdCIsICJfYyIsICJvYnNlcnZlciIsICJvYnNlcnZlcnMiLCAiaGFzRXJyb3IiLCAiaXNTdG9wcGVkIiwgInRocm93bkVycm9yIiwgImRhdGVUaW1lc3RhbXBQcm92aWRlciIsICJBY3Rpb24iLCAic2NoZWR1bGVyIiwgIndvcmsiLCAic3RhdGUiLCAiZGVsYXkiLCAiaW50ZXJ2YWxQcm92aWRlciIsICJBc3luY0FjdGlvbiIsICJpZCIsICJfaWQiLCAiX3NjaGVkdWxlciIsICJfZGVsYXkiLCAiZXJyb3JlZCIsICJlcnJvclZhbHVlIiwgImFjdGlvbnMiLCAiU2NoZWR1bGVyIiwgInNjaGVkdWxlckFjdGlvbkN0b3IiLCAibm93IiwgIkFzeW5jU2NoZWR1bGVyIiwgIlNjaGVkdWxlckFjdGlvbiIsICJhY3Rpb24iLCAiYXN5bmNTY2hlZHVsZXIiLCAiaXNBcnJheUxpa2UiLCAiaXNQcm9taXNlIiwgImlzSW50ZXJvcE9ic2VydmFibGUiLCAiaXNBc3luY0l0ZXJhYmxlIiwgIm9iaiIsICJjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvciIsICJnZXRTeW1ib2xJdGVyYXRvciIsICJpdGVyYXRvciIsICJpc0l0ZXJhYmxlIiwgInJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IiLCAicmVhZGFibGVTdHJlYW0iLCAiX19hc3luY0dlbmVyYXRvciIsICJyZWFkZXIiLCAiZG9uZSIsICJfX2dlbmVyYXRvciIsICJfX2F3YWl0IiwgImlzUmVhZGFibGVTdHJlYW1MaWtlIiwgImlubmVyRnJvbSIsICJmcm9tSW50ZXJvcE9ic2VydmFibGUiLCAiZnJvbUFycmF5TGlrZSIsICJmcm9tUHJvbWlzZSIsICJmcm9tQXN5bmNJdGVyYWJsZSIsICJmcm9tSXRlcmFibGUiLCAiZnJvbVJlYWRhYmxlU3RyZWFtTGlrZSIsICJvYnMiLCAiYXJyYXkiLCAicHJvbWlzZSIsICJpdGVyYWJsZSIsICJpdGVyYWJsZV8xIiwgIml0ZXJhYmxlXzFfMSIsICJhc3luY0l0ZXJhYmxlIiwgInByb2Nlc3MiLCAiYXN5bmNJdGVyYWJsZV8xIiwgImFzeW5jSXRlcmFibGVfMV8xIiwgIl9fYXdhaXRlciIsICJfX2FzeW5jVmFsdWVzIiwgImV4ZWN1dGVTY2hlZHVsZSIsICJwYXJlbnRTdWJzY3JpcHRpb24iLCAicmVwZWF0IiwgInNjaGVkdWxlU3Vic2NyaXB0aW9uIiwgInRocm93RXJyb3IiLCAiZXJyb3JPckVycm9yRmFjdG9yeSIsICJlcnJvckZhY3RvcnkiLCAiRW1wdHlFcnJvciIsICJsYXN0VmFsdWVGcm9tIiwgIl9oYXNWYWx1ZSIsICJfdmFsdWUiLCAiaXNWYWxpZERhdGUiLCAiVGltZW91dEVycm9yIiwgImluZm8iLCAic2NoZWR1bGVyQXJnIiwgImZpcnN0IiwgImVhY2giLCAiX3dpdGgiLCAidGltZW91dEVycm9yRmFjdG9yeSIsICJfZCIsICJtZXRhIiwgIm9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uIiwgInRpbWVyU3Vic2NyaXB0aW9uIiwgImxhc3RWYWx1ZSIsICJzZWVuIiwgInN0YXJ0VGltZXIiLCAiTG9hZGVkT25jZVB1Ymxpc2hlciIsICJlcnJNc2ciLCAidmFsdWVJZk5vdExvYWRlZCIsICJzdWJzY3JpcHRpb24iLCAidGltZW91dENvbmZpZyIsICJhc3NlcnROZXZlciIsICJ0aW1lb3V0UGFyYW1zIiwgIk9qc0Vudmlyb25tZW50IiwgInoiLCAiY29ubnRvQmFzZVVybHMiLCAiZ2V0Q29ubnRvVXJsIiwgImVudiIsICJlbnZDYWNoZSIsICJnZXRDdXJyZW50RW52IiwgImJhc2VVcmwiLCAicmVzcG9uc2UiLCAicmVzIiwgImV4Y2x1ZGVQcm9wcyIsICJwcm9wcyIsICJrZXkiLCAiZ2V0V2luZG93U2FmZSIsICJtZXRyaWNzUHVibGlzaGVyIiwgIk1FVFJJQ1NfUVVFVUVfS0VZIiwgIk1BWF9SRVRSWV9BVFRFTVBUUyIsICJCQVRDSF9TSVpFIiwgIkJBVENIX0lOVEVSVkFMX01TIiwgImxvZ19fJHgiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAiTWV0cmljc1F1ZXVlIiwgImV2ZW50TmFtZSIsICJwcm9wZXJ0aWVzIiwgImNvbnRleHRQcm9wZXJ0aWVzIiwgImV2ZW50IiwgInY0IiwgInN0b3JlZFF1ZXVlIiwgInNhZmVXaW5kb3ciLCAiY29udGV4dCIsICJiYXRjaCIsICJiYXRjaFBheWxvYWQiLCAiY29ubnRvVXJsIiwgIm1ldHJpY3NSb3V0ZXIiLCAiZXZlbnRzVG9LZWVwIiwgIm1ldHJpY3NRdWV1ZSIsICJ0cmFjayIsICJmb3JjZVByb2Nlc3NNZXRyaWNzUXVldWUiLCAib25VbmhhbmRsZWRSZWplY3Rpb25FcnJvciIsICJlcnJvck1lc3NhZ2UiLCAiZ2V0RXJyb3JNZXNzYWdlIiwgIm9uVW5jYXVnaHRFcnJvciIsICJwYWdlTGlmZWN5Y2xlIiwgImxvYWRQYWdlTGlmZWN5Y2xlIiwgInBhZ2VMaWZlY3ljbGVTdGF0ZUNoYW5nZUhhbmRsZXIiLCAiYXR0YWNoQW5hbHl0aWNzRXZlbnRMaXN0ZW5lcnMiLCAibGlmZWN5Y2xlIiwgImRldGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzIiwgIlN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSIsICJvdXJDdXJyZW5jeVRvVGhlaXJzIiwgImdldExvYWRlZFN0cmlwZSIsICJwdWJsaXNoYWJsZUtleSIsICJpc1N0cmlwZUpzUHJlc2VudCIsICJzbGVlcCIsICJjcmVhdGVTdHJpcGVFbGVtZW50cyIsICJzdHJpcGVQdWJLZXkiLCAiZWxlbWVudHNPcHRpb25zIiwgInN0cmlwZSIsICJjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCIsICJ0b3RhbEFtb3VudEF0b20iLCAiY3VycmVuY3kiLCAiaXNBbW91bnRQZW5kaW5nIiwgImlzTGlua09ubHkiLCAic3RyaXBlQ3VycmVuY3kiLCAidGltZW91dE1zIiwgIndhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kIiwgInBheW1lbnRSZXF1ZXN0IiwgImV2dCIsICJjb25maXJtU3RyaXBlUHJQTSIsICJuZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlUG0iLCAiY29uZmlybVJlc3VsdCIsICJsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93IiwgInJlc3VsdFN0YXR1cyIsICJfZ2xvYmFsVGhpcyIsICJWRVJTSU9OIiwgInJlIiwgIl9tYWtlQ29tcGF0aWJpbGl0eUNoZWNrIiwgIm93blZlcnNpb24iLCAiYWNjZXB0ZWRWZXJzaW9ucyIsICJyZWplY3RlZFZlcnNpb25zIiwgIm15VmVyc2lvbk1hdGNoIiwgIm93blZlcnNpb25QYXJzZWQiLCAiZ2xvYmFsVmVyc2lvbiIsICJfcmVqZWN0IiwgInYiLCAiX2FjY2VwdCIsICJnbG9iYWxWZXJzaW9uTWF0Y2giLCAiZ2xvYmFsVmVyc2lvblBhcnNlZCIsICJpc0NvbXBhdGlibGUiLCAibWFqb3IiLCAiR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWSIsICJfZ2xvYmFsIiwgInJlZ2lzdGVyR2xvYmFsIiwgInR5cGUiLCAiZGlhZyIsICJhbGxvd092ZXJyaWRlIiwgImFwaSIsICJnZXRHbG9iYWwiLCAidW5yZWdpc3Rlckdsb2JhbCIsICJfX3JlYWQkMyIsICJvIiwgIm4iLCAibSIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkkMyIsICJ0byIsICJmcm9tIiwgInBhY2siLCAibCIsICJEaWFnQ29tcG9uZW50TG9nZ2VyIiwgImxvZ1Byb3h5IiwgImZ1bmNOYW1lIiwgIm5hbWVzcGFjZSIsICJsb2dnZXIiLCAiRGlhZ0xvZ0xldmVsIiwgImNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlciIsICJtYXhMZXZlbCIsICJfZmlsdGVyRnVuYyIsICJ0aGVMZXZlbCIsICJ0aGVGdW5jIiwgIl9fcmVhZCQyIiwgIl9fc3ByZWFkQXJyYXkkMiIsICJBUElfTkFNRSQyIiwgIkRpYWdBUEkiLCAiX2xvZ1Byb3h5IiwgInNlbGYiLCAic2V0TG9nZ2VyIiwgIm9wdGlvbnNPckxvZ0xldmVsIiwgIm9sZExvZ2dlciIsICJuZXdMb2dnZXIiLCAic3RhY2siLCAib3B0aW9ucyIsICJjcmVhdGVDb250ZXh0S2V5IiwgImRlc2NyaXB0aW9uIiwgIkJhc2VDb250ZXh0IiwgInBhcmVudENvbnRleHQiLCAiUk9PVF9DT05URVhUIiwgIl9fcmVhZCQxIiwgIl9fc3ByZWFkQXJyYXkkMSIsICJOb29wQ29udGV4dE1hbmFnZXIiLCAiX2NvbnRleHQiLCAidGhpc0FyZyIsICJ0YXJnZXQiLCAiX19yZWFkIiwgIl9fc3ByZWFkQXJyYXkiLCAiQVBJX05BTUUkMSIsICJOT09QX0NPTlRFWFRfTUFOQUdFUiIsICJDb250ZXh0QVBJIiwgImNvbnRleHRNYW5hZ2VyIiwgIlRyYWNlRmxhZ3MiLCAiSU5WQUxJRF9TUEFOSUQiLCAiSU5WQUxJRF9UUkFDRUlEIiwgIklOVkFMSURfU1BBTl9DT05URVhUIiwgIk5vblJlY29yZGluZ1NwYW4iLCAiX3NwYW5Db250ZXh0IiwgIl9rZXkiLCAiX2F0dHJpYnV0ZXMiLCAiX25hbWUiLCAiX2xpbmsiLCAiX2xpbmtzIiwgIl9zdGF0dXMiLCAiX2VuZFRpbWUiLCAiX2V4Y2VwdGlvbiIsICJfdGltZSIsICJTUEFOX0tFWSIsICJnZXRTcGFuIiwgImdldEFjdGl2ZVNwYW4iLCAic2V0U3BhbiIsICJzcGFuIiwgImRlbGV0ZVNwYW4iLCAic2V0U3BhbkNvbnRleHQiLCAic3BhbkNvbnRleHQiLCAiZ2V0U3BhbkNvbnRleHQiLCAiVkFMSURfVFJBQ0VJRF9SRUdFWCIsICJWQUxJRF9TUEFOSURfUkVHRVgiLCAiaXNWYWxpZFRyYWNlSWQiLCAidHJhY2VJZCIsICJpc1ZhbGlkU3BhbklkIiwgInNwYW5JZCIsICJpc1NwYW5Db250ZXh0VmFsaWQiLCAid3JhcFNwYW5Db250ZXh0IiwgImNvbnRleHRBcGkiLCAiTm9vcFRyYWNlciIsICJuYW1lIiwgInJvb3QiLCAicGFyZW50RnJvbUNvbnRleHQiLCAiaXNTcGFuQ29udGV4dCIsICJhcmcyIiwgImFyZzMiLCAiYXJnNCIsICJvcHRzIiwgImN0eCIsICJjb250ZXh0V2l0aFNwYW5TZXQiLCAiTk9PUF9UUkFDRVIiLCAiUHJveHlUcmFjZXIiLCAiX3Byb3ZpZGVyIiwgInZlcnNpb24iLCAiX29wdGlvbnMiLCAiX2ZuIiwgInRyYWNlciIsICJOb29wVHJhY2VyUHJvdmlkZXIiLCAiX3ZlcnNpb24iLCAiTk9PUF9UUkFDRVJfUFJPVklERVIiLCAiUHJveHlUcmFjZXJQcm92aWRlciIsICJkZWxlZ2F0ZSIsICJTcGFuS2luZCIsICJTcGFuU3RhdHVzQ29kZSIsICJBUElfTkFNRSIsICJUcmFjZUFQSSIsICJwcm92aWRlciIsICJzdWNjZXNzIiwgInRyYWNlIiwgImNyZWF0ZUNERVNwYW4iLCAiY2RlQ29ubiIsICJkYXRhIiwgIm9wZXJhdGlvbiIsICJyZXN1bHQiLCAiY3JlYXRlVHJhY2tpbmdTcGFuIiwgIkNkZUVycm9yIiwgIkN1c3RvbUVycm9yIiwgImZyaWVuZGx5TWVzc2FnZSIsICJxdWVyeUNERSIsICJyZXNwb25zZVNjaGVtYSIsICJ0cmFja2luZ0tleSIsICJpc0NERVJlc3BvbnNlRXJyb3IiLCAiY29ubmVjdGlvbiIsICJjaGVja0lmQ29uZm9ybXNUb1NjaGVtYSIsICJzY2hlbWEiLCAiQ0RFUmVzcG9uc2VFcnJvciIsICJnZXRDaGVja291dFByZXZpZXciLCAicmVxdWVzdCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJnZXRQcmVmaWxsIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJzdGFydFBheW1lbnRGbG93IiwgInBheWxvYWQiLCAiU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgInN0YXJ0UGF5bWVudEZsb3dGb3JDQyIsICJTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSIsICJzdGFydFBheW1lbnRGbG93Rm9yUFIiLCAiY29uZmlybVBheW1lbnRGbG93IiwgIkNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgImZpbmFsaXplU2V0dXBQYXltZW50TWV0aG9kIiwgIlNldHVwQ2hlY2tvdXRSZXNwb25zZSIsICJjaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZCIsICJDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlIiwgImdldENoZWNrb3V0VmFsdWUiLCAic2VjdXJlVG9rZW4iLCAicHJvbW9Db2RlIiwgImNoZWNrb3V0UHJldmlldyIsICJjdXJyZW5jaWVzIiwgImludiIsICJhbW91bnRBdG9tIiwgInN1bSIsICJnZXRDaGVja291dFByZXZpZXdBbW91bnQiLCAiaXNTZXR1cE1vZGUiLCAidG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyIsICJhbGxDZGVDb25uZWN0aW9ucyIsICJUb2tlbml6ZUNhcmRSZXNwb25zZSIsICJjaGVja291dENhcmRFbGVtZW50cyIsICJDaGVja291dFN1Y2Nlc3NSZXNwb25zZSIsICJzZXR1cENoZWNrb3V0IiwgInBlcmZvcm1DaGVja291dCIsICJDREVfUE9MTElOR19JTlRFUlZBTCIsICJwaW5nQ2RlRm9yU3RhdHVzIiwgImlmcmFtZSIsICJjaGlsZE9yaWdpbiIsICJyZXNwb25zZU1vZGVsIiwgImNvbm5lY3Rpb25PYmoiLCAiY29ubmVjdFRvQ2hpbGQiLCAicHJlcGFyZVBheW1lbnRGbG93IiwgIlByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlIiwgInNhZmVseUdldFN0YW5kYXJkaXplZEVycm9yQ29kZSIsICJDaGVja291dFN0YW5kYXJkRXJyb3JSZXNwb25zZSIsICJzZXRVc2VyRGV2aWNlVG9rZW4iLCAiZGV2aWNlVG9rZW4iLCAiU2V0VXNlckRldmljZVRva2VuUmVzcG9uc2UiLCAiY2hlY2tJZlZhbGlkQ2RlQ29ubmVjdGlvbk9iamVjdCIsICJwaW5nIiwgImlzUmVzdWx0VmFsaWQiLCAiaXNWYWxpZCIsICJGUkFNRV9CQVNFX1VSTCIsICJFTkNPRElORyIsICJFTkNPRElOR19MRU4iLCAiUkFORE9NX0xFTiIsICJUSU1FX0xFTiIsICJUSU1FX01BWCIsICJVTElERXJyb3JDb2RlIiwgIlVMSURFcnJvciIsICJlcnJvckNvZGUiLCAibWVzc2FnZSIsICJyYW5kb21DaGFyIiwgInBybmciLCAicmFuZG9tUG9zaXRpb24iLCAiZGV0ZWN0UFJORyIsICJyb290TG9va3VwIiwgImRldGVjdFJvb3QiLCAiZ2xvYmFsQ3J5cHRvIiwgImJ1ZmZlciIsICJpbldlYldvcmtlciIsICJlbmNvZGVSYW5kb20iLCAibGVuIiwgInN0ciIsICJlbmNvZGVUaW1lIiwgIm1vZCIsICJjdXJyZW50TGVuIiwgInVsaWQiLCAic2VlZFRpbWUiLCAiY3VycmVudFBSTkciLCAic2VlZCIsICJDT09LSUVfTkFNRSIsICJnZXREZXZpY2VUb2tlbiIsICJleGlzdGluZ0Nvb2tpZSIsICJjb29raWUiLCAidG9rZW4iLCAic2V0RGV2aWNlVG9rZW4iLCAib25lWWVhckZyb21Ob3ciLCAiZXh0cmFjdElzc3Vlc1BlckZpZWxkIiwgImlzc3Vlc1BlckZpZWxkIiwgImZpZWxkTmFtZSIsICJGaWVsZE5hbWVFbnVtIiwgImNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybSIsICJmb3JtRGl2IiwgImluaXRpYWxEaWN0IiwgImFjYyIsICJwYXJzZUV2ZW50UGF5bG9hZCIsICJldmVudERhdGEiLCAiRWxlbWVudEV2ZW50IiwgImdlbmVyYXRlQW5vbnltb3VzVmFsdWVzIiwgImdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzIiwgImZpZWxkcyIsICJGaWVsZE5hbWUiLCAiZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzIiwgImNoZWNrb3V0X3NldHRpbmdzIiwgImdldEZ1bGxOYW1lIiwgImZpcnN0TmFtZSIsICJsYXN0TmFtZSIsICJzdHlsZXMiLCAid2lkdGgiLCAiaGVpZ2h0IiwgImJhbmtTZWxlY3RvclN0eWxlcyIsICJjcmVhdGVBbmRPcGVuRnJhbWUiLCAidXJsIiwgInRpdGxlIiwgInRlbXBsYXRlIiwgImhvc3QiLCAic2hhZG93Um9vdCIsICJjYW5jZWxCdXR0b24iLCAiY3JlYXRlQW5kT3BlbkJhbmtTZWxlY3RvciIsICJiYW5rcyIsICJiYW5rTGlzdEh0bWwiLCAiYmFuayIsICJsb2dvSHRtbCIsICJiYW5rSXRlbXMiLCAiY2xlYW51cCIsICJjcmVhdGVBbmRPcGVuTWljcm9EZXBvc2l0Rm9ybSIsICJwYXltZW50TWV0aG9kVHlwZSIsICJlbGVtZW50cyIsICJoYW5kbGVDYW5jZWwiLCAib25TdWNjZXNzIiwgInBvbGxpbmdJbnRlcnZhbCIsICJzdGFydFBvbGxpbmciLCAiTWljcm9EZXBvc2l0U3RhdHVzUmVzcG9uc2UiLCAiY2xlYW51cEV2ZW50TGlzdGVuZXJzIiwgIm9yaWdpbmFsSGFuZGxlQ2FuY2VsIiwgIndyYXBwZWRIYW5kbGVDYW5jZWwiLCAiaGFuZGxlUG9sbGluZyIsICJzdGF0dXMiLCAiaGFuZGxlRXZlbnRzIiwgIlRocmVlRFNTdGF0dXMiLCAic3RhcnQzZHNWZXJpZmljYXRpb24iLCAicGFyYW1zIiwgImZyYW1lV2lkdGgiLCAiZnJhbWVIZWlnaHQiLCAiZnJhbWVUaXRsZSIsICJQaW5nM0RTU3RhdHVzUmVzcG9uc2UiLCAic3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QiLCAib3BlblBvcHVwV2luZG93IiwgInBvcHVwTmFtZSIsICJmZWF0dXJlcyIsICJwb3B1cFdpbmRvdyIsICJzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0IiwgImV4cGVjdGVkVmVyaWZ5VG9rZW4iLCAiZXJyX18iLCAicG9sbGluZyIsICJ2ZXJpZnlSZXN1bHQiLCAiZGV0ZWN0TGFuZ3VhZ2UiLCAibGFuZ3VhZ2UiLCAibG9nX18kdyIsICJlcnJfXyR3IiwgImNyZWF0ZUR5bmFtaWNWYWxpZGF0aW9uU2NoZW1hIiwgInJlcXVpcmVfemlwX2NvZGUiLCAicmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzcyIsICJyZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyIsICJwYXltZW50X21ldGhvZCIsICJpc0J1c2luZXNzUHVyY2hhc2UiLCAibm9uQ2RlRm9ybUlucHV0cyIsICJjb25kaXRpb25hbEZpZWxkcyIsICJSZXF1aXJlZFN0cmluZyIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAidmFsaWRhdGVOb25DZGVGb3JtRmllbGRzIiwgIm9uVmFsaWRhdGlvbkVycm9yIiwgImRlZmF1bHRGaWVsZFZhbHVlcyIsICJrZXlzIiwgImZvcm1hdHRlZCIsICJpc3N1ZXMiLCAiaXNzdWVLZXlzIiwgImxvZ19fJHYiLCAiZXJyX18kdiIsICJ2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyIsICJ2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHMiLCAidG9rZW5pemVSZXN1bHRzIiwgInRva2VuaXplUmVzdWx0IiwgInBhcnNlZCIsICJBbGxGaWVsZE5hbWVzIiwgImVycl9fJHUiLCAicGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJmaW5kQ3BtTWF0Y2hpbmdUeXBlIiwgImFsbENQTXMiLCAiem9kTW9kZWwiLCAiY3BtIiwgImNwbTIiLCAiY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybSIsICJwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwIiwgImxvZ19fMiIsICJwcmVmaWxsIiwgImNyZWF0ZWRQYXltZW50TWV0aG9kIiwgImNoZWNrb3V0UmVxdWVzdCIsICJQYXltZW50UHJvY2Vzc29yIiwgImxvYWRTY3JpcHQiLCAic2NyaXB0SWQiLCAic3JjIiwgImNoZWNrTG9hZGVkRm4iLCAiZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIiLCAic2NyaXB0IiwgImV4aXN0aW5nU2NyaXB0IiwgImdldFBheW1lbnREYXRhUmVxdWVzdCIsICJnYXRld2F5IiwgImdhdGV3YXlNZXJjaGFudElkIiwgIm1lcmNoYW50TmFtZSIsICJtZXJjaGFudElkIiwgImluaXRpYWxQcmV2aWV3IiwgIm92ZXJyaWRlUGF5bWVudFJlcXVlc3QiLCAidG90YWxQcmljZSIsICJjdXJyZW5jeUNvZGUiLCAiYmFzZVJlcXVlc3QiLCAibG9hZEdvb2dsZVBheVNjcmlwdCIsICJwYXltZW50c0NsaWVudCIsICJnZXRHb29nbGVQYXlFbnZpcm9ubWVudCIsICJnZXRHb29nbGVQYXltZW50c0NsaWVudCIsICJwYXltZW50RGF0YVJlcXVlc3QiLCAiZW52aXJvbm1lbnQiLCAicGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAiY29tbW9uQWN0aW9uIiwgIkNvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheSIsICJmb3JtSW5wdXRzIiwgInBheW1lbnREYXRhIiwgImlucHV0cyIsICJiaWxsaW5nQWRkcmVzcyIsICJzaGlwcGluZ0FkZHJlc3MiLCAicGF5ZXJGaXJzdE5hbWUiLCAibGFzdE5hbWVQYXJ0cyIsICJwYXllckxhc3ROYW1lIiwgImxvZ19fJHUiLCAiZXJyX18kdCIsICJydW5BaXJ3YWxsZXhCQUNTRmxvdyIsICJhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyIsICJjaGVja291dFBheW1lbnRNZXRob2QiLCAiZm9ybUNhbGxiYWNrcyIsICJjdXN0b21QYXJhbXMiLCAibm9uQ2RlRm9ybUZpZWxkcyIsICJhbnlDZGVDb25uZWN0aW9uIiwgInZlcmlmaWNhdGlvbk1ldGhvZCIsICJtaWNyb0RlcG9zaXREYXRhIiwgInN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJzdGFydEZsb3dOZXh0QWN0aW9ucyIsICJjb25zZW50SWQiLCAiYXZhaWxhYmxlQmFua3MiLCAic2VsZWN0ZWRCYW5rIiwgImRpcmVjdERlYml0RGF0YSIsICJyZWRpcmVjdFVybCIsICJuZXdDb25maXJtUmVzdWx0IiwgImxvZ19fJHQiLCAiZXJyX18kcyIsICJydW5BaXJ3YWxsZXhFRlRGbG93IiwgImxvZ19fJHMiLCAiZXJyX18kciIsICJydW5BaXJ3YWxsZXhTRVBBRmxvdyIsICJsb2dfXyRyIiwgImVycl9fJHEiLCAiQWlyd2FsbGV4M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXNwb25zZUhlYWRlcnMkMyIsICJlcnJvclJlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3VsdCIsICJmcmllbmRseUVyciIsICJkZXZFcnIiLCAiY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzIiwgInBhcnNlSW50ZW50SWRGcm9tM2RzSHJlZiIsICJocmVmIiwgImludGVudElkIiwgInJ1bkFpcndhbGxleDNkc0Zsb3ciLCAiaGVhZGVycyIsICJpbml0aWFsSW50ZW50SWQiLCAiQXBwbGVQYXlDcG0kMiIsICJHb29nbGVQYXlDcG0kMiIsICJsb2FkQXBwbGVQYXlTY3JpcHQiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheSIsICJhcHBsZVBheVBheW1lbnQiLCAicG1CaWxsaW5nQ29udGFjdCIsICJiaWxsaW5nQ29udGFjdCIsICJzaGlwcGluZ0NvbnRhY3QiLCAiY3JlYXRlUmVjdXJyaW5nUGF5bWVudFJlcXVlc3QiLCAidG90YWwiLCAibGluZUl0ZW0iLCAiYXBwbGVJbnRlcnZhbFVuaXQiLCAiYXBwbGVJbnRlcnZhbENvdW50IiwgImNyZWF0ZUFwcGxlUGF5VG90YWwiLCAiZGVmYXVsdExhYmVsIiwgImFtb3VudCIsICJnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0IiwgIkFkeWVuRW52aXJvbm1lbnQiLCAiQWR5ZW5Mb2NhbGUiLCAibG9nX18kcSIsICJlcnJfXyRwIiwgIkFkeWVuM2RzUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzcG9uc2VIZWFkZXJzJDIiLCAiZGVjb2RlQWR5ZW5BY3Rpb24iLCAiaXNBZHllbkF2YWlsYWJsZSIsICJnZXRBZHllbkNoZWNrb3V0IiwgImhhbmRsZUFkeWVuM2RzIiwgImxvY2FsZSIsICJjb3VudHJ5Q29kZSIsICJjb21wb25lbnQiLCAib25DYW5jZWwiLCAib25QYXltZW50RmFpbGVkIiwgIm9uQWRkaXRpb25hbERldGFpbHMiLCAiXyIsICJfXyIsICJhZHllbkNoZWNrb3V0IiwgImNoZWNrb3V0IiwgImRldGVybWluZUxvY2FsZSIsICJwcmVmaWxsTG9jYWxlIiwgImJyb3dzZXJMb2NhbGUiLCAiY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHMiLCAicnVuQWR5ZW4zZHNGbG93IiwgIkFwcGxlUGF5Q3BtJDEiLCAiR29vZ2xlUGF5Q3BtJDEiLCAibG9nX18kcCIsICJoYW5kbGVWYWxpZGF0ZU1lcmNoYW50JDIiLCAicGF5bWVudFNlc3Npb25SZXNwb25zZSIsICJoYW5kbGVQYXltZW50QXV0aG9yaXplZCQyIiwgImdldEZyYXVkTWV0YWRhdGEiLCAibG9nX18kbyIsICJlcnJfXyRvIiwgImluaXRBZHllbkFwcGxlUGF5RmxvdyIsICJhZGRFcnJvckNhdGNoZXJGb3JJbml0IiwgInVuYXZhaWxhYmxlUmVzdWx0IiwgImFwcGxlUGF5Q3BtIiwgIm9uQXBwbGVQYXlTdGFydEZsb3ciLCAiT2pzRmxvd3MiLCAicnVuQWR5ZW5BcHBsZVBheUZsb3ciLCAic2Vzc2lvbiIsICJzZXNzaW9uQ29udGV4dCIsICJpbml0aWFsUHJldmlldzIiLCAidXBkYXRlIiwgImxvZ19fJG4iLCAiZXJyX18kbiIsICJpbml0QWR5ZW5Hb29nbGVQYXlGbG93IiwgImdvb2dsZVBheUNwbSIsICJwcm9jZXNzb3JBY2NvdW50IiwgImNsaWVudCIsICJpc1JlYWR5VG9QYXkiLCAib25Hb29nbGVQYXlTdGFydEZsb3ciLCAicnVuQWR5ZW5Hb29nbGVQYXlGbG93IiwgIm1lcmdlZElucHV0cyIsICJvdXJQbUlkIiwgImxvZ19fJG0iLCAiZXJyX18kbSIsICJydW5BaXJ3YWxsZXhBQ0hGbG93IiwgImxvZ19fJGwiLCAiaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxIiwgImhhbmRsZTNEUyIsICJoYW5kbGVQYXltZW50QXV0aG9yaXplZCQxIiwgImxvZ19fJGsiLCAiZXJyX18kbCIsICJpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93IiwgInJ1bkFpcndhbGxleEFwcGxlUGF5RmxvdyIsICJsb2dfXyRqIiwgImVycl9fJGsiLCAiaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3ciLCAicnVuQWlyd2FsbGV4R29vZ2xlUGF5RmxvdyIsICJlbmNyeXB0ZWRQYXltZW50VG9rZW4iLCAibG9nX18kaSIsICJlcnJfXyRqIiwgIkFpcndhbGxleEtsYXJuYUNwbSIsICJpbml0QWlyd2FsbGV4S2xhcm5hRmxvdyIsICJrbGFybmFDcG0iLCAicnVuQWlyd2FsbGV4S2xhcm5hRmxvdyIsICJpc0Fub255bW91cyIsICJuZXdDdXN0b21lckZpZWxkcyIsICJBcHBsZVBheUNwbSIsICJHb29nbGVQYXlDcG0iLCAiaGFuZGxlVmFsaWRhdGVNZXJjaGFudCIsICJoYW5kbGVQYXltZW50QXV0aG9yaXplZCIsICJtb2JpbGVXYWxsZXRQYXltZW50RGF0YSIsICJsb2dfXyRoIiwgImVycl9fJGkiLCAiaW5pdEF1dGhuZXRBcHBsZVBheUZsb3ciLCAicnVuQXV0aG5ldEFwcGxlUGF5RmxvdyIsICJsb2dfXyRnIiwgImVycl9fJGgiLCAiaW5pdEF1dGhuZXRHb29nbGVQYXlGbG93IiwgInJ1bkF1dGhuZXRHb29nbGVQYXlGbG93IiwgInNjcmVlbl9oZWlnaHQiLCAic2NyZWVuX3dpZHRoIiwgImNvbG9yX2RlcHRoIiwgImphdmFfZW5hYmxlZCIsICJ1c2VyX2FnZW50IiwgImFjY2VwdF9oZWFkZXIiLCAidGltZV96b25lX29mZnNldCIsICJsb2dfXyRmIiwgImVycl9fJGciLCAiYXR0YWNoRGV2aWNlRGF0YUNvbGxlY3RvciIsICJwb3N0VXJsIiwgImFjY2Vzc1Rva2VuIiwgImZvcm0iLCAicnVuRGV2aWNlRGF0YUNvbGxlY3Rpb24iLCAiZXhwZWN0ZWRPcmlnaW4iLCAiZGV0YWNoIiwgImhhbmRsZUNvbGxlY3Rpb25FdmVudCIsICJydW5QYXllckF1dGgiLCAic3RlcFVwVXJsIiwgIm1lcmNoYW50RGF0YSIsICJ0b2tlbklucHV0IiwgIm1kSW5wdXQiLCAibG9nX18kZSIsICJlcnJfXyRmIiwgIkN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCIsICJudWxsT3JVbmRlZk9yJDEiLCAiRlJJRU5ETFlfRVJSIiwgInBhcnNlUmVzcG9uc2VIZWFkZXJzJDEiLCAidXNlckFjdGlvbiIsICJjaGVja0lmUmVxdWlyZXNDeWJlcnNvdXJjZTNkcyIsICJoYW5kbGVDeWJlcnNvdXJjZTNkcyIsICJjbGVhbnVwUG9sbGluZyIsICJydW5DeWJlcnNvdXJjZTNkc0Zsb3ciLCAic3RlcF91cF91cmwiLCAiYWNjZXNzX3Rva2VuIiwgImRkX3VybCIsICJkZF90b2tlbiIsICJtZXJjaGFudF9kYXRhIiwgImNvbGxlY3Rpb25SZXN1bHQiLCAibG9nX18kZCIsICJlcnJfXyRlIiwgIlBvY2t5dDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlVmF1bHRJZEZyb20zZHNIcmVmIiwgInZhdWx0SWQiLCAicGFyc2VBcmdGcm9tSHJlZiIsICJhcmdOYW1lIiwgImNoZWNrSWZSZXF1aXJlc1BvY2t5dDNkcyIsICJydW5Qb2NreXQzZHNGbG93IiwgInN0cmlwZUxvZ19fIiwgIlN0cmlwZTNEU01ldGFkYXRhUGF5bG9hZCIsICJzdHJpcGVDQzNEU0Zsb3ciLCAicGFyc2VVc2VyRkVQYXlsb2FkIiwgImJ1aWxkU3RyaXBlQm5wbFJldHVyblVybCIsICJjaGVja291dEF0dGVtcHRJZCIsICJyZXR1cm5VcmwiLCAiQk5QTF9QT1BVUF9SRVNFUlZBVElPTl9USU1FT1VUX01TIiwgIkJOUExfUE9QVVBfV0lORE9XX09QVElPTlMiLCAiYWN0aXZlQm5wbFBvcHVwIiwgImNsb3NlU3RyaXBlQm5wbFBvcHVwIiwgInBvcHVwIiwgImFib3J0U3RyaXBlQm5wbFBvcHVwRmxvdyIsICJhY3RpdmVTdHJpcGVCbnBsRmxvdyIsICJjcmVhdGVTdHJpcGVCbnBsRmxvd0NvbnRyb2xsZXIiLCAicnVuIiwgIm93bmVyIiwgImFib3J0QWN0aXZlRmxvdyIsICJjdXJyZW50RmxvdyIsICJ0aHJvd0lmU3RyaXBlQm5wbEZsb3dBYm9ydGVkIiwgImFib3J0U2lnbmFsIiwgIlNUUklQRV9CTlBMX1BPUFVQX0JMT0NLRURfRVJST1IiLCAicmVzZXJ2ZVN0cmlwZUJucGxQb3B1cCIsICJwb3B1cEhhbmRsZSIsICJ3aXRoUmVzZXJ2ZWRTdHJpcGVCbnBsUG9wdXAiLCAidXNlUmVkaXJlY3RGbG93IiwgImNsYWltUmVzZXJ2ZWRTdHJpcGVCbnBsUG9wdXAiLCAiQk5QTF9QT1BVUF9QT0xMX0lOVEVSVkFMX01TIiwgIkJOUExfUE9QVVBfUE9MTF9MSU1JVCIsICJCTlBMX1BPUFVQX1BPTExTX0FGVEVSX0NMT1NFIiwgIkJOUExfRkFJTEVEX1NUQVRVU0VTIiwgIkJOUExfQVVUSE9SSVpFRF9TVEFUVVNFUyIsICJ3YWl0Rm9yU3RyaXBlQm5wbFBvcHVwUG9sbCIsICJzaWduYWwiLCAib25BYm9ydCIsICJ3YWl0Rm9yU3RyaXBlQm5wbFBvcHVwIiwgImNsaWVudFNlY3JldCIsICJwb2xsc0FmdGVyQ2xvc2UiLCAicG9sbCIsICJwYXltZW50SW50ZW50IiwgIkJOUExfQ09ORklSTV9SRVRSWV9MSU1JVCIsICJjb25maXJtU3RyaXBlQm5wbFBheW1lbnRGbG93IiwgInBvcHVwUmVxdWVzdCIsICJhdHRlbXB0IiwgIk1BWF9DT05GSVJNX0xPT1BfSVRFUkFUSU9OUyIsICJsb2dfXyRjIiwgImVycl9fJGQiLCAidW5zYWZlbHlSdW5VbmlmaWVkQ2NGbG93IiwgImNvbW1vbkNoZWNrb3V0UGFyYW1zIiwgInRva2VuaXplQ2FyZFJlc3VsdHMiLCAic3RhcnRQZlJlc3VsdCIsICJyZXR1cm5TdWNjZXNzUmVzdWx0IiwgInJ1bkNvbmZpcm1Mb29wIiwgInBmUmVzdWx0IiwgInZhbGlkYXRlUGZSZXN1bHRVc2VyQWN0aW9uIiwgInVzZXJBY3Rpb25SZXN1bHQiLCAicnVuUmVxdWlyZWRVc2VyQWN0aW9uIiwgImNoZWNrSWZMZWdhY3kzRFNQYXRoIiwgImNvbW1vbkNDM0RTRmxvdyIsICJwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJVc2VyQWN0aW9uRkVQYXlsb2FkIiwgInByZWZpbGxNb2RlIiwgInBheW1lbnRNZXRob2RJZCIsICJsb2dfXyRiIiwgImVycl9fJGMiLCAicnVuQ29tbW9uQ2NGbG93IiwgInVuaWZpZWRDQ1JvbGxvdXRSYXRpbyIsICJyb2xsIiwgInVzZVVuaWZpZWRDQ0Zsb3ciLCAidWNjUm9sbFRyYWNraW5nTWV0YWRhdGEiLCAiZXJySGVhZGVycyIsICJyZXF1aXJlc1BvY2t5dDNkcyIsICJwb2NreXRNZXRhZGF0YUZvckNoZWNrb3V0IiwgImFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQiLCAiYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0IiwgImN5YmVyc291cmNlQWN0aW9uIiwgImN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCIsICJjeWJlcnNvdXJjZU1ldGFkYXRhRm9yQ2hlY2tvdXQiLCAic2hvdWxkVXNlU3RyaXBlRmxvdyIsICJwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJjY1BtSWQiLCAic3RyaXBlQWN0aW9uIiwgImNvbW1vbjNEU0FjdGlvblR5cGVzIiwgInJlcXVpcmVkX3VzZXJfYWN0aW9ucyIsICJDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiTG9vcENyeXB0b0NwbSIsICJsb2dfXyRhIiwgImVycl9fJGIiLCAiaW5pdExvb3BGbG93IiwgInByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEiLCAicGF5bWVudFNldHVwSW5mbyIsICJzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50IiwgIm1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQiLCAiYWxsb3dDdXN0b21lclRvQ2hvb3NlQXV0aCIsICJjaGFyZ2VBbW91bnRVc2RBdG9tIiwgInBheW1lbnRVc2RBbW91bnQiLCAiY3VzdG9tZXJSZWZJZCIsICJ3aWRnZXRQcm9wcyIsICJpbml0TG9vcENvbm5lY3RQcm9wcyIsICJydW5Mb29wRmxvdyIsICJpc0NoZWNrb3V0TW9kZSIsICJjdXN0b21lckZpZWxkcyIsICJsb2dfXyQ5IiwgImVycl9fJGEiLCAiUGF5cGFsQ3BtIiwgImluaXRQYXlwYWxGbG93IiwgInBheXBhbENwbSIsICJydW5QYXlwYWxGbG93IiwgImZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3ciLCAiaXNQYXlGaXJzdEZsb3ciLCAic3RhcnRQYXltZW50Rmxvd1JlcXVlc3QiLCAicHJlQWN0aW9uVXJsIiwgImVuY29kZWRSZXF1ZXN0IiwgInNlYXJjaFBhcmFtcyIsICJwYXlwYWxGbG93UmVzdWx0IiwgImFwcHJvdmFsU2Vzc2lvbklkIiwgImxvZ19fJDgiLCAiZXJyX18kOSIsICJQb2NreXRQYXlwYWxDcG0iLCAiaW5pdFBvY2t5dFBheXBhbEZsb3ciLCAicG9ja3l0UGF5cGFsQ3BtIiwgInJ1blBvY2t5dFBheXBhbEZsb3ciLCAic2V0dGluZ3MiLCAibG9nX18kNyIsICJlcnJfXyQ4IiwgIlN0cmlwZUFmZmlybUNwbSIsICJTdHJpcGVBZmZpcm1SZXF1aXJlZFVzZXJBY3Rpb25zIiwgImluaXRTdHJpcGVBZmZpcm1GbG93IiwgInN0cmlwZUFmZmlybUNwbSIsICJzdGFydEZsb3ciLCAiYWJvcnRGbG93IiwgInJ1blN0cmlwZUFmZmlybUZsb3ciLCAiZmxvd0Fib3J0U2lnbmFsIiwgInVzZVBvcHVwIiwgImNhcnRJbmZvIiwgImNsaWVudF9zZWNyZXQiLCAiY3VzdG9tZXJOYW1lIiwgImFmZmlybVBheW1lbnREYXRhIiwgImFmZmlybU9wdGlvbnMiLCAidGhlaXJQYXltZW50TWV0aG9kIiwgImxvZ19fJDYiLCAiZXJyX18kNyIsICJTdHJpcGVBZnRlcnBheUNwbSIsICJTdHJpcGVBZnRlcnBheVJlcXVpcmVkVXNlckFjdGlvbnMiLCAiaW5pdFN0cmlwZUFmdGVycGF5RmxvdyIsICJzdHJpcGVBZnRlcnBheUNwbSIsICJydW5TdHJpcGVBZnRlcnBheUZsb3ciLCAiYWZ0ZXJwYXlQYXltZW50RGF0YSIsICJhZnRlcnBheU9wdGlvbnMiLCAiY29uZmlybWF0aW9uUmVzdWx0IiwgImxvZ19fJDUiLCAiZXJyX18kNiIsICJTdHJpcGVLbGFybmFDcG0iLCAiU3RyaXBlS2xhcm5hUmVxdWlyZWRVc2VyQWN0aW9ucyIsICJpbml0U3RyaXBlS2xhcm5hRmxvdyIsICJzdHJpcGVLbGFybmFDcG0iLCAicnVuU3RyaXBlS2xhcm5hRmxvdyIsICJrbGFybmFQYXltZW50RGF0YSIsICJrbGFybmFPcHRpb25zIiwgIk9KU19TVFJJUEVfTElOS19CVE5fSUQiLCAibG9nX18kNCIsICJlcnJfXyQ1IiwgIlN0cmlwZUxpbmtDcG0iLCAiU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMiLCAiaW5pdFN0cmlwZUxpbmtGbG93IiwgImluaXRQYXJhbXMiLCAic3RyaXBlTGlua0NwbSIsICJsaW5rQXV0aGVudGljYXRpb25FbGVtZW50IiwgImV4cHJlc3NDaGVja291dEVsZW1lbnQiLCAicmVuZGVyTGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudCIsICJzZWxlY3RvciIsICJzaWxlbnQiLCAicGFyZW50Q29udGFpbmVyIiwgImNvbnRhaW5lciIsICJpc0F1dGhlbnRpY2F0ZWQiLCAiaXNMaW5rQXV0aFJlYWR5IiwgImlzUG9zc2libGVBdXRoZW50aWNhdGVkIiwgIm1vdW50QnV0dG9uIiwgImRpc21vdW50QnV0dG9uIiwgImdldEVsZW1lbnRCeUlkQXN5bmMiLCAicnVuU3RyaXBlTGlua0Zsb3ciLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSIsICJvdXJFeGlzdGluZ1BtSWQiLCAicGF5ZXJMYXN0TmFtZVBhcnRzIiwgImdldEVsZW1lbnQiLCAiZWxlbWVudCIsICJsb2dfXyQzIiwgImVycl9fJDQiLCAiU3RyaXBlUHJDcG0iLCAiaW5pdFN0cmlwZVByRmxvdyIsICJwciIsICJjYW5NYWtlUGF5bWVudCIsICJydW5TdHJpcGVQckZsb3cyIiwgImZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QiLCAicnVuU3RyaXBlUHJGbG93JDEiLCAiaW5pdFJlc3VsdCIsICJvdmVycmlkZSIsICJhcHBsZVBheVBheW1lbnRSZXF1ZXN0IiwgIm5lZWRzRnJlc2hQcmV2aWV3IiwgImZyZXNoUHJldmlldyIsICJtZXJnZWRBbW91bnQiLCAidXBkYXRlUHJXaXRoQW1vdW50IiwgInN0cmlwZVBtQWRkZWRFdmVudCIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtIiwgInBhcnNlUFJOZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlUG1FdnQiLCAiaXNQZW5kaW5nIiwgInN0cmlwZUFwcGxlUGF5IiwgImxhYmVsIiwgImNwbXMiLCAid2l0aFByb3ZpZGVyIiwgIndpdGhQcm9jZXNzb3IiLCAibWF0Y2hlcyIsICJtYXRjaGVzUHJvY2Vzc29yIiwgIm1hdGNoZXNQcm92aWRlciIsICJsb2dfXyQyIiwgImVycl9fJDMiLCAiY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIiLCAiZmxvd05hbWUiLCAiaW5pdEZsb3ciLCAicHVibGlzaGVyIiwgInN0YXJ0QWxsSW5pdEZsb3dzIiwgImZsb3dzIiwgImZsb3ciLCAiY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycyIsICJlcnJfXyQyIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAicmF3Q2FsbGJhY2siLCAic2FmZUNhbGxiYWNrIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiRm9ybUNhbGxiYWNrcyIsICJkZXRlY3RGcmFtZXdvcmsiLCAid2luZG93IiwgIm5leHRXaW5kb3ciLCAibm9kZSIsICJ2dWVXaW5kb3ciLCAiZ2V0RnJhbWV3b3JrVmVyc2lvbiIsICJmcmFtZXdvcmsiLCAibmdWZXJzaW9uRWwiLCAiZ2V0RnJhbWV3b3JrSW5mbyIsICJTdWJtaXRNZXRob2RzIiwgIlN1Ym1pdE1ldGhvZHMyIiwgIlBheW1lbnRQcm92aWRlclR5cGUiLCAiUGF5bWVudFByb3ZpZGVyVHlwZTIiLCAiZ2V0QXBwbGVQYXlQcm9jZXNzb3JzIiwgImluaXRGbG93cyIsICJhcHBsZVBheUluaXRGbG93cyIsICJhcHBsZVBheUluaXRSZXN1bHRzIiwgImZsb3dWYWx1ZSIsICJzdHJpcGVQUkZsb3dSZXN1bHQiLCAic3RhcnRBcHBsZVBheUZsb3ciLCAiZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyIsICJnb29nbGVQYXlJbml0Rmxvd3MiLCAiZ29vZ2xlUGF5SW5pdFJlc3VsdHMiLCAic3RhcnRHb29nbGVQYXlGbG93IiwgImluaXRSZXN1bHRzIiwgImF2YWlsYWJsZUZsb3ciLCAiZ2V0S2xhcm5hUHJvY2Vzc29ycyIsICJrbGFybmFJbml0UmVzdWx0cyIsICJhaXJ3YWxsZXhLbGFybmFGbG93UmVzdWx0IiwgInN0cmlwZUtsYXJuYUZsb3dSZXN1bHQiLCAic3RhcnRLbGFybmFGbG93IiwgImdldEFmZmlybVByb2Nlc3NvcnMiLCAiYWZmaXJtSW5pdFJlc3VsdHMiLCAic3RyaXBlQWZmaXJtRmxvd1Jlc3VsdCIsICJzdGFydEFmZmlybUZsb3ciLCAiZ2V0QWZ0ZXJwYXlQcm9jZXNzb3JzIiwgImFmdGVycGF5SW5pdFJlc3VsdHMiLCAic3RyaXBlQWZ0ZXJwYXlGbG93UmVzdWx0IiwgInN0YXJ0QWZ0ZXJwYXlGbG93IiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgImxvZ19fJDEiLCAiZXJyX18kMSIsICJpbml0VHJhY2VyU2FmZSIsICJpbml0VHJhY2VyVW5zYWZlIiwgImdsb2JhbFRyYWNlciIsICJzZGtUcmFjZVdlYiIsICJDb25zb2xlU3BhbkV4cG9ydGVyIiwgIlNpbXBsZVNwYW5Qcm9jZXNzb3IiLCAiV2ViVHJhY2VyUHJvdmlkZXIiLCAiaW5zdHJ1bWVudGF0aW9uRmV0Y2giLCAiRmV0Y2hJbnN0cnVtZW50YXRpb24iLCAiY29udGV4dFpvbmUiLCAiWm9uZUNvbnRleHRNYW5hZ2VyIiwgImluc3RydW1lbnRhdGlvbiIsICJyZWdpc3Rlckluc3RydW1lbnRhdGlvbnMiLCAicmVzb3VyY2VzIiwgIlJlc291cmNlIiwgImRldGVjdFJlc291cmNlcyIsICJkZXRlY3RSZXNvdXJjZXNTeW5jIiwgImV4cG9ydGVyVHJhY2VPdGxwIiwgIk9UTFBUcmFjZUV4cG9ydGVyIiwgInByb3BhZ2F0b3JCMyIsICJCM1Byb3BhZ2F0b3IiLCAiQjNJbmplY3RFbmNvZGluZyIsICJzZGtUcmFjZUJhc2UiLCAiQmF0Y2hTcGFuUHJvY2Vzc29yIiwgImNvbGxlY3RvclVybCIsICJnZXRDb2xsZWN0b3JVcmwiLCAiZXhwb3J0ZXIiLCAiYmFzZUF0dHJzIiwgImZyb21CYXNlVXJsIiwgImJhc2VIb3N0bmFtZSIsICJPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlciIsICJmb3JtSWQiLCAiaW50ZXJuYWxDYWxsYmFja3MiLCAiZ2V0Q2xlYW5PcmlnaW4iLCAiZWxlbWVudElkIiwgImV2ZW50VHlwZSIsICJjcmVhdGVDb25uZWN0aW9uIiwgImlzVmFsaWRPYmplY3QiLCAiQ29ubmVjdGlvbk1hbmFnZXIiLCAic2V0dXBQYXltZW50UmVxdWVzdEhhbmRsZXJzIiwgImluaXRQckZsb3dzIiwgImNhbGxiYWNrcyIsICJzdHJpcGVQUiIsICJjYW5BcHBsZVBheSIsICJjYW5Hb29nbGVQYXkiLCAiZmluYWxTdGF0dXMiLCAidXNlclBhcmFtcyIsICJydW5TdHJpcGVQckZsb3ciLCAiR0VORVJJQ19DT05OX0VSUiIsICJsb2dfXyIsICJfT3BlblBheUZvcm0iLCAiY2RlQnJpZGdlSWZyYW1lIiwgIkVsZW1lbnRUeXBlRW51bSIsICJjZGVMb2FkZWQiLCAiY2RlQ29ublNwYW4iLCAiYW55Q2RlQ29ubiIsICJvanNDb250ZXh0IiwgImVsZW1lbnRUeXBlIiwgIl9FbGVtZW50VHlwZUVudW1ab2QiLCAiZnJhbWUiLCAicXVlcnlTdHJpbmciLCAiY29ubiIsICJjb250ZXh0MiIsICJhcHBsZVBheVByb2Nlc3NvcnMiLCAiaXNBcHBsZVBheUF2YWlsYWJsZSIsICJnb29nbGVQYXlQcm9jZXNzb3JzIiwgImlzR29vZ2xlUGF5QXZhaWxhYmxlIiwgInBheXBhbEF2YWlsYWJsZSIsICJrbGFybmFQcm9jZXNzb3JzIiwgImlzS2xhcm5hQXZhaWxhYmxlIiwgImFmZmlybVByb2Nlc3NvcnMiLCAiaXNBZmZpcm1BdmFpbGFibGUiLCAiYWZ0ZXJwYXlQcm9jZXNzb3JzIiwgImlzQWZ0ZXJwYXlBdmFpbGFibGUiLCAicG9ja3l0UGF5cGFsQXZhaWxhYmxlIiwgIm1ldGhvZCIsICJsb29wQ3J5cHRvQXZhaWxhYmxlIiwgInN0cmlwZUxpbmtGbG93UmVzdWx0IiwgInN0cmlwZUxpbmtBdmFpbGFibGUiLCAibWV0aG9kcyIsICJpbml0Rmxvd05hbWVNYXAiLCAiZmxvd1Jlc3VsdCIsICJpc1N0cmlwZUJucGxSZWRpcmVjdCIsICJzdWJtaXNzaW9uSWQiLCAiYWlyd2FsbGV4R29vZ2xlUGF5IiwgImFpcndhbGxleEFwcGxlUGF5IiwgImF1dGhvcml6ZU5ldEdvb2dsZVBheSIsICJhdXRob3JpemVOZXRBcHBsZVBheSIsICJhZHllbkdvb2dsZVBheSIsICJhZHllbkFwcGxlUGF5IiwgImJucGxTZXR0aW5ncyIsICJuZXdDYWxsYmFja3MiLCAibWV0cmljc0NvbnRleHQiLCAiY2FsbGVyIiwgImN1cnJlbnRJbnN0YW5jZSIsICJkZWJ1Z0luZm8iLCAiY2RlTG9hZGVkUGF5bG9hZCIsICJPcGVuUGF5Rm9ybSJdCn0K
7949
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA5fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzJDEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG52YXIgQ3VzdG9tRXJyb3IgPSBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0oRXJyb3IpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMVwiXSA9IFwibGluZTFcIjtcbiAgRmllbGROYW1lMltcIkxJTkUyXCJdID0gXCJsaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiTElORTNcIl0gPSBcImxpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTFcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUyXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTNcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DSVRZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19TVEFURVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzU3RhdGVcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0NPVU5UUllcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX1pJUF9DT0RFXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkdcIl0gPSBcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiSVNfQlVTSU5FU1NfUFVSQ0hBU0VcIl0gPSBcImlzQnVzaW5lc3NQdXJjaGFzZVwiO1xuICBGaWVsZE5hbWUyW1wiQlVTSU5FU1NfTkFNRVwiXSA9IFwiYnVzaW5lc3NOYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJUQVhfSURcIl0gPSBcInRheElkXCI7XG4gIEZpZWxkTmFtZTJbXCJUQVhfSURfVFlQRVwiXSA9IFwidGF4SWRUeXBlXCI7XG4gIHJldHVybiBGaWVsZE5hbWUyO1xufSkoRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IEZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oRmllbGROYW1lKTtcbnZhciBQcml2YXRlRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoUHJpdmF0ZUZpZWxkTmFtZTIpID0+IHtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZE51bWJlclwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkRXhwaXJ5XCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmRDdmNcIjtcbiAgcmV0dXJuIFByaXZhdGVGaWVsZE5hbWUyO1xufSkoUHJpdmF0ZUZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBQcml2YXRlRmllbGROYW1lRW51bSA9IHoubmF0aXZlRW51bShQcml2YXRlRmllbGROYW1lKTtcbmNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6LnVuaW9uKFtGaWVsZE5hbWVFbnVtLCBQcml2YXRlRmllbGROYW1lRW51bV0pO1xudmFyIEVsZW1lbnRUeXBlRW51bSA9IC8qIEBfX1BVUkVfXyAqLyAoKEVsZW1lbnRUeXBlRW51bTIpID0+IHtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRcIl0gPSBcImNhcmRcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkLW51bWJlclwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmQtZXhwaXJ5XCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZC1jdmNcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNERV9CUklER0VcIl0gPSBcImNkZS1icmlkZ2VcIjtcbiAgcmV0dXJuIEVsZW1lbnRUeXBlRW51bTI7XG59KShFbGVtZW50VHlwZUVudW0gfHwge30pO1xuY29uc3QgX0VsZW1lbnRUeXBlRW51bVpvZCA9IHouZW51bShbXCJjYXJkXCIsIFwiY2FyZC1udW1iZXJcIiwgXCJjYXJkLWV4cGlyeVwiLCBcImNhcmQtY3ZjXCIsIFwiY2RlLWJyaWRnZVwiXSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBCYXNlRWxlbWVudHNTdHlsZSA9IHoub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlclN0eWxlOiB6Lm9iamVjdCh7XG4gICAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZ1xuICB9KS5vcHRpb25hbCgpXG59KTtcbkJhc2VFbGVtZW50c1N0eWxlLmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogT3B0aW9uYWxTdHJpbmcsXG4gIHBsYWNlaG9sZGVyOiB6Lm9iamVjdCh7XG4gICAgY2FyZE51bWJlcjogT3B0aW9uYWxTdHJpbmcsXG4gICAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgICBjdmM6IE9wdGlvbmFsU3RyaW5nXG4gIH0pLm9wdGlvbmFsKClcbn0pO1xuQmFzZUVsZW1lbnRzU3R5bGUuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBPcHRpb25hbFN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqXG4gICAqIFRoZSBjYXJkIGljb24gYXQgdGhlIHN0YXJ0IG9mIHRoZSBjYXJkIG51bWJlciBpbnB1dCBmaWVsZFxuICAgKiBJdCB3b24ndCBhZmZlY3QgYWZ0ZXIgdGhlIGljb24gY2hhbmdlZCB0byBjYXJkIGJyYW5kIGFmdGVyIHRoZSB1c2VyIGlucHV0IHRoZSBjYXJkIG51bWJlclxuICAgKi9cbiAgaWNvbjogei5vYmplY3Qoe1xuICAgIGNvbG9yOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSkub3B0aW9uYWwoKVxufSk7XG5CYXNlRWxlbWVudHNTdHlsZS5leHRlbmQoe1xuICBkaXNhYmxlQXV0b0ZpbGw6IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlcjogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbkJhc2VFbGVtZW50c1N0eWxlLmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogT3B0aW9uYWxTdHJpbmcsXG4gIHBsYWNlaG9sZGVyOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0gei5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIG9iZnVzY2F0ZWRWYWx1ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6Lm9wdGlvbmFsKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwaG9uZVwiIC8qIFBIT05FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUyXCIgLyogTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTNcIiAvKiBMSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiIC8qIElTX1NISVBQSU5HX1NBTUVfQVNfQklMTElORyAqL106IHouY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KHRydWUpLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUyXCIgLyogU0hJUFBJTkdfTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTNcIiAvKiBTSElQUElOR19MSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJidXNpbmVzc05hbWVcIiAvKiBCVVNJTkVTU19OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInRheElkXCIgLyogVEFYX0lEICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInRheElkVHlwZVwiIC8qIFRBWF9JRF9UWVBFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJwaG9uZVwiIC8qIFBIT05FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUyXCIgLyogTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTNcIiAvKiBMSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiIC8qIElTX1NISVBQSU5HX1NBTUVfQVNfQklMTElORyAqL106IHouY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KHRydWUpLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUyXCIgLyogU0hJUFBJTkdfTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTNcIiAvKiBTSElQUElOR19MSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJidXNpbmVzc05hbWVcIiAvKiBCVVNJTkVTU19OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInRheElkXCIgLyogVEFYX0lEICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInRheElkVHlwZVwiIC8qIFRBWF9JRF9UWVBFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZyxcbiAgcGF5bWVudFJvdXRlSWQ6IE9wdGlvbmFsU3RyaW5nXG59KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbmNvbnN0IFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHouYm9vbGVhbigpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6LnN0cmluZygpLFxuICBwYXltZW50TWV0aG9kSWQ6IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50UGF5bG9hZCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG5jb25zdCBFbGVtZW50RXZlbnQgPSB6Lm9iamVjdCh7XG4gIHBheWxvYWQ6IEV2ZW50UGF5bG9hZCxcbiAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBlbGVtZW50SWQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogei5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6LnN0cmluZygpLFxuICBwYXltZW50X21ldGhvZF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KHouc3RyaW5nKCkpKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHoub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHouc3RyaW5nKCksXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3VjY2Vzczogei5saXRlcmFsKGZhbHNlKSxcbiAgZXJyb3JfdHlwZTogei5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6LmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRSZXNwb25zZSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHoub2JqZWN0KHsgc3VjY2Vzczogei5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xudmFyIFRocmVlRFNTdGF0dXMgPSAvKiBAX19QVVJFX18gKi8gKChUaHJlZURTU3RhdHVzMikgPT4ge1xuICBUaHJlZURTU3RhdHVzMltcIlNVQ0NFU1NcIl0gPSBcInN1Y2Nlc3NcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJGQUlMVVJFXCJdID0gXCJmYWlsdXJlXCI7XG4gIFRocmVlRFNTdGF0dXMyW1wiQ0FOQ0VMTEVEXCJdID0gXCJjYW5jZWxsZWRcIjtcbiAgcmV0dXJuIFRocmVlRFNTdGF0dXMyO1xufSkoVGhyZWVEU1N0YXR1cyB8fCB7fSk7XG5jb25zdCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pLFxuICBocmVmOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56Lm9iamVjdCh7XG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbmNvbnN0IENvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6LnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogei5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogei5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBBV1hCYW5rID0gei5vYmplY3Qoe1xuICBiYW5rX25hbWU6IHouc3RyaW5nKCksXG4gIGRpc3BsYXlfbmFtZTogei5zdHJpbmcoKSxcbiAgcmVzb3VyY2VzOiB6Lm9iamVjdCh7XG4gICAgbG9nb191cmw6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KVxufSk7XG5jb25zdCBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgYXZhaWxhYmxlX2JhbmtzOiBudWxsT3JVbmRlZk9yJDEoei5hcnJheShBV1hCYW5rKSlcbn0pO1xuY29uc3QgQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKHRydWUpLCBocmVmOiB6LnN0cmluZygpIH0pLFxuICB6Lm9iamVjdCh7IHByZXNlbnQ6IHoubGl0ZXJhbChmYWxzZSkgfSlcbl0pO1xuY29uc3QgQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogei5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbCksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSkpLFxuICBwb3N0X2NoZWNrb3V0X3JlZGlyZWN0X3RvOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSlcbn0pO1xuY29uc3QgRUZURm9ybURhdGEgPSB6Lm9iamVjdCh7XG4gIGluc3RpdHV0aW9uTnVtYmVyOiB6LnN0cmluZygpLFxuICB0cmFuc2l0TnVtYmVyOiB6LnN0cmluZygpLFxuICBhY2NvdW50TnVtYmVyOiB6LnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogei5lbnVtKFtcInBlcnNvbmFsXCIsIFwiYnVzaW5lc3NcIl0pXG59KTtcbnoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBFRlRGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEJBQ1NGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgc29ydENvZGU6IHouc3RyaW5nKCksXG4gIGFjY291bnROdW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6LmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xuei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IEJBQ1NGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFNFUEFGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaWJhbjogei5zdHJpbmcoKSxcbiAgYWNjb3VudFR5cGU6IHouZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogU0VQQUZvcm1EYXRhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQUNITWljcm9EZXBvc2l0Rm9ybURhdGEgPSB6Lm9iamVjdCh7XG4gIGFjY291bnRfbnVtYmVyOiB6LnN0cmluZygpLFxuICBhYmFfcm91dGluZ19udW1iZXI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRUZUTWljcm9EZXBvc2l0Rm9ybURhdGEgPSB6Lm9iamVjdCh7XG4gIGluc3RpdHV0aW9uX251bWJlcjogei5zdHJpbmcoKSxcbiAgdHJhbnNpdF9udW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnRfbnVtYmVyOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IEJBQ1NNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgYWNjb3VudF9udW1iZXI6IHouc3RyaW5nKCksXG4gIHNvcnRfY29kZTogei5zdHJpbmcoKVxufSk7XG5jb25zdCBTRVBBTWljcm9EZXBvc2l0Rm9ybURhdGEgPSB6Lm9iamVjdCh7XG4gIGliYW46IHouc3RyaW5nKClcbn0pO1xuY29uc3QgTWljcm9EZXBvc2l0U3RhdHVzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogei51bmlvbihbXG4gICAgQUNITWljcm9EZXBvc2l0Rm9ybURhdGEsXG4gICAgRUZUTWljcm9EZXBvc2l0Rm9ybURhdGEsXG4gICAgQkFDU01pY3JvRGVwb3NpdEZvcm1EYXRhLFxuICAgIFNFUEFNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICB6Lm9iamVjdCh7IGVycm9yOiB6LnN0cmluZygpIH0pXG4gIF0pLm9wdGlvbmFsKClcbn0pO1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6Lm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xuei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBDREVSZXNwb25zZUVycm9yID0gei5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZHVyYXRpb246IHouc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHoub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHoubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogei5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50czogei5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmVzOiB6LmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3JlYXRlZDogei5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHouYXJyYXkoSW52b2ljZU1pbmltYWwpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3Ioei5hcnJheSh6LnN0cmluZygpKSksXG4gIHBheW1lbnRfbWV0aG9kX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogbnVsbE9yVW5kZWZPcihDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwpLFxuICBjb3Vwb25zOiB6LmFycmF5KENvdXBvbk1pbmltYWwpXG59KTtcbmNvbnN0IF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24gPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwib3BlblwiKSxcbiAgbG9jYWxlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0b2tlbjogei5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X3NldHRpbmdzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKSxcbiAgcmV0dXJuX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgc3VjY2Vzc191cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGZpbmFsX2ZlYXR1cmVfcm9sbG91dF9zZXR0aW5nczogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgUGF5bWVudEZvcm1QcmVmaWxsID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHoubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6Lm51bGxhYmxlKHoudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHouZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogei5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xuei51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56Lm9iamVjdCh7XG4gIGxvZ286IHouc3RyaW5nKCksXG4gIGljb246IHouc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHouc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQ29tcGxldGVBZGRyZXNzID0gei5vYmplY3Qoe1xuICBsaW5lMTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsaW5lMjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsaW5lMzogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjaXR5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHN0YXRlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNvdW50cnk6IHouc3RyaW5nKCksXG4gIHppcF9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHouYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2VtYWlsOiB6LnN0cmluZygpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3MsXG4gIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcy5vcHRpb25hbCgpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHouYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VfY29uZmlybWVkX3BtX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbnouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSk7XG5jb25zdCBOZXdDdXN0b21lckZpZWxkcyA9IHoub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfYnVzaW5lc3NfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl90YXhfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfdGF4X2lkX3R5cGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcyxcbiAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcy5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfcGhvbmU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHoub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0gei5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6LmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG4gIHVzZV91bmlmaWVkX2NjX2Zsb3c6IG51bGxPclVuZGVmT3Ioei5ib29sZWFuKCkpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IFN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjY19wbV9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPcihDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5yZWNvcmQoei5hbnkoKSk7XG56Lm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTE6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMzogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgY2l0eTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgc3RhdGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNvdW50cnk6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBidXNpbmVzc19uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0YXhfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRheF9pZF90eXBlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBudWxsT3JVbmRlZk9yKHouYm9vbGVhbigpKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgbWVzc2FnZTogei5zdHJpbmcoKVxufSk7XG5jb25zdCBDaGVja291dFN0YW5kYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgZXZlbnRzOiB6LmFycmF5KFxuICAgIHoub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56LmFueSgpLm9wdGlvbmFsKCk7XG56Lm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBTZXRVc2VyRGV2aWNlVG9rZW5SZXNwb25zZSA9IHoub2JqZWN0KHt9KTtcbmNvbnN0IFVzZXJBY3Rpb25GRVBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiB6LnN0cmluZygpLFxuICBfdW5pZmllZF9jY19wY2NzX2lkOiB6LnN0cmluZygpXG59KS5jYXRjaGFsbCh6LmFueSgpKTtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZSA9IHouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBab2RGaWVsZEVycm9ycyA9IHouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxufTtcbmNvbnN0IGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlID0gKG9nRXJyb3JNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRVtrZXldID8/IG9nRXJyb3JNZXNzYWdlO1xufTtcbmNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShyZXNwb25zZVswXS5tc2cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBgJHtgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpgfVxuJHtidWxsZXRlZH1gO1xuICB9XG59O1xuY29uc3QgY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgY29uc3QgbGlzdE9mRXJyb3JzID0gZXJyb3JzLm1hcCgoZXJyKSA9PiBgLSAke2Vyci5wYXRoLmpvaW4oXCIvXCIpfTogJHtlcnIubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbn07XG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgaWYgKGlzU3RyaW5naWZpZWRKc29uT2JqZWN0KGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3Iob2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoWm9kRmllbGRFcnJvcnMuc2FmZVBhcnNlKG9iaikuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICByZXR1cm4gZTIgKyBcIlwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZSArIFwiXCI7XG4gIH1cbn07XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvckxvZ2dlcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7Y2FsbGJhY2tOYW1lfSk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gIH0pO1xufTtcblxuY29uc3Qgc3VtID0gKGFycikgPT4ge1xuICByZXR1cm4gYXJyLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xufTtcblxuY29uc3QgYmVmb3JlVW5sb2FkSGFuZGxlciA9IChldmVudCkgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBldmVudC5yZXR1cm5WYWx1ZSA9IHRydWU7XG59O1xuY29uc3QgcHJldmVudE5hdmlnYXRpb24gPSAoKSA9PiB7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGJlZm9yZVVubG9hZEhhbmRsZXIpO1xufTtcbmNvbnN0IHN0b3BQcmV2ZW50TmF2aWdhdGlvbiA9ICgpID0+IHtcbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgYmVmb3JlVW5sb2FkSGFuZGxlcik7XG59O1xuXG5jb25zdCBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyA9IChzaW1wbGVPanNGbG93KSA9PiB7XG4gIGxldCBhY3RpdmVTdWJtaXNzaW9uID0gbnVsbDtcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICBpZiAoYWN0aXZlU3VibWlzc2lvbikge1xuICAgICAgY29uc29sZS53YXJuKFwiU2tpcHBpbmcgc3VibWlzc2lvbiBiZWNhdXNlIGl0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN1Ym1pc3Npb24gPSBTeW1ib2woXCJvanMtc3VibWlzc2lvblwiKTtcbiAgICBhY3RpdmVTdWJtaXNzaW9uID0gc3VibWlzc2lvbjtcbiAgICBjb25zdCBvbkFib3J0ID0gKCkgPT4ge1xuICAgICAgaWYgKGFjdGl2ZVN1Ym1pc3Npb24gIT09IHN1Ym1pc3Npb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYWN0aXZlU3VibWlzc2lvbiA9IG51bGw7XG4gICAgICBpZiAocGFyYW1zLmNvbnRleHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uKSB7XG4gICAgICAgIHN0b3BQcmV2ZW50TmF2aWdhdGlvbigpO1xuICAgICAgfVxuICAgIH07XG4gICAgcGFyYW1zLmFib3J0U2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIHRyeSB7XG4gICAgICBpZiAocGFyYW1zLmNvbnRleHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uKSB7XG4gICAgICAgIHByZXZlbnROYXZpZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dFN0YXJ0ZWQ/LigpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9zdGFydGVkXCIsIHtcbiAgICAgICAgY3BtOiBwYXJhbXMuY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZsb3dSZXN1bHQgPSBhd2FpdCBzaW1wbGVPanNGbG93KHBhcmFtcyk7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X3N1Y2Nlc3NcIiwge1xuICAgICAgICBjcG06IHBhcmFtcy5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIC4uLmZsb3dSZXN1bHRcbiAgICAgIH0pO1xuICAgICAgZm9yY2VQcm9jZXNzTWV0cmljc1F1ZXVlKCk7XG4gICAgICBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhmbG93UmVzdWx0LnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgICB9IGVsc2UgaWYgKGZsb3dSZXN1bHQubW9kZSA9PT0gXCJjaGVja291dFwiKSB7XG4gICAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3VjY2VzcyhcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5jdXN0b21lcl9pZCxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5wcm9jZXNzb3JzX3VzZWQgPz8gW10sXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQucGF5bWVudF9tZXRob2RfaWQgPz8gXCJcIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtmbG93UmVzdWx0fWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAocGFyYW1zLmFib3J0U2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICBjb25zdCBlcnJvckNvZGUgPSBhd2FpdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUocGFyYW1zLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7IGNwbTogcGFyYW1zLmNoZWNrb3V0UGF5bWVudE1ldGhvZCwgZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUsIGVycm9yIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBwYXJhbXMuYWJvcnRTaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICAgIGlmIChhY3RpdmVTdWJtaXNzaW9uID09PSBzdWJtaXNzaW9uKSB7XG4gICAgICAgIGFjdGl2ZVN1Ym1pc3Npb24gPSBudWxsO1xuICAgICAgICBpZiAocGFyYW1zLmNvbnRleHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uKSB7XG4gICAgICAgICAgc3RvcFByZXZlbnROYXZpZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuY29uc3QgYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCA9IChpbml0KSA9PiB7XG4gIHJldHVybiBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBpbml0KHBhcmFtcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiaW5pdC1lcnJvci1jYXRjaGVyXCIpO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGF3YWl0IHNhZmVseUdldFN0YW5kYXJkaXplZEVycm9yQ29kZShwYXJhbXMuY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgZXJyX18oZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UsIGVycm9yKTtcbiAgICAgIHRyYWNrKFwiaW5pdF9mbG93X2Vycm9yXCIsIHsgZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUsIGVycm9yIH0pO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IGVycm9yTWVzc2FnZSwgZXJyb3JDb2RlLCBpc0xvYWRpbmc6IGZhbHNlIH07XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZnVuY3Rpb24gX19yZWFkJDQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuZnVuY3Rpb24gX19zcHJlYWRBcnJheSQ0KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cblxuZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JDbGFzcyhjcmVhdGVJbXBsKSB7XG4gICAgdmFyIF9zdXBlciA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICBFcnJvci5jYWxsKGluc3RhbmNlKTtcbiAgICAgICAgaW5zdGFuY2Uuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgICB9O1xuICAgIHZhciBjdG9yRnVuYyA9IGNyZWF0ZUltcGwoX3N1cGVyKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvckZ1bmM7XG4gICAgcmV0dXJuIGN0b3JGdW5jO1xufVxuXG52YXIgVW5zdWJzY3JpcHRpb25FcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBVbnN1YnNjcmlwdGlvbkVycm9ySW1wbChlcnJvcnMpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBlcnJvcnNcbiAgICAgICAgICAgID8gZXJyb3JzLmxlbmd0aCArIFwiIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XFxuXCIgKyBlcnJvcnMubWFwKGZ1bmN0aW9uIChlcnIsIGkpIHsgcmV0dXJuIGkgKyAxICsgXCIpIFwiICsgZXJyLnRvU3RyaW5nKCk7IH0pLmpvaW4oJ1xcbiAgJylcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdVbnN1YnNjcmlwdGlvbkVycm9yJztcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgfTtcbn0pO1xuXG5mdW5jdGlvbiBhcnJSZW1vdmUoYXJyLCBpdGVtKSB7XG4gICAgaWYgKGFycikge1xuICAgICAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgMCA8PSBpbmRleCAmJiBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpcHRpb24gPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbihpbml0aWFsVGVhcmRvd24pIHtcbiAgICAgICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSBpbml0aWFsVGVhcmRvd247XG4gICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgIH1cbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZV8xLCBfYSwgZV8yLCBfYjtcbiAgICAgICAgdmFyIGVycm9ycztcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgICAgICBpZiAoX3BhcmVudGFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9wYXJlbnRhZ2VfMSA9IF9fdmFsdWVzKF9wYXJlbnRhZ2UpLCBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCk7ICFfcGFyZW50YWdlXzFfMS5kb25lOyBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50XzEgPSBfcGFyZW50YWdlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfMS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcGFyZW50YWdlXzFfMSAmJiAhX3BhcmVudGFnZV8xXzEuZG9uZSAmJiAoX2EgPSBfcGFyZW50YWdlXzEucmV0dXJuKSkgX2EuY2FsbChfcGFyZW50YWdlXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfcGFyZW50YWdlLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaW5pdGlhbEZpbmFsaXplciA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oaW5pdGlhbEZpbmFsaXplcikpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsRmluYWxpemVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGUgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yID8gZS5lcnJvcnMgOiBbZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgICAgIGlmIChfZmluYWxpemVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9maW5hbGl6ZXJzXzEgPSBfX3ZhbHVlcyhfZmluYWxpemVycyksIF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpOyAhX2ZpbmFsaXplcnNfMV8xLmRvbmU7IF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmluYWxpemVyID0gX2ZpbmFsaXplcnNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKGZpbmFsaXplcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICE9PSBudWxsICYmIGVycm9ycyAhPT0gdm9pZCAwID8gZXJyb3JzIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gX19zcHJlYWRBcnJheSQ0KF9fc3ByZWFkQXJyYXkkNChbXSwgX19yZWFkJDQoZXJyb3JzKSksIF9fcmVhZCQ0KGVyci5lcnJvcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnNfMV8xICYmICFfZmluYWxpemVyc18xXzEuZG9uZSAmJiAoX2IgPSBfZmluYWxpemVyc18xLnJldHVybikpIF9iLmNhbGwoX2ZpbmFsaXplcnNfMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdWJzY3JpcHRpb25FcnJvcihlcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0ZWFyZG93biAmJiB0ZWFyZG93biAhPT0gdGhpcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVhcmRvd24uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2EgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkucHVzaCh0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHJldHVybiBfcGFyZW50YWdlID09PSBwYXJlbnQgfHwgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgJiYgX3BhcmVudGFnZS5pbmNsdWRlcyhwYXJlbnQpKTtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50O1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICBhcnJSZW1vdmUoX3BhcmVudGFnZSwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgX2ZpbmFsaXplcnMgJiYgYXJyUmVtb3ZlKF9maW5hbGl6ZXJzLCB0ZWFyZG93bik7XG4gICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGVhcmRvd24uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLkVNUFRZID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVtcHR5ID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBlbXB0eS5jbG9zZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uO1xufSgpKTtcbnZhciBFTVBUWV9TVUJTQ1JJUFRJT04gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5mdW5jdGlvbiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24gfHxcbiAgICAgICAgKHZhbHVlICYmICdjbG9zZWQnIGluIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUucmVtb3ZlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmFkZCkgJiYgaXNGdW5jdGlvbih2YWx1ZS51bnN1YnNjcmliZSkpKTtcbn1cbmZ1bmN0aW9uIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZmluYWxpemVyKSkge1xuICAgICAgICBmaW5hbGl6ZXIoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZpbmFsaXplci51bnN1YnNjcmliZSgpO1xuICAgIH1cbn1cblxudmFyIGNvbmZpZyA9IHtcbiAgICBQcm9taXNlOiB1bmRlZmluZWR9O1xuXG52YXIgdGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheSQ0KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkJDQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICByZXR1cm4gKGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG5mdW5jdGlvbiByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnIpIHtcbiAgICB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub29wKCkgeyB9XG5cbmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpYmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZXI7XG59KFN1YnNjcmlwdGlvbikpO1xudmFyIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyO1xuICAgIH1cbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyO1xufSgpKTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICAgIHRocm93IGVycjtcbn1cbnZhciBFTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcCxcbiAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICBjb21wbGV0ZTogbm9vcCxcbn07XG5cbnZhciBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlKSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eTtcbiAgICB9XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZuc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBmbikgeyByZXR1cm4gZm4ocHJldik7IH0sIGlucHV0KTtcbiAgICB9O1xufVxuXG52YXIgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmUpIHtcbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIG9ic2VydmFibGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IGlzU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCkgPyBvYnNlcnZlck9yTmV4dCA6IG5ldyBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5mdW5jdGlvbiBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gcHJvbWlzZUN0b3IgIT09IG51bGwgJiYgcHJvbWlzZUN0b3IgIT09IHZvaWQgMCA/IHByb21pc2VDdG9yIDogY29uZmlnLlByb21pc2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBpc09ic2VydmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUubmV4dCkgJiYgaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBpc1N1YnNjcmliZXIodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaWJlcikgfHwgKGlzT2JzZXJ2ZXIodmFsdWUpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlLmxpZnQpO1xufVxuZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KGZ1bmN0aW9uIChsaWZ0ZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdChsaWZ0ZWRTb3VyY2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZScpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7XG59XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcblxudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnb2JqZWN0IHVuc3Vic2NyaWJlZCc7XG4gICAgfTtcbn0pO1xuXG52YXIgU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFub255bW91c1N1YmplY3QodGhpcywgdGhpcyk7XG4gICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oX3RoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYS5vYnNlcnZlcnM7XG4gICAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xudmFyIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnIpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcblxudmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChEYXRlKS5ub3coKTtcbiAgICB9fTtcblxudmFyIEFjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBBY3Rpb247XG59KFN1YnNjcmlwdGlvbikpO1xuXG52YXIgaW50ZXJ2YWxQcm92aWRlciA9IHtcbiAgICBzZXRJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheSQ0KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkJDQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgcmV0dXJuIChjbGVhckludGVydmFsKShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbnZhciBBc3luY0FjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMud29yayA9IHdvcms7XG4gICAgICAgIF90aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB2YXIgaWQgPSB0aGlzLmlkO1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWxheSA9IGRlbGF5O1xuICAgICAgICB0aGlzLmlkID0gKF9hID0gdGhpcy5pZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXIsIHRoaXMuaWQsIGRlbGF5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBfaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gaW50ZXJ2YWxQcm92aWRlci5zZXRJbnRlcnZhbChzY2hlZHVsZXIuZmx1c2guYmluZChzY2hlZHVsZXIsIHRoaXMpLCBkZWxheSk7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoX3NjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoZGVsYXkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBkZWxheSAmJiB0aGlzLnBlbmRpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGludGVydmFsUHJvdmlkZXIuY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ2V4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yID0gdGhpcy5fZXhlY3V0ZShzdGF0ZSwgZGVsYXkpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnBlbmRpbmcgPT09IGZhbHNlICYmIHRoaXMuaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIF9kZWxheSkge1xuICAgICAgICB2YXIgZXJyb3JlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3JWYWx1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMud29yayhzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgZXJyb3JWYWx1ZSA9IGUgPyBlIDogbmV3IEVycm9yKCdTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yZWQpIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvclZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGlkID0gX2EuaWQsIHNjaGVkdWxlciA9IF9hLnNjaGVkdWxlcjtcbiAgICAgICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7XG4gICAgICAgICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBhcnJSZW1vdmUoYWN0aW9ucywgdGhpcyk7XG4gICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZWxheSA9IG51bGw7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY0FjdGlvbjtcbn0oQWN0aW9uKSk7XG5cbnZhciBTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNjaGVkdWxlcihzY2hlZHVsZXJBY3Rpb25DdG9yLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gc2NoZWR1bGVyQWN0aW9uQ3RvcjtcbiAgICAgICAgdGhpcy5ub3cgPSBub3c7XG4gICAgfVxuICAgIFNjaGVkdWxlci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAod29yaywgZGVsYXksIHN0YXRlKSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCB3b3JrKS5zY2hlZHVsZShzdGF0ZSwgZGVsYXkpO1xuICAgIH07XG4gICAgU2NoZWR1bGVyLm5vdyA9IGRhdGVUaW1lc3RhbXBQcm92aWRlci5ub3c7XG4gICAgcmV0dXJuIFNjaGVkdWxlcjtcbn0oKSk7XG5cbnZhciBBc3luY1NjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jU2NoZWR1bGVyKFNjaGVkdWxlckFjdGlvbiwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIFNjaGVkdWxlckFjdGlvbiwgbm93KSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5hY3Rpb25zID0gW107XG4gICAgICAgIF90aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY1NjaGVkdWxlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jU2NoZWR1bGVyO1xufShTY2hlZHVsZXIpKTtcblxudmFyIGFzeW5jU2NoZWR1bGVyID0gbmV3IEFzeW5jU2NoZWR1bGVyKEFzeW5jQWN0aW9uKTtcblxudmFyIGlzQXJyYXlMaWtlID0gKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ICYmIHR5cGVvZiB4Lmxlbmd0aCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHggIT09ICdmdW5jdGlvbic7IH0pO1xuXG5mdW5jdGlvbiBpc1Byb21pc2UodmFsdWUpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWUudGhlbik7XG59XG5cbmZ1bmN0aW9uIGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dFtvYnNlcnZhYmxlXSk7XG59XG5cbmZ1bmN0aW9uIGlzQXN5bmNJdGVyYWJsZShvYmopIHtcbiAgICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChpbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnID8gJ2FuIGludmFsaWQgb2JqZWN0JyA6IFwiJ1wiICsgaW5wdXQgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3ltYm9sSXRlcmF0b3IoKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgIVN5bWJvbC5pdGVyYXRvcikge1xuICAgICAgICByZXR1cm4gJ0BAaXRlcmF0b3InO1xuICAgIH1cbiAgICByZXR1cm4gU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIGl0ZXJhdG9yID0gZ2V0U3ltYm9sSXRlcmF0b3IoKTtcblxuZnVuY3Rpb24gaXNJdGVyYWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnB1dFtpdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yXzEoKSB7XG4gICAgICAgIHZhciByZWFkZXIsIF9hLCB2YWx1ZSwgZG9uZTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDI7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQocmVhZGVyLnJlYWQoKSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgX2EgPSBfYi5zZW50KCksIHZhbHVlID0gX2EudmFsdWUsIGRvbmUgPSBfYS5kb25lO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRvbmUpIHJldHVybiBbMywgNV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdCh2b2lkIDApXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMiwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbNCwgX19hd2FpdCh2YWx1ZSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNjogcmV0dXJuIFs0LCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDJdO1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlKG9iaikge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9iai5nZXRSZWFkZXIpO1xufVxuXG5mdW5jdGlvbiBpbm5lckZyb20oaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUludGVyb3BPYnNlcnZhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFycmF5TGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUHJvbWlzZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUl0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpO1xufVxuZnVuY3Rpb24gZnJvbUludGVyb3BPYnNlcnZhYmxlKG9iaikge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb2JzID0gb2JqW29ic2VydmFibGVdKCk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9icy5zdWJzY3JpYmUpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZScpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZShhcnJheSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aCAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkrKykge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGFycmF5W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUHJvbWlzZShwcm9taXNlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb21pc2VcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pXG4gICAgICAgICAgICAudGhlbihudWxsLCByZXBvcnRVbmhhbmRsZWRFcnJvcik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tSXRlcmFibGUoaXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpdGVyYWJsZV8xID0gX192YWx1ZXMoaXRlcmFibGUpLCBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKTsgIWl0ZXJhYmxlXzFfMS5kb25lOyBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGVfMV8xICYmICFpdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBpdGVyYWJsZV8xLnJldHVybikpIF9hLmNhbGwoaXRlcmFibGVfMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFzeW5jSXRlcmFibGUoYXN5bmNJdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pKTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikge1xuICAgIHZhciBhc3luY0l0ZXJhYmxlXzEsIGFzeW5jSXRlcmFibGVfMV8xO1xuICAgIHZhciBlXzIsIF9hO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZhbHVlLCBlXzJfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pO1xuICAgICAgICAgICAgICAgICAgICBhc3luY0l0ZXJhYmxlXzEgPSBfX2FzeW5jVmFsdWVzKGFzeW5jSXRlcmFibGUpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzQsIGFzeW5jSXRlcmFibGVfMS5uZXh0KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgPSBfYi5zZW50KCksICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lKSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhc3luY0l0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMztcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMywgMV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIGVfMl8xID0gX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBlXzIgPSB7IGVycm9yOiBlXzJfMSB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSAmJiAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBhc3luY0l0ZXJhYmxlXzEucmV0dXJuKSkpIHJldHVybiBbMywgOF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX2EuY2FsbChhc3luY0l0ZXJhYmxlXzEpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSA4O1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBleGVjdXRlU2NoZWR1bGUocGFyZW50U3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIHdvcmssIGRlbGF5LCByZXBlYXQpIHtcbiAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICBpZiAocmVwZWF0ID09PSB2b2lkIDApIHsgcmVwZWF0ID0gZmFsc2U7IH1cbiAgICB2YXIgc2NoZWR1bGVTdWJzY3JpcHRpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICB3b3JrKCk7XG4gICAgICAgIGlmIChyZXBlYXQpIHtcbiAgICAgICAgICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBkZWxheSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfSwgZGVsYXkpO1xuICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQoc2NoZWR1bGVTdWJzY3JpcHRpb24pO1xuICAgIGlmICghcmVwZWF0KSB7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZVN1YnNjcmlwdGlvbjtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRocm93RXJyb3IoZXJyb3JPckVycm9yRmFjdG9yeSwgc2NoZWR1bGVyKSB7XG4gICAgdmFyIGVycm9yRmFjdG9yeSA9IGlzRnVuY3Rpb24oZXJyb3JPckVycm9yRmFjdG9yeSkgPyBlcnJvck9yRXJyb3JGYWN0b3J5IDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXJyb3JPckVycm9yRmFjdG9yeTsgfTtcbiAgICB2YXIgaW5pdCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycm9yRmFjdG9yeSgpKTsgfTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoaW5pdCk7XG59XG5cbnZhciBFbXB0eUVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIEVtcHR5RXJyb3JJbXBsKCkge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdFbXB0eUVycm9yJztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbiAgICB9O1xufSk7XG5cbmZ1bmN0aW9uIGxhc3RWYWx1ZUZyb20oc291cmNlLCBjb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgX2hhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHZhciBfdmFsdWU7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgX2hhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoX2hhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoX3ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZERhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZSk7XG59XG5cbnZhciBUaW1lb3V0RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVGltZW91dEVycm9ySW1wbChpbmZvKSB7XG4gICAgICAgIGlmIChpbmZvID09PSB2b2lkIDApIHsgaW5mbyA9IG51bGw7IH1cbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnVGltZW91dCBoYXMgb2NjdXJyZWQnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJztcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9O1xufSk7XG5mdW5jdGlvbiB0aW1lb3V0KGNvbmZpZywgc2NoZWR1bGVyQXJnKSB7XG4gICAgdmFyIF9hID0gKGlzVmFsaWREYXRlKGNvbmZpZykgPyB7IGZpcnN0OiBjb25maWcgfSA6IHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInID8geyBlYWNoOiBjb25maWcgfSA6IGNvbmZpZyksIGZpcnN0ID0gX2EuZmlyc3QsIGVhY2ggPSBfYS5lYWNoLCBfYiA9IF9hLndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYS5zY2hlZHVsZXIsIHNjaGVkdWxlciA9IF9jID09PSB2b2lkIDAgPyBhc3luY1NjaGVkdWxlciA6IF9jLCBfZCA9IF9hLm1ldGEsIG1ldGEgPSBfZCA9PT0gdm9pZCAwID8gbnVsbCA6IF9kO1xuICAgIGlmIChmaXJzdCA9PSBudWxsICYmIGVhY2ggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyB0aW1lb3V0IHByb3ZpZGVkLicpO1xuICAgIH1cbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIHRpbWVyU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIHNlZW4gPSAwO1xuICAgICAgICB2YXIgc3RhcnRUaW1lciA9IGZ1bmN0aW9uIChkZWxheSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJGcm9tKF93aXRoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IG1ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IGxhc3RWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZW46IHNlZW4sXG4gICAgICAgICAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgfTtcbiAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgc2VlbisrO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KChsYXN0VmFsdWUgPSB2YWx1ZSkpO1xuICAgICAgICAgICAgZWFjaCA+IDAgJiYgc3RhcnRUaW1lcihlYWNoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QgIT0gbnVsbCA/ICh0eXBlb2YgZmlyc3QgPT09ICdudW1iZXInID8gZmlyc3QgOiArZmlyc3QgLSBzY2hlZHVsZXIubm93KCkpIDogZWFjaCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0aW1lb3V0RXJyb3JGYWN0b3J5KGluZm8pIHtcbiAgICB0aHJvdyBuZXcgVGltZW91dEVycm9yKGluZm8pO1xufVxuXG5jbGFzcyBMb2FkZWRPbmNlUHVibGlzaGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAodmFsdWUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6IHRydWUsIGxvYWRlZFZhbHVlOiB2YWx1ZSB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIHRoaXMudGhyb3cgPSAoZXJyb3IsIGVyck1zZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6IGZhbHNlLCBlcnJvciwgZXJyTXNnIH07XG4gICAgICB0aGlzLl9zdWJqZWN0LmVycm9yKGVycm9yKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAodmFsdWVJZk5vdExvYWRlZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWVJZk5vdExvYWRlZDtcbiAgICB9O1xuICAgIHRoaXMuc3Vic2NyaWJlID0gKGZuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy53YWl0Rm9yTG9hZCA9ICh0aW1lb3V0Q29uZmlnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIpIGFzc2VydE5ldmVyKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgdGltZW91dFBhcmFtcyA9IHtcbiAgICAgICAgZmlyc3Q6IHRpbWVvdXRDb25maWcudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IodGltZW91dENvbmZpZy50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLl9zdWJqZWN0LnBpcGUodGltZW91dCh0aW1lb3V0UGFyYW1zKSkpO1xuICAgIH07XG4gICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiBmYWxzZSB9O1xuICAgIHRoaXMuX3N1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5cbmNvbnN0IE9qc0Vudmlyb25tZW50ID0gei5lbnVtKFtcImRldlwiLCBcInN0Z1wiLCBcInByb2RcIl0pO1xuY29uc3QgY29ubnRvQmFzZVVybHMgPSB7XG4gIHByb2Q6IFwiaHR0cHM6Ly9jb25udG8uZ2V0b3BlbnBheS5jb21cIixcbiAgc3RnOiBcImh0dHBzOi8vY29ubnRvLm9wZW5wYXlzdGFnaW5nLmNvbVwiLFxuICBkZXY6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDAwXCJcbn07XG5jb25zdCBnZXRDb25udG9VcmwgPSAoZW52KSA9PiB7XG4gIHJldHVybiBjb25udG9CYXNlVXJsc1tlbnZdO1xufTtcbmNvbnN0IGVudkNhY2hlID0ge307XG5jb25zdCBnZXRDdXJyZW50RW52ID0gYXN5bmMgKGJhc2VVcmwpID0+IHtcbiAgaWYgKGVudkNhY2hlW2Jhc2VVcmxdKSB7XG4gICAgcmV0dXJuIGVudkNhY2hlW2Jhc2VVcmxdO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChuZXcgVVJMKFwiL2hlYWx0aC9lbnZpcm9ubWVudFwiLCBiYXNlVXJsKSkudGhlbigocmVzKSA9PiByZXMuanNvbigpKTtcbiAgICBjb25zdCBlbnYgPSBPanNFbnZpcm9ubWVudC5wYXJzZShyZXNwb25zZS5lbnZpcm9ubWVudCk7XG4gICAgZW52Q2FjaGVbYmFzZVVybF0gPSBlbnY7XG4gICAgcmV0dXJuIGVudjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gT2pzRW52aXJvbm1lbnQuVmFsdWVzLnByb2Q7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGFzc2VydE5ldmVyKHZhbHVlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7dmFsdWV9YCk7XG59XG5jb25zdCBleGNsdWRlUHJvcHMgPSAob2JqLCBwcm9wcykgPT4ge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKG9iaikuZmlsdGVyKChba2V5XSkgPT4gIXByb3BzLmluY2x1ZGVzKGtleSkpKTtcbn07XG5jb25zdCBnZXRXaW5kb3dTYWZlID0gKCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIHdpbmRvdztcbn07XG5cbmNvbnN0IG1ldHJpY3NQdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuY29uc3QgTUVUUklDU19RVUVVRV9LRVkgPSBcIm9wX21ldHJpY3NfcXVldWVcIjtcbmNvbnN0IE1BWF9SRVRSWV9BVFRFTVBUUyA9IDM7XG5jb25zdCBCQVRDSF9TSVpFID0gMztcbmNvbnN0IEJBVENIX0lOVEVSVkFMX01TID0gMWUzO1xuY29uc3QgeyBsb2dfXzogbG9nX18keCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgTWV0cmljc1F1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMDtcbiAgICB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJHgoXCJOZXR3b3JrIG9mZmxpbmUsIG1ldHJpY3Mgd2lsbCBiZSBxdWV1ZWRcIik7XG4gICAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH07XG4gICAgdGhpcy5vbmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJHgoXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpO1xuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9O1xuICAgIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gIH1cbiAgYWRkRXZlbnQoZXZlbnROYW1lLCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcykge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnROYW1lLFxuICAgICAgcHJvcGVydGllczogcHJvcGVydGllcyB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiBjb250ZXh0UHJvcGVydGllcyB8fCB7fSxcbiAgICAgIG5vbmNlOiB2NCgpLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBldmVudC50aW1lc3RhbXA7XG4gICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkUXVldWUgPSBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZT8uZ2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkUXVldWUpIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IEpTT04ucGFyc2Uoc3RvcmVkUXVldWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSwgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWV1ZSkpO1xuICB9XG4gIHNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IHNhZmVXaW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgaWYgKHNhZmVXaW5kb3cgJiYgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBzYWZlV2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICB9LCBCQVRDSF9JTlRFUlZBTF9NUyk7XG4gICAgfVxuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBpZiAodGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIGdldFdpbmRvd1NhZmUoKT8uY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lb3V0KTtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgfVxuICBwcm9jZXNzUXVldWUoKSB7XG4gICAgaWYgKCFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gdHJ1ZTtcbiAgICB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBjb250ZXh0ID0gbWV0cmljc1B1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgbG9nX18keChcIk1ldHJpY3MgY29udGV4dCBub3QgYXZhaWxhYmxlLCB3aWxsIHJldHJ5IGxhdGVyXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiYXRjaCA9IHRoaXMucXVldWUuc2xpY2UoMCwgQkFUQ0hfU0laRSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhdGNoUGF5bG9hZCA9IHtcbiAgICAgICAgZXZlbnRzOiBiYXRjaC5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2ZW50X25hbWU6IGV2ZW50LmV2ZW50TmFtZSxcbiAgICAgICAgICAgIGRldmljZV90b2tlbjogY29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGNvbnRleHRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgICAgICAuLi5ldmVudC5jb250ZXh0UHJvcGVydGllc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgbm9uY2U6IGV2ZW50Lm5vbmNlLFxuICAgICAgICAgICAgICBkYXRldGltZTogZXZlbnQuZGF0ZXRpbWUsXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICB0aW1lX2RpZmZfZnJvbV9wcmV2aW91c19ldmVudDogZXZlbnQudGltZURpZmZGcm9tUHJldmlvdXNFdmVudCxcbiAgICAgICAgICAgICAgY2hlY2tvdXRfc2VjdXJlX3Rva2VuOiBjb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICAgIC4uLmV2ZW50LnByb3BlcnRpZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbm50b1VybCA9IGdldENvbm50b1VybChjb250ZXh0LmVudmlyb25tZW50KTtcbiAgICAgIGNvbnN0IG1ldHJpY3NSb3V0ZXIgPSBuZXcgVVJMKFwiL21ldHJpY3MvcHVibGljL2NhcHR1cmVcIiwgY29ubnRvVXJsKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobWV0cmljc1JvdXRlci50b1N0cmluZygpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShiYXRjaFBheWxvYWQpLFxuICAgICAgICBrZWVwYWxpdmU6IHRydWVcbiAgICAgICAgLy8gVG8gc2VuZCBldmVudHMgZXZlbiBpZiB0aGUgcGFnZSBpcyB1bmxvYWRlZFxuICAgICAgfSk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dfXyR4KFwiRXJyb3Igc2VuZGluZyBtZXRyaWNzIGJhdGNoOlwiLCBlcnJvcik7XG4gICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpIHtcbiAgICBiYXRjaC5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgZXZlbnQuYXR0ZW1wdENvdW50Kys7XG4gICAgfSk7XG4gICAgY29uc3QgZXZlbnRzVG9LZWVwID0gYmF0Y2guZmlsdGVyKChldmVudCkgPT4gZXZlbnQuYXR0ZW1wdENvdW50IDwgTUFYX1JFVFJZX0FUVEVNUFRTKTtcbiAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShiYXRjaC5sZW5ndGgpO1xuICAgIHRoaXMucXVldWUgPSBbLi4uZXZlbnRzVG9LZWVwLCAuLi50aGlzLnF1ZXVlXTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICB9XG4gIGNsZWFudXAoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lcik7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICAgIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbn1cbmNvbnN0IG1ldHJpY3NRdWV1ZSA9IG5ldyBNZXRyaWNzUXVldWUoKTtcbmNvbnN0IHRyYWNrID0gKGV2ZW50LCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcykgPT4ge1xuICBtZXRyaWNzUXVldWUuYWRkRXZlbnQoZXZlbnQsIHByb3BlcnRpZXMsIGNvbnRleHRQcm9wZXJ0aWVzKTtcbn07XG5jb25zdCBmb3JjZVByb2Nlc3NNZXRyaWNzUXVldWUgPSAoKSA9PiB7XG4gIG1ldHJpY3NRdWV1ZS5wcm9jZXNzUXVldWUoKTtcbn07XG5jb25zdCBvblVuaGFuZGxlZFJlamVjdGlvbkVycm9yID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShldmVudC5yZWFzb24pO1xuICB0cmFjayhcInVuaGFuZGxlZF9yZWplY3Rpb25fZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICBlcnJvcl9uYW1lOiBldmVudC5yZWFzb25cbiAgfSk7XG59O1xuY29uc3Qgb25VbmNhdWdodEVycm9yID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShldmVudC5lcnJvcik7XG4gIHRyYWNrKFwidW5jYXVnaHRfZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICBlcnJvcl9uYW1lOiBldmVudC5lcnJvcj8ubmFtZSxcbiAgICBlcnJvcl9zdGFjazogZXZlbnQuZXJyb3I/LnN0YWNrLFxuICAgIGZpbGVfbmFtZTogZXZlbnQuZmlsZW5hbWUsXG4gICAgbGluZV9udW1iZXI6IGV2ZW50LmxpbmVubyxcbiAgICBjb2x1bW5fbnVtYmVyOiBldmVudC5jb2xub1xuICB9KTtcbn07XG5sZXQgcGFnZUxpZmVjeWNsZSA9IG51bGw7XG5jb25zdCBsb2FkUGFnZUxpZmVjeWNsZSA9IGFzeW5jICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IHBhZ2VMaWZlY3ljbGVNb2R1bGUgPSBhd2FpdCBpbXBvcnQoJy4vbGlmZWN5Y2xlLSF+ezAwNX1+LmpzJyk7XG4gICAgcGFnZUxpZmVjeWNsZSA9IHBhZ2VMaWZlY3ljbGVNb2R1bGUuZGVmYXVsdDtcbiAgICByZXR1cm4gcGFnZUxpZmVjeWNsZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBwYWdlLWxpZmVjeWNsZTpcIiwgZXJyb3IpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuY29uc3QgcGFnZUxpZmVjeWNsZVN0YXRlQ2hhbmdlSGFuZGxlciA9IChldmVudCkgPT4ge1xuICB0cmFjayhcInBhZ2VfbGlmZWN5Y2xlX3N0YXRlX2NoYW5nZVwiLCB7XG4gICAgb2xkX3N0YXRlOiBldmVudC5vbGRTdGF0ZSxcbiAgICBuZXdfc3RhdGU6IGV2ZW50Lm5ld1N0YXRlXG4gIH0pO1xuICBpZiAoZXZlbnQubmV3U3RhdGUgPT09IFwiaGlkZGVuXCIgfHwgZXZlbnQubmV3U3RhdGUgPT09IFwicGFzc2l2ZVwiKSB7XG4gICAgbWV0cmljc1F1ZXVlLnByb2Nlc3NRdWV1ZSgpO1xuICB9XG59O1xuY29uc3QgYXR0YWNoQW5hbHl0aWNzRXZlbnRMaXN0ZW5lcnMgPSBhc3luYyAoKSA9PiB7XG4gIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG9uVW5jYXVnaHRFcnJvcik7XG4gIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBvblVuaGFuZGxlZFJlamVjdGlvbkVycm9yKTtcbiAgY29uc3QgbGlmZWN5Y2xlID0gYXdhaXQgbG9hZFBhZ2VMaWZlY3ljbGUoKTtcbiAgaWYgKGxpZmVjeWNsZSkge1xuICAgIGxpZmVjeWNsZS5hZGRFdmVudExpc3RlbmVyKFwic3RhdGVjaGFuZ2VcIiwgcGFnZUxpZmVjeWNsZVN0YXRlQ2hhbmdlSGFuZGxlcik7XG4gIH1cbn07XG5jb25zdCBkZXRhY2hBbmFseXRpY3NFdmVudExpc3RlbmVycyA9IGFzeW5jICgpID0+IHtcbiAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25VbmNhdWdodEVycm9yKTtcbiAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIG9uVW5oYW5kbGVkUmVqZWN0aW9uRXJyb3IpO1xuICBpZiAoZ2V0V2luZG93U2FmZSgpICYmIHBhZ2VMaWZlY3ljbGUpIHtcbiAgICBwYWdlTGlmZWN5Y2xlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzdGF0ZWNoYW5nZVwiLCBwYWdlTGlmZWN5Y2xlU3RhdGVDaGFuZ2VIYW5kbGVyKTtcbiAgfVxufTtcblxuY29uc3QgU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IG91ckN1cnJlbmN5VG9UaGVpcnMgPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59O1xuY29uc3QgZ2V0TG9hZGVkU3RyaXBlID0gYXN5bmMgKHB1Ymxpc2hhYmxlS2V5KSA9PiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1N0cmlwZUpzUHJlc2VudCgpKSB7XG4gICAgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmlwZSBKUyBub3QgZm91bmQuYCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gbmV3IFN0cmlwZShwdWJsaXNoYWJsZUtleSk7XG4gIHJldHVybiBzdHJpcGU7XG59O1xuY29uc3QgY3JlYXRlU3RyaXBlRWxlbWVudHMgPSBhc3luYyAoc3RyaXBlUHViS2V5LCBlbGVtZW50c09wdGlvbnMpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKHN0cmlwZVB1YktleSk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IHN0cmlwZS5lbGVtZW50cyhlbGVtZW50c09wdGlvbnMpLFxuICAgIHN0cmlwZVxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0ID0gYXN5bmMgKHN0cmlwZVB1YktleSwgdG90YWxBbW91bnRBdG9tLCBjdXJyZW5jeSwgaXNBbW91bnRQZW5kaW5nLCBpc0xpbmtPbmx5KSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICBjb25zdCBzdHJpcGVDdXJyZW5jeSA9IG91ckN1cnJlbmN5VG9UaGVpcnNbY3VycmVuY3kudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICBjb25zdCBwYXltZW50UmVxdWVzdCA9IHN0cmlwZS5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IHN0cmlwZUN1cnJlbmN5LFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiB0b3RhbEFtb3VudEF0b20sXG4gICAgICBwZW5kaW5nOiBpc0Ftb3VudFBlbmRpbmdcbiAgICB9LFxuICAgIC8vIHJlcXVlc3RTaGlwcGluZzogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiB0cnVlLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXSBcbiAgfSk7XG4gIHJldHVybiBwYXltZW50UmVxdWVzdDtcbn07XG5jb25zdCBzbGVlcCA9ICh0aW1lb3V0TXMpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0TXMpO1xuICB9KTtcbn07XG5jb25zdCBpc1N0cmlwZUpzUHJlc2VudCA9ICgpID0+IHtcbiAgcmV0dXJuIFwiU3RyaXBlXCIgaW4gd2luZG93O1xufTtcbmNvbnN0IHdhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kID0gYXN5bmMgKHBheW1lbnRSZXF1ZXN0KSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHBheW1lbnRSZXF1ZXN0Lm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAoZXZ0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgZXZ0KTtcbiAgICAgICAgcmVzb2x2ZShldnQpO1xuICAgICAgfSk7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcInRva2VuXCIsIGFzeW5jIChldnQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgZXZ0KTtcbiAgICAgIH0pO1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBjb25maXJtU3RyaXBlUHJQTSA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtKSA9PiB7XG4gIGlmICghbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayB8fCAhbmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KG5leHRBY3Rpb25NZXRhZGF0YSl9YCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogc3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKGNvbmZpcm1SZXN1bHQuZXJyb3IpIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcImZhaWxcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtjb25maXJtUmVzdWx0LmVycm9yLm1lc3NhZ2UgPz8gYHVua25vd25gfWApO1xuICB9IGVsc2Uge1xuICAgIHN0cmlwZVBtLmNvbXBsZXRlKFwic3VjY2Vzc1wiKTtcbiAgfVxuICByZXR1cm4gY29uZmlybVJlc3VsdDtcbn07XG5jb25zdCBsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93ID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUobmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayk7XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUNhcmRTZXR1cChuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkXG4gIH0pO1xuICBjb25zdCByZXN1bHRTdGF0dXMgPSBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5zdGF0dXM7XG4gIGlmIChyZXN1bHRTdGF0dXMgPT09IFwic3VjY2VlZGVkXCIpIHtcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcG1faWQpO1xuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQpO1xuICB9IGVsc2UgaWYgKHJlc3VsdFN0YXR1cyA9PT0gXCJjYW5jZWxlZFwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtjb25maXJtUmVzdWx0LmVycm9yPy5tZXNzYWdlID8/IGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQ/Lmxhc3Rfc2V0dXBfZXJyb3I/Lm1lc3NhZ2UgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICAgICk7XG4gIH1cbn07XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBVcGRhdGVzIHRvIHRoaXMgZmlsZSBzaG91bGQgYWxzbyBiZSByZXBsaWNhdGVkIHRvIEBvcGVudGVsZW1ldHJ5L2NvcmUgdG9vLlxuLyoqXG4gKiAtIGdsb2JhbFRoaXMgKE5ldyBzdGFuZGFyZClcbiAqIC0gc2VsZiAoV2lsbCByZXR1cm4gdGhlIGN1cnJlbnQgd2luZG93IGluc3RhbmNlIGZvciBzdXBwb3J0ZWQgYnJvd3NlcnMpXG4gKiAtIHdpbmRvdyAoZmFsbGJhY2sgZm9yIG9sZGVyIGJyb3dzZXIgaW1wbGVtZW50YXRpb25zKVxuICogLSBnbG9iYWwgKE5vZGVKUyBpbXBsZW1lbnRhdGlvbilcbiAqIC0gPG9iamVjdD4gKFdoZW4gYWxsIGVsc2UgZmFpbHMpXG4gKi9cbi8qKiBvbmx5IGdsb2JhbHMgdGhhdCBjb21tb24gdG8gbm9kZSBhbmQgYnJvd3NlcnMgYXJlIGFsbG93ZWQgKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBub2RlL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL2VzLWJ1aWx0aW5zLCBuby11bmRlZlxudmFyIF9nbG9iYWxUaGlzID0gdHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnXG4gICAgPyBnbG9iYWxUaGlzXG4gICAgOiB0eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCdcbiAgICAgICAgPyBzZWxmXG4gICAgICAgIDogdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gd2luZG93XG4gICAgICAgICAgICA6IHR5cGVvZiBnbG9iYWwgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgPyBnbG9iYWxcbiAgICAgICAgICAgICAgICA6IHt9O1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gdGhpcyBpcyBhdXRvZ2VuZXJhdGVkIGZpbGUsIHNlZSBzY3JpcHRzL3ZlcnNpb24tdXBkYXRlLmpzXG52YXIgVkVSU0lPTiA9ICcxLjkuMCc7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgcmUgPSAvXihcXGQrKVxcLihcXGQrKVxcLihcXGQrKSgtKC4rKSk/JC87XG4vKipcbiAqIENyZWF0ZSBhIGZ1bmN0aW9uIHRvIHRlc3QgYW4gQVBJIHZlcnNpb24gdG8gc2VlIGlmIGl0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgcHJvdmlkZWQgb3duVmVyc2lvbi5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gaGFzIHRoZSBmb2xsb3dpbmcgc2VtYW50aWNzOlxuICogLSBFeGFjdCBtYXRjaCBpcyBhbHdheXMgY29tcGF0aWJsZVxuICogLSBNYWpvciB2ZXJzaW9ucyBtdXN0IG1hdGNoIGV4YWN0bHlcbiAqICAgIC0gMS54IHBhY2thZ2UgY2Fubm90IHVzZSBnbG9iYWwgMi54IHBhY2thZ2VcbiAqICAgIC0gMi54IHBhY2thZ2UgY2Fubm90IHVzZSBnbG9iYWwgMS54IHBhY2thZ2VcbiAqIC0gVGhlIG1pbm9yIHZlcnNpb24gb2YgdGhlIEFQSSBtb2R1bGUgcmVxdWVzdGluZyBhY2Nlc3MgdG8gdGhlIGdsb2JhbCBBUEkgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG1pbm9yIHZlcnNpb24gb2YgdGhpcyBBUElcbiAqICAgIC0gMS4zIHBhY2thZ2UgbWF5IHVzZSAxLjQgZ2xvYmFsIGJlY2F1c2UgdGhlIGxhdGVyIGdsb2JhbCBjb250YWlucyBhbGwgZnVuY3Rpb25zIDEuMyBleHBlY3RzXG4gKiAgICAtIDEuNCBwYWNrYWdlIG1heSBOT1QgdXNlIDEuMyBnbG9iYWwgYmVjYXVzZSBpdCBtYXkgdHJ5IHRvIGNhbGwgZnVuY3Rpb25zIHdoaWNoIGRvbid0IGV4aXN0IG9uIDEuM1xuICogLSBJZiB0aGUgbWFqb3IgdmVyc2lvbiBpcyAwLCB0aGUgbWlub3IgdmVyc2lvbiBpcyB0cmVhdGVkIGFzIHRoZSBtYWpvciBhbmQgdGhlIHBhdGNoIGlzIHRyZWF0ZWQgYXMgdGhlIG1pbm9yXG4gKiAtIFBhdGNoIGFuZCBidWlsZCB0YWcgZGlmZmVyZW5jZXMgYXJlIG5vdCBjb25zaWRlcmVkIGF0IHRoaXMgdGltZVxuICpcbiAqIEBwYXJhbSBvd25WZXJzaW9uIHZlcnNpb24gd2hpY2ggc2hvdWxkIGJlIGNoZWNrZWQgYWdhaW5zdFxuICovXG5mdW5jdGlvbiBfbWFrZUNvbXBhdGliaWxpdHlDaGVjayhvd25WZXJzaW9uKSB7XG4gICAgdmFyIGFjY2VwdGVkVmVyc2lvbnMgPSBuZXcgU2V0KFtvd25WZXJzaW9uXSk7XG4gICAgdmFyIHJlamVjdGVkVmVyc2lvbnMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIG15VmVyc2lvbk1hdGNoID0gb3duVmVyc2lvbi5tYXRjaChyZSk7XG4gICAgaWYgKCFteVZlcnNpb25NYXRjaCkge1xuICAgICAgICAvLyB3ZSBjYW5ub3QgZ3VhcmFudGVlIGNvbXBhdGliaWxpdHkgc28gd2UgYWx3YXlzIHJldHVybiBub29wXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBmYWxzZTsgfTtcbiAgICB9XG4gICAgdmFyIG93blZlcnNpb25QYXJzZWQgPSB7XG4gICAgICAgIG1ham9yOiArbXlWZXJzaW9uTWF0Y2hbMV0sXG4gICAgICAgIG1pbm9yOiArbXlWZXJzaW9uTWF0Y2hbMl0sXG4gICAgICAgIHBhdGNoOiArbXlWZXJzaW9uTWF0Y2hbM10sXG4gICAgICAgIHByZXJlbGVhc2U6IG15VmVyc2lvbk1hdGNoWzRdLFxuICAgIH07XG4gICAgLy8gaWYgb3duVmVyc2lvbiBoYXMgYSBwcmVyZWxlYXNlIHRhZywgdmVyc2lvbnMgbXVzdCBtYXRjaCBleGFjdGx5XG4gICAgaWYgKG93blZlcnNpb25QYXJzZWQucHJlcmVsZWFzZSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBpc0V4YWN0bWF0Y2goZ2xvYmFsVmVyc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbFZlcnNpb24gPT09IG93blZlcnNpb247XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9yZWplY3Qodikge1xuICAgICAgICByZWplY3RlZFZlcnNpb25zLmFkZCh2KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBfYWNjZXB0KHYpIHtcbiAgICAgICAgYWNjZXB0ZWRWZXJzaW9ucy5hZGQodik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gaXNDb21wYXRpYmxlKGdsb2JhbFZlcnNpb24pIHtcbiAgICAgICAgaWYgKGFjY2VwdGVkVmVyc2lvbnMuaGFzKGdsb2JhbFZlcnNpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVqZWN0ZWRWZXJzaW9ucy5oYXMoZ2xvYmFsVmVyc2lvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZ2xvYmFsVmVyc2lvbk1hdGNoID0gZ2xvYmFsVmVyc2lvbi5tYXRjaChyZSk7XG4gICAgICAgIGlmICghZ2xvYmFsVmVyc2lvbk1hdGNoKSB7XG4gICAgICAgICAgICAvLyBjYW5ub3QgcGFyc2Ugb3RoZXIgdmVyc2lvblxuICAgICAgICAgICAgLy8gd2UgY2Fubm90IGd1YXJhbnRlZSBjb21wYXRpYmlsaXR5IHNvIHdlIGFsd2F5cyBub29wXG4gICAgICAgICAgICByZXR1cm4gX3JlamVjdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZ2xvYmFsVmVyc2lvblBhcnNlZCA9IHtcbiAgICAgICAgICAgIG1ham9yOiArZ2xvYmFsVmVyc2lvbk1hdGNoWzFdLFxuICAgICAgICAgICAgbWlub3I6ICtnbG9iYWxWZXJzaW9uTWF0Y2hbMl0sXG4gICAgICAgICAgICBwYXRjaDogK2dsb2JhbFZlcnNpb25NYXRjaFszXSxcbiAgICAgICAgICAgIHByZXJlbGVhc2U6IGdsb2JhbFZlcnNpb25NYXRjaFs0XSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gaWYgZ2xvYmFsVmVyc2lvbiBoYXMgYSBwcmVyZWxlYXNlIHRhZywgdmVyc2lvbnMgbXVzdCBtYXRjaCBleGFjdGx5XG4gICAgICAgIGlmIChnbG9iYWxWZXJzaW9uUGFyc2VkLnByZXJlbGVhc2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWFqb3IgdmVyc2lvbnMgbXVzdCBtYXRjaFxuICAgICAgICBpZiAob3duVmVyc2lvblBhcnNlZC5tYWpvciAhPT0gZ2xvYmFsVmVyc2lvblBhcnNlZC5tYWpvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG93blZlcnNpb25QYXJzZWQubWFqb3IgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLm1pbm9yID09PSBnbG9iYWxWZXJzaW9uUGFyc2VkLm1pbm9yICYmXG4gICAgICAgICAgICAgICAgb3duVmVyc2lvblBhcnNlZC5wYXRjaCA8PSBnbG9iYWxWZXJzaW9uUGFyc2VkLnBhdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9hY2NlcHQoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX3JlamVjdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3duVmVyc2lvblBhcnNlZC5taW5vciA8PSBnbG9iYWxWZXJzaW9uUGFyc2VkLm1pbm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gX2FjY2VwdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3JlamVjdChnbG9iYWxWZXJzaW9uKTtcbiAgICB9O1xufVxuLyoqXG4gKiBUZXN0IGFuIEFQSSB2ZXJzaW9uIHRvIHNlZSBpZiBpdCBpcyBjb21wYXRpYmxlIHdpdGggdGhpcyBBUEkuXG4gKlxuICogLSBFeGFjdCBtYXRjaCBpcyBhbHdheXMgY29tcGF0aWJsZVxuICogLSBNYWpvciB2ZXJzaW9ucyBtdXN0IG1hdGNoIGV4YWN0bHlcbiAqICAgIC0gMS54IHBhY2thZ2UgY2Fubm90IHVzZSBnbG9iYWwgMi54IHBhY2thZ2VcbiAqICAgIC0gMi54IHBhY2thZ2UgY2Fubm90IHVzZSBnbG9iYWwgMS54IHBhY2thZ2VcbiAqIC0gVGhlIG1pbm9yIHZlcnNpb24gb2YgdGhlIEFQSSBtb2R1bGUgcmVxdWVzdGluZyBhY2Nlc3MgdG8gdGhlIGdsb2JhbCBBUEkgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG1pbm9yIHZlcnNpb24gb2YgdGhpcyBBUElcbiAqICAgIC0gMS4zIHBhY2thZ2UgbWF5IHVzZSAxLjQgZ2xvYmFsIGJlY2F1c2UgdGhlIGxhdGVyIGdsb2JhbCBjb250YWlucyBhbGwgZnVuY3Rpb25zIDEuMyBleHBlY3RzXG4gKiAgICAtIDEuNCBwYWNrYWdlIG1heSBOT1QgdXNlIDEuMyBnbG9iYWwgYmVjYXVzZSBpdCBtYXkgdHJ5IHRvIGNhbGwgZnVuY3Rpb25zIHdoaWNoIGRvbid0IGV4aXN0IG9uIDEuM1xuICogLSBJZiB0aGUgbWFqb3IgdmVyc2lvbiBpcyAwLCB0aGUgbWlub3IgdmVyc2lvbiBpcyB0cmVhdGVkIGFzIHRoZSBtYWpvciBhbmQgdGhlIHBhdGNoIGlzIHRyZWF0ZWQgYXMgdGhlIG1pbm9yXG4gKiAtIFBhdGNoIGFuZCBidWlsZCB0YWcgZGlmZmVyZW5jZXMgYXJlIG5vdCBjb25zaWRlcmVkIGF0IHRoaXMgdGltZVxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIHZlcnNpb24gb2YgdGhlIEFQSSByZXF1ZXN0aW5nIGFuIGluc3RhbmNlIG9mIHRoZSBnbG9iYWwgQVBJXG4gKi9cbnZhciBpc0NvbXBhdGlibGUgPSBfbWFrZUNvbXBhdGliaWxpdHlDaGVjayhWRVJTSU9OKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBtYWpvciA9IFZFUlNJT04uc3BsaXQoJy4nKVswXTtcbnZhciBHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZID0gU3ltYm9sLmZvcihcIm9wZW50ZWxlbWV0cnkuanMuYXBpLlwiICsgbWFqb3IpO1xudmFyIF9nbG9iYWwgPSBfZ2xvYmFsVGhpcztcbmZ1bmN0aW9uIHJlZ2lzdGVyR2xvYmFsKHR5cGUsIGluc3RhbmNlLCBkaWFnLCBhbGxvd092ZXJyaWRlKSB7XG4gICAgdmFyIF9hO1xuICAgIGlmIChhbGxvd092ZXJyaWRlID09PSB2b2lkIDApIHsgYWxsb3dPdmVycmlkZSA9IGZhbHNlOyB9XG4gICAgdmFyIGFwaSA9IChfZ2xvYmFsW0dMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVldID0gKF9hID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge1xuICAgICAgICB2ZXJzaW9uOiBWRVJTSU9OLFxuICAgIH0pO1xuICAgIGlmICghYWxsb3dPdmVycmlkZSAmJiBhcGlbdHlwZV0pIHtcbiAgICAgICAgLy8gYWxyZWFkeSByZWdpc3RlcmVkIGFuIEFQSSBvZiB0aGlzIHR5cGVcbiAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcIkBvcGVudGVsZW1ldHJ5L2FwaTogQXR0ZW1wdGVkIGR1cGxpY2F0ZSByZWdpc3RyYXRpb24gb2YgQVBJOiBcIiArIHR5cGUpO1xuICAgICAgICBkaWFnLmVycm9yKGVyci5zdGFjayB8fCBlcnIubWVzc2FnZSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGFwaS52ZXJzaW9uICE9PSBWRVJTSU9OKSB7XG4gICAgICAgIC8vIEFsbCByZWdpc3RlcmVkIEFQSXMgbXVzdCBiZSBvZiB0aGUgc2FtZSB2ZXJzaW9uIGV4YWN0bHlcbiAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcIkBvcGVudGVsZW1ldHJ5L2FwaTogUmVnaXN0cmF0aW9uIG9mIHZlcnNpb24gdlwiICsgYXBpLnZlcnNpb24gKyBcIiBmb3IgXCIgKyB0eXBlICsgXCIgZG9lcyBub3QgbWF0Y2ggcHJldmlvdXNseSByZWdpc3RlcmVkIEFQSSB2XCIgKyBWRVJTSU9OKTtcbiAgICAgICAgZGlhZy5lcnJvcihlcnIuc3RhY2sgfHwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGFwaVt0eXBlXSA9IGluc3RhbmNlO1xuICAgIGRpYWcuZGVidWcoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdGVyZWQgYSBnbG9iYWwgZm9yIFwiICsgdHlwZSArIFwiIHZcIiArIFZFUlNJT04gKyBcIi5cIik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBnZXRHbG9iYWwodHlwZSkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgdmFyIGdsb2JhbFZlcnNpb24gPSAoX2EgPSBfZ2xvYmFsW0dMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVldKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmVyc2lvbjtcbiAgICBpZiAoIWdsb2JhbFZlcnNpb24gfHwgIWlzQ29tcGF0aWJsZShnbG9iYWxWZXJzaW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiAoX2IgPSBfZ2xvYmFsW0dMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVldKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbdHlwZV07XG59XG5mdW5jdGlvbiB1bnJlZ2lzdGVyR2xvYmFsKHR5cGUsIGRpYWcpIHtcbiAgICBkaWFnLmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBVbnJlZ2lzdGVyaW5nIGEgZ2xvYmFsIGZvciBcIiArIHR5cGUgKyBcIiB2XCIgKyBWRVJTSU9OICsgXCIuXCIpO1xuICAgIHZhciBhcGkgPSBfZ2xvYmFsW0dMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVldO1xuICAgIGlmIChhcGkpIHtcbiAgICAgICAgZGVsZXRlIGFwaVt0eXBlXTtcbiAgICB9XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19yZWFkJDMgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSQzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG4vKipcbiAqIENvbXBvbmVudCBMb2dnZXIgd2hpY2ggaXMgbWVhbnQgdG8gYmUgdXNlZCBhcyBwYXJ0IG9mIGFueSBjb21wb25lbnQgd2hpY2hcbiAqIHdpbGwgYWRkIGF1dG9tYXRpY2FsbHkgYWRkaXRpb25hbCBuYW1lc3BhY2UgaW4gZnJvbnQgb2YgdGhlIGxvZyBtZXNzYWdlLlxuICogSXQgd2lsbCB0aGVuIGZvcndhcmQgYWxsIG1lc3NhZ2UgdG8gZ2xvYmFsIGRpYWcgbG9nZ2VyXG4gKiBAZXhhbXBsZVxuICogY29uc3QgY0xvZ2dlciA9IGRpYWcuY3JlYXRlQ29tcG9uZW50TG9nZ2VyKHsgbmFtZXNwYWNlOiAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWh0dHAnIH0pO1xuICogY0xvZ2dlci5kZWJ1ZygndGVzdCcpO1xuICogLy8gQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWh0dHAgdGVzdFxuICovXG52YXIgRGlhZ0NvbXBvbmVudExvZ2dlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEaWFnQ29tcG9uZW50TG9nZ2VyKHByb3BzKSB7XG4gICAgICAgIHRoaXMuX25hbWVzcGFjZSA9IHByb3BzLm5hbWVzcGFjZSB8fCAnRGlhZ0NvbXBvbmVudExvZ2dlcic7XG4gICAgfVxuICAgIERpYWdDb21wb25lbnRMb2dnZXIucHJvdG90eXBlLmRlYnVnID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgnZGVidWcnLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvZ1Byb3h5KCdlcnJvcicsIHRoaXMuX25hbWVzcGFjZSwgYXJncyk7XG4gICAgfTtcbiAgICBEaWFnQ29tcG9uZW50TG9nZ2VyLnByb3RvdHlwZS5pbmZvID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgnaW5mbycsIHRoaXMuX25hbWVzcGFjZSwgYXJncyk7XG4gICAgfTtcbiAgICBEaWFnQ29tcG9uZW50TG9nZ2VyLnByb3RvdHlwZS53YXJuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgnd2FybicsIHRoaXMuX25hbWVzcGFjZSwgYXJncyk7XG4gICAgfTtcbiAgICBEaWFnQ29tcG9uZW50TG9nZ2VyLnByb3RvdHlwZS52ZXJib3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgndmVyYm9zZScsIHRoaXMuX25hbWVzcGFjZSwgYXJncyk7XG4gICAgfTtcbiAgICByZXR1cm4gRGlhZ0NvbXBvbmVudExvZ2dlcjtcbn0oKSk7XG5mdW5jdGlvbiBsb2dQcm94eShmdW5jTmFtZSwgbmFtZXNwYWNlLCBhcmdzKSB7XG4gICAgdmFyIGxvZ2dlciA9IGdldEdsb2JhbCgnZGlhZycpO1xuICAgIC8vIHNob3J0Y3V0IGlmIGxvZ2dlciBub3Qgc2V0XG4gICAgaWYgKCFsb2dnZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcmdzLnVuc2hpZnQobmFtZXNwYWNlKTtcbiAgICByZXR1cm4gbG9nZ2VyW2Z1bmNOYW1lXS5hcHBseShsb2dnZXIsIF9fc3ByZWFkQXJyYXkkMyhbXSwgX19yZWFkJDMoYXJncyksIGZhbHNlKSk7XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGF2YWlsYWJsZSBpbnRlcm5hbCBsb2dnaW5nIGxldmVscyBmb3IgdGhlIGRpYWdub3N0aWMgbG9nZ2VyLCB0aGUgbnVtZXJpYyB2YWx1ZXNcbiAqIG9mIHRoZSBsZXZlbHMgYXJlIGRlZmluZWQgdG8gbWF0Y2ggdGhlIG9yaWdpbmFsIHZhbHVlcyBmcm9tIHRoZSBpbml0aWFsIExvZ0xldmVsIHRvIGF2b2lkXG4gKiBjb21wYXRpYmlsaXR5L21pZ3JhdGlvbiBpc3N1ZXMgZm9yIGFueSBpbXBsZW1lbnRhdGlvbiB0aGF0IGFzc3VtZSB0aGUgbnVtZXJpYyBvcmRlcmluZy5cbiAqL1xudmFyIERpYWdMb2dMZXZlbDtcbihmdW5jdGlvbiAoRGlhZ0xvZ0xldmVsKSB7XG4gICAgLyoqIERpYWdub3N0aWMgTG9nZ2luZyBsZXZlbCBzZXR0aW5nIHRvIGRpc2FibGUgYWxsIGxvZ2dpbmcgKGV4Y2VwdCBhbmQgZm9yY2VkIGxvZ3MpICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIk5PTkVcIl0gPSAwXSA9IFwiTk9ORVwiO1xuICAgIC8qKiBJZGVudGlmaWVzIGFuIGVycm9yIHNjZW5hcmlvICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIkVSUk9SXCJdID0gMzBdID0gXCJFUlJPUlwiO1xuICAgIC8qKiBJZGVudGlmaWVzIGEgd2FybmluZyBzY2VuYXJpbyAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJXQVJOXCJdID0gNTBdID0gXCJXQVJOXCI7XG4gICAgLyoqIEdlbmVyYWwgaW5mb3JtYXRpb25hbCBsb2cgbWVzc2FnZSAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJJTkZPXCJdID0gNjBdID0gXCJJTkZPXCI7XG4gICAgLyoqIEdlbmVyYWwgZGVidWcgbG9nIG1lc3NhZ2UgKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiREVCVUdcIl0gPSA3MF0gPSBcIkRFQlVHXCI7XG4gICAgLyoqXG4gICAgICogRGV0YWlsZWQgdHJhY2UgbGV2ZWwgbG9nZ2luZyBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkZXZlbG9wbWVudCwgc2hvdWxkIG9ubHkgYmUgc2V0XG4gICAgICogaW4gYSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC5cbiAgICAgKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiVkVSQk9TRVwiXSA9IDgwXSA9IFwiVkVSQk9TRVwiO1xuICAgIC8qKiBVc2VkIHRvIHNldCB0aGUgbG9nZ2luZyBsZXZlbCB0byBpbmNsdWRlIGFsbCBsb2dnaW5nICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIkFMTFwiXSA9IDk5OTldID0gXCJBTExcIjtcbn0pKERpYWdMb2dMZXZlbCB8fCAoRGlhZ0xvZ0xldmVsID0ge30pKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlcihtYXhMZXZlbCwgbG9nZ2VyKSB7XG4gICAgaWYgKG1heExldmVsIDwgRGlhZ0xvZ0xldmVsLk5PTkUpIHtcbiAgICAgICAgbWF4TGV2ZWwgPSBEaWFnTG9nTGV2ZWwuTk9ORTtcbiAgICB9XG4gICAgZWxzZSBpZiAobWF4TGV2ZWwgPiBEaWFnTG9nTGV2ZWwuQUxMKSB7XG4gICAgICAgIG1heExldmVsID0gRGlhZ0xvZ0xldmVsLkFMTDtcbiAgICB9XG4gICAgLy8gSW4gY2FzZSB0aGUgbG9nZ2VyIGlzIG51bGwgb3IgdW5kZWZpbmVkXG4gICAgbG9nZ2VyID0gbG9nZ2VyIHx8IHt9O1xuICAgIGZ1bmN0aW9uIF9maWx0ZXJGdW5jKGZ1bmNOYW1lLCB0aGVMZXZlbCkge1xuICAgICAgICB2YXIgdGhlRnVuYyA9IGxvZ2dlcltmdW5jTmFtZV07XG4gICAgICAgIGlmICh0eXBlb2YgdGhlRnVuYyA9PT0gJ2Z1bmN0aW9uJyAmJiBtYXhMZXZlbCA+PSB0aGVMZXZlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoZUZ1bmMuYmluZChsb2dnZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGVycm9yOiBfZmlsdGVyRnVuYygnZXJyb3InLCBEaWFnTG9nTGV2ZWwuRVJST1IpLFxuICAgICAgICB3YXJuOiBfZmlsdGVyRnVuYygnd2FybicsIERpYWdMb2dMZXZlbC5XQVJOKSxcbiAgICAgICAgaW5mbzogX2ZpbHRlckZ1bmMoJ2luZm8nLCBEaWFnTG9nTGV2ZWwuSU5GTyksXG4gICAgICAgIGRlYnVnOiBfZmlsdGVyRnVuYygnZGVidWcnLCBEaWFnTG9nTGV2ZWwuREVCVUcpLFxuICAgICAgICB2ZXJib3NlOiBfZmlsdGVyRnVuYygndmVyYm9zZScsIERpYWdMb2dMZXZlbC5WRVJCT1NFKSxcbiAgICB9O1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCQyID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkkMiA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xudmFyIEFQSV9OQU1FJDIgPSAnZGlhZyc7XG4vKipcbiAqIFNpbmdsZXRvbiBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIE9wZW5UZWxlbWV0cnkgaW50ZXJuYWxcbiAqIGRpYWdub3N0aWMgQVBJXG4gKi9cbnZhciBEaWFnQVBJID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIFByaXZhdGUgaW50ZXJuYWwgY29uc3RydWN0b3JcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIERpYWdBUEkoKSB7XG4gICAgICAgIGZ1bmN0aW9uIF9sb2dQcm94eShmdW5jTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGxvZ2dlciA9IGdldEdsb2JhbCgnZGlhZycpO1xuICAgICAgICAgICAgICAgIC8vIHNob3J0Y3V0IGlmIGxvZ2dlciBub3Qgc2V0XG4gICAgICAgICAgICAgICAgaWYgKCFsb2dnZXIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9nZ2VyW2Z1bmNOYW1lXS5hcHBseShsb2dnZXIsIF9fc3ByZWFkQXJyYXkkMihbXSwgX19yZWFkJDIoYXJncyksIGZhbHNlKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFVzaW5nIHNlbGYgbG9jYWwgdmFyaWFibGUgZm9yIG1pbmlmaWNhdGlvbiBwdXJwb3NlcyBhcyAndGhpcycgY2Fubm90IGJlIG1pbmlmaWVkXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgLy8gRGlhZ0FQSSBzcGVjaWZpYyBmdW5jdGlvbnNcbiAgICAgICAgdmFyIHNldExvZ2dlciA9IGZ1bmN0aW9uIChsb2dnZXIsIG9wdGlvbnNPckxvZ0xldmVsKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgICAgIGlmIChvcHRpb25zT3JMb2dMZXZlbCA9PT0gdm9pZCAwKSB7IG9wdGlvbnNPckxvZ0xldmVsID0geyBsb2dMZXZlbDogRGlhZ0xvZ0xldmVsLklORk8gfTsgfVxuICAgICAgICAgICAgaWYgKGxvZ2dlciA9PT0gc2VsZikge1xuICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzbid0IG11Y2ggd2UgY2FuIGRvIGhlcmUuXG4gICAgICAgICAgICAgICAgLy8gTG9nZ2luZyB0byB0aGUgY29uc29sZSBtaWdodCBicmVhayB0aGUgdXNlciBhcHBsaWNhdGlvbi5cbiAgICAgICAgICAgICAgICAvLyBUcnkgdG8gbG9nIHRvIHNlbGYuIElmIGEgbG9nZ2VyIHdhcyBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgaXQgd2lsbCByZWNlaXZlIHRoZSBsb2cuXG4gICAgICAgICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignQ2Fubm90IHVzZSBkaWFnIGFzIHRoZSBsb2dnZXIgZm9yIGl0c2VsZi4gUGxlYXNlIHVzZSBhIERpYWdMb2dnZXIgaW1wbGVtZW50YXRpb24gbGlrZSBDb25zb2xlRGlhZ0xvZ2dlciBvciBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbicpO1xuICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoKF9hID0gZXJyLnN0YWNrKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBlcnIubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zT3JMb2dMZXZlbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zT3JMb2dMZXZlbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nTGV2ZWw6IG9wdGlvbnNPckxvZ0xldmVsLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgb2xkTG9nZ2VyID0gZ2V0R2xvYmFsKCdkaWFnJyk7XG4gICAgICAgICAgICB2YXIgbmV3TG9nZ2VyID0gY3JlYXRlTG9nTGV2ZWxEaWFnTG9nZ2VyKChfYiA9IG9wdGlvbnNPckxvZ0xldmVsLmxvZ0xldmVsKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBEaWFnTG9nTGV2ZWwuSU5GTywgbG9nZ2VyKTtcbiAgICAgICAgICAgIC8vIFRoZXJlIGFscmVhZHkgaXMgYW4gbG9nZ2VyIHJlZ2lzdGVyZWQuIFdlJ2xsIGxldCBpdCBrbm93IGJlZm9yZSBvdmVyd3JpdGluZyBpdC5cbiAgICAgICAgICAgIGlmIChvbGRMb2dnZXIgJiYgIW9wdGlvbnNPckxvZ0xldmVsLnN1cHByZXNzT3ZlcnJpZGVNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YWNrID0gKF9jID0gbmV3IEVycm9yKCkuc3RhY2spICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6ICc8ZmFpbGVkIHRvIGdlbmVyYXRlIHN0YWNrdHJhY2U+JztcbiAgICAgICAgICAgICAgICBvbGRMb2dnZXIud2FybihcIkN1cnJlbnQgbG9nZ2VyIHdpbGwgYmUgb3ZlcndyaXR0ZW4gZnJvbSBcIiArIHN0YWNrKTtcbiAgICAgICAgICAgICAgICBuZXdMb2dnZXIud2FybihcIkN1cnJlbnQgbG9nZ2VyIHdpbGwgb3ZlcndyaXRlIG9uZSBhbHJlYWR5IHJlZ2lzdGVyZWQgZnJvbSBcIiArIHN0YWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZWdpc3Rlckdsb2JhbCgnZGlhZycsIG5ld0xvZ2dlciwgc2VsZiwgdHJ1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIHNlbGYuc2V0TG9nZ2VyID0gc2V0TG9nZ2VyO1xuICAgICAgICBzZWxmLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB1bnJlZ2lzdGVyR2xvYmFsKEFQSV9OQU1FJDIsIHNlbGYpO1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLmNyZWF0ZUNvbXBvbmVudExvZ2dlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERpYWdDb21wb25lbnRMb2dnZXIob3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgICAgIHNlbGYudmVyYm9zZSA9IF9sb2dQcm94eSgndmVyYm9zZScpO1xuICAgICAgICBzZWxmLmRlYnVnID0gX2xvZ1Byb3h5KCdkZWJ1ZycpO1xuICAgICAgICBzZWxmLmluZm8gPSBfbG9nUHJveHkoJ2luZm8nKTtcbiAgICAgICAgc2VsZi53YXJuID0gX2xvZ1Byb3h5KCd3YXJuJyk7XG4gICAgICAgIHNlbGYuZXJyb3IgPSBfbG9nUHJveHkoJ2Vycm9yJyk7XG4gICAgfVxuICAgIC8qKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRGlhZ0FQSSBBUEkgKi9cbiAgICBEaWFnQVBJLmluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBEaWFnQVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH07XG4gICAgcmV0dXJuIERpYWdBUEk7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqIEdldCBhIGtleSB0byB1bmlxdWVseSBpZGVudGlmeSBhIGNvbnRleHQgdmFsdWUgKi9cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHRLZXkoZGVzY3JpcHRpb24pIHtcbiAgICAvLyBUaGUgc3BlY2lmaWNhdGlvbiBzdGF0ZXMgdGhhdCBmb3IgdGhlIHNhbWUgaW5wdXQsIG11bHRpcGxlIGNhbGxzIHNob3VsZFxuICAgIC8vIHJldHVybiBkaWZmZXJlbnQga2V5cy4gRHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhlIEpTIGRlcGVuZGVuY3kgbWFuYWdlbWVudFxuICAgIC8vIHN5c3RlbSwgdGhpcyBjcmVhdGVzIHByb2JsZW1zIHdoZXJlIG11bHRpcGxlIHZlcnNpb25zIG9mIHNvbWUgcGFja2FnZVxuICAgIC8vIGNvdWxkIGhvbGQgZGlmZmVyZW50IGtleXMgZm9yIHRoZSBzYW1lIHByb3BlcnR5LlxuICAgIC8vXG4gICAgLy8gVGhlcmVmb3JlLCB3ZSB1c2UgU3ltYm9sLmZvciB3aGljaCByZXR1cm5zIHRoZSBzYW1lIGtleSBmb3IgdGhlIHNhbWUgaW5wdXQuXG4gICAgcmV0dXJuIFN5bWJvbC5mb3IoZGVzY3JpcHRpb24pO1xufVxudmFyIEJhc2VDb250ZXh0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdCBhIG5ldyBjb250ZXh0IHdoaWNoIGluaGVyaXRzIHZhbHVlcyBmcm9tIGFuIG9wdGlvbmFsIHBhcmVudCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmVudENvbnRleHQgYSBjb250ZXh0IGZyb20gd2hpY2ggdG8gaW5oZXJpdCB2YWx1ZXNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBCYXNlQ29udGV4dChwYXJlbnRDb250ZXh0KSB7XG4gICAgICAgIC8vIGZvciBtaW5pZmljYXRpb25cbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBzZWxmLl9jdXJyZW50Q29udGV4dCA9IHBhcmVudENvbnRleHQgPyBuZXcgTWFwKHBhcmVudENvbnRleHQpIDogbmV3IE1hcCgpO1xuICAgICAgICBzZWxmLmdldFZhbHVlID0gZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gc2VsZi5fY3VycmVudENvbnRleHQuZ2V0KGtleSk7IH07XG4gICAgICAgIHNlbGYuc2V0VmFsdWUgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgQmFzZUNvbnRleHQoc2VsZi5fY3VycmVudENvbnRleHQpO1xuICAgICAgICAgICAgY29udGV4dC5fY3VycmVudENvbnRleHQuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIH07XG4gICAgICAgIHNlbGYuZGVsZXRlVmFsdWUgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBCYXNlQ29udGV4dChzZWxmLl9jdXJyZW50Q29udGV4dCk7XG4gICAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50Q29udGV4dC5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gQmFzZUNvbnRleHQ7XG59KCkpO1xuLyoqIFRoZSByb290IGNvbnRleHQgaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXJlbnQgY29udGV4dCB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBjb250ZXh0ICovXG52YXIgUk9PVF9DT05URVhUID0gbmV3IEJhc2VDb250ZXh0KCk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19yZWFkJDEgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSQxID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG52YXIgTm9vcENvbnRleHRNYW5hZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BDb250ZXh0TWFuYWdlcigpIHtcbiAgICB9XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS5hY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBST09UX0NPTlRFWFQ7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dE1hbmFnZXIucHJvdG90eXBlLndpdGggPSBmdW5jdGlvbiAoX2NvbnRleHQsIGZuLCB0aGlzQXJnKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMzsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gM10gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmbi5jYWxsLmFwcGx5KGZuLCBfX3NwcmVhZEFycmF5JDEoW3RoaXNBcmddLCBfX3JlYWQkMShhcmdzKSwgZmFsc2UpKTtcbiAgICB9O1xuICAgIE5vb3BDb250ZXh0TWFuYWdlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChfY29udGV4dCwgdGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dE1hbmFnZXIucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dE1hbmFnZXIucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIE5vb3BDb250ZXh0TWFuYWdlcjtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19yZWFkID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufTtcbnZhciBBUElfTkFNRSQxID0gJ2NvbnRleHQnO1xudmFyIE5PT1BfQ09OVEVYVF9NQU5BR0VSID0gbmV3IE5vb3BDb250ZXh0TWFuYWdlcigpO1xuLyoqXG4gKiBTaW5nbGV0b24gb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSBPcGVuVGVsZW1ldHJ5IENvbnRleHQgQVBJXG4gKi9cbnZhciBDb250ZXh0QVBJID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKiBFbXB0eSBwcml2YXRlIGNvbnN0cnVjdG9yIHByZXZlbnRzIGVuZCB1c2VycyBmcm9tIGNvbnN0cnVjdGluZyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgQVBJICovXG4gICAgZnVuY3Rpb24gQ29udGV4dEFQSSgpIHtcbiAgICB9XG4gICAgLyoqIEdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBDb250ZXh0IEFQSSAqL1xuICAgIENvbnRleHRBUEkuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IENvbnRleHRBUEkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGN1cnJlbnQgY29udGV4dCBtYW5hZ2VyLlxuICAgICAqXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgY29udGV4dCBtYW5hZ2VyIHdhcyBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCwgZWxzZSBmYWxzZVxuICAgICAqL1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLnNldEdsb2JhbENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24gKGNvbnRleHRNYW5hZ2VyKSB7XG4gICAgICAgIHJldHVybiByZWdpc3Rlckdsb2JhbChBUElfTkFNRSQxLCBjb250ZXh0TWFuYWdlciwgRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEdldCB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb250ZXh0XG4gICAgICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5hY3RpdmUoKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEV4ZWN1dGUgYSBmdW5jdGlvbiB3aXRoIGFuIGFjdGl2ZSBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIGJlIGFjdGl2ZSBkdXJpbmcgZnVuY3Rpb24gZXhlY3V0aW9uXG4gICAgICogQHBhcmFtIGZuIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgaW4gYSBjb250ZXh0XG4gICAgICogQHBhcmFtIHRoaXNBcmcgb3B0aW9uYWwgcmVjZWl2ZXIgdG8gYmUgdXNlZCBmb3IgY2FsbGluZyBmblxuICAgICAqIEBwYXJhbSBhcmdzIG9wdGlvbmFsIGFyZ3VtZW50cyBmb3J3YXJkZWQgdG8gZm5cbiAgICAgKi9cbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24gKGNvbnRleHQsIGZuLCB0aGlzQXJnKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAzOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAzXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkpLndpdGguYXBwbHkoX2EsIF9fc3ByZWFkQXJyYXkoW2NvbnRleHQsIGZuLCB0aGlzQXJnXSwgX19yZWFkKGFyZ3MpLCBmYWxzZSkpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQmluZCBhIGNvbnRleHQgdG8gYSB0YXJnZXQgZnVuY3Rpb24gb3IgZXZlbnQgZW1pdHRlclxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBiaW5kIHRvIHRoZSBldmVudCBlbWl0dGVyIG9yIGZ1bmN0aW9uLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb250ZXh0XG4gICAgICogQHBhcmFtIHRhcmdldCBmdW5jdGlvbiBvciBldmVudCBlbWl0dGVyIHRvIGJpbmRcbiAgICAgKi9cbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGNvbnRleHQsIHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5iaW5kKGNvbnRleHQsIHRhcmdldCk7XG4gICAgfTtcbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS5fZ2V0Q29udGV4dE1hbmFnZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRHbG9iYWwoQVBJX05BTUUkMSkgfHwgTk9PUF9DT05URVhUX01BTkFHRVI7XG4gICAgfTtcbiAgICAvKiogRGlzYWJsZSBhbmQgcmVtb3ZlIHRoZSBnbG9iYWwgY29udGV4dCBtYW5hZ2VyICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5kaXNhYmxlKCk7XG4gICAgICAgIHVucmVnaXN0ZXJHbG9iYWwoQVBJX05BTUUkMSwgRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICB9O1xuICAgIHJldHVybiBDb250ZXh0QVBJO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBUcmFjZUZsYWdzO1xuKGZ1bmN0aW9uIChUcmFjZUZsYWdzKSB7XG4gICAgLyoqIFJlcHJlc2VudHMgbm8gZmxhZyBzZXQuICovXG4gICAgVHJhY2VGbGFnc1tUcmFjZUZsYWdzW1wiTk9ORVwiXSA9IDBdID0gXCJOT05FXCI7XG4gICAgLyoqIEJpdCB0byByZXByZXNlbnQgd2hldGhlciB0cmFjZSBpcyBzYW1wbGVkIGluIHRyYWNlIGZsYWdzLiAqL1xuICAgIFRyYWNlRmxhZ3NbVHJhY2VGbGFnc1tcIlNBTVBMRURcIl0gPSAxXSA9IFwiU0FNUExFRFwiO1xufSkoVHJhY2VGbGFncyB8fCAoVHJhY2VGbGFncyA9IHt9KSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgSU5WQUxJRF9TUEFOSUQgPSAnMDAwMDAwMDAwMDAwMDAwMCc7XG52YXIgSU5WQUxJRF9UUkFDRUlEID0gJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJztcbnZhciBJTlZBTElEX1NQQU5fQ09OVEVYVCA9IHtcbiAgICB0cmFjZUlkOiBJTlZBTElEX1RSQUNFSUQsXG4gICAgc3BhbklkOiBJTlZBTElEX1NQQU5JRCxcbiAgICB0cmFjZUZsYWdzOiBUcmFjZUZsYWdzLk5PTkUsXG59O1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBUaGUgTm9uUmVjb3JkaW5nU3BhbiBpcyB0aGUgZGVmYXVsdCB7QGxpbmsgU3Bhbn0gdGhhdCBpcyB1c2VkIHdoZW4gbm8gU3BhblxuICogaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlLiBBbGwgb3BlcmF0aW9ucyBhcmUgbm8tb3AgaW5jbHVkaW5nIGNvbnRleHRcbiAqIHByb3BhZ2F0aW9uLlxuICovXG52YXIgTm9uUmVjb3JkaW5nU3BhbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb25SZWNvcmRpbmdTcGFuKF9zcGFuQ29udGV4dCkge1xuICAgICAgICBpZiAoX3NwYW5Db250ZXh0ID09PSB2b2lkIDApIHsgX3NwYW5Db250ZXh0ID0gSU5WQUxJRF9TUEFOX0NPTlRFWFQ7IH1cbiAgICAgICAgdGhpcy5fc3BhbkNvbnRleHQgPSBfc3BhbkNvbnRleHQ7XG4gICAgfVxuICAgIC8vIFJldHVybnMgYSBTcGFuQ29udGV4dC5cbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5zcGFuQ29udGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NwYW5Db250ZXh0O1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoX2tleSwgX3ZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKF9hdHRyaWJ1dGVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5hZGRFdmVudCA9IGZ1bmN0aW9uIChfbmFtZSwgX2F0dHJpYnV0ZXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5hZGRMaW5rID0gZnVuY3Rpb24gKF9saW5rKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuYWRkTGlua3MgPSBmdW5jdGlvbiAoX2xpbmtzKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBOb25SZWNvcmRpbmdTcGFuLnByb3RvdHlwZS5zZXRTdGF0dXMgPSBmdW5jdGlvbiAoX3N0YXR1cykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUudXBkYXRlTmFtZSA9IGZ1bmN0aW9uIChfbmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKF9lbmRUaW1lKSB7IH07XG4gICAgLy8gaXNSZWNvcmRpbmcgYWx3YXlzIHJldHVybnMgZmFsc2UgZm9yIE5vblJlY29yZGluZ1NwYW4uXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuaXNSZWNvcmRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUucmVjb3JkRXhjZXB0aW9uID0gZnVuY3Rpb24gKF9leGNlcHRpb24sIF90aW1lKSB7IH07XG4gICAgcmV0dXJuIE5vblJlY29yZGluZ1NwYW47XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBzcGFuIGtleVxuICovXG52YXIgU1BBTl9LRVkgPSBjcmVhdGVDb250ZXh0S2V5KCdPcGVuVGVsZW1ldHJ5IENvbnRleHQgS2V5IFNQQU4nKTtcbi8qKlxuICogUmV0dXJuIHRoZSBzcGFuIGlmIG9uZSBleGlzdHNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIGdldCBzcGFuIGZyb21cbiAqL1xuZnVuY3Rpb24gZ2V0U3Bhbihjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQuZ2V0VmFsdWUoU1BBTl9LRVkpIHx8IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogR2V0cyB0aGUgc3BhbiBmcm9tIHRoZSBjdXJyZW50IGNvbnRleHQsIGlmIG9uZSBleGlzdHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFjdGl2ZVNwYW4oKSB7XG4gICAgcmV0dXJuIGdldFNwYW4oQ29udGV4dEFQSS5nZXRJbnN0YW5jZSgpLmFjdGl2ZSgpKTtcbn1cbi8qKlxuICogU2V0IHRoZSBzcGFuIG9uIGEgY29udGV4dFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gdXNlIGFzIHBhcmVudFxuICogQHBhcmFtIHNwYW4gc3BhbiB0byBzZXQgYWN0aXZlXG4gKi9cbmZ1bmN0aW9uIHNldFNwYW4oY29udGV4dCwgc3Bhbikge1xuICAgIHJldHVybiBjb250ZXh0LnNldFZhbHVlKFNQQU5fS0VZLCBzcGFuKTtcbn1cbi8qKlxuICogUmVtb3ZlIGN1cnJlbnQgc3BhbiBzdG9yZWQgaW4gdGhlIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIGRlbGV0ZSBzcGFuIGZyb21cbiAqL1xuZnVuY3Rpb24gZGVsZXRlU3Bhbihjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQuZGVsZXRlVmFsdWUoU1BBTl9LRVkpO1xufVxuLyoqXG4gKiBXcmFwIHNwYW4gY29udGV4dCBpbiBhIE5vb3BTcGFuIGFuZCBzZXQgYXMgc3BhbiBpbiBhIG5ld1xuICogY29udGV4dFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gc2V0IGFjdGl2ZSBzcGFuIG9uXG4gKiBAcGFyYW0gc3BhbkNvbnRleHQgc3BhbiBjb250ZXh0IHRvIGJlIHdyYXBwZWRcbiAqL1xuZnVuY3Rpb24gc2V0U3BhbkNvbnRleHQoY29udGV4dCwgc3BhbkNvbnRleHQpIHtcbiAgICByZXR1cm4gc2V0U3Bhbihjb250ZXh0LCBuZXcgTm9uUmVjb3JkaW5nU3BhbihzcGFuQ29udGV4dCkpO1xufVxuLyoqXG4gKiBHZXQgdGhlIHNwYW4gY29udGV4dCBvZiB0aGUgc3BhbiBpZiBpdCBleGlzdHMuXG4gKlxuICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBnZXQgdmFsdWVzIGZyb21cbiAqL1xuZnVuY3Rpb24gZ2V0U3BhbkNvbnRleHQoY29udGV4dCkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gZ2V0U3Bhbihjb250ZXh0KSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNwYW5Db250ZXh0KCk7XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgVkFMSURfVFJBQ0VJRF9SRUdFWCA9IC9eKFswLTlhLWZdezMyfSkkL2k7XG52YXIgVkFMSURfU1BBTklEX1JFR0VYID0gL15bMC05YS1mXXsxNn0kL2k7XG5mdW5jdGlvbiBpc1ZhbGlkVHJhY2VJZCh0cmFjZUlkKSB7XG4gICAgcmV0dXJuIFZBTElEX1RSQUNFSURfUkVHRVgudGVzdCh0cmFjZUlkKSAmJiB0cmFjZUlkICE9PSBJTlZBTElEX1RSQUNFSUQ7XG59XG5mdW5jdGlvbiBpc1ZhbGlkU3BhbklkKHNwYW5JZCkge1xuICAgIHJldHVybiBWQUxJRF9TUEFOSURfUkVHRVgudGVzdChzcGFuSWQpICYmIHNwYW5JZCAhPT0gSU5WQUxJRF9TUEFOSUQ7XG59XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHtAbGluayBTcGFuQ29udGV4dH0gaXMgdmFsaWQuXG4gKiBAcmV0dXJuIHRydWUgaWYgdGhpcyB7QGxpbmsgU3BhbkNvbnRleHR9IGlzIHZhbGlkLlxuICovXG5mdW5jdGlvbiBpc1NwYW5Db250ZXh0VmFsaWQoc3BhbkNvbnRleHQpIHtcbiAgICByZXR1cm4gKGlzVmFsaWRUcmFjZUlkKHNwYW5Db250ZXh0LnRyYWNlSWQpICYmIGlzVmFsaWRTcGFuSWQoc3BhbkNvbnRleHQuc3BhbklkKSk7XG59XG4vKipcbiAqIFdyYXAgdGhlIGdpdmVuIHtAbGluayBTcGFuQ29udGV4dH0gaW4gYSBuZXcgbm9uLXJlY29yZGluZyB7QGxpbmsgU3Bhbn1cbiAqXG4gKiBAcGFyYW0gc3BhbkNvbnRleHQgc3BhbiBjb250ZXh0IHRvIGJlIHdyYXBwZWRcbiAqIEByZXR1cm5zIGEgbmV3IG5vbi1yZWNvcmRpbmcge0BsaW5rIFNwYW59IHdpdGggdGhlIHByb3ZpZGVkIGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gd3JhcFNwYW5Db250ZXh0KHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuIG5ldyBOb25SZWNvcmRpbmdTcGFuKHNwYW5Db250ZXh0KTtcbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBjb250ZXh0QXBpID0gQ29udGV4dEFQSS5nZXRJbnN0YW5jZSgpO1xuLyoqXG4gKiBOby1vcCBpbXBsZW1lbnRhdGlvbnMgb2Yge0BsaW5rIFRyYWNlcn0uXG4gKi9cbnZhciBOb29wVHJhY2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BUcmFjZXIoKSB7XG4gICAgfVxuICAgIC8vIHN0YXJ0U3BhbiBzdGFydHMgYSBub29wIHNwYW4uXG4gICAgTm9vcFRyYWNlci5wcm90b3R5cGUuc3RhcnRTcGFuID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMsIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKGNvbnRleHQgPT09IHZvaWQgMCkgeyBjb250ZXh0ID0gY29udGV4dEFwaS5hY3RpdmUoKTsgfVxuICAgICAgICB2YXIgcm9vdCA9IEJvb2xlYW4ob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnJvb3QpO1xuICAgICAgICBpZiAocm9vdCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb25SZWNvcmRpbmdTcGFuKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcmVudEZyb21Db250ZXh0ID0gY29udGV4dCAmJiBnZXRTcGFuQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgaWYgKGlzU3BhbkNvbnRleHQocGFyZW50RnJvbUNvbnRleHQpICYmXG4gICAgICAgICAgICBpc1NwYW5Db250ZXh0VmFsaWQocGFyZW50RnJvbUNvbnRleHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE5vblJlY29yZGluZ1NwYW4ocGFyZW50RnJvbUNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb25SZWNvcmRpbmdTcGFuKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE5vb3BUcmFjZXIucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uIChuYW1lLCBhcmcyLCBhcmczLCBhcmc0KSB7XG4gICAgICAgIHZhciBvcHRzO1xuICAgICAgICB2YXIgY3R4O1xuICAgICAgICB2YXIgZm47XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIGZuID0gYXJnMjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBvcHRzID0gYXJnMjtcbiAgICAgICAgICAgIGZuID0gYXJnMztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9wdHMgPSBhcmcyO1xuICAgICAgICAgICAgY3R4ID0gYXJnMztcbiAgICAgICAgICAgIGZuID0gYXJnNDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFyZW50Q29udGV4dCA9IGN0eCAhPT0gbnVsbCAmJiBjdHggIT09IHZvaWQgMCA/IGN0eCA6IGNvbnRleHRBcGkuYWN0aXZlKCk7XG4gICAgICAgIHZhciBzcGFuID0gdGhpcy5zdGFydFNwYW4obmFtZSwgb3B0cywgcGFyZW50Q29udGV4dCk7XG4gICAgICAgIHZhciBjb250ZXh0V2l0aFNwYW5TZXQgPSBzZXRTcGFuKHBhcmVudENvbnRleHQsIHNwYW4pO1xuICAgICAgICByZXR1cm4gY29udGV4dEFwaS53aXRoKGNvbnRleHRXaXRoU3BhblNldCwgZm4sIHVuZGVmaW5lZCwgc3Bhbik7XG4gICAgfTtcbiAgICByZXR1cm4gTm9vcFRyYWNlcjtcbn0oKSk7XG5mdW5jdGlvbiBpc1NwYW5Db250ZXh0KHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuICh0eXBlb2Ygc3BhbkNvbnRleHQgPT09ICdvYmplY3QnICYmXG4gICAgICAgIHR5cGVvZiBzcGFuQ29udGV4dFsnc3BhbklkJ10gPT09ICdzdHJpbmcnICYmXG4gICAgICAgIHR5cGVvZiBzcGFuQ29udGV4dFsndHJhY2VJZCddID09PSAnc3RyaW5nJyAmJlxuICAgICAgICB0eXBlb2Ygc3BhbkNvbnRleHRbJ3RyYWNlRmxhZ3MnXSA9PT0gJ251bWJlcicpO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIE5PT1BfVFJBQ0VSID0gbmV3IE5vb3BUcmFjZXIoKTtcbi8qKlxuICogUHJveHkgdHJhY2VyIHByb3ZpZGVkIGJ5IHRoZSBwcm94eSB0cmFjZXIgcHJvdmlkZXJcbiAqL1xudmFyIFByb3h5VHJhY2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFByb3h5VHJhY2VyKF9wcm92aWRlciwgbmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLl9wcm92aWRlciA9IF9wcm92aWRlcjtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG4gICAgUHJveHlUcmFjZXIucHJvdG90eXBlLnN0YXJ0U3BhbiA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRUcmFjZXIoKS5zdGFydFNwYW4obmFtZSwgb3B0aW9ucywgY29udGV4dCk7XG4gICAgfTtcbiAgICBQcm94eVRyYWNlci5wcm90b3R5cGUuc3RhcnRBY3RpdmVTcGFuID0gZnVuY3Rpb24gKF9uYW1lLCBfb3B0aW9ucywgX2NvbnRleHQsIF9mbikge1xuICAgICAgICB2YXIgdHJhY2VyID0gdGhpcy5fZ2V0VHJhY2VyKCk7XG4gICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KHRyYWNlci5zdGFydEFjdGl2ZVNwYW4sIHRyYWNlciwgYXJndW1lbnRzKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFRyeSB0byBnZXQgYSB0cmFjZXIgZnJvbSB0aGUgcHJveHkgdHJhY2VyIHByb3ZpZGVyLlxuICAgICAqIElmIHRoZSBwcm94eSB0cmFjZXIgcHJvdmlkZXIgaGFzIG5vIGRlbGVnYXRlLCByZXR1cm4gYSBub29wIHRyYWNlci5cbiAgICAgKi9cbiAgICBQcm94eVRyYWNlci5wcm90b3R5cGUuX2dldFRyYWNlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRyYWNlciA9IHRoaXMuX3Byb3ZpZGVyLmdldERlbGVnYXRlVHJhY2VyKHRoaXMubmFtZSwgdGhpcy52ZXJzaW9uLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICBpZiAoIXRyYWNlcikge1xuICAgICAgICAgICAgcmV0dXJuIE5PT1BfVFJBQ0VSO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RlbGVnYXRlID0gdHJhY2VyO1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGU7XG4gICAgfTtcbiAgICByZXR1cm4gUHJveHlUcmFjZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUge0BsaW5rIFRyYWNlclByb3ZpZGVyfSB3aGljaCByZXR1cm5zIGFuIGltcG90ZW50XG4gKiBUcmFjZXIgZm9yIGFsbCBjYWxscyB0byBgZ2V0VHJhY2VyYC5cbiAqXG4gKiBBbGwgb3BlcmF0aW9ucyBhcmUgbm8tb3AuXG4gKi9cbnZhciBOb29wVHJhY2VyUHJvdmlkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTm9vcFRyYWNlclByb3ZpZGVyKCkge1xuICAgIH1cbiAgICBOb29wVHJhY2VyUHJvdmlkZXIucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uIChfbmFtZSwgX3ZlcnNpb24sIF9vcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgTm9vcFRyYWNlcigpO1xuICAgIH07XG4gICAgcmV0dXJuIE5vb3BUcmFjZXJQcm92aWRlcjtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgTk9PUF9UUkFDRVJfUFJPVklERVIgPSBuZXcgTm9vcFRyYWNlclByb3ZpZGVyKCk7XG4vKipcbiAqIFRyYWNlciBwcm92aWRlciB3aGljaCBwcm92aWRlcyB7QGxpbmsgUHJveHlUcmFjZXJ9cy5cbiAqXG4gKiBCZWZvcmUgYSBkZWxlZ2F0ZSBpcyBzZXQsIHRyYWNlcnMgcHJvdmlkZWQgYXJlIE5vT3AuXG4gKiAgIFdoZW4gYSBkZWxlZ2F0ZSBpcyBzZXQsIHRyYWNlcyBhcmUgcHJvdmlkZWQgZnJvbSB0aGUgZGVsZWdhdGUuXG4gKiAgIFdoZW4gYSBkZWxlZ2F0ZSBpcyBzZXQgYWZ0ZXIgdHJhY2VycyBoYXZlIGFscmVhZHkgYmVlbiBwcm92aWRlZCxcbiAqICAgYWxsIHRyYWNlcnMgYWxyZWFkeSBwcm92aWRlZCB3aWxsIHVzZSB0aGUgcHJvdmlkZWQgZGVsZWdhdGUgaW1wbGVtZW50YXRpb24uXG4gKi9cbnZhciBQcm94eVRyYWNlclByb3ZpZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFByb3h5VHJhY2VyUHJvdmlkZXIoKSB7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBhIHtAbGluayBQcm94eVRyYWNlcn1cbiAgICAgKi9cbiAgICBQcm94eVRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbiAobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5nZXREZWxlZ2F0ZVRyYWNlcihuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbmV3IFByb3h5VHJhY2VyKHRoaXMsIG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpKTtcbiAgICB9O1xuICAgIFByb3h5VHJhY2VyUHJvdmlkZXIucHJvdG90eXBlLmdldERlbGVnYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl9kZWxlZ2F0ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogTk9PUF9UUkFDRVJfUFJPVklERVI7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGRlbGVnYXRlIHRyYWNlciBwcm92aWRlclxuICAgICAqL1xuICAgIFByb3h5VHJhY2VyUHJvdmlkZXIucHJvdG90eXBlLnNldERlbGVnYXRlID0gZnVuY3Rpb24gKGRlbGVnYXRlKSB7XG4gICAgICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgfTtcbiAgICBQcm94eVRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5nZXREZWxlZ2F0ZVRyYWNlciA9IGZ1bmN0aW9uIChuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuX2RlbGVnYXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0VHJhY2VyKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpO1xuICAgIH07XG4gICAgcmV0dXJuIFByb3h5VHJhY2VyUHJvdmlkZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIFNwYW5LaW5kO1xuKGZ1bmN0aW9uIChTcGFuS2luZCkge1xuICAgIC8qKiBEZWZhdWx0IHZhbHVlLiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBpcyB1c2VkIGludGVybmFsbHkuICovXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJJTlRFUk5BTFwiXSA9IDBdID0gXCJJTlRFUk5BTFwiO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBzcGFuIGNvdmVycyBzZXJ2ZXItc2lkZSBoYW5kbGluZyBvZiBhbiBSUEMgb3Igb3RoZXJcbiAgICAgKiByZW1vdGUgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIlNFUlZFUlwiXSA9IDFdID0gXCJTRVJWRVJcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBjb3ZlcnMgdGhlIGNsaWVudC1zaWRlIHdyYXBwZXIgYXJvdW5kIGFuIFJQQyBvclxuICAgICAqIG90aGVyIHJlbW90ZSByZXF1ZXN0LlxuICAgICAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiQ0xJRU5UXCJdID0gMl0gPSBcIkNMSUVOVFwiO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBzcGFuIGRlc2NyaWJlcyBwcm9kdWNlciBzZW5kaW5nIGEgbWVzc2FnZSB0byBhXG4gICAgICogYnJva2VyLiBVbmxpa2UgY2xpZW50IGFuZCBzZXJ2ZXIsIHRoZXJlIGlzIG5vIGRpcmVjdCBjcml0aWNhbCBwYXRoIGxhdGVuY3lcbiAgICAgKiByZWxhdGlvbnNoaXAgYmV0d2VlbiBwcm9kdWNlciBhbmQgY29uc3VtZXIgc3BhbnMuXG4gICAgICovXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJQUk9EVUNFUlwiXSA9IDNdID0gXCJQUk9EVUNFUlwiO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBzcGFuIGRlc2NyaWJlcyBjb25zdW1lciByZWNlaXZpbmcgYSBtZXNzYWdlIGZyb20gYVxuICAgICAqIGJyb2tlci4gVW5saWtlIGNsaWVudCBhbmQgc2VydmVyLCB0aGVyZSBpcyBubyBkaXJlY3QgY3JpdGljYWwgcGF0aCBsYXRlbmN5XG4gICAgICogcmVsYXRpb25zaGlwIGJldHdlZW4gcHJvZHVjZXIgYW5kIGNvbnN1bWVyIHNwYW5zLlxuICAgICAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiQ09OU1VNRVJcIl0gPSA0XSA9IFwiQ09OU1VNRVJcIjtcbn0pKFNwYW5LaW5kIHx8IChTcGFuS2luZCA9IHt9KSk7XG5cbi8qKlxuICogQW4gZW51bWVyYXRpb24gb2Ygc3RhdHVzIGNvZGVzLlxuICovXG52YXIgU3BhblN0YXR1c0NvZGU7XG4oZnVuY3Rpb24gKFNwYW5TdGF0dXNDb2RlKSB7XG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc3RhdHVzLlxuICAgICAqL1xuICAgIFNwYW5TdGF0dXNDb2RlW1NwYW5TdGF0dXNDb2RlW1wiVU5TRVRcIl0gPSAwXSA9IFwiVU5TRVRcIjtcbiAgICAvKipcbiAgICAgKiBUaGUgb3BlcmF0aW9uIGhhcyBiZWVuIHZhbGlkYXRlZCBieSBhbiBBcHBsaWNhdGlvbiBkZXZlbG9wZXIgb3JcbiAgICAgKiBPcGVyYXRvciB0byBoYXZlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXG4gICAgICovXG4gICAgU3BhblN0YXR1c0NvZGVbU3BhblN0YXR1c0NvZGVbXCJPS1wiXSA9IDFdID0gXCJPS1wiO1xuICAgIC8qKlxuICAgICAqIFRoZSBvcGVyYXRpb24gY29udGFpbnMgYW4gZXJyb3IuXG4gICAgICovXG4gICAgU3BhblN0YXR1c0NvZGVbU3BhblN0YXR1c0NvZGVbXCJFUlJPUlwiXSA9IDJdID0gXCJFUlJPUlwiO1xufSkoU3BhblN0YXR1c0NvZGUgfHwgKFNwYW5TdGF0dXNDb2RlID0ge30pKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIFNwbGl0IG1vZHVsZS1sZXZlbCB2YXJpYWJsZSBkZWZpbml0aW9uIGludG8gc2VwYXJhdGUgZmlsZXMgdG8gYWxsb3dcbi8vIHRyZWUtc2hha2luZyBvbiBlYWNoIGFwaSBpbnN0YW5jZS5cbi8qKiBFbnRyeXBvaW50IGZvciBjb250ZXh0IEFQSSAqL1xudmFyIGNvbnRleHQgPSBDb250ZXh0QVBJLmdldEluc3RhbmNlKCk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgQVBJX05BTUUgPSAndHJhY2UnO1xuLyoqXG4gKiBTaW5nbGV0b24gb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSBPcGVuVGVsZW1ldHJ5IFRyYWNpbmcgQVBJXG4gKi9cbnZhciBUcmFjZUFQSSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKiogRW1wdHkgcHJpdmF0ZSBjb25zdHJ1Y3RvciBwcmV2ZW50cyBlbmQgdXNlcnMgZnJvbSBjb25zdHJ1Y3RpbmcgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEFQSSAqL1xuICAgIGZ1bmN0aW9uIFRyYWNlQVBJKCkge1xuICAgICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyID0gbmV3IFByb3h5VHJhY2VyUHJvdmlkZXIoKTtcbiAgICAgICAgdGhpcy53cmFwU3BhbkNvbnRleHQgPSB3cmFwU3BhbkNvbnRleHQ7XG4gICAgICAgIHRoaXMuaXNTcGFuQ29udGV4dFZhbGlkID0gaXNTcGFuQ29udGV4dFZhbGlkO1xuICAgICAgICB0aGlzLmRlbGV0ZVNwYW4gPSBkZWxldGVTcGFuO1xuICAgICAgICB0aGlzLmdldFNwYW4gPSBnZXRTcGFuO1xuICAgICAgICB0aGlzLmdldEFjdGl2ZVNwYW4gPSBnZXRBY3RpdmVTcGFuO1xuICAgICAgICB0aGlzLmdldFNwYW5Db250ZXh0ID0gZ2V0U3BhbkNvbnRleHQ7XG4gICAgICAgIHRoaXMuc2V0U3BhbiA9IHNldFNwYW47XG4gICAgICAgIHRoaXMuc2V0U3BhbkNvbnRleHQgPSBzZXRTcGFuQ29udGV4dDtcbiAgICB9XG4gICAgLyoqIEdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBUcmFjZSBBUEkgKi9cbiAgICBUcmFjZUFQSS5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBuZXcgVHJhY2VBUEkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGN1cnJlbnQgZ2xvYmFsIHRyYWNlci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHRyYWNlciBwcm92aWRlciB3YXMgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQsIGVsc2UgZmFsc2VcbiAgICAgKi9cbiAgICBUcmFjZUFQSS5wcm90b3R5cGUuc2V0R2xvYmFsVHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbiAocHJvdmlkZXIpIHtcbiAgICAgICAgdmFyIHN1Y2Nlc3MgPSByZWdpc3Rlckdsb2JhbChBUElfTkFNRSwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciwgRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIuc2V0RGVsZWdhdGUocHJvdmlkZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZ2xvYmFsIHRyYWNlciBwcm92aWRlci5cbiAgICAgKi9cbiAgICBUcmFjZUFQSS5wcm90b3R5cGUuZ2V0VHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRHbG9iYWwoQVBJX05BTUUpIHx8IHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXI7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgdHJhY2VyIGZyb20gdGhlIGdsb2JhbCB0cmFjZXIgcHJvdmlkZXIuXG4gICAgICovXG4gICAgVHJhY2VBUEkucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uIChuYW1lLCB2ZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRyYWNlclByb3ZpZGVyKCkuZ2V0VHJhY2VyKG5hbWUsIHZlcnNpb24pO1xuICAgIH07XG4gICAgLyoqIFJlbW92ZSB0aGUgZ2xvYmFsIHRyYWNlciBwcm92aWRlciAqL1xuICAgIFRyYWNlQVBJLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB1bnJlZ2lzdGVyR2xvYmFsKEFQSV9OQU1FLCBEaWFnQVBJLmluc3RhbmNlKCkpO1xuICAgICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyID0gbmV3IFByb3h5VHJhY2VyUHJvdmlkZXIoKTtcbiAgICB9O1xuICAgIHJldHVybiBUcmFjZUFQSTtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBTcGxpdCBtb2R1bGUtbGV2ZWwgdmFyaWFibGUgZGVmaW5pdGlvbiBpbnRvIHNlcGFyYXRlIGZpbGVzIHRvIGFsbG93XG4vLyB0cmVlLXNoYWtpbmcgb24gZWFjaCBhcGkgaW5zdGFuY2UuXG4vKiogRW50cnlwb2ludCBmb3IgdHJhY2UgQVBJICovXG52YXIgdHJhY2UgPSBUcmFjZUFQSS5nZXRJbnN0YW5jZSgpO1xuXG5jb25zdCBjcmVhdGVDREVTcGFuID0gYXN5bmMgKGNkZUNvbm4sIGRhdGEsIG9wZXJhdGlvbikgPT4ge1xuICBjb25zdCB0cmFjZXIgPSB0cmFjZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpO1xuICBjb25zdCBwYXJlbnRDb250ZXh0ID0gY29udGV4dC5hY3RpdmUoKTtcbiAgY29uc3Qgc3BhbiA9IHRyYWNlci5zdGFydFNwYW4oXG4gICAgYGNkZS4ke2RhdGEudHlwZX1gLFxuICAgIHtcbiAgICAgIGtpbmQ6IFNwYW5LaW5kLkNMSUVOVCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgXCJtZXNzYWdlLnR5cGVcIjogZGF0YS50eXBlLFxuICAgICAgICAuLi5jZGVDb25uLnRyYWNpbmdDb250ZXh0ICYmIHtcbiAgICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgIFwib2pzLmZvcm1JZFwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LmZvcm1JZCxcbiAgICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQudmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LmJhc2VVcmwsXG4gICAgICAgICAgXCJvanMucmVmZXJyZXJcIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5yZWZlcnJlclxuICAgICAgICB9LFxuICAgICAgICBcImNkZS5tZXNzYWdlLnR5cGVcIjogZGF0YS50eXBlLFxuICAgICAgICBcImNkZS5tZXNzYWdlLnBheWxvYWRcIjogSlNPTi5zdHJpbmdpZnkoZGF0YS5wYXlsb2FkKVxuICAgICAgfVxuICAgIH0sXG4gICAgcGFyZW50Q29udGV4dFxuICApO1xuICByZXR1cm4gY29udGV4dC53aXRoKHRyYWNlLnNldFNwYW4ocGFyZW50Q29udGV4dCwgc3BhbiksIGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3BlcmF0aW9uKCk7XG4gICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgbWVzc2FnZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIlxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc3Bhbi5lbmQoKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IGNyZWF0ZVRyYWNraW5nU3BhbiA9IGFzeW5jIChvcHRpb25zLCBvcGVyYXRpb24pID0+IHtcbiAgY29uc3QgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKTtcbiAgY29uc3QgcGFyZW50Q29udGV4dCA9IGNvbnRleHQuYWN0aXZlKCk7XG4gIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKFxuICAgIGBmb3JtLiR7b3B0aW9ucy5zcGFuTmFtZX1gLFxuICAgIHtcbiAgICAgIGtpbmQ6IFNwYW5LaW5kLkNMSUVOVCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBvcHRpb25zLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IG9wdGlvbnMuZGV2aWNlVG9rZW4sXG4gICAgICAgIFwib2pzLmZvcm1JZFwiOiBvcHRpb25zLmZvcm1JZCxcbiAgICAgICAgXCJvanMudmVyc2lvblwiOiBvcHRpb25zLnZlcnNpb24sXG4gICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiBvcHRpb25zLnJlbGVhc2VWZXJzaW9uLFxuICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiBvcHRpb25zLmJhc2VVcmwsXG4gICAgICAgIFwib2pzLnJlZmVycmVyXCI6IG9wdGlvbnMucmVmZXJyZXIsXG4gICAgICAgIC4uLm9wdGlvbnMucGF5bWVudFJvdXRlSWQgJiYgeyBcInBheW1lbnQucm91dGVfaWRcIjogb3B0aW9ucy5wYXltZW50Um91dGVJZCB9XG4gICAgICB9XG4gICAgfSxcbiAgICBwYXJlbnRDb250ZXh0XG4gICk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3BlcmF0aW9uKCk7XG4gICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCI7XG4gICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2VcbiAgICB9KTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfSBmaW5hbGx5IHtcbiAgICBzcGFuLmVuZCgpO1xuICB9XG59O1xuXG5jbGFzcyBDZGVFcnJvciBleHRlbmRzIEN1c3RvbUVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBjb25zdCBmcmllbmRseU1lc3NhZ2UgPSBgJHtyZXNwb25zZS5tZXNzYWdlfWA7XG4gICAgc3VwZXIoZnJpZW5kbHlNZXNzYWdlKTtcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IHF1ZXJ5Q0RFID0gYXN5bmMgKGNkZUNvbm4sIGRhdGEsIHJlc3BvbnNlU2NoZW1hLCB0cmFja2luZ0tleSkgPT4ge1xuICByZXR1cm4gY3JlYXRlQ0RFU3BhbihjZGVDb25uLCBkYXRhLCBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHRyYWNraW5nS2V5KSB7XG4gICAgICB0cmFjayh0cmFja2luZ0tleSwge1xuICAgICAgICAuLi5kYXRhXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjZGVDb25uLnNlbmQoZGF0YSk7XG4gICAgaWYgKGlzQ0RFUmVzcG9uc2VFcnJvcihyZXNwb25zZSkpIHtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBuYXZpZ2F0b3IuY29ubmVjdGlvbjtcbiAgICAgIHRyYWNrKFwiY2RlX3Jlc3BvbnNlX2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3JfbWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZSxcbiAgICAgICAgbWVzc2FnZV90eXBlOiBkYXRhLnR5cGUsXG4gICAgICAgIHVzZXJfYWdlbnQ6IG5hdmlnYXRvci51c2VyQWdlbnQsXG4gICAgICAgIG9ubGluZTogbmF2aWdhdG9yLm9uTGluZSxcbiAgICAgICAgaGFzX2ZvY3VzOiBkb2N1bWVudC5oYXNGb2N1cygpLFxuICAgICAgICBocmVmOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgICAgZG9jdW1lbnRfdmlzaWJpbGl0eV9zdGF0ZTogZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlLFxuICAgICAgICBjb25uZWN0aW9uX2Rvd25saW5rOiBjb25uZWN0aW9uPy5kb3dubGluayxcbiAgICAgICAgY29ubmVjdGlvbl9lZmZlY3RpdmVfdHlwZTogY29ubmVjdGlvbj8uZWZmZWN0aXZlVHlwZSxcbiAgICAgICAgY29ubmVjdGlvbl9ydHQ6IGNvbm5lY3Rpb24/LnJ0dCxcbiAgICAgICAgY29ubmVjdGlvbl9zYXZlX2RhdGE6IGNvbm5lY3Rpb24/LnNhdmVEYXRhXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBDZGVFcnJvcihyZXNwb25zZSk7XG4gICAgfVxuICAgIGlmICghY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEocmVzcG9uc2UsIHJlc3BvbnNlU2NoZW1hKSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2VTY2hlbWEuc2FmZVBhcnNlKHJlc3BvbnNlKTtcbiAgICAgIGlmIChyZXN1bHQuc3VjY2VzcykgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIHJlc3BvbnNlU2NoZW1hLCBcIkFjdHVhbDpcIiwgcmVzcG9uc2UpO1xuICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgIH1cbiAgICBpZiAodHJhY2tpbmdLZXkpIHtcbiAgICAgIHRyYWNrKHRyYWNraW5nS2V5LCB7XG4gICAgICAgIC4uLnJlc3BvbnNlXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9KTtcbn07XG5jb25zdCBjaGVja0lmQ29uZm9ybXNUb1NjaGVtYSA9ICh2YWx1ZSwgc2NoZW1hKSA9PiB7XG4gIHJldHVybiBzY2hlbWEuc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzO1xufTtcbmNvbnN0IGlzQ0RFUmVzcG9uc2VFcnJvciA9IChyZXNwb25zZSkgPT4ge1xuICByZXR1cm4gQ0RFUmVzcG9uc2VFcnJvci5zYWZlUGFyc2UocmVzcG9uc2UpLnN1Y2Nlc3M7XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRQcmV2aWV3ID0gYXN5bmMgKGNkZUNvbm4sIHJlcXVlc3QpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByZXF1ZXN0IH0sIFByZXZpZXdDaGVja291dFJlc3BvbnNlKTtcbn07XG5jb25zdCBnZXRQcmVmaWxsID0gYXN5bmMgKGNkZUNvbm4pID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBQYXltZW50Rm9ybVByZWZpbGwpO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwidjJfc3RhcnRfcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSxcbiAgICBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UsXG4gICAgXCJzdGFydF9wYXltZW50X2Zsb3dcIlxuICApO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQgfSxcbiAgICBTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSxcbiAgICBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIlxuICApO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUiA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHRyYWNrKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCB7XG4gICAgLi4ucGF5bG9hZFxuICB9KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZCB9LCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICB0cmFjayhcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJfcmVzdWx0XCIsIHtcbiAgICAuLi5yZXN1bHRcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuY29uc3QgY29uZmlybVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImNvbmZpcm1fcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSxcbiAgICBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSxcbiAgICBcImNvbmZpcm1fcGF5bWVudF9mbG93XCJcbiAgKTtcbn07XG5jb25zdCBmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkIH0sXG4gICAgU2V0dXBDaGVja291dFJlc3BvbnNlLFxuICAgIFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIlxuICApO1xufTtcbmNvbnN0IGNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkIH0sXG4gICAgQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSxcbiAgICBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiXG4gICk7XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRWYWx1ZSA9IGFzeW5jIChjZGVDb25uLCBzZWN1cmVUb2tlbiwgcHJvbW9Db2RlKSA9PiB7XG4gIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlldyhjZGVDb25uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBzZWN1cmVUb2tlbixcbiAgICBwcm9tb3Rpb25fY29kZTogcHJvbW9Db2RlXG4gIH0pO1xuICBjb25zdCBjdXJyZW5jaWVzID0gbmV3IFNldChjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LmN1cnJlbmN5KSk7XG4gIGlmIChjdXJyZW5jaWVzLnNpemUgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHtjdXJyZW5jaWVzLnNpemV9YCk7XG4gIH1cbiAgY29uc3QgY3VycmVuY3kgPSBjdXJyZW5jaWVzLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiO1xuICBjb25zdCBhbW91bnRBdG9tID0gc3VtKGNoZWNrb3V0UHJldmlldy5wcmV2aWV3Lmludm9pY2VzLm1hcCgoaW52KSA9PiBpbnYucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3ksXG4gICAgYW1vdW50QXRvbVxuICB9O1xufTtcbmNvbnN0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudCA9IGFzeW5jIChjZGVDb25uLCBzZWN1cmVUb2tlbiwgaXNTZXR1cE1vZGUsIHByb21vQ29kZSkgPT4ge1xuICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB9IGVsc2Uge1xuICAgIHByb21vQ29kZSA9ICFwcm9tb0NvZGUgPyB2b2lkIDAgOiBwcm9tb0NvZGU7XG4gICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJwcm9tb0NvZGVcIikgJiYgIXByb21vQ29kZSkge1xuICAgICAgcHJvbW9Db2RlID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInByb21vQ29kZVwiKTtcbiAgICB9XG4gICAgY29uc3QgY2hlY2tvdXRQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRWYWx1ZShjZGVDb25uLCBzZWN1cmVUb2tlbiwgcHJvbW9Db2RlKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBjaGVja291dFByZXZpZXcuYW1vdW50QXRvbSwgY3VycmVuY3k6IGNoZWNrb3V0UHJldmlldy5jdXJyZW5jeSB9O1xuICB9XG59O1xuY29uc3QgdG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyA9IGFzeW5jIChhbGxDZGVDb25uZWN0aW9ucywgcGF5bG9hZCkgPT4ge1xuICBpZiAoYWxsQ2RlQ29ubmVjdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgfVxuICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKGFsbENkZUNvbm5lY3Rpb25zLnZhbHVlcygpKS5tYXAoXG4gICAgICAoY2RlQ29ubikgPT4gcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZCB9LCBUb2tlbml6ZUNhcmRSZXNwb25zZSlcbiAgICApXG4gICk7XG4gIHJldHVybiByZXNwb25zZXM7XG59O1xuY29uc3QgY2hlY2tvdXRDYXJkRWxlbWVudHMgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkIH0sXG4gICAgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UsXG4gICAgXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCJcbiAgKTtcbn07XG5jb25zdCBzZXR1cENoZWNrb3V0ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkIH0sIFNldHVwQ2hlY2tvdXRSZXNwb25zZSwgXCJzZXR1cF9jaGVja291dFwiKTtcbn07XG5jb25zdCBwZXJmb3JtQ2hlY2tvdXQgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQgfSwgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UsIFwicGVyZm9ybV9jaGVja291dFwiKTtcbn07XG5jb25zdCBDREVfUE9MTElOR19JTlRFUlZBTCA9IDFlMztcbmNvbnN0IHBpbmdDZGVGb3JTdGF0dXMgPSBhc3luYyAoaWZyYW1lLCBjaGlsZE9yaWdpbiwgdHlwZSwgcmVzcG9uc2VNb2RlbCkgPT4ge1xuICBjb25zb2xlLmxvZyhjaGlsZE9yaWdpbik7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lLFxuICAgIGRlYnVnOiB0cnVlLFxuICAgIHRpbWVvdXQ6IENERV9QT0xMSU5HX0lOVEVSVkFMLFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KTtcbiAgY29uc3QgY29ubmVjdGlvbk9iaiA9IGF3YWl0IGNvbm5lY3Rpb24ucHJvbWlzZTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcXVlcnlDREUoY29ubmVjdGlvbk9iaiwgeyB0eXBlIH0sIHJlc3BvbnNlTW9kZWwpO1xuICBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuY29uc3QgcHJlcGFyZVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSxcbiAgICBQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSxcbiAgICBcInByZXBhcmVfcGF5bWVudF9mbG93XCJcbiAgKTtcbn07XG5jb25zdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUgPSBhc3luYyAoY2RlQ29ubiwgZXJyb3JNZXNzYWdlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHsgbWVzc2FnZTogZXJyb3JNZXNzYWdlIH07XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBxdWVyeUNERShcbiAgICAgIGNkZUNvbm4sXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQgfSxcbiAgICAgIENoZWNrb3V0U3RhbmRhcmRFcnJvclJlc3BvbnNlXG4gICAgKTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZXJyb3JfY29kZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBnZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGU6XCIsIGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgIHJldHVybiBcIlBBWU1FTlRfRkFJTEVEX0dFTkVSSUNcIjtcbiAgfVxufTtcbmNvbnN0IHNldFVzZXJEZXZpY2VUb2tlbiA9IGFzeW5jIChjZGVDb25uLCBkZXZpY2VUb2tlbikgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwic2V0X3VzZXJfZGV2aWNlX3Rva2VuXCIsIHBheWxvYWQ6IHsgZGV2aWNlX3Rva2VuOiBkZXZpY2VUb2tlbiB9IH0sXG4gICAgU2V0VXNlckRldmljZVRva2VuUmVzcG9uc2VcbiAgKTtcbn07XG5cbmNvbnN0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QgPSBhc3luYyAob2JqKSA9PiB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8ICFvYmopIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwaW5nID0geyB0eXBlOiBcInBpbmdcIiB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9iai5zZW5kKHBpbmcpO1xuICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpgLCBlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5jb25zdCBpc1Jlc3VsdFZhbGlkID0gKG9iaiwgaXNWYWxpZCkgPT4ge1xuICByZXR1cm4gISFvYmogJiYgaXNWYWxpZDtcbn07XG5cbmNvbnN0IEZSQU1FX0JBU0VfVVJMID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuXG4vLyBUaGVzZSB2YWx1ZXMgc2hvdWxkIE5FVkVSIGNoYW5nZS4gVGhlIHZhbHVlcyBhcmUgcHJlY2lzZWx5IGZvclxuLy8gZ2VuZXJhdGluZyBVTElEcy5cbmNvbnN0IEVOQ09ESU5HID0gXCIwMTIzNDU2Nzg5QUJDREVGR0hKS01OUFFSU1RWV1hZWlwiOyAvLyBDcm9ja2ZvcmQncyBCYXNlMzJcbmNvbnN0IEVOQ09ESU5HX0xFTiA9IDMyOyAvLyBmcm9tIEVOQ09ESU5HLmxlbmd0aDtcbmNvbnN0IFJBTkRPTV9MRU4gPSAxNjtcbmNvbnN0IFRJTUVfTEVOID0gMTA7XG5jb25zdCBUSU1FX01BWCA9IDI4MTQ3NDk3NjcxMDY1NTsgLy8gZnJvbSBNYXRoLnBvdygyLCA0OCkgLSAxO1xuXG52YXIgVUxJREVycm9yQ29kZTtcbihmdW5jdGlvbiAoVUxJREVycm9yQ29kZSkge1xuICAgIFVMSURFcnJvckNvZGVbXCJCYXNlMzJJbmNvcnJlY3RFbmNvZGluZ1wiXSA9IFwiQjMyX0VOQ19JTlZBTElEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkRlY29kZVRpbWVJbnZhbGlkQ2hhcmFjdGVyXCJdID0gXCJERUNfVElNRV9DSEFSXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkRlY29kZVRpbWVWYWx1ZU1hbGZvcm1lZFwiXSA9IFwiREVDX1RJTUVfTUFMRk9STUVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkVuY29kZVRpbWVOZWdhdGl2ZVwiXSA9IFwiRU5DX1RJTUVfTkVHXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkVuY29kZVRpbWVTaXplRXhjZWVkZWRcIl0gPSBcIkVOQ19USU1FX1NJWkVfRVhDRUVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZFwiXSA9IFwiRU5DX1RJTUVfTUFMRk9STUVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIlBSTkdEZXRlY3RGYWlsdXJlXCJdID0gXCJQUk5HX0RFVEVDVFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJVTElESW52YWxpZFwiXSA9IFwiVUxJRF9JTlZBTElEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIlVuZXhwZWN0ZWRcIl0gPSBcIlVORVhQRUNURURcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiVVVJREludmFsaWRcIl0gPSBcIlVVSURfSU5WQUxJRFwiO1xufSkoVUxJREVycm9yQ29kZSB8fCAoVUxJREVycm9yQ29kZSA9IHt9KSk7XG5jbGFzcyBVTElERXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoZXJyb3JDb2RlLCBtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKGAke21lc3NhZ2V9ICgke2Vycm9yQ29kZX0pYCk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiVUxJREVycm9yXCI7XG4gICAgICAgIHRoaXMuY29kZSA9IGVycm9yQ29kZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJhbmRvbUNoYXIocHJuZykge1xuICAgIC8vIEN1cnJlbnRseSBQUk5HcyBnZW5lcmF0ZSBmcmFjdGlvbnMgZnJvbSAwIHRvIF9sZXNzIHRoYW5fIDEsIHNvIG5vIFwiJVwiIGlzIG5lY2Vzc2FyeS5cbiAgICAvLyBIb3dldmVyLCBqdXN0IGluIGNhc2UgYSBmdXR1cmUgUFJORyBjYW4gZ2VuZXJhdGUgMSxcbiAgICAvLyB3ZSBhcmUgYXBwbHlpbmcgXCIlIEVOQ09ESU5HIExFTlwiIHRvIHdyYXAgYmFjayB0byB0aGUgZmlyc3QgY2hhcmFjdGVyXG4gICAgY29uc3QgcmFuZG9tUG9zaXRpb24gPSBNYXRoLmZsb29yKHBybmcoKSAqIEVOQ09ESU5HX0xFTikgJSBFTkNPRElOR19MRU47XG4gICAgcmV0dXJuIEVOQ09ESU5HLmNoYXJBdChyYW5kb21Qb3NpdGlvbik7XG59XG4vKipcbiAqIERldGVjdCB0aGUgYmVzdCBQUk5HIChwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IpXG4gKiBAcGFyYW0gcm9vdCBUaGUgcm9vdCB0byBjaGVjayBmcm9tIChnbG9iYWwvd2luZG93KVxuICogQHJldHVybnMgVGhlIFBSTkcgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0UFJORyhyb290KSB7XG4gICAgY29uc3Qgcm9vdExvb2t1cCA9IGRldGVjdFJvb3QoKTtcbiAgICBjb25zdCBnbG9iYWxDcnlwdG8gPSAocm9vdExvb2t1cCAmJiAocm9vdExvb2t1cC5jcnlwdG8gfHwgcm9vdExvb2t1cC5tc0NyeXB0bykpIHx8XG4gICAgICAgIChudWxsKTtcbiAgICBpZiAodHlwZW9mIGdsb2JhbENyeXB0bz8uZ2V0UmFuZG9tVmFsdWVzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDEpO1xuICAgICAgICAgICAgZ2xvYmFsQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhidWZmZXIpO1xuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclswXSAvIDB4ZmY7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBnbG9iYWxDcnlwdG8/LnJhbmRvbUJ5dGVzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IGdsb2JhbENyeXB0by5yYW5kb21CeXRlcygxKS5yZWFkVUludDgoKSAvIDB4ZmY7XG4gICAgfVxuICAgIGVsc2UgO1xuICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5QUk5HRGV0ZWN0RmFpbHVyZSwgXCJGYWlsZWQgdG8gZmluZCBhIHJlbGlhYmxlIFBSTkdcIik7XG59XG5mdW5jdGlvbiBkZXRlY3RSb290KCkge1xuICAgIGlmIChpbldlYldvcmtlcigpKVxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gd2luZG93O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gZ2xvYmFsO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbFRoaXM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZW5jb2RlUmFuZG9tKGxlbiwgcHJuZykge1xuICAgIGxldCBzdHIgPSBcIlwiO1xuICAgIGZvciAoOyBsZW4gPiAwOyBsZW4tLSkge1xuICAgICAgICBzdHIgPSByYW5kb21DaGFyKHBybmcpICsgc3RyO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuLyoqXG4gKiBFbmNvZGUgdGhlIHRpbWUgcG9ydGlvbiBvZiBhIFVMSURcbiAqIEBwYXJhbSBub3cgVGhlIGN1cnJlbnQgdGltZXN0YW1wXG4gKiBAcGFyYW0gbGVuIExlbmd0aCB0byBnZW5lcmF0ZVxuICogQHJldHVybnMgVGhlIGVuY29kZWQgdGltZVxuICovXG5mdW5jdGlvbiBlbmNvZGVUaW1lKG5vdywgbGVuID0gVElNRV9MRU4pIHtcbiAgICBpZiAoaXNOYU4obm93KSkge1xuICAgICAgICB0aHJvdyBuZXcgVUxJREVycm9yKFVMSURFcnJvckNvZGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkLCBgVGltZSBtdXN0IGJlIGEgbnVtYmVyOiAke25vd31gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm93ID4gVElNRV9NQVgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVTaXplRXhjZWVkZWQsIGBDYW5ub3QgZW5jb2RlIGEgdGltZSBsYXJnZXIgdGhhbiAke1RJTUVfTUFYfTogJHtub3d9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vdyA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVOZWdhdGl2ZSwgYFRpbWUgbXVzdCBiZSBwb3NpdGl2ZTogJHtub3d9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKE51bWJlci5pc0ludGVnZXIobm93KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhbiBpbnRlZ2VyOiAke25vd31gKTtcbiAgICB9XG4gICAgbGV0IG1vZCwgc3RyID0gXCJcIjtcbiAgICBmb3IgKGxldCBjdXJyZW50TGVuID0gbGVuOyBjdXJyZW50TGVuID4gMDsgY3VycmVudExlbi0tKSB7XG4gICAgICAgIG1vZCA9IG5vdyAlIEVOQ09ESU5HX0xFTjtcbiAgICAgICAgc3RyID0gRU5DT0RJTkcuY2hhckF0KG1vZCkgKyBzdHI7XG4gICAgICAgIG5vdyA9IChub3cgLSBtb2QpIC8gRU5DT0RJTkdfTEVOO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuZnVuY3Rpb24gaW5XZWJXb3JrZXIoKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIFVMSURcbiAqIEBwYXJhbSBzZWVkVGltZSBPcHRpb25hbCB0aW1lIHNlZWRcbiAqIEBwYXJhbSBwcm5nIE9wdGlvbmFsIFBSTkcgZnVuY3Rpb25cbiAqIEByZXR1cm5zIEEgVUxJRCBzdHJpbmdcbiAqIEBleGFtcGxlXG4gKiAgdWxpZCgpOyAvLyBcIjAxSE5aWEQwN001Q0VONVhBNjZFTVpTUlpXXCJcbiAqL1xuZnVuY3Rpb24gdWxpZChzZWVkVGltZSwgcHJuZykge1xuICAgIGNvbnN0IGN1cnJlbnRQUk5HID0gZGV0ZWN0UFJORygpO1xuICAgIGNvbnN0IHNlZWQgPSBEYXRlLm5vdygpIDtcbiAgICByZXR1cm4gZW5jb2RlVGltZShzZWVkLCBUSU1FX0xFTikgKyBlbmNvZGVSYW5kb20oUkFORE9NX0xFTiwgY3VycmVudFBSTkcpO1xufVxuXG5jb25zdCBDT09LSUVfTkFNRSA9IFwib3BfYW5hbHl0aWNzX2RldmljZV90b2tlblwiO1xuY29uc3QgZ2V0RGV2aWNlVG9rZW4gPSAoKSA9PiB7XG4gIGNvbnN0IGV4aXN0aW5nQ29va2llID0gZG9jdW1lbnQuY29va2llLnNwbGl0KFwiO1wiKS5maW5kKChjb29raWUpID0+IGNvb2tpZS5pbmNsdWRlcyhDT09LSUVfTkFNRSkpO1xuICBpZiAoZXhpc3RpbmdDb29raWUpIHtcbiAgICByZXR1cm4gZXhpc3RpbmdDb29raWUuc3BsaXQoXCI9XCIpWzFdO1xuICB9XG4gIGNvbnN0IHRva2VuID0gdWxpZCgpO1xuICBzZXREZXZpY2VUb2tlbih0b2tlbik7XG4gIHJldHVybiB0b2tlbjtcbn07XG5jb25zdCBzZXREZXZpY2VUb2tlbiA9ICh0b2tlbikgPT4ge1xuICBjb25zdCBvbmVZZWFyRnJvbU5vdyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpO1xuICBvbmVZZWFyRnJvbU5vdy5zZXRGdWxsWWVhcihvbmVZZWFyRnJvbU5vdy5nZXRGdWxsWWVhcigpICsgMSk7XG4gIGRvY3VtZW50LmNvb2tpZSA9IGAke0NPT0tJRV9OQU1FfT0ke3Rva2VufTsgcGF0aD0vOyBleHBpcmVzPSR7b25lWWVhckZyb21Ob3cudG9VVENTdHJpbmcoKX1gO1xufTtcblxuY29uc3QgZXh0cmFjdElzc3Vlc1BlckZpZWxkID0gKGVycm9yKSA9PiB7XG4gIGNvbnN0IGlzc3Vlc1BlckZpZWxkID0ge307XG4gIE9iamVjdC5lbnRyaWVzKGVycm9yKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gRmllbGROYW1lRW51bS5wYXJzZShrZXkpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5fZXJyb3JzKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWUuX2Vycm9ycztcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNzdWVzUGVyRmllbGQ7XG59O1xuXG5jb25zdCBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0gPSAoZm9ybURpdiwgaW5pdGlhbERpY3QpID0+IHtcbiAgY29uc3QgaW5jbHVkZWRJbnB1dHMgPSBBcnJheS5mcm9tKGZvcm1EaXYucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKTtcbiAgY29uc3QgZXh0cmFEYXRhID0gaW5jbHVkZWRJbnB1dHMucmVkdWNlKChhY2MsIGlucHV0KSA9PiB7XG4gICAgY29uc3Qga2V5ID0gaW5wdXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICAgIGlmICgha2V5KSByZXR1cm4gYWNjO1xuICAgIGNvbnN0IHZhbHVlID0gaW5wdXQudHlwZSA9PT0gXCJjaGVja2JveFwiID8gaW5wdXQuY2hlY2tlZCA6IGlucHV0LnZhbHVlO1xuICAgIHJldHVybiB7IC4uLmFjYywgW2tleV06IHZhbHVlIH07XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGV4dHJhRGF0YTtcbn07XG5jb25zdCBwYXJzZUV2ZW50UGF5bG9hZCA9IChldmVudERhdGEpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRWxlbWVudEV2ZW50LnBhcnNlKGV2ZW50RGF0YSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgZXZlbnQgcGF5bG9hZDpcIiwgZXZlbnREYXRhLCBlcnJvcik7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmNvbnN0IGdlbmVyYXRlQW5vbnltb3VzVmFsdWVzID0gKCkgPT4ge1xuICBjb25zdCBpZCA9IHY0KCkuc3BsaXQoXCItXCIpWzBdO1xuICByZXR1cm4ge1xuICAgIGZpcnN0TmFtZTogYHh4XyR7aWR9YCxcbiAgICBsYXN0TmFtZTogYHh4XyR7aWR9YCxcbiAgICBlbWFpbDogYHh4XyR7aWR9QGVtYWlsLmNvbWAsXG4gICAgemlwQ29kZTogYHh4XyR7aWR9YCxcbiAgICBjb3VudHJ5OiBgVVNgXG4gIH07XG59O1xuY29uc3QgZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMgPSAoZmllbGRzKSA9PiB7XG4gIHJldHVybiB7XG4gICAgbGluZTE6IGZpZWxkc1tGaWVsZE5hbWUuTElORTFdLFxuICAgIGxpbmUyOiBmaWVsZHNbRmllbGROYW1lLkxJTkUyXSxcbiAgICBsaW5lMzogZmllbGRzW0ZpZWxkTmFtZS5MSU5FM10sXG4gICAgY2l0eTogZmllbGRzW0ZpZWxkTmFtZS5DSVRZXSxcbiAgICBzdGF0ZTogZmllbGRzW0ZpZWxkTmFtZS5TVEFURV0sXG4gICAgY291bnRyeTogZmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICB6aXBfY29kZTogZmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV1cbiAgfTtcbn07XG5jb25zdCBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMgPSAoZmllbGRzLCBjaGVja291dF9zZXR0aW5ncykgPT4ge1xuICBpZiAoIWNoZWNrb3V0X3NldHRpbmdzLnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzKSByZXR1cm47XG4gIHJldHVybiB7XG4gICAgbGluZTE6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTFdLFxuICAgIGxpbmUyOiBmaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUyXSxcbiAgICBsaW5lMzogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FM10sXG4gICAgY2l0eTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSxcbiAgICBzdGF0ZTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0sXG4gICAgY291bnRyeTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSxcbiAgICB6aXBfY29kZTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV1cbiAgfTtcbn07XG5jb25zdCBnZXRGdWxsTmFtZSA9IChmaXJzdE5hbWUsIGxhc3ROYW1lKSA9PiB7XG4gIHJldHVybiBbZmlyc3ROYW1lLCBsYXN0TmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xufTtcblxuY29uc3Qgc3R5bGVzID0gKHsgd2lkdGgsIGhlaWdodCB9KSA9PiBgXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cblxuLm92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogMjE0NzQ4MzY0OCAhaW1wb3J0YW50O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xufVxuLmNvbnRhaW5lciB7XG4gIG1heC13aWR0aDogJHt3aWR0aCA/PyBcIjUwMHB4XCJ9O1xuICBtYXgtaGVpZ2h0OiAke2hlaWdodCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2Utb3V0O1xufVxuLmZyYW1lLCAjYWR5ZW4tY29udGFpbmVyLCAjYWR5ZW4tY29udGFpbmVyID4gKiB7XG4gIG1heC13aWR0aDogJHt3aWR0aCA/PyBcIjUwMHB4XCJ9O1xuICBtYXgtaGVpZ2h0OiAke2hlaWdodCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBib3JkZXI6IG5vbmU7XG59XG4uY2FuY2VsLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0b3A6IC0xLjVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIHJpZ2h0OiAwO1xufVxuYDtcbmNvbnN0IGJhbmtTZWxlY3RvclN0eWxlcyA9ICh7IHdpZHRoLCBoZWlnaHQgfSkgPT4gYFxuQGtleWZyYW1lcyBmYWRlSW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG5cbi5vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6IDIxNDc0ODM2NDggIWltcG9ydGFudDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbi5jb250YWluZXIge1xuICBtYXgtd2lkdGg6ICR7d2lkdGggPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHtoZWlnaHQgPz8gXCI2MDBweFwifTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGFuaW1hdGlvbjogZmFkZUluIDAuM3MgZWFzZS1vdXQ7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgYm94LXNoYWRvdzogMCAxMHB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuLmJhbmstc2VsZWN0b3ItY29udGVudCB7XG4gIHBhZGRpbmc6IDI0cHg7XG4gIG1heC1oZWlnaHQ6IGNhbGMoJHtoZWlnaHQgPz8gXCI2MDBweFwifSAtIDQ4cHgpO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuLmJhbmstc2VsZWN0b3ItaGVhZGVyIHtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBmb250LXdlaWdodDogNjAwO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBjb2xvcjogIzFhMWExYTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmJhbmstbGlzdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMTJweDtcbn1cbi5iYW5rLWl0ZW0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiAxNnB4O1xuICBib3JkZXI6IDJweCBzb2xpZCAjZTVlNWU1O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbn1cbi5iYW5rLWl0ZW06aG92ZXIge1xuICBib3JkZXItY29sb3I6ICMzYjgyZjY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGZhZmM7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbiAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG59XG4uYmFuay1pdGVtOmFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cbi5iYW5rLWxvZ28ge1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIG9iamVjdC1maXQ6IGNvbnRhaW47XG4gIG1hcmdpbi1yaWdodDogMTZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U5ZWNlZjtcbn1cbi5iYW5rLWxvZ28tcGxhY2Vob2xkZXIge1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tcmlnaHQ6IDE2cHg7XG4gIGNvbG9yOiAjNmM3NTdkO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLmJhbmstaW5mbyB7XG4gIGZsZXg6IDE7XG59XG4uYmFuay1kaXNwbGF5LW5hbWUge1xuICBmb250LXNpemU6IDFyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiAjMWExYTFhO1xuICBtYXJnaW4tYm90dG9tOiAycHg7XG59XG4uYmFuay1uYW1lIHtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgY29sb3I6ICM2Yzc1N2Q7XG59XG4uY2FuY2VsLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0b3A6IC0xLjVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIHJpZ2h0OiAwO1xufVxuYDtcbmNvbnN0IGNyZWF0ZUFuZE9wZW5GcmFtZSA9ICh1cmwsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyBpZCwgdGl0bGUsIHdpZHRoLCBoZWlnaHQsIG5hbWUgfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtzdHlsZXMoeyB3aWR0aCwgaGVpZ2h0IH0pfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke3VybH1cIiBjbGFzcz1cImZyYW1lXCIgaWQ9XCIke2lkID8/IFwidGhyZWUtZHMtaWZyYW1lXCJ9XCIgdGl0bGU9XCIke3RpdGxlID8/IFwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwifVwiIGFsbG93PVwicGF5bWVudFwiIG5hbWU9XCIke25hbWUgPz8gXCJ0aHJlZS1kcy1pZnJhbWVcIn1cIj48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICBjb25zdCBpZnJhbWUgPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpO1xuICBjb25zdCBjYW5jZWxCdXR0b24gPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChob3N0KTtcbiAgcmV0dXJuIHsgaG9zdCwgaWZyYW1lLCBjYW5jZWxCdXR0b24gfTtcbn07XG5jb25zdCBjcmVhdGVBbmRPcGVuQmFua1NlbGVjdG9yID0gKGJhbmtzLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdGl0bGUgfSA9IG9wdGlvbnMgPz8ge307XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gICAgY29uc3QgYmFua0xpc3RIdG1sID0gYmFua3MubWFwKChiYW5rLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbG9nb0h0bWwgPSBiYW5rLnJlc291cmNlcy5sb2dvX3VybCA/IGA8aW1nIHNyYz1cIiR7YmFuay5yZXNvdXJjZXMubG9nb191cmx9XCIgYWx0PVwiJHtiYW5rLmRpc3BsYXlfbmFtZX1cIiBjbGFzcz1cImJhbmstbG9nb1wiIC8+YCA6IGA8ZGl2IGNsYXNzPVwiYmFuay1sb2dvLXBsYWNlaG9sZGVyXCI+JHtiYW5rLmRpc3BsYXlfbmFtZS5zdWJzdHJpbmcoMCwgMikudG9VcHBlckNhc2UoKX08L2Rpdj5gO1xuICAgICAgcmV0dXJuIGBcbiAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstaXRlbVwiIGRhdGEtYmFuay1pbmRleD1cIiR7aW5kZXh9XCI+XG4gICAgICAgICAgJHtsb2dvSHRtbH1cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1pbmZvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1kaXNwbGF5LW5hbWVcIj4ke2JhbmsuZGlzcGxheV9uYW1lfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstbmFtZVwiPiR7YmFuay5iYW5rX25hbWV9PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGBcbiAgICAgIDxzdHlsZT5cbiAgICAgICAgJHtiYW5rU2VsZWN0b3JTdHlsZXMoeyB3aWR0aCwgaGVpZ2h0IH0pfVxuICAgICAgPC9zdHlsZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLXNlbGVjdG9yLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLXNlbGVjdG9yLWhlYWRlclwiPiR7dGl0bGUgPz8gXCJTZWxlY3QgeW91ciBiYW5rXCJ9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1saXN0XCI+XG4gICAgICAgICAgICAgICR7YmFua0xpc3RIdG1sfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBjb25zdCBzaGFkb3dSb290ID0gaG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgICBzaGFkb3dSb290LmFwcGVuZENoaWxkKHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpKTtcbiAgICBjb25zdCBjYW5jZWxCdXR0b24gPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgICBjb25zdCBiYW5rSXRlbXMgPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYmFuay1pdGVtXCIpO1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGhvc3QpO1xuICAgIH07XG4gICAgY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICByZWplY3QobmV3IEVycm9yKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpKTtcbiAgICB9KTtcbiAgICBiYW5rSXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZXNvbHZlKGJhbmtzW2luZGV4XSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpO1xuICB9KTtcbn07XG5jb25zdCBjcmVhdGVBbmRPcGVuTWljcm9EZXBvc2l0Rm9ybSA9IChwYXltZW50TWV0aG9kVHlwZSwgb3B0aW9ucykgPT4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGJhc2VVcmwgfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYGFwcC9kaXJlY3RfZGViaXQvbWljcm9fZGVwb3NpdC8/dHlwZT0ke3BheW1lbnRNZXRob2RUeXBlfWAsIGJhc2VVcmwpLnRvU3RyaW5nKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBjcmVhdGVBbmRPcGVuRnJhbWUodXJsLCB7IHdpZHRoLCBoZWlnaHQsIHRpdGxlOiBcIk1pY3JvIERlcG9zaXQgRm9ybVwiIH0pO1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIikpO1xuICAgIH07XG4gICAgY29uc3Qgb25TdWNjZXNzID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiAmJiByZXNwb25zZS5wYXlsb2FkKSB7XG4gICAgICAgIGlmIChcImVycm9yXCIgaW4gcmVzcG9uc2UucGF5bG9hZCkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IocmVzcG9uc2UucGF5bG9hZC5lcnJvcikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UucGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gZmFpbGVkXCIpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2FuY2VsKTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoXG4gICAgICBlbGVtZW50cy5pZnJhbWUsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBuZXcgVVJMKGJhc2VVcmwpLm9yaWdpbixcbiAgICAgIFwibWljcm8tZGVwb3NpdC1zdGF0dXNcIixcbiAgICAgIE1pY3JvRGVwb3NpdFN0YXR1c1Jlc3BvbnNlXG4gICAgKTtcbiAgICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gICAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgfTtcbiAgICBjb25zdCBvcmlnaW5hbEhhbmRsZUNhbmNlbCA9IGhhbmRsZUNhbmNlbDtcbiAgICBjb25zdCB3cmFwcGVkSGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgY2xlYW51cEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgICBvcmlnaW5hbEhhbmRsZUNhbmNlbCgpO1xuICAgIH07XG4gICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgd3JhcHBlZEhhbmRsZUNhbmNlbCk7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gc3RhcnRQb2xsaW5nKGlmcmFtZSwgb25TdWNjZXNzLCBjaGlsZE9yaWdpbiwgdHlwZSwgcmVzcG9uc2VNb2RlbCkge1xuICBjb25zdCBoYW5kbGVQb2xsaW5nID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBwaW5nQ2RlRm9yU3RhdHVzKGlmcmFtZSwgY2hpbGRPcmlnaW4sIHR5cGUsIHJlc3BvbnNlTW9kZWwpO1xuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgICAgIG9uU3VjY2VzcyhzdGF0dXMpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgfVxuICB9O1xuICBoYW5kbGVQb2xsaW5nKCk7XG4gIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHNldEludGVydmFsKGhhbmRsZVBvbGxpbmcsIENERV9QT0xMSU5HX0lOVEVSVkFMKTtcbiAgcmV0dXJuIHBvbGxpbmdJbnRlcnZhbDtcbn1cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50cyh7XG4gIGVsZW1lbnRzLFxuICBwb2xsaW5nSW50ZXJ2YWwsXG4gIHJlc29sdmVcbn0pIHtcbiAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZ0ludGVydmFsKTtcbiAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICBlbGVtZW50cy5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9ICgpID0+IHtcbiAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIH07XG4gIHJldHVybiBjbGVhbnVwRXZlbnRMaXN0ZW5lcnM7XG59XG5hc3luYyBmdW5jdGlvbiBzdGFydDNkc1ZlcmlmaWNhdGlvbihwYXJhbXMpIHtcbiAgY29uc3QgeyB1cmwsIGJhc2VVcmwsIGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LCBmcmFtZVRpdGxlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGVsZW1lbnRzID0gY3JlYXRlQW5kT3BlbkZyYW1lKHVybCwgeyB3aWR0aDogZnJhbWVXaWR0aCwgaGVpZ2h0OiBmcmFtZUhlaWdodCwgdGl0bGU6IGZyYW1lVGl0bGUgfSk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChzdGF0dXMpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgICAgfSwgMWUzKTtcbiAgICAgIHJlc29sdmUoc3RhdHVzKTtcbiAgICAgIGNsZWFudXBFdmVudExpc3RlbmVycz8uKCk7XG4gICAgfTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoXG4gICAgICBlbGVtZW50cy5pZnJhbWUsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBuZXcgVVJMKGJhc2VVcmwpLm9yaWdpbixcbiAgICAgIFwicGluZy0zZHMtc3RhdHVzXCIsXG4gICAgICBQaW5nM0RTU3RhdHVzUmVzcG9uc2VcbiAgICApO1xuICAgIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9IGhhbmRsZUV2ZW50cyh7XG4gICAgICBlbGVtZW50cyxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbCxcbiAgICAgIHJlc29sdmVcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24ocGFyYW1zKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyAhPT0gVGhyZWVEU1N0YXR1cy5TVUNDRVNTKSB7XG4gICAgYXNzZXJ0TmV2ZXIocmVzdWx0LnN0YXR1cyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBocmVmOiByZXN1bHQuaHJlZlxuICB9O1xufTtcbmNvbnN0IG9wZW5Qb3B1cFdpbmRvdyA9IChwb3B1cE5hbWUsIHVybCwgb3B0aW9ucykgPT4ge1xuICBjb25zdCB0YXJnZXQgPSBvcHRpb25zID8gYG9wZW5wYXktJHtwb3B1cE5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV0rL2csIFwiLVwiKX1gIDogXCJfYmxhbmtcIjtcbiAgY29uc3QgZmVhdHVyZXMgPSBvcHRpb25zID8gW1xuICAgIFwicG9wdXA9eWVzXCIsXG4gICAgYHdpZHRoPSR7b3B0aW9ucy53aWR0aH1gLFxuICAgIGBoZWlnaHQ9JHtvcHRpb25zLmhlaWdodH1gLFxuICAgIGBsZWZ0PSR7TWF0aC5yb3VuZCh3aW5kb3cuc2NyZWVuWCArICh3aW5kb3cub3V0ZXJXaWR0aCAtIG9wdGlvbnMud2lkdGgpIC8gMil9YCxcbiAgICBgdG9wPSR7TWF0aC5yb3VuZCh3aW5kb3cuc2NyZWVuWSArICh3aW5kb3cub3V0ZXJIZWlnaHQgLSBvcHRpb25zLmhlaWdodCkgLyAyKX1gLFxuICAgIFwicmVzaXphYmxlPXllc1wiLFxuICAgIFwic2Nyb2xsYmFycz15ZXNcIlxuICBdLmpvaW4oXCIsXCIpIDogdm9pZCAwO1xuICBjb25zdCBwb3B1cFdpbmRvdyA9IHdpbmRvdy5vcGVuKHVybCwgdGFyZ2V0LCBmZWF0dXJlcyk7XG4gIGlmICghcG9wdXBXaW5kb3cpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cG9wdXBOYW1lfSBwb3B1cCB3aW5kb3cgYmxvY2tlZC4gUGxlYXNlIGFsbG93IHBvcHVwcyBmb3IgdGhpcyBzaXRlLmApO1xuICB9XG4gIHBvcHVwV2luZG93LmZvY3VzKCk7XG4gIHJldHVybiBwb3B1cFdpbmRvdztcbn07XG5jb25zdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0ID0gYXN5bmMgKHBvcHVwTmFtZSwgY2RlQ29ubiwgZXhwZWN0ZWRWZXJpZnlUb2tlbiwgdXJsKSA9PiB7XG4gIGNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9wdXAtdmVyaWZ5XCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHBvcHVwV2luZG93ID0gb3BlblBvcHVwV2luZG93KHBvcHVwTmFtZSwgdXJsKTtcbiAgICBjb25zdCBwb2xsaW5nID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdmVyaWZ5UmVzdWx0ID0gYXdhaXQgY2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWQoY2RlQ29ubiwgZXhwZWN0ZWRWZXJpZnlUb2tlbik7XG4gICAgICAgIGlmICh2ZXJpZnlSZXN1bHQucHJlc2VudCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZyk7XG4gICAgICAgICAgcG9wdXBXaW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICByZXNvbHZlKHsgaHJlZjogdmVyaWZ5UmVzdWx0LmhyZWYgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocG9wdXBXaW5kb3cuY2xvc2VkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3BvcHVwTmFtZX0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyX18oZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZyk7XG4gICAgICAgIHJlamVjdChnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn07XG5cbmNvbnN0IGRldGVjdExhbmd1YWdlID0gKCkgPT4ge1xuICBjb25zdCBsYW5ndWFnZXMgPSBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXMubGVuZ3RoID8gbmF2aWdhdG9yLmxhbmd1YWdlcyA6IFtuYXZpZ2F0b3IubGFuZ3VhZ2VdO1xuICBsZXQgbGFuZ3VhZ2UgPSBsYW5ndWFnZXM/LlswXTtcbiAgaWYgKGxhbmd1YWdlKSB7XG4gICAgbGFuZ3VhZ2UgPSBsYW5ndWFnZS5zcGxpdChcIi1cIilbMF07XG4gIH1cbiAgcmV0dXJuIGxhbmd1YWdlO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kdywgZXJyX186IGVycl9fJHcgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuY29uc3QgY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEgPSAoe1xuICByZXF1aXJlX3ppcF9jb2RlLFxuICByZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzLFxuICByZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyxcbiAgcGF5bWVudF9tZXRob2QsXG4gIGlzQnVzaW5lc3NQdXJjaGFzZVxufSwgbm9uQ2RlRm9ybUlucHV0cykgPT4ge1xuICBjb25zdCBjb25kaXRpb25hbEZpZWxkcyA9IHt9O1xuICBpZiAocGF5bWVudF9tZXRob2QgPT09IFwiYWNoXCIpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSB6LnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gei5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KTtcbiAgfVxuICBpZiAocmVxdWlyZV96aXBfY29kZSkge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAocmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzcykge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5MSU5FMV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuQ0lUWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU1RBVEVdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkNPVU5UUlldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChyZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcykge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19CVVNJTkVTU19QVVJDSEFTRV0gPz8gaXNCdXNpbmVzc1B1cmNoYXNlKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkJVU0lORVNTX05BTUVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKE9iamVjdC5rZXlzKGNvbmRpdGlvbmFsRmllbGRzKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUmVxdWlyZWRGb3JtRmllbGRzO1xuICB9XG4gIHJldHVybiBSZXF1aXJlZEZvcm1GaWVsZHMuZXh0ZW5kKGNvbmRpdGlvbmFsRmllbGRzKTtcbn07XG5jb25zdCB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHMgPSAobm9uQ2RlRm9ybUlucHV0cywgb25WYWxpZGF0aW9uRXJyb3IsIGRlZmF1bHRGaWVsZFZhbHVlcyA9IHt9KSA9PiB7XG4gIGlmIChkZWZhdWx0RmllbGRWYWx1ZXMpIHtcbiAgICBsb2dfXyR3KGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShkZWZhdWx0RmllbGRWYWx1ZXMpfWApO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0RmllbGRWYWx1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGVmYXVsdEZpZWxkVmFsdWVzW2tleV07XG4gICAgICBpZiAoIW5vbkNkZUZvcm1JbnB1dHNba2V5XSkge1xuICAgICAgICBub25DZGVGb3JtSW5wdXRzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSA9ICEhbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXTtcbiAgaWYgKG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10pIHtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTJdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTJdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUzXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUzXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNJVFldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNUQVRFXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNPVU5UUlldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXTtcbiAgfVxuICBjb25zdCB2YWxpZGF0aW9uU2NoZW1hID0gY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEoZGVmYXVsdEZpZWxkVmFsdWVzLCBub25DZGVGb3JtSW5wdXRzKTtcbiAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGlvblNjaGVtYS5zYWZlUGFyc2Uobm9uQ2RlRm9ybUlucHV0cyk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSByZXN1bHQuZXJyb3IuZm9ybWF0KCk7XG4gICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgY29uc3QgaXNzdWVLZXlzID0gT2JqZWN0LmtleXMoaXNzdWVzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlzc3VlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gaXNzdWVLZXlzW2ldO1xuICAgICAgY29uc3QgZXJyb3JzID0gaXNzdWVzW2ZpZWxkTmFtZV07XG4gICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9ycywgZmllbGROYW1lKTtcbiAgICB9XG4gICAgZXJyX18kdyhcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGlzc3Vlcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQWxtb3N0IHRoZXJlISBKdXN0IGEgZmV3IHRoaW5ncyBoaWdobGlnaHRlZCBhYm92ZSB0byBmaXggYmVmb3JlIHlvdSBjYW4gc3VibWl0LlwiKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LmRhdGE7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyR2LCBlcnJfXzogZXJyX18kdiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcztcbmNvbnN0IHZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyA9ICh0b2tlbml6ZVJlc3VsdHMsIG9uVmFsaWRhdGlvbkVycm9yKSA9PiB7XG4gIGZvciAoY29uc3QgdG9rZW5pemVSZXN1bHQgb2YgdG9rZW5pemVSZXN1bHRzKSB7XG4gICAgaWYgKHRva2VuaXplUmVzdWx0LnN1Y2Nlc3MgPT09IGZhbHNlKSB7XG4gICAgICB0b2tlbml6ZVJlc3VsdC5lcnJvcnMuZm9yRWFjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gQWxsRmllbGROYW1lcy5zYWZlUGFyc2UoZXJyb3IuZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgICAgICAgZXJyX18kdihgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke2Vycm9yLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIGVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBwYXJzZWQuZGF0YTtcbiAgICAgICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9yLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbG9nX18kdihgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkodG9rZW5pemVSZXN1bHQuZXJyb3JzKX1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyB3aGlsZSB0b2tlbml6aW5nIGNhcmRcIik7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCB7IGVycl9fOiBlcnJfXyR1IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vblwiKTtcbmNvbnN0IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtyZXNwb25zZS5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICB9XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiByZXNwb25zZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn07XG5jb25zdCBmaW5kQ3BtTWF0Y2hpbmdUeXBlID0gKGFsbENQTXMsIHpvZE1vZGVsKSA9PiB7XG4gIGNvbnN0IGNwbSA9IGFsbENQTXMuZmluZCgoY3BtMikgPT4gem9kTW9kZWwuc2FmZVBhcnNlKGNwbTIpLnN1Y2Nlc3MpO1xuICBpZiAoIWNwbSkge1xuICAgIGVycl9fJHUoYE5vIENQTXMgZm91bmQgZm9yIG1vZGVsLiBBbGwgbW9kZWxzOmAsIGFsbENQTXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWxgKTtcbiAgfVxuICByZXR1cm4gem9kTW9kZWwucGFyc2UoY3BtKTtcbn07XG5jb25zdCBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtID0gKGZpZWxkcywgY2hlY2tvdXRfc2V0dGluZ3MpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGZpZWxkcy5lbWFpbCxcbiAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBmaWVsZHMubGFzdE5hbWUsXG4gICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGZpZWxkcy5maXJzdE5hbWUsXG4gICAgY3VzdG9tZXJfYnVzaW5lc3NfbmFtZTogZmllbGRzLmJ1c2luZXNzTmFtZSxcbiAgICBjdXN0b21lcl90YXhfaWQ6IGZpZWxkcy50YXhJZCxcbiAgICBjdXN0b21lcl90YXhfaWRfdHlwZTogZmllbGRzLnRheElkVHlwZSxcbiAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMoZmllbGRzKSxcbiAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKGZpZWxkcywgY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpLFxuICAgIG5ld19jdXN0b21lcl9waG9uZTogZmllbGRzLnBob25lXG4gIH07XG59O1xuY29uc3QgcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCA9IGFzeW5jIChhcmdzKSA9PiB7XG4gIGNvbnN0IHsgbG9nX186IGxvZ19fMiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoYXJncy5sb2dQcmVmaXgpO1xuICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhcmdzLmFueUNkZUNvbm5lY3Rpb24pO1xuICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoYXJncy5jb25maXJtUmVzdWx0KTtcbiAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgbG9nX18yKGBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kLi4uYCk7XG4gICAgY29uc3Qgc2V0dXBSZXN1bHQgPSBhd2FpdCBmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZChhcmdzLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHBtX2lkOiBjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZFxuICAgIH0pO1xuICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBzZXR1cFJlc3VsdCB9O1xuICB9IGVsc2Uge1xuICAgIGlmIChhcmdzLnVzZVBheUZpcnN0Rmxvdykge1xuICAgICAgbG9nX18yKGBVc2luZyBwYXktZmlyc3QgZmxvdy4uLmApO1xuICAgICAgaWYgKCFhcmdzLmNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICAgICAgZXJyX18kdShcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGFyZ3MuY29uZmlybVJlc3VsdCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGFyZ3MuY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcGF5bWVudF9pbnB1dDogeyBwcm92aWRlcl90eXBlOiBhcmdzLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlciB9LFxuICAgICAgY3VzdG9tZXJfZW1haWw6IGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBjdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhhcmdzLnJlcXVpcmVkRm9ybUZpZWxkcyksXG4gICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMoYXJncy5yZXF1aXJlZEZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogY3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogYXJncy5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9O1xuICAgIGxvZ19fMihgRG9pbmcgY2hlY2tvdXQuLi5gLCBjaGVja291dFJlcXVlc3QpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcmZvcm1DaGVja291dChhcmdzLmFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgfVxufTtcblxuY29uc3QgUGF5bWVudFByb2Nlc3NvciA9IHouZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCIsIFwiYWR5ZW5cIiwgXCJwYXlwYWxcIiwgXCJwb2NreXRcIiwgXCJsb29wXCJdKTtcbih7XG4gIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZX0pO1xuY29uc3QgbG9hZFNjcmlwdCA9ICh7XG4gIHNjcmlwdElkLFxuICBzcmMsXG4gIGNoZWNrTG9hZGVkRm5cbn0pID0+IHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgc2NyaXB0LnNyYyA9IHNyYztcbiAgICBzY3JpcHQuaWQgPSBzY3JpcHRJZDtcbiAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xuICAgIGNvbnN0IGV4aXN0aW5nU2NyaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2NyaXB0SWQpO1xuICAgIGlmIChjaGVja0xvYWRlZEZuKCkpIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9IGVsc2UgaWYgKGV4aXN0aW5nU2NyaXB0KSB7XG4gICAgICBzY3JpcHQgPSBleGlzdGluZ1NjcmlwdDtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cbiAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwibG9hZFwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBldmVudExpc3RlbmVyQ29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IGV2ZW50TGlzdGVuZXJDb250cm9sbGVyLnNpZ25hbCB9XG4gICAgKTtcbiAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwiZXJyb3JcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgcmVqZWN0KFwiRmFpbGVkIHRvIGxvYWQgdGhlIHNjcmlwdFwiKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIuc2lnbmFsIH1cbiAgICApO1xuICB9KTtcbn07XG5cbmNvbnN0IGdldFBheW1lbnREYXRhUmVxdWVzdCA9ICh7XG4gIGdhdGV3YXksXG4gIGdhdGV3YXlNZXJjaGFudElkLFxuICBtZXJjaGFudE5hbWUsXG4gIG1lcmNoYW50SWQsXG4gIGluaXRpYWxQcmV2aWV3LFxuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICBwcmVmaWxsXG59KSA9PiB7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmFtb3VudEF0b20gPz8gaW5pdGlhbFByZXZpZXc/LmFtb3VudEF0b20gPz8gMDtcbiAgY29uc3QgdG90YWxQcmljZSA9IE1hdGgubWF4KGFtb3VudEF0b20gLyAxMDAsIDApO1xuICBjb25zdCBjdXJyZW5jeUNvZGUgPSAob3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uYW1vdW50Py5jdXJyZW5jeSA/PyBwcmVmaWxsPy5jdXJyZW5jeSA/PyBpbml0aWFsUHJldmlldy5jdXJyZW5jeSkudG9VcHBlckNhc2UoKTtcbiAgY29uc3QgYmFzZVJlcXVlc3QgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogdHJ1ZSxcbiAgICAgICAgICBhbGxvd1ByZXBhaWRDYXJkczogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5LFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6IHRydWUsXG4gICAgc2hpcHBpbmdBZGRyZXNzUmVxdWlyZWQ6IHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IG1lcmNoYW50SWQgPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZVxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlLFxuICAgICAgdG90YWxQcmljZVN0YXR1czogb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8ucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiB0b3RhbFByaWNlLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIGlmICghb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QpIHJldHVybiBiYXNlUmVxdWVzdDtcbiAgaWYgKHR5cGVvZiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4geyAuLi5iYXNlUmVxdWVzdCwgLi4ub3ZlcnJpZGVQYXltZW50UmVxdWVzdC5nb29nbGVQYXlQYXltZW50UmVxdWVzdChiYXNlUmVxdWVzdCkgfTtcbiAgfVxuICByZXR1cm4geyAuLi5iYXNlUmVxdWVzdCwgLi4ub3ZlcnJpZGVQYXltZW50UmVxdWVzdC5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9O1xufTtcbmNvbnN0IGxvYWRHb29nbGVQYXlTY3JpcHQgPSAoKSA9PiB7XG4gIHJldHVybiBsb2FkU2NyaXB0KHtcbiAgICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2dvb2dsZV9wYXlfc2RrXCIsXG4gICAgc3JjOiBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIixcbiAgICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5nb29nbGU/LnBheW1lbnRzPy5hcGlcbiAgfSk7XG59O1xubGV0IHBheW1lbnRzQ2xpZW50ID0gbnVsbDtcbmNvbnN0IGdldEdvb2dsZVBheUVudmlyb25tZW50ID0gYXN5bmMgKGJhc2VVcmwpID0+IHtcbiAgY29uc3QgZW52ID0gYXdhaXQgZ2V0Q3VycmVudEVudihiYXNlVXJsKTtcbiAgcmV0dXJuIGVudiA9PT0gXCJwcm9kXCIgPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiO1xufTtcbmNvbnN0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50ID0gYXN5bmMgKGJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCkgPT4ge1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGF3YWl0IGdldEdvb2dsZVBheUVudmlyb25tZW50KGJhc2VVcmwpO1xuICBpZiAocGF5bWVudHNDbGllbnQgPT09IG51bGwpIHtcbiAgICBwYXltZW50c0NsaWVudCA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgICBlbnZpcm9ubWVudCxcbiAgICAgIG1lcmNoYW50SW5mbzogcGF5bWVudERhdGFSZXF1ZXN0Lm1lcmNoYW50SW5mb1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBwYXltZW50c0NsaWVudDtcbn07XG5jb25zdCBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICBjb25zdCBjb21tb25BY3Rpb24gPSByZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICBpZiAoIWNvbW1vbkFjdGlvbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UoY29tbW9uQWN0aW9uKTtcbn07XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheSA9IChmb3JtSW5wdXRzLCBwYXltZW50RGF0YSkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8uaW5mbz8uYmlsbGluZ0FkZHJlc3M7XG4gIGNvbnN0IHNoaXBwaW5nQWRkcmVzcyA9IHBheW1lbnREYXRhLnNoaXBwaW5nQWRkcmVzcztcbiAgaWYgKGJpbGxpbmdBZGRyZXNzKSB7XG4gICAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5sYXN0TmFtZVBhcnRzXSA9IGJpbGxpbmdBZGRyZXNzLm5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgICBjb25zdCBwYXllckxhc3ROYW1lID0gbGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBwYXltZW50RGF0YS5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MSU5FMV0gPSBpbnB1dHNbRmllbGROYW1lLkxJTkUxXSB8fCBiaWxsaW5nQWRkcmVzcy5hZGRyZXNzMSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTElORTJdID0gaW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl0gfHwgYmlsbGluZ0FkZHJlc3MuYWRkcmVzczIgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxJTkUzXSA9IGlucHV0c1tGaWVsZE5hbWUuTElORTNdIHx8IGJpbGxpbmdBZGRyZXNzLmFkZHJlc3MzIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DSVRZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ0lUWV0gfHwgYmlsbGluZ0FkZHJlc3MubG9jYWxpdHkgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlNUQVRFXSA9IGlucHV0c1tGaWVsZE5hbWUuU1RBVEVdIHx8IGJpbGxpbmdBZGRyZXNzLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IGJpbGxpbmdBZGRyZXNzLmNvdW50cnlDb2RlIHx8IFwiVVNcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IGJpbGxpbmdBZGRyZXNzLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IGZpcnN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcGF5ZXJGaXJzdE5hbWUgfHwgXCJcIjtcbiAgICBjb25zdCBsYXN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiXCI7XG4gICAgaWYgKGZpcnN0TmFtZSB8fCBsYXN0TmFtZSkge1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgICB9XG4gIH1cbiAgaWYgKHNoaXBwaW5nQWRkcmVzcykge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTFdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gfHwgc2hpcHBpbmdBZGRyZXNzLmFkZHJlc3MxIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMl0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUyXSB8fCBzaGlwcGluZ0FkZHJlc3MuYWRkcmVzczIgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUzXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdIHx8IHNoaXBwaW5nQWRkcmVzcy5hZGRyZXNzMyB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldIHx8IHNoaXBwaW5nQWRkcmVzcy5sb2NhbGl0eSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV0gfHwgc2hpcHBpbmdBZGRyZXNzLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0gfHwgc2hpcHBpbmdBZGRyZXNzLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldIHx8IHNoaXBwaW5nQWRkcmVzcy5jb3VudHJ5Q29kZSB8fCBcIlVTXCI7XG4gIH1cbiAgcmV0dXJuIGlucHV0cztcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHUsIGVycl9fOiBlcnJfXyR0IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1iYWNzXCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4QkFDU0Zsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgdmVyaWZpY2F0aW9uTWV0aG9kID0gY3VzdG9tUGFyYW1zLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInRydWVsYXllclwiO1xuICAgIGxldCBtaWNyb0RlcG9zaXREYXRhID0gbnVsbDtcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgbG9nX18kdShcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBtaWNyb0RlcG9zaXREYXRhID0gYXdhaXQgY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0oXCJiYWNzX2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMzUwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJHUoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kdShcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBhdmFpbGFibGVCYW5rcyA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5hdmFpbGFibGVfYmFua3M7XG4gICAgbGV0IHNlbGVjdGVkQmFuaztcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcInRydWVsYXllclwiICYmIGF2YWlsYWJsZUJhbmtzICYmIGF2YWlsYWJsZUJhbmtzLmxlbmd0aCA+PSAxKSB7XG4gICAgICBsb2dfXyR1KFwiTXVsdGlwbGUgYmFua3MgYXZhaWxhYmxlLCBzaG93aW5nIGJhbmsgc2VsZWN0b3IuLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBzZWxlY3RlZEJhbmsgPSBhd2FpdCBjcmVhdGVBbmRPcGVuQmFua1NlbGVjdG9yKGF2YWlsYWJsZUJhbmtzLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNTAwcHhcIixcbiAgICAgICAgICB0aXRsZTogXCJTZWxlY3QgYmFua1wiXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyR1KGBCYW5rIHNlbGVjdGVkOiAke3NlbGVjdGVkQmFuay5kaXNwbGF5X25hbWV9YCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dfXyR1KFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGJpbGxpbmdBZGRyZXNzID0gZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgY29uc3QgZGlyZWN0RGViaXREYXRhID0ge1xuICAgICAgdHlwZTogXCJiYWNzX2RpcmVjdF9kZWJpdFwiLFxuICAgICAgYmFjc19kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gVHJ1ZUxheWVyXG4gICAgICAgIGJhbmtfbmFtZTogc2VsZWN0ZWRCYW5rPy5iYW5rX25hbWUsXG4gICAgICAgIC8vIE1pY3JvZGVwb3NpdFxuICAgICAgICBvd25lcl9uYW1lOiBnZXRGdWxsTmFtZShub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSwgbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGNvdW50cnlfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgIGFjY291bnRfbnVtYmVyOiBtaWNyb0RlcG9zaXREYXRhPy5hY2NvdW50X251bWJlcixcbiAgICAgICAgc29ydF9jb2RlOiBtaWNyb0RlcG9zaXREYXRhPy5zb3J0X2NvZGUsXG4gICAgICAgIGFkZHJlc3M6IHsgLi4uYmlsbGluZ0FkZHJlc3MsIHRvd246IGJpbGxpbmdBZGRyZXNzLmNpdHksIHBvc3Rjb2RlOiBiaWxsaW5nQWRkcmVzcy56aXBfY29kZSB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IGRpcmVjdERlYml0RGF0YVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApPy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHJlZGlyZWN0VXJsKSB7XG4gICAgICBsb2dfXyR1KFwiQkFDUyB2ZXJpZmljYXRpb24gcmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkJBQ1MgdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgbG9nX18kdShg4pWwIEJBQ1MgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCQUNTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQkFDUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuZXdDb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWJhY3NcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IG5ld0NvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kdChcIkJBQ1MgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyR0LCBlcnJfXzogZXJyX18kcyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtZWZ0XCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4RUZURmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCB2ZXJpZmljYXRpb25NZXRob2QgPSBjdXN0b21QYXJhbXMudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwicGxhaWRcIjtcbiAgICBsZXQgbWljcm9EZXBvc2l0RGF0YSA9IG51bGw7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJtaWNyb19kZXBvc2l0XCIpIHtcbiAgICAgIGxvZ19fJHQoXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWljcm9EZXBvc2l0RGF0YSA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5NaWNyb0RlcG9zaXRGb3JtKFwiZWZ0X2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNDUwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJHQoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kdChcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBkaXJlY3REZWJpdERhdGEgPSB7XG4gICAgICB0eXBlOiBcImVmdF9kaXJlY3RfZGViaXRcIixcbiAgICAgIGVmdF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gUGxhaWRcbiAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogY3VzdG9tUGFyYW1zLmlzQnVzaW5lc3NBY2NvdW50ID8/IGZhbHNlLFxuICAgICAgICBvd25lcl9uYW1lOiBnZXRGdWxsTmFtZShub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSwgbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIC8vIE1pY3JvZGVwb3NpdFxuICAgICAgICBpbnN0aXR1dGlvbl9udW1iZXI6IG1pY3JvRGVwb3NpdERhdGE/Lmluc3RpdHV0aW9uX251bWJlcixcbiAgICAgICAgdHJhbnNpdF9udW1iZXI6IG1pY3JvRGVwb3NpdERhdGE/LnRyYW5zaXRfbnVtYmVyLFxuICAgICAgICBhY2NvdW50X251bWJlcjogbWljcm9EZXBvc2l0RGF0YT8uYWNjb3VudF9udW1iZXJcbiAgICAgICAgLy8gbWFuZGF0ZV92ZXJzaW9uOiB1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiB2ZXJpZmljYXRpb25NZXRob2QsXG4gICAgICAgIGRpcmVjdF9kZWJpdF9kYXRhOiBkaXJlY3REZWJpdERhdGFcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKT8ucmVkaXJlY3RfdXJsO1xuICAgIGlmIChyZWRpcmVjdFVybCkge1xuICAgICAgbG9nX18kdChcIkVGVCB2ZXJpZmljYXRpb24gcmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkVGVCB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBsb2dfXyR0KGDilbAgRUZUIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRUZUIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRUZUIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZWZ0XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBuZXdDb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJHMoXCJFRlQgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRzLCBlcnJfXzogZXJyX18kciB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtc2VwYVwiKTtcbmNvbnN0IHJ1bkFpcndhbGxleFNFUEFGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHZlcmlmaWNhdGlvbk1ldGhvZCA9IGN1c3RvbVBhcmFtcy52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJ0cnVlbGF5ZXJcIjtcbiAgICBsZXQgbWljcm9EZXBvc2l0RGF0YSA9IG51bGw7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJtaWNyb19kZXBvc2l0XCIpIHtcbiAgICAgIGxvZ19fJHMoXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWljcm9EZXBvc2l0RGF0YSA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5NaWNyb0RlcG9zaXRGb3JtKFwic2VwYV9kaXJlY3RfZGViaXRcIiwge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjMwMHB4XCIsXG4gICAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRzKFwiTWljcm8gZGVwb3NpdCBkYXRhIGNvbGxlY3RlZFwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ19fJHMoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydEZsb3dOZXh0QWN0aW9ucyA9IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgY29uc2VudElkID0gc3RhcnRGbG93TmV4dEFjdGlvbnM/LmNvbnNlbnRfaWQ7XG4gICAgY29uc3QgYXZhaWxhYmxlQmFua3MgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uYXZhaWxhYmxlX2JhbmtzO1xuICAgIGxldCBzZWxlY3RlZEJhbms7XG4gICAgaWYgKHZlcmlmaWNhdGlvbk1ldGhvZCA9PT0gXCJ0cnVlbGF5ZXJcIiAmJiBhdmFpbGFibGVCYW5rcyAmJiBhdmFpbGFibGVCYW5rcy5sZW5ndGggPj0gMSkge1xuICAgICAgbG9nX18kcyhcIk11bHRpcGxlIGJhbmtzIGF2YWlsYWJsZSwgc2hvd2luZyBiYW5rIHNlbGVjdG9yLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2VsZWN0ZWRCYW5rID0gYXdhaXQgY3JlYXRlQW5kT3BlbkJhbmtTZWxlY3RvcihhdmFpbGFibGVCYW5rcywge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjUwMHB4XCIsXG4gICAgICAgICAgdGl0bGU6IFwiU2VsZWN0IGJhbmtcIlxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kcyhgQmFuayBzZWxlY3RlZDogJHtzZWxlY3RlZEJhbmsuZGlzcGxheV9uYW1lfWApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kcyhcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcInNlcGFfZGlyZWN0X2RlYml0XCIsXG4gICAgICAgICAgc2VwYV9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgICAgIC8vIHRydWVsYXllclxuICAgICAgICAgICAgYmFua19uYW1lOiBzZWxlY3RlZEJhbms/LmJhbmtfbmFtZSxcbiAgICAgICAgICAgIGNvdW50cnlfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgICAvLyBtaWNyb2RlcG9zaXRcbiAgICAgICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgICAgICBpYmFuOiBtaWNyb0RlcG9zaXREYXRhPy5pYmFuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk/LnJlZGlyZWN0X3VybDtcbiAgICBpZiAocmVkaXJlY3RVcmwpIHtcbiAgICAgIGxvZ19fJHMoXCJTRVBBIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiU0VQQSB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBsb2dfXyRzKGDilbAgU0VQQSB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNFUEEgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTRVBBIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtc2VwYVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogbmV3Q29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRyKFwiU0VQQSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHIsIGVycl9fOiBlcnJfXyRxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFpcndhbGxleC1jY1wiKTtcbmNvbnN0IEFpcndhbGxleDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzID0gei5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBwYXJzZVJlc3BvbnNlSGVhZGVycyQzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gQWlyd2FsbGV4M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMuc2FmZVBhcnNlKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG4gICAgY29uc3QgZGV2RXJyID0gYEFpcndhbGxleCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gO1xuICAgIGVycl9fJHEoZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdICE9PSB2b2lkIDA7XG59O1xuY29uc3QgcGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmID0gKGhyZWYpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBpbnRlbnRJZCA9IG5ldyBVUkwoaHJlZiA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCFpbnRlbnRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICB9XG4gICAgbG9nX18kcihgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHtpbnRlbnRJZH1dYCk7XG4gICAgcmV0dXJuIGludGVudElkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVyck1zZyA9IGBFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LmA7XG4gICAgZXJyX18kcShlcnJNc2csIGBSZXN1bHRpbmcgVVJMOiAke2hyZWZ9LlxuRXJyb3I6ICR7Z2V0RXJyb3JNZXNzYWdlKGVycm9yKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgfVxufTtcbmNvbnN0IHJ1bkFpcndhbGxleDNkc0Zsb3cgPSBhc3luYyAoYmFzZVVybCwgZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDMoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCh7IHVybDogaGVhZGVyc1tcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdLCBiYXNlVXJsIH0pO1xuICBjb25zdCBpbnRlbnRJZCA9IHBhcnNlSW50ZW50SWRGcm9tM2RzSHJlZihyZXN1bHQuaHJlZiA/PyBcIlwiKTtcbiAgY29uc3QgaW5pdGlhbEludGVudElkID0gaGVhZGVyc1tcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiXTtcbiAgaWYgKGluaXRpYWxJbnRlbnRJZCAhPT0gaW50ZW50SWQpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7aW50ZW50SWR9KSBkb2VzIG5vdCBtYXRjaCB0aGUgaW5pdGlhbCBpbnRlbnQgSUQgKCR7aW5pdGlhbEludGVudElkfSkuYDtcbiAgICBlcnJfXyRxKGRldkVycik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICBjb25zdCBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBpbnRlbnRJZCxcbiAgICAgIGNvbnNlbnRfaWQ6IGhlYWRlcnNbXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiXVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGV4dHJhTWV0YWRhdGFGb3JDaGVja291dDtcbn07XG5jb25zdCBBcHBsZVBheUNwbSQyID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgR29vZ2xlUGF5Q3BtJDIgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5jb25zdCBsb2FkQXBwbGVQYXlTY3JpcHQgPSAoKSA9PiB7XG4gIHJldHVybiBsb2FkU2NyaXB0KHtcbiAgICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2FwcGxlX3BheV9zZGtcIixcbiAgICBzcmM6IFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tL2pzYXBpLzEubGF0ZXN0L2FwcGxlLXBheS1zZGsuanNcIixcbiAgICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5BcHBsZVBheVNlc3Npb25cbiAgfSk7XG59O1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheSA9IChmb3JtSW5wdXRzLCBhcHBsZVBheVBheW1lbnQpID0+IHtcbiAgY29uc3QgcG1CaWxsaW5nQ29udGFjdCA9IGFwcGxlUGF5UGF5bWVudC50b2tlbi5wYXltZW50TWV0aG9kLmJpbGxpbmdDb250YWN0O1xuICBjb25zdCBiaWxsaW5nQ29udGFjdCA9IGFwcGxlUGF5UGF5bWVudC5iaWxsaW5nQ29udGFjdDtcbiAgY29uc3Qgc2hpcHBpbmdDb250YWN0ID0gYXBwbGVQYXlQYXltZW50LnNoaXBwaW5nQ29udGFjdDtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGlmIChwbUJpbGxpbmdDb250YWN0IHx8IGJpbGxpbmdDb250YWN0IHx8IHNoaXBwaW5nQ29udGFjdCkge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgcG1CaWxsaW5nQ29udGFjdD8uZW1haWxBZGRyZXNzIHx8IGJpbGxpbmdDb250YWN0Py5lbWFpbEFkZHJlc3MgfHwgc2hpcHBpbmdDb250YWN0Py5lbWFpbEFkZHJlc3MgfHwgXCJvcF91bmZpbGxlZEBlbWFpbC5jb21cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBwbUJpbGxpbmdDb250YWN0Py5jb3VudHJ5Q29kZSB8fCBiaWxsaW5nQ29udGFjdD8uY291bnRyeUNvZGUgfHwgc2hpcHBpbmdDb250YWN0Py5jb3VudHJ5Q29kZSB8fCBcIlVTXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBwbUJpbGxpbmdDb250YWN0Py5wb3N0YWxDb2RlIHx8IGJpbGxpbmdDb250YWN0Py5wb3N0YWxDb2RlIHx8IHNoaXBwaW5nQ29udGFjdD8ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwbUJpbGxpbmdDb250YWN0Py5naXZlbk5hbWUgfHwgYmlsbGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBcIlwiO1xuICAgIGNvbnN0IGxhc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgYmlsbGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgc2hpcHBpbmdDb250YWN0Py5mYW1pbHlOYW1lIHx8IFwiXCI7XG4gICAgaWYgKGZpcnN0TmFtZSB8fCBsYXN0TmFtZSkge1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlucHV0cztcbn07XG56Lm9iamVjdCh7XG4gIGRhdGE6IHoub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gICAgZXJyb3JzOiB6LmFycmF5KHouYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6LnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6LmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuY29uc3QgY3JlYXRlUmVjdXJyaW5nUGF5bWVudFJlcXVlc3QgPSAoe1xuICB0b3RhbCxcbiAgcHJlZmlsbFxufSkgPT4ge1xuICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IHRvdGFsLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke3ByZWZpbGwudG9rZW59YCwgRlJBTUVfQkFTRV9VUkwpLnRvU3RyaW5nKClcbiAgICB9O1xuICB9XG4gIGNvbnN0IGxpbmVJdGVtID0gcHJlZmlsbC5saW5lX2l0ZW1zPy5bMF07XG4gIGlmICghbGluZUl0ZW0pIHJldHVybiB2b2lkIDA7XG4gIGNvbnN0IGFwcGxlSW50ZXJ2YWxVbml0ID0gbGluZUl0ZW0/LmJpbGxpbmdfaW50ZXJ2YWwgPT09IFwid2Vla1wiID8gXCJkYXlcIiA6IGxpbmVJdGVtPy5iaWxsaW5nX2ludGVydmFsO1xuICBjb25zdCBhcHBsZUludGVydmFsQ291bnQgPSBsaW5lSXRlbT8uYmlsbGluZ19pbnRlcnZhbF9jb3VudCA/IGxpbmVJdGVtPy5iaWxsaW5nX2ludGVydmFsID09PSBcIndlZWtcIiA/IGxpbmVJdGVtPy5iaWxsaW5nX2ludGVydmFsX2NvdW50ICogNyA6IGxpbmVJdGVtPy5iaWxsaW5nX2ludGVydmFsX2NvdW50IDogdm9pZCAwO1xuICByZXR1cm4ge1xuICAgIHBheW1lbnREZXNjcmlwdGlvbjogbGluZUl0ZW0/LmRlc2NyaXB0aW9uID8/IFwiXCIsXG4gICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgIGFtb3VudDogdG90YWwuYW1vdW50LFxuICAgICAgbGFiZWw6IGxpbmVJdGVtPy5kZXNjcmlwdGlvbiA/PyBcIlwiLFxuICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsVW5pdDogYXBwbGVJbnRlcnZhbFVuaXQsXG4gICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxDb3VudDogYXBwbGVJbnRlcnZhbENvdW50LFxuICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgIHR5cGU6IFwiZmluYWxcIlxuICAgIH0sXG4gICAgbWFuYWdlbWVudFVSTDogYGh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tL3BheS8ke3ByZWZpbGwudG9rZW59YFxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZUFwcGxlUGF5VG90YWwgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICBpbml0aWFsUHJldmlldyxcbiAgcHJlZmlsbCxcbiAgZGVmYXVsdExhYmVsID0gXCJUb3RhbFwiXG59KSA9PiB7XG4gIGNvbnN0IGN1cnJlbmN5Q29kZSA9IChvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmN1cnJlbmN5ID8/IHByZWZpbGw/LmN1cnJlbmN5ID8/IGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCBhbW91bnRBdG9tID0gb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uYW1vdW50Py5hbW91bnRBdG9tID8/IGluaXRpYWxQcmV2aWV3Py5hbW91bnRBdG9tID8/IDA7XG4gIGNvbnN0IGFtb3VudCA9IChhbW91bnRBdG9tIC8gMTAwKS50b0ZpeGVkKDIpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5Q29kZSxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmxhYmVsID8/IGRlZmF1bHRMYWJlbCA/PyBcIlRvdGFsXCIsXG4gICAgICB0eXBlOiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5wZW5kaW5nID8gXCJwZW5kaW5nXCIgOiBcImZpbmFsXCIsXG4gICAgICBhbW91bnRcbiAgICB9XG4gIH07XG59O1xuY29uc3QgZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gIGluaXRpYWxQcmV2aWV3LFxuICBwcmVmaWxsLFxuICBkZWZhdWx0TGFiZWxcbn0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW5jeUNvZGUsIHRvdGFsIH0gPSBjcmVhdGVBcHBsZVBheVRvdGFsKHtcbiAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgIGluaXRpYWxQcmV2aWV3LFxuICAgIHByZWZpbGwsXG4gICAgZGVmYXVsdExhYmVsXG4gIH0pO1xuICBsZXQgcGF5bWVudFJlcXVlc3QgPSB7XG4gICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICBjdXJyZW5jeUNvZGUsXG4gICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1xuICAgICAgXCJlbWFpbFwiLFxuICAgICAgLi4ucHJlZmlsbC5jaGVja291dF9zZXR0aW5ncy5yZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyA/IFtcInBvc3RhbEFkZHJlc3NcIl0gOiBbXVxuICAgIF0sXG4gICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCIsIFwiamNiXCJdLFxuICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXCJzdXBwb3J0czNEU1wiLCBcInN1cHBvcnRzQ3JlZGl0XCIsIFwic3VwcG9ydHNEZWJpdFwiXSxcbiAgICB0b3RhbFxuICB9O1xuICBjb25zdCBpc0FsbFJlY3VycmluZyA9IHByZWZpbGwubGluZV9pdGVtcy5ldmVyeSgoaXRlbSkgPT4gaXRlbS5iaWxsaW5nX2ludGVydmFsICYmIGl0ZW0uYmlsbGluZ19pbnRlcnZhbF9jb3VudCk7XG4gIGlmIChpc0FsbFJlY3VycmluZykge1xuICAgIHBheW1lbnRSZXF1ZXN0LnJlY3VycmluZ1BheW1lbnRSZXF1ZXN0ID0gY3JlYXRlUmVjdXJyaW5nUGF5bWVudFJlcXVlc3Qoe1xuICAgICAgdG90YWwsXG4gICAgICBwcmVmaWxsXG4gICAgfSk7XG4gIH1cbiAgaWYgKCFvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KSByZXR1cm4gcGF5bWVudFJlcXVlc3Q7XG4gIGlmICh0eXBlb2Ygb3ZlcnJpZGVQYXltZW50UmVxdWVzdC5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBwYXltZW50UmVxdWVzdCA9IHtcbiAgICAgIC4uLnBheW1lbnRSZXF1ZXN0LFxuICAgICAgLi4ub3ZlcnJpZGVQYXltZW50UmVxdWVzdC5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHBheW1lbnRSZXF1ZXN0KVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcGF5bWVudFJlcXVlc3QgPSB7IC4uLnBheW1lbnRSZXF1ZXN0LCAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgfTtcbiAgfVxuICByZXR1cm4gcGF5bWVudFJlcXVlc3Q7XG59O1xuXG5jb25zdCBBZHllbkVudmlyb25tZW50ID0gei5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKTtcbmNvbnN0IEFkeWVuTG9jYWxlID0gei5lbnVtKFtcbiAgXCJhclwiLFxuICBcImJnLUJHXCIsXG4gIFwiY2EtRVNcIixcbiAgXCJjcy1DWlwiLFxuICBcImRhLURLXCIsXG4gIFwiZGUtREVcIixcbiAgXCJlbC1HUlwiLFxuICBcImVuLVVTXCIsXG4gIFwiZXMtRVNcIixcbiAgXCJldC1FRVwiLFxuICBcImZpLUZJXCIsXG4gIFwiZnItRlJcIixcbiAgXCJoci1IUlwiLFxuICBcImh1LUhVXCIsXG4gIFwiaXMtSVNcIixcbiAgXCJpdC1JVFwiLFxuICBcImphLUpQXCIsXG4gIFwia28tS1JcIixcbiAgXCJsdC1MVFwiLFxuICBcImx2LUxWXCIsXG4gIFwibmwtTkxcIixcbiAgXCJuby1OT1wiLFxuICBcInBsLVBMXCIsXG4gIFwicHQtQlJcIixcbiAgXCJwdC1QVFwiLFxuICBcInJvLVJPXCIsXG4gIFwicnUtUlVcIixcbiAgXCJzay1TS1wiLFxuICBcInNsLVNJXCIsXG4gIFwic3YtU0VcIixcbiAgXCJ6aC1DTlwiLFxuICBcInpoLVRXXCJcbl0pO1xuY29uc3QgeyBsb2dfXzogbG9nX18kcSwgZXJyX186IGVycl9fJHAgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYWR5ZW4tY2NcIik7XG5jb25zdCBBZHllbjNkc1Jlc3BvbnNlSGVhZGVycyA9IHoub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tY2xpZW50LWtleVwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IEFkeWVuRW52aXJvbm1lbnQsXG4gIFwib3AtYWR5ZW4tYWN0aW9uXCI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG5jb25zdCBwYXJzZVJlc3BvbnNlSGVhZGVycyQyID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gQWR5ZW4zZHNSZXNwb25zZUhlYWRlcnMuc2FmZVBhcnNlKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgZXJyX18kcChgQWR5ZW4gM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlcnJvclJlc3BvbnNlSGVhZGVycyl9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBkZWNvZGVBZHllbkFjdGlvbiA9IChhY3Rpb24pID0+IHtcbiAgY29uc3QgZGVzZXJpYWxpemVkID0gSlNPTi5wYXJzZShhY3Rpb24pO1xuICByZXR1cm4gZGVzZXJpYWxpemVkO1xufTtcbmNvbnN0IGlzQWR5ZW5BdmFpbGFibGUgPSAoKSA9PiB7XG4gIHJldHVybiBcIkFkeWVuV2ViXCIgaW4gd2luZG93ICYmIFwiQWR5ZW5DaGVja291dFwiIGluIHdpbmRvd1tcIkFkeWVuV2ViXCJdO1xufTtcbmNvbnN0IGdldEFkeWVuQ2hlY2tvdXQgPSBhc3luYyAoKSA9PiB7XG4gIGxvZ19fJHEoXCJXYWl0aW5nIGZvciBBZHllbiBTREsgdG8gbG9hZC4uLlwiKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgaWYgKCFpc0FkeWVuQXZhaWxhYmxlKCkpIHtcbiAgICAgIGF3YWl0IHNsZWVwKDUwMCk7XG4gICAgfVxuICB9XG4gIGlmICghaXNBZHllbkF2YWlsYWJsZSgpKSB7XG4gICAgZXJyX18kcChcIkFkeWVuIFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgbG9nX18kcShcIkFkeWVuIFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICByZXR1cm4gd2luZG93W1wiQWR5ZW5XZWJcIl1bXCJBZHllbkNoZWNrb3V0XCJdO1xufTtcbmNvbnN0IGhhbmRsZUFkeWVuM2RzID0gKHBhcmFtcykgPT4ge1xuICBjb25zdCB7IGhlYWRlcnMsIGxvY2FsZSwgY291bnRyeUNvZGUsIGNvbXBvbmVudCwgaG9zdCwgY2FuY2VsQnV0dG9uIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGFjdGlvbiA9IGRlY29kZUFkeWVuQWN0aW9uKGhlYWRlcnNbXCJvcC1hZHllbi1hY3Rpb25cIl0pO1xuICBsb2dfXyRxKGBSdW5uaW5nIEFkeWVuIDNEUyBmbG93IGZvciBhY3Rpb24gdHlwZTogJHthY3Rpb24udHlwZX1gKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGxvZ19fJHEoXCJDbGVhbmluZyB1cCBBZHllbiAzRFMgZmxvd1wiKTtcbiAgICAgIGNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DYW5jZWwpO1xuICAgICAgaG9zdC5yZW1vdmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uUGF5bWVudEZhaWxlZCA9IChzdGF0ZSkgPT4ge1xuICAgICAgZXJyX18kcChcIkF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUmVzdWx0OlwiLCBzdGF0ZSk7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkZBSUxVUkUsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBvbkVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICBlcnJfXyRwKFwiQWR5ZW4gZXJyb3I6XCIsIGVycm9yKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuRkFJTFVSRSwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG9uQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBjYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2FuY2VsKTtcbiAgICBjb25zdCBvbkFkZGl0aW9uYWxEZXRhaWxzID0gKHN0YXRlLCBfLCBfXykgPT4ge1xuICAgICAgaG9zdC5yZW1vdmUoKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuU1VDQ0VTUywgYWRkaXRpb25hbERldGFpbHM6IHN0YXRlLCBjbGVhbnVwIH0pO1xuICAgIH07XG4gICAgZ2V0QWR5ZW5DaGVja291dCgpLnRoZW4oXG4gICAgICAoYWR5ZW5DaGVja291dCkgPT4gYWR5ZW5DaGVja291dCh7XG4gICAgICAgIGNsaWVudEtleTogaGVhZGVyc1tcIm9wLWFkeWVuLWNsaWVudC1rZXlcIl0sXG4gICAgICAgIGVudmlyb25tZW50OiBoZWFkZXJzW1wib3AtYWR5ZW4tZW52aXJvbm1lbnRcIl0sXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgY291bnRyeUNvZGUsXG4gICAgICAgIG9uQWRkaXRpb25hbERldGFpbHMsXG4gICAgICAgIG9uUGF5bWVudEZhaWxlZCxcbiAgICAgICAgb25FcnJvclxuICAgICAgfSlcbiAgICApLnRoZW4oKGNoZWNrb3V0KSA9PiB7XG4gICAgICBjaGVja291dC5jcmVhdGVGcm9tQWN0aW9uKGFjdGlvbiwgeyBjaGFsbGVuZ2VXaW5kb3dTaXplOiBcIjAzXCIgfSkubW91bnQoY29tcG9uZW50KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuY29uc3QgZGV0ZXJtaW5lTG9jYWxlID0gKHByZWZpbGxMb2NhbGUpID0+IHtcbiAgY29uc3QgYnJvd3NlckxvY2FsZSA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIDogbmF2aWdhdG9yLmxhbmd1YWdlO1xuICBjb25zdCBsb2NhbGUgPSBwcmVmaWxsTG9jYWxlID8/IGJyb3dzZXJMb2NhbGU7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gQWR5ZW5Mb2NhbGUuc2FmZVBhcnNlKGxvY2FsZSk7XG4gIGlmICghcGFyc2VSZXN1bHQuc3VjY2Vzcykge1xuICAgIGVycl9fJHAoYFJlc29sdmVkIGludmFsaWQgbG9jYWxlOiAke2xvY2FsZX0uIERlZmF1bHRpbmcgdG8gZW4tVVMuYCk7XG4gICAgcmV0dXJuIFwiZW4tVVNcIjtcbiAgfVxuICBsb2dfXyRxKGBSZXNvbHZlZCBsb2NhbGU6ICR7cGFyc2VSZXN1bHQuZGF0YX1gKTtcbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgcmV0dXJuIGVycm9yUmVzcG9uc2VIZWFkZXJzPy5bXCJvcC1hZHllbi1hY3Rpb25cIl0gIT09IHZvaWQgMDtcbn07XG5jb25zdCBydW5BZHllbjNkc0Zsb3cgPSBhc3luYyAoY291bnRyeUNvZGUsIGVycm9yUmVzcG9uc2VIZWFkZXJzLCBwcmVmaWxsTG9jYWxlKSA9PiB7XG4gIGNvbnN0IGhlYWRlcnMgPSBwYXJzZVJlc3BvbnNlSGVhZGVycyQyKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgY29uc3QgY29tcG9uZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29tcG9uZW50LmlkID0gXCJhZHllbi1jb250YWluZXJcIjtcbiAgY29uc3QgeyBob3N0LCBpZnJhbWUsIGNhbmNlbEJ1dHRvbiB9ID0gY3JlYXRlQW5kT3BlbkZyYW1lKFwiaHR0cDovL2V4YW1wbGUuY29tXCIpO1xuICBpZnJhbWUucmVwbGFjZVdpdGgoY29tcG9uZW50KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlQWR5ZW4zZHMoe1xuICAgIGhlYWRlcnMsXG4gICAgbG9jYWxlOiBkZXRlcm1pbmVMb2NhbGUocHJlZmlsbExvY2FsZSksXG4gICAgY291bnRyeUNvZGUsXG4gICAgY29tcG9uZW50LFxuICAgIGhvc3QsXG4gICAgY2FuY2VsQnV0dG9uXG4gIH0pO1xuICByZXN1bHQuY2xlYW51cCgpO1xuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLlNVQ0NFU1MpIHtcbiAgICBpZiAoIXJlc3VsdC5hZGRpdGlvbmFsRGV0YWlscykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWQgYnV0IG5vIGFkZGl0aW9uYWwgZGV0YWlscyB3ZXJlIHJldHVybmVkXCIpO1xuICAgIH1cbiAgICBsb2dfXyRxKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWRcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICAgIGFkZGl0aW9uYWxfZGV0YWlsczogcmVzdWx0LmFkZGl0aW9uYWxEZXRhaWxzLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGFzc2VydE5ldmVyKHJlc3VsdC5zdGF0dXMpO1xuICB9XG59O1xuY29uc3QgQXBwbGVQYXlDcG0kMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgR29vZ2xlUGF5Q3BtJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHAgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMihldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgcHJlcGFyZVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheV9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGV2ZW50LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogY29udGV4dC5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBjb25zdCBwYXltZW50U2Vzc2lvblJlc3BvbnNlID0gbmV4dEFjdGlvbk1ldGFkYXRhPy5bXCJhcHBsZV9wYXlfc2Vzc2lvblwiXTtcbiAgICBpZiAoIXBheW1lbnRTZXNzaW9uUmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB9XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKHBheW1lbnRTZXNzaW9uUmVzcG9uc2UpO1xuICAgIHRyYWNrKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ucGF5bWVudFNlc3Npb25SZXNwb25zZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb250ZXh0LnNlc3Npb24uYWJvcnQoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVBheW1lbnRBdXRob3JpemVkJDIoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXltZW50RGF0YSA9IGV2ZW50LnBheW1lbnQ7XG4gICAgY29uc3QgZm9ybUlucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkoY29udGV4dC5ub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgZm9ybUlucHV0cyxcbiAgICAgIGNvbnRleHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBjb250ZXh0LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgY29udGV4dC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKVxuICAgIH0pO1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYnJvd3Nlcl9pbmZvOiBnZXRGcmF1ZE1ldGFkYXRhKCksXG4gICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IGJ0b2EoSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4ucGF5bWVudERhdGEpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgbG9nX18kcChcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgIGNvbnN0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhZHllbi1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJG8sIGVycl9fOiBlcnJfXyRvIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFkeWVuLWFwcGxlLXBheVwiKTtcbmNvbnN0IGluaXRBZHllbkFwcGxlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSQxKTtcbiAgICBpZiAoIWFwcGxlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJG8oXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEFwcGxlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpIHtcbiAgICAgIGxvZ19fJG8oXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRvKFwiQXBwbGUgUGF5IExvYWRlZFwiKTtcbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudHMgPSBhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCk7XG4gICAgaWYgKCFjYW5NYWtlUGF5bWVudHMpIHtcbiAgICAgIGxvZ19fJG8oXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBhcHBsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkFwcGxlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgT2pzRmxvd3MuYWR5ZW5BcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBhcHBsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRvKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uQXBwbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQWR5ZW5BcHBsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBmb3JtQ2FsbGJhY2tzXG4gIH0pID0+IHtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSQxKTtcbiAgICBjb25zdCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsIGluaXRpYWxQcmV2aWV3IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBwcmVmaWxsOiB7XG4gICAgICAgIC4uLnByZWZpbGxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pO1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHBheW1lbnRSZXF1ZXN0KTtcbiAgICBjb25zdCBzZXNzaW9uQ29udGV4dCA9IHtcbiAgICAgIHNlc3Npb24sXG4gICAgICBjb25uZWN0aW9uOiBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogYXBwbGVQYXlDcG0ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBjdXN0b21QYXJhbXM/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBleGNsdWRlUHJvcHMocHJlZmlsbCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGxvZ19fJG8oXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50JDIoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbml0aWFsUHJldmlldzIgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogY3JlYXRlQXBwbGVQYXlUb3RhbCh7XG4gICAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXMub3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiBpbml0aWFsUHJldmlldzIsXG4gICAgICAgICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgICAgIHByZWZpbGxcbiAgICAgICAgICB9KS50b3RhbFxuICAgICAgICB9O1xuICAgICAgICBzZXNzaW9uLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih1cGRhdGUpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMihldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9uY2FuY2VsID0gaGFuZGxlQ2FuY2VsO1xuICAgICAgc2Vzc2lvbi5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGVycl9fJG8oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRuLCBlcnJfXzogZXJyX18kbiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhZHllbi1nb29nbGUtcGF5XCIpO1xuY29uc3QgaW5pdEFkeWVuR29vZ2xlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDEpO1xuICAgIGlmICghZ29vZ2xlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJG4oXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyRuKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kbihcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEdvb2dsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSkge1xuICAgICAgZXJyX18kbihcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGVudmlyb25tZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQoY29udGV4dC5iYXNlVXJsKTtcbiAgICBpZiAoZW52aXJvbm1lbnQgPT09IFwiUFJPRFVDVElPTlwiICYmICFwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpIHtcbiAgICAgIGVycl9fJG4oXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRuKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgICAgcHJlZmlsbCxcbiAgICAgICAgZ2F0ZXdheTogXCJhZHllblwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBjb25zdCB7IHJlc3VsdDogaXNSZWFkeVRvUGF5IH0gPSBhd2FpdCBjbGllbnQuaXNSZWFkeVRvUGF5KHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBpZiAoIWlzUmVhZHlUb1BheSkge1xuICAgICAgICBsb2dfXyRuKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIik7XG4gICAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJG4oXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCBlcnIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBvbkdvb2dsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9qc0Zsb3dzLmFkeWVuR29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGdvb2dsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRuKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkdvb2dsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BZHllbkdvb2dsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyRuKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMSk7XG4gICAgY29uc3QgeyBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgcHJlZmlsbCxcbiAgICAgIGdhdGV3YXk6IFwiYWR5ZW5cIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGdvb2dsZVBheUNwbS5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGV4Y2x1ZGVQcm9wcyhwcmVmaWxsLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YSA9IGF3YWl0IGNsaWVudC5sb2FkUGF5bWVudERhdGEocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGxvZ19fJG4oXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheShub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICAgIG1lcmdlZElucHV0cyxcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApO1xuICAgICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFBheW1lbnRUb2tlbiA9IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy50b2tlbml6YXRpb25EYXRhPy50b2tlbjtcbiAgICAgIGlmICghZW5jcnlwdGVkUGF5bWVudFRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzdGFydEZsb3dOZXh0QWN0aW9ucyA9IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgICBsb2dfXyRuKFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwgc3RhcnRGbG93TmV4dEFjdGlvbnMpO1xuICAgICAgbGV0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgICBicm93c2VyX2luZm86IGdldEZyYXVkTWV0YWRhdGEoKSxcbiAgICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YToge1xuICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy50b2tlbml6YXRpb25EYXRhPy50b2tlblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2dfXyRuKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICBsZXQgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWR5ZW4tM2RzXCIpO1xuICAgICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YSAmJiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIGxvZ19fJG4oXCJBZHllbiAzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICAgICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICAgIHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJG4oYOKVsCBBZHllbiAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEgJiYgIW91clBtSWQpIHtcbiAgICAgICAgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICAgIHRoZWlyX3BtX2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQsXG4gICAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRuKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2UgYWZ0ZXIgM0RTXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICB9XG4gICAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCBtZXRob2QgSUQgZm91bmRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhZHllbi1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kbihcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kbSwgZXJyX186IGVycl9fJG0gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWFjaFwiKTtcbmNvbnN0IHJ1bkFpcndhbGxleEFDSEZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgdmVyaWZpY2F0aW9uTWV0aG9kID0gY3VzdG9tUGFyYW1zLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInBsYWlkXCI7XG4gICAgbGV0IG1pY3JvRGVwb3NpdERhdGEgPSBudWxsO1xuICAgIGlmICh2ZXJpZmljYXRpb25NZXRob2QgPT09IFwibWljcm9fZGVwb3NpdFwiKSB7XG4gICAgICBsb2dfXyRtKFwiTWljcm8gZGVwb3NpdCB2ZXJpZmljYXRpb24gc2VsZWN0ZWQsIHNob3dpbmcgZm9ybS4uLlwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1pY3JvRGVwb3NpdERhdGEgPSBhd2FpdCBjcmVhdGVBbmRPcGVuTWljcm9EZXBvc2l0Rm9ybShcImFjaF9kaXJlY3RfZGViaXRcIiwge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjQwMHB4XCIsXG4gICAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRtKFwiTWljcm8gZGVwb3NpdCBkYXRhIGNvbGxlY3RlZFwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ19fJG0oXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydEZsb3dOZXh0QWN0aW9ucyA9IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgY29uc2VudElkID0gc3RhcnRGbG93TmV4dEFjdGlvbnM/LmNvbnNlbnRfaWQ7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiB2ZXJpZmljYXRpb25NZXRob2QsXG4gICAgICAgIGRpcmVjdF9kZWJpdF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJhY2hfZGlyZWN0X2RlYml0XCIsXG4gICAgICAgICAgYWNoX2RpcmVjdF9kZWJpdDoge1xuICAgICAgICAgICAgLy9wbGFpZCB2ZXJpZmljYXRpb24gcmVxdWlyZWQgZmllbGRzXG4gICAgICAgICAgICBidXNpbmVzc19hY2NvdW50OiBjdXN0b21QYXJhbXMuaXNCdXNpbmVzc0FjY291bnQgPz8gZmFsc2UsXG4gICAgICAgICAgICBvd25lcl9uYW1lOiBnZXRGdWxsTmFtZShub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSwgbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSksXG4gICAgICAgICAgICBvd25lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICAgICAgLy9BQ0ggbWljcm8gZGVwb3NpdCB2ZXJpZmljYXRpb24gcmVxdWlyZWQgZmllbGRzXG4gICAgICAgICAgICBhY2NvdW50X251bWJlcjogbWljcm9EZXBvc2l0RGF0YT8uYWNjb3VudF9udW1iZXIsXG4gICAgICAgICAgICBhYmFfcm91dGluZ19udW1iZXI6IG1pY3JvRGVwb3NpdERhdGE/LmFiYV9yb3V0aW5nX251bWJlclxuICAgICAgICAgICAgLy8gbWFuZGF0ZV92ZXJzaW9uOiAnMS4wJyxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKT8ucmVkaXJlY3RfdXJsO1xuICAgIGlmIChyZWRpcmVjdFVybCkge1xuICAgICAgbG9nX18kbShcIlBsYWlkIHZlcmlmaWNhdGlvbiBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiQUNIIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJG0oYOKVsCBQbGFpZCB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsYWlkIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxhaWQgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmV3Q29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1hY2hcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IG5ld0NvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kbShcIkFDSCBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGwgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMShldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgcHJlcGFyZVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZXZlbnQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBjb250ZXh0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGNvbnN0IHBheW1lbnRTZXNzaW9uUmVzcG9uc2UgPSBuZXh0QWN0aW9uTWV0YWRhdGE/LltcImFwcGxlX3BheV9zZXNzaW9uXCJdO1xuICAgIGlmICghcGF5bWVudFNlc3Npb25SZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24ocGF5bWVudFNlc3Npb25SZXNwb25zZSk7XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5wYXltZW50U2Vzc2lvblJlc3BvbnNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnRleHQuc2Vzc2lvbi5hYm9ydCgpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlM0RTKG5leHRBY3Rpb25NZXRhZGF0YSwgY29udGV4dCkge1xuICBpZiAoIW5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmRcIik7XG4gIH1cbiAgbG9nX18kbChcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIG5leHRBY3Rpb25NZXRhZGF0YSk7XG4gIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLFxuICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICB9KTtcbiAgbG9nX18kbChg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgfVxuICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfVxuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgdGhlaXJfcG1faWQ6IG5leHRBY3Rpb25NZXRhZGF0YS50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEuY29uc2VudF9pZCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgfVxuICB9KTtcbiAgbG9nX18kbChcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICByZXR1cm4gY29uZmlybVJlc3VsdDtcbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVBheW1lbnRBdXRob3JpemVkJDEoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXltZW50RGF0YSA9IGV2ZW50LnBheW1lbnQ7XG4gICAgY29uc3QgZm9ybUlucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkoY29udGV4dC5ub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgZm9ybUlucHV0cyxcbiAgICAgIGNvbnRleHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBjb250ZXh0LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgY29udGV4dC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKVxuICAgIH0pO1xuICAgIGNvbnN0IHJlcXVpcmVkVXNlckFjdGlvbnMgPSBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdO1xuICAgIGNvbnN0IGNvbnNlbnRJZCA9IHJlcXVpcmVkVXNlckFjdGlvbnMuY29uc2VudF9pZDtcbiAgICBpZiAoIWNvbnNlbnRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uc2VudCBJRCByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB9XG4gICAgbGV0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZCxcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFwcGxlcGF5XCIsXG4gICAgICAgICAgYXBwbGVwYXk6IHtcbiAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgbG9nX18kbChcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApO1xuICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGE/LnJlZGlyZWN0X3VybCAmJiBuZXh0QWN0aW9uTWV0YWRhdGEuY29uc2VudF9pZCAmJiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQpIHtcbiAgICAgIGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBoYW5kbGUzRFMobmV4dEFjdGlvbk1ldGFkYXRhLCBjb250ZXh0KTtcbiAgICAgIG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICB9XG4gICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXd4LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuY29uc3QgeyBsb2dfXzogbG9nX18kaywgZXJyX186IGVycl9fJGwgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWFwcGxlLXBheVwiKTtcbmNvbnN0IGluaXRBaXJ3YWxsZXhBcHBsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCB1bmF2YWlsYWJsZVJlc3VsdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDIpO1xuICAgIGlmICghYXBwbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kayhcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkQXBwbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSkge1xuICAgICAgbG9nX18kayhcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGsoXCJBcHBsZSBQYXkgTG9hZGVkXCIpO1xuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50cyA9IGF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKTtcbiAgICBpZiAoIWNhbk1ha2VQYXltZW50cykge1xuICAgICAgbG9nX18kayhcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGFwcGxlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uQXBwbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBPanNGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBhcHBsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRsKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkFwcGxlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkFpcndhbGxleEFwcGxlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGZvcm1DYWxsYmFja3NcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDIpO1xuICAgIGNvbnN0IHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBwYXltZW50UmVxdWVzdCA9IGdldEFwcGxlUGF5UGF5bWVudFJlcXVlc3Qoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjdXN0b21QYXJhbXMuaW5pdGlhbFByZXZpZXcsXG4gICAgICBwcmVmaWxsOiB7XG4gICAgICAgIC4uLnByZWZpbGxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pO1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHBheW1lbnRSZXF1ZXN0KTtcbiAgICBjb25zdCBzZXNzaW9uQ29udGV4dCA9IHtcbiAgICAgIHNlc3Npb24sXG4gICAgICBjb25uZWN0aW9uOiBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogYXBwbGVQYXlDcG0ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBjdXN0b21QYXJhbXM/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBleGNsdWRlUHJvcHMocHJlZmlsbCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGxvZ19fJGsoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbmNhbmNlbCA9IGhhbmRsZUNhbmNlbDtcbiAgICAgIHNlc3Npb24ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogY3JlYXRlQXBwbGVQYXlUb3RhbCh7XG4gICAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXMub3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgICAgICAgZGVmYXVsdExhYmVsOiBhcHBsZVBheUNwbT8ubWV0YWRhdGE/LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgICAgICBwcmVmaWxsXG4gICAgICAgICAgfSkudG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odXBkYXRlKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVBheW1lbnRBdXRob3JpemVkJDEoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGVycl9fJGwoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRqLCBlcnJfXzogZXJyX18kayB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtZ29vZ2xlLXBheVwiKTtcbmNvbnN0IGluaXRBaXJ3YWxsZXhHb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDIpO1xuICAgIGlmICghZ29vZ2xlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGooXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyRrKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kaihcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEdvb2dsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSkge1xuICAgICAgZXJyX18kayhcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGVudmlyb25tZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQoY29udGV4dC5iYXNlVXJsKTtcbiAgICBpZiAoZW52aXJvbm1lbnQgPT09IFwiUFJPRFVDVElPTlwiICYmICFwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpIHtcbiAgICAgIGVycl9fJGsoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRqKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgICAgcHJlZmlsbCxcbiAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgY29uc3QgeyByZXN1bHQ6IGlzUmVhZHlUb1BheSB9ID0gYXdhaXQgY2xpZW50LmlzUmVhZHlUb1BheShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgaWYgKCFpc1JlYWR5VG9QYXkpIHtcbiAgICAgICAgbG9nX18kaihcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpO1xuICAgICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRrKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgZXJyKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3Qgb25Hb29nbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBPanNGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZ29vZ2xlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJGsoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkdvb2dsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BaXJ3YWxsZXhHb29nbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kaihcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDIpO1xuICAgIGNvbnN0IHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgIHByZWZpbGwsXG4gICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgdHJhY2soXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogZ29vZ2xlUGF5Q3BtLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogZXhjbHVkZVByb3BzKHByZWZpbGwsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhID0gYXdhaXQgY2xpZW50LmxvYWRQYXltZW50RGF0YShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgbG9nX18kaihcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5KG5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgICAgbWVyZ2VkSW5wdXRzLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgY3VzdG9tUGFyYW1zPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICBsb2dfXyRqKFwiX19fXCIsIG5vbkNkZUZvcm1GaWVsZHMpO1xuICAgICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFBheW1lbnRUb2tlbiA9IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy50b2tlbml6YXRpb25EYXRhPy50b2tlbjtcbiAgICAgIGlmICghZW5jcnlwdGVkUGF5bWVudFRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzdGFydEZsb3dOZXh0QWN0aW9ucyA9IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgICBsb2dfXyRqKFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwgc3RhcnRGbG93TmV4dEFjdGlvbnMpO1xuICAgICAgbGV0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgICAvLyBHb29nbGVQYXkncyBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbiBwcm92aWRlZCB0byB2ZXJpZnkgdGhlIGNvbnNlbnQgZmlyc3RcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogc3RhcnRGbG93TmV4dEFjdGlvbnM/LmNvbnNlbnRfaWQsXG4gICAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZ29vZ2xlcGF5XCIsXG4gICAgICAgICAgICBnb29nbGVwYXk6IHtcbiAgICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IGVuY3J5cHRlZFBheW1lbnRUb2tlblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2dfXyRqKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICBsZXQgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICAgKTtcbiAgICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEgJiYgbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCkge1xuICAgICAgICBsb2dfXyRqKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgbmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgICB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRqKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhICYmICFvdXJQbUlkKSB7XG4gICAgICAgIGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICB0aGVpcl9wbV9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkLFxuICAgICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IG5leHRBY3Rpb25NZXRhZGF0YS5jb25zZW50X2lkXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kaihcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICB9XG4gICAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGsoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGksIGVycl9fOiBlcnJfXyRqIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImtsYXJuYVwiKTtcbmNvbnN0IEFpcndhbGxleEtsYXJuYUNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImtsYXJuYVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHt9KS5udWxsaXNoKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIilcbn0pO1xuY29uc3QgaW5pdEFpcndhbGxleEtsYXJuYUZsb3cgPSBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgY29uc3Qga2xhcm5hQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFpcndhbGxleEtsYXJuYUNwbSk7XG4gIGlmICgha2xhcm5hQ3BtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiS2xhcm5hIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgfVxuICBjb25zdCBzdGFydEZsb3cgPSAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIE9qc0Zsb3dzLmFpcndhbGxleEtsYXJuYS5ydW4oe1xuICAgICAgY29udGV4dCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDoga2xhcm5hQ3BtLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgY3VzdG9tUGFyYW1zOiBjdXN0b21QYXJhbXMgPz8ge31cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgIHN0YXJ0Rmxvd1xuICB9O1xufTtcbmNvbnN0IHJ1bkFpcndhbGxleEtsYXJuYUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICB0cnkge1xuICAgICAgbG9nX18kaShgUnVubmluZyBLbGFybmEgZmxvdy4uLmAsIGN1c3RvbVBhcmFtcyk7XG4gICAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgICBjb25zdCBpc0Fub255bW91cyA9IGZhbHNlO1xuICAgICAgbG9nX18kaShgVmVyaWZ5aW5nIENQTS4uLmApO1xuICAgICAgY29uc3QgY3BtID0gQWlyd2FsbGV4S2xhcm5hQ3BtLnBhcnNlKGNoZWNrb3V0UGF5bWVudE1ldGhvZCk7XG4gICAgICBsb2dfXyRpKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzYCk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsIHtcbiAgICAgICAgLi4uaXNBbm9ueW1vdXMgPyBnZW5lcmF0ZUFub255bW91c1ZhbHVlcygpIDogdm9pZCAwLFxuICAgICAgICAuLi5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5ld0N1c3RvbWVyRmllbGRzID0gY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICAgIGxvZ19fJGkoXCJOZXcgY3VzdG9tZXIgZmllbGRzXCIsIG5ld0N1c3RvbWVyRmllbGRzKTtcbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncylcbiAgICAgIH0pO1xuICAgICAgY29uc29sZS5sb2coXCJzdGFydFBheW1lbnRGbG93UmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImtsYXJuYVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGNwbSxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0OiB7XG4gICAgICAgICAgcGF5bWVudF9tZXRob2RzOiBbXVxuICAgICAgICB9LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGooXCJLbGFybmEgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7IHBheW1lbnRfbWV0aG9kOiBcImtsYXJuYVwiLCBlcnJvcjogZXJyIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCBBcHBsZVBheUNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBHb29nbGVQYXlDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGVNZXJjaGFudChldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgcHJlcGFyZVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBldmVudC52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IGNvbnRleHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UubmV4dF9hY3Rpb25fbWV0YWRhdGE7XG4gICAgY29uc3QgcGF5bWVudFNlc3Npb25SZXNwb25zZSA9IG5leHRBY3Rpb25NZXRhZGF0YT8uW1wiYXBwbGVfcGF5X3Nlc3Npb25cIl07XG4gICAgaWYgKCFwYXltZW50U2Vzc2lvblJlc3BvbnNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgfVxuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihwYXltZW50U2Vzc2lvblJlc3BvbnNlKTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLnBheW1lbnRTZXNzaW9uUmVzcG9uc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29udGV4dC5zZXNzaW9uLmFib3J0KCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVQYXltZW50QXV0aG9yaXplZChldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHBheW1lbnREYXRhID0gZXZlbnQucGF5bWVudDtcbiAgICBjb25zdCBmb3JtSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheShjb250ZXh0Lm5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoZm9ybUlucHV0cywgY29udGV4dC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgY29udGV4dC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3QgbW9iaWxlV2FsbGV0UGF5bWVudERhdGEgPSB7XG4gICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uQVBQTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShwYXltZW50RGF0YS50b2tlbi5wYXltZW50RGF0YSkpXG4gICAgfTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjb250ZXh0LnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiBtb2JpbGVXYWxsZXRQYXltZW50RGF0YVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuY29uc3QgeyBsb2dfXzogbG9nX18kaCwgZXJyX186IGVycl9fJGkgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXV0aG5ldC1hcHBsZXBheVwiKTtcbmNvbnN0IGluaXRBdXRobmV0QXBwbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0pO1xuICAgIGlmICghYXBwbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kaChcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkQXBwbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSkge1xuICAgICAgbG9nX18kaChcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50cyA9IGF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKTtcbiAgICBpZiAoIWNhbk1ha2VQYXltZW50cykge1xuICAgICAgbG9nX18kaChcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGFwcGxlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uQXBwbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBPanNGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBhcHBsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRpKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IGVyclxuICAgICAgICB9KTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25BcHBsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BdXRobmV0QXBwbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgZm9ybUNhbGxiYWNrc1xuICB9KSA9PiB7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0KHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIHByZWZpbGwsXG4gICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pO1xuICAgIHRyYWNrKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbCxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCBwYXltZW50UmVxdWVzdCk7XG4gICAgY29uc3Qgc2Vzc2lvbkNvbnRleHQgPSB7XG4gICAgICBzZXNzaW9uLFxuICAgICAgY29ubmVjdGlvbjogY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBpc1NldHVwTW9kZSxcbiAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3NcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXNzaW9uLm9uY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBsb2dfXyRoKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgaGFuZGxlVmFsaWRhdGVNZXJjaGFudChldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3MiA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiBjcmVhdGVBcHBsZVBheVRvdGFsKHtcbiAgICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IGluaXRpYWxQcmV2aWV3MixcbiAgICAgICAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICAgICAgcHJlZmlsbFxuICAgICAgICAgIH0pLnRvdGFsXG4gICAgICAgIH07XG4gICAgICAgIHNlc3Npb24uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVQYXltZW50QXV0aG9yaXplZChldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kaShcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGcsIGVycl9fOiBlcnJfXyRoIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF1dGhuZXQtZ29vZ2xlcGF5XCIpO1xuY29uc3QgaW5pdEF1dGhuZXRHb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kZyhcIkluaXRpYWxpemluZyBBdXRobmV0IEdvb2dsZVBheSBmbG93XCIpO1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0pO1xuICAgIGlmICghZ29vZ2xlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGcoXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyRoKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZyhcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEdvb2dsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSkge1xuICAgICAgZXJyX18kaChcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGcoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgICBwcmVmaWxsLFxuICAgICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBjb25zdCB7IHJlc3VsdDogaXNSZWFkeVRvUGF5IH0gPSBhd2FpdCBjbGllbnQuaXNSZWFkeVRvUGF5KHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBpZiAoIWlzUmVhZHlUb1BheSkge1xuICAgICAgICBsb2dfXyRnKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIik7XG4gICAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGgoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCBlcnIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBvbkdvb2dsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBnb29nbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kaChcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICB0cmFjayhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IGVyclxuICAgICAgICB9KTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25Hb29nbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQXV0aG5ldEdvb2dsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtKTtcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gZ29vZ2xlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgcHJlZmlsbCxcbiAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICB0cmFjayhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGEgPSBhd2FpdCBjbGllbnQubG9hZFBheW1lbnREYXRhKHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBsb2dfXyRnKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhHb29nbGVQYXkobm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG1lcmdlZElucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFBheW1lbnRUb2tlbiA9IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy50b2tlbml6YXRpb25EYXRhPy50b2tlbjtcbiAgICAgIGlmICghZW5jcnlwdGVkUGF5bWVudFRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICAgIH0pO1xuICAgICAgbG9nX18kZyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uR09PR0xFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgICAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoZW5jcnlwdGVkUGF5bWVudFRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRoKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCBnZXRGcmF1ZE1ldGFkYXRhID0gKCkgPT4ge1xuICBjb25zdCBzY3JlZW5faGVpZ2h0ID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLmhlaWdodCA6IG51bGw7XG4gIGNvbnN0IHNjcmVlbl93aWR0aCA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi53aWR0aCA6IG51bGw7XG4gIGNvbnN0IGNvbG9yX2RlcHRoID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLmNvbG9yRGVwdGggOiBudWxsO1xuICBjb25zdCBqYXZhX2VuYWJsZWQgPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IuamF2YUVuYWJsZWQoKSA6IGZhbHNlO1xuICBjb25zdCB1c2VyX2FnZW50ID0gd2luZG93ICYmIHdpbmRvdy5uYXZpZ2F0b3IgPyB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCA6IG51bGw7XG4gIGNvbnN0IGFjY2VwdF9oZWFkZXIgPSBcInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjhcIjtcbiAgbGV0IGxhbmd1YWdlID0gbnVsbDtcbiAgaWYgKHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yKSB7XG4gICAgbGFuZ3VhZ2UgPSB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlID8gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSA6IHdpbmRvdy5uYXZpZ2F0b3IuYnJvd3Nlckxhbmd1YWdlO1xuICB9XG4gIGNvbnN0IHRpbWVfem9uZV9vZmZzZXQgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHJldHVybiB7XG4gICAgY29sb3JfZGVwdGgsXG4gICAgamF2YV9lbmFibGVkLFxuICAgIGphdmFzY3JpcHRfZW5hYmxlZDogdHJ1ZSxcbiAgICBsYW5ndWFnZSxcbiAgICBzY3JlZW5faGVpZ2h0LFxuICAgIHNjcmVlbl93aWR0aCxcbiAgICB0aW1lX3pvbmVfb2Zmc2V0LFxuICAgIHVzZXJfYWdlbnQsXG4gICAgYWNjZXB0X2hlYWRlclxuICB9O1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kZiwgZXJyX186IGVycl9fJGcgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY3licy1mcmFtZVwiKTtcbmNvbnN0IGF0dGFjaERldmljZURhdGFDb2xsZWN0b3IgPSAocG9zdFVybCwgYWNjZXNzVG9rZW4pID0+IHtcbiAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcbiAgaWZyYW1lLm5hbWUgPSBcImNhcmRpbmFsX2NvbGxlY3Rpb25faWZyYW1lXCI7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gIGlmcmFtZS5zdHlsZS53aWR0aCA9IFwiMTBweFwiO1xuICBpZnJhbWUuc3R5bGUuaGVpZ2h0ID0gXCIxMHB4XCI7XG4gIGNvbnN0IGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgZm9ybS5hY3Rpb24gPSBwb3N0VXJsO1xuICBmb3JtLm1ldGhvZCA9IFwiUE9TVFwiO1xuICBmb3JtLnRhcmdldCA9IGlmcmFtZS5uYW1lO1xuICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgaW5wdXQudHlwZSA9IFwiaGlkZGVuXCI7XG4gIGlucHV0Lm5hbWUgPSBcIkpXVFwiO1xuICBpbnB1dC52YWx1ZSA9IGFjY2Vzc1Rva2VuO1xuICBmb3JtLmFwcGVuZENoaWxkKGlucHV0KTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZvcm0pO1xuICBjb25zdCBkZXRhY2ggPSAoKSA9PiB7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZm9ybSk7XG4gIH07XG4gIHJldHVybiB7IGZvcm0sIGRldGFjaCB9O1xufTtcbmNvbnN0IHJ1bkRldmljZURhdGFDb2xsZWN0aW9uID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHsgcG9zdFVybCwgYWNjZXNzVG9rZW4gfSA9IHBhcmFtcztcbiAgICBjb25zdCBleHBlY3RlZE9yaWdpbiA9IG5ldyBVUkwocG9zdFVybCkub3JpZ2luO1xuICAgIGNvbnN0IHsgZm9ybSwgZGV0YWNoIH0gPSBhdHRhY2hEZXZpY2VEYXRhQ29sbGVjdG9yKHBvc3RVcmwsIGFjY2Vzc1Rva2VuKTtcbiAgICBsb2dfXyRmKFwiQXR0YWNoZWQgZGV2aWNlIGRhdGEgY29sbGVjdG9yXCIpO1xuICAgIGNvbnN0IGhhbmRsZUNvbGxlY3Rpb25FdmVudCA9IChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50Lm9yaWdpbiAhPT0gZXhwZWN0ZWRPcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XG4gICAgICBsb2dfXyRmKFwiUmVjZWl2ZWQgZXZlbnQgZnJvbSBkZXZpY2UgZGF0YSBjb2xsZWN0b3I6XCIsIGRhdGEpO1xuICAgICAgaWYgKGRhdGFbXCJNZXNzYWdlVHlwZVwiXSA9PT0gXCJwcm9maWxlLmNvbXBsZXRlZFwiKSB7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGRldGFjaCgpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZUNvbGxlY3Rpb25FdmVudCk7XG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZUNvbGxlY3Rpb25FdmVudCk7XG4gICAgICBsb2dfXyRmKFwiQXR0YWNoZWQgbGlzdGVuZXIgdG8gd2luZG93XCIpO1xuICAgICAgZm9ybS5zdWJtaXQoKTtcbiAgICAgIGxvZ19fJGYoXCJTdWJtaXR0ZWQgZm9ybVwiKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyX18kZyhcIkVycm9yIHN1Ym1pdHRpbmcgZm9ybTpcIiwgZXJyb3IpO1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IHJ1blBheWVyQXV0aCA9IChwYXJhbXMpID0+IHtcbiAgY29uc3QgeyBzdGVwVXBVcmwsIGFjY2Vzc1Rva2VuLCBtZXJjaGFudERhdGEsIGlmcmFtZSwgaG9zdCB9ID0gcGFyYW1zO1xuICBjb25zdCBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZvcm1cIik7XG4gIGZvcm0uYWN0aW9uID0gc3RlcFVwVXJsO1xuICBmb3JtLm1ldGhvZCA9IFwiUE9TVFwiO1xuICBmb3JtLnRhcmdldCA9IGlmcmFtZS5uYW1lO1xuICBjb25zdCB0b2tlbklucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICB0b2tlbklucHV0LnR5cGUgPSBcImhpZGRlblwiO1xuICB0b2tlbklucHV0Lm5hbWUgPSBcIkpXVFwiO1xuICB0b2tlbklucHV0LnZhbHVlID0gYWNjZXNzVG9rZW47XG4gIGNvbnN0IG1kSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gIG1kSW5wdXQudHlwZSA9IFwiaGlkZGVuXCI7XG4gIG1kSW5wdXQubmFtZSA9IFwiTURcIjtcbiAgbWRJbnB1dC52YWx1ZSA9IG1lcmNoYW50RGF0YTtcbiAgZm9ybS5hcHBlbmRDaGlsZCh0b2tlbklucHV0KTtcbiAgZm9ybS5hcHBlbmRDaGlsZChtZElucHV0KTtcbiAgaG9zdC5hcHBlbmRDaGlsZChmb3JtKTtcbiAgcmV0dXJuIGZvcm07XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRlLCBlcnJfXzogZXJyX18kZiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjeWJzXCIpO1xuY29uc3QgQ3liZXJzb3VyY2VBY3Rpb25QYXlsb2FkID0gei5vYmplY3Qoe1xuICBzdGVwX3VwX3VybDogei5zdHJpbmcoKSxcbiAgYWNjZXNzX3Rva2VuOiB6LnN0cmluZygpLFxuICBkZF91cmw6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgZGRfdG9rZW46IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgbWVyY2hhbnRfZGF0YTogei5zdHJpbmcoKVxufSk7XG5jb25zdCBGUklFTkRMWV9FUlIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG5jb25zdCBwYXJzZVJlc3BvbnNlSGVhZGVycyQxID0gKHVzZXJBY3Rpb24pID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBDeWJlcnNvdXJjZUFjdGlvblBheWxvYWQuc2FmZVBhcnNlKHVzZXJBY3Rpb24pO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRmKGBDeWJlcnNvdXJjZSAzRFMgaXMgcmVxdWlyZWQgYnV0IHVzZXIgYWN0aW9uIGlzIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KHVzZXJBY3Rpb24pfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihGUklFTkRMWV9FUlIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc0N5YmVyc291cmNlM2RzID0gKHVzZXJBY3Rpb24pID0+IHtcbiAgcmV0dXJuIHVzZXJBY3Rpb25bXCJ0eXBlXCJdID09PSBcImN5YmVyc291cmNlX3BheWVyX2F1dGhcIjtcbn07XG5jb25zdCBoYW5kbGVDeWJlcnNvdXJjZTNkcyA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgY29uc3QgeyBzdGVwVXBVcmwsIGFjY2Vzc1Rva2VuLCBtZXJjaGFudERhdGEsIGlmcmFtZSwgaG9zdCwgY2FuY2VsQnV0dG9uIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGV4cGVjdGVkT3JpZ2luID0gbmV3IFVSTChzdGVwVXBVcmwpLm9yaWdpbjtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGxvZ19fJGUoXCJDbGVhbmluZyB1cCBDeWJlcnNvdXJjZSAzRFMgZmxvd1wiKTtcbiAgICAgIGNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DYW5jZWwpO1xuICAgICAgaG9zdC5yZW1vdmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgbG9nX18kZShcIkN5YmVyc291cmNlIDNEUyBjYW5jZWxsZWRcIik7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChzdGF0dXMpID0+IHtcbiAgICAgIGxvZ19fJGUoXCJDeWJlcnNvdXJjZSAzRFMgY29tcGxldGVkIHdpdGggc3RhdHVzOlwiLCBzdGF0dXMpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogc3RhdHVzLnN0YXR1cywgY2xlYW51cCB9KTtcbiAgICAgIGNsZWFudXBQb2xsaW5nKCk7XG4gICAgfTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoaWZyYW1lLCBvblN1Y2Nlc3MsIGV4cGVjdGVkT3JpZ2luLCBcInBpbmctM2RzLXN0YXR1c1wiLCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UpO1xuICAgIGNvbnN0IGNsZWFudXBQb2xsaW5nID0gaGFuZGxlRXZlbnRzKHtcbiAgICAgIGVsZW1lbnRzOiB7IGhvc3QsIGNhbmNlbEJ1dHRvbiB9LFxuICAgICAgcG9sbGluZ0ludGVydmFsLFxuICAgICAgcmVzb2x2ZTogKHN0YXR1cykgPT4ge1xuICAgICAgICByZXNvbHZlKHsgc3RhdHVzOiBzdGF0dXMuc3RhdHVzLCBjbGVhbnVwIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DYW5jZWwpO1xuICAgIGNvbnN0IGZvcm0gPSBydW5QYXllckF1dGgoe1xuICAgICAgc3RlcFVwVXJsLFxuICAgICAgYWNjZXNzVG9rZW4sXG4gICAgICBtZXJjaGFudERhdGEsXG4gICAgICBpZnJhbWUsXG4gICAgICBob3N0XG4gICAgfSk7XG4gICAgZm9ybS5zdWJtaXQoKTtcbiAgfSk7XG59O1xuY29uc3QgcnVuQ3liZXJzb3VyY2UzZHNGbG93ID0gYXN5bmMgKHVzZXJBY3Rpb24pID0+IHtcbiAgY29uc3QgcGF5bG9hZCA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDEodXNlckFjdGlvbik7XG4gIGNvbnN0IHsgc3RlcF91cF91cmwsIGFjY2Vzc190b2tlbiwgZGRfdXJsLCBkZF90b2tlbiwgbWVyY2hhbnRfZGF0YSB9ID0gcGF5bG9hZDtcbiAgaWYgKGRkX3VybCAmJiBkZF90b2tlbikge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25SZXN1bHQgPSBhd2FpdCBydW5EZXZpY2VEYXRhQ29sbGVjdGlvbih7XG4gICAgICBwb3N0VXJsOiBkZF91cmwsXG4gICAgICBhY2Nlc3NUb2tlbjogZGRfdG9rZW5cbiAgICB9KTtcbiAgICBsb2dfXyRlKFwiRGV2aWNlIGRhdGEgY29sbGVjdGlvbiBjb21wbGV0ZWQgd2l0aCBzdGF0dXM6XCIsIGNvbGxlY3Rpb25SZXN1bHQuU3RhdHVzKTtcbiAgfSBlbHNlIHtcbiAgICBlcnJfXyRmKFwiTm8gZGV2aWNlIGRhdGEgY29sbGVjdGlvbiBVUkwgb3IgdG9rZW4gcHJvdmlkZWRcIik7XG4gIH1cbiAgY29uc3QgeyBob3N0LCBpZnJhbWUsIGNhbmNlbEJ1dHRvbiB9ID0gY3JlYXRlQW5kT3BlbkZyYW1lKFwiXCIsIHsgbmFtZTogXCJjYXJkaW5hbF9hdXRoX2lmcmFtZVwiIH0pO1xuICBsb2dfXyRlKFwiUnVubmluZyBDeWJlcnNvdXJjZSAzRFMgZmxvd1wiKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlQ3liZXJzb3VyY2UzZHMoe1xuICAgIHN0ZXBVcFVybDogc3RlcF91cF91cmwsXG4gICAgYWNjZXNzVG9rZW46IGFjY2Vzc190b2tlbixcbiAgICBtZXJjaGFudERhdGE6IG1lcmNoYW50X2RhdGEsXG4gICAgaWZyYW1lLFxuICAgIGhvc3QsXG4gICAgY2FuY2VsQnV0dG9uXG4gIH0pO1xuICByZXN1bHQuY2xlYW51cCgpO1xuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLlNVQ0NFU1MpIHtcbiAgICBsb2dfXyRlKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWRcIik7XG4gICAgcmV0dXJuO1xuICB9IGVsc2Uge1xuICAgIGFzc2VydE5ldmVyKHJlc3VsdC5zdGF0dXMpO1xuICB9XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRkLCBlcnJfXzogZXJyX18kZSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJwb2NreXQtY2NcIik7XG5jb25zdCBQb2NreXQzZHNFcnJvclJlc3BvbnNlSGVhZGVycyA9IHoub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgcGFyc2VSZXNwb25zZUhlYWRlcnMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBQb2NreXQzZHNFcnJvclJlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JSZXNwb25zZUhlYWRlcnMpfWA7XG4gICAgZXJyX18kZShkZXZFcnIpO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgcGFyc2VWYXVsdElkRnJvbTNkc0hyZWYgPSAoaHJlZikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHZhdWx0SWQgPSBuZXcgVVJMKGhyZWYgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInZhdWx0SWRcIik7XG4gICAgaWYgKCF2YXVsdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICB9XG4gICAgbG9nX18kZChgM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbVmF1bHQgSUQ6ICR7dmF1bHRJZH1dYCk7XG4gICAgcmV0dXJuIHZhdWx0SWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgZXJyTXNnID0gYEVycm9yIHZlcmlmeWluZyAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5gO1xuICAgIGVycl9fJGUoZXJyTXNnLCBgUmVzdWx0aW5nIFVSTDogJHtocmVmfS5cbkVycm9yOiAke2dldEVycm9yTWVzc2FnZShlcnJvcil9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XG4gIH1cbn07XG5jb25zdCBwYXJzZUFyZ0Zyb21IcmVmID0gKGhyZWYsIGFyZ05hbWUpID0+IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChocmVmKTtcbiAgcmV0dXJuIHVybC5zZWFyY2hQYXJhbXMuZ2V0KGFyZ05hbWUpO1xufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc1BvY2t5dDNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLXBvY2t5dC0zZHMtdXJsXCJdICE9PSB2b2lkIDA7XG59O1xuY29uc3QgcnVuUG9ja3l0M2RzRmxvdyA9IGFzeW5jIChiYXNlVXJsLCBlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBoZWFkZXJzID0gcGFyc2VSZXNwb25zZUhlYWRlcnMoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCh7IHVybDogaGVhZGVyc1tcIm9wLXBvY2t5dC0zZHMtdXJsXCJdLCBiYXNlVXJsIH0pO1xuICBjb25zdCB2YXVsdElkID0gcGFyc2VWYXVsdElkRnJvbTNkc0hyZWYocmVzdWx0LmhyZWYgPz8gXCJcIik7XG4gIGNvbnN0IGV4dHJhTWV0YWRhdGFGb3JDaGVja291dCA9IHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgdmF1bHRfaWQ6IHZhdWx0SWQsXG4gICAgICB0cmFuc2FjdGlvbl9ubzogaGVhZGVyc1tcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IGhlYWRlcnNbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xuICByZXR1cm4gZXh0cmFNZXRhZGF0YUZvckNoZWNrb3V0O1xufTtcblxuY29uc3QgeyBsb2dfXzogc3RyaXBlTG9nX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWNjXCIpO1xuY29uc3QgU3RyaXBlM0RTTWV0YWRhdGFQYXlsb2FkID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBzdHJpcGVDQzNEU0Zsb3cgPSBhc3luYyAobmV4dEFjdGlvbk1ldGFkYXRhKSA9PiB7XG4gIHRyYWNrKFwiM2RzX3N0cmlwZV9yZWRpcmVjdFwiLCB7XG4gICAgLi4ubmV4dEFjdGlvbk1ldGFkYXRhXG4gIH0pO1xuICBzdHJpcGVMb2dfXyhg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldC5zdWJzdHJpbmcoMCwgOCl9Li4uXWApO1xuICBhd2FpdCBsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93KG5leHRBY3Rpb25NZXRhZGF0YSk7XG4gIHRyYWNrKFwiM2RzX3N0cmlwZV9jb21wbGV0ZVwiKTtcbiAgc3RyaXBlTG9nX18oXCLilbAgU3RyaXBlIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIik7XG59O1xuY29uc3QgcGFyc2VVc2VyRkVQYXlsb2FkID0gKHBheWxvYWQpID0+IHtcbiAgY29uc3QgcGFyc2VkID0gU3RyaXBlM0RTTWV0YWRhdGFQYXlsb2FkLnNhZmVQYXJzZShwYXlsb2FkKTtcbiAgaWYgKCFwYXJzZWQuc3VjY2Vzcykge1xuICAgIHRocm93IG5ldyBFcnJvcihgU3RyaXBlIDNEUyBtZXRhZGF0YSBoYXMgdW5leHBlY3RlZCBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkocGFyc2VkLmVycm9yLmVycm9ycyl9YCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzdHJpcGVfcGs6IHBhcnNlZC5kYXRhLnN0cmlwZV9wayxcbiAgICBjbGllbnRfc2VjcmV0OiBwYXJzZWQuZGF0YS5jbGllbnRfc2VjcmV0LFxuICAgIHN0cmlwZV9wbV9pZDogcGFyc2VkLmRhdGEuc3RyaXBlX3BtX2lkXG4gIH07XG59O1xuY29uc3QgYnVpbGRTdHJpcGVCbnBsUmV0dXJuVXJsID0gKGJhc2VVcmwsIGNoZWNrb3V0QXR0ZW1wdElkKSA9PiB7XG4gIGlmICghY2hlY2tvdXRBdHRlbXB0SWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBhdHRlbXB0IElEIGlzIHJlcXVpcmVkIGZvciBTdHJpcGUgQk5QTCByZWRpcmVjdFwiKTtcbiAgfVxuICBjb25zdCByZXR1cm5VcmwgPSBuZXcgVVJMKFwiL2FwcC9wb3N0LWFjdGlvbi9yZWRpcmVjdC9cIiwgYmFzZVVybCk7XG4gIHJldHVyblVybC5zZWFyY2hQYXJhbXMuc2V0KFwiY2F0dFwiLCBjaGVja291dEF0dGVtcHRJZCk7XG4gIHJldHVyblVybC5zZWFyY2hQYXJhbXMuc2V0KFwib3BlbnBheV9wb3B1cFwiLCBcInRydWVcIik7XG4gIHJldHVybiByZXR1cm5VcmwudG9TdHJpbmcoKTtcbn07XG5jb25zdCBCTlBMX1BPUFVQX1JFU0VSVkFUSU9OX1RJTUVPVVRfTVMgPSA2MCAqIDFlMztcbmNvbnN0IEJOUExfUE9QVVBfV0lORE9XX09QVElPTlMgPSB7IHdpZHRoOiA1MDAsIGhlaWdodDogNzAwIH07XG5sZXQgYWN0aXZlQm5wbFBvcHVwID0gbnVsbDtcbmNvbnN0IGNsb3NlU3RyaXBlQm5wbFBvcHVwID0gKHBvcHVwKSA9PiB7XG4gIGlmICghcG9wdXApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHBvcHVwLnRpbWVvdXQpIHtcbiAgICBjbGVhclRpbWVvdXQocG9wdXAudGltZW91dCk7XG4gICAgcG9wdXAudGltZW91dCA9IG51bGw7XG4gIH1cbiAgcG9wdXAuYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gIHBvcHVwLndpbmRvdy5jbG9zZSgpO1xuICBpZiAoYWN0aXZlQm5wbFBvcHVwID09PSBwb3B1cCkge1xuICAgIGFjdGl2ZUJucGxQb3B1cCA9IG51bGw7XG4gIH1cbn07XG5jb25zdCBhYm9ydFN0cmlwZUJucGxQb3B1cEZsb3cgPSAoKSA9PiBjbG9zZVN0cmlwZUJucGxQb3B1cChhY3RpdmVCbnBsUG9wdXApO1xubGV0IGFjdGl2ZVN0cmlwZUJucGxGbG93ID0gbnVsbDtcbmNvbnN0IGNyZWF0ZVN0cmlwZUJucGxGbG93Q29udHJvbGxlciA9IChydW4pID0+IHtcbiAgY29uc3Qgb3duZXIgPSB7fTtcbiAgY29uc3QgYWJvcnRBY3RpdmVGbG93ID0gKCkgPT4ge1xuICAgIGFjdGl2ZVN0cmlwZUJucGxGbG93Py5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICBhY3RpdmVTdHJpcGVCbnBsRmxvdyA9IG51bGw7XG4gICAgYWJvcnRTdHJpcGVCbnBsUG9wdXBGbG93KCk7XG4gIH07XG4gIGNvbnN0IGFib3J0RmxvdyA9ICgpID0+IHtcbiAgICBpZiAoYWN0aXZlU3RyaXBlQm5wbEZsb3c/Lm93bmVyID09PSBvd25lcikge1xuICAgICAgYWJvcnRBY3RpdmVGbG93KCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBzdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgYWJvcnRBY3RpdmVGbG93KCk7XG4gICAgY29uc3QgY3VycmVudEZsb3cgPSB7XG4gICAgICBvd25lcixcbiAgICAgIGFib3J0Q29udHJvbGxlcjogbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgfTtcbiAgICBhY3RpdmVTdHJpcGVCbnBsRmxvdyA9IGN1cnJlbnRGbG93O1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBydW4oY3VzdG9tUGFyYW1zLCBjdXJyZW50Rmxvdy5hYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGFjdGl2ZVN0cmlwZUJucGxGbG93ID09PSBjdXJyZW50Rmxvdykge1xuICAgICAgICBhY3RpdmVTdHJpcGVCbnBsRmxvdyA9IG51bGw7XG4gICAgICAgIGFib3J0U3RyaXBlQm5wbFBvcHVwRmxvdygpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHsgc3RhcnRGbG93LCBhYm9ydEZsb3cgfTtcbn07XG5jb25zdCB0aHJvd0lmU3RyaXBlQm5wbEZsb3dBYm9ydGVkID0gKGFib3J0U2lnbmFsLCBwb3B1cE5hbWUpID0+IHtcbiAgaWYgKGFib3J0U2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cG9wdXBOYW1lfSBwYXltZW50IGNhbmNlbGxlZGApO1xuICB9XG59O1xuY29uc3QgU1RSSVBFX0JOUExfUE9QVVBfQkxPQ0tFRF9FUlJPUiA9IFwiRmFpbGVkIHRvIG9wZW4gcG9wdXAg4oCUIHBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZVwiO1xuY29uc3QgcmVzZXJ2ZVN0cmlwZUJucGxQb3B1cCA9IChwb3B1cE5hbWUpID0+IHtcbiAgYWJvcnRTdHJpcGVCbnBsUG9wdXBGbG93KCk7XG4gIHRyeSB7XG4gICAgY29uc3QgcG9wdXAgPSBvcGVuUG9wdXBXaW5kb3cocG9wdXBOYW1lLCBcImFib3V0OmJsYW5rXCIsIEJOUExfUE9QVVBfV0lORE9XX09QVElPTlMpO1xuICAgIHRyeSB7XG4gICAgICBwb3B1cC5kb2N1bWVudC50aXRsZSA9IGBPcGVuaW5nICR7cG9wdXBOYW1lfeKApmA7XG4gICAgICBwb3B1cC5kb2N1bWVudC5ib2R5LnRleHRDb250ZW50ID0gYE9wZW5pbmcgJHtwb3B1cE5hbWV94oCmYDtcbiAgICAgIHBvcHVwLmRvY3VtZW50LmJvZHkuc3R5bGUuY3NzVGV4dCA9IFtcbiAgICAgICAgXCJhbGlnbi1pdGVtczpjZW50ZXJcIixcbiAgICAgICAgXCJiYWNrZ3JvdW5kOiNmZmZcIixcbiAgICAgICAgXCJjb2xvcjojMTExODI3XCIsXG4gICAgICAgIFwiZGlzcGxheTpmbGV4XCIsXG4gICAgICAgICdmb250OjUwMCAxNnB4IHN5c3RlbS11aSwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxcIlNlZ29lIFVJXCIsc2Fucy1zZXJpZicsXG4gICAgICAgIFwianVzdGlmeS1jb250ZW50OmNlbnRlclwiLFxuICAgICAgICBcIm1hcmdpbjowXCIsXG4gICAgICAgIFwibWluLWhlaWdodDoxMDB2aFwiXG4gICAgICBdLmpvaW4oXCI7XCIpO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgICBjb25zdCBwb3B1cEhhbmRsZSA9IHtcbiAgICAgIHdpbmRvdzogcG9wdXAsXG4gICAgICB0aW1lb3V0OiBudWxsLFxuICAgICAgYWJvcnRDb250cm9sbGVyOiBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICB9O1xuICAgIHBvcHVwSGFuZGxlLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNsb3NlU3RyaXBlQm5wbFBvcHVwKHBvcHVwSGFuZGxlKSwgQk5QTF9QT1BVUF9SRVNFUlZBVElPTl9USU1FT1VUX01TKTtcbiAgICBhY3RpdmVCbnBsUG9wdXAgPSBwb3B1cEhhbmRsZTtcbiAgICByZXR1cm4gcG9wdXBIYW5kbGU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgc3RyaXBlTG9nX18oYOKUnCBDb3VsZCBub3Qgb3BlbiB0aGUgJHtwb3B1cE5hbWV9IHBvcHVwYCwgZXJyb3IpO1xuICAgIHRocm93IG5ldyBFcnJvcihTVFJJUEVfQk5QTF9QT1BVUF9CTE9DS0VEX0VSUk9SKTtcbiAgfVxufTtcbmNvbnN0IHdpdGhSZXNlcnZlZFN0cmlwZUJucGxQb3B1cCA9IGFzeW5jICh1c2VSZWRpcmVjdEZsb3csIHBvcHVwTmFtZSwgcnVuKSA9PiB7XG4gIGNvbnN0IHBvcHVwSGFuZGxlID0gdXNlUmVkaXJlY3RGbG93ID8gcmVzZXJ2ZVN0cmlwZUJucGxQb3B1cChwb3B1cE5hbWUpIDogbnVsbDtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcnVuKHBvcHVwSGFuZGxlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjbG9zZVN0cmlwZUJucGxQb3B1cChwb3B1cEhhbmRsZSk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5jb25zdCBjbGFpbVJlc2VydmVkU3RyaXBlQm5wbFBvcHVwID0gKHBvcHVwSGFuZGxlLCB1cmwpID0+IHtcbiAgaWYgKGFjdGl2ZUJucGxQb3B1cCAhPT0gcG9wdXBIYW5kbGUgfHwgcG9wdXBIYW5kbGUuYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgeyB3aW5kb3c6IHBvcHVwIH0gPSBwb3B1cEhhbmRsZTtcbiAgaWYgKHBvcHVwSGFuZGxlLnRpbWVvdXQpIHtcbiAgICBjbGVhclRpbWVvdXQocG9wdXBIYW5kbGUudGltZW91dCk7XG4gICAgcG9wdXBIYW5kbGUudGltZW91dCA9IG51bGw7XG4gIH1cbiAgaWYgKHBvcHVwLmNsb3NlZCkge1xuICAgIGNsb3NlU3RyaXBlQm5wbFBvcHVwKHBvcHVwSGFuZGxlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwb3B1cC5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICBwb3B1cC5mb2N1cygpO1xuICByZXR1cm4gcG9wdXA7XG59O1xuY29uc3QgQk5QTF9QT1BVUF9QT0xMX0lOVEVSVkFMX01TID0gMWUzO1xuY29uc3QgQk5QTF9QT1BVUF9QT0xMX0xJTUlUID0gMTUgKiA2MDtcbmNvbnN0IEJOUExfUE9QVVBfUE9MTFNfQUZURVJfQ0xPU0UgPSAzMDtcbmNvbnN0IEJOUExfRkFJTEVEX1NUQVRVU0VTID0gW1wicmVxdWlyZXNfcGF5bWVudF9tZXRob2RcIiwgXCJjYW5jZWxlZFwiXTtcbmNvbnN0IEJOUExfQVVUSE9SSVpFRF9TVEFUVVNFUyA9IFtcInByb2Nlc3NpbmdcIiwgXCJzdWNjZWVkZWRcIl07XG5jb25zdCB3YWl0Rm9yU3RyaXBlQm5wbFBvcHVwUG9sbCA9IChzaWduYWwpID0+IHtcbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfTtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0sIEJOUExfUE9QVVBfUE9MTF9JTlRFUlZBTF9NUyk7XG4gICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gIH0pO1xufTtcbmNvbnN0IHdhaXRGb3JTdHJpcGVCbnBsUG9wdXAgPSBhc3luYyAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlLCBjbGllbnRTZWNyZXQsIHBvcHVwTmFtZSwgcmVkaXJlY3RVcmwsIHBvcHVwSGFuZGxlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBvcHVwV2luZG93ID0gY2xhaW1SZXNlcnZlZFN0cmlwZUJucGxQb3B1cChwb3B1cEhhbmRsZSwgcmVkaXJlY3RVcmwpO1xuICBpZiAoIXBvcHVwV2luZG93KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3BvcHVwTmFtZX0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgfVxuICBsZXQgcG9sbHNBZnRlckNsb3NlID0gQk5QTF9QT1BVUF9QT0xMU19BRlRFUl9DTE9TRTtcbiAgdHJ5IHtcbiAgICBmb3IgKGxldCBwb2xsID0gMDsgcG9sbCA8IEJOUExfUE9QVVBfUE9MTF9MSU1JVDsgcG9sbCsrKSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yU3RyaXBlQm5wbFBvcHVwUG9sbChwb3B1cEhhbmRsZS5hYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICAgIGlmIChwb3B1cEhhbmRsZS5hYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3BvcHVwTmFtZX0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgIH1cbiAgICAgIGxldCBwYXltZW50SW50ZW50O1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyaXBlLnJldHJpZXZlUGF5bWVudEludGVudChjbGllbnRTZWNyZXQpO1xuICAgICAgICBwYXltZW50SW50ZW50ID0gcmVzdWx0LnBheW1lbnRJbnRlbnQ7XG4gICAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgICBzdHJpcGVMb2dfXyhg4pScICR7cG9wdXBOYW1lfSBwYXltZW50IHN0YXR1cyBjaGVjayBmYWlsZWQsIHJldHJ5aW5nLi4uYCwgcmVzdWx0LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3RyaXBlTG9nX18oYOKUnCAke3BvcHVwTmFtZX0gcGF5bWVudCBzdGF0dXMgY2hlY2sgZmFpbGVkLCByZXRyeWluZy4uLmAsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXR1cyA9IHBheW1lbnRJbnRlbnQ/LnN0YXR1cztcbiAgICAgIGlmIChzdGF0dXMgJiYgQk5QTF9GQUlMRURfU1RBVFVTRVMuaW5jbHVkZXMoc3RhdHVzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cG9wdXBOYW1lfSBwYXltZW50IHdhcyBub3QgYXV0aG9yaXplZGApO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXR1cyAmJiBCTlBMX0FVVEhPUklaRURfU1RBVFVTRVMuaW5jbHVkZXMoc3RhdHVzKSkge1xuICAgICAgICBzdHJpcGVMb2dfXyhg4pWwICR7cG9wdXBOYW1lfSBwb3B1cCBmbG93IGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgJiYgc3RhdHVzICE9PSBcInJlcXVpcmVzX2FjdGlvblwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtwb3B1cE5hbWV9IHBheW1lbnQgaGFzIHVuZXhwZWN0ZWQgU3RyaXBlIHN0YXR1czogJHtzdGF0dXN9YCk7XG4gICAgICB9XG4gICAgICBpZiAocG9wdXBXaW5kb3cuY2xvc2VkKSB7XG4gICAgICAgIGlmICgtLXBvbGxzQWZ0ZXJDbG9zZSA8PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3BvcHVwTmFtZX0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcG9sbHNBZnRlckNsb3NlID0gQk5QTF9QT1BVUF9QT0xMU19BRlRFUl9DTE9TRTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RyaXBlTG9nX18oYOKVsCBUaW1lZCBvdXQgY2hlY2tpbmcgJHtwb3B1cE5hbWV9IHBheW1lbnQgc3RhdHVzIGluIHRoZSBicm93c2VyOyBjaGVja2luZyB3aXRoIHRoZSBzZXJ2ZXIuLi5gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbG9zZVN0cmlwZUJucGxQb3B1cChwb3B1cEhhbmRsZSk7XG4gICAgd2luZG93LmZvY3VzKCk7XG4gIH1cbn07XG5jb25zdCBCTlBMX0NPTkZJUk1fUkVUUllfTElNSVQgPSAxMjA7XG5jb25zdCBjb25maXJtU3RyaXBlQm5wbFBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHJlcXVlc3QpID0+IHtcbiAgY29uc3QgcG9wdXBSZXF1ZXN0ID0ge1xuICAgIC4uLnJlcXVlc3QsXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAuLi5yZXF1ZXN0LnByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YSxcbiAgICAgIHN0cmlwZV9ibnBsX3BvcHVwX2Zsb3c6IHRydWVcbiAgICB9XG4gIH07XG4gIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgQk5QTF9DT05GSVJNX1JFVFJZX0xJTUlUOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhjZGVDb25uLCBwb3B1cFJlcXVlc3QpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWdldEVycm9yTWVzc2FnZShlcnJvcikuaW5jbHVkZXMoXCJbUFBBX1JFVFJZXVwiKSkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIHN0cmlwZUxvZ19fKFwi4pScIFRoZSBwb3N0LWFjdGlvbiByZWRpcmVjdCBpcyBzdGlsbCBjb25maXJtaW5nIHRoaXMgcGF5bWVudCwgcmV0cnlpbmcuLi5cIik7XG4gICAgICBhd2FpdCBzbGVlcChCTlBMX1BPUFVQX1BPTExfSU5URVJWQUxfTVMpO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJUaW1lZCBvdXQgd2hpbGUgY29uZmlybWluZyB0aGUgcGF5bWVudC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBiZWZvcmUgcGF5aW5nIGFnYWluLlwiKTtcbn07XG5cbmNvbnN0IE1BWF9DT05GSVJNX0xPT1BfSVRFUkFUSU9OUyA9IDQ7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyRjLCBlcnJfXzogZXJyX18kZCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJ1bmlmaWVkLWNjXCIpO1xuY29uc3QgdW5zYWZlbHlSdW5VbmlmaWVkQ2NGbG93ID0gYXN5bmMgKHtcbiAgY29udGV4dCxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBub25DZGVGb3JtSW5wdXRzLFxuICBmb3JtQ2FsbGJhY2tzLFxuICBjdXN0b21QYXJhbXNcbn0pID0+IHtcbiAgbG9nX18kYyhg4pScIFJ1bm5pbmcgdW5pZmllZCBDQyBmbG93Li4uYCwgeyBjaGVja291dFBheW1lbnRNZXRob2QgfSk7XG4gIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICBsb2dfXyRjKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3ByZWZpbGwubW9kZX1dYCk7XG4gIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gIGNvbnN0IGNvbW1vbkNoZWNrb3V0UGFyYW1zID0ge1xuICAgIHNlc3Npb25faWQ6IGNvbnRleHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sXG4gICAgICAvLyBCcm93c2VyIGRhdGEgbGV0cyBwcm9jZXNzb3JzIChlLmcuIEFkeWVuKSBydW4gZnJpY3Rpb25sZXNzIDNEUyBvbiBjdXN0b21lci1wcmVzZW50IGNoYXJnZXNcbiAgICAgIGJyb3dzZXI6IGdldEZyYXVkTWV0YWRhdGEoKSxcbiAgICAgIC8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgaW4gdGhlIGNoZWNrb3V0IGF0dGVtcHQgbG9nc1xuICAgICAgZGV2aWNlVG9rZW46IGdldERldmljZVRva2VuKClcbiAgICB9LFxuICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6IHRydWUsXG4gICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiB7XG4gICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9LFxuICAgIHBheW1lbnRfcm91dGVfaWQ6IGN1c3RvbVBhcmFtcy5wYXltZW50Um91dGVJZFxuICB9O1xuICBlcnJfXyRkKGN1c3RvbVBhcmFtcywgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICBsb2dfXyRjKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gUGFydGlhbCBQTXMgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkXG4gIH0pO1xuICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICBjb25zdCBzdGFydFBmUmVzdWx0ID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvd0ZvckNDKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgbG9nX18kYyhg4pScIHN0YXJ0UGYgcmVzdWx0YCwgc3RhcnRQZlJlc3VsdCk7XG4gIGlmIChzdGFydFBmUmVzdWx0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmV0dXJuU3VjY2Vzc1Jlc3VsdChwcmVmaWxsLm1vZGUsIHN0YXJ0UGZSZXN1bHQpO1xuICB9XG4gIGlmICghc3RhcnRQZlJlc3VsdC5jaGVja291dF9hdHRlbXB0X2lkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgYXR0ZW1wdCBJRCBmcm9tIFBGIHJlc3VsdFwiKTtcbiAgfVxuICByZXR1cm4gcnVuQ29uZmlybUxvb3Aoe1xuICAgIGNvbnRleHQsXG4gICAgcHJlZmlsbCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLFxuICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgc3RhcnRQZlJlc3VsdCxcbiAgICBjaGVja291dEF0dGVtcHRJZDogc3RhcnRQZlJlc3VsdC5jaGVja291dF9hdHRlbXB0X2lkXG4gIH0pO1xufTtcbmNvbnN0IHJ1bkNvbmZpcm1Mb29wID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICBjb25zdCB7XG4gICAgY29udGV4dCxcbiAgICBwcmVmaWxsLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICBzdGFydFBmUmVzdWx0LFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkXG4gIH0gPSBwYXJhbXM7XG4gIGxldCBwZlJlc3VsdCA9IHN0YXJ0UGZSZXN1bHQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTUFYX0NPTkZJUk1fTE9PUF9JVEVSQVRJT05TOyBpKyspIHtcbiAgICBsb2dfXyRjKGDilJwgUnVubmluZyBjb25maXJtIGxvb3AgaXRlcmF0aW9uICR7aX1gKTtcbiAgICB0cmFjayhcInVuaWZpZWRfY2NfY29uZmlybV9sb29wX2l0ZXJhdGlvblwiLCB7IGl0ZXJhdGlvbjogaSB9KTtcbiAgICBjb25zdCB7IHVzZXJBY3Rpb24gfSA9IHZhbGlkYXRlUGZSZXN1bHRVc2VyQWN0aW9uKHBmUmVzdWx0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlckFjdGlvblJlc3VsdCA9IGF3YWl0IHJ1blJlcXVpcmVkVXNlckFjdGlvbihjb250ZXh0LmJhc2VVcmwsIHVzZXJBY3Rpb24sIHByZWZpbGwsIG5vbkNkZUZvcm1JbnB1dHMpO1xuICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLmNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhLFxuICAgICAgICAuLi51c2VyQWN0aW9uUmVzdWx0Lm1ldGFkYXRhRm9yQ29uZmlybVN0ZXBcbiAgICAgIH07XG4gICAgICBsb2dfXyRjKGDilJwgTmV3IGV4dHJhIG1ldGFkYXRhYCwgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgICAgZXJyX18kZChg4pScIEVycm9yIGluIHJ1bm5pbmcgdXNlciBhY3Rpb24gaW4gaXRlcmF0aW9uICR7aX0uIENvbnRpbnVpbmcgdG8gY29uZmlybSBzdGVwLi4uYCwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRyYWNrKFwidW5pZmllZF9jY191c2VyX2FjdGlvbl9lcnJvclwiLCB7IGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSwgaXRlcmF0aW9uOiBpIH0pO1xuICAgIH1cbiAgICBwZlJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjaGVja291dEF0dGVtcHRJZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFcbiAgICB9KTtcbiAgICBsb2dfXyRjKGDilJwgY29uZmlybVBmIHJlc3VsdCAoaXRlcmF0aW9uICR7aX0pYCwgcGZSZXN1bHQpO1xuICAgIGlmIChwZlJlc3VsdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmV0dXJuU3VjY2Vzc1Jlc3VsdChwcmVmaWxsLm1vZGUsIHBmUmVzdWx0KTtcbiAgICB9XG4gIH1cbiAgdHJhY2soXCJ1bmlmaWVkX2NjX3VuZXhwZWN0ZWRfYnJhbmNoXCIsIHtcbiAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogcGZSZXN1bHQuY2hlY2tvdXRfYXR0ZW1wdF9pZCxcbiAgICBjb25maXJtUEZSZXN1bHQ6IHBmUmVzdWx0XG4gIH0pO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBlcnJvciwgcGxlYXNlIHRyeSBhbm90aGVyIHBheW1lbnQgbWV0aG9kXCIpO1xufTtcbmNvbnN0IHJ1blJlcXVpcmVkVXNlckFjdGlvbiA9IGFzeW5jIChiYXNlVXJsLCB1c2VyQWN0aW9uLCBwcmVmaWxsLCBub25DZGVGb3JtSW5wdXRzKSA9PiB7XG4gIGlmICh1c2VyQWN0aW9uLl91bmlmaWVkX2NjX2FjdGlvbl9uYW1lID09PSBcIjNEU19SRVFVSVJFRFwiKSB7XG4gICAgaWYgKHVzZXJBY3Rpb24udHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpIHtcbiAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhwYXJzZVVzZXJGRVBheWxvYWQodXNlckFjdGlvbikpO1xuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICB9IGVsc2UgaWYgKGNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyh1c2VyQWN0aW9uKSkge1xuICAgICAgY29uc3QgYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkFpcndhbGxleDNkc0Zsb3coYmFzZVVybCwgdXNlckFjdGlvbik7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFpcndhbGxleDogYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCB9IH07XG4gICAgfSBlbHNlIGlmIChjaGVja0lmUmVxdWlyZXNBZHllbjNkcyh1c2VyQWN0aW9uKSkge1xuICAgICAgY29uc3QgYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWR5ZW4zZHNGbG93KFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgdXNlckFjdGlvbixcbiAgICAgICAgcHJlZmlsbC5sb2NhbGVcbiAgICAgICk7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFkeWVuOiBhZHllbk1ldGFkYXRhRm9yQ2hlY2tvdXQgfSB9O1xuICAgIH0gZWxzZSBpZiAoY2hlY2tJZlJlcXVpcmVzQ3liZXJzb3VyY2UzZHModXNlckFjdGlvbikpIHtcbiAgICAgIGF3YWl0IHJ1bkN5YmVyc291cmNlM2RzRmxvdyh1c2VyQWN0aW9uKTtcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHt9IH07XG4gICAgfSBlbHNlIGlmIChjaGVja0lmTGVnYWN5M0RTUGF0aCh1c2VyQWN0aW9uKSkge1xuICAgICAgYXdhaXQgY29tbW9uQ0MzRFNGbG93KHsgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBbdXNlckFjdGlvbl0gfSwgYmFzZVVybCk7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7fSB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCAzRFMgdXNlciBhY3Rpb246ICR7SlNPTi5zdHJpbmdpZnkodXNlckFjdGlvbil9YCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlcXVpcmVkIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHVzZXJBY3Rpb24pfWApO1xuICB9XG59O1xuY29uc3QgY2hlY2tJZkxlZ2FjeTNEU1BhdGggPSAodXNlckFjdGlvbikgPT4ge1xuICB0cnkge1xuICAgIHBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhKFt1c2VyQWN0aW9uXSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuY29uc3QgdmFsaWRhdGVQZlJlc3VsdFVzZXJBY3Rpb24gPSAocGZSZXN1bHQpID0+IHtcbiAgaWYgKCFwZlJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSBpZiAocGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIHJlcXVpcmVkIHVzZXIgYWN0aW9uc1wiKTtcbiAgfSBlbHNlIGlmIChwZlJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG11bHRpcGxlIHJlcXVpcmVkIHVzZXIgYWN0aW9uc1wiKTtcbiAgfVxuICBjb25zdCB1c2VyQWN0aW9uID0gVXNlckFjdGlvbkZFUGF5bG9hZC5zYWZlUGFyc2UocGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbiAgaWYgKCF1c2VyQWN0aW9uLnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRkKFwiVXNlciBhY3Rpb24gcmF3IHBheWxvYWRcIiwgcGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbiAgICBlcnJfXyRkKFwiUGFyc2luZyBlcnJvclwiLCB1c2VyQWN0aW9uLmVycm9yKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzY2hlbWEgb2YgdXNlciBhY3Rpb24gcGF5bG9hZCBpcyBub3QgdmFsaWRcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB1c2VyQWN0aW9uOiB1c2VyQWN0aW9uLmRhdGFcbiAgfTtcbn07XG5jb25zdCByZXR1cm5TdWNjZXNzUmVzdWx0ID0gKHByZWZpbGxNb2RlLCBwZlJlc3VsdCkgPT4ge1xuICBpZiAocHJlZmlsbE1vZGUgPT09IFwic2V0dXBcIikge1xuICAgIGNvbnN0IHBheW1lbnRNZXRob2RJZCA9IHBmUmVzdWx0LmNjX3BtX2lkID8/IHBmUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdLmlkO1xuICAgIGlmICghcGF5bWVudE1ldGhvZElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBDQyBQTSBJRCBvciBwYXltZW50X21ldGhvZHMgZm91bmQgaW4gUEYgcmVzdWx0XCIpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBwYXltZW50TWV0aG9kSWRcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGlmICghcGZSZXN1bHQuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgc3VjY2VzcyByZXNwb25zZSBmcm9tIHN0YXJ0UEZcIik7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IHBmUmVzdWx0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICB9O1xuICB9XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRiLCBlcnJfXzogZXJyX18kYyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IHJ1bkNvbW1vbkNjRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJGIoYOKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uYCwgeyBjaGVja291dFBheW1lbnRNZXRob2QgfSk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICB0cmFjayhcImNvbW1vbl9jY19mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgLi4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJlZmlsbFxuICAgIH0pO1xuICAgIGNvbnN0IHVuaWZpZWRDQ1JvbGxvdXRSYXRpbyA9IHByZWZpbGwuZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzPy5bXCJ1bmlmaWVkX2NjXCJdID8/IDA7XG4gICAgbG9nX18kYihg4pScIFVuaWZpZWQgQ0Mgcm9sbG91dDogJHtNYXRoLnJvdW5kKHVuaWZpZWRDQ1JvbGxvdXRSYXRpbyAqIDEwMCl9JWApO1xuICAgIGNvbnN0IHJvbGwgPSBNYXRoLnJhbmRvbSgpO1xuICAgIGNvbnN0IHVzZVVuaWZpZWRDQ0Zsb3cgPSByb2xsIDwgdW5pZmllZENDUm9sbG91dFJhdGlvO1xuICAgIGNvbnN0IHVjY1JvbGxUcmFja2luZ01ldGFkYXRhID0ge1xuICAgICAgcm9sbCxcbiAgICAgIHVuaWZpZWRDQ1JvbGxvdXRSYXRpbyxcbiAgICAgIHVzZVVuaWZpZWRDQ0Zsb3dcbiAgICB9O1xuICAgIGlmICh1c2VVbmlmaWVkQ0NGbG93KSB7XG4gICAgICBsb2dfXyRiKGDilJwgUGlja2VkIHVuaWZpZWQgQ0MgZmxvdyAoJHtyb2xsfSB2cyAke3VuaWZpZWRDQ1JvbGxvdXRSYXRpb30pYCk7XG4gICAgICB0cmFjayhcInVuaWZpZWRfY2NfZmxvd19waWNrZWRcIiwgdWNjUm9sbFRyYWNraW5nTWV0YWRhdGEpO1xuICAgICAgcmV0dXJuIHVuc2FmZWx5UnVuVW5pZmllZENjRmxvdyh7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zLFxuICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyRiKGDilJwgUGlja2VkIGxlZ2FjeSBDQyBmbG93ICgke3JvbGx9IHZzICR7dW5pZmllZENDUm9sbG91dFJhdGlvfSlgKTtcbiAgICAgIHRyYWNrKFwibGVnYWN5X2NjX2Zsb3dfcGlja2VkXCIsIHVjY1JvbGxUcmFja2luZ01ldGFkYXRhKTtcbiAgICB9XG4gICAgbG9nX18kYihg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBjb25zdCBjb21tb25DaGVja291dFBhcmFtcyA9IHtcbiAgICAgIHNlc3Npb25faWQ6IGNvbnRleHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICAgICAgLy8gQnJvd3NlciBkYXRhIGxldHMgcHJvY2Vzc29ycyAoZS5nLiBBZHllbikgcnVuIGZyaWN0aW9ubGVzcyAzRFMgb24gY3VzdG9tZXItcHJlc2VudCBjaGFyZ2VzXG4gICAgICAgIGJyb3dzZXI6IGdldEZyYXVkTWV0YWRhdGEoKVxuICAgICAgfSxcbiAgICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6IGZhbHNlLFxuICAgICAgcGF5bWVudF9yb3V0ZV9pZDogY3VzdG9tUGFyYW1zLnBheW1lbnRSb3V0ZUlkLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKCksXG4gICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgbG9nX18kYihg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIGxvZ19fJGIoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7cHJlZmlsbC50b2tlbn1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNldHVwQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyRiKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7cmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJGIoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJGIoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDZGVFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3Iub3JpZ2luYWxFcnJvck1lc3NhZ2UuaW5jbHVkZXMoXCIzRFNfUkVRVUlSRURcIikpIHtcbiAgICAgICAgICBsb2dfXyRiKGDilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93YCk7XG4gICAgICAgICAgbG9nX18kYihcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICB0cmFjayhcIjNkc19yZXF1aXJlZFwiLCB7XG4gICAgICAgICAgICAuLi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgICAgICAuLi5lcnJvci5yZXNwb25zZS5oZWFkZXJzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgZXJySGVhZGVycyA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnMgPz8ge307XG4gICAgICAgICAgaWYgKFwib3AtZXhpc3RpbmctY2MtcG0taWRcIiBpbiBlcnJIZWFkZXJzKSB7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leGlzdGluZ19jY19wbV9pZCA9IGVyckhlYWRlcnNbXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiXTtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBFeGlzdGluZyBDQyBQTSBJRDogJHtjb21tb25DaGVja291dFBhcmFtcy5leGlzdGluZ19jY19wbV9pZH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNQb2NreXQzZHMgPSBjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzUG9ja3l0M2RzKSB7XG4gICAgICAgICAgICBsb2dfXyRiKGDilJwgUG9ja3l0IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIFBvY2t5dCAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IHBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5Qb2NreXQzZHNGbG93KGNvbnRleHQuYmFzZVVybCwgZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcInBvY2t5dFwiXSA9IHBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlcXVpcmVzQWlyd2FsbGV4M2RzID0gY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzKGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGlmIChyZXF1aXJlc0FpcndhbGxleDNkcykge1xuICAgICAgICAgICAgbG9nX18kYihg4pScIEFpcndhbGxleCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBaXJ3YWxsZXggM0RTIGZsb3cuYCk7XG4gICAgICAgICAgICBjb25zdCBhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWlyd2FsbGV4M2RzRmxvdyhjb250ZXh0LmJhc2VVcmwsIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJhaXJ3YWxsZXhcIl0gPSBhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXF1aXJlc0FkeWVuM2RzID0gY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzQWR5ZW4zZHMpIHtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBBZHllbiAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBZHllbiAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGFkeWVuTWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkFkeWVuM2RzRmxvdyhcbiAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgICAgIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICAgIHByZWZpbGwubG9jYWxlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJhZHllblwiXSA9IGFkeWVuTWV0YWRhdGFGb3JDaGVja291dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc3RhcnRQZlJlc3VsdCA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgbG9nX18kYihg4pScIFN0YXJ0IHBheW1lbnQgZmxvdyByZXN1bHQ6YCwgc3RhcnRQZlJlc3VsdCk7XG4gICAgICAgICAgY29uc3QgY3liZXJzb3VyY2VBY3Rpb24gPSBzdGFydFBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKFxuICAgICAgICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiY3liZXJzb3VyY2VfcGF5ZXJfYXV0aFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoY3liZXJzb3VyY2VBY3Rpb24pIHtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBDeWJlcnNvdXJjZSAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBDeWJlcnNvdXJjZSAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCA9IEN5YmVyc291cmNlQWN0aW9uUGF5bG9hZC5wYXJzZShjeWJlcnNvdXJjZUFjdGlvbik7XG4gICAgICAgICAgICBjb25zdCBjeWJlcnNvdXJjZU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5DeWJlcnNvdXJjZTNkc0Zsb3coe1xuICAgICAgICAgICAgICAuLi5jeWJlcnNvdXJjZUFjdGlvblBheWxvYWQsXG4gICAgICAgICAgICAgIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgICBfdW5pZmllZF9jY19wY2NzX2lkOiBcIlwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhW1wiY3liZXJzb3VyY2VcIl0gPSBjeWJlcnNvdXJjZU1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVN0cmlwZUZsb3cgPSBlcnJvci5yZXNwb25zZS5oZWFkZXJzPy5bXCJvcC1zaG91bGQtdXNlLW5ldy1mbG93XCJdICE9PSBcInRydWVcIjtcbiAgICAgICAgICBpZiAoIXJlcXVpcmVzUG9ja3l0M2RzICYmICFjeWJlcnNvdXJjZUFjdGlvbikge1xuICAgICAgICAgICAgaWYgKHNob3VsZFVzZVN0cmlwZUZsb3cpIHtcbiAgICAgICAgICAgICAgbG9nX18kYihg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd2ApO1xuICAgICAgICAgICAgICBhd2FpdCBzdHJpcGVDQzNEU0Zsb3cocGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbG9nX18kYihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvd2ApO1xuICAgICAgICAgICAgICBhd2FpdCBjb21tb25DQzNEU0Zsb3coc3RhcnRQZlJlc3VsdCwgY29udGV4dC5iYXNlVXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nX18kYihg4pScIFByZS1zdGFydCAzRFMgaXMgc3VjY2Vzc2Z1bCwgb3RoZXIgM0RTIGZsb3dzIHdpbGwgYmUgc2tpcHBlZC5gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgY2NQbUlkID0gc3RhcnRQZlJlc3VsdC5jY19wbV9pZDtcbiAgICAgICAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBbY2NfcG1faWQ6ICR7Y2NQbUlkfV1gKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBjY1BtSWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9nX18kYihg4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6YCwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBsb2dfXyRiKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Y3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7IXNob3VsZFVzZVN0cmlwZUZsb3cgPyBcIm5ld1wiIDogXCJsZWdhY3lcIn1dYCk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgIC4uLmNvbW1vbkNoZWNrb3V0UGFyYW1zLFxuICAgICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogY2NQbUlkLFxuICAgICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiBzaG91bGRVc2VTdHJpcGVGbG93XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvZ19fJGIoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycl9fJGMoYOKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERWApO1xuICAgICAgZXJyX18kYyhlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbik7XG5jb25zdCBwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICBjb25zdCBzdHJpcGVBY3Rpb24gPSByZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpO1xuICBpZiAoIXN0cmlwZUFjdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICB9XG4gIHJldHVybiBTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEucGFyc2Uoc3RyaXBlQWN0aW9uKTtcbn07XG5jb25zdCBjb21tb24zRFNBY3Rpb25UeXBlcyA9IFtcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiwgXCJhZHllblwiXTtcbmNvbnN0IHBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT4ge1xuICBjb25zdCBjb21tb25BY3Rpb24gPSByZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBjb21tb24zRFNBY3Rpb25UeXBlcy5pbmNsdWRlcyhhY3Rpb24udHlwZSkpO1xuICBpZiAoIWNvbW1vbkFjdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICB9XG4gIHJldHVybiBDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UoY29tbW9uQWN0aW9uKTtcbn07XG5jb25zdCBjb21tb25DQzNEU0Zsb3cgPSBhc3luYyAoc3RhcnRQZlJlc3VsdCwgYmFzZVVybCkgPT4ge1xuICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgbG9nX18kYihg4pScIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlgKTtcbiAgICB0cmFjayhcIjNkc19jb21wbGV0ZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbG9nX18kYihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke25leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmx9XWApO1xuICB0cmFjayhcIjNkc19yZWRpcmVjdFwiLCB7XG4gICAgLi4ubmV4dEFjdGlvbk1ldGFkYXRhXG4gIH0pO1xuICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oeyB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsIGJhc2VVcmwgfSk7XG4gIGxvZ19fJGIoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdHJhY2soXCIzZHNfY2FuY2VsbGVkXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRyYWNrKFwiM2RzX2ZhaWx1cmVcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbiAgdHJhY2soXCJjb21tb25fM2RzX2NvbXBsZXRlZFwiKTtcbn07XG5cbmNvbnN0IExvb3BDcnlwdG9DcG0gPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJsb29wXCIpLFxuICBwcm92aWRlcjogei5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIG1lcmNoYW50X2lkOiB6LnN0cmluZygpLFxuICAgIGVudGl0eV9pZDogei5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHouc3RyaW5nKCksXG4gICAgc3VwcG9ydGVkX2N1cnJlbmNpZXM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRhLCBlcnJfXzogZXJyX18kYiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJsb29wLWNyeXB0b1wiKTtcbmNvbnN0IGluaXRMb29wRmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQgfSkgPT4ge1xuICAgIGxvZ19fJGEoYENoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgTG9vcCBDcnlwdG8uLi5gKTtcbiAgICBjb25zdCBjaGVja291dFBheW1lbnRNZXRob2QgPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgTG9vcENyeXB0b0NwbSk7XG4gICAgbG9nX18kYShgY2hlY2tvdXRQYXltZW50TWV0aG9kOiAke0pTT04uc3RyaW5naWZ5KGNoZWNrb3V0UGF5bWVudE1ldGhvZCl9YCk7XG4gICAgbG9nX18kYShgU3RhcnRpbmcgTG9vcCBDcnlwdG8gZmxvdy4uLmApO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBwcmVGbG93TmV4dEFjdGlvbk1ldGFkYXRhID0gYXdhaXQgcHJlcGFyZVBheW1lbnRGbG93KGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH0pO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KFxuICAgICAgY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgcHJlZmlsbC50b2tlbixcbiAgICAgIGlzU2V0dXBNb2RlLFxuICAgICAgdm9pZCAwXG4gICAgKTtcbiAgICBpZiAoIWlzU2V0dXBNb2RlICYmICFjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXMuaW5jbHVkZXMocHJlZmlsbC5jdXJyZW5jeSkpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ3VycmVuY3kgJHtwcmVmaWxsLmN1cnJlbmN5fSBub3QgZW5hYmxlZCBmb3IgTG9vcC4gRW5hYmxlZCBjdXJyZW5jaWVzOiAke2NoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llc31gXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEgfHwgIXByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEubmV4dF9hY3Rpb25fbWV0YWRhdGEpIHtcbiAgICAgIHRocm93IEVycm9yKFwiRmFpbGVkIHRvIGZldGNoIG5lY2Vzc2FyeSBzZXR1cCBkYXRhIGZvciBMb29wXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXltZW50U2V0dXBJbmZvID0gcHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBsZXQgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IHBheW1lbnRTZXR1cEluZm9bXCJhdXRob3JpemF0aW9uX2Ftb3VudFwiXTtcbiAgICBsZXQgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IHBheW1lbnRTZXR1cEluZm9bXCJtaW5fYXV0aG9yaXphdGlvbl9hbW91bnRcIl07XG4gICAgY29uc3QgYWxsb3dDdXN0b21lclRvQ2hvb3NlQXV0aCA9IHBheW1lbnRTZXR1cEluZm9bXCJhbGxvd19jdXN0b21lcl90b19jaG9vc2VfYXV0aFwiXTtcbiAgICBsZXQgY2hhcmdlQW1vdW50VXNkQXRvbTtcbiAgICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICAgIGNoYXJnZUFtb3VudFVzZEF0b20gPSAwO1xuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQsIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFyZ2VBbW91bnRVc2RBdG9tID0gKGluaXRpYWxQcmV2aWV3ID8gaW5pdGlhbFByZXZpZXcuYW1vdW50QXRvbSA6IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20pICogcGF5bWVudFNldHVwSW5mb1tcInRva2VuX3ByaWNlXCJdO1xuICAgICAgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQsIGNoYXJnZUFtb3VudFVzZEF0b20pO1xuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCA9IE1hdGgubWF4KHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQsIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQpO1xuICAgIH1cbiAgICBjb25zdCBwYXltZW50VXNkQW1vdW50ID0gY2hhcmdlQW1vdW50VXNkQXRvbTtcbiAgICBjb25zdCBjdXN0b21lclJlZklkID0gdjQoKTtcbiAgICBjb25zdCB3aWRnZXRQcm9wcyA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQsXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50LFxuICAgICAgY3VzdG9tZXJSZWZJZCxcbiAgICAgIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQsXG4gICAgICBhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoXG4gICAgfTtcbiAgICBjb25zdCBpbml0TG9vcENvbm5lY3RQcm9wcyA9IHtcbiAgICAgIGFwaVRva2VuOiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuYXBpX3Rva2VuLFxuICAgICAgZW50aXR5SWQ6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5lbnRpdHlfaWQsXG4gICAgICBtZXJjaGFudElkOiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLmVudmlyb25tZW50XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICB3aWRnZXRQcm9wcyxcbiAgICAgIGluaXRMb29wQ29ubmVjdFByb3BzXG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkxvb3BGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kYShgUnVubmluZyBMb29wIGZsb3cuLi5gKTtcbiAgICBsb2dfXyRhKFwiY29udGV4dFwiLCBjb250ZXh0KTtcbiAgICBsb2dfXyRhKFwiY2hlY2tvdXRQYXltZW50TWV0aG9kXCIsIGNoZWNrb3V0UGF5bWVudE1ldGhvZCk7XG4gICAgbG9nX18kYShcIm5vbkNkZUZvcm1JbnB1dHNcIiwgbm9uQ2RlRm9ybUlucHV0cyk7XG4gICAgbG9nX18kYShcImZsb3dDYWxsYmFja3NcIiwgZm9ybUNhbGxiYWNrcyk7XG4gICAgbG9nX18kYShcImN1c3RvbVBhcmFtc1wiLCBjdXN0b21QYXJhbXMpO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kYShg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgaXNDaGVja291dE1vZGUgPSBwcmVmaWxsLm1vZGUgIT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBjdXN0b21lckZpZWxkcyA9IGNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgaWYgKCFjdXN0b21QYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gRmFpbGVkIHRvIHByb3Blcmx5IHN1Ym1pdCBmb3JtIGRhdGEuXCIpO1xuICAgIH1cbiAgICBpZiAoIWN1c3RvbVBhcmFtcy5zdWNjZXNzKSB7XG4gICAgICB0cmFjayhcImxvb3BfcGF5X2Zsb3dfZmFpbHVyZVwiLCBjdXN0b21QYXJhbXMpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBTdWNjZXNzIGlzIG5vdCB0cnVlLlwiKTtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAuLi5jdXN0b21lckZpZWxkcyxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogaXNDaGVja291dE1vZGUsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGlzQ2hlY2tvdXRNb2RlID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogY3VzdG9tUGFyYW1zLnBheW1lbnRNZXRob2QucGF5bWVudE1ldGhvZElkLFxuICAgICAgLy8gTk9URTogd2UgZG8gaGF2ZSB0aGUgY2hlY2tvdXQgYXR0ZW1wdCBpZCBoZXJlIGV2ZW4gaWYgaXRzIGEgc2V0dXAsIGJ1dCBmb3Igbm93IHdlIGRvbid0IGluY2x1ZGUgaXRcbiAgICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBjaGVja291dCBhdHRlbXB0IHN1cHBvcnQgZm9yIHNldHVwIGludGVudHMuXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBpc0NoZWNrb3V0TW9kZSA/IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5jaGVja291dF9hdHRlbXB0X2lkIDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGxvb3BfY3VzdG9tZXI6IGN1c3RvbVBhcmFtcy5jdXN0b21lcixcbiAgICAgICAgbG9vcF9wYXltZW50X21ldGhvZDogY3VzdG9tUGFyYW1zLnBheW1lbnRNZXRob2QsXG4gICAgICAgIGxvb3Bfc3VjY2VzczogY3VzdG9tUGFyYW1zLnN1Y2Nlc3MsXG4gICAgICAgIGxvb3BfcGF5aW5faWQ6IGN1c3RvbVBhcmFtcy5wYXlpbklkXG4gICAgICB9XG4gICAgfSk7XG4gICAgbG9nX18kYShgQ29uZmlybSByZXN1bHQ6ICR7Y29uZmlybVJlc3VsdH1gKTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJGEoYERvaW5nIHBheW1lbnQgc2V0dXAuLi5gKTtcbiAgICAgIGxvZ19fJGEoYOKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OmAsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgbG9nX18kYShg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2NyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyRhKGBEb2luZyBjaGVja291dC4uLmApO1xuICAgICAgaWYgKCFjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICAgIGVycl9fJGIoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDksIGVycl9fOiBlcnJfXyRhIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInBheXBhbFwiKTtcbmNvbnN0IFBheXBhbENwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHsgY2xpZW50X2lkOiB6LnN0cmluZygpIH0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbmNvbnN0IGluaXRQYXlwYWxGbG93ID0gYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gIGNvbnN0IHBheXBhbENwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBQYXlwYWxDcG0pO1xuICBpZiAoIXBheXBhbENwbSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlBheVBhbCBDUE0gbm90IGZvdW5kIGluIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHNcIik7XG4gIH1cbiAgY29uc3Qgc3RhcnRGbG93ID0gKCkgPT4ge1xuICAgIHJldHVybiBPanNGbG93cy5wYXlwYWwucnVuKHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHBheXBhbENwbSxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgc3RhcnRGbG93XG4gIH07XG59O1xuY29uc3QgcnVuUGF5cGFsRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBsb2dfXyQ5KGBSdW5uaW5nIFBheVBhbCBmbG93Li4uYCk7XG4gICAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgICBjb25zdCB7IGlzQW5vbnltb3VzLCB1c2VSZWRpcmVjdEZsb3cgfSA9IGN1c3RvbVBhcmFtcy5zZXR0aW5ncyA/PyB7fTtcbiAgICAgIGxvZ19fJDkoYFZlcmlmeWluZyBDUE0uLi5gKTtcbiAgICAgIGNvbnN0IGNwbSA9IFBheXBhbENwbS5wYXJzZShjaGVja291dFBheW1lbnRNZXRob2QpO1xuICAgICAgbG9nX18kOShg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc2ApO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLCB7XG4gICAgICAgIC4uLmlzQW5vbnltb3VzID8gZ2VuZXJhdGVBbm9ueW1vdXNWYWx1ZXMoKSA6IHZvaWQgMCxcbiAgICAgICAgLi4ucHJlZmlsbC5jaGVja291dF9zZXR0aW5nc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBuZXdDdXN0b21lckZpZWxkcyA9IGNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgICBsb2dfXyQ5KGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtwcmVmaWxsLm1vZGV9YCk7XG4gICAgICBjb25zdCBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93ID0gdjQoKTtcbiAgICAgIGNvbnN0IGlzUGF5Rmlyc3RGbG93ID0gZmFsc2U7XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVxdWVzdCA9IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY3BtLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY3BtLFxuICAgICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGlzUGF5Rmlyc3RGbG93LFxuICAgICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGlzUGF5Rmlyc3RGbG93ID8ge1xuICAgICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgICAgfSA6IHZvaWQgMCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiB1c2VSZWRpcmVjdEZsb3csXG4gICAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3dcbiAgICAgICAgfSxcbiAgICAgICAgLi4ubmV3Q3VzdG9tZXJGaWVsZHNcbiAgICAgIH07XG4gICAgICBjb25zdCBwcmVBY3Rpb25VcmwgPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCBjb250ZXh0LmJhc2VVcmwpLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBlbmNvZGVkUmVxdWVzdCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoc3RhcnRQYXltZW50Rmxvd1JlcXVlc3QpKTtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBzdDogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcjogZW5jb2RlZFJlcXVlc3RcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSBgJHtwcmVBY3Rpb25Vcmx9PyR7c2VhcmNoUGFyYW1zLnRvU3RyaW5nKCl9YDtcbiAgICAgIGlmICh1c2VSZWRpcmVjdEZsb3cpIHtcbiAgICAgICAgbG9nX18kOShcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZWRpcmVjdFVybDtcbiAgICAgICAgYXdhaXQgc2xlZXAoMjAgKiAxZTMpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBheXBhbEZsb3dSZXN1bHQgPSBhd2FpdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0KFxuICAgICAgICBcIlBheVBhbFwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93LFxuICAgICAgICByZWRpcmVjdFVybFxuICAgICAgKTtcbiAgICAgIGxvZ19fJDkoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgcGF5cGFsRmxvd1Jlc3VsdCk7XG4gICAgICBjb25zdCBjaGVja291dEF0dGVtcHRJZCA9IHBhcnNlQXJnRnJvbUhyZWYocGF5cGFsRmxvd1Jlc3VsdC5ocmVmLCBcImNhdHRcIik7XG4gICAgICBjb25zdCBhcHByb3ZhbFNlc3Npb25JZCA9IHBhcnNlQXJnRnJvbUhyZWYocGF5cGFsRmxvd1Jlc3VsdC5ocmVmLCBcImFwcHJvdmFsX3Nlc3Npb25faWRcIik7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBpc1BheUZpcnN0RmxvdyA/IGNoZWNrb3V0QXR0ZW1wdElkIDogdm9pZCAwLFxuICAgICAgICB0aGVpcl9wbV9pZDogaXNQYXlGaXJzdEZsb3cgPyBhcHByb3ZhbFNlc3Npb25JZCA6IHZvaWQgMFxuICAgICAgfSk7XG4gICAgICBsb2dfXyQ5KFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwicGF5cGFsXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogY3BtLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogaXNQYXlGaXJzdEZsb3dcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kYShcIlBheVBhbCBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHsgcGF5bWVudF9tZXRob2Q6IFwicGF5cGFsXCIsIGVycm9yOiBlcnIgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDgsIGVycl9fOiBlcnJfXyQ5IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInBvY2t5dC1wYXlwYWxcIik7XG5jb25zdCBQb2NreXRQYXlwYWxDcG0gPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xuei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6LnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0UG9ja3l0UGF5cGFsRmxvdyA9IGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICBjb25zdCBwb2NreXRQYXlwYWxDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgUG9ja3l0UGF5cGFsQ3BtKTtcbiAgaWYgKCFwb2NreXRQYXlwYWxDcG0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb2NreXQgUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgfVxuICBjb25zdCBzdGFydEZsb3cgPSAoKSA9PiB7XG4gICAgcmV0dXJuIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgY29udGV4dCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcG9ja3l0UGF5cGFsQ3BtLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiB7fSB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICBzdGFydEZsb3dcbiAgfTtcbn07XG5jb25zdCBydW5Qb2NreXRQYXlwYWxGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kOChgUnVubmluZyBQb2NreXQgUGF5cGFsIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDgoYFZlcmlmeWluZyBDUE0uLi5gKTtcbiAgICBjb25zdCBjcG0gPSBQb2NreXRQYXlwYWxDcG0ucGFyc2UoY2hlY2tvdXRQYXltZW50TWV0aG9kKTtcbiAgICBsb2dfXyQ4KGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzYCk7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBjdXN0b21QYXJhbXM/LnNldHRpbmdzO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHNldHRpbmdzPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIGNvbnN0IG5ld0N1c3RvbWVyRmllbGRzID0gY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICBsb2dfXyQ4KGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtwcmVmaWxsLm1vZGV9YCk7XG4gICAgY29uc3QgZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyA9IHY0KCk7XG4gICAgY29uc3QgaXNQYXlGaXJzdEZsb3cgPSBwcmVmaWxsLm1vZGUgIT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVxdWVzdCA9IHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNwbS5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjcG0sXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGlzUGF5Rmlyc3RGbG93LFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBpc1BheUZpcnN0RmxvdyA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiAhIWN1c3RvbVBhcmFtcz8uc2V0dGluZ3M/LnVzZVJlZGlyZWN0RmxvdyxcbiAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3dcbiAgICAgIH0sXG4gICAgICAuLi5uZXdDdXN0b21lckZpZWxkc1xuICAgIH07XG4gICAgY29uc3QgcHJlQWN0aW9uVXJsID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgY29udGV4dC5iYXNlVXJsKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGVuY29kZWRSZXF1ZXN0ID0gYnRvYShKU09OLnN0cmluZ2lmeShzdGFydFBheW1lbnRGbG93UmVxdWVzdCkpO1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgc3Q6IHByZWZpbGwudG9rZW4sXG4gICAgICByOiBlbmNvZGVkUmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gYCR7cHJlQWN0aW9uVXJsfT8ke3NlYXJjaFBhcmFtcy50b1N0cmluZygpfWA7XG4gICAgaWYgKGN1c3RvbVBhcmFtcz8uc2V0dGluZ3M/LnVzZVJlZGlyZWN0Rmxvdykge1xuICAgICAgbG9nX18kOChcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVkaXJlY3RVcmw7XG4gICAgICBhd2FpdCBzbGVlcCgyMCAqIDFlMyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICB9XG4gICAgbG9nX18kOChcIlN0YXJ0aW5nIHBvcHVwIG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICBsb2dfXyQ4KGBPcGVuaW5nIHBheXBhbCBpZnJhbWUuLi5gKTtcbiAgICBjb25zdCBwYXlwYWxGbG93UmVzdWx0ID0gYXdhaXQgc3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdChcbiAgICAgIFwiUGF5UGFsXCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyxcbiAgICAgIHJlZGlyZWN0VXJsXG4gICAgKTtcbiAgICBsb2dfXyQ4KFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIHBheXBhbEZsb3dSZXN1bHQpO1xuICAgIGNvbnN0IHZhdWx0SWQgPSBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYpO1xuICAgIGNvbnN0IGNoZWNrb3V0QXR0ZW1wdElkID0gcGFyc2VBcmdGcm9tSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYsIFwiY2F0dFwiKTtcbiAgICBpZiAoIWNoZWNrb3V0QXR0ZW1wdElkKSB7XG4gICAgICBlcnJfXyQ5KFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMOlwiLCBwYXlwYWxGbG93UmVzdWx0LmhyZWYpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMXCIpO1xuICAgIH1cbiAgICBsb2dfXyQ4KGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyB1c2luZyB2YXVsdCBJRCAke3ZhdWx0SWR9YCk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogdmF1bHRJZCxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGlzUGF5Rmlyc3RGbG93ID8gY2hlY2tvdXRBdHRlbXB0SWQgOiB2b2lkIDBcbiAgICB9KTtcbiAgICBsb2dfXyQ4KFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHNbMF0uaWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICAgIGVycl9fJDkoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDcsIGVycl9fOiBlcnJfXyQ4IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1hZmZpcm1cIik7XG5jb25zdCBTdHJpcGVBZmZpcm1DcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhZmZpcm1cIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IFN0cmlwZUFmZmlybVJlcXVpcmVkVXNlckFjdGlvbnMgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpLm51bGxpc2goKSxcbiAgICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGluaXRTdHJpcGVBZmZpcm1GbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kNyhgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgQWZmaXJtLi4uYCk7XG4gICAgY29uc3Qgc3RyaXBlQWZmaXJtQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUFmZmlybUNwbSk7XG4gICAgaWYgKCFzdHJpcGVBZmZpcm1DcG0pIHtcbiAgICAgIGxvZ19fJDcoYE5vIFN0cmlwZSBBZmZpcm0gQ1BNIGZvdW5kYCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgICB9LFxuICAgICAgICBhYm9ydEZsb3c6ICgpID0+IHtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgbG9nX18kNyhgU3RhcnRpbmcgc3RyaXBlIGFmZmlybSBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGlmIChpc1NldHVwTW9kZSkge1xuICAgICAgbG9nX18kNyhgU2V0dXAgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBTdHJpcGUgQWZmaXJtIGZsb3dgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICAgIH0sXG4gICAgICAgIGFib3J0RmxvdzogKCkgPT4ge1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB7IHN0YXJ0RmxvdywgYWJvcnRGbG93IH0gPSBjcmVhdGVTdHJpcGVCbnBsRmxvd0NvbnRyb2xsZXIoXG4gICAgICBhc3luYyAoY3VzdG9tUGFyYW1zLCBhYm9ydFNpZ25hbCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBPanNGbG93cy5zdHJpcGVBZmZpcm0ucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHN0cmlwZUFmZmlybUNwbSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczogY3VzdG9tUGFyYW1zID8/IHt9LFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogdHJ1ZSB9LFxuICAgICAgICAgICAgYWJvcnRTaWduYWxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBlcnJfXyQ4KGBFcnJvciBzdGFydGluZyBBZmZpcm0gZmxvdzpgLCBlcnJvcik7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIHN0YXJ0RmxvdyxcbiAgICAgIGFib3J0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5TdHJpcGVBZmZpcm1GbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBhYm9ydFNpZ25hbFxuICB9KSA9PiB7XG4gICAgbG9nX18kNyhgUnVubmluZyBTdHJpcGUgQWZmaXJtIHBheS1maXJzdCBmbG93Li4uYCk7XG4gICAgY29uc3QgZmxvd0Fib3J0U2lnbmFsID0gYWJvcnRTaWduYWwgPz8gbmV3IEFib3J0Q29udHJvbGxlcigpLnNpZ25hbDtcbiAgICByZXR1cm4gd2l0aFJlc2VydmVkU3RyaXBlQm5wbFBvcHVwKGN1c3RvbVBhcmFtcy51c2VSZWRpcmVjdEZsb3csIFwiQWZmaXJtXCIsIGFzeW5jIChwb3B1cEhhbmRsZSkgPT4ge1xuICAgICAgY29uc3QgdXNlUG9wdXAgPSAhIXBvcHVwSGFuZGxlO1xuICAgICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgICAgdGhyb3dJZlN0cmlwZUJucGxGbG93QWJvcnRlZChmbG93QWJvcnRTaWduYWwsIFwiQWZmaXJtXCIpO1xuICAgICAgbG9nX18kNyhgVmFsaWRhdGluZyBmb3JtIGZpZWxkcy4uLmApO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgICAgfSk7XG4gICAgICBsb2dfXyQ3KGBDcmVhdGluZyBjYXJ0IGluZm8gZm9yIHBheS1maXJzdCBmbG93Li4uYCk7XG4gICAgICBjb25zdCBjYXJ0SW5mbyA9IHtcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICBwcmljZV9pZDogaXRlbS5wcmljZV9pZCxcbiAgICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eVxuICAgICAgICB9KSksXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0gfHwgdm9pZCAwLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH07XG4gICAgICBsb2dfXyQ3KGBTdGFydGluZyBwYXktZmlyc3QgcGF5bWVudCBmbG93IGZvciBBZmZpcm0uLi5gKTtcbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogdHJ1ZSxcbiAgICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBjYXJ0SW5mbyxcbiAgICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICAgIH0pO1xuICAgICAgdGhyb3dJZlN0cmlwZUJucGxGbG93QWJvcnRlZChmbG93QWJvcnRTaWduYWwsIFwiQWZmaXJtXCIpO1xuICAgICAgbG9nX18kNyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gU3RyaXBlQWZmaXJtUmVxdWlyZWRVc2VyQWN0aW9ucy5wYXJzZShcbiAgICAgICAgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHsgY2xpZW50X3NlY3JldCB9ID0gbmV4dEFjdGlvbk1ldGFkYXRhWzBdO1xuICAgICAgbG9nX18kNyhcIkNsaWVudCBzZWNyZXQgZm9yIHBheW1lbnQgaW50ZW50XCIsIGNsaWVudF9zZWNyZXQpO1xuICAgICAgY29uc3Qgc3RyaXBlQWZmaXJtQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUFmZmlybUNwbSk7XG4gICAgICBpZiAoIXN0cmlwZUFmZmlybUNwbSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJpcGUgQWZmaXJtIENQTSBub3QgZm91bmRcIik7XG4gICAgICB9XG4gICAgICBjb25zdCB7IHN0cmlwZSB9ID0gYXdhaXQgY3JlYXRlU3RyaXBlRWxlbWVudHMoc3RyaXBlQWZmaXJtQ3BtLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgICBtb2RlOiBcInBheW1lbnRcIixcbiAgICAgICAgLy8gVXNlIHBheW1lbnQgbW9kZSBmb3IgcGF5LWZpcnN0IGZsb3dcbiAgICAgICAgY3VycmVuY3k6IHByZWZpbGwuY3VycmVuY3kgPz8gXCJ1c2RcIixcbiAgICAgICAgYW1vdW50OiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9KTtcbiAgICAgIHRocm93SWZTdHJpcGVCbnBsRmxvd0Fib3J0ZWQoZmxvd0Fib3J0U2lnbmFsLCBcIkFmZmlybVwiKTtcbiAgICAgIGxvZ19fJDcoXCJTdHJpcGUgaW5zdGFuY2UgY3JlYXRlZFwiLCBzdHJpcGUpO1xuICAgICAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKTtcbiAgICAgIGNvbnN0IGN1c3RvbWVyTmFtZSA9IGAke25vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdfSAke25vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV19YDtcbiAgICAgIGNvbnN0IGFmZmlybVBheW1lbnREYXRhID0ge1xuICAgICAgICAvLyBUaGUgcG9wdXAgbGFuZHMgYmFjayBvbiB0aGUgcG9zdC1hY3Rpb24gcGFnZSwgd2hpY2ggZmluYWxpemVzIHRoZSBjaGVja291dCBzZXJ2ZXItc2lkZVxuICAgICAgICByZXR1cm5fdXJsOiB1c2VQb3B1cCA/IGJ1aWxkU3RyaXBlQm5wbFJldHVyblVybChjb250ZXh0LmJhc2VVcmwsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5jaGVja291dF9hdHRlbXB0X2lkKSA6IG5ldyBVUkwoXCIvYXBwLzNkcy9zdWNjZXNzL1wiLCBjb250ZXh0LmJhc2VVcmwpLnRvU3RyaW5nKCksXG4gICAgICAgIHBheW1lbnRfbWV0aG9kOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiB7XG4gICAgICAgICAgICBlbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICAgICAgbmFtZTogY3VzdG9tZXJOYW1lLFxuICAgICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgICBsaW5lMTogYmlsbGluZ0FkZHJlc3MubGluZTEsXG4gICAgICAgICAgICAgIGxpbmUyOiBiaWxsaW5nQWRkcmVzcy5saW5lMiB8fCB2b2lkIDAsXG4gICAgICAgICAgICAgIGNpdHk6IGJpbGxpbmdBZGRyZXNzLmNpdHksXG4gICAgICAgICAgICAgIHN0YXRlOiBiaWxsaW5nQWRkcmVzcy5zdGF0ZSxcbiAgICAgICAgICAgICAgY291bnRyeTogYmlsbGluZ0FkZHJlc3MuY291bnRyeSxcbiAgICAgICAgICAgICAgcG9zdGFsX2NvZGU6IGJpbGxpbmdBZGRyZXNzLnppcF9jb2RlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgYWZmaXJtT3B0aW9ucyA9IHtcbiAgICAgICAgLy8gV2Ugb3BlbiB0aGUgYXV0aG9yaXphdGlvbiBwYWdlIG91cnNlbHZlcyAobmV3IHRhYiBvciBpZnJhbWUpLCBzbyBTdHJpcGUgbXVzdCBub3QgbmF2aWdhdGUgdGhlIHBhZ2VcbiAgICAgICAgaGFuZGxlQWN0aW9uczogZmFsc2VcbiAgICAgIH07XG4gICAgICBsb2dfXyQ3KGBDb25maXJtaW5nIEFmZmlybSBwYXltZW50IHdpdGggY2xpZW50IHNlY3JldDogJHtjbGllbnRfc2VjcmV0fWApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBlcnJvciwgcGF5bWVudEludGVudCB9ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1BZmZpcm1QYXltZW50KFxuICAgICAgICAgIGNsaWVudF9zZWNyZXQsXG4gICAgICAgICAgYWZmaXJtUGF5bWVudERhdGEsXG4gICAgICAgICAgYWZmaXJtT3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICB0aHJvd0lmU3RyaXBlQm5wbEZsb3dBYm9ydGVkKGZsb3dBYm9ydFNpZ25hbCwgXCJBZmZpcm1cIik7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIGVycl9fJDgoXCJBZmZpcm0gcGF5bWVudCBjb25maXJtYXRpb24gZXJyb3I6XCIsIGVycm9yKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFmZmlybSBwYXltZW50IGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICAgIGxvZ19fJDcoXCJBZmZpcm0gcGF5bWVudCBjb25maXJtZWQgc3VjY2Vzc2Z1bGx5XCIsIHBheW1lbnRJbnRlbnQpO1xuICAgICAgICBjb25zdCByZWRpcmVjdFVybCA9IHBheW1lbnRJbnRlbnQ/Lm5leHRfYWN0aW9uPy5yZWRpcmVjdF90b191cmw/LnVybDtcbiAgICAgICAgaWYgKCFyZWRpcmVjdFVybCkge1xuICAgICAgICAgIGVycl9fJDgoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gQWZmaXJtIHBheW1lbnQgY29uZmlybWF0aW9uXCIpO1xuICAgICAgICAgIGlmICh1c2VQb3B1cCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kIGluIEFmZmlybSBwYXltZW50IGNvbmZpcm1hdGlvblwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKFwiQWZmaXJtIHBheW1lbnQgZmFpbGVkXCIpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICAgICAgaW52b2ljZV91cmxzOiBbXSxcbiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkczogW10sXG4gICAgICAgICAgICAgIGN1c3RvbWVyX2lkOiBcIlwiLFxuICAgICAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogXCJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvcHVwSGFuZGxlKSB7XG4gICAgICAgICAgbG9nX18kNyhcIlBheW1lbnQgcmVxdWlyZXMgYWRkaXRpb25hbCBhY3Rpb24sIG9wZW5pbmcgaXQgaW4gYSBuZXcgdGFiLi4uXCIpO1xuICAgICAgICAgIGF3YWl0IHdhaXRGb3JTdHJpcGVCbnBsUG9wdXAoe1xuICAgICAgICAgICAgc3RyaXBlLFxuICAgICAgICAgICAgY2xpZW50U2VjcmV0OiBjbGllbnRfc2VjcmV0LFxuICAgICAgICAgICAgcG9wdXBOYW1lOiBcIkFmZmlybVwiLFxuICAgICAgICAgICAgcmVkaXJlY3RVcmwsXG4gICAgICAgICAgICBwb3B1cEhhbmRsZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ19fJDcoXCJQYXltZW50IHJlcXVpcmVzIGFkZGl0aW9uYWwgYWN0aW9uLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICAgICAgZnJhbWVUaXRsZTogXCJBZmZpcm0gdmVyaWZpY2F0aW9uXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJWZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvd0lmU3RyaXBlQm5wbEZsb3dBYm9ydGVkKGZsb3dBYm9ydFNpZ25hbCwgXCJBZmZpcm1cIik7XG4gICAgICAgIGxvZ19fJDcoXCJWZXJpZmljYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICAgICAgY29uc3QgdGhlaXJQYXltZW50TWV0aG9kID0gcGF5bWVudEludGVudD8ucGF5bWVudF9tZXRob2Q/LnRvU3RyaW5nKCkgPz8gdm9pZCAwO1xuICAgICAgICBjb25zdCBjb25maXJtID0gdXNlUG9wdXAgPyBjb25maXJtU3RyaXBlQm5wbFBheW1lbnRGbG93IDogY29uZmlybVBheW1lbnRGbG93O1xuICAgICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybShhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5jaGVja291dF9hdHRlbXB0X2lkLFxuICAgICAgICAgIHRoZWlyX3BtX2lkOiB0aGVpclBheW1lbnRNZXRob2RcbiAgICAgICAgfSk7XG4gICAgICAgIHRocm93SWZTdHJpcGVCbnBsRmxvd0Fib3J0ZWQoZmxvd0Fib3J0U2lnbmFsLCBcIkFmZmlybVwiKTtcbiAgICAgICAgbG9nX18kNyhcIlBheW1lbnQgZmxvdyBjb25maXJtZWRcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgICBsb2dQcmVmaXg6IFwic3RyaXBlLWFmZmlybVwiLFxuICAgICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICAgIHVzZVBheUZpcnN0RmxvdzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycl9fJDgoXCJFcnJvciBpbiBBZmZpcm0gcGF5bWVudCBmbG93OlwiLCBlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ2LCBlcnJfXzogZXJyX18kNyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtYWZ0ZXJwYXlcIik7XG5jb25zdCBTdHJpcGVBZnRlcnBheUNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFmdGVycGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBTdHJpcGVBZnRlcnBheVJlcXVpcmVkVXNlckFjdGlvbnMgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpLm51bGxpc2goKSxcbiAgICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGluaXRTdHJpcGVBZnRlcnBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQ2KGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBBZnRlcnBheS4uLmApO1xuICAgIGNvbnN0IHN0cmlwZUFmdGVycGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUFmdGVycGF5Q3BtKTtcbiAgICBpZiAoIXN0cmlwZUFmdGVycGF5Q3BtKSB7XG4gICAgICBsb2dfXyQ2KGBObyBTdHJpcGUgQWZ0ZXJwYXkgQ1BNIGZvdW5kYCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgICB9LFxuICAgICAgICBhYm9ydEZsb3c6ICgpID0+IHtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgbG9nX18kNihgU3RhcnRpbmcgc3RyaXBlIGFmdGVycGF5IGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgaWYgKGlzU2V0dXBNb2RlKSB7XG4gICAgICBsb2dfXyQ2KGBTZXR1cCBtb2RlIG5vdCBzdXBwb3J0ZWQgZm9yIFN0cmlwZSBBZnRlcnBheSBmbG93YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgICB9LFxuICAgICAgICBhYm9ydEZsb3c6ICgpID0+IHtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgeyBzdGFydEZsb3csIGFib3J0RmxvdyB9ID0gY3JlYXRlU3RyaXBlQm5wbEZsb3dDb250cm9sbGVyKFxuICAgICAgYXN5bmMgKGN1c3RvbVBhcmFtcywgYWJvcnRTaWduYWwpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgT2pzRmxvd3Muc3RyaXBlQWZ0ZXJwYXkucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHN0cmlwZUFmdGVycGF5Q3BtLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBjdXN0b21QYXJhbXMgPz8ge30sXG4gICAgICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiB0cnVlIH0sXG4gICAgICAgICAgICBhYm9ydFNpZ25hbFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGVycl9fJDcoYEVycm9yIHN0YXJ0aW5nIEFmdGVycGF5IGZsb3c6YCwgZXJyb3IpO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBzdGFydEZsb3csXG4gICAgICBhYm9ydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlQWZ0ZXJwYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBhYm9ydFNpZ25hbFxuICB9KSA9PiB7XG4gICAgbG9nX18kNihgUnVubmluZyBTdHJpcGUgQWZ0ZXJwYXkgcGF5LWZpcnN0IGZsb3cuLi5gKTtcbiAgICBjb25zdCBmbG93QWJvcnRTaWduYWwgPSBhYm9ydFNpZ25hbCA/PyBuZXcgQWJvcnRDb250cm9sbGVyKCkuc2lnbmFsO1xuICAgIHJldHVybiB3aXRoUmVzZXJ2ZWRTdHJpcGVCbnBsUG9wdXAoY3VzdG9tUGFyYW1zLnVzZVJlZGlyZWN0RmxvdywgXCJBZnRlcnBheVwiLCBhc3luYyAocG9wdXBIYW5kbGUpID0+IHtcbiAgICAgIGNvbnN0IHVzZVBvcHVwID0gISFwb3B1cEhhbmRsZTtcbiAgICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICAgIHRocm93SWZTdHJpcGVCbnBsRmxvd0Fib3J0ZWQoZmxvd0Fib3J0U2lnbmFsLCBcIkFmdGVycGF5XCIpO1xuICAgICAgbG9nX18kNihgVmFsaWRhdGluZyBmb3JtIGZpZWxkcy4uLmApO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgICAgfSk7XG4gICAgICBsb2dfXyQ2KGBDcmVhdGluZyBjYXJ0IGluZm8gZm9yIHBheS1maXJzdCBmbG93Li4uYCk7XG4gICAgICBjb25zdCBjYXJ0SW5mbyA9IHtcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICBwcmljZV9pZDogaXRlbS5wcmljZV9pZCxcbiAgICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eVxuICAgICAgICB9KSksXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0gfHwgdm9pZCAwLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH07XG4gICAgICBsb2dfXyQ2KGBTdGFydGluZyBwYXktZmlyc3QgcGF5bWVudCBmbG93IGZvciBBZnRlcnBheS4uLmApO1xuICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgdXNlX3BheV9maXJzdF9mbG93OiB0cnVlLFxuICAgICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGNhcnRJbmZvLFxuICAgICAgICAuLi5jcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgICAgfSk7XG4gICAgICB0aHJvd0lmU3RyaXBlQm5wbEZsb3dBYm9ydGVkKGZsb3dBYm9ydFNpZ25hbCwgXCJBZnRlcnBheVwiKTtcbiAgICAgIGxvZ19fJDYoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IFN0cmlwZUFmdGVycGF5UmVxdWlyZWRVc2VyQWN0aW9ucy5wYXJzZShcbiAgICAgICAgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHsgY2xpZW50X3NlY3JldCB9ID0gbmV4dEFjdGlvbk1ldGFkYXRhWzBdO1xuICAgICAgbG9nX18kNihcIkNsaWVudCBzZWNyZXQgZm9yIHBheW1lbnQgaW50ZW50XCIsIGNsaWVudF9zZWNyZXQpO1xuICAgICAgY29uc3Qgc3RyaXBlQWZ0ZXJwYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlQWZ0ZXJwYXlDcG0pO1xuICAgICAgaWYgKCFzdHJpcGVBZnRlcnBheUNwbSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJpcGUgQWZ0ZXJwYXkgQ1BNIG5vdCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgc3RyaXBlIH0gPSBhd2FpdCBjcmVhdGVTdHJpcGVFbGVtZW50cyhzdHJpcGVBZnRlcnBheUNwbS5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgICAgbW9kZTogXCJwYXltZW50XCIsXG4gICAgICAgIC8vIFVzZSBwYXltZW50IG1vZGUgZm9yIHBheS1maXJzdCBmbG93XG4gICAgICAgIGN1cnJlbmN5OiBwcmVmaWxsLmN1cnJlbmN5ID8/IFwidXNkXCIsXG4gICAgICAgIGFtb3VudDogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSk7XG4gICAgICB0aHJvd0lmU3RyaXBlQm5wbEZsb3dBYm9ydGVkKGZsb3dBYm9ydFNpZ25hbCwgXCJBZnRlcnBheVwiKTtcbiAgICAgIGxvZ19fJDYoXCJTdHJpcGUgaW5zdGFuY2UgY3JlYXRlZFwiLCBzdHJpcGUpO1xuICAgICAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKTtcbiAgICAgIGNvbnN0IGN1c3RvbWVyTmFtZSA9IGAke25vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdfSAke25vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV19YDtcbiAgICAgIGNvbnN0IGFmdGVycGF5UGF5bWVudERhdGEgPSB7XG4gICAgICAgIC8vIFRoZSBwb3B1cCBsYW5kcyBiYWNrIG9uIHRoZSBwb3N0LWFjdGlvbiBwYWdlLCB3aGljaCBmaW5hbGl6ZXMgdGhlIGNoZWNrb3V0IHNlcnZlci1zaWRlXG4gICAgICAgIHJldHVybl91cmw6IHVzZVBvcHVwID8gYnVpbGRTdHJpcGVCbnBsUmV0dXJuVXJsKGNvbnRleHQuYmFzZVVybCwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLmNoZWNrb3V0X2F0dGVtcHRfaWQpIDogbmV3IFVSTChcIi9hcHAvM2RzL3N1Y2Nlc3MvXCIsIGNvbnRleHQuYmFzZVVybCkudG9TdHJpbmcoKSxcbiAgICAgICAgcGF5bWVudF9tZXRob2Q6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IHtcbiAgICAgICAgICAgIGVtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgICAgICBuYW1lOiBjdXN0b21lck5hbWUsXG4gICAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICAgIGxpbmUxOiBiaWxsaW5nQWRkcmVzcy5saW5lMSxcbiAgICAgICAgICAgICAgbGluZTI6IGJpbGxpbmdBZGRyZXNzLmxpbmUyIHx8IHZvaWQgMCxcbiAgICAgICAgICAgICAgY2l0eTogYmlsbGluZ0FkZHJlc3MuY2l0eSxcbiAgICAgICAgICAgICAgc3RhdGU6IGJpbGxpbmdBZGRyZXNzLnN0YXRlLFxuICAgICAgICAgICAgICBjb3VudHJ5OiBiaWxsaW5nQWRkcmVzcy5jb3VudHJ5LFxuICAgICAgICAgICAgICBwb3N0YWxfY29kZTogYmlsbGluZ0FkZHJlc3MuemlwX2NvZGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBhZnRlcnBheU9wdGlvbnMgPSB7XG4gICAgICAgIC8vIFdlIG9wZW4gdGhlIGF1dGhvcml6YXRpb24gcGFnZSBvdXJzZWx2ZXMgKG5ldyB0YWIgb3IgaWZyYW1lKSwgc28gU3RyaXBlIG11c3Qgbm90IG5hdmlnYXRlIHRoZSBwYWdlXG4gICAgICAgIGhhbmRsZUFjdGlvbnM6IGZhbHNlXG4gICAgICB9O1xuICAgICAgbG9nX18kNihgQ29uZmlybWluZyBBZnRlcnBheSBwYXltZW50IHdpdGggY2xpZW50IHNlY3JldDogJHtjbGllbnRfc2VjcmV0fWApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29uZmlybWF0aW9uUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1BZnRlcnBheUNsZWFycGF5UGF5bWVudChcbiAgICAgICAgICBjbGllbnRfc2VjcmV0LFxuICAgICAgICAgIGFmdGVycGF5UGF5bWVudERhdGEsXG4gICAgICAgICAgYWZ0ZXJwYXlPcHRpb25zXG4gICAgICAgICk7XG4gICAgICAgIHRocm93SWZTdHJpcGVCbnBsRmxvd0Fib3J0ZWQoZmxvd0Fib3J0U2lnbmFsLCBcIkFmdGVycGF5XCIpO1xuICAgICAgICBpZiAoY29uZmlybWF0aW9uUmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgZXJyX18kNyhcIkFmdGVycGF5IHBheW1lbnQgY29uZmlybWF0aW9uIGVycm9yOlwiLCBjb25maXJtYXRpb25SZXN1bHQuZXJyb3IpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQWZ0ZXJwYXkgcGF5bWVudCBmYWlsZWQ6ICR7Y29uZmlybWF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbG9nX18kNihgQWZ0ZXJwYXkgcGF5bWVudCBjb25maXJtYXRpb24gcmVzdWx0OmAsIGNvbmZpcm1hdGlvblJlc3VsdCk7XG4gICAgICAgIGlmIChjb25maXJtYXRpb25SZXN1bHQucGF5bWVudEludGVudD8ubmV4dF9hY3Rpb24/LnR5cGUgIT09IFwicmVkaXJlY3RfdG9fdXJsXCIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gQWZ0ZXJwYXkgcGF5bWVudCBjb25maXJtYXRpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtYXRpb25SZXN1bHQucGF5bWVudEludGVudC5uZXh0X2FjdGlvbi5yZWRpcmVjdF90b191cmw/LnVybDtcbiAgICAgICAgaWYgKCFyZWRpcmVjdFVybCkge1xuICAgICAgICAgIGVycl9fJDcoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gQWZ0ZXJwYXkgcGF5bWVudCBjb25maXJtYXRpb25cIik7XG4gICAgICAgICAgaWYgKHVzZVBvcHVwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gQWZ0ZXJwYXkgcGF5bWVudCBjb25maXJtYXRpb25cIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihcIkFmdGVycGF5IHBheW1lbnQgZmFpbGVkXCIpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICAgICAgaW52b2ljZV91cmxzOiBbXSxcbiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkczogW10sXG4gICAgICAgICAgICAgIGN1c3RvbWVyX2lkOiBcIlwiLFxuICAgICAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogXCJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvcHVwSGFuZGxlKSB7XG4gICAgICAgICAgbG9nX18kNihcIkFmdGVycGF5IHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgb3BlbmluZyBpdCBpbiBhIG5ldyB0YWIuLi5cIik7XG4gICAgICAgICAgYXdhaXQgd2FpdEZvclN0cmlwZUJucGxQb3B1cCh7XG4gICAgICAgICAgICBzdHJpcGUsXG4gICAgICAgICAgICBjbGllbnRTZWNyZXQ6IGNsaWVudF9zZWNyZXQsXG4gICAgICAgICAgICBwb3B1cE5hbWU6IFwiQWZ0ZXJwYXlcIixcbiAgICAgICAgICAgIHJlZGlyZWN0VXJsLFxuICAgICAgICAgICAgcG9wdXBIYW5kbGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dfXyQ2KFwiQWZ0ZXJwYXkgdmVyaWZpY2F0aW9uIHJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICAgICAgZnJhbWVUaXRsZTogXCJBZnRlcnBheSB2ZXJpZmljYXRpb25cIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxvZ19fJDYoYOKVsCBBZnRlcnBheSB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWZ0ZXJwYXkgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBZnRlcnBheSB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvd0lmU3RyaXBlQm5wbEZsb3dBYm9ydGVkKGZsb3dBYm9ydFNpZ25hbCwgXCJBZnRlcnBheVwiKTtcbiAgICAgICAgbG9nX18kNihcIkFmdGVycGF5IHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQsIGNvbmZpcm1pbmcgd2l0aCBiYWNrZW5kLi4uXCIpO1xuICAgICAgICBjb25zdCB0aGVpclBheW1lbnRNZXRob2QgPSBjb25maXJtYXRpb25SZXN1bHQucGF5bWVudEludGVudC5wYXltZW50X21ldGhvZD8udG9TdHJpbmcoKSA/PyB2b2lkIDA7XG4gICAgICAgIGNvbnN0IGNvbmZpcm0gPSB1c2VQb3B1cCA/IGNvbmZpcm1TdHJpcGVCbnBsUGF5bWVudEZsb3cgOiBjb25maXJtUGF5bWVudEZsb3c7XG4gICAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtKGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLmNoZWNrb3V0X2F0dGVtcHRfaWQsXG4gICAgICAgICAgdGhlaXJfcG1faWQ6IHRoZWlyUGF5bWVudE1ldGhvZFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3dJZlN0cmlwZUJucGxGbG93QWJvcnRlZChmbG93QWJvcnRTaWduYWwsIFwiQWZ0ZXJwYXlcIik7XG4gICAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgICBsb2dQcmVmaXg6IFwic3RyaXBlLWFmdGVycGF5XCIsXG4gICAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyX18kNyhcIkVycm9yIGluIEFmdGVycGF5IGNoZWNrb3V0IGZsb3c6XCIsIGVycm9yKTtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIkFmdGVycGF5IHBheW1lbnQgZmFpbGVkXCI7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ1LCBlcnJfXzogZXJyX18kNiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUta2xhcm5hXCIpO1xuY29uc3QgU3RyaXBlS2xhcm5hQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwia2xhcm5hXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBTdHJpcGVLbGFybmFSZXF1aXJlZFVzZXJBY3Rpb25zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5udWxsaXNoKCksXG4gICAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0U3RyaXBlS2xhcm5hRmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGxvZ19fJDUoYENoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIEtsYXJuYS4uLmApO1xuICAgIGNvbnN0IHN0cmlwZUtsYXJuYUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVLbGFybmFDcG0pO1xuICAgIGlmICghc3RyaXBlS2xhcm5hQ3BtKSB7XG4gICAgICBsb2dfXyQ1KGBObyBTdHJpcGUgS2xhcm5hIENQTSBmb3VuZGApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgICAgfSxcbiAgICAgICAgYWJvcnRGbG93OiAoKSA9PiB7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGxvZ19fJDUoYFN0YXJ0aW5nIHN0cmlwZSBrbGFybmEgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICAgIGxvZ19fJDUoYFNldHVwIG1vZGUgaXMgbm90IHN1cHBvcnRlZCBmb3IgU3RyaXBlIEtsYXJuYSBmbG93YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgICB9LFxuICAgICAgICBhYm9ydEZsb3c6ICgpID0+IHtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgeyBzdGFydEZsb3csIGFib3J0RmxvdyB9ID0gY3JlYXRlU3RyaXBlQm5wbEZsb3dDb250cm9sbGVyKFxuICAgICAgYXN5bmMgKGN1c3RvbVBhcmFtcywgYWJvcnRTaWduYWwpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgT2pzRmxvd3Muc3RyaXBlS2xhcm5hLnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBzdHJpcGVLbGFybmFDcG0sXG4gICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IGN1c3RvbVBhcmFtcyA/PyB7fSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6IHRydWUgfSxcbiAgICAgICAgICAgIGFib3J0U2lnbmFsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgZXJyX18kNihgRXJyb3Igc3RhcnRpbmcgS2xhcm5hIGZsb3c6YCwgZXJyb3IpO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBzdGFydEZsb3csXG4gICAgICBhYm9ydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlS2xhcm5hRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgYWJvcnRTaWduYWxcbiAgfSkgPT4ge1xuICAgIGxvZ19fJDUoYFJ1bm5pbmcgU3RyaXBlIEtsYXJuYSBwYXktZmlyc3QgZmxvdy4uLmApO1xuICAgIGNvbnN0IGZsb3dBYm9ydFNpZ25hbCA9IGFib3J0U2lnbmFsID8/IG5ldyBBYm9ydENvbnRyb2xsZXIoKS5zaWduYWw7XG4gICAgcmV0dXJuIHdpdGhSZXNlcnZlZFN0cmlwZUJucGxQb3B1cChjdXN0b21QYXJhbXMudXNlUmVkaXJlY3RGbG93LCBcIktsYXJuYVwiLCBhc3luYyAocG9wdXBIYW5kbGUpID0+IHtcbiAgICAgIGNvbnN0IHVzZVBvcHVwID0gISFwb3B1cEhhbmRsZTtcbiAgICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICAgIHRocm93SWZTdHJpcGVCbnBsRmxvd0Fib3J0ZWQoZmxvd0Fib3J0U2lnbmFsLCBcIktsYXJuYVwiKTtcbiAgICAgIGxvZ19fJDUoYFZhbGlkYXRpbmcgZm9ybSBmaWVsZHMuLi5gKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgbG9nX18kNShgQ3JlYXRpbmcgY2FydCBpbmZvIGZvciBwYXktZmlyc3QgZmxvdy4uLmApO1xuICAgICAgY29uc3QgY2FydEluZm8gPSB7XG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgICAgcHJpY2VfaWQ6IGl0ZW0ucHJpY2VfaWQsXG4gICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHlcbiAgICAgICAgfSkpLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdIHx8IHZvaWQgMCxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9O1xuICAgICAgbG9nX18kNShgU3RhcnRpbmcgcGF5LWZpcnN0IHBheW1lbnQgZmxvdyBmb3IgS2xhcm5hLi4uYCk7XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHRydWUsXG4gICAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogY2FydEluZm8sXG4gICAgICAgIC4uLmNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgICB9KTtcbiAgICAgIHRocm93SWZTdHJpcGVCbnBsRmxvd0Fib3J0ZWQoZmxvd0Fib3J0U2lnbmFsLCBcIktsYXJuYVwiKTtcbiAgICAgIGxvZ19fJDUoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IFN0cmlwZUtsYXJuYVJlcXVpcmVkVXNlckFjdGlvbnMucGFyc2UoXG4gICAgICAgIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNcbiAgICAgICk7XG4gICAgICBjb25zdCB7IGNsaWVudF9zZWNyZXQgfSA9IG5leHRBY3Rpb25NZXRhZGF0YVswXTtcbiAgICAgIGxvZ19fJDUoXCJDbGllbnQgc2VjcmV0IGZvciBwYXltZW50IGludGVudFwiLCBjbGllbnRfc2VjcmV0KTtcbiAgICAgIGNvbnN0IHN0cmlwZUtsYXJuYUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVLbGFybmFDcG0pO1xuICAgICAgaWYgKCFzdHJpcGVLbGFybmFDcG0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyaXBlIEtsYXJuYSBDUE0gbm90IGZvdW5kXCIpO1xuICAgICAgfVxuICAgICAgY29uc3QgeyBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUtsYXJuYUNwbS5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgICAgbW9kZTogXCJwYXltZW50XCIsXG4gICAgICAgIC8vIFVzZSBwYXltZW50IG1vZGUgZm9yIHBheS1maXJzdCBmbG93XG4gICAgICAgIGN1cnJlbmN5OiBwcmVmaWxsLmN1cnJlbmN5ID8/IFwidXNkXCIsXG4gICAgICAgIGFtb3VudDogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSk7XG4gICAgICB0aHJvd0lmU3RyaXBlQm5wbEZsb3dBYm9ydGVkKGZsb3dBYm9ydFNpZ25hbCwgXCJLbGFybmFcIik7XG4gICAgICBsb2dfXyQ1KFwiU3RyaXBlIGluc3RhbmNlIGNyZWF0ZWRcIiwgc3RyaXBlKTtcbiAgICAgIGNvbnN0IGJpbGxpbmdBZGRyZXNzID0gZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgICBjb25zdCBjdXN0b21lck5hbWUgPSBgJHtub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXX0gJHtub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdfWA7XG4gICAgICBjb25zdCBrbGFybmFQYXltZW50RGF0YSA9IHtcbiAgICAgICAgLy8gVGhlIHBvcHVwIGxhbmRzIGJhY2sgb24gdGhlIHBvc3QtYWN0aW9uIHBhZ2UsIHdoaWNoIGZpbmFsaXplcyB0aGUgY2hlY2tvdXQgc2VydmVyLXNpZGVcbiAgICAgICAgcmV0dXJuX3VybDogdXNlUG9wdXAgPyBidWlsZFN0cmlwZUJucGxSZXR1cm5VcmwoY29udGV4dC5iYXNlVXJsLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UuY2hlY2tvdXRfYXR0ZW1wdF9pZCkgOiBuZXcgVVJMKFwiL2FwcC8zZHMvc3VjY2Vzcy9cIiwgY29udGV4dC5iYXNlVXJsKS50b1N0cmluZygpLFxuICAgICAgICBwYXltZW50X21ldGhvZDoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczoge1xuICAgICAgICAgICAgZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgICAgIG5hbWU6IGN1c3RvbWVyTmFtZSxcbiAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgbGluZTE6IGJpbGxpbmdBZGRyZXNzLmxpbmUxLFxuICAgICAgICAgICAgICBsaW5lMjogYmlsbGluZ0FkZHJlc3MubGluZTIgfHwgdm9pZCAwLFxuICAgICAgICAgICAgICBjaXR5OiBiaWxsaW5nQWRkcmVzcy5jaXR5LFxuICAgICAgICAgICAgICBzdGF0ZTogYmlsbGluZ0FkZHJlc3Muc3RhdGUsXG4gICAgICAgICAgICAgIGNvdW50cnk6IGJpbGxpbmdBZGRyZXNzLmNvdW50cnksXG4gICAgICAgICAgICAgIHBvc3RhbF9jb2RlOiBiaWxsaW5nQWRkcmVzcy56aXBfY29kZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGtsYXJuYU9wdGlvbnMgPSB7XG4gICAgICAgIC8vIFdlIG9wZW4gdGhlIGF1dGhvcml6YXRpb24gcGFnZSBvdXJzZWx2ZXMgKG5ldyB0YWIgb3IgaWZyYW1lKSwgc28gU3RyaXBlIG11c3Qgbm90IG5hdmlnYXRlIHRoZSBwYWdlXG4gICAgICAgIGhhbmRsZUFjdGlvbnM6IGZhbHNlXG4gICAgICB9O1xuICAgICAgbG9nX18kNShgQ29uZmlybWluZyBLbGFybmEgcGF5bWVudCB3aXRoIGNsaWVudCBzZWNyZXQ6ICR7Y2xpZW50X3NlY3JldH1gKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbmZpcm1hdGlvblJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtS2xhcm5hUGF5bWVudChjbGllbnRfc2VjcmV0LCBrbGFybmFQYXltZW50RGF0YSwga2xhcm5hT3B0aW9ucyk7XG4gICAgICAgIHRocm93SWZTdHJpcGVCbnBsRmxvd0Fib3J0ZWQoZmxvd0Fib3J0U2lnbmFsLCBcIktsYXJuYVwiKTtcbiAgICAgICAgaWYgKGNvbmZpcm1hdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgICAgIGVycl9fJDYoXCJLbGFybmEgcGF5bWVudCBjb25maXJtYXRpb24gZXJyb3I6XCIsIGNvbmZpcm1hdGlvblJlc3VsdC5lcnJvcik7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBLbGFybmEgcGF5bWVudCBmYWlsZWQ6ICR7Y29uZmlybWF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpcm1hdGlvblJlc3VsdC5wYXltZW50SW50ZW50Py5uZXh0X2FjdGlvbj8udHlwZSAhPT0gXCJyZWRpcmVjdF90b191cmxcIikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZCBpbiBLbGFybmEgcGF5bWVudCBjb25maXJtYXRpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtYXRpb25SZXN1bHQucGF5bWVudEludGVudC5uZXh0X2FjdGlvbi5yZWRpcmVjdF90b191cmw/LnVybDtcbiAgICAgICAgaWYgKCFyZWRpcmVjdFVybCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZCBpbiBLbGFybmEgcGF5bWVudCBjb25maXJtYXRpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvcHVwSGFuZGxlKSB7XG4gICAgICAgICAgbG9nX18kNShcIktsYXJuYSB2ZXJpZmljYXRpb24gcmVxdWlyZWQsIG9wZW5pbmcgaXQgaW4gYSBuZXcgdGFiLi4uXCIpO1xuICAgICAgICAgIGF3YWl0IHdhaXRGb3JTdHJpcGVCbnBsUG9wdXAoe1xuICAgICAgICAgICAgc3RyaXBlLFxuICAgICAgICAgICAgY2xpZW50U2VjcmV0OiBjbGllbnRfc2VjcmV0LFxuICAgICAgICAgICAgcG9wdXBOYW1lOiBcIktsYXJuYVwiLFxuICAgICAgICAgICAgcmVkaXJlY3RVcmwsXG4gICAgICAgICAgICBwb3B1cEhhbmRsZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ19fJDUoXCJLbGFybmEgdmVyaWZpY2F0aW9uIHJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICAgICAgZnJhbWVUaXRsZTogXCJLbGFybmEgdmVyaWZpY2F0aW9uXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsb2dfXyQ1KGDilbAgS2xhcm5hIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJLbGFybmEgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJLbGFybmEgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3dJZlN0cmlwZUJucGxGbG93QWJvcnRlZChmbG93QWJvcnRTaWduYWwsIFwiS2xhcm5hXCIpO1xuICAgICAgICBjb25zdCB0aGVpclBheW1lbnRNZXRob2QgPSBjb25maXJtYXRpb25SZXN1bHQucGF5bWVudEludGVudC5wYXltZW50X21ldGhvZD8udG9TdHJpbmcoKSA/PyB2b2lkIDA7XG4gICAgICAgIGNvbnN0IGNvbmZpcm0gPSB1c2VQb3B1cCA/IGNvbmZpcm1TdHJpcGVCbnBsUGF5bWVudEZsb3cgOiBjb25maXJtUGF5bWVudEZsb3c7XG4gICAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtKGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLmNoZWNrb3V0X2F0dGVtcHRfaWQsXG4gICAgICAgICAgdGhlaXJfcG1faWQ6IHRoZWlyUGF5bWVudE1ldGhvZFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3dJZlN0cmlwZUJucGxGbG93QWJvcnRlZChmbG93QWJvcnRTaWduYWwsIFwiS2xhcm5hXCIpO1xuICAgICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgICAgbG9nUHJlZml4OiBcInN0cmlwZS1rbGFybmFcIixcbiAgICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBlcnJfXyQ2KFwiRXJyb3IgaW4gS2xhcm5hIGNoZWNrb3V0IGZsb3c6XCIsIGVycm9yKTtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIktsYXJuYSBwYXltZW50IGZhaWxlZFwiO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuKTtcblxuY29uc3QgT0pTX1NUUklQRV9MSU5LX0JUTl9JRCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiO1xuY29uc3QgeyBsb2dfXzogbG9nX18kNCwgZXJyX186IGVycl9fJDUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWxpbmtcIik7XG5jb25zdCBTdHJpcGVMaW5rQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IFN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0U3RyaXBlTGlua0Zsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCBpbml0UGFyYW1zID0gY29udGV4dC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgbG9nX18kNChgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLmApO1xuICAgIGNvbnN0IHN0cmlwZUxpbmtDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlTGlua0NwbSk7XG4gICAgbG9nX18kNChgU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyQ0KGBDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5gKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCB7IGVsZW1lbnRzLCBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUxpbmtDcG0ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogaW5pdGlhbFByZXZpZXcuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIGNvbnN0IGxpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQgPSBlbGVtZW50cy5jcmVhdGUoXCJsaW5rQXV0aGVudGljYXRpb25cIik7XG4gICAgbG9nX18kNChgQ3JlYXRpbmcgZXhwcmVzcyBjaGVja291dC4uLmApO1xuICAgIGNvbnN0IGV4cHJlc3NDaGVja291dEVsZW1lbnQgPSBlbGVtZW50cy5jcmVhdGUoXCJleHByZXNzQ2hlY2tvdXRcIiwge1xuICAgICAgYnV0dG9uSGVpZ2h0OiBpbml0UGFyYW1zPy5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVuZGVyTGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudCA9IChzZWxlY3Rvciwgc2lsZW50KSA9PiB7XG4gICAgICBsZXQgcGFyZW50Q29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICBpZiAoIXBhcmVudENvbnRhaW5lcikge1xuICAgICAgICBlcnJfXyQ1KGBSZWNvbW1hbmRlZCB0byByZW5kZXIgYSBjb250YWluZXIgd2l0aCAke3NlbGVjdG9yfSB0byBhdm9pZCByZW5kZXJpbmcgaW4gdGhlIGJvZHlgKTtcbiAgICAgICAgcGFyZW50Q29udGFpbmVyID0gZG9jdW1lbnQuYm9keTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBwYXJlbnRDb250YWluZXI/LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG4gICAgICBsaW5rQXV0aGVudGljYXRpb25FbGVtZW50Lm1vdW50KGNvbnRhaW5lcik7XG4gICAgICBsZXQgaXNBdXRoZW50aWNhdGVkID0gZmFsc2U7XG4gICAgICBsZXQgaXNMaW5rQXV0aFJlYWR5ID0gZmFsc2U7XG4gICAgICBsaW5rQXV0aGVudGljYXRpb25FbGVtZW50Lm9uY2UoXCJyZWFkeVwiLCAoKSA9PiB7XG4gICAgICAgIGlzTGlua0F1dGhSZWFkeSA9IHRydWU7XG4gICAgICAgIGluaXRQYXJhbXM/Lm9uQXV0aGVudGljYXRpb25FbGVtZW50UmVhZHk/LigpO1xuICAgICAgfSk7XG4gICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICAgICAgY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgICAgICBjb250YWluZXIuc3R5bGUudG9wID0gXCItMTAwMHB4XCI7XG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gXCItMTAwMHB4XCI7XG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS56SW5kZXggPSBcIi0xXCI7XG4gICAgICAgIGxpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQub24oXCJjaGFuZ2VcIiwgKGUpID0+IHtcbiAgICAgICAgICBpc0F1dGhlbnRpY2F0ZWQgPSBlLmNvbXBsZXRlIHx8ICEhZS52YWx1ZS5lbWFpbDtcbiAgICAgICAgICBpZiAoaXNMaW5rQXV0aFJlYWR5KSB7XG4gICAgICAgICAgICBpbml0UGFyYW1zPy5vbkF1dGhlbnRpY2F0aW9uU3RhdHVzQ2hhbmdlPy4oaXNBdXRoZW50aWNhdGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpZnJhbWUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcihcImlmcmFtZVwiKTtcbiAgICAgICAgaWYgKGlmcmFtZSkge1xuICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gaWZyYW1lLm9mZnNldEhlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IGlzUG9zc2libGVBdXRoZW50aWNhdGVkID0gaGVpZ2h0ID4gMTYwO1xuICAgICAgICAgICAgaWYgKGlzTGlua0F1dGhSZWFkeSkge1xuICAgICAgICAgICAgICBpbml0UGFyYW1zPy5vbkF1dGhlbnRpY2F0aW9uU3RhdHVzQ2hhbmdlPy4oaXNBdXRoZW50aWNhdGVkIHx8IGlzUG9zc2libGVBdXRoZW50aWNhdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGlmcmFtZSwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFtcInN0eWxlXCJdIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudDtcbiAgICB9O1xuICAgIGNvbnN0IG1vdW50QnV0dG9uID0gKHNlbGVjdG9yKSA9PiB7XG4gICAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50Lm1vdW50KHNlbGVjdG9yID8gc2VsZWN0b3IgOiBgIyR7T0pTX1NUUklQRV9MSU5LX0JUTl9JRH1gKTtcbiAgICB9O1xuICAgIGNvbnN0IGRpc21vdW50QnV0dG9uID0gKCkgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC51bm1vdW50KCk7XG4gICAgfTtcbiAgICBpZiAoaW5pdFBhcmFtcz8uZG9Ob3RNb3VudE9uSW5pdCkge1xuICAgICAgbG9nX18kNChgTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQ0KGBNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5gKTtcbiAgICAgIG1vdW50QnV0dG9uKCk7XG4gICAgfVxuICAgIGlmIChpbml0UGFyYW1zPy5zaWxlbnRseUNoZWNrQXV0aGVudGljYXRpb24pIHtcbiAgICAgIGxvZ19fJDQoYFNpbGVudGx5IG1vdW50aW5nIGxpbmsgYXV0aGVudGljYXRpb24gZWxlbWVudCBhdCAjJHtPSlNfU1RSSVBFX0xJTktfQlROX0lEfS4uLmApO1xuICAgICAgcmVuZGVyTGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudChgIyR7T0pTX1NUUklQRV9MSU5LX0JUTl9JRH1gLCB0cnVlKTtcbiAgICB9XG4gICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5vbihcImNsaWNrXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgbG9nX18kNChcIlN0cmlwZSBMaW5rIGJ1dHRvbiBjbGlja2VkXCIpO1xuICAgICAgaWYgKGluaXRQYXJhbXM/Lm92ZXJyaWRlTGlua1N1Ym1pdCkge1xuICAgICAgICBjb25zdCBzaG91bGRTdWJtaXQgPSBhd2FpdCBpbml0UGFyYW1zLm92ZXJyaWRlTGlua1N1Ym1pdCgpO1xuICAgICAgICBpZiAoIXNob3VsZFN1Ym1pdCkge1xuICAgICAgICAgIGxvZ19fJDQoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBldmVudC5yZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5vbihcImNvbmZpcm1cIiwgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICBsb2dfXyQ0KFwiU3RyaXBlIExpbmsgd2luZG93IGNvbmZpcm1lZFwiLCBldmVudCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdHJpcGUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IGV2ZW50LmJpbGxpbmdEZXRhaWxzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikge1xuICAgICAgICBlcnJfXyQ1KFwiZXJyb3JcIiwgcmVzdWx0LmVycm9yKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKHJlc3VsdC5lcnJvci5tZXNzYWdlID8/IFwiU3RyaXBlIExpbmsgdW5rbm93biBlcnJvclwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJDQoXCJwYXltZW50TWV0aG9kXCIsIHJlc3VsdC5wYXltZW50TWV0aG9kKTtcbiAgICAgICAgT2pzRmxvd3Muc3RyaXBlTGluay5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBzdHJpcGVMaW5rQ3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHN0cmlwZVBNOiByZXN1bHQucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6IHRydWUgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBjb250cm9sbGVyOiB7XG4gICAgICAgIG1vdW50QnV0dG9uLFxuICAgICAgICBkaXNtb3VudEJ1dHRvbixcbiAgICAgICAgbW91bnRMaW5rQXV0aGVudGljYXRpb25FbGVtZW50OiAoc2VsZWN0b3IpID0+IHJlbmRlckxpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQoc2VsZWN0b3IsIGZhbHNlKSxcbiAgICAgICAgd2FpdEZvckJ1dHRvblRvTW91bnQ6IGFzeW5jICgpID0+IGF3YWl0IGdldEVsZW1lbnRCeUlkQXN5bmMoT0pTX1NUUklQRV9MSU5LX0JUTl9JRClcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlTGlua0Zsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyQ0KGBSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDQoYE1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5gKTtcbiAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBNKG5vbkNkZUZvcm1JbnB1dHMsIGN1c3RvbVBhcmFtcy5zdHJpcGVQTSk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG1lcmdlZElucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBsb2dfXyQ0KGBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogY3VzdG9tUGFyYW1zLnN0cmlwZVBNLmlkLFxuICAgICAgLi4uY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgbG9nX18kNChcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IFN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zLnBhcnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpO1xuICAgIGNvbnN0IG91ckV4aXN0aW5nUG1JZCA9IG5leHRBY3Rpb25NZXRhZGF0YVswXS5vdXJfZXhpc3RpbmdfcG1faWQ7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQ0KGBEb2luZyBwYXltZW50IHNldHVwLi4uYCk7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogb3VyRXhpc3RpbmdQbUlkXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQ0KGBEb2luZyBjaGVja291dC4uLmApO1xuICAgICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgfVxuICB9XG4pO1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSA9IChmb3JtSW5wdXRzLCBzdHJpcGVQbSkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5wYXllckxhc3ROYW1lUGFydHNdID0gc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLm5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgc3RyaXBlUG1bXCJsaW5rXCJdPy5lbWFpbCB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiO1xuICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5wb3N0YWxfY29kZSB8fCBcIjAwMDAwXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5jb3VudHJ5IHx8IFwiVVNcIjtcbiAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIlwiO1xuICBjb25zdCBsYXN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiXCI7XG4gIGlmIChmaXJzdE5hbWUgfHwgbGFzdE5hbWUpIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICB9IGVsc2Uge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgfVxuICBsb2dfXyQ0KGBGaW5hbCBmb3JtIGlucHV0czpgLCBpbnB1dHMpO1xuICByZXR1cm4gaW5wdXRzO1xufTtcbmNvbnN0IGdldEVsZW1lbnRCeUlkQXN5bmMgPSAoaWQpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gIGNvbnN0IGdldEVsZW1lbnQgPSAoKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcmVzb2x2ZShlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGdldEVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbiAgZ2V0RWxlbWVudCgpO1xufSk7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDMsIGVycl9fOiBlcnJfXyQ0IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1wclwiKTtcbmNvbnN0IFN0cmlwZVByQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei51bmlvbihbei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IGluaXRTdHJpcGVQckZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQzKGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLmApO1xuICAgIGNvbnN0IGNoZWNrb3V0UGF5bWVudE1ldGhvZCA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVQckNwbSk7XG4gICAgbG9nX18kMyhgSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGxvZ19fJDMoYEdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudGApO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHByID0gYXdhaXQgY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QoXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuc3RyaXBlX3BrLFxuICAgICAgaW5pdGlhbFByZXZpZXcuYW1vdW50QXRvbSxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5LFxuICAgICAgaXNTZXR1cE1vZGVcbiAgICApO1xuICAgIGxvZ19fJDMoYENoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRgKTtcbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudCA9IGF3YWl0IHByLmNhbk1ha2VQYXltZW50KCk7XG4gICAgaWYgKGNhbk1ha2VQYXltZW50ID09PSBudWxsKSB7XG4gICAgICBlcnJfXyQ0KGBjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsYCk7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHJlYXNvbjogXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIgfTtcbiAgICB9XG4gICAgbG9nX18kMyhgU3RyaXBlIFBSIGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBDYW4gbWFrZSBwYXltZW50YCwgY2FuTWFrZVBheW1lbnQpO1xuICAgIGNvbnN0IHJ1blN0cmlwZVByRmxvdzIgPSAocHJvdmlkZXIsIHBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIE9qc0Zsb3dzLnN0cmlwZVBSLnJ1bih7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHByb3ZpZGVyKSxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlciwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICAgICAgcHIsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7IGFwcGxlUGF5OiBjYW5NYWtlUGF5bWVudC5hcHBsZVBheSwgZ29vZ2xlUGF5OiBjYW5NYWtlUGF5bWVudC5nb29nbGVQYXkgfSxcbiAgICAgICAgICBzdGFydEZsb3c6IHJ1blN0cmlwZVByRmxvdzJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBwcixcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogY2FuTWFrZVBheW1lbnQuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiBydW5TdHJpcGVQckZsb3cyXG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZVByRmxvdyQxID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBpbml0UmVzdWx0XG4gIH0pID0+IHtcbiAgICBsb2dfXyQzKGBSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgaWYgKGN1c3RvbVBhcmFtcy5wcm92aWRlciAhPT0gY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2N1c3RvbVBhcmFtcy5wcm92aWRlcn0sIGdvdCAke2NoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcn1gKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwciA9IGluaXRSZXN1bHQucHI7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBvdmVycmlkZSA9IGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdDtcbiAgICBjb25zdCBhcHBsZVBheVBheW1lbnRSZXF1ZXN0ID0gb3ZlcnJpZGUgPyB0eXBlb2Ygb3ZlcnJpZGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PT0gXCJmdW5jdGlvblwiID8gb3ZlcnJpZGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCh7fSkgOiBvdmVycmlkZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0IDogdm9pZCAwO1xuICAgIGNvbnN0IG5lZWRzRnJlc2hQcmV2aWV3ID0gISFzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwicHJvbW9Db2RlXCIpO1xuICAgIGlmICghcHIuaXNTaG93aW5nKCkpIHtcbiAgICAgIGlmIChuZWVkc0ZyZXNoUHJldmlldykge1xuICAgICAgICBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCkudGhlbihcbiAgICAgICAgICAoZnJlc2hQcmV2aWV3KSA9PiB7XG4gICAgICAgICAgICBpZiAob3ZlcnJpZGUpIHtcbiAgICAgICAgICAgICAgbG9nX18kMyhgT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aGAsIG92ZXJyaWRlLCBgZnJlc2hQcmV2aWV3OmAsIGZyZXNoUHJldmlldyk7XG4gICAgICAgICAgICAgIGNvbnN0IG1lcmdlZEFtb3VudCA9IG92ZXJyaWRlLmFtb3VudCA/PyBmcmVzaFByZXZpZXc7XG4gICAgICAgICAgICAgIHVwZGF0ZVByV2l0aEFtb3VudChcbiAgICAgICAgICAgICAgICBwcixcbiAgICAgICAgICAgICAgICBtZXJnZWRBbW91bnQsXG4gICAgICAgICAgICAgICAgb3ZlcnJpZGUucGVuZGluZyA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBhcHBsZVBheVBheW1lbnRSZXF1ZXN0LFxuICAgICAgICAgICAgICAgIG92ZXJyaWRlLmxhYmVsID8/IFwiVG90YWxcIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbG9nX18kMyhgUFIgZmxvdzogTm8gb3ZlcnJpZGUsIHVzaW5nIGZyZXNoIHByZXZpZXc6YCwgZnJlc2hQcmV2aWV3KTtcbiAgICAgICAgICAgICAgdXBkYXRlUHJXaXRoQW1vdW50KHByLCBmcmVzaFByZXZpZXcsIGZhbHNlLCB2b2lkIDAsIFwiVG90YWxcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChvdmVycmlkZSkge1xuICAgICAgICBsb2dfXyQzKGBQUiBmbG93OiB1c2luZyBvdmVycmlkZTpgLCBvdmVycmlkZSk7XG4gICAgICAgIHVwZGF0ZVByV2l0aEFtb3VudChwciwgb3ZlcnJpZGUuYW1vdW50LCBvdmVycmlkZS5wZW5kaW5nLCBhcHBsZVBheVBheW1lbnRSZXF1ZXN0LCBvdmVycmlkZS5sYWJlbCA/PyBcIlRvdGFsXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBsb2dfXyQzKGBTaG93aW5nIFBSIGRpYWxvZy4uLmApO1xuICAgIHByLnNob3coKTtcbiAgICBjb25zdCBzdHJpcGVQbUFkZGVkRXZlbnQgPSBhd2FpdCB3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZChwcik7XG4gICAgbG9nX18kMyhgU3RyaXBlIFBNIGFkZGVkIGV2ZW50OmAsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgbG9nX18kMyhgTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLmApO1xuICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0obm9uQ2RlRm9ybUlucHV0cywgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGxvZ19fJDMoYFBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcCBheW1lbnQgZmxvdy4uLmAsIG5vbkNkZUZvcm1GaWVsZHMpO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUihhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBmaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgbG9nX18kMyhgQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLmApO1xuICAgIGF3YWl0IGNvbmZpcm1TdHJpcGVQclBNKG5leHRBY3Rpb25NZXRhZGF0YSwgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJDMoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLmApO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlblxuICAgICAgfSk7XG4gICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kMyhgUGVyZm9ybWluZyBjaGVja291dC4uLmApO1xuICAgICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgfVxuICB9XG4pO1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQbSA9IChmb3JtSW5wdXRzLCBzdHJpcGVQbUV2dCkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5wYXllckxhc3ROYW1lUGFydHNdID0gc3RyaXBlUG1FdnQucGF5ZXJOYW1lPy50cmltKCk/LnNwbGl0KC9cXHMrLykgPz8gW107XG4gIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBwYXllckxhc3ROYW1lUGFydHMuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICBjb25zdCBiaWxsaW5nQWRkcmVzcyA9IHN0cmlwZVBtRXZ0LnBheW1lbnRNZXRob2Q/LmJpbGxpbmdfZGV0YWlscz8uYWRkcmVzcztcbiAgY29uc3Qgc2hpcHBpbmdBZGRyZXNzID0gc3RyaXBlUG1FdnQuc2hpcHBpbmdBZGRyZXNzO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHN0cmlwZVBtRXZ0LnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiO1xuICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IGJpbGxpbmdBZGRyZXNzPy5wb3N0YWxfY29kZSB8fCBzaGlwcGluZ0FkZHJlc3M/LnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBiaWxsaW5nQWRkcmVzcz8uY291bnRyeSB8fCBzaGlwcGluZ0FkZHJlc3M/LmNvdW50cnkgfHwgXCJVU1wiO1xuICBjb25zdCBmaXJzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBheWVyRmlyc3ROYW1lIHx8IFwiXCI7XG4gIGNvbnN0IGxhc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJcIjtcbiAgaWYgKGZpcnN0TmFtZSB8fCBsYXN0TmFtZSkge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBmaXJzdE5hbWU7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gbGFzdE5hbWU7XG4gIH0gZWxzZSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBcIlwiO1xuICB9XG4gIGxvZ19fJDMoYEZpbmFsIGZvcm0gaW5wdXRzOmAsIGlucHV0cyk7XG4gIHJldHVybiBpbnB1dHM7XG59O1xuY29uc3QgdXBkYXRlUHJXaXRoQW1vdW50ID0gKHByLCBhbW91bnQsIGlzUGVuZGluZywgc3RyaXBlQXBwbGVQYXksIGxhYmVsKSA9PiB7XG4gIHByLnVwZGF0ZSh7XG4gICAgdG90YWw6IGFtb3VudCA/IHtcbiAgICAgIGFtb3VudDogYW1vdW50LmFtb3VudEF0b20sXG4gICAgICBsYWJlbDogbGFiZWwgPz8gXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogaXNQZW5kaW5nXG4gICAgfSA6IHZvaWQgMCxcbiAgICBjdXJyZW5jeTogYW1vdW50Py5jdXJyZW5jeSxcbiAgICAvLyBTdHJpcGUncyBhcHBsZVBheSBvcHRpb24gb25seSBzdXBwb3J0cyAncmVjdXJyaW5nUGF5bWVudFJlcXVlc3QnIHwgJ2RlZmVycmVkUGF5bWVudFJlcXVlc3QnIHwgJ2F1dG9tYXRpY1JlbG9hZFBheW1lbnRSZXF1ZXN0JyBvZiBuYXRpdmUgQXBwbGVQYXkgcGF5bWVudCByZXF1ZXN0XG4gICAgLy8gV2UncmUgYWNjZXB0aW5nIG5hdGl2ZSBQYXltZW50IFJlcXVlc3QgaGVyZSBmb3IgbW9yZSBjb21tb24gdHlwaW5nLlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBzdHJpcGUgZG8gbm90IGV4cGVjdCBhZGRpdGlvbmFsIGZpZWxkc1xuICAgIGFwcGxlUGF5OiBzdHJpcGVBcHBsZVBheVxuICB9KTtcbn07XG5jb25zdCBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke3Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICB9XG4gIHJldHVybiBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufTtcblxuY29uc3QgZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdCA9IChjcG1zLCB3aXRoUHJvdmlkZXIsIHdpdGhQcm9jZXNzb3IpID0+IHtcbiAgY29uc3QgbWF0Y2hlcyA9IGNwbXMuZmlsdGVyKChjcG0pID0+IHtcbiAgICBjb25zdCBtYXRjaGVzUHJvY2Vzc29yID0gd2l0aFByb2Nlc3NvciA9PT0gdm9pZCAwID8gdHJ1ZSA6IGNwbS5wcm9jZXNzb3JfbmFtZSA9PT0gd2l0aFByb2Nlc3NvcjtcbiAgICBjb25zdCBtYXRjaGVzUHJvdmlkZXIgPSBjcG0ucHJvdmlkZXIgPT09IHdpdGhQcm92aWRlcjtcbiAgICByZXR1cm4gbWF0Y2hlc1Byb2Nlc3NvciAmJiBtYXRjaGVzUHJvdmlkZXI7XG4gIH0pO1xuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgY3Btcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7d2l0aFByb3ZpZGVyfScgYW5kIHByb2Nlc3NvciAnJHt3aXRoUHJvY2Vzc29yfSdgKTtcbiAgfVxuICBpZiAobWF0Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICBjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgY3Btcyk7XG4gICAgY29uc29sZS53YXJuKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gICAgdHJhY2soXCJtb3JlX3RoYW5fb25lX2NwbV9mb3VuZFwiLCB7XG4gICAgICBwcm92aWRlcjogd2l0aFByb3ZpZGVyLFxuICAgICAgcHJvY2Vzc29yOiB3aXRoUHJvY2Vzc29yLFxuICAgICAgY3Btc1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBtYXRjaGVzWzBdO1xufTtcbmNvbnN0IE9qc0Zsb3dzID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkNvbW1vbkNjRmxvd1xuICB9LFxuICAvLyBTdHJpcGVcbiAgc3RyaXBlUFI6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlUHJGbG93LFxuICAgIHJ1bjogcnVuU3RyaXBlUHJGbG93JDFcbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IGluaXRTdHJpcGVMaW5rRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZUxpbmtGbG93XG4gIH0sXG4gIHN0cmlwZUtsYXJuYToge1xuICAgIGluaXQ6IGluaXRTdHJpcGVLbGFybmFGbG93LFxuICAgIHJ1bjogcnVuU3RyaXBlS2xhcm5hRmxvd1xuICB9LFxuICBzdHJpcGVBZmZpcm06IHtcbiAgICBpbml0OiBpbml0U3RyaXBlQWZmaXJtRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZUFmZmlybUZsb3dcbiAgfSxcbiAgc3RyaXBlQWZ0ZXJwYXk6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlQWZ0ZXJwYXlGbG93LFxuICAgIHJ1bjogcnVuU3RyaXBlQWZ0ZXJwYXlGbG93XG4gIH0sXG4gIC8vIFBvY2t5dFxuICBwb2NreXRQYXlwYWw6IHtcbiAgICBpbml0OiBpbml0UG9ja3l0UGF5cGFsRmxvdyxcbiAgICBydW46IHJ1blBvY2t5dFBheXBhbEZsb3dcbiAgfSxcbiAgLy8gUGF5UGFsXG4gIHBheXBhbDoge1xuICAgIGluaXQ6IGluaXRQYXlwYWxGbG93LFxuICAgIHJ1bjogcnVuUGF5cGFsRmxvd1xuICB9LFxuICAvLyBLbGFybmFcbiAgYWlyd2FsbGV4S2xhcm5hOiB7XG4gICAgaW5pdDogaW5pdEFpcndhbGxleEtsYXJuYUZsb3csXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhLbGFybmFGbG93XG4gIH0sXG4gIC8vIEFpcndhbGxleFxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QWlyd2FsbGV4R29vZ2xlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFpcndhbGxleEdvb2dsZVBheUZsb3dcbiAgfSxcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4QXBwbGVQYXlGbG93XG4gIH0sXG4gIGFpcndhbGxleEFDSDoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4QUNIRmxvd1xuICB9LFxuICBhaXJ3YWxsZXhFRlQ6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkFpcndhbGxleEVGVEZsb3dcbiAgfSxcbiAgYWlyd2FsbGV4QkFDUzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4QkFDU0Zsb3dcbiAgfSxcbiAgYWlyd2FsbGV4U0VQQToge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4U0VQQUZsb3dcbiAgfSxcbiAgLy8gTG9vcFxuICBsb29wQ3J5cHRvOiB7XG4gICAgaW5pdDogaW5pdExvb3BGbG93LFxuICAgIHJ1bjogcnVuTG9vcEZsb3dcbiAgfSxcbiAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QXV0aG5ldEFwcGxlUGF5RmxvdyxcbiAgICBydW46IHJ1bkF1dGhuZXRBcHBsZVBheUZsb3dcbiAgfSxcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogaW5pdEF1dGhuZXRHb29nbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQXV0aG5ldEdvb2dsZVBheUZsb3dcbiAgfSxcbiAgYWR5ZW5Hb29nbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QWR5ZW5Hb29nbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQWR5ZW5Hb29nbGVQYXlGbG93XG4gIH0sXG4gIGFkeWVuQXBwbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QWR5ZW5BcHBsZVBheUZsb3csXG4gICAgcnVuOiBydW5BZHllbkFwcGxlUGF5Rmxvd1xuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kMiwgZXJyX186IGVycl9fJDMgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiaW5pdC1mbG93c1wiKTtcbmNvbnN0IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyID0gKGZsb3dOYW1lLCBpbml0RmxvdykgPT4ge1xuICBjb25zdCBwdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcixcbiAgICBpbml0aWFsaXplOiBhc3luYyAoaW5pdFBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHB1Ymxpc2hlci5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhpcyBmbG93IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5pdFJlc3VsdCA9IGF3YWl0IGluaXRGbG93KGluaXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyQyKGDinJQgJHtmbG93TmFtZX0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBpbml0UmVzdWx0KTtcbiAgICAgICAgcHVibGlzaGVyLnNldChpbml0UmVzdWx0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycl9fJDMoYPCdma0gJHtmbG93TmFtZX0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIGdldEVycm9yTWVzc2FnZShlcnJvciksIFwiRGV0YWlsczpcIiwgZXJyb3IpO1xuICAgICAgICBwdWJsaXNoZXIudGhyb3coZXJyb3IsIGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEFsbEluaXRGbG93cyA9IGFzeW5jIChmbG93cywgY29udGV4dCwgZm9ybUNhbGxiYWNrcykgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKGZsb3dzKS5tYXAoKGZsb3cpID0+IGZsb3cuaW5pdGlhbGl6ZSh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkpKTtcbn07XG5jb25zdCBjcmVhdGVJbml0Rmxvd3NQdWJsaXNoZXJzID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIC8vIPCfkqEgQWRkIG5ldyBpbml0IGZsb3dzIGhlcmVcbiAgICAvLyBTdHJpcGUgUFJcbiAgICBzdHJpcGVQUjogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgUFJcIiwgT2pzRmxvd3Muc3RyaXBlUFIuaW5pdCksXG4gICAgLy8gU3RyaXBlIExpbmtcbiAgICBzdHJpcGVMaW5rOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlN0cmlwZSBMaW5rXCIsIE9qc0Zsb3dzLnN0cmlwZUxpbmsuaW5pdCksXG4gICAgLy8gU3RyaXBlIEtsYXJuYVxuICAgIHN0cmlwZUtsYXJuYTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgS2xhcm5hXCIsIE9qc0Zsb3dzLnN0cmlwZUtsYXJuYS5pbml0KSxcbiAgICAvLyBTdHJpcGUgQWZmaXJtXG4gICAgc3RyaXBlQWZmaXJtOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlN0cmlwZSBBZmZpcm1cIiwgT2pzRmxvd3Muc3RyaXBlQWZmaXJtLmluaXQpLFxuICAgIC8vIFN0cmlwZSBBZnRlcnBheVxuICAgIHN0cmlwZUFmdGVycGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlN0cmlwZSBBZnRlcnBheVwiLCBPanNGbG93cy5zdHJpcGVBZnRlcnBheS5pbml0KSxcbiAgICAvLyBBaXJ3YWxsZXggR29vZ2xlUGF5XG4gICAgYWlyd2FsbGV4R29vZ2xlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFpcndhbGxleCBHb29nbGVQYXlcIiwgT2pzRmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICAgIGFpcndhbGxleEFwcGxlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFpcndhbGxleCBBcHBsZVBheVwiLCBPanNGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgICAvLyBMb29wXG4gICAgbG9vcDogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJMb29wXCIsIE9qc0Zsb3dzLmxvb3BDcnlwdG8uaW5pdCksXG4gICAgLy8gUGF5UGFsXG4gICAgcGF5cGFsOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlBheVBhbFwiLCBPanNGbG93cy5wYXlwYWwuaW5pdCksXG4gICAgLy8gS2xhcm5hXG4gICAgYWlyd2FsbGV4S2xhcm5hOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIktsYXJuYVwiLCBPanNGbG93cy5haXJ3YWxsZXhLbGFybmEuaW5pdCksXG4gICAgLy8gUG9ja3l0IFBheVBhbFxuICAgIHBvY2t5dFBheXBhbDogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJQb2NreXQgUGF5UGFsXCIsIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5pbml0KSxcbiAgICAvLyBBdXRobmV0IEdvb2dsZVBheVxuICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBdXRobmV0IEdvb2dsZVBheVwiLCBPanNGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkuaW5pdCksXG4gICAgLy8gQXV0aG5ldCBBcHBsZVBheVxuICAgIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkF1dGhuZXQgQXBwbGVQYXlcIiwgT2pzRmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkuaW5pdCksXG4gICAgLy8gQWR5ZW4gR29vZ2xlUGF5XG4gICAgYWR5ZW5Hb29nbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQWR5ZW4gR29vZ2xlUGF5XCIsIE9qc0Zsb3dzLmFkeWVuR29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEFkeWVuIEFwcGxlUGF5XG4gICAgYWR5ZW5BcHBsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBZHllbiBBcHBsZVBheVwiLCBPanNGbG93cy5hZHllbkFwcGxlUGF5LmluaXQpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgfTtcbn07XG5cbmNvbnN0IHsgZXJyX186IGVycl9fJDIgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiZm9ybS1jYWxsYmFja3NcIik7XG5jb25zdCBPcHRpb25hbEZuID0gei5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0gei5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyQyKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRlY3RGcmFtZXdvcmsoKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgIGNvbnN0IG5leHRXaW5kb3cgPSB3aW5kb3c7XG4gICAgaWYgKG5leHRXaW5kb3c/Lm5leHQgfHwgbmV4dFdpbmRvdz8uX19ORVhUX0RBVEFfXyB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI19fbmV4dFwiKSkge1xuICAgICAgcmV0dXJuIFwibmV4dGpzXCIgLyogTmV4dEpTICovO1xuICAgIH1cbiAgICBjb25zdCBudXh0V2luZG93ID0gd2luZG93O1xuICAgIGlmIChudXh0V2luZG93Py5fX05VWFRfXyB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI19fbnV4dFwiKSkge1xuICAgICAgcmV0dXJuIFwibnV4dFwiIC8qIE51eHQgKi87XG4gICAgfVxuICAgIGlmIChPYmplY3Qua2V5cyhkb2N1bWVudCkuZmluZCgoa2V5KSA9PiBrZXkuaW5jbHVkZXMoXCJyZWFjdFwiKSkgfHwgISFBcnJheS5mcm9tKGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcImJvZHkgPiAqXCIpKS5maW5kKFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIF9yZWFjdFJvb3RDb250YWluZXIgZG9lc24ndCBleGlzdFxuICAgICAgKG5vZGUpID0+IG5vZGUuX3JlYWN0Um9vdENvbnRhaW5lclxuICAgICkpIHtcbiAgICAgIHJldHVybiBcInJlYWN0XCIgLyogUmVhY3QgKi87XG4gICAgfVxuICAgIGNvbnN0IHZ1ZVdpbmRvdyA9IHdpbmRvdztcbiAgICBpZiAodnVlV2luZG93Py5WdWUgfHwgdnVlV2luZG93Py5fX1ZVRV9fKSB7XG4gICAgICByZXR1cm4gXCJ2dWVcIiAvKiBWdWUgKi87XG4gICAgfVxuICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpKSB7XG4gICAgICByZXR1cm4gXCJhbmd1bGFyXCIgLyogQW5ndWxhciAqLztcbiAgICB9XG4gICAgcmV0dXJuIFwidmFuaWxsYVwiIC8qIFZhbmlsbGEgKi87XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFwidW5rbm93blwiIC8qIFVua25vd24gKi87XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZyYW1ld29ya1ZlcnNpb24oZnJhbWV3b3JrKSB7XG4gIHRyeSB7XG4gICAgc3dpdGNoIChmcmFtZXdvcmspIHtcbiAgICAgIGNhc2UgXCJyZWFjdFwiIC8qIFJlYWN0ICovOiB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcIm5leHRqc1wiIC8qIE5leHRKUyAqLzoge1xuICAgICAgICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgICAgIGNvbnN0IG5leHRXaW5kb3cgPSB3aW5kb3c7XG4gICAgICAgIHJldHVybiBuZXh0V2luZG93Py5uZXh0Py52ZXJzaW9uIHx8IG5leHRXaW5kb3c/Ll9fTkVYVF9EQVRBX18/LmJ1aWxkSWQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJudXh0XCIgLyogTnV4dCAqLzoge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJ2dWVcIiAvKiBWdWUgKi86IHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwiYW5ndWxhclwiIC8qIEFuZ3VsYXIgKi86IHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnQyID0gZ2V0V2luZG93U2FmZSgpPy5kb2N1bWVudDtcbiAgICAgICAgY29uc3QgbmdWZXJzaW9uRWwgPSBkb2N1bWVudDI/LnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIik7XG4gICAgICAgIHJldHVybiBuZ1ZlcnNpb25FbCA/IG5nVmVyc2lvbkVsLmdldEF0dHJpYnV0ZShcIm5nLXZlcnNpb25cIikgOiBudWxsO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBnZXRGcmFtZXdvcmtJbmZvKCkge1xuICBjb25zdCBmcmFtZXdvcmsgPSBkZXRlY3RGcmFtZXdvcmsoKTtcbiAgY29uc3QgdmVyc2lvbiA9IGdldEZyYW1ld29ya1ZlcnNpb24oZnJhbWV3b3JrKTtcbiAgcmV0dXJuIHsgZnJhbWV3b3JrLCB2ZXJzaW9uIH07XG59XG5cbnZhciBTdWJtaXRNZXRob2RzID0gLyogQF9fUFVSRV9fICovICgoU3VibWl0TWV0aG9kczIpID0+IHtcbiAgU3VibWl0TWV0aG9kczJbXCJjYXJkXCJdID0gXCJjYXJkXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wicG9ja3l0UGF5cGFsXCJdID0gXCJwb2NreXQtcGF5cGFsXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXBwbGVQYXlcIl0gPSBcImFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImdvb2dsZVBheVwiXSA9IFwiZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImxvb3BDcnlwdG9cIl0gPSBcImxvb3AtY3J5cHRvXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wicGF5cGFsXCJdID0gXCJwYXlwYWxcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJrbGFybmFcIl0gPSBcImtsYXJuYVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFmZmlybVwiXSA9IFwiYWZmaXJtXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWZ0ZXJwYXlcIl0gPSBcImFmdGVycGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wic3RyaXBlTGlua1wiXSA9IFwic3RyaXBlLWxpbmtcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhHb29nbGVQYXlcIl0gPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QXBwbGVQYXlcIl0gPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRHb29nbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0QXBwbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZHllbkdvb2dsZVBheVwiXSA9IFwiYWR5ZW4tZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFkeWVuQXBwbGVQYXlcIl0gPSBcImFkeWVuLWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEFDSFwiXSA9IFwiYWlyd2FsbGV4LWFjaFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEVGVFwiXSA9IFwiYWlyd2FsbGV4LWVmdFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEJBQ1NcIl0gPSBcImFpcndhbGxleC1iYWNzXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4U0VQQVwiXSA9IFwiYWlyd2FsbGV4LXNlcGFcIjtcbiAgcmV0dXJuIFN1Ym1pdE1ldGhvZHMyO1xufSkoU3VibWl0TWV0aG9kcyB8fCB7fSk7XG56Lm5hdGl2ZUVudW0oU3VibWl0TWV0aG9kcyk7XG52YXIgUGF5bWVudFByb3ZpZGVyVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFBheW1lbnRQcm92aWRlclR5cGUyKSA9PiB7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiQUNIXCJdID0gXCJhY2hcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJFRlRcIl0gPSBcImVmdFwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkJBQ1NcIl0gPSBcImJhY3NcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJTRVBBXCJdID0gXCJzZXBhXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiQVBQTEVfUEFZXCJdID0gXCJhcHBsZV9wYXlcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJDUkVESVRfQ0FSRFwiXSA9IFwiY3JlZGl0X2NhcmRcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJHT09HTEVfUEFZXCJdID0gXCJnb29nbGVfcGF5XCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiU1RSSVBFX0xJTktcIl0gPSBcInN0cmlwZV9saW5rXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiQ1JZUFRPXCJdID0gXCJjcnlwdG9cIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJQQVlQQUxcIl0gPSBcInBheXBhbFwiO1xuICByZXR1cm4gUGF5bWVudFByb3ZpZGVyVHlwZTI7XG59KShQYXltZW50UHJvdmlkZXJUeXBlIHx8IHt9KTtcblxuY29uc3QgZ2V0QXBwbGVQYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBhcHBsZVBheUluaXRGbG93cyA9IFtpbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXksIGluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheSwgaW5pdEZsb3dzLmFkeWVuQXBwbGVQYXldO1xuICBjb25zdCBhcHBsZVBheUluaXRSZXN1bHRzID0gW107XG4gIGFwcGxlUGF5SW5pdEZsb3dzLmZvckVhY2goKGZsb3cpID0+IHtcbiAgICBjb25zdCBmbG93VmFsdWUgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpZiAoZmxvd1ZhbHVlPy5pc0F2YWlsYWJsZSkge1xuICAgICAgYXBwbGVQYXlJbml0UmVzdWx0cy5wdXNoKGZsb3dWYWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3RyaXBlUFJGbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZVBSRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBjb25zdCBpc0FwcGxlUGF5QXZhaWxhYmxlID0gc3RyaXBlUFJGbG93UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheTtcbiAgICBpZiAoaXNBcHBsZVBheUF2YWlsYWJsZSkge1xuICAgICAgYXBwbGVQYXlJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBzdHJpcGVQUkZsb3dSZXN1bHQuc3RhcnRGbG93KFwiYXBwbGVfcGF5XCIsIHtcbiAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGFwcGxlUGF5SW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBhcHBsZVBheUluaXRSZXN1bHRzLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBzdGFydEFwcGxlUGF5RmxvdyhhcHBsZVBheUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBnZXRHb29nbGVQYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBnb29nbGVQYXlJbml0Rmxvd3MgPSBbaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheSwgaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheSwgaW5pdEZsb3dzLmFkeWVuR29vZ2xlUGF5XTtcbiAgY29uc3QgZ29vZ2xlUGF5SW5pdFJlc3VsdHMgPSBbXTtcbiAgZ29vZ2xlUGF5SW5pdEZsb3dzLmZvckVhY2goKGZsb3cpID0+IHtcbiAgICBjb25zdCBmbG93VmFsdWUgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpZiAoZmxvd1ZhbHVlPy5pc0F2YWlsYWJsZSkge1xuICAgICAgZ29vZ2xlUGF5SW5pdFJlc3VsdHMucHVzaChmbG93VmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHN0cmlwZVBSRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVQUkZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgY29uc3QgaXNHb29nbGVQYXlBdmFpbGFibGUgPSBzdHJpcGVQUkZsb3dSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheTtcbiAgICBpZiAoaXNHb29nbGVQYXlBdmFpbGFibGUpIHtcbiAgICAgIGdvb2dsZVBheUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZVBSRmxvd1Jlc3VsdC5zdGFydEZsb3coXCJnb29nbGVfcGF5XCIsIHtcbiAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGdvb2dsZVBheUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogZ29vZ2xlUGF5SW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0R29vZ2xlUGF5Rmxvdyhnb29nbGVQYXlJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBcHBsZVBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBcHBsZSBQYXkgcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFwcGxlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3Qgc3RhcnRHb29nbGVQYXlGbG93ID0gKGluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpID0+IHtcbiAgaWYgKGN1c3RvbVBhcmFtcz8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgZmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciA9PT0gY3VzdG9tUGFyYW1zLnByb2Nlc3Nvcik7XG4gICAgaWYgKGZsb3c/LmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgR29vZ2xlIFBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgR29vZ2xlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3QgZ2V0S2xhcm5hUHJvY2Vzc29ycyA9IChpbml0Rmxvd3MpID0+IHtcbiAgY29uc3Qga2xhcm5hSW5pdFJlc3VsdHMgPSBbXTtcbiAgY29uc3QgYWlyd2FsbGV4S2xhcm5hRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5haXJ3YWxsZXhLbGFybmEucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoYWlyd2FsbGV4S2xhcm5hRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBrbGFybmFJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gYWlyd2FsbGV4S2xhcm5hRmxvd1Jlc3VsdC5zdGFydEZsb3coY3VzdG9tUGFyYW1zKSxcbiAgICAgIGFib3J0RmxvdzogKCkgPT4ge1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGNvbnN0IHN0cmlwZUtsYXJuYUZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlS2xhcm5hLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZUtsYXJuYUZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAga2xhcm5hSW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZUtsYXJuYUZsb3dSZXN1bHQuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyksXG4gICAgICBhYm9ydEZsb3c6IHN0cmlwZUtsYXJuYUZsb3dSZXN1bHQuYWJvcnRGbG93XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzb3JzOiBrbGFybmFJbml0UmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IGtsYXJuYUluaXRSZXN1bHRzLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBzdGFydEtsYXJuYUZsb3coa2xhcm5hSW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcyk7XG4gICAgfSxcbiAgICBhYm9ydEZsb3c6ICgpID0+IGtsYXJuYUluaXRSZXN1bHRzLmZvckVhY2goKHJlc3VsdCkgPT4gcmVzdWx0LmFib3J0RmxvdygpKVxuICB9O1xufTtcbmNvbnN0IHN0YXJ0S2xhcm5hRmxvdyA9IChpbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKSA9PiB7XG4gIGlmIChjdXN0b21QYXJhbXM/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IGZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IgPT09IGN1c3RvbVBhcmFtcy5wcm9jZXNzb3IpO1xuICAgIGlmIChmbG93Py5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIGZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEtsYXJuYSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgS2xhcm5hIHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5jb25zdCBnZXRBZmZpcm1Qcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBhZmZpcm1Jbml0UmVzdWx0cyA9IFtdO1xuICBjb25zdCBzdHJpcGVBZmZpcm1GbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZUFmZmlybS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVBZmZpcm1GbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGFmZmlybUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBzdHJpcGVBZmZpcm1GbG93UmVzdWx0LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpLFxuICAgICAgYWJvcnRGbG93OiBzdHJpcGVBZmZpcm1GbG93UmVzdWx0LmFib3J0Rmxvd1xuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogYWZmaXJtSW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBhZmZpcm1Jbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRBZmZpcm1GbG93KGFmZmlybUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH0sXG4gICAgYWJvcnRGbG93OiAoKSA9PiBhZmZpcm1Jbml0UmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHJlc3VsdC5hYm9ydEZsb3coKSlcbiAgfTtcbn07XG5jb25zdCBzdGFydEFmZmlybUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBZmZpcm0gcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFmZmlybSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3QgZ2V0QWZ0ZXJwYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBhZnRlcnBheUluaXRSZXN1bHRzID0gW107XG4gIGNvbnN0IHN0cmlwZUFmdGVycGF5Rmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVBZnRlcnBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVBZnRlcnBheUZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgYWZ0ZXJwYXlJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlQWZ0ZXJwYXlGbG93UmVzdWx0LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpLFxuICAgICAgYWJvcnRGbG93OiBzdHJpcGVBZnRlcnBheUZsb3dSZXN1bHQuYWJvcnRGbG93XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzb3JzOiBhZnRlcnBheUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogYWZ0ZXJwYXlJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRBZnRlcnBheUZsb3coYWZ0ZXJwYXlJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9LFxuICAgIGFib3J0RmxvdzogKCkgPT4gYWZ0ZXJwYXlJbml0UmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHJlc3VsdC5hYm9ydEZsb3coKSlcbiAgfTtcbn07XG5jb25zdCBzdGFydEFmdGVycGF5RmxvdyA9IChpbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKSA9PiB7XG4gIGlmIChjdXN0b21QYXJhbXM/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IGZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IgPT09IGN1c3RvbVBhcmFtcy5wcm9jZXNzb3IpO1xuICAgIGlmIChmbG93Py5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIGZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEFmdGVycGF5IHByb2Nlc3NvciAke2N1c3RvbVBhcmFtcy5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCBhdmFpbGFibGVGbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQuaXNBdmFpbGFibGUpO1xuICBpZiAoYXZhaWxhYmxlRmxvdykge1xuICAgIHJldHVybiBhdmFpbGFibGVGbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBBZnRlcnBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kMSwgZXJyX186IGVycl9fJDEgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwidHJhY2VyXCIpO1xuY29uc3QgaW5pdFRyYWNlclNhZmUgPSAodmVyc2lvbiwgYmFzZVVybCkgPT4ge1xuICB0cnkge1xuICAgIGluaXRUcmFjZXJVbnNhZmUodmVyc2lvbiwgYmFzZVVybCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZXJyX18kMShgRXJyb3IgaW5pdGlhbGl6aW5nIHRyYWNlcjogJHtlcnJvcn1gKTtcbiAgfVxufTtcbmxldCBnbG9iYWxUcmFjZXI7XG5jb25zdCBpbml0VHJhY2VyVW5zYWZlID0gYXN5bmMgKHZlcnNpb24sIGJhc2VVcmwpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIGNvbnN0IHNka1RyYWNlV2ViID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwYn1+LmpzJyk7XG4gIGNvbnN0IHsgQ29uc29sZVNwYW5FeHBvcnRlciwgU2ltcGxlU3BhblByb2Nlc3NvciwgV2ViVHJhY2VyUHJvdmlkZXIgfSA9IHNka1RyYWNlV2ViO1xuICBjb25zdCBpbnN0cnVtZW50YXRpb25GZXRjaCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMGp9fi5qcycpO1xuICBjb25zdCB7IEZldGNoSW5zdHJ1bWVudGF0aW9uIH0gPSBpbnN0cnVtZW50YXRpb25GZXRjaDtcbiAgY29uc3QgY29udGV4dFpvbmUgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBrfX4uanMnKTtcbiAgY29uc3QgeyBab25lQ29udGV4dE1hbmFnZXIgfSA9IGNvbnRleHRab25lO1xuICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBlfX4uanMnKTtcbiAgY29uc3QgeyByZWdpc3Rlckluc3RydW1lbnRhdGlvbnMgfSA9IGluc3RydW1lbnRhdGlvbjtcbiAgY29uc3QgcmVzb3VyY2VzID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwMX1+LmpzJyk7XG4gIGNvbnN0IHsgUmVzb3VyY2UgfSA9IHJlc291cmNlcztcbiAgY29uc3QgZGV0ZWN0UmVzb3VyY2VzID0gYXdhaXQgaW1wb3J0KCcuL2RldGVjdC1yZXNvdXJjZXMtIX57MDBufX4uanMnKS50aGVuKG4gPT4gbi5kKTtcbiAgY29uc3QgeyBkZXRlY3RSZXNvdXJjZXNTeW5jIH0gPSBkZXRlY3RSZXNvdXJjZXM7XG4gIGNvbnN0IGV4cG9ydGVyVHJhY2VPdGxwID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwb31+LmpzJyk7XG4gIGNvbnN0IHsgT1RMUFRyYWNlRXhwb3J0ZXIgfSA9IGV4cG9ydGVyVHJhY2VPdGxwO1xuICBjb25zdCBwcm9wYWdhdG9yQjMgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBsfX4uanMnKTtcbiAgY29uc3QgeyBCM1Byb3BhZ2F0b3IsIEIzSW5qZWN0RW5jb2RpbmcgfSA9IHByb3BhZ2F0b3JCMztcbiAgY29uc3Qgc2RrVHJhY2VCYXNlID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwM31+LmpzJyk7XG4gIGNvbnN0IHsgQmF0Y2hTcGFuUHJvY2Vzc29yIH0gPSBzZGtUcmFjZUJhc2U7XG4gIGxvZ19fJDEoYEluaXRpYWxpemluZyB0cmFjZXIgd2l0aCB2ZXJzaW9uICR7dmVyc2lvbn0gYW5kIGJhc2VVcmwgJHtiYXNlVXJsfWApO1xuICBjb25zdCBjb2xsZWN0b3JVcmwgPSBnZXRDb2xsZWN0b3JVcmwoYmFzZVVybCk7XG4gIGxvZ19fJDEoYFVzaW5nIGNvbGxlY3RvciBVUkwgJHtjb2xsZWN0b3JVcmx9YCk7XG4gIGNvbnN0IGV4cG9ydGVyID0gbmV3IE9UTFBUcmFjZUV4cG9ydGVyKHsgdXJsOiBjb2xsZWN0b3JVcmwgfSk7XG4gIGNvbnN0IGJhc2VBdHRycyA9IHtcbiAgICBcInNlcnZpY2UudmVyc2lvblwiOiB2ZXJzaW9uLFxuICAgIFwic2VydmljZS5uYW1lXCI6IFwib2pzXCJcbiAgfTtcbiAgY29uc3QgcHJvdmlkZXIgPSBuZXcgV2ViVHJhY2VyUHJvdmlkZXIoe1xuICAgIHJlc291cmNlOiBuZXcgUmVzb3VyY2UoYmFzZUF0dHJzKS5tZXJnZShkZXRlY3RSZXNvdXJjZXNTeW5jKCkpLFxuICAgIHNwYW5Qcm9jZXNzb3JzOiBbXG4gICAgICBuZXcgU2ltcGxlU3BhblByb2Nlc3NvcihuZXcgQ29uc29sZVNwYW5FeHBvcnRlcigpKSxcbiAgICAgIG5ldyBCYXRjaFNwYW5Qcm9jZXNzb3IoZXhwb3J0ZXIsIHtcbiAgICAgICAgc2NoZWR1bGVkRGVsYXlNaWxsaXM6IDUwMFxuICAgICAgfSlcbiAgICBdXG4gIH0pO1xuICBwcm92aWRlci5yZWdpc3Rlcih7XG4gICAgY29udGV4dE1hbmFnZXI6IG5ldyBab25lQ29udGV4dE1hbmFnZXIoKSxcbiAgICBwcm9wYWdhdG9yOiBuZXcgQjNQcm9wYWdhdG9yKHsgaW5qZWN0RW5jb2Rpbmc6IEIzSW5qZWN0RW5jb2RpbmcuTVVMVElfSEVBREVSIH0pXG4gIH0pO1xuICByZWdpc3Rlckluc3RydW1lbnRhdGlvbnMoe1xuICAgIGluc3RydW1lbnRhdGlvbnM6IFtcbiAgICAgIG5ldyBGZXRjaEluc3RydW1lbnRhdGlvbih7XG4gICAgICAgIHByb3BhZ2F0ZVRyYWNlSGVhZGVyQ29yc1VybHM6IFsvLiovXSxcbiAgICAgICAgLy8gUHJvcGFnYXRlIHRvIGFsbCBVUkxzXG4gICAgICAgIC8vIEV4Y2x1ZGUgQWR5ZW4gVVJMcyAtIHRoZXkgZG8gbm90IGFsbG93IE9QVElPTlMgcmVxdWVzdHNcbiAgICAgICAgLy8gQWxzbyBleGNsdWRlIGxvb3BjcnlwdG8ueHl6XG4gICAgICAgIGlnbm9yZVVybHM6IFsvXmh0dHBzOlxcL1xcLyguKlxcLik/YWR5ZW5cXC5jb20vLCAvXmh0dHBzOlxcL1xcLyguKlxcLik/bG9vcGNyeXB0b1xcLnh5ei9dXG4gICAgICB9KVxuICAgIF1cbiAgfSk7XG4gIGdsb2JhbFRyYWNlciA9IHRyYWNlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIik7XG4gIGxvZ19fJDEoYFRyYWNlciBpbml0aWFsaXplZGApO1xuICByZXR1cm4gZ2xvYmFsVHJhY2VyO1xufTtcbmNvbnN0IGdldENvbGxlY3RvclVybCA9IChmcm9tQmFzZVVybCkgPT4ge1xuICBjb25zdCBiYXNlSG9zdG5hbWUgPSBuZXcgVVJMKGZyb21CYXNlVXJsKS5ob3N0bmFtZTtcbiAgaWYgKGJhc2VIb3N0bmFtZSA9PT0gXCJjZGUub3BlbnBheXN0YWdpbmcuY29tXCIpIHtcbiAgICByZXR1cm4gXCJodHRwczovL290ZWwub3BlbnBheXNhbmRib3guY29tL3YxL3RyYWNlc1wiO1xuICB9IGVsc2UgaWYgKGJhc2VIb3N0bmFtZSA9PT0gXCJjZGUuZ2V0b3BlbnBheS5jb21cIikge1xuICAgIHJldHVybiBcImh0dHBzOi8vb3RlbC5nZXRvcGVucGF5LmNvbS92MS90cmFjZXNcIjtcbiAgfVxuICByZXR1cm4gXCJodHRwOi8vbG9jYWxob3N0OjQzMTkvdjEvdHJhY2VzXCI7XG59O1xuXG5jbGFzcyBPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKGZvcm1JZCwgYmFzZVVybCwgZm9ybUNhbGxiYWNrcywgaW50ZXJuYWxDYWxsYmFja3MpIHtcbiAgICB0aGlzLmhhbmRsZU1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmICghZXZlbnQuc291cmNlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltPSlNdIE5vIHNvdXJjZSBmb3VuZFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGdldENsZWFuT3JpZ2luKGV2ZW50Lm9yaWdpbikgIT09IGdldENsZWFuT3JpZ2luKHRoaXMuYmFzZVVybCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSBcIm9iamVjdFwiICYmIGV2ZW50LmRhdGFbXCJwZW5wYWxcIl0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSBcIm9iamVjdFwiICYmIGV2ZW50LmRhdGFbXCJzb3VyY2VcIl0gJiYgZXZlbnQuZGF0YVtcInNvdXJjZVwiXSA9PT0gXCJyZWFjdC1kZXZ0b29scy1icmlkZ2VcIikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgZXZlbnREYXRhID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGV2ZW50RGF0YSA9IHBhcnNlRXZlbnRQYXlsb2FkKEpTT04ucGFyc2UoZXZlbnQuZGF0YSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUV2ZW50KGV2ZW50RGF0YSk7XG4gICAgICBpZiAoIWlzVmFsaWQpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkLCBwYXlsb2FkIH0gPSBldmVudERhdGE7XG4gICAgICBjb25zdCBldmVudFR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHBheWxvYWQuaGVpZ2h0ID8gYCR7cGF5bG9hZC5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cihlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUsIHtcbiAgICAgICAgICAgIG9iZnVzY2F0ZWRWYWx1ZTogcGF5bG9hZC5vYmZ1c2NhdGVkVmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGFuZ2UoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlLCBwYXlsb2FkLmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmV2ZW50VGFyZ2V0c1tlbGVtZW50SWRdID0gZXZlbnQuc291cmNlO1xuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQocGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcihwYXlsb2FkLm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IocGF5bG9hZC5lbGVtZW50VHlwZSwgcGF5bG9hZC5lcnJvcnMsIGVsZW1lbnRJZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIFVuaGFuZGxlZCBldmVudCB0eXBlOlwiLCBldmVudFR5cGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKGV2ZW50RGF0YSkgPT4ge1xuICAgICAgaWYgKGV2ZW50RGF0YS5mb3JtSWQgIT09IHRoaXMuZm9ybUlkIHx8ICFldmVudERhdGEuZWxlbWVudElkKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiW09KU10gZm9ybUlkXCIsIHRoaXMuZm9ybUlkLCBldmVudERhdGEuZm9ybUlkKTtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm5vbmNlcy5oYXMoZXZlbnREYXRhLm5vbmNlKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgZHVwbGljYXRlIGV2ZW50OlwiLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLm5vbmNlcy5hZGQoZXZlbnREYXRhLm5vbmNlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgdGhpcy5ldmVudFRhcmdldHMgPSB7fTtcbiAgICB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgdGhpcy5mb3JtSWQgPSBmb3JtSWQ7XG4gICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybDtcbiAgICB0aGlzLmZvcm1DYWxsYmFja3MgPSBmb3JtQ2FsbGJhY2tzO1xuICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBpbnRlcm5hbENhbGxiYWNrcztcbiAgfVxufVxuY29uc3QgZ2V0Q2xlYW5PcmlnaW4gPSAodXJsKSA9PiB7XG4gIHJldHVybiBuZXcgVVJMKHVybCkub3JpZ2luO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGlvbihpZnJhbWUsIGNoaWxkT3JpZ2luKSB7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lLFxuICAgIGRlYnVnOiBmYWxzZSxcbiAgICBjaGlsZE9yaWdpblxuICB9KTtcbiAgY29uc3QgY29ubmVjdGlvbk9iaiA9IGF3YWl0IGNvbm5lY3Rpb24ucHJvbWlzZTtcbiAgY29uc3QgaXNWYWxpZE9iamVjdCA9IGF3YWl0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QoY29ubmVjdGlvbk9iaik7XG4gIGlmICghaXNSZXN1bHRWYWxpZChjb25uZWN0aW9uT2JqLCBpc1ZhbGlkT2JqZWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0YCk7XG4gIH1cbiAgcmV0dXJuIGNvbm5lY3Rpb25PYmo7XG59XG5jbGFzcyBDb25uZWN0aW9uTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGFkZENvbm5lY3Rpb24oaWQsIGNvbm5lY3Rpb24pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldChpZCwgY29ubmVjdGlvbik7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbm5lY3Rpb247XG4gIH1cbiAgZ2V0QWxsQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnM7XG4gIH1cbn1cblxuY29uc3Qgc2V0dXBQYXltZW50UmVxdWVzdEhhbmRsZXJzID0gKGluaXRQckZsb3dzLCBjb250ZXh0LCBjYWxsYmFja3MpID0+IHtcbiAgY29uc3QgeyBzdHJpcGVQUiB9ID0gaW5pdFByRmxvd3M7XG4gIHN0cmlwZVBSLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKSB7XG4gICAgICBjb25zdCBpbml0UmVzdWx0ID0gcmVzdWx0LmxvYWRlZFZhbHVlO1xuICAgICAgY29uc3QgY2FuQXBwbGVQYXkgPSBpbml0UmVzdWx0LmlzQXZhaWxhYmxlICYmIGluaXRSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5O1xuICAgICAgY29uc3QgY2FuR29vZ2xlUGF5ID0gaW5pdFJlc3VsdC5pc0F2YWlsYWJsZSAmJiBpbml0UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXk7XG4gICAgICBjb25zdCBmaW5hbFN0YXR1cyA9IHtcbiAgICAgICAgYXBwbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogY2FuQXBwbGVQYXksXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodXNlclBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKGNhbkFwcGxlUGF5KSB7XG4gICAgICAgICAgICAgIHJ1blN0cmlwZVByRmxvdyhcImFwcGxlX3BheVwiLCBpbml0UmVzdWx0LCBjb250ZXh0LCBjYWxsYmFja3MsIHVzZXJQYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGNhbkdvb2dsZVBheSxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1c2VyUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FuR29vZ2xlUGF5KSB7XG4gICAgICAgICAgICAgIHJ1blN0cmlwZVByRmxvdyhcImdvb2dsZV9wYXlcIiwgaW5pdFJlc3VsdCwgY29udGV4dCwgY2FsbGJhY2tzLCB1c2VyUGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjYWxsYmFja3MuZ2V0Lm9uUGF5bWVudFJlcXVlc3RMb2FkKGZpbmFsU3RhdHVzKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IHJ1blN0cmlwZVByRmxvdyA9IChwcm92aWRlciwgaW5pdFJlc3VsdCwgY29udGV4dCwgZm9ybUNhbGxiYWNrcywgcGFyYW1zKSA9PiB7XG4gIHJldHVybiBPanNGbG93cy5zdHJpcGVQUi5ydW4oe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcHJvdmlkZXIpLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBwYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICBpbml0UmVzdWx0XG4gIH0pO1xufTtcblxuY29uc3QgR0VORVJJQ19DT05OX0VSUiA9IGBUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5gO1xuY29uc3QgeyBsb2dfXywgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwib3AtZm9ybVwiKTtcbmNsYXNzIE9wZW5QYXlGb3JtIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgdGhpcy5pc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHRoaXMuY2RlTG9hZEV2ZW50ID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgICB0aGlzLmFueUNkZUNvbm4gPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuY29udGV4dCA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gICAgdGhpcy5pbml0Rmxvd3MgPSBjcmVhdGVJbml0Rmxvd3NQdWJsaXNoZXJzKCk7XG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZUdlbmVyYWxTdWJtaXNzaW9uID0gbnVsbDtcbiAgICB0aGlzLnN0YXJ0Rm9ybUluaXQgPSBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0cmFjZXIgPSB0cmFjZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpO1xuICAgICAgY29uc3Qgc3BhbiA9IHRyYWNlci5zdGFydFNwYW4oXCJmb3JtLmluaXRpYWxpemVcIiwge1xuICAgICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29udGV4dC53aXRoKHRyYWNlLnNldFNwYW4oY29udGV4dC5hY3RpdmUoKSwgc3BhbiksIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjZGVCcmlkZ2VJZnJhbWUgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoRWxlbWVudFR5cGVFbnVtLkNERV9CUklER0UpO1xuICAgICAgICAgIGNkZUJyaWRnZUlmcmFtZS5ub2RlLmlkID0gXCJfX29wX2ludGVybmFsX2NkZV9icmlkZ2VcIjtcbiAgICAgICAgICBjZGVCcmlkZ2VJZnJhbWUubm9kZS5hcmlhSGlkZGVuID0gXCJ0cnVlXCI7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihjZGVCcmlkZ2VJZnJhbWUubm9kZS5zdHlsZSwge1xuICAgICAgICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgICAgICAgIG1hcmdpbjogXCIwcHhcIixcbiAgICAgICAgICAgIHBhZGRpbmc6IFwiMHB4XCIsXG4gICAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgdmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiBcIm5vbmVcIixcbiAgICAgICAgICAgIHVzZXJTZWxlY3Q6IFwibm9uZVwiXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY2RlQnJpZGdlSWZyYW1lLm1vdW50KFwiYm9keVwiKTtcbiAgICAgICAgICBsb2dfXyhcIkNERSBicmlkZ2UgZWxlbWVudCBtb3VudGVkXCIpO1xuICAgICAgICAgIGxvZ19fKFwiSW5pdGlhbGl6aW5nIE9wZW5QYXkgZm9ybTpcIik7XG4gICAgICAgICAgbG9nX18oXCLilJwgV2FpdGluZyBmb3IgQ0RFIGxvYWQgZXZlbnQuLi5cIik7XG4gICAgICAgICAgY29uc3QgY2RlTG9hZGVkID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgICAgdGltZW91dEVyck1zZzogR0VORVJJQ19DT05OX0VSUlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxvZ19fKFwi4pScIENERSBsb2FkIGV2ZW50IHJlY2VpdmVkXCIpO1xuICAgICAgICAgIHNwYW4/LmFkZEV2ZW50KFwid2FpdGluZ19mb3JfY2RlX2Nvbm5lY3Rpb25cIik7XG4gICAgICAgICAgbG9nX18oXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgICAgY29uc3QgY2RlQ29ublNwYW4gPSB0cmFjZXI/LnN0YXJ0U3BhbihcImNkZS5jb25uZWN0XCIsIHZvaWQgMCwgY29udGV4dC5hY3RpdmUoKSk7XG4gICAgICAgICAgY29uc3QgYW55Q2RlQ29ubiA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBHRU5FUklDX0NPTk5fRVJSXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY2RlQ29ublNwYW4/LmVuZCgpO1xuICAgICAgICAgIHNwYW4/LmFkZEV2ZW50KFwiY2RlX2Nvbm5lY3RlZFwiKTtcbiAgICAgICAgICBsb2dfXyhcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKTtcbiAgICAgICAgICBhd2FpdCBzZXRVc2VyRGV2aWNlVG9rZW4oYW55Q2RlQ29ubiwgdGhpcy5kZXZpY2VUb2tlbik7XG4gICAgICAgICAgbG9nX18oXCLilJwgQ3JlYXRpbmcgT0pTIGNvbnRleHQsIHNldHRpbmcgdXAgaGFuZGxlcnMuLi5cIik7XG4gICAgICAgICAgY29uc3Qgb2pzQ29udGV4dCA9IE9wZW5QYXlGb3JtLmJ1aWxkT2pzRmxvd0NvbnRleHQoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgICAgIGNkZUxvYWRlZCxcbiAgICAgICAgICAgIGFueUNkZUNvbm4sXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5jb250ZXh0LnNldChvanNDb250ZXh0KTtcbiAgICAgICAgICBzZXR1cFBheW1lbnRSZXF1ZXN0SGFuZGxlcnModGhpcy5pbml0Rmxvd3MsIG9qc0NvbnRleHQsIHRoaXMuZm9ybUNhbGxiYWNrcyk7XG4gICAgICAgICAgbG9nX18oXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIik7XG4gICAgICAgICAgYXdhaXQgc3RhcnRBbGxJbml0Rmxvd3ModGhpcy5pbml0Rmxvd3MsIG9qc0NvbnRleHQsIHRoaXMuZm9ybUNhbGxiYWNrcyk7XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWQoY2RlTG9hZGVkLnRvdGFsQW1vdW50QXRvbXMsIGNkZUxvYWRlZC5jdXJyZW5jeSk7XG4gICAgICAgICAgbG9nX18oXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKTtcbiAgICAgICAgICBzcGFuPy5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgICAgICB0cmFjayhcImZvcm1fbG9hZGVkXCIpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyKTtcbiAgICAgICAgICBzcGFuPy5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBlcnJfXyhcIuKVsCBFcnJvciBpbml0aWFsaXppbmcgT1AgZm9ybTpcIiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICB0cmFjayhcImZvcm1faW5pdF9lcnJvclwiLCB7XG4gICAgICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWRFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHNwYW4/LmVuZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChoZWlnaHQpID0+IHtcbiAgICAgIHRoaXMuZm9ybVByb3BlcnRpZXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgaWYgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKSB7XG4gICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICBpZiAoIWVsZW1lbnQgfHwgZWxlbWVudC50eXBlID09PSBFbGVtZW50VHlwZUVudW0uQ0RFX0JSSURHRSkgcmV0dXJuO1xuICAgICAgICAgIGVsZW1lbnQubm9kZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5vbkNkZUxvYWRlZCA9IChwYXlsb2FkKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LnNldChwYXlsb2FkKTtcbiAgICAgICAgdHJhY2soXCJjZGVfbG9hZGVkXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5vbkNkZUxvYWRFcnJvciA9IChlcnJNc2cpID0+IHtcbiAgICAgIGlmICghdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5jZGVMb2FkRXZlbnQudGhyb3cobmV3IEVycm9yKGVyck1zZyksIGVyck1zZyk7XG4gICAgICAgIHRyYWNrKFwiY2RlX2xvYWRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiBlcnJNc2dcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZUVsZW1lbnQgPSAoZWxlbWVudFR5cGUsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiY3JlYXRlRWxlbWVudFwiKTtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCB0eXBlID0gX0VsZW1lbnRUeXBlRW51bVpvZC5wYXJzZShlbGVtZW50VHlwZSk7XG4gICAgICBjb25zdCBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhvcHRpb25zKTtcbiAgICAgIGZyYW1lLm5hbWUgPSBgJHt0eXBlfS1lbGVtZW50YDtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtmcmFtZS5uYW1lfS9gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICAgIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZy50b1N0cmluZygpO1xuICAgICAgZnJhbWUuc3JjID0gdXJsLmhyZWY7XG4gICAgICBmcmFtZS5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIjtcbiAgICAgIGZyYW1lLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG4gICAgICBjb25zdCByZWdpc3RlcmVkRWxlbWVudCA9IHRoaXMucmVnaXN0ZXJJZnJhbWUodHlwZSwgZnJhbWUpO1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWRFbGVtZW50O1xuICAgIH07XG4gICAgdGhpcy5yZWdpc3RlcklmcmFtZSA9ICh0eXBlLCBmcmFtZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgbm9kZTogZnJhbWUsXG4gICAgICAgIG1vdW50OiAoc2VsZWN0b3IpID0+IHtcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKT8uYXBwZW5kQ2hpbGQoZnJhbWUpO1xuICAgICAgICAgIHRyYWNrKFwiZWxlbWVudF9tb3VudGVkXCIsIHtcbiAgICAgICAgICAgIGVsZW1lbnRfdHlwZTogdHlwZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5jb25uZWN0VG9FbGVtZW50KHsgdHlwZTogZWxlbWVudC50eXBlLCBub2RlOiBlbGVtZW50Lm5vZGUgfSk7XG4gICAgICBpZiAoIXRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKSB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEX0NWQ106IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNERV9CUklER0VdOiB2b2lkIDBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzW3R5cGVdID0gZWxlbWVudDtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH07XG4gICAgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwicmVmZXJlclwiLCB0aGlzLnJlZmVycmVyKTtcbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCk7XG4gICAgICBpZiAob3B0aW9ucy5zdHlsZXMpIHtcbiAgICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwic3R5bGVzXCIsIGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nKG9wdGlvbnMuc3R5bGVzKSk7XG4gICAgICB9XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuKTtcbiAgICAgIHJldHVybiBxdWVyeVN0cmluZztcbiAgICB9O1xuICAgIHRoaXMuY29ubmVjdFRvRWxlbWVudCA9IChlbGVtZW50KSA9PiB7XG4gICAgICByZXR1cm4gY3JlYXRlVHJhY2tpbmdTcGFuKFxuICAgICAgICB7XG4gICAgICAgICAgc3Bhbk5hbWU6IFwiY29ubmVjdF90b19lbGVtZW50XCIsXG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbm4gPSBhd2FpdCBjcmVhdGVDb25uZWN0aW9uKGVsZW1lbnQubm9kZSk7XG4gICAgICAgICAgY29ubi50cmFjaW5nQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oZWxlbWVudC50eXBlLCBjb25uKTtcbiAgICAgICAgICBpZiAoIXRoaXMuYW55Q2RlQ29ubi5jdXJyZW50LmlzU3VjY2VzcyAmJiBlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRUeXBlRW51bS5DREVfQlJJREdFKSB7XG4gICAgICAgICAgICB0aGlzLmFueUNkZUNvbm4uc2V0KGNvbm4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKS5jYXRjaCgoZXJyKSA9PiBlcnJfXyhcIltGT1JNXSBFcnJvciBjb25uZWN0aW5nIHRvIENERSBpZnJhbWVcIiwgZXJyKSk7XG4gICAgfTtcbiAgICB0aGlzLmdldEZvcm1EaXYgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHk7XG4gICAgfTtcbiAgICB0aGlzLnN1Ym1pdENhcmQgPSBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgZXJyX18oXCJGb3JtIGlzIGFscmVhZHkgc3VibWl0dGluZy4gUGxlYXNlIHdhaXQgZm9yIHRoZSBzdWJtaXNzaW9uIHRvIGZpbmlzaCBiZWZvcmUgc3VibWl0dGluZyBhZ2Fpbi5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gdHJ1ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNyZWF0ZVRyYWNraW5nU3BhbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJzdWJtaXRfY2FyZFwiLFxuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgICBwYXltZW50Um91dGVJZDogcGFyYW1zPy5wYXltZW50Um91dGVJZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJhY2soXCJzdWJtaXRfY2FyZFwiLCB7IC4uLnBhcmFtcyB9KTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcInN1Ym1pdENhcmRcIik7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0MiA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGlmICghY29udGV4dDIpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IE9qc0Zsb3dzLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcmVkaXRfY2FyZFwiKSxcbiAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRDZGVDb25uZWN0aW9uczogdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRBbGxDb25uZWN0aW9ucygpLFxuICAgICAgICAgICAgICAgIHBheW1lbnRSb3V0ZUlkOiBwYXJhbXM/LnBheW1lbnRSb3V0ZUlkXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gY3JlYXRlVHJhY2tpbmdTcGFuKFxuICAgICAgICB7XG4gICAgICAgICAgc3Bhbk5hbWU6IFwiZ2V0X2F2YWlsYWJsZV9wYXltZW50X21ldGhvZHNcIixcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHNcIik7XG4gICAgICAgICAgY29uc3QgY29udGV4dDIgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFjb250ZXh0Mikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBnZXR0aW5nIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHMuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB7IHByb2Nlc3NvcnM6IGFwcGxlUGF5UHJvY2Vzc29ycywgaXNBdmFpbGFibGU6IGlzQXBwbGVQYXlBdmFpbGFibGUgfSA9IGdldEFwcGxlUGF5UHJvY2Vzc29ycyhcbiAgICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB7IHByb2Nlc3NvcnM6IGdvb2dsZVBheVByb2Nlc3NvcnMsIGlzQXZhaWxhYmxlOiBpc0dvb2dsZVBheUF2YWlsYWJsZSB9ID0gZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyhcbiAgICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBwYXlwYWxGbG93UmVzdWx0ID0gdGhpcy5pbml0Rmxvd3MucGF5cGFsLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBjb25zdCBwYXlwYWxBdmFpbGFibGUgPSBwYXlwYWxGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSA/PyBmYWxzZTtcbiAgICAgICAgICBjb25zdCB7IHByb2Nlc3NvcnM6IGtsYXJuYVByb2Nlc3NvcnMsIGlzQXZhaWxhYmxlOiBpc0tsYXJuYUF2YWlsYWJsZSB9ID0gZ2V0S2xhcm5hUHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgY29uc3QgeyBwcm9jZXNzb3JzOiBhZmZpcm1Qcm9jZXNzb3JzLCBpc0F2YWlsYWJsZTogaXNBZmZpcm1BdmFpbGFibGUgfSA9IGdldEFmZmlybVByb2Nlc3NvcnModGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgIGNvbnN0IHsgcHJvY2Vzc29yczogYWZ0ZXJwYXlQcm9jZXNzb3JzLCBpc0F2YWlsYWJsZTogaXNBZnRlcnBheUF2YWlsYWJsZSB9ID0gZ2V0QWZ0ZXJwYXlQcm9jZXNzb3JzKFxuICAgICAgICAgICAgdGhpcy5pbml0Rmxvd3NcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHBvY2t5dFBheXBhbEF2YWlsYWJsZSA9IGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMuc29tZShcbiAgICAgICAgICAgIChtZXRob2QpID0+IG1ldGhvZC5wcm9jZXNzb3JfbmFtZSA9PT0gXCJwb2NreXRcIiAmJiBtZXRob2QucHJvdmlkZXIgPT09IFwicGF5cGFsXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGxvb3BGbG93UmVzdWx0ID0gdGhpcy5pbml0Rmxvd3MubG9vcC5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgY29uc3QgbG9vcENyeXB0b0F2YWlsYWJsZSA9IGxvb3BGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSA/PyBmYWxzZTtcbiAgICAgICAgICBjb25zdCBzdHJpcGVMaW5rRmxvd1Jlc3VsdCA9IHRoaXMuaW5pdEZsb3dzLnN0cmlwZUxpbmsucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGNvbnN0IHN0cmlwZUxpbmtBdmFpbGFibGUgPSBzdHJpcGVMaW5rRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUgPz8gZmFsc2U7XG4gICAgICAgICAgY29uc3QgbWV0aG9kcyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5jYXJkLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBbXSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMuYXBwbGVQYXksXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IGFwcGxlUGF5UHJvY2Vzc29ycyxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IGlzQXBwbGVQYXlBdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMuZ29vZ2xlUGF5LFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBnb29nbGVQYXlQcm9jZXNzb3JzLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogaXNHb29nbGVQYXlBdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMucGF5cGFsLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBwYXlwYWxBdmFpbGFibGUgPyBbUGF5bWVudFByb2Nlc3Nvci5FbnVtLnBheXBhbF0gOiBbXSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IHBheXBhbEF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5rbGFybmEsXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IGtsYXJuYVByb2Nlc3NvcnMsXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBpc0tsYXJuYUF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5hZmZpcm0sXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IGFmZmlybVByb2Nlc3NvcnMsXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBpc0FmZmlybUF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5hZnRlcnBheSxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogYWZ0ZXJwYXlQcm9jZXNzb3JzLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogaXNBZnRlcnBheUF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5wb2NreXRQYXlwYWwsXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IHBvY2t5dFBheXBhbEF2YWlsYWJsZSA/IFtQYXltZW50UHJvY2Vzc29yLkVudW0ucG9ja3l0XSA6IFtdLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogcG9ja3l0UGF5cGFsQXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLmxvb3BDcnlwdG8sXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IGxvb3BDcnlwdG9BdmFpbGFibGUgPyBbUGF5bWVudFByb2Nlc3Nvci5FbnVtLmxvb3BdIDogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBsb29wQ3J5cHRvQXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLnN0cmlwZUxpbmssXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IFtQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlXSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IHN0cmlwZUxpbmtBdmFpbGFibGUsXG4gICAgICAgICAgICAgIGNvbnRyb2xsZXI6IHN0cmlwZUxpbmtGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSA/IHN0cmlwZUxpbmtGbG93UmVzdWx0LmNvbnRyb2xsZXIgOiB2b2lkIDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdO1xuICAgICAgICAgIGNvbnN0IGluaXRGbG93TmFtZU1hcCA9IHtcbiAgICAgICAgICAgIHBheXBhbDogU3VibWl0TWV0aG9kcy5wYXlwYWwsXG4gICAgICAgICAgICBhaXJ3YWxsZXhHb29nbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4R29vZ2xlUGF5LFxuICAgICAgICAgICAgYWlyd2FsbGV4QXBwbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4QXBwbGVQYXksXG4gICAgICAgICAgICBhdXRob3JpemVOZXRHb29nbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYXV0aG9yaXplbmV0R29vZ2xlUGF5LFxuICAgICAgICAgICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYXV0aG9yaXplbmV0QXBwbGVQYXksXG4gICAgICAgICAgICBhZHllbkdvb2dsZVBheTogU3VibWl0TWV0aG9kcy5hZHllbkdvb2dsZVBheSxcbiAgICAgICAgICAgIGFkeWVuQXBwbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYWR5ZW5BcHBsZVBheVxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgbWV0aG9kc19vbGQgPSBPYmplY3QuZW50cmllcyh0aGlzLmluaXRGbG93cykubWFwKChba2V5LCBmbG93XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmxvd1Jlc3VsdCA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGluaXRGbG93TmFtZU1hcFtrZXldID8/IGtleTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIG5hbWU6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IFtdLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogZmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUgPz8gZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIFsuLi5tZXRob2RzX29sZCwgLi4ubWV0aG9kc107XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfTtcbiAgICB0aGlzLmdlbmVyYWxTdWJtaXQgPSBhc3luYyAobWV0aG9kLCBzZXR0aW5ncykgPT4ge1xuICAgICAgY29uc3QgaXNTdHJpcGVCbnBsUmVkaXJlY3QgPSB0aGlzLmlzU3RyaXBlQm5wbFJlZGlyZWN0U3VibWlzc2lvbihtZXRob2QsIHNldHRpbmdzKTtcbiAgICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xuICAgICAgICBpZiAoIWlzU3RyaXBlQm5wbFJlZGlyZWN0IHx8ICF0aGlzLmFjdGl2ZUdlbmVyYWxTdWJtaXNzaW9uPy5pc1N0cmlwZUJucGxSZWRpcmVjdCkge1xuICAgICAgICAgIGVycl9fKFwiRm9ybSBpcyBhbHJlYWR5IHN1Ym1pdHRpbmcuIFBsZWFzZSB3YWl0IGZvciB0aGUgc3VibWlzc2lvbiB0byBmaW5pc2ggYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uXCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFib3J0U3RyaXBlQm5wbEZsb3dzKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWJtaXNzaW9uSWQgPSBTeW1ib2woXCJnZW5lcmFsLXN1Ym1pc3Npb25cIik7XG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XG4gICAgICB0aGlzLmFjdGl2ZUdlbmVyYWxTdWJtaXNzaW9uID0ge1xuICAgICAgICBpZDogc3VibWlzc2lvbklkLFxuICAgICAgICBpc1N0cmlwZUJucGxSZWRpcmVjdFxuICAgICAgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBjcmVhdGVUcmFja2luZ1NwYW4oXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3Bhbk5hbWU6IFwiZ2VuZXJhbF9mb3JtX3N1Ym1pdFwiLFxuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyYWNrKFwiZ2VuZXJhbF9mb3JtX3N1Ym1pdFwiLCB7IG1ldGhvZCwgc2V0dGluZ3MgfSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJnZW5lcmFsU3VibWl0XCIpO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dDIgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBpZiAoIWNvbnRleHQyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuY2FyZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJtaXRDYXJkKHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLnBvY2t5dFBheXBhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5QQVlQQUwsXG4gICAgICAgICAgICAgICAgICAgIFwicG9ja3l0XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3MgfSxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMucGF5cGFsOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5wYXlwYWwucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLlBBWVBBTCxcbiAgICAgICAgICAgICAgICAgICAgXCJwYXlwYWxcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5ncyB9LFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5rbGFybmE6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdyB9ID0gZ2V0S2xhcm5hUHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFmZmlybToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93IH0gPSBnZXRBZmZpcm1Qcm9jZXNzb3JzKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWZ0ZXJwYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdyB9ID0gZ2V0QWZ0ZXJwYXlQcm9jZXNzb3JzKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMubG9vcENyeXB0bzoge1xuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5sb29wQ3J5cHRvLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgXCJjcnlwdG9cIixcbiAgICAgICAgICAgICAgICAgICAgXCJsb29wXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydEZsb3cgfSA9IGdldEFwcGxlUGF5UHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93IH0gPSBnZXRHb29nbGVQYXlQcm9jZXNzb3JzKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBLZWVwaW5nIGV4aXN0aW5nIGNvbW1lbnRlZCBjb2RlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIGluIHRoZSBmdXR1cmUgdmVyc2lvblxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWlyd2FsbGV4R29vZ2xlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFpcndhbGxleEdvb2dsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhaXJ3YWxsZXgtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWlyd2FsbGV4R29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWlyd2FsbGV4QXBwbGVQYXkgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhaXJ3YWxsZXhBcHBsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ2BcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhaXJ3YWxsZXhBcHBsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRHb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdXRob3JpemVOZXRHb29nbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYXV0aG9yaXplTmV0R29vZ2xlUGF5KSB7XG4gICAgICAgICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgICAgICAgYGF1dGhvcml6ZS1uZXQtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYXV0aG9yaXplTmV0R29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmF1dGhvcml6ZW5ldEFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aG9yaXplTmV0QXBwbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhdXRob3JpemVOZXRBcHBsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYXV0aG9yaXplTmV0QXBwbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWR5ZW5Hb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZHllbkdvb2dsZVBheSA9IHRoaXMuaW5pdEZsb3dzLmFkeWVuR29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFkeWVuR29vZ2xlUGF5KSB7XG4gICAgICAgICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgICAgICAgYGFkeWVuLWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkeWVuR29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFkeWVuQXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZHllbkFwcGxlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYWR5ZW5BcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhZHllbkFwcGxlUGF5KSB7XG4gICAgICAgICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgICAgICAgYGFkeWVuLWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWR5ZW5BcHBsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhBQ0g6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLmFpcndhbGxleEFDSC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFBheW1lbnRQcm92aWRlclR5cGUuQUNILFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4RUZUOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhFRlQucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLkVGVCxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEJBQ1M6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLmFpcndhbGxleEJBQ1MucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLkJBQ1MsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhTRVBBOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhTRVBBLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5TRVBBLFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuc3RyaXBlTGluazoge1xuICAgICAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICAgICAgXCJTdHJpcGVMaW5rIGNhbm5vdCBiZSBzdWJtaXR0ZWQgbWFudWFsbHkuIFBsZWFzZSBtb3VudCB0aGUgYnV0dG9uIHByb3Blcmx5IGFuZCBpZiB1c2VyIGNvbXBsZXRlZCB0aGUgcGF5bWVudCBmbG93IHZpYSBTdHJpcGVMaW5rIGJ1dHRvbiwgdGhlIHBheW1lbnQgd2lsbCBiZSBzdWJtaXR0ZWQgYXV0b21hdGljYWxseS5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYXNzZXJ0TmV2ZXIobWV0aG9kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVHZW5lcmFsU3VibWlzc2lvbj8uaWQgPT09IHN1Ym1pc3Npb25JZCkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlR2VuZXJhbFN1Ym1pc3Npb24gPSBudWxsO1xuICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc3VibWl0V2l0aCA9IHRoaXMuZ2VuZXJhbFN1Ym1pdDtcbiAgICB0aGlzLnN1Ym1pdCA9IHRoaXMuc3VibWl0Q2FyZDtcbiAgICB0aGlzLmlzU3RyaXBlQm5wbFJlZGlyZWN0U3VibWlzc2lvbiA9IChtZXRob2QsIHNldHRpbmdzKSA9PiB7XG4gICAgICBpZiAoIVtTdWJtaXRNZXRob2RzLmtsYXJuYSwgU3VibWl0TWV0aG9kcy5hZmZpcm0sIFN1Ym1pdE1ldGhvZHMuYWZ0ZXJwYXldLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgYm5wbFNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgICBpZiAoIWJucGxTZXR0aW5ncz8udXNlUmVkaXJlY3RGbG93KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChibnBsU2V0dGluZ3MucHJvY2Vzc29yKSB7XG4gICAgICAgIHJldHVybiBibnBsU2V0dGluZ3MucHJvY2Vzc29yID09PSBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlO1xuICAgICAgfVxuICAgICAgaWYgKG1ldGhvZCA9PT0gU3VibWl0TWV0aG9kcy5rbGFybmEpIHtcbiAgICAgICAgcmV0dXJuIGdldEtsYXJuYVByb2Nlc3NvcnModGhpcy5pbml0Rmxvd3MpLnByb2Nlc3NvcnNbMF0gPT09IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIHRoaXMuYWJvcnRTdHJpcGVCbnBsRmxvd3MgPSAoKSA9PiB7XG4gICAgICBnZXRLbGFybmFQcm9jZXNzb3JzKHRoaXMuaW5pdEZsb3dzKS5hYm9ydEZsb3coKTtcbiAgICAgIGdldEFmZmlybVByb2Nlc3NvcnModGhpcy5pbml0Rmxvd3MpLmFib3J0RmxvdygpO1xuICAgICAgZ2V0QWZ0ZXJwYXlQcm9jZXNzb3JzKHRoaXMuaW5pdEZsb3dzKS5hYm9ydEZsb3coKTtcbiAgICB9O1xuICAgIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIGxvZ19fKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIik7XG4gICAgICB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJkZXN0cm95XCIpO1xuICAgICAgdGhpcy5hYm9ydFN0cmlwZUJucGxGbG93cygpO1xuICAgICAgdGhpcy5pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50KSBjb250aW51ZTtcbiAgICAgICAgZWxlbWVudC5ub2RlLnJlbW92ZSgpO1xuICAgICAgfVxuICAgICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKTtcbiAgICAgIGRldGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzKCk7XG4gICAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGw7XG4gICAgICBkZWxldGUgd2luZG93W1wib2pzXCJdO1xuICAgICAgdHJhY2soXCJmb3JtX2Rlc3Ryb3llZFwiKTtcbiAgICB9O1xuICAgIHRoaXMudXBkYXRlQ2FsbGJhY2tzID0gKG5ld0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhuZXdDYWxsYmFja3MpO1xuICAgIH07XG4gICAgT3BlblBheUZvcm0uYXNzaWduQXNTaW5nbGV0b24odGhpcyk7XG4gICAgdGhpcy5vanNWZXJzaW9uID0gXCIwLjYuMFwiO1xuICAgIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcIjAuNi4wXCI7XG4gICAgdGhpcy5iYXNlVXJsID0gY29uZmlnLmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuICAgIHRoaXMuY29uZmlnID0geyAuLi5jb25maWcsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9O1xuICAgIHRoaXMuZm9ybUNhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuZnJvbU9iamVjdChjb25maWcpO1xuICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbDtcbiAgICB0aGlzLmZvcm1JZCA9IGBvcGpzLWZvcm0tJHt2NCgpfWA7XG4gICAgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgdGhpcy5mb3JtVGFyZ2V0ID0gY29uZmlnLmZvcm1UYXJnZXQgPz8gXCJib2R5XCI7XG4gICAgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH07XG4gICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBDb25uZWN0aW9uTWFuYWdlcigpO1xuICAgIHRoaXMuZGV2aWNlVG9rZW4gPSBnZXREZXZpY2VUb2tlbigpO1xuICAgIGF0dGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzKCk7XG4gICAgY29uc3QgeyBmcmFtZXdvcmssIHZlcnNpb24gfSA9IGdldEZyYW1ld29ya0luZm8oKTtcbiAgICBnZXRDdXJyZW50RW52KHRoaXMuYmFzZVVybCkudGhlbigoZW52aXJvbm1lbnQpID0+IHtcbiAgICAgIGlmICghbWV0cmljc1B1Ymxpc2hlci5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICBjb25zdCBtZXRyaWNzQ29udGV4dCA9IHtcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICAgIGZyYW1ld29yayxcbiAgICAgICAgICBmcmFtZXdvcmtWZXJzaW9uOiB2ZXJzaW9uLFxuICAgICAgICAgIG9qc1ZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICBvanNSZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmxcbiAgICAgICAgfTtcbiAgICAgICAgbWV0cmljc1B1Ymxpc2hlci5zZXQobWV0cmljc0NvbnRleHQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRyYWNrKFwiZm9ybV9pbml0XCIpO1xuICAgIGNvbnNvbGUubG9nKFwiT0pTIFZFUlNJT05cIiwgdGhpcy5vanNWZXJzaW9uKTtcbiAgICBpZiAoY29uZmlnLmFsbG93VHJhY2luZyA9PT0gdHJ1ZSkge1xuICAgICAgaW5pdFRyYWNlclNhZmUodGhpcy5vanNWZXJzaW9uLCB0aGlzLmJhc2VVcmwpO1xuICAgIH1cbiAgICB0aGlzLmV2ZW50SGFuZGxlciA9IG5ldyBPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlcih0aGlzLmZvcm1JZCwgdGhpcy5iYXNlVXJsLCB0aGlzLmZvcm1DYWxsYmFja3MsIHtcbiAgICAgIHNldEZvcm1IZWlnaHQ6IHRoaXMuc2V0Rm9ybUhlaWdodCxcbiAgICAgIG9uQ2RlTG9hZGVkOiB0aGlzLm9uQ2RlTG9hZGVkLFxuICAgICAgb25DZGVMb2FkRXJyb3I6IHRoaXMub25DZGVMb2FkRXJyb3JcbiAgICB9KTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICAgIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5vanNGbG93cyA9IE9qc0Zsb3dzO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5hc3NpZ25Bc1NpbmdsZXRvbiA9IChmb3JtKSA9PiB7XG4gICAgICBpZiAoT3BlblBheUZvcm0uZ2V0SW5zdGFuY2UoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGluc3RhbmNlIGFscmVhZHkgZXhpc3RzLiBPbmx5IG9uZSBpbnN0YW5jZSBpcyBhbGxvd2VkLlwiKTtcbiAgICAgIH1cbiAgICAgIHdpbmRvd1tcIm9qc1wiXSA9IGZvcm07XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZ2V0SW5zdGFuY2UgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gd2luZG93W1wib2pzXCJdID8/IG51bGw7XG4gICAgfTtcbiAgfVxuICBnZXQgY2hlY2tvdXRTZWN1cmVUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbjtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuYnVpbGRPanNGbG93Q29udGV4dCA9IChjb25maWcsIGNkZUxvYWRlZFBheWxvYWQsIGFueUNkZUNvbm5lY3Rpb24sIGZvcm1EaXYpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IGNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBiYXNlVXJsOiBuZXcgVVJMKGNvbmZpZy5iYXNlVXJsID8/IEZSQU1FX0JBU0VfVVJMKS5vcmlnaW4sXG4gICAgICAgIGZvcm1EaXYsXG4gICAgICAgIGVsZW1lbnRzU2Vzc2lvbklkOiBjZGVMb2FkZWRQYXlsb2FkLnNlc3Npb25JZCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogY2RlTG9hZGVkUGF5bG9hZC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjdXN0b21Jbml0UGFyYW1zOiBjb25maWcuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fSxcbiAgICAgICAgcHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uOiBjb25maWcucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uXG4gICAgICB9O1xuICAgIH07XG4gIH1cbiAgY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShjYWxsZXIgPSBcInVua25vd25cIikge1xuICAgIGNvbnN0IGN1cnJlbnRJbnN0YW5jZSA9IE9wZW5QYXlGb3JtLmdldEluc3RhbmNlKCk7XG4gICAgY29uc3QgZGVidWdJbmZvID0ge1xuICAgICAgdGhpc0Zvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICBjdXJyZW50Rm9ybUlkOiBjdXJyZW50SW5zdGFuY2U/LmZvcm1JZCB8fCBcIm5vLWN1cnJlbnQtaW5zdGFuY2VcIixcbiAgICAgIGlzRGVzdHJveWVkOiB0aGlzLmlzRGVzdHJveWVkLFxuICAgICAgY2hlY2tvdXRUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbi5zdWJzdHJpbmcoMCwgMTApICsgXCIuLi5cIlxuICAgIH07XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYFxuICAgICAgW1dhcm5pbmddIEludmFsaWQgZm9ybSBpbnN0YW5jZSBkZXRlY3RlZC5cbiAgICAgIEl0IGxvb2tzIGxpa2UgeW91IGFyZSBzdGlsbCB1c2luZyBhbiBvbGQgaW5zdGFuY2UgdGhhdCBoYXMgYmVlbiBkZXN0cm95ZWQuXG4gICAgICBQbGVhc2UgbWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgdGhlIGxhdGVzdCBpbnN0YW5jZSBvZiB0aGUgZm9ybSBhbmQgY2xlYW51cCBldmVudCBsaXN0ZW5lcnMuXG4gICAgICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgIERlYnVnIEluZm86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgIC0gY2FsbGVyOiAke2NhbGxlcn1cbiAgICAgIC0gY2FsbGVyX2Zvcm1faWQ6ICR7ZGVidWdJbmZvLnRoaXNGb3JtSWR9XG4gICAgICAtIGN1cnJlbnRfYWN0aXZlX2Zvcm1faWQ6ICR7ZGVidWdJbmZvLmN1cnJlbnRGb3JtSWR9XG4gICAgICAtIGlzX2Rlc3Ryb3llZDogJHtkZWJ1Z0luZm8uaXNEZXN0cm95ZWR9XG4gICAgICAtIGNoZWNrb3V0X3Rva2VuOiAke2RlYnVnSW5mby5jaGVja291dFRva2VufVxuICAgIGA7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgIGVycl9fKGVycm9yTWVzc2FnZSk7XG4gICAgICB0cmFjayhcIm91dGRhdGVkX2Zvcm1faW5zdGFuY2VcIiwgeyBlcnJvcjogZXJyb3JNZXNzYWdlIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWN1cnJlbnRJbnN0YW5jZSB8fCBjdXJyZW50SW5zdGFuY2UuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCkge1xuICAgICAgZXJyX18oZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRyYWNrKFwib3V0ZGF0ZWRfZm9ybV9pbnN0YW5jZVwiLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmV4cG9ydCB7IENvbnRleHRBUEkgYXMgQywgRGlhZ0FQSSBhcyBELCBFbGVtZW50VHlwZUVudW0gYXMgRSwgRmllbGROYW1lIGFzIEYsIElOVkFMSURfU1BBTl9DT05URVhUIGFzIEksIE9wZW5QYXlGb3JtIGFzIE8sIFByb3h5VHJhY2VyIGFzIFAsIFJPT1RfQ09OVEVYVCBhcyBSLCBTcGFuS2luZCBhcyBTLCBUcmFjZUZsYWdzIGFzIFQsIGNvbnRleHQgYXMgYSwgaXNWYWxpZFRyYWNlSWQgYXMgYiwgY3JlYXRlQ29udGV4dEtleSBhcyBjLCBpc1ZhbGlkU3BhbklkIGFzIGQsIFNwYW5TdGF0dXNDb2RlIGFzIGUsIERpYWdMb2dMZXZlbCBhcyBmLCBnZXRHbG9iYWwgYXMgZywgSU5WQUxJRF9TUEFOSUQgYXMgaCwgaXNTcGFuQ29udGV4dFZhbGlkIGFzIGksIElOVkFMSURfVFJBQ0VJRCBhcyBqLCBQcm94eVRyYWNlclByb3ZpZGVyIGFzIGssIFN1Ym1pdE1ldGhvZHMgYXMgbCwgcmVnaXN0ZXJHbG9iYWwgYXMgciwgdHJhY2UgYXMgdCwgdW5yZWdpc3Rlckdsb2JhbCBhcyB1IH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxrQkFBQUEsVUFBc0I7QUFDL0IsU0FBUyxLQUFBQyxTQUFTO0FBQ2xCLE9BQU9DLFFBQVc7QUFDbEIsU0FBUyxNQUFBQyxVQUFVO0FBRW5CLFNBQVNDLEdBQVNDLEdBQVFDLEdBQVc7QUFDbkMsTUFBSUMsSUFBaUIsT0FBTztBQUM1QixFQUFBQSxJQUFpQkEsRUFBZUYsR0FBUUMsQ0FBUyxJQUFJRCxFQUFPLFlBQVlDO0FBQzFFO0FB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QU87QUFDNUM7QUEzckJOLElBQU04cUMsS0FBTi9DOyIsCiAgIm5hbWVzIjogWyJjb25uZWN0VG9DaGlsZCIsICJ6IiwgImNoYWxrIiwgInY0IiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiZm4iLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzJDEiLCAiX2V4dGVuZFN0YXRpY3MiLCAiZCIsICJiIiwgInAiLCAiX18iLCAiQ3VzdG9tRXJyb3IiLCAiX3N1cGVyIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJfRWxlbWVudFR5cGVFbnVtWm9kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkJhc2VFbGVtZW50c1N0eWxlIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiRWxlbWVudEV2ZW50IiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiVG9rZW5pemVDYXJkUmVzcG9uc2UiLCAiVGhyZWVEU1N0YXR1cyIsICJUaHJlZURTU3RhdHVzMiIsICJQaW5nM0RTU3RhdHVzUmVzcG9uc2UiLCAiQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIkFXWEJhbmsiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgIkNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkUmVzcG9uc2UiLCAiQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiRUZURm9ybURhdGEiLCAiQkFDU0Zvcm1EYXRhIiwgIlNFUEFGb3JtRGF0YSIsICJBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSIsICJFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSIsICJCQUNTTWljcm9EZXBvc2l0Rm9ybURhdGEiLCAiU0VQQU1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIk1pY3JvRGVwb3NpdFN0YXR1c1Jlc3BvbnNlIiwgIm51bGxPclVuZGVmT3IiLCAiQ0RFUmVzcG9uc2VFcnJvciIsICJDb3Vwb25NaW5pbWFsIiwgIkxpbmVJdGVtIiwgIkJyYW5kU2V0dGluZ3MiLCAiQnJhbmQiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kIiwgIlN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsIiwgIlN1YnNjcmlwdGlvbk1pbmltYWwiLCAiSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsIiwgIkludm9pY2VMaW5lSXRlbU1pbmltYWwiLCAiRGlzY291bnRNaW5pbWFsIiwgIkludm9pY2VNaW5pbWFsIiwgIkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZWRGb3JtUHJlZmlsbCIsICJFeHBpcmVkRm9ybVByZWZpbGwiLCAiQ29tcGxldGVBZGRyZXNzIiwgIlNldHVwQ2hlY2tvdXRSZXNwb25zZSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIk5ld0N1c3RvbWVyRmllbGRzIiwgIlByaWNlUXR5IiwgIkNhcnRJbmZvIiwgIlByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEiLCAiU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgIlN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlIiwgIkNoZWNrb3V0U3RhbmRhcmRFcnJvclJlc3BvbnNlIiwgIlByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlIiwgIlNldFVzZXJEZXZpY2VUb2tlblJlc3BvbnNlIiwgIlVzZXJBY3Rpb25GRVBheWxvYWQiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZSIsICJab2RGaWVsZEVycm9yIiwgIlpvZEZpZWxkRXJyb3JzIiwgIk1BUF9UT19IVU1BTl9GUklFTkRMWV9MT1dFUkNBU0UiLCAiZ2V0SHVtYW5GcmllbmRseU1lc3NhZ2UiLCAib2dFcnJvck1lc3NhZ2UiLCAia2V5IiwgImlzU3RyaW5naWZpZWRKc29uT2JqZWN0IiwgInN0ciIsICJjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgInJlc3BvbnNlIiwgImVyciIsICJjcmVhdGVNZXNzYWdlRnJvbVpvZEZpZWxkRXJyb3JzIiwgImVycm9ycyIsICJnZXRFcnJvck1lc3NhZ2UiLCAib2JqIiwgImUyIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiY2FsbGJhY2tOYW1lIiwgImVycm9yTG9nZ2VyIiwgImFyZ3MiLCAiZXJyb3IiLCAic3VtIiwgImFyciIsICJhIiwgImJlZm9yZVVubG9hZEhhbmRsZXIiLCAiZXZlbnQiLCAicHJldmVudE5hdmlnYXRpb24iLCAic3RvcFByZXZlbnROYXZpZ2F0aW9uIiwgImFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzIiwgInNpbXBsZU9qc0Zsb3ciLCAiYWN0aXZlU3VibWlzc2lvbiIsICJwYXJhbXMiLCAic3VibWlzc2lvbiIsICJvbkFib3J0IiwgInRyYWNrIiwgImZsb3dSZXN1bHQiLCAiZm9yY2VQcm9jZXNzTWV0cmljc1F1ZXVlIiwgImVycm9yTWVzc2FnZSIsICJlcnJvckNvZGUiLCAic2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlIiwgImFkZEVycm9yQ2F0Y2hlckZvckluaXQiLCAiaW5pdCIsICJlcnJfXyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImV4dGVuZFN0YXRpY3MiLCAiX19leHRlbmRzIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAidmFsdWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAiZSIsICJyZWplY3RlZCIsICJyZXN1bHQiLCAiX19nZW5lcmF0b3IiLCAiYm9keSIsICJfIiwgInQiLCAiZiIsICJ5IiwgImciLCAidmVyYiIsICJuIiwgInYiLCAib3AiLCAiX192YWx1ZXMiLCAibyIsICJzIiwgIm0iLCAiaSIsICJfX3JlYWQkNCIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkkNCIsICJ0byIsICJmcm9tIiwgInBhY2siLCAibCIsICJfX2F3YWl0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicSIsICJhd2FpdFJldHVybiIsICJyZXN1bWUiLCAic2V0dGxlIiwgImZ1bGZpbGwiLCAiX19hc3luY1ZhbHVlcyIsICJpc0Z1bmN0aW9uIiwgInZhbHVlIiwgImNyZWF0ZUVycm9yQ2xhc3MiLCAiY3JlYXRlSW1wbCIsICJfc3VwZXIiLCAiaW5zdGFuY2UiLCAiY3RvckZ1bmMiLCAiVW5zdWJzY3JpcHRpb25FcnJvciIsICJlcnJvcnMiLCAiZXJyIiwgImkiLCAiYXJyUmVtb3ZlIiwgImFyciIsICJpdGVtIiwgImluZGV4IiwgIlN1YnNjcmlwdGlvbiIsICJpbml0aWFsVGVhcmRvd24iLCAiZV8xIiwgIl9hIiwgImVfMiIsICJfYiIsICJfcGFyZW50YWdlIiwgIl9wYXJlbnRhZ2VfMSIsICJfX3ZhbHVlcyIsICJfcGFyZW50YWdlXzFfMSIsICJwYXJlbnRfMSIsICJlXzFfMSIsICJpbml0aWFsRmluYWxpemVyIiwgImUiLCAiX2ZpbmFsaXplcnMiLCAiX2ZpbmFsaXplcnNfMSIsICJfZmluYWxpemVyc18xXzEiLCAiZmluYWxpemVyIiwgImV4ZWNGaW5hbGl6ZXIiLCAiX19zcHJlYWRBcnJheSQ0IiwgIl9fcmVhZCQ0IiwgImVfMl8xIiwgInRlYXJkb3duIiwgInBhcmVudCIsICJlbXB0eSIsICJFTVBUWV9TVUJTQ1JJUFRJT04iLCAiaXNTdWJzY3JpcHRpb24iLCAiY29uZmlnIiwgInRpbWVvdXRQcm92aWRlciIsICJoYW5kbGVyIiwgInRpbWVvdXQiLCAiYXJncyIsICJfaSIsICJoYW5kbGUiLCAicmVwb3J0VW5oYW5kbGVkRXJyb3IiLCAibm9vcCIsICJlcnJvckNvbnRleHQiLCAiY2IiLCAiU3Vic2NyaWJlciIsICJfX2V4dGVuZHMiLCAiZGVzdGluYXRpb24iLCAiX3RoaXMiLCAiRU1QVFlfT0JTRVJWRVIiLCAibmV4dCIsICJlcnJvciIsICJjb21wbGV0ZSIsICJTYWZlU3Vic2NyaWJlciIsICJDb25zdW1lck9ic2VydmVyIiwgInBhcnRpYWxPYnNlcnZlciIsICJoYW5kbGVVbmhhbmRsZWRFcnJvciIsICJvYnNlcnZlck9yTmV4dCIsICJkZWZhdWx0RXJyb3JIYW5kbGVyIiwgIm9ic2VydmFibGUiLCAiaWRlbnRpdHkiLCAieCIsICJwaXBlRnJvbUFycmF5IiwgImZucyIsICJpbnB1dCIsICJwcmV2IiwgImZuIiwgIk9ic2VydmFibGUiLCAic3Vic2NyaWJlIiwgIm9wZXJhdG9yIiwgInN1YnNjcmliZXIiLCAiaXNTdWJzY3JpYmVyIiwgInNvdXJjZSIsICJzaW5rIiwgInByb21pc2VDdG9yIiwgImdldFByb21pc2VDdG9yIiwgInJlc29sdmUiLCAicmVqZWN0IiwgIm9wZXJhdGlvbnMiLCAiaXNPYnNlcnZlciIsICJoYXNMaWZ0IiwgIm9wZXJhdGUiLCAiaW5pdCIsICJsaWZ0ZWRTb3VyY2UiLCAiY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIiwgIm9uTmV4dCIsICJvbkNvbXBsZXRlIiwgIm9uRXJyb3IiLCAib25GaW5hbGl6ZSIsICJPcGVyYXRvclN1YnNjcmliZXIiLCAic2hvdWxkVW5zdWJzY3JpYmUiLCAiY2xvc2VkXzEiLCAiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLCAiU3ViamVjdCIsICJzdWJqZWN0IiwgIkFub255bW91c1N1YmplY3QiLCAiX2MiLCAib2JzZXJ2ZXIiLCAib2JzZXJ2ZXJzIiwgImhhc0Vycm9yIiwgImlzU3RvcHBlZCIsICJ0aHJvd25FcnJvciIsICJkYXRlVGltZXN0YW1wUHJvdmlkZXIiLCAiQWN0aW9uIiwgInNjaGVkdWxlciIsICJ3b3JrIiwgInN0YXRlIiwgImRlbGF5IiwgImludGVydmFsUHJvdmlkZXIiLCAiQXN5bmNBY3Rpb24iLCAiaWQiLCAiX2lkIiwgIl9zY2hlZHVsZXIiLCAiX2RlbGF5IiwgImVycm9yZWQiLCAiZXJyb3JWYWx1ZSIsICJhY3Rpb25zIiwgIlNjaGVkdWxlciIsICJzY2hlZHVsZXJBY3Rpb25DdG9yIiwgIm5vdyIsICJBc3luY1NjaGVkdWxlciIsICJTY2hlZHVsZXJBY3Rpb24iLCAiYWN0aW9uIiwgImFzeW5jU2NoZWR1bGVyIiwgImlzQXJyYXlMaWtlIiwgImlzUHJvbWlzZSIsICJpc0ludGVyb3BPYnNlcnZhYmxlIiwgImlzQXN5bmNJdGVyYWJsZSIsICJvYmoiLCAiY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IiLCAiZ2V0U3ltYm9sSXRlcmF0b3IiLCAiaXRlcmF0b3IiLCAiaXNJdGVyYWJsZSIsICJyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yIiwgInJlYWRhYmxlU3RyZWFtIiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicmVhZGVyIiwgImRvbmUiLCAiX19nZW5lcmF0b3IiLCAiX19hd2FpdCIsICJpc1JlYWRhYmxlU3RyZWFtTGlrZSIsICJpbm5lckZyb20iLCAiZnJvbUludGVyb3BPYnNlcnZhYmxlIiwgImZyb21BcnJheUxpa2UiLCAiZnJvbVByb21pc2UiLCAiZnJvbUFzeW5jSXRlcmFibGUiLCAiZnJvbUl0ZXJhYmxlIiwgImZyb21SZWFkYWJsZVN0cmVhbUxpa2UiLCAib2JzIiwgImFycmF5IiwgInByb21pc2UiLCAiaXRlcmFibGUiLCAiaXRlcmFibGVfMSIsICJpdGVyYWJsZV8xXzEiLCAiYXN5bmNJdGVyYWJsZSIsICJwcm9jZXNzIiwgImFzeW5jSXRlcmFibGVfMSIsICJhc3luY0l0ZXJhYmxlXzFfMSIsICJfX2F3YWl0ZXIiLCAiX19hc3luY1ZhbHVlcyIsICJleGVjdXRlU2NoZWR1bGUiLCAicGFyZW50U3Vic2NyaXB0aW9uIiwgInJlcGVhdCIsICJzY2hlZHVsZVN1YnNjcmlwdGlvbiIsICJ0aHJvd0Vycm9yIiwgImVycm9yT3JFcnJvckZhY3RvcnkiLCAiZXJyb3JGYWN0b3J5IiwgIkVtcHR5RXJyb3IiLCAibGFzdFZhbHVlRnJvbSIsICJfaGFzVmFsdWUiLCAiX3ZhbHVlIiwgImlzVmFsaWREYXRlIiwgIlRpbWVvdXRFcnJvciIsICJpbmZvIiwgInNjaGVkdWxlckFyZyIsICJmaXJzdCIsICJlYWNoIiwgIl93aXRoIiwgInRpbWVvdXRFcnJvckZhY3RvcnkiLCAiX2QiLCAibWV0YSIsICJvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiIsICJ0aW1lclN1YnNjcmlwdGlvbiIsICJsYXN0VmFsdWUiLCAic2VlbiIsICJzdGFydFRpbWVyIiwgIkxvYWRlZE9uY2VQdWJsaXNoZXIiLCAiZXJyTXNnIiwgInZhbHVlSWZOb3RMb2FkZWQiLCAic3Vic2NyaXB0aW9uIiwgInRpbWVvdXRDb25maWciLCAiYXNzZXJ0TmV2ZXIiLCAidGltZW91dFBhcmFtcyIsICJPanNFbnZpcm9ubWVudCIsICJ6IiwgImNvbm50b0Jhc2VVcmxzIiwgImdldENvbm50b1VybCIsICJlbnYiLCAiZW52Q2FjaGUiLCAiZ2V0Q3VycmVudEVudiIsICJiYXNlVXJsIiwgInJlc3BvbnNlIiwgInJlcyIsICJleGNsdWRlUHJvcHMiLCAicHJvcHMiLCAia2V5IiwgImdldFdpbmRvd1NhZmUiLCAibWV0cmljc1B1Ymxpc2hlciIsICJNRVRSSUNTX1FVRVVFX0tFWSIsICJNQVhfUkVUUllfQVRURU1QVFMiLCAiQkFUQ0hfU0laRSIsICJCQVRDSF9JTlRFUlZBTF9NUyIsICJsb2dfXyR4IiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgIk1ldHJpY3NRdWV1ZSIsICJldmVudE5hbWUiLCAicHJvcGVydGllcyIsICJjb250ZXh0UHJvcGVydGllcyIsICJldmVudCIsICJ2NCIsICJzdG9yZWRRdWV1ZSIsICJzYWZlV2luZG93IiwgImNvbnRleHQiLCAiYmF0Y2giLCAiYmF0Y2hQYXlsb2FkIiwgImNvbm50b1VybCIsICJtZXRyaWNzUm91dGVyIiwgImV2ZW50c1RvS2VlcCIsICJtZXRyaWNzUXVldWUiLCAidHJhY2siLCAiZm9yY2VQcm9jZXNzTWV0cmljc1F1ZXVlIiwgIm9uVW5oYW5kbGVkUmVqZWN0aW9uRXJyb3IiLCAiZXJyb3JNZXNzYWdlIiwgImdldEVycm9yTWVzc2FnZSIsICJvblVuY2F1Z2h0RXJyb3IiLCAicGFnZUxpZmVjeWNsZSIsICJsb2FkUGFnZUxpZmVjeWNsZSIsICJwYWdlTGlmZWN5Y2xlU3RhdGVDaGFuZ2VIYW5kbGVyIiwgImF0dGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzIiwgImxpZmVjeWNsZSIsICJkZXRhY2hBbmFseXRpY3NFdmVudExpc3RlbmVycyIsICJTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEiLCAib3VyQ3VycmVuY3lUb1RoZWlycyIsICJnZXRMb2FkZWRTdHJpcGUiLCAicHVibGlzaGFibGVLZXkiLCAiaXNTdHJpcGVKc1ByZXNlbnQiLCAic2xlZXAiLCAiY3JlYXRlU3RyaXBlRWxlbWVudHMiLCAic3RyaXBlUHViS2V5IiwgImVsZW1lbnRzT3B0aW9ucyIsICJzdHJpcGUiLCAiY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QiLCAidG90YWxBbW91bnRBdG9tIiwgImN1cnJlbmN5IiwgImlzQW1vdW50UGVuZGluZyIsICJpc0xpbmtPbmx5IiwgInN0cmlwZUN1cnJlbmN5IiwgInRpbWVvdXRNcyIsICJ3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZCIsICJwYXltZW50UmVxdWVzdCIsICJldnQiLCAiY29uZmlybVN0cmlwZVByUE0iLCAibmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZVBtIiwgImNvbmZpcm1SZXN1bHQiLCAibGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyIsICJyZXN1bHRTdGF0dXMiLCAiX2dsb2JhbFRoaXMiLCAiVkVSU0lPTiIsICJyZSIsICJfbWFrZUNvbXBhdGliaWxpdHlDaGVjayIsICJvd25WZXJzaW9uIiwgImFjY2VwdGVkVmVyc2lvbnMiLCAicmVqZWN0ZWRWZXJzaW9ucyIsICJteVZlcnNpb25NYXRjaCIsICJvd25WZXJzaW9uUGFyc2VkIiwgImdsb2JhbFZlcnNpb24iLCAiX3JlamVjdCIsICJ2IiwgIl9hY2NlcHQiLCAiZ2xvYmFsVmVyc2lvbk1hdGNoIiwgImdsb2JhbFZlcnNpb25QYXJzZWQiLCAiaXNDb21wYXRpYmxlIiwgIm1ham9yIiwgIkdMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVkiLCAiX2dsb2JhbCIsICJyZWdpc3Rlckdsb2JhbCIsICJ0eXBlIiwgImRpYWciLCAiYWxsb3dPdmVycmlkZSIsICJhcGkiLCAiZ2V0R2xvYmFsIiwgInVucmVnaXN0ZXJHbG9iYWwiLCAiX19yZWFkJDMiLCAibyIsICJuIiwgIm0iLCAiciIsICJhciIsICJfX3NwcmVhZEFycmF5JDMiLCAidG8iLCAiZnJvbSIsICJwYWNrIiwgImwiLCAiRGlhZ0NvbXBvbmVudExvZ2dlciIsICJsb2dQcm94eSIsICJmdW5jTmFtZSIsICJuYW1lc3BhY2UiLCAibG9nZ2VyIiwgIkRpYWdMb2dMZXZlbCIsICJjcmVhdGVMb2dMZXZlbERpYWdMb2dnZXIiLCAibWF4TGV2ZWwiLCAiX2ZpbHRlckZ1bmMiLCAidGhlTGV2ZWwiLCAidGhlRnVuYyIsICJfX3JlYWQkMiIsICJfX3NwcmVhZEFycmF5JDIiLCAiQVBJX05BTUUkMiIsICJEaWFnQVBJIiwgIl9sb2dQcm94eSIsICJzZWxmIiwgInNldExvZ2dlciIsICJvcHRpb25zT3JMb2dMZXZlbCIsICJvbGRMb2dnZXIiLCAibmV3TG9nZ2VyIiwgInN0YWNrIiwgIm9wdGlvbnMiLCAiY3JlYXRlQ29udGV4dEtleSIsICJkZXNjcmlwdGlvbiIsICJCYXNlQ29udGV4dCIsICJwYXJlbnRDb250ZXh0IiwgIlJPT1RfQ09OVEVYVCIsICJfX3JlYWQkMSIsICJfX3NwcmVhZEFycmF5JDEiLCAiTm9vcENvbnRleHRNYW5hZ2VyIiwgIl9jb250ZXh0IiwgInRoaXNBcmciLCAidGFyZ2V0IiwgIl9fcmVhZCIsICJfX3NwcmVhZEFycmF5IiwgIkFQSV9OQU1FJDEiLCAiTk9PUF9DT05URVhUX01BTkFHRVIiLCAiQ29udGV4dEFQSSIsICJjb250ZXh0TWFuYWdlciIsICJUcmFjZUZsYWdzIiwgIklOVkFMSURfU1BBTklEIiwgIklOVkFMSURfVFJBQ0VJRCIsICJJTlZBTElEX1NQQU5fQ09OVEVYVCIsICJOb25SZWNvcmRpbmdTcGFuIiwgIl9zcGFuQ29udGV4dCIsICJfa2V5IiwgIl9hdHRyaWJ1dGVzIiwgIl9uYW1lIiwgIl9saW5rIiwgIl9saW5rcyIsICJfc3RhdHVzIiwgIl9lbmRUaW1lIiwgIl9leGNlcHRpb24iLCAiX3RpbWUiLCAiU1BBTl9LRVkiLCAiZ2V0U3BhbiIsICJnZXRBY3RpdmVTcGFuIiwgInNldFNwYW4iLCAic3BhbiIsICJkZWxldGVTcGFuIiwgInNldFNwYW5Db250ZXh0IiwgInNwYW5Db250ZXh0IiwgImdldFNwYW5Db250ZXh0IiwgIlZBTElEX1RSQUNFSURfUkVHRVgiLCAiVkFMSURfU1BBTklEX1JFR0VYIiwgImlzVmFsaWRUcmFjZUlkIiwgInRyYWNlSWQiLCAiaXNWYWxpZFNwYW5JZCIsICJzcGFuSWQiLCAiaXNTcGFuQ29udGV4dFZhbGlkIiwgIndyYXBTcGFuQ29udGV4dCIsICJjb250ZXh0QXBpIiwgIk5vb3BUcmFjZXIiLCAibmFtZSIsICJyb290IiwgInBhcmVudEZyb21Db250ZXh0IiwgImlzU3BhbkNvbnRleHQiLCAiYXJnMiIsICJhcmczIiwgImFyZzQiLCAib3B0cyIsICJjdHgiLCAiY29udGV4dFdpdGhTcGFuU2V0IiwgIk5PT1BfVFJBQ0VSIiwgIlByb3h5VHJhY2VyIiwgIl9wcm92aWRlciIsICJ2ZXJzaW9uIiwgIl9vcHRpb25zIiwgIl9mbiIsICJ0cmFjZXIiLCAiTm9vcFRyYWNlclByb3ZpZGVyIiwgIl92ZXJzaW9uIiwgIk5PT1BfVFJBQ0VSX1BST1ZJREVSIiwgIlByb3h5VHJhY2VyUHJvdmlkZXIiLCAiZGVsZWdhdGUiLCAiU3BhbktpbmQiLCAiU3BhblN0YXR1c0NvZGUiLCAiQVBJX05BTUUiLCAiVHJhY2VBUEkiLCAicHJvdmlkZXIiLCAic3VjY2VzcyIsICJ0cmFjZSIsICJjcmVhdGVDREVTcGFuIiwgImNkZUNvbm4iLCAiZGF0YSIsICJvcGVyYXRpb24iLCAicmVzdWx0IiwgImNyZWF0ZVRyYWNraW5nU3BhbiIsICJDZGVFcnJvciIsICJDdXN0b21FcnJvciIsICJmcmllbmRseU1lc3NhZ2UiLCAicXVlcnlDREUiLCAicmVzcG9uc2VTY2hlbWEiLCAidHJhY2tpbmdLZXkiLCAiaXNDREVSZXNwb25zZUVycm9yIiwgImNvbm5lY3Rpb24iLCAiY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEiLCAic2NoZW1hIiwgIkNERVJlc3BvbnNlRXJyb3IiLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3IiwgInJlcXVlc3QiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiZ2V0UHJlZmlsbCIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAic3RhcnRQYXltZW50RmxvdyIsICJwYXlsb2FkIiwgIlN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJzdGFydFBheW1lbnRGbG93Rm9yQ0MiLCAiU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UiLCAic3RhcnRQYXltZW50Rmxvd0ZvclBSIiwgImNvbmZpcm1QYXltZW50RmxvdyIsICJDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZCIsICJTZXR1cENoZWNrb3V0UmVzcG9uc2UiLCAiY2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWQiLCAiQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSIsICJnZXRDaGVja291dFZhbHVlIiwgInNlY3VyZVRva2VuIiwgInByb21vQ29kZSIsICJjaGVja291dFByZXZpZXciLCAiY3VycmVuY2llcyIsICJpbnYiLCAiYW1vdW50QXRvbSIsICJzdW0iLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50IiwgImlzU2V0dXBNb2RlIiwgInRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMiLCAiYWxsQ2RlQ29ubmVjdGlvbnMiLCAiVG9rZW5pemVDYXJkUmVzcG9uc2UiLCAiY2hlY2tvdXRDYXJkRWxlbWVudHMiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAic2V0dXBDaGVja291dCIsICJwZXJmb3JtQ2hlY2tvdXQiLCAiQ0RFX1BPTExJTkdfSU5URVJWQUwiLCAicGluZ0NkZUZvclN0YXR1cyIsICJpZnJhbWUiLCAiY2hpbGRPcmlnaW4iLCAicmVzcG9uc2VNb2RlbCIsICJjb25uZWN0aW9uT2JqIiwgImNvbm5lY3RUb0NoaWxkIiwgInByZXBhcmVQYXltZW50RmxvdyIsICJQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSIsICJzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUiLCAiQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2UiLCAic2V0VXNlckRldmljZVRva2VuIiwgImRldmljZVRva2VuIiwgIlNldFVzZXJEZXZpY2VUb2tlblJlc3BvbnNlIiwgImNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QiLCAicGluZyIsICJpc1Jlc3VsdFZhbGlkIiwgImlzVmFsaWQiLCAiRlJBTUVfQkFTRV9VUkwiLCAiRU5DT0RJTkciLCAiRU5DT0RJTkdfTEVOIiwgIlJBTkRPTV9MRU4iLCAiVElNRV9MRU4iLCAiVElNRV9NQVgiLCAiVUxJREVycm9yQ29kZSIsICJVTElERXJyb3IiLCAiZXJyb3JDb2RlIiwgIm1lc3NhZ2UiLCAicmFuZG9tQ2hhciIsICJwcm5nIiwgInJhbmRvbVBvc2l0aW9uIiwgImRldGVjdFBSTkciLCAicm9vdExvb2t1cCIsICJkZXRlY3RSb290IiwgImdsb2JhbENyeXB0byIsICJidWZmZXIiLCAiaW5XZWJXb3JrZXIiLCAiZW5jb2RlUmFuZG9tIiwgImxlbiIsICJzdHIiLCAiZW5jb2RlVGltZSIsICJtb2QiLCAiY3VycmVudExlbiIsICJ1bGlkIiwgInNlZWRUaW1lIiwgImN1cnJlbnRQUk5HIiwgInNlZWQiLCAiQ09PS0lFX05BTUUiLCAiZ2V0RGV2aWNlVG9rZW4iLCAiZXhpc3RpbmdDb29raWUiLCAiY29va2llIiwgInRva2VuIiwgInNldERldmljZVRva2VuIiwgIm9uZVllYXJGcm9tTm93IiwgImV4dHJhY3RJc3N1ZXNQZXJGaWVsZCIsICJpc3N1ZXNQZXJGaWVsZCIsICJmaWVsZE5hbWUiLCAiRmllbGROYW1lRW51bSIsICJjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0iLCAiZm9ybURpdiIsICJpbml0aWFsRGljdCIsICJhY2MiLCAicGFyc2VFdmVudFBheWxvYWQiLCAiZXZlbnREYXRhIiwgIkVsZW1lbnRFdmVudCIsICJnZW5lcmF0ZUFub255bW91c1ZhbHVlcyIsICJnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyIsICJmaWVsZHMiLCAiRmllbGROYW1lIiwgImdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyIsICJjaGVja291dF9zZXR0aW5ncyIsICJnZXRGdWxsTmFtZSIsICJmaXJzdE5hbWUiLCAibGFzdE5hbWUiLCAic3R5bGVzIiwgIndpZHRoIiwgImhlaWdodCIsICJiYW5rU2VsZWN0b3JTdHlsZXMiLCAiY3JlYXRlQW5kT3BlbkZyYW1lIiwgInVybCIsICJ0aXRsZSIsICJ0ZW1wbGF0ZSIsICJob3N0IiwgInNoYWRvd1Jvb3QiLCAiY2FuY2VsQnV0dG9uIiwgImNyZWF0ZUFuZE9wZW5CYW5rU2VsZWN0b3IiLCAiYmFua3MiLCAiYmFua0xpc3RIdG1sIiwgImJhbmsiLCAibG9nb0h0bWwiLCAiYmFua0l0ZW1zIiwgImNsZWFudXAiLCAiY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0iLCAicGF5bWVudE1ldGhvZFR5cGUiLCAiZWxlbWVudHMiLCAiaGFuZGxlQ2FuY2VsIiwgIm9uU3VjY2VzcyIsICJwb2xsaW5nSW50ZXJ2YWwiLCAic3RhcnRQb2xsaW5nIiwgIk1pY3JvRGVwb3NpdFN0YXR1c1Jlc3BvbnNlIiwgImNsZWFudXBFdmVudExpc3RlbmVycyIsICJvcmlnaW5hbEhhbmRsZUNhbmNlbCIsICJ3cmFwcGVkSGFuZGxlQ2FuY2VsIiwgImhhbmRsZVBvbGxpbmciLCAic3RhdHVzIiwgImhhbmRsZUV2ZW50cyIsICJUaHJlZURTU3RhdHVzIiwgInN0YXJ0M2RzVmVyaWZpY2F0aW9uIiwgInBhcmFtcyIsICJmcmFtZVdpZHRoIiwgImZyYW1lSGVpZ2h0IiwgImZyYW1lVGl0bGUiLCAiUGluZzNEU1N0YXR1c1Jlc3BvbnNlIiwgInN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0IiwgIm9wZW5Qb3B1cFdpbmRvdyIsICJwb3B1cE5hbWUiLCAiZmVhdHVyZXMiLCAicG9wdXBXaW5kb3ciLCAic3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdCIsICJleHBlY3RlZFZlcmlmeVRva2VuIiwgImVycl9fIiwgInBvbGxpbmciLCAidmVyaWZ5UmVzdWx0IiwgImRldGVjdExhbmd1YWdlIiwgImxhbmd1YWdlIiwgImxvZ19fJHciLCAiZXJyX18kdyIsICJjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYSIsICJyZXF1aXJlX3ppcF9jb2RlIiwgInJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MiLCAicmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MiLCAicGF5bWVudF9tZXRob2QiLCAiaXNCdXNpbmVzc1B1cmNoYXNlIiwgIm5vbkNkZUZvcm1JbnB1dHMiLCAiY29uZGl0aW9uYWxGaWVsZHMiLCAiUmVxdWlyZWRTdHJpbmciLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgInZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyIsICJvblZhbGlkYXRpb25FcnJvciIsICJkZWZhdWx0RmllbGRWYWx1ZXMiLCAia2V5cyIsICJmb3JtYXR0ZWQiLCAiaXNzdWVzIiwgImlzc3VlS2V5cyIsICJsb2dfXyR2IiwgImVycl9fJHYiLCAidmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MiLCAidmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzIiwgInRva2VuaXplUmVzdWx0cyIsICJ0b2tlbml6ZVJlc3VsdCIsICJwYXJzZWQiLCAiQWxsRmllbGROYW1lcyIsICJlcnJfXyR1IiwgInBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiZmluZENwbU1hdGNoaW5nVHlwZSIsICJhbGxDUE1zIiwgInpvZE1vZGVsIiwgImNwbSIsICJjcG0yIiwgImNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0iLCAicGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCIsICJsb2dfXzIiLCAicHJlZmlsbCIsICJjcmVhdGVkUGF5bWVudE1ldGhvZCIsICJjaGVja291dFJlcXVlc3QiLCAiUGF5bWVudFByb2Nlc3NvciIsICJsb2FkU2NyaXB0IiwgInNjcmlwdElkIiwgInNyYyIsICJjaGVja0xvYWRlZEZuIiwgImV2ZW50TGlzdGVuZXJDb250cm9sbGVyIiwgInNjcmlwdCIsICJleGlzdGluZ1NjcmlwdCIsICJnZXRQYXltZW50RGF0YVJlcXVlc3QiLCAiZ2F0ZXdheSIsICJnYXRld2F5TWVyY2hhbnRJZCIsICJtZXJjaGFudE5hbWUiLCAibWVyY2hhbnRJZCIsICJpbml0aWFsUHJldmlldyIsICJvdmVycmlkZVBheW1lbnRSZXF1ZXN0IiwgInRvdGFsUHJpY2UiLCAiY3VycmVuY3lDb2RlIiwgImJhc2VSZXF1ZXN0IiwgImxvYWRHb29nbGVQYXlTY3JpcHQiLCAicGF5bWVudHNDbGllbnQiLCAiZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQiLCAiZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQiLCAicGF5bWVudERhdGFSZXF1ZXN0IiwgImVudmlyb25tZW50IiwgInBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgImNvbW1vbkFjdGlvbiIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhHb29nbGVQYXkiLCAiZm9ybUlucHV0cyIsICJwYXltZW50RGF0YSIsICJpbnB1dHMiLCAiYmlsbGluZ0FkZHJlc3MiLCAic2hpcHBpbmdBZGRyZXNzIiwgInBheWVyRmlyc3ROYW1lIiwgImxhc3ROYW1lUGFydHMiLCAicGF5ZXJMYXN0TmFtZSIsICJsb2dfXyR1IiwgImVycl9fJHQiLCAicnVuQWlyd2FsbGV4QkFDU0Zsb3ciLCAiYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMiLCAiY2hlY2tvdXRQYXltZW50TWV0aG9kIiwgImZvcm1DYWxsYmFja3MiLCAiY3VzdG9tUGFyYW1zIiwgIm5vbkNkZUZvcm1GaWVsZHMiLCAiYW55Q2RlQ29ubmVjdGlvbiIsICJ2ZXJpZmljYXRpb25NZXRob2QiLCAibWljcm9EZXBvc2l0RGF0YSIsICJzdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAic3RhcnRGbG93TmV4dEFjdGlvbnMiLCAiY29uc2VudElkIiwgImF2YWlsYWJsZUJhbmtzIiwgInNlbGVjdGVkQmFuayIsICJkaXJlY3REZWJpdERhdGEiLCAicmVkaXJlY3RVcmwiLCAibmV3Q29uZmlybVJlc3VsdCIsICJsb2dfXyR0IiwgImVycl9fJHMiLCAicnVuQWlyd2FsbGV4RUZURmxvdyIsICJsb2dfXyRzIiwgImVycl9fJHIiLCAicnVuQWlyd2FsbGV4U0VQQUZsb3ciLCAibG9nX18kciIsICJlcnJfXyRxIiwgIkFpcndhbGxleDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzcG9uc2VIZWFkZXJzJDMiLCAiZXJyb3JSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXN1bHQiLCAiZnJpZW5kbHlFcnIiLCAiZGV2RXJyIiwgImNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyIsICJwYXJzZUludGVudElkRnJvbTNkc0hyZWYiLCAiaHJlZiIsICJpbnRlbnRJZCIsICJydW5BaXJ3YWxsZXgzZHNGbG93IiwgImhlYWRlcnMiLCAiaW5pdGlhbEludGVudElkIiwgIkFwcGxlUGF5Q3BtJDIiLCAiR29vZ2xlUGF5Q3BtJDIiLCAibG9hZEFwcGxlUGF5U2NyaXB0IiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkiLCAiYXBwbGVQYXlQYXltZW50IiwgInBtQmlsbGluZ0NvbnRhY3QiLCAiYmlsbGluZ0NvbnRhY3QiLCAic2hpcHBpbmdDb250YWN0IiwgImNyZWF0ZVJlY3VycmluZ1BheW1lbnRSZXF1ZXN0IiwgInRvdGFsIiwgImxpbmVJdGVtIiwgImFwcGxlSW50ZXJ2YWxVbml0IiwgImFwcGxlSW50ZXJ2YWxDb3VudCIsICJjcmVhdGVBcHBsZVBheVRvdGFsIiwgImRlZmF1bHRMYWJlbCIsICJhbW91bnQiLCAiZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCIsICJBZHllbkVudmlyb25tZW50IiwgIkFkeWVuTG9jYWxlIiwgImxvZ19fJHEiLCAiZXJyX18kcCIsICJBZHllbjNkc1Jlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyQyIiwgImRlY29kZUFkeWVuQWN0aW9uIiwgImlzQWR5ZW5BdmFpbGFibGUiLCAiZ2V0QWR5ZW5DaGVja291dCIsICJoYW5kbGVBZHllbjNkcyIsICJsb2NhbGUiLCAiY291bnRyeUNvZGUiLCAiY29tcG9uZW50IiwgIm9uQ2FuY2VsIiwgIm9uUGF5bWVudEZhaWxlZCIsICJvbkFkZGl0aW9uYWxEZXRhaWxzIiwgIl8iLCAiX18iLCAiYWR5ZW5DaGVja291dCIsICJjaGVja291dCIsICJkZXRlcm1pbmVMb2NhbGUiLCAicHJlZmlsbExvY2FsZSIsICJicm93c2VyTG9jYWxlIiwgImNoZWNrSWZSZXF1aXJlc0FkeWVuM2RzIiwgInJ1bkFkeWVuM2RzRmxvdyIsICJBcHBsZVBheUNwbSQxIiwgIkdvb2dsZVBheUNwbSQxIiwgImxvZ19fJHAiLCAiaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQyIiwgInBheW1lbnRTZXNzaW9uUmVzcG9uc2UiLCAiaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMiIsICJnZXRGcmF1ZE1ldGFkYXRhIiwgImxvZ19fJG8iLCAiZXJyX18kbyIsICJpbml0QWR5ZW5BcHBsZVBheUZsb3ciLCAiYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCIsICJ1bmF2YWlsYWJsZVJlc3VsdCIsICJhcHBsZVBheUNwbSIsICJvbkFwcGxlUGF5U3RhcnRGbG93IiwgIk9qc0Zsb3dzIiwgInJ1bkFkeWVuQXBwbGVQYXlGbG93IiwgInNlc3Npb24iLCAic2Vzc2lvbkNvbnRleHQiLCAiaW5pdGlhbFByZXZpZXcyIiwgInVwZGF0ZSIsICJsb2dfXyRuIiwgImVycl9fJG4iLCAiaW5pdEFkeWVuR29vZ2xlUGF5RmxvdyIsICJnb29nbGVQYXlDcG0iLCAicHJvY2Vzc29yQWNjb3VudCIsICJjbGllbnQiLCAiaXNSZWFkeVRvUGF5IiwgIm9uR29vZ2xlUGF5U3RhcnRGbG93IiwgInJ1bkFkeWVuR29vZ2xlUGF5RmxvdyIsICJtZXJnZWRJbnB1dHMiLCAib3VyUG1JZCIsICJsb2dfXyRtIiwgImVycl9fJG0iLCAicnVuQWlyd2FsbGV4QUNIRmxvdyIsICJsb2dfXyRsIiwgImhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMSIsICJoYW5kbGUzRFMiLCAiaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMSIsICJsb2dfXyRrIiwgImVycl9fJGwiLCAiaW5pdEFpcndhbGxleEFwcGxlUGF5RmxvdyIsICJydW5BaXJ3YWxsZXhBcHBsZVBheUZsb3ciLCAibG9nX18kaiIsICJlcnJfXyRrIiwgImluaXRBaXJ3YWxsZXhHb29nbGVQYXlGbG93IiwgInJ1bkFpcndhbGxleEdvb2dsZVBheUZsb3ciLCAiZW5jcnlwdGVkUGF5bWVudFRva2VuIiwgImxvZ19fJGkiLCAiZXJyX18kaiIsICJBaXJ3YWxsZXhLbGFybmFDcG0iLCAiaW5pdEFpcndhbGxleEtsYXJuYUZsb3ciLCAia2xhcm5hQ3BtIiwgInJ1bkFpcndhbGxleEtsYXJuYUZsb3ciLCAiaXNBbm9ueW1vdXMiLCAibmV3Q3VzdG9tZXJGaWVsZHMiLCAiQXBwbGVQYXlDcG0iLCAiR29vZ2xlUGF5Q3BtIiwgImhhbmRsZVZhbGlkYXRlTWVyY2hhbnQiLCAiaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQiLCAibW9iaWxlV2FsbGV0UGF5bWVudERhdGEiLCAibG9nX18kaCIsICJlcnJfXyRpIiwgImluaXRBdXRobmV0QXBwbGVQYXlGbG93IiwgInJ1bkF1dGhuZXRBcHBsZVBheUZsb3ciLCAibG9nX18kZyIsICJlcnJfXyRoIiwgImluaXRBdXRobmV0R29vZ2xlUGF5RmxvdyIsICJydW5BdXRobmV0R29vZ2xlUGF5RmxvdyIsICJzY3JlZW5faGVpZ2h0IiwgInNjcmVlbl93aWR0aCIsICJjb2xvcl9kZXB0aCIsICJqYXZhX2VuYWJsZWQiLCAidXNlcl9hZ2VudCIsICJhY2NlcHRfaGVhZGVyIiwgInRpbWVfem9uZV9vZmZzZXQiLCAibG9nX18kZiIsICJlcnJfXyRnIiwgImF0dGFjaERldmljZURhdGFDb2xsZWN0b3IiLCAicG9zdFVybCIsICJhY2Nlc3NUb2tlbiIsICJmb3JtIiwgInJ1bkRldmljZURhdGFDb2xsZWN0aW9uIiwgImV4cGVjdGVkT3JpZ2luIiwgImRldGFjaCIsICJoYW5kbGVDb2xsZWN0aW9uRXZlbnQiLCAicnVuUGF5ZXJBdXRoIiwgInN0ZXBVcFVybCIsICJtZXJjaGFudERhdGEiLCAidG9rZW5JbnB1dCIsICJtZElucHV0IiwgImxvZ19fJGUiLCAiZXJyX18kZiIsICJDeWJlcnNvdXJjZUFjdGlvblBheWxvYWQiLCAibnVsbE9yVW5kZWZPciQxIiwgIkZSSUVORExZX0VSUiIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyQxIiwgInVzZXJBY3Rpb24iLCAiY2hlY2tJZlJlcXVpcmVzQ3liZXJzb3VyY2UzZHMiLCAiaGFuZGxlQ3liZXJzb3VyY2UzZHMiLCAiY2xlYW51cFBvbGxpbmciLCAicnVuQ3liZXJzb3VyY2UzZHNGbG93IiwgInN0ZXBfdXBfdXJsIiwgImFjY2Vzc190b2tlbiIsICJkZF91cmwiLCAiZGRfdG9rZW4iLCAibWVyY2hhbnRfZGF0YSIsICJjb2xsZWN0aW9uUmVzdWx0IiwgImxvZ19fJGQiLCAiZXJyX18kZSIsICJQb2NreXQzZHNFcnJvclJlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyIsICJwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZiIsICJ2YXVsdElkIiwgInBhcnNlQXJnRnJvbUhyZWYiLCAiYXJnTmFtZSIsICJjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMiLCAicnVuUG9ja3l0M2RzRmxvdyIsICJzdHJpcGVMb2dfXyIsICJTdHJpcGUzRFNNZXRhZGF0YVBheWxvYWQiLCAic3RyaXBlQ0MzRFNGbG93IiwgInBhcnNlVXNlckZFUGF5bG9hZCIsICJidWlsZFN0cmlwZUJucGxSZXR1cm5VcmwiLCAiY2hlY2tvdXRBdHRlbXB0SWQiLCAicmV0dXJuVXJsIiwgIkJOUExfUE9QVVBfUkVTRVJWQVRJT05fVElNRU9VVF9NUyIsICJCTlBMX1BPUFVQX1dJTkRPV19PUFRJT05TIiwgImFjdGl2ZUJucGxQb3B1cCIsICJjbG9zZVN0cmlwZUJucGxQb3B1cCIsICJwb3B1cCIsICJhYm9ydFN0cmlwZUJucGxQb3B1cEZsb3ciLCAiYWN0aXZlU3RyaXBlQm5wbEZsb3ciLCAiY3JlYXRlU3RyaXBlQm5wbEZsb3dDb250cm9sbGVyIiwgInJ1biIsICJvd25lciIsICJhYm9ydEFjdGl2ZUZsb3ciLCAiY3VycmVudEZsb3ciLCAidGhyb3dJZlN0cmlwZUJucGxGbG93QWJvcnRlZCIsICJhYm9ydFNpZ25hbCIsICJTVFJJUEVfQk5QTF9QT1BVUF9CTE9DS0VEX0VSUk9SIiwgInJlc2VydmVTdHJpcGVCbnBsUG9wdXAiLCAicG9wdXBIYW5kbGUiLCAid2l0aFJlc2VydmVkU3RyaXBlQm5wbFBvcHVwIiwgInVzZVJlZGlyZWN0RmxvdyIsICJjbGFpbVJlc2VydmVkU3RyaXBlQm5wbFBvcHVwIiwgIkJOUExfUE9QVVBfUE9MTF9JTlRFUlZBTF9NUyIsICJCTlBMX1BPUFVQX1BPTExfTElNSVQiLCAiQk5QTF9QT1BVUF9QT0xMU19BRlRFUl9DTE9TRSIsICJCTlBMX0ZBSUxFRF9TVEFUVVNFUyIsICJCTlBMX0FVVEhPUklaRURfU1RBVFVTRVMiLCAid2FpdEZvclN0cmlwZUJucGxQb3B1cFBvbGwiLCAic2lnbmFsIiwgIm9uQWJvcnQiLCAid2FpdEZvclN0cmlwZUJucGxQb3B1cCIsICJjbGllbnRTZWNyZXQiLCAicG9sbHNBZnRlckNsb3NlIiwgInBvbGwiLCAicGF5bWVudEludGVudCIsICJCTlBMX0NPTkZJUk1fUkVUUllfTElNSVQiLCAiY29uZmlybVN0cmlwZUJucGxQYXltZW50RmxvdyIsICJwb3B1cFJlcXVlc3QiLCAiYXR0ZW1wdCIsICJNQVhfQ09ORklSTV9MT09QX0lURVJBVElPTlMiLCAibG9nX18kYyIsICJlcnJfXyRkIiwgInVuc2FmZWx5UnVuVW5pZmllZENjRmxvdyIsICJjb21tb25DaGVja291dFBhcmFtcyIsICJ0b2tlbml6ZUNhcmRSZXN1bHRzIiwgInN0YXJ0UGZSZXN1bHQiLCAicmV0dXJuU3VjY2Vzc1Jlc3VsdCIsICJydW5Db25maXJtTG9vcCIsICJwZlJlc3VsdCIsICJ2YWxpZGF0ZVBmUmVzdWx0VXNlckFjdGlvbiIsICJ1c2VyQWN0aW9uUmVzdWx0IiwgInJ1blJlcXVpcmVkVXNlckFjdGlvbiIsICJjaGVja0lmTGVnYWN5M0RTUGF0aCIsICJjb21tb25DQzNEU0Zsb3ciLCAicGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiVXNlckFjdGlvbkZFUGF5bG9hZCIsICJwcmVmaWxsTW9kZSIsICJwYXltZW50TWV0aG9kSWQiLCAibG9nX18kYiIsICJlcnJfXyRjIiwgInJ1bkNvbW1vbkNjRmxvdyIsICJ1bmlmaWVkQ0NSb2xsb3V0UmF0aW8iLCAicm9sbCIsICJ1c2VVbmlmaWVkQ0NGbG93IiwgInVjY1JvbGxUcmFja2luZ01ldGFkYXRhIiwgImVyckhlYWRlcnMiLCAicmVxdWlyZXNQb2NreXQzZHMiLCAicG9ja3l0TWV0YWRhdGFGb3JDaGVja291dCIsICJhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0IiwgImFkeWVuTWV0YWRhdGFGb3JDaGVja291dCIsICJjeWJlcnNvdXJjZUFjdGlvbiIsICJjeWJlcnNvdXJjZUFjdGlvblBheWxvYWQiLCAiY3liZXJzb3VyY2VNZXRhZGF0YUZvckNoZWNrb3V0IiwgInNob3VsZFVzZVN0cmlwZUZsb3ciLCAicGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiY2NQbUlkIiwgInN0cmlwZUFjdGlvbiIsICJjb21tb24zRFNBY3Rpb25UeXBlcyIsICJyZXF1aXJlZF91c2VyX2FjdGlvbnMiLCAiQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIkxvb3BDcnlwdG9DcG0iLCAibG9nX18kYSIsICJlcnJfXyRiIiwgImluaXRMb29wRmxvdyIsICJwcmVGbG93TmV4dEFjdGlvbk1ldGFkYXRhIiwgInBheW1lbnRTZXR1cEluZm8iLCAic3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCIsICJtaW5BdXRob3JpemF0aW9uVXNkQW1vdW50IiwgImFsbG93Q3VzdG9tZXJUb0Nob29zZUF1dGgiLCAiY2hhcmdlQW1vdW50VXNkQXRvbSIsICJwYXltZW50VXNkQW1vdW50IiwgImN1c3RvbWVyUmVmSWQiLCAid2lkZ2V0UHJvcHMiLCAiaW5pdExvb3BDb25uZWN0UHJvcHMiLCAicnVuTG9vcEZsb3ciLCAiaXNDaGVja291dE1vZGUiLCAiY3VzdG9tZXJGaWVsZHMiLCAibG9nX18kOSIsICJlcnJfXyRhIiwgIlBheXBhbENwbSIsICJpbml0UGF5cGFsRmxvdyIsICJwYXlwYWxDcG0iLCAicnVuUGF5cGFsRmxvdyIsICJmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93IiwgImlzUGF5Rmlyc3RGbG93IiwgInN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0IiwgInByZUFjdGlvblVybCIsICJlbmNvZGVkUmVxdWVzdCIsICJzZWFyY2hQYXJhbXMiLCAicGF5cGFsRmxvd1Jlc3VsdCIsICJhcHByb3ZhbFNlc3Npb25JZCIsICJsb2dfXyQ4IiwgImVycl9fJDkiLCAiUG9ja3l0UGF5cGFsQ3BtIiwgImluaXRQb2NreXRQYXlwYWxGbG93IiwgInBvY2t5dFBheXBhbENwbSIsICJydW5Qb2NreXRQYXlwYWxGbG93IiwgInNldHRpbmdzIiwgImxvZ19fJDciLCAiZXJyX18kOCIsICJTdHJpcGVBZmZpcm1DcG0iLCAiU3RyaXBlQWZmaXJtUmVxdWlyZWRVc2VyQWN0aW9ucyIsICJpbml0U3RyaXBlQWZmaXJtRmxvdyIsICJzdHJpcGVBZmZpcm1DcG0iLCAic3RhcnRGbG93IiwgImFib3J0RmxvdyIsICJydW5TdHJpcGVBZmZpcm1GbG93IiwgImZsb3dBYm9ydFNpZ25hbCIsICJ1c2VQb3B1cCIsICJjYXJ0SW5mbyIsICJjbGllbnRfc2VjcmV0IiwgImN1c3RvbWVyTmFtZSIsICJhZmZpcm1QYXltZW50RGF0YSIsICJhZmZpcm1PcHRpb25zIiwgInRoZWlyUGF5bWVudE1ldGhvZCIsICJsb2dfXyQ2IiwgImVycl9fJDciLCAiU3RyaXBlQWZ0ZXJwYXlDcG0iLCAiU3RyaXBlQWZ0ZXJwYXlSZXF1aXJlZFVzZXJBY3Rpb25zIiwgImluaXRTdHJpcGVBZnRlcnBheUZsb3ciLCAic3RyaXBlQWZ0ZXJwYXlDcG0iLCAicnVuU3RyaXBlQWZ0ZXJwYXlGbG93IiwgImFmdGVycGF5UGF5bWVudERhdGEiLCAiYWZ0ZXJwYXlPcHRpb25zIiwgImNvbmZpcm1hdGlvblJlc3VsdCIsICJsb2dfXyQ1IiwgImVycl9fJDYiLCAiU3RyaXBlS2xhcm5hQ3BtIiwgIlN0cmlwZUtsYXJuYVJlcXVpcmVkVXNlckFjdGlvbnMiLCAiaW5pdFN0cmlwZUtsYXJuYUZsb3ciLCAic3RyaXBlS2xhcm5hQ3BtIiwgInJ1blN0cmlwZUtsYXJuYUZsb3ciLCAia2xhcm5hUGF5bWVudERhdGEiLCAia2xhcm5hT3B0aW9ucyIsICJPSlNfU1RSSVBFX0xJTktfQlROX0lEIiwgImxvZ19fJDQiLCAiZXJyX18kNSIsICJTdHJpcGVMaW5rQ3BtIiwgIlN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zIiwgImluaXRTdHJpcGVMaW5rRmxvdyIsICJpbml0UGFyYW1zIiwgInN0cmlwZUxpbmtDcG0iLCAibGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudCIsICJleHByZXNzQ2hlY2tvdXRFbGVtZW50IiwgInJlbmRlckxpbmtBdXRoZW50aWNhdGlvbkVsZW1lbnQiLCAic2VsZWN0b3IiLCAic2lsZW50IiwgInBhcmVudENvbnRhaW5lciIsICJjb250YWluZXIiLCAiaXNBdXRoZW50aWNhdGVkIiwgImlzTGlua0F1dGhSZWFkeSIsICJpc1Bvc3NpYmxlQXV0aGVudGljYXRlZCIsICJtb3VudEJ1dHRvbiIsICJkaXNtb3VudEJ1dHRvbiIsICJnZXRFbGVtZW50QnlJZEFzeW5jIiwgInJ1blN0cmlwZUxpbmtGbG93IiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0iLCAib3VyRXhpc3RpbmdQbUlkIiwgInBheWVyTGFzdE5hbWVQYXJ0cyIsICJnZXRFbGVtZW50IiwgImVsZW1lbnQiLCAibG9nX18kMyIsICJlcnJfXyQ0IiwgIlN0cmlwZVByQ3BtIiwgImluaXRTdHJpcGVQckZsb3ciLCAicHIiLCAiY2FuTWFrZVBheW1lbnQiLCAicnVuU3RyaXBlUHJGbG93MiIsICJmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0IiwgInJ1blN0cmlwZVByRmxvdyQxIiwgImluaXRSZXN1bHQiLCAib3ZlcnJpZGUiLCAiYXBwbGVQYXlQYXltZW50UmVxdWVzdCIsICJuZWVkc0ZyZXNoUHJldmlldyIsICJmcmVzaFByZXZpZXciLCAibWVyZ2VkQW1vdW50IiwgInVwZGF0ZVByV2l0aEFtb3VudCIsICJzdHJpcGVQbUFkZGVkRXZlbnQiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQbSIsICJwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZVBtRXZ0IiwgImlzUGVuZGluZyIsICJzdHJpcGVBcHBsZVBheSIsICJsYWJlbCIsICJjcG1zIiwgIndpdGhQcm92aWRlciIsICJ3aXRoUHJvY2Vzc29yIiwgIm1hdGNoZXMiLCAibWF0Y2hlc1Byb2Nlc3NvciIsICJtYXRjaGVzUHJvdmlkZXIiLCAibG9nX18kMiIsICJlcnJfXyQzIiwgImNyZWF0ZUluaXRGbG93UHVibGlzaGVyIiwgImZsb3dOYW1lIiwgImluaXRGbG93IiwgInB1Ymxpc2hlciIsICJzdGFydEFsbEluaXRGbG93cyIsICJmbG93cyIsICJmbG93IiwgImNyZWF0ZUluaXRGbG93c1B1Ymxpc2hlcnMiLCAiZXJyX18kMiIsICJPcHRpb25hbEZuIiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgIkZvcm1DYWxsYmFja3MiLCAiZGV0ZWN0RnJhbWV3b3JrIiwgIndpbmRvdyIsICJuZXh0V2luZG93IiwgIm5vZGUiLCAidnVlV2luZG93IiwgImdldEZyYW1ld29ya1ZlcnNpb24iLCAiZnJhbWV3b3JrIiwgIm5nVmVyc2lvbkVsIiwgImdldEZyYW1ld29ya0luZm8iLCAiU3VibWl0TWV0aG9kcyIsICJTdWJtaXRNZXRob2RzMiIsICJQYXltZW50UHJvdmlkZXJUeXBlIiwgIlBheW1lbnRQcm92aWRlclR5cGUyIiwgImdldEFwcGxlUGF5UHJvY2Vzc29ycyIsICJpbml0Rmxvd3MiLCAiYXBwbGVQYXlJbml0Rmxvd3MiLCAiYXBwbGVQYXlJbml0UmVzdWx0cyIsICJmbG93VmFsdWUiLCAic3RyaXBlUFJGbG93UmVzdWx0IiwgInN0YXJ0QXBwbGVQYXlGbG93IiwgImdldEdvb2dsZVBheVByb2Nlc3NvcnMiLCAiZ29vZ2xlUGF5SW5pdEZsb3dzIiwgImdvb2dsZVBheUluaXRSZXN1bHRzIiwgInN0YXJ0R29vZ2xlUGF5RmxvdyIsICJpbml0UmVzdWx0cyIsICJhdmFpbGFibGVGbG93IiwgImdldEtsYXJuYVByb2Nlc3NvcnMiLCAia2xhcm5hSW5pdFJlc3VsdHMiLCAiYWlyd2FsbGV4S2xhcm5hRmxvd1Jlc3VsdCIsICJzdHJpcGVLbGFybmFGbG93UmVzdWx0IiwgInN0YXJ0S2xhcm5hRmxvdyIsICJnZXRBZmZpcm1Qcm9jZXNzb3JzIiwgImFmZmlybUluaXRSZXN1bHRzIiwgInN0cmlwZUFmZmlybUZsb3dSZXN1bHQiLCAic3RhcnRBZmZpcm1GbG93IiwgImdldEFmdGVycGF5UHJvY2Vzc29ycyIsICJhZnRlcnBheUluaXRSZXN1bHRzIiwgInN0cmlwZUFmdGVycGF5Rmxvd1Jlc3VsdCIsICJzdGFydEFmdGVycGF5RmxvdyIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJsb2dfXyQxIiwgImVycl9fJDEiLCAiaW5pdFRyYWNlclNhZmUiLCAiaW5pdFRyYWNlclVuc2FmZSIsICJnbG9iYWxUcmFjZXIiLCAic2RrVHJhY2VXZWIiLCAiQ29uc29sZVNwYW5FeHBvcnRlciIsICJTaW1wbGVTcGFuUHJvY2Vzc29yIiwgIldlYlRyYWNlclByb3ZpZGVyIiwgImluc3RydW1lbnRhdGlvbkZldGNoIiwgIkZldGNoSW5zdHJ1bWVudGF0aW9uIiwgImNvbnRleHRab25lIiwgIlpvbmVDb250ZXh0TWFuYWdlciIsICJpbnN0cnVtZW50YXRpb24iLCAicmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zIiwgInJlc291cmNlcyIsICJSZXNvdXJjZSIsICJkZXRlY3RSZXNvdXJjZXMiLCAiZGV0ZWN0UmVzb3VyY2VzU3luYyIsICJleHBvcnRlclRyYWNlT3RscCIsICJPVExQVHJhY2VFeHBvcnRlciIsICJwcm9wYWdhdG9yQjMiLCAiQjNQcm9wYWdhdG9yIiwgIkIzSW5qZWN0RW5jb2RpbmciLCAic2RrVHJhY2VCYXNlIiwgIkJhdGNoU3BhblByb2Nlc3NvciIsICJjb2xsZWN0b3JVcmwiLCAiZ2V0Q29sbGVjdG9yVXJsIiwgImV4cG9ydGVyIiwgImJhc2VBdHRycyIsICJmcm9tQmFzZVVybCIsICJiYXNlSG9zdG5hbWUiLCAiT3BlblBheUZvcm1FdmVudEhhbmRsZXIiLCAiZm9ybUlkIiwgImludGVybmFsQ2FsbGJhY2tzIiwgImdldENsZWFuT3JpZ2luIiwgImVsZW1lbnRJZCIsICJldmVudFR5cGUiLCAiY3JlYXRlQ29ubmVjdGlvbiIsICJpc1ZhbGlkT2JqZWN0IiwgIkNvbm5lY3Rpb25NYW5hZ2VyIiwgInNldHVwUGF5bWVudFJlcXVlc3RIYW5kbGVycyIsICJpbml0UHJGbG93cyIsICJjYWxsYmFja3MiLCAic3RyaXBlUFIiLCAiY2FuQXBwbGVQYXkiLCAiY2FuR29vZ2xlUGF5IiwgImZpbmFsU3RhdHVzIiwgInVzZXJQYXJhbXMiLCAicnVuU3RyaXBlUHJGbG93IiwgIkdFTkVSSUNfQ09OTl9FUlIiLCAibG9nX18iLCAiX09wZW5QYXlGb3JtIiwgImNkZUJyaWRnZUlmcmFtZSIsICJFbGVtZW50VHlwZUVudW0iLCAiY2RlTG9hZGVkIiwgImNkZUNvbm5TcGFuIiwgImFueUNkZUNvbm4iLCAib2pzQ29udGV4dCIsICJlbGVtZW50VHlwZSIsICJfRWxlbWVudFR5cGVFbnVtWm9kIiwgImZyYW1lIiwgInF1ZXJ5U3RyaW5nIiwgImNvbm4iLCAiY29udGV4dDIiLCAiYXBwbGVQYXlQcm9jZXNzb3JzIiwgImlzQXBwbGVQYXlBdmFpbGFibGUiLCAiZ29vZ2xlUGF5UHJvY2Vzc29ycyIsICJpc0dvb2dsZVBheUF2YWlsYWJsZSIsICJwYXlwYWxBdmFpbGFibGUiLCAia2xhcm5hUHJvY2Vzc29ycyIsICJpc0tsYXJuYUF2YWlsYWJsZSIsICJhZmZpcm1Qcm9jZXNzb3JzIiwgImlzQWZmaXJtQXZhaWxhYmxlIiwgImFmdGVycGF5UHJvY2Vzc29ycyIsICJpc0FmdGVycGF5QXZhaWxhYmxlIiwgInBvY2t5dFBheXBhbEF2YWlsYWJsZSIsICJtZXRob2QiLCAibG9vcENyeXB0b0F2YWlsYWJsZSIsICJzdHJpcGVMaW5rRmxvd1Jlc3VsdCIsICJzdHJpcGVMaW5rQXZhaWxhYmxlIiwgIm1ldGhvZHMiLCAiaW5pdEZsb3dOYW1lTWFwIiwgImZsb3dSZXN1bHQiLCAiaXNTdHJpcGVCbnBsUmVkaXJlY3QiLCAic3VibWlzc2lvbklkIiwgImFpcndhbGxleEdvb2dsZVBheSIsICJhaXJ3YWxsZXhBcHBsZVBheSIsICJhdXRob3JpemVOZXRHb29nbGVQYXkiLCAiYXV0aG9yaXplTmV0QXBwbGVQYXkiLCAiYWR5ZW5Hb29nbGVQYXkiLCAiYWR5ZW5BcHBsZVBheSIsICJibnBsU2V0dGluZ3MiLCAibmV3Q2FsbGJhY2tzIiwgIm1ldHJpY3NDb250ZXh0IiwgImNhbGxlciIsICJjdXJyZW50SW5zdGFuY2UiLCAiZGVidWdJbmZvIiwgImNkZUxvYWRlZFBheWxvYWQiLCAiT3BlblBheUZvcm0iXQp9Cg==