@milkio/stargate 1.0.0-beta.184 → 1.0.0-beta.185

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/index.d.ts +5 -0
  2. package/index.js +13 -2
  3. package/package.json +1 -1
package/index.d.ts CHANGED
@@ -48,6 +48,11 @@ export declare function createStargate<Generated extends {
48
48
  ping(options?: {
49
49
  timeout?: number;
50
50
  }): Promise<Ping>;
51
+ types: {
52
+ error<Path extends keyof Generated["routeSchema"]>(path: Path): Generated["rejectCode"];
53
+ params<Path extends keyof Generated["routeSchema"]>(path: Path): Generated["routeSchema"][Path]["types"]["params"];
54
+ results<Path extends keyof Generated["routeSchema"]>(path: Path): Generated["routeSchema"][Path]["types"]["\uD83E\uDD5B"] extends boolean ? Generated["routeSchema"][Path]["types"]["result"] : AsyncGenerator<[Partial<Generated["rejectCode"]>, null] | [null, GeneratorGeneric<Generated["routeSchema"][Path]["types"]["result"]>], undefined>;
55
+ };
51
56
  on: <Key extends keyof {
52
57
  "milkio:executeBefore": {
53
58
  path: string;
package/index.js CHANGED
@@ -358,6 +358,17 @@ async function createStargate(stargateOptions) {
358
358
  return [{ connect: false, delay: endsTime - startsTime, error }, null];
359
359
  }
360
360
  });
361
+ },
362
+ types: {
363
+ error(path) {
364
+ throw new Error("This method is used to retrieve types and cannot be actually executed.");
365
+ },
366
+ params(path) {
367
+ throw new Error("This method is used to retrieve types and cannot be actually executed.");
368
+ },
369
+ results(path) {
370
+ throw new Error("This method is used to retrieve types and cannot be actually executed.");
371
+ }
361
372
  }
362
373
  };
363
374
  return stargate;
@@ -491,5 +502,5 @@ export {
491
502
  createStargate
492
503
  };
493
504
 
494
- //# debugId=734283B03E0FA0BD64756E2164756E21
495
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi5cXGluZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImV4cG9ydCB0eXBlIE1pbGtpb1N0YXJnYXRlT3B0aW9ucyA9IHtcclxuICAgIGJhc2VVcmw6IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpIHwgKCgpID0+IFByb21pc2U8c3RyaW5nPik7XHJcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xyXG4gICAgZmV0Y2g/OiB0eXBlb2YgZmV0Y2g7XHJcbiAgICBhYm9ydD86IHR5cGVvZiBBYm9ydENvbnRyb2xsZXI7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBNaXhpbjxULCBVPiA9IFUgJiBPbWl0PFQsIGtleW9mIFU+O1xyXG5cclxuZXhwb3J0IHR5cGUgRXhlY3V0ZU9wdGlvbnMgPSB7XHJcbiAgICBwYXJhbXM/OiBSZWNvcmQ8YW55LCBhbnk+O1xyXG4gICAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XHJcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xyXG4gICAgYmFzZVVybD86IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpIHwgKCgpID0+IFByb21pc2U8c3RyaW5nPik7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBFeGVjdXRlUmVzdWx0c09wdGlvbiA9IHsgZXhlY3V0ZUlkOiBzdHJpbmcgfTtcclxuXHJcbmV4cG9ydCB0eXBlIFBpbmcgPVxyXG4gICAgfCBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25uZWN0OiBmYWxzZTtcclxuICAgICAgICAgICAgZGVsYXk6IG51bWJlcjtcclxuICAgICAgICAgICAgZXJyb3I6IGFueTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG51bGwsXHJcbiAgICBdXHJcbiAgICB8IFtcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29ubmVjdDogdHJ1ZTtcclxuICAgICAgICAgICAgZGVsYXk6IG51bWJlcjtcclxuICAgICAgICAgICAgc2VydmVyVGltZXN0YW1wOiBudW1iZXI7XHJcbiAgICAgICAgfSxcclxuICAgIF07XHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTdGFyZ2F0ZTxHZW5lcmF0ZWQgZXh0ZW5kcyB7IHJvdXRlU2NoZW1hOiBhbnk7IHJlamVjdENvZGU6IGFueSB9PihzdGFyZ2F0ZU9wdGlvbnM6IE1pbGtpb1N0YXJnYXRlT3B0aW9ucykge1xyXG4gICAgY29uc3QgJGZldGNoID0gc3RhcmdhdGVPcHRpb25zLmZldGNoID8/IGZldGNoO1xyXG4gICAgY29uc3QgJGFib3J0ID0gc3RhcmdhdGVPcHRpb25zLmFib3J0ID8/IEFib3J0Q29udHJvbGxlcjtcclxuXHJcbiAgICB0eXBlIFN0YXJnYXRlRXZlbnRzID0ge1xyXG4gICAgICAgIFwibWlsa2lvOmV4ZWN1dGVCZWZvcmVcIjogeyBwYXRoOiBzdHJpbmc7IG9wdGlvbnM6IE1peGluPEV4ZWN1dGVPcHRpb25zLCB7IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47IGJhc2VVcmw6IHN0cmluZyB9PiB9O1xyXG4gICAgICAgIFwibWlsa2lvOmZldGNoQmVmb3JlXCI6IHsgcGF0aDogc3RyaW5nOyBvcHRpb25zOiBNaXhpbjxFeGVjdXRlT3B0aW9ucywgeyBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+OyBiYXNlVXJsOiBzdHJpbmcgfT47IGJvZHk6IHN0cmluZyB9O1xyXG4gICAgICAgIFwibWlsa2lvOmV4ZWN1dGVFcnJvclwiOiB7XHJcbiAgICAgICAgICAgIHBhdGg6IHN0cmluZztcclxuICAgICAgICAgICAgb3B0aW9uczogTWl4aW48RXhlY3V0ZU9wdGlvbnMsIHsgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgYmFzZVVybDogc3RyaW5nIH0+O1xyXG4gICAgICAgICAgICBlcnJvcjogUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPjtcclxuICAgICAgICAgICAgaGFuZGxlRXJyb3I6IDxLIGV4dGVuZHMga2V5b2YgUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPj4oZXJyb3I6IGFueSwga2V5OiBLLCBoYW5kbGVyOiAoZXJyb3I6IFBhcnRpYWw8R2VuZXJhdGVkW1wicmVqZWN0Q29kZVwiXVtLXT4pID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+KSA9PiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZUVycm9yOiBhbnkgPSBhc3luYyAoZXJyb3I6IGFueSwga2V5OiBzdHJpbmcsIGhhbmRsZXI6IChlcnJvcjogYW55KSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPikgPT4ge1xyXG4gICAgICAgIGlmIChrZXkgaW4gZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlZCA9IGF3YWl0IGhhbmRsZXIoZXJyb3Jba2V5XSk7XHJcbiAgICAgICAgICAgIGlmIChoYW5kbGVkKSBkZWxldGUgZXJyb3Jba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IF9faW5pdEV2ZW50TWFuYWdlciA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBoYW5kbGVycyA9IG5ldyBNYXA8KGV2ZW50OiBhbnkpID0+IHZvaWQsIHN0cmluZz4oKTtcclxuICAgICAgICBjb25zdCBpbmRleGVkID0gbmV3IE1hcDxzdHJpbmcsIFNldDwoZXZlbnQ6IGFueSkgPT4gdm9pZD4+KCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGV2ZW50TWFuYWdlciA9IHtcclxuICAgICAgICAgICAgb246IDxLZXkgZXh0ZW5kcyBrZXlvZiBTdGFyZ2F0ZUV2ZW50cywgSGFuZGxlciBleHRlbmRzIChldmVudDogU3RhcmdhdGVFdmVudHNbS2V5XSkgPT4gdm9pZD4oa2V5OiBLZXksIGhhbmRsZXI6IEhhbmRsZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNldChoYW5kbGVyLCBrZXkgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleGVkLmhhcyhrZXkgYXMgc3RyaW5nKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbmRleGVkLnNldChrZXkgYXMgc3RyaW5nLCBuZXcgU2V0KCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0ID0gaW5kZXhlZC5nZXQoa2V5IGFzIHN0cmluZykhO1xyXG4gICAgICAgICAgICAgICAgc2V0LmFkZChoYW5kbGVyKTtcclxuICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNldChoYW5kbGVyLCBrZXkgYXMgc3RyaW5nKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLmRlbGV0ZShoYW5kbGVyKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXQuZGVsZXRlKGhhbmRsZXIpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb2ZmOiA8S2V5IGV4dGVuZHMga2V5b2YgU3RhcmdhdGVFdmVudHMsIEhhbmRsZXIgZXh0ZW5kcyAoZXZlbnQ6IFN0YXJnYXRlRXZlbnRzW0tleV0pID0+IHZvaWQ+KGtleTogS2V5LCBoYW5kbGVyOiBIYW5kbGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXQgPSBpbmRleGVkLmdldChrZXkgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgICAgIGlmICghc2V0KSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVycy5kZWxldGUoaGFuZGxlcik7XHJcbiAgICAgICAgICAgICAgICBzZXQuZGVsZXRlKGhhbmRsZXIpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlbWl0OiBhc3luYyA8S2V5IGV4dGVuZHMga2V5b2YgU3RhcmdhdGVFdmVudHMsIFZhbHVlIGV4dGVuZHMgU3RhcmdhdGVFdmVudHNbS2V5XT4oa2V5OiBLZXksIHZhbHVlOiBWYWx1ZSk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaCA9IGluZGV4ZWQuZ2V0KGtleSBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVyKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGV2ZW50TWFuYWdlcjtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZXZlbnRNYW5hZ2VyID0gX19pbml0RXZlbnRNYW5hZ2VyKCk7XHJcblxyXG4gICAgY29uc3QgYm9vdHN0cmFwID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIGxldCBiYXNlVXJsID0gc3RhcmdhdGVPcHRpb25zLmJhc2VVcmw7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBiYXNlVXJsID09PSBcImZ1bmN0aW9uXCIpIGJhc2VVcmwgPSBhd2FpdCBiYXNlVXJsKCk7XHJcbiAgICAgICAgaWYgKGJhc2VVcmwuZW5kc1dpdGgoXCIvXCIpKSBiYXNlVXJsID0gYmFzZVVybC5zbGljZSgwLCAtMSk7XHJcblxyXG4gICAgICAgIHJldHVybiBiYXNlVXJsO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBiYXNlVXJsOiBQcm9taXNlPHN0cmluZz4gPSBib290c3RyYXAoKTtcclxuXHJcbiAgICBjb25zdCBzdGFyZ2F0ZSA9IHtcclxuICAgICAgICAuLi5ldmVudE1hbmFnZXIsXHJcbiAgICAgICAgJHR5cGVzOiB7XHJcbiAgICAgICAgICAgIGdlbmVyYXRlZDogdm9pZCAwIGFzIHVua25vd24gYXMgR2VuZXJhdGVkLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb3B0aW9uczogc3RhcmdhdGVPcHRpb25zLFxyXG4gICAgICAgIGFzeW5jIGV4ZWN1dGU8UGF0aCBleHRlbmRzIGtleW9mIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdPihcclxuICAgICAgICAgICAgcGF0aDogUGF0aCxcclxuICAgICAgICAgICAgb3B0aW9uczogTWl4aW48XHJcbiAgICAgICAgICAgICAgICBFeGVjdXRlT3B0aW9ucyxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM/OiBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicGFyYW1zXCJdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA+LFxyXG4gICAgICAgICk6IFByb21pc2U8XHJcbiAgICAgICAgICAgIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCLwn6WbXCJdIGV4dGVuZHMgYm9vbGVhblxyXG4gICAgICAgICAgICA/IC8vIGFjdGlvblxyXG4gICAgICAgICAgICBbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbCwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dIHwgW251bGwsIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCJyZXN1bHRcIl0sIEV4ZWN1dGVSZXN1bHRzT3B0aW9uXVxyXG4gICAgICAgICAgICA6IC8vIHN0cmVhbVxyXG4gICAgICAgICAgICBbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbCwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dIHwgW251bGwsIEFzeW5jR2VuZXJhdG9yPFtQYXJ0aWFsPEdlbmVyYXRlZFtcInJlamVjdENvZGVcIl0+LCBudWxsXSB8IFtudWxsLCBHZW5lcmF0b3JHZW5lcmljPEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCJyZXN1bHRcIl0+XSwgdW5kZWZpbmVkPiwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dXHJcbiAgICAgICAgPiB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmhlYWRlcnMgPT09IHVuZGVmaW5lZCkgb3B0aW9ucy5oZWFkZXJzID0ge307XHJcblxyXG4gICAgICAgICAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJhc2VVcmwpIHtcclxuICAgICAgICAgICAgICAgIGxldCBiYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBiYXNlVXJsID09PSBcImZ1bmN0aW9uXCIpIGJhc2VVcmwgPSBhd2FpdCBiYXNlVXJsKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYmFzZVVybC5lbmRzV2l0aChcIi9cIikpIGJhc2VVcmwgPSBiYXNlVXJsLnNsaWNlKDAsIC0xKTtcclxuICAgICAgICAgICAgICAgIHVybCA9IGJhc2VVcmwgKyAocGF0aCBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdXJsID0gKGF3YWl0IGJhc2VVcmwpICsgKHBhdGggYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCEocGF0aCBhcyBzdHJpbmcpLmVuZHNXaXRoKFwiflwiKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gYWN0aW9uXHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWFkZXJzLkFjY2VwdCA9PT0gdW5kZWZpbmVkKSBvcHRpb25zLmhlYWRlcnMuQWNjZXB0ID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID09PSB1bmRlZmluZWQpIG9wdGlvbnMuaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdDogeyB2YWx1ZTogUmVjb3JkPGFueSwgYW55PiB9O1xyXG5cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXZlbnRNYW5hZ2VyLmVtaXQoXCJtaWxraW86ZXhlY3V0ZUJlZm9yZVwiLCB7IHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucGFyYW1zKSA/PyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGV2ZW50TWFuYWdlci5lbWl0KFwibWlsa2lvOmZldGNoQmVmb3JlXCIsIHsgcGF0aDogcGF0aCBhcyBzdHJpbmcsIG9wdGlvbnM6IG9wdGlvbnMgYXMgYW55LCBib2R5IH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvclxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbmV3IFByb21pc2U8c3RyaW5nPihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSBvcHRpb25zPy50aW1lb3V0ID8/IG9wdGlvbnM/LnRpbWVvdXQgPz8gNjAwMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChbeyBSRVFVRVNUX1RJTUVPVVQ6IHsgdGltZW91dCwgbWVzc2FnZTogYEV4ZWN1dGUgdGltZW91dCBhZnRlciAke3RpbWVvdXR9bXMuYCB9IH0sIG51bGxdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGltZW91dCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCAoYXdhaXQgJGZldGNoKHVybCwgeyBtZXRob2Q6IFwiUE9TVFwiLCBib2R5LCBoZWFkZXJzOiBvcHRpb25zLmhlYWRlcnMgfSkpLnRleHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB7IHZhbHVlOiByZXZpdmVKU09OUGFyc2UoSlNPTi5wYXJzZShyZXNwb25zZSkpIH07XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yPy5bMF0/LlJFUVVFU1RfVElNRU9VVCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBldmVudE1hbmFnZXIuZW1pdChcIm1pbGtpbzpleGVjdXRlRXJyb3JcIiwgeyBoYW5kbGVFcnJvciwgcGF0aDogcGF0aCBhcyBzdHJpbmcsIG9wdGlvbnM6IG9wdGlvbnMgYXMgYW55LCBlcnJvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvclBpbmVkID0geyBSRVFVRVNUX0ZBSUw6IGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXZlbnRNYW5hZ2VyLmVtaXQoXCJtaWxraW86ZXhlY3V0ZUVycm9yXCIsIHsgaGFuZGxlRXJyb3IsIHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSwgZXJyb3I6IGVycm9yUGluZWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtlcnJvclBpbmVkLCBudWxsLCB7IGV4ZWN1dGVJZDogXCJ1bmtub3duXCIgfV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnZhbHVlLnN1Y2Nlc3MgIT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvcjogYW55ID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JbcmVzdWx0LnZhbHVlLmNvZGVdID0gcmVzdWx0LnZhbHVlLnJlamVjdCA/PyBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGV2ZW50TWFuYWdlci5lbWl0KFwibWlsa2lvOmV4ZWN1dGVFcnJvclwiLCB7IGhhbmRsZUVycm9yLCBwYXRoOiBwYXRoIGFzIHN0cmluZywgb3B0aW9uczogb3B0aW9ucyBhcyBhbnksIGVycm9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbZXJyb3IsIG51bGwsIHsgZXhlY3V0ZUlkOiBcInVua25vd25cIiB9XTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW251bGwsIHJlc3VsdC52YWx1ZS5kYXRhLCB7IGV4ZWN1dGVJZDogcmVzdWx0LnZhbHVlLmV4ZWN1dGVJZCB9XSBhcyBhbnk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzdHJlYW1cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmhlYWRlcnMuQWNjZXB0ID09PSB1bmRlZmluZWQpIG9wdGlvbnMuaGVhZGVycy5BY2NlcHQgPSBcInRleHQvZXZlbnQtc3RyZWFtXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID09PSB1bmRlZmluZWQpIG9wdGlvbnMuaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrczogTWFwPFxyXG4gICAgICAgICAgICAgICAgICAgIG51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IGJvb2xlYW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2U6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8YW55Pj47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmU6ICh2YWx1ZTogSXRlcmF0b3JSZXN1bHQ8YW55PikgPT4gdm9pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0OiAocmVhc29uOiBhbnkpID0+IHZvaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPiA9IG5ldyBNYXAoKTtcclxuICAgICAgICAgICAgICAgIGxldCBzdGFja3NJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXRlcmF0b3JJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3RyZWFtUmVzdWx0OiBhbnk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW1SZXN1bHRGZXRjaGVkID0gd2l0aFJlc29sdmVyczx1bmRlZmluZWQ+KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdGltZW91dCA9IHN0YXJnYXRlT3B0aW9ucz8udGltZW91dCA/PyBvcHRpb25zPy50aW1lb3V0ID8/IDYwMDA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdEZldGNoZWQucmVqZWN0KFt7IFJFUVVFU1RfVElNRU9VVDogeyB0aW1lb3V0LCBtZXNzYWdlOiBgRXhlY3V0ZSB0aW1lb3V0IGFmdGVyICR7dGltZW91dH1tcy5gIH0gfSwgbnVsbCwgeyBleGVjdXRlSWQ6IFwidW5rbm93blwiIH1dKTtcclxuICAgICAgICAgICAgICAgIH0sIHRpbWVvdXQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG9ubWVzc2FnZSA9IChldmVudDogRXZlbnRTb3VyY2VNZXNzYWdlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEuc3RhcnRzV2l0aChcIkBcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdCA9IHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKGV2ZW50LmRhdGEuc2xpY2UoMSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdEZldGNoZWQucmVzb2x2ZSh1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdEZldGNoZWQucmVqZWN0KFt7IFJFUVVFU1RfRkFJTDogZXJyb3IgfSwgbnVsbCwgeyBleGVjdXRlSWQ6IFwidW5rbm93blwiIH1dKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9ICsrc3RhY2tzSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja3MuaGFzKGluZGV4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2sgPSBzdGFja3MuZ2V0KGluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrIS5kb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrIS5yZXNvbHZlKHsgZG9uZTogZmFsc2UsIHZhbHVlOiByZXZpdmVKU09OUGFyc2UoSlNPTi5wYXJzZShldmVudC5kYXRhKSkgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnJlc29sdmUoeyBkb25lOiBmYWxzZSwgdmFsdWU6IHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKGV2ZW50LmRhdGEpKSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrcy5zZXQoaW5kZXgsIHsgLi4uc3RhY2ssIGRvbmU6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY3VyUmVxdWVzdENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcjtcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBjcmVhdGUoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VyUmVxdWVzdENvbnRyb2xsZXIgPSBuZXcgJGFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnJldHVybigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGV2ZW50TWFuYWdlci5lbWl0KFwibWlsa2lvOmV4ZWN1dGVCZWZvcmVcIiwgeyBwYXRoOiBwYXRoIGFzIHN0cmluZywgb3B0aW9uczogb3B0aW9ucyBhcyBhbnkgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucyEucGFyYW1zKSA/PyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBldmVudE1hbmFnZXIuZW1pdChcIm1pbGtpbzpmZXRjaEJlZm9yZVwiLCB7IHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSwgYm9keSB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgJGZldGNoKHVybCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IG9wdGlvbnMhLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250ZW50VHlwZT8uc3RhcnRzV2l0aChcInRleHQvZXZlbnQtc3RyZWFtXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGNvbnRlbnQtdHlwZSB0byBiZSAke1widGV4dC9ldmVudC1zdHJlYW1cIn0sIEFjdHVhbDogJHtjb250ZW50VHlwZX1gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ2V0Qnl0ZXMocmVzcG9uc2UuYm9keSEsIGdldExpbmVzKGdldE1lc3NhZ2VzKG9ubWVzc2FnZSkpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1clJlcXVlc3RDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSBjdXJSZXF1ZXN0Q29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHsgUkVRVUVTVF9GQUlMOiBlcnIgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXZlbnRNYW5hZ2VyLmVtaXQoXCJtaWxraW86ZXhlY3V0ZUVycm9yXCIsIHsgaGFuZGxlRXJyb3IsIHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSwgZXJyb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGl0ZXJhdG9yLnRocm93KGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdEZldGNoZWQucmVqZWN0KFtlcnJvciwgbnVsbCwgeyBleGVjdXRlSWQ6IFwidW5rbm93blwiIH1dKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdm9pZCBjcmVhdGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVyYXRvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi4oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dW5rbm93bj4+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKytpdGVyYXRvckluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrcy5oYXMoaW5kZXggLSAyKSkgc3RhY2tzLmRlbGV0ZShpbmRleCAtIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFja3MuaGFzKGluZGV4KSAmJiAhY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja3Muc2V0KGluZGV4LCB7IC4uLnN0YWNrLCBkb25lOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tzLmhhcyhpbmRleCkgJiYgY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5yZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFja3MuZ2V0KGluZGV4KSEucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgcmV0dXJuKCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dm9pZD4+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIGN1clJlcXVlc3RDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfLCBpdGVyYXRvcl0gb2Ygc3RhY2tzKSBpdGVyYXRvci5yZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgdGhyb3coZXJyOiBhbnkpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PHZvaWQ+PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1SZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUlkOiBzdHJlYW1SZXN1bHQ/LmV4ZWN1dGVJZCA/PyBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJORVRXT1JLX0VSUk9SXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiTmV0d29yayBFcnJvclwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tQ2xpZW50OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBlcnIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfaW5kZXgsIHN0YWNrXSBvZiBzdGFja3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suZG9uZSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suZG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1clJlcXVlc3RDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSBjdXJSZXF1ZXN0Q29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbXywgaXRlcmF0b3JdIG9mIHN0YWNrcykgaXRlcmF0b3IucmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSBzYXRpc2ZpZXMgQXN5bmNJdGVyYXRvcjx1bmtub3duPiksXHJcbiAgICAgICAgICAgICAgICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzdHJlYW1SZXN1bHRGZXRjaGVkLnByb21pc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtudWxsLCBpdGVyYXRvciwgeyBleGVjdXRlSWQ6IHN0cmVhbVJlc3VsdC5leGVjdXRlSWQgfV0gYXMgYW55O1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IgYXMgYW55O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBfX2Nvb2tib29rOiB7XHJcbiAgICAgICAgICAgIHN1YnNjcmliZTogYXN5bmMgKGJhc2VVcmw6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcclxuICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgICAgICBBY2NlcHQ6IFwidGV4dC9ldmVudC1zdHJlYW1cIixcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zKSA/PyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhY2tzOiBNYXA8XHJcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogYm9vbGVhbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxhbnk+PjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTogKHZhbHVlOiBJdGVyYXRvclJlc3VsdDxhbnk+KSA9PiB2b2lkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3Q6IChyZWFzb246IGFueSkgPT4gdm9pZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA+ID0gbmV3IE1hcCgpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHN0YWNrc0luZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIGxldCBpdGVyYXRvckluZGV4ID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbm1lc3NhZ2UgPSAoZXZlbnQ6IEV2ZW50U291cmNlTWVzc2FnZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKytzdGFja3NJbmRleDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tzLmhhcyhpbmRleCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2sgPSBzdGFja3MuZ2V0KGluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2shLnJlc29sdmUoeyBkb25lOiBmYWxzZSwgdmFsdWU6IHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKGV2ZW50LmRhdGEpKSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogcmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UoZXZlbnQuZGF0YSkpIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja3Muc2V0KGluZGV4LCB7IC4uLnN0YWNrLCBkb25lOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjdXJSZXF1ZXN0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyO1xyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZSgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJSZXF1ZXN0Q29udHJvbGxlciA9IG5ldyAkYWJvcnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IucmV0dXJuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCAkZmV0Y2goYCR7YmFzZVVybH0vJHN1YnNjcmliZWAsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbDogY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJDb250ZW50LVR5cGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29udGVudFR5cGU/LnN0YXJ0c1dpdGgoXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBjb250ZW50LXR5cGUgdG8gYmUgJHtcInRleHQvZXZlbnQtc3RyZWFtXCJ9LCBBY3R1YWw6ICR7Y29udGVudFR5cGV9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGdldEJ5dGVzKHJlc3BvbnNlLmJvZHkhLCBnZXRMaW5lcyhnZXRNZXNzYWdlcyhvbm1lc3NhZ2UpKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBpdGVyYXRvci5yZXR1cm4oKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkgY3VyUmVxdWVzdENvbnRyb2xsZXIuYWJvcnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaXRlcmF0b3IudGhyb3coZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdm9pZCBjcmVhdGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVyYXRvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi4oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dW5rbm93bj4+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKytpdGVyYXRvckluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrcy5oYXMoaW5kZXggLSAyKSkgc3RhY2tzLmRlbGV0ZShpbmRleCAtIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFja3MuaGFzKGluZGV4KSAmJiAhY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja3Muc2V0KGluZGV4LCB7IC4uLnN0YWNrLCBkb25lOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tzLmhhcyhpbmRleCkgJiYgY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5yZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFja3MuZ2V0KGluZGV4KSEucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgcmV0dXJuKCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dm9pZD4+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIGN1clJlcXVlc3RDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfLCBpdGVyYXRvcl0gb2Ygc3RhY2tzKSBpdGVyYXRvci5yZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgdGhyb3coZXJyOiBhbnkpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PHZvaWQ+PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1clJlcXVlc3RDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSBjdXJSZXF1ZXN0Q29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbXywgaXRlcmF0b3JdIG9mIHN0YWNrcykgaXRlcmF0b3IucmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSBzYXRpc2ZpZXMgQXN5bmNJdGVyYXRvcjx1bmtub3duPiksXHJcbiAgICAgICAgICAgICAgICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3I7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvciBhcyBhbnk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhc3luYyBwaW5nKG9wdGlvbnM/OiB7IHRpbWVvdXQ/OiBudW1iZXIgfSk6IFByb21pc2U8UGluZz4ge1xyXG4gICAgICAgICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvclxyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8UGluZz4oYXN5bmMgKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IGAke2F3YWl0IGJhc2VVcmx9L2dlbmVyYXRlXzIwNGA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0ID0gc3RhcmdhdGVPcHRpb25zPy50aW1lb3V0ID8/IG9wdGlvbnM/LnRpbWVvdXQgPz8gNjAwMDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0c1RpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRzVGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShbeyBjb25uZWN0OiBmYWxzZSwgZGVsYXk6IGVuZHNUaW1lIC0gc3RhcnRzVGltZSwgZXJyb3I6IHsgUkVRVUVTVF9USU1FT1VUOiB7IHRpbWVvdXQsIG1lc3NhZ2U6IGBFeGVjdXRlIHRpbWVvdXQgYWZ0ZXIgJHt0aW1lb3V0fW1zLmAgfSB9IH0sIG51bGxdKTtcclxuICAgICAgICAgICAgICAgIH0sIHRpbWVvdXQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCAkZmV0Y2godXJsLCB7IG1ldGhvZDogXCJIRUFEXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kc1RpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoW3sgY29ubmVjdDogZmFsc2UsIGRlbGF5OiBlbmRzVGltZSAtIHN0YXJ0c1RpbWUsIGVycm9yOiB7IFJFUVVFU1RfRkFJTDogeyByZXNwb25zZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIG1lc3NhZ2U6IFwiU3RhdHVzIGNvZGUgbm90IDIwNFwiIH0gfSB9LCBudWxsXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFtudWxsLCB7IGNvbm5lY3Q6IHRydWUsIGRlbGF5OiBlbmRzVGltZSAtIHN0YXJ0c1RpbWUsIHNlcnZlclRpbWVzdGFtcDogTnVtYmVyKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpIS5zdWJzdHJpbmcoMTcpKSB9XSk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kc1RpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbeyBjb25uZWN0OiBmYWxzZSwgZGVsYXk6IGVuZHNUaW1lIC0gc3RhcnRzVGltZSwgZXJyb3IgfSwgbnVsbF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBzdGFyZ2F0ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmV2aXZlSlNPTlBhcnNlPFQ+KGpzb246IFQpOiBUIHtcclxuICAgIGNvbnN0IGlzb0RhdGVQYXR0ZXJuID0gL14oXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGR7MSwzfSk/KShafFsrLV1cXGR7Mn06P1xcZHsyfSk/JC87XHJcblxyXG4gICAgaWYgKGpzb24gaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4ganNvbjtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGpzb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIGpzb24ubWFwKChpdGVtKSA9PiByZXZpdmVKU09OUGFyc2UoaXRlbSkpIGFzIGFueTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YganNvbiA9PT0gXCJvYmplY3RcIiAmJiBqc29uICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGpzb24pLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgYWNjW2tleSBhcyBrZXlvZiBUXSA9IHJldml2ZUpTT05QYXJzZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgfSwge30gYXMgVCk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGpzb24gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICBjb25zdCBtYXRjaCA9IGpzb24ubWF0Y2goaXNvRGF0ZVBhdHRlcm4pO1xyXG4gICAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkRGF0ZVN0cmluZyA9IG1hdGNoWzJdID8gYCR7bWF0Y2hbMV19JHttYXRjaFsyXS5yZXBsYWNlKFwiOlwiLCBcIlwiKX1gIDogYCR7bWF0Y2hbMV19WmA7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShub3JtYWxpemVkRGF0ZVN0cmluZykgYXMgYW55O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBqc29uO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGVTdHJlYW1PcHRpb25zIHtcclxuICAgIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG4gICAgdGltZW91dD86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBcGlTY2hlbWFFeHRlbmQge1xyXG4gICAgYXBpVmFsaWRhdG9yOiB7XHJcbiAgICAgICAgZ2VuZXJhdGVkQXQ6IG51bWJlcjtcclxuICAgICAgICB2YWxpZGF0ZTogUmVjb3JkPGFueSwgYW55PjtcclxuICAgIH07XHJcbiAgICBhcGlNZXRob2RzU2NoZW1hOiBSZWNvcmQ8YW55LCBhbnk+O1xyXG4gICAgYXBpTWV0aG9kc1R5cGVTY2hlbWE6IFJlY29yZDxhbnksIGFueT47XHJcbiAgICBhcGlUZXN0c1NjaGVtYTogUmVjb3JkPGFueSwgYW55PjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRmFpbENvZGVFeHRlbmQgPSBSZWNvcmQ8YW55LCAoLi4uYXJnczogQXJyYXk8YW55PikgPT4gYW55PjtcclxuXHJcbmV4cG9ydCB0eXBlIEJvb3RzdHJhcE1pZGRsZXdhcmUgPSAoZGF0YTogeyBzdG9yYWdlOiBDbGllbnRTdG9yYWdlIH0pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xyXG5leHBvcnQgdHlwZSBCZWZvcmVFeGVjdXRlTWlkZGxld2FyZSA9IChkYXRhOiB7IHBhdGg6IHN0cmluZzsgcGFyYW1zOiBhbnk7IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47IHN0b3JhZ2U6IENsaWVudFN0b3JhZ2UgfSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XHJcbmV4cG9ydCB0eXBlIEFmdGVyRXhlY3V0ZU1pZGRsZXdhcmUgPSAoZGF0YTogeyBwYXRoOiBzdHJpbmc7IHJlc3VsdDogeyB2YWx1ZTogYW55IH07IHN0b3JhZ2U6IENsaWVudFN0b3JhZ2UgfSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1pZGRsZXdhcmVPcHRpb25zIHtcclxuICAgIGJvb3RzdHJhcD86IEJvb3RzdHJhcE1pZGRsZXdhcmU7XHJcbiAgICBiZWZvcmVFeGVjdXRlPzogQmVmb3JlRXhlY3V0ZU1pZGRsZXdhcmU7XHJcbiAgICBhZnRlckV4ZWN1dGU/OiBBZnRlckV4ZWN1dGVNaWRkbGV3YXJlO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENsaWVudFN0b3JhZ2Uge1xyXG4gICAgZ2V0SXRlbTogKGtleTogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZyB8IG51bGw+O1xyXG4gICAgc2V0SXRlbTogKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgcmVtb3ZlSXRlbTogKGtleTogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGVSZXN1bHRTdWNjZXNzPFJlc3VsdD4ge1xyXG4gICAgZXhlY3V0ZUlkOiBzdHJpbmc7XHJcbiAgICBzdWNjZXNzOiB0cnVlO1xyXG4gICAgZGF0YTogUmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBHZW5lcmF0b3JHZW5lcmljPFQ+ID0gVCBleHRlbmRzIEFzeW5jR2VuZXJhdG9yPGluZmVyIEk+ID8gSSA6IG5ldmVyO1xyXG5cclxuZXhwb3J0IHR5cGUgRmxhdHRlbktleXM8VCwgUHJlZml4IGV4dGVuZHMgc3RyaW5nID0gXCJcIj4gPSB7XHJcbiAgICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIG9iamVjdCA/IEZsYXR0ZW5LZXlzPFRbS10sIGAke1ByZWZpeH0ke0V4Y2x1ZGU8Sywgc3ltYm9sPn0uYD4gOiBgJGlucHV0LiR7UHJlZml4fSR7RXhjbHVkZTxLLCBzeW1ib2w+fWA7XHJcbn1ba2V5b2YgVF07XHJcblxyXG4vLyAqKiogVGhpcyBwYXJ0IG9mIHRoZSBjb2RlIGlzIGJhc2VkIG9uIGBAbWljcm9zb2Z0L2ZldGNoLWV2ZW50LXNvdXJjZWAgcmV3cml0ZSwgdGhhbmtzIHRvIHRoZSB3b3JrIG9mIE1pY3Jvc29mdCAqKiogLy9cclxuLy8gKioqIGh0dHBzOi8vZ2l0aHViLmNvbS9BenVyZS9mZXRjaC1ldmVudC1zb3VyY2UvYmxvYi9tYWluL3NyYy9wYXJzZS50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqIC8vXHJcblxyXG4vKipcclxuICogUmVwcmVzZW50cyBhIG1lc3NhZ2Ugc2VudCBpbiBhbiBldmVudCBzdHJlYW1cclxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NlcnZlci1zZW50X2V2ZW50cy9Vc2luZ19zZXJ2ZXItc2VudF9ldmVudHMjRXZlbnRfc3RyZWFtX2Zvcm1hdFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBFdmVudFNvdXJjZU1lc3NhZ2Uge1xyXG4gICAgZGF0YTogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogQ29udmVydHMgYSBSZWFkYWJsZVN0cmVhbSBpbnRvIGEgY2FsbGJhY2sgcGF0dGVybi5cclxuICogQHBhcmFtIHN0cmVhbSBUaGUgaW5wdXQgUmVhZGFibGVTdHJlYW0uXHJcbiAqIEBwYXJhbSBvbkNodW5rIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIG5ldyBieXRlIGNodW5rIGluIHRoZSBzdHJlYW0uXHJcbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCB3aWxsIGJlIHJlc29sdmVkIHdoZW4gdGhlIHN0cmVhbSBjbG9zZXMuXHJcbiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Qnl0ZXMoc3RyZWFtOiBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5Piwgb25DaHVuazogKGFycjogVWludDhBcnJheSkgPT4gdm9pZCkge1xyXG4gICAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpO1xyXG4gICAgbGV0IHJlc3VsdDogUmVhZGFibGVTdHJlYW1SZWFkUmVzdWx0PFVpbnQ4QXJyYXk+O1xyXG4gICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgd2hpbGUgKCEocmVzdWx0ID0gYXdhaXQgcmVhZGVyLnJlYWQoKSkuZG9uZSkge1xyXG4gICAgICAgIG9uQ2h1bmsocmVzdWx0LnZhbHVlKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFBhcnNlcyBhcmJpdGFyeSBieXRlIGNodW5rcyBpbnRvIEV2ZW50U291cmNlIGxpbmUgYnVmZmVycy5cclxuICogRWFjaCBsaW5lIHNob3VsZCBiZSBvZiB0aGUgZm9ybWF0IFwiZmllbGQ6IHZhbHVlXCIgYW5kIGVuZHMgd2l0aCBcXHIsIFxcbiwgb3IgXFxyXFxuLlxyXG4gKiBAcGFyYW0gb25MaW5lIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIG5ldyBFdmVudFNvdXJjZSBsaW5lLlxyXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCBmb3IgZWFjaCBpbmNvbWluZyBieXRlIGNodW5rLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldExpbmVzKG9uTGluZTogKGxpbmU6IFVpbnQ4QXJyYXksIGZpZWxkTGVuZ3RoOiBudW1iZXIpID0+IHZvaWQpIHtcclxuICAgIGxldCBidWZmZXI6IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQ7XHJcbiAgICBsZXQgcG9zaXRpb246IG51bWJlcjsgLy8gY3VycmVudCByZWFkIHBvc2l0aW9uXHJcbiAgICBsZXQgZmllbGRMZW5ndGg6IG51bWJlcjsgLy8gbGVuZ3RoIG9mIHRoZSBgZmllbGRgIHBvcnRpb24gb2YgdGhlIGxpbmVcclxuICAgIGxldCBkaXNjYXJkVHJhaWxpbmdOZXdsaW5lID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcmV0dXJuIGEgZnVuY3Rpb24gdGhhdCBjYW4gcHJvY2VzcyBlYWNoIGluY29taW5nIGJ5dGUgY2h1bms6XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gb25DaHVuayhhcnI6IFVpbnQ4QXJyYXkpIHtcclxuICAgICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgYnVmZmVyID0gYXJyO1xyXG4gICAgICAgICAgICBwb3NpdGlvbiA9IDA7XHJcbiAgICAgICAgICAgIGZpZWxkTGVuZ3RoID0gLTE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gd2UncmUgc3RpbGwgcGFyc2luZyB0aGUgb2xkIGxpbmUuIEFwcGVuZCB0aGUgbmV3IGJ5dGVzIGludG8gYnVmZmVyOlxyXG4gICAgICAgICAgICBidWZmZXIgPSBjb25jYXQoYnVmZmVyLCBhcnIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYnVmTGVuZ3RoID0gYnVmZmVyLmxlbmd0aDtcclxuICAgICAgICBsZXQgbGluZVN0YXJ0ID0gMDsgLy8gaW5kZXggd2hlcmUgdGhlIGN1cnJlbnQgbGluZSBzdGFydHNcclxuICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBidWZMZW5ndGgpIHtcclxuICAgICAgICAgICAgaWYgKGRpc2NhcmRUcmFpbGluZ05ld2xpbmUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChidWZmZXJbcG9zaXRpb25dID09PSAxMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9ICsrcG9zaXRpb247IC8vIHNraXAgdG8gbmV4dCBjaGFyXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgZGlzY2FyZFRyYWlsaW5nTmV3bGluZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzdGFydCBsb29raW5nIGZvcndhcmQgdGlsbCB0aGUgZW5kIG9mIGxpbmU6XHJcbiAgICAgICAgICAgIGxldCBsaW5lRW5kID0gLTE7IC8vIGluZGV4IG9mIHRoZSBcXHIgb3IgXFxuIGNoYXJcclxuICAgICAgICAgICAgZm9yICg7IHBvc2l0aW9uIDwgYnVmTGVuZ3RoICYmIGxpbmVFbmQgPT09IC0xOyArK3Bvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGJ1ZmZlcltwb3NpdGlvbl0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU4OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRMZW5ndGggPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaXJzdCBjb2xvbiBpbiBsaW5lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZExlbmd0aCA9IHBvc2l0aW9uIC0gbGluZVN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTogPGV4cGxhbmF0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2NhcmRUcmFpbGluZ05ld2xpbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVFbmQgPSBwb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChsaW5lRW5kID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgLy8gV2UgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgYnV0IHRoZSBsaW5lIGhhc24ndCBlbmRlZC5cclxuICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBuZXh0IGFyciBhbmQgdGhlbiBjb250aW51ZSBwYXJzaW5nOlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHdlJ3ZlIHJlYWNoZWQgdGhlIGxpbmUgZW5kLCBzZW5kIGl0IG91dDpcclxuICAgICAgICAgICAgb25MaW5lKGJ1ZmZlci5zdWJhcnJheShsaW5lU3RhcnQsIGxpbmVFbmQpLCBmaWVsZExlbmd0aCk7XHJcbiAgICAgICAgICAgIGxpbmVTdGFydCA9IHBvc2l0aW9uOyAvLyB3ZSdyZSBub3cgb24gdGhlIG5leHQgbGluZVxyXG4gICAgICAgICAgICBmaWVsZExlbmd0aCA9IC0xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGxpbmVTdGFydCA9PT0gYnVmTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlciA9IHVuZGVmaW5lZDsgLy8gd2UndmUgZmluaXNoZWQgcmVhZGluZyBpdFxyXG4gICAgICAgIH0gZWxzZSBpZiAobGluZVN0YXJ0ICE9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyB2aWV3IGludG8gYnVmZmVyIGJlZ2lubmluZyBhdCBsaW5lU3RhcnQgc28gd2UgZG9uJ3RcclxuICAgICAgICAgICAgLy8gbmVlZCB0byBjb3B5IG92ZXIgdGhlIHByZXZpb3VzIGxpbmVzIHdoZW4gd2UgZ2V0IHRoZSBuZXcgYXJyOlxyXG4gICAgICAgICAgICBidWZmZXIgPSBidWZmZXIuc3ViYXJyYXkobGluZVN0YXJ0KTtcclxuICAgICAgICAgICAgcG9zaXRpb24gLT0gbGluZVN0YXJ0O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXJzZXMgbGluZSBidWZmZXJzIGludG8gRXZlbnRTb3VyY2VNZXNzYWdlcy5cclxuICogQHBhcmFtIG9uSWQgQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggYGlkYCBmaWVsZC5cclxuICogQHBhcmFtIG9uUmV0cnkgQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggYHJldHJ5YCBmaWVsZC5cclxuICogQHBhcmFtIG9uTWVzc2FnZSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBtZXNzYWdlLlxyXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCBmb3IgZWFjaCBpbmNvbWluZyBsaW5lIGJ1ZmZlci5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXNzYWdlcyhvbk1lc3NhZ2U/OiAobXNnOiBFdmVudFNvdXJjZU1lc3NhZ2UpID0+IHZvaWQpIHtcclxuICAgIGxldCBtZXNzYWdlID0gbmV3TWVzc2FnZSgpO1xyXG4gICAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xyXG5cclxuICAgIC8vIHJldHVybiBhIGZ1bmN0aW9uIHRoYXQgY2FuIHByb2Nlc3MgZWFjaCBpbmNvbWluZyBsaW5lIGJ1ZmZlcjpcclxuICAgIHJldHVybiBmdW5jdGlvbiBvbkxpbmUobGluZTogVWludDhBcnJheSwgZmllbGRMZW5ndGg6IG51bWJlcikge1xyXG4gICAgICAgIGlmIChsaW5lLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAvLyBlbXB0eSBsaW5lIGRlbm90ZXMgZW5kIG9mIG1lc3NhZ2UuIFRyaWdnZXIgdGhlIGNhbGxiYWNrIGFuZCBzdGFydCBhIG5ldyBtZXNzYWdlOlxyXG4gICAgICAgICAgICBvbk1lc3NhZ2U/LihtZXNzYWdlKTtcclxuICAgICAgICAgICAgbWVzc2FnZSA9IG5ld01lc3NhZ2UoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkTGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyBleGNsdWRlIGNvbW1lbnRzIGFuZCBsaW5lcyB3aXRoIG5vIHZhbHVlc1xyXG4gICAgICAgICAgICAvLyBsaW5lIGlzIG9mIGZvcm1hdCBcIjxmaWVsZD46PHZhbHVlPlwiIG9yIFwiPGZpZWxkPjogPHZhbHVlPlwiXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NlcnZlci1zZW50LWV2ZW50cy5odG1sI2V2ZW50LXN0cmVhbS1pbnRlcnByZXRhdGlvblxyXG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IGRlY29kZXIuZGVjb2RlKGxpbmUuc3ViYXJyYXkoMCwgZmllbGRMZW5ndGgpKTtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVPZmZzZXQgPSBmaWVsZExlbmd0aCArIChsaW5lW2ZpZWxkTGVuZ3RoICsgMV0gPT09IDMyID8gMiA6IDEpO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRlY29kZXIuZGVjb2RlKGxpbmUuc3ViYXJyYXkodmFsdWVPZmZzZXQpKTtcclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGQpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJkYXRhXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBtZXNzYWdlIGFscmVhZHkgaGFzIGRhdGEsIGFwcGVuZCB0aGUgbmV3IHZhbHVlIHRvIHRoZSBvbGQuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBqdXN0IHNldCB0byB0aGUgbmV3IHZhbHVlOlxyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YSA9IG1lc3NhZ2UuZGF0YSA/IGAke21lc3NhZ2UuZGF0YX1cXG4ke3ZhbHVlfWAgOiB2YWx1ZTsgLy8gb3RoZXJ3aXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29uY2F0KGE6IFVpbnQ4QXJyYXksIGI6IFVpbnQ4QXJyYXkpIHtcclxuICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGEubGVuZ3RoICsgYi5sZW5ndGgpO1xyXG4gICAgcmVzLnNldChhKTtcclxuICAgIHJlcy5zZXQoYiwgYS5sZW5ndGgpO1xyXG4gICAgcmV0dXJuIHJlcztcclxufVxyXG5cclxuZnVuY3Rpb24gbmV3TWVzc2FnZSgpOiBFdmVudFNvdXJjZU1lc3NhZ2Uge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBkYXRhOiBcIlwiLFxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhSZXNvbHZlcnM8VCA9IGFueT4oKTogUHJvbWlzZVdpdGhSZXNvbHZlcnM8VD4ge1xyXG4gICAgbGV0IHJlc29sdmU6IFByb21pc2VXaXRoUmVzb2x2ZXJzPFQ+W1wicmVzb2x2ZVwiXTtcclxuICAgIGxldCByZWplY3Q6IFByb21pc2VXaXRoUmVzb2x2ZXJzPFQ+W1wicmVqZWN0XCJdO1xyXG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPFQ+KChyZXMsIHJlaikgPT4ge1xyXG4gICAgICAgIHJlc29sdmUgPSByZXM7XHJcbiAgICAgICAgcmVqZWN0ID0gcmVqO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4geyBwcm9taXNlLCByZXNvbHZlOiByZXNvbHZlISwgcmVqZWN0OiByZWplY3QhIH07XHJcbn1cclxuIgogIF0sCiAgIm1hcHBpbmdzIjogIjtBQW1DQSxlQUFzQixjQUF1RSxDQUFD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
505
+ //# debugId=154BDE533DC3044164756E2164756E21
506
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi5cXGluZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImV4cG9ydCB0eXBlIE1pbGtpb1N0YXJnYXRlT3B0aW9ucyA9IHtcclxuICAgIGJhc2VVcmw6IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpIHwgKCgpID0+IFByb21pc2U8c3RyaW5nPik7XHJcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xyXG4gICAgZmV0Y2g/OiB0eXBlb2YgZmV0Y2g7XHJcbiAgICBhYm9ydD86IHR5cGVvZiBBYm9ydENvbnRyb2xsZXI7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBNaXhpbjxULCBVPiA9IFUgJiBPbWl0PFQsIGtleW9mIFU+O1xyXG5cclxuZXhwb3J0IHR5cGUgRXhlY3V0ZU9wdGlvbnMgPSB7XHJcbiAgICBwYXJhbXM/OiBSZWNvcmQ8YW55LCBhbnk+O1xyXG4gICAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XHJcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xyXG4gICAgYmFzZVVybD86IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpIHwgKCgpID0+IFByb21pc2U8c3RyaW5nPik7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBFeGVjdXRlUmVzdWx0c09wdGlvbiA9IHsgZXhlY3V0ZUlkOiBzdHJpbmcgfTtcclxuXHJcbmV4cG9ydCB0eXBlIFBpbmcgPVxyXG4gICAgfCBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25uZWN0OiBmYWxzZTtcclxuICAgICAgICAgICAgZGVsYXk6IG51bWJlcjtcclxuICAgICAgICAgICAgZXJyb3I6IGFueTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG51bGwsXHJcbiAgICBdXHJcbiAgICB8IFtcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29ubmVjdDogdHJ1ZTtcclxuICAgICAgICAgICAgZGVsYXk6IG51bWJlcjtcclxuICAgICAgICAgICAgc2VydmVyVGltZXN0YW1wOiBudW1iZXI7XHJcbiAgICAgICAgfSxcclxuICAgIF07XHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTdGFyZ2F0ZTxHZW5lcmF0ZWQgZXh0ZW5kcyB7IHJvdXRlU2NoZW1hOiBhbnk7IHJlamVjdENvZGU6IGFueSB9PihzdGFyZ2F0ZU9wdGlvbnM6IE1pbGtpb1N0YXJnYXRlT3B0aW9ucykge1xyXG4gICAgY29uc3QgJGZldGNoID0gc3RhcmdhdGVPcHRpb25zLmZldGNoID8/IGZldGNoO1xyXG4gICAgY29uc3QgJGFib3J0ID0gc3RhcmdhdGVPcHRpb25zLmFib3J0ID8/IEFib3J0Q29udHJvbGxlcjtcclxuXHJcbiAgICB0eXBlIFN0YXJnYXRlRXZlbnRzID0ge1xyXG4gICAgICAgIFwibWlsa2lvOmV4ZWN1dGVCZWZvcmVcIjogeyBwYXRoOiBzdHJpbmc7IG9wdGlvbnM6IE1peGluPEV4ZWN1dGVPcHRpb25zLCB7IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47IGJhc2VVcmw6IHN0cmluZyB9PiB9O1xyXG4gICAgICAgIFwibWlsa2lvOmZldGNoQmVmb3JlXCI6IHsgcGF0aDogc3RyaW5nOyBvcHRpb25zOiBNaXhpbjxFeGVjdXRlT3B0aW9ucywgeyBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+OyBiYXNlVXJsOiBzdHJpbmcgfT47IGJvZHk6IHN0cmluZyB9O1xyXG4gICAgICAgIFwibWlsa2lvOmV4ZWN1dGVFcnJvclwiOiB7XHJcbiAgICAgICAgICAgIHBhdGg6IHN0cmluZztcclxuICAgICAgICAgICAgb3B0aW9uczogTWl4aW48RXhlY3V0ZU9wdGlvbnMsIHsgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgYmFzZVVybDogc3RyaW5nIH0+O1xyXG4gICAgICAgICAgICBlcnJvcjogUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPjtcclxuICAgICAgICAgICAgaGFuZGxlRXJyb3I6IDxLIGV4dGVuZHMga2V5b2YgUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPj4oZXJyb3I6IGFueSwga2V5OiBLLCBoYW5kbGVyOiAoZXJyb3I6IFBhcnRpYWw8R2VuZXJhdGVkW1wicmVqZWN0Q29kZVwiXVtLXT4pID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+KSA9PiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZUVycm9yOiBhbnkgPSBhc3luYyAoZXJyb3I6IGFueSwga2V5OiBzdHJpbmcsIGhhbmRsZXI6IChlcnJvcjogYW55KSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPikgPT4ge1xyXG4gICAgICAgIGlmIChrZXkgaW4gZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlZCA9IGF3YWl0IGhhbmRsZXIoZXJyb3Jba2V5XSk7XHJcbiAgICAgICAgICAgIGlmIChoYW5kbGVkKSBkZWxldGUgZXJyb3Jba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IF9faW5pdEV2ZW50TWFuYWdlciA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBoYW5kbGVycyA9IG5ldyBNYXA8KGV2ZW50OiBhbnkpID0+IHZvaWQsIHN0cmluZz4oKTtcclxuICAgICAgICBjb25zdCBpbmRleGVkID0gbmV3IE1hcDxzdHJpbmcsIFNldDwoZXZlbnQ6IGFueSkgPT4gdm9pZD4+KCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGV2ZW50TWFuYWdlciA9IHtcclxuICAgICAgICAgICAgb246IDxLZXkgZXh0ZW5kcyBrZXlvZiBTdGFyZ2F0ZUV2ZW50cywgSGFuZGxlciBleHRlbmRzIChldmVudDogU3RhcmdhdGVFdmVudHNbS2V5XSkgPT4gdm9pZD4oa2V5OiBLZXksIGhhbmRsZXI6IEhhbmRsZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNldChoYW5kbGVyLCBrZXkgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleGVkLmhhcyhrZXkgYXMgc3RyaW5nKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbmRleGVkLnNldChrZXkgYXMgc3RyaW5nLCBuZXcgU2V0KCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0ID0gaW5kZXhlZC5nZXQoa2V5IGFzIHN0cmluZykhO1xyXG4gICAgICAgICAgICAgICAgc2V0LmFkZChoYW5kbGVyKTtcclxuICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNldChoYW5kbGVyLCBrZXkgYXMgc3RyaW5nKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLmRlbGV0ZShoYW5kbGVyKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXQuZGVsZXRlKGhhbmRsZXIpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb2ZmOiA8S2V5IGV4dGVuZHMga2V5b2YgU3RhcmdhdGVFdmVudHMsIEhhbmRsZXIgZXh0ZW5kcyAoZXZlbnQ6IFN0YXJnYXRlRXZlbnRzW0tleV0pID0+IHZvaWQ+KGtleTogS2V5LCBoYW5kbGVyOiBIYW5kbGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXQgPSBpbmRleGVkLmdldChrZXkgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgICAgIGlmICghc2V0KSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVycy5kZWxldGUoaGFuZGxlcik7XHJcbiAgICAgICAgICAgICAgICBzZXQuZGVsZXRlKGhhbmRsZXIpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlbWl0OiBhc3luYyA8S2V5IGV4dGVuZHMga2V5b2YgU3RhcmdhdGVFdmVudHMsIFZhbHVlIGV4dGVuZHMgU3RhcmdhdGVFdmVudHNbS2V5XT4oa2V5OiBLZXksIHZhbHVlOiBWYWx1ZSk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaCA9IGluZGV4ZWQuZ2V0KGtleSBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVyKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGV2ZW50TWFuYWdlcjtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZXZlbnRNYW5hZ2VyID0gX19pbml0RXZlbnRNYW5hZ2VyKCk7XHJcblxyXG4gICAgY29uc3QgYm9vdHN0cmFwID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIGxldCBiYXNlVXJsID0gc3RhcmdhdGVPcHRpb25zLmJhc2VVcmw7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBiYXNlVXJsID09PSBcImZ1bmN0aW9uXCIpIGJhc2VVcmwgPSBhd2FpdCBiYXNlVXJsKCk7XHJcbiAgICAgICAgaWYgKGJhc2VVcmwuZW5kc1dpdGgoXCIvXCIpKSBiYXNlVXJsID0gYmFzZVVybC5zbGljZSgwLCAtMSk7XHJcblxyXG4gICAgICAgIHJldHVybiBiYXNlVXJsO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBiYXNlVXJsOiBQcm9taXNlPHN0cmluZz4gPSBib290c3RyYXAoKTtcclxuXHJcbiAgICBjb25zdCBzdGFyZ2F0ZSA9IHtcclxuICAgICAgICAuLi5ldmVudE1hbmFnZXIsXHJcbiAgICAgICAgJHR5cGVzOiB7XHJcbiAgICAgICAgICAgIGdlbmVyYXRlZDogdm9pZCAwIGFzIHVua25vd24gYXMgR2VuZXJhdGVkLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb3B0aW9uczogc3RhcmdhdGVPcHRpb25zLFxyXG4gICAgICAgIGFzeW5jIGV4ZWN1dGU8UGF0aCBleHRlbmRzIGtleW9mIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdPihcclxuICAgICAgICAgICAgcGF0aDogUGF0aCxcclxuICAgICAgICAgICAgb3B0aW9uczogTWl4aW48XHJcbiAgICAgICAgICAgICAgICBFeGVjdXRlT3B0aW9ucyxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM/OiBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicGFyYW1zXCJdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA+LFxyXG4gICAgICAgICk6IFByb21pc2U8XHJcbiAgICAgICAgICAgIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCLwn6WbXCJdIGV4dGVuZHMgYm9vbGVhblxyXG4gICAgICAgICAgICA/IC8vIGFjdGlvblxyXG4gICAgICAgICAgICBbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbCwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dIHwgW251bGwsIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCJyZXN1bHRcIl0sIEV4ZWN1dGVSZXN1bHRzT3B0aW9uXVxyXG4gICAgICAgICAgICA6IC8vIHN0cmVhbVxyXG4gICAgICAgICAgICBbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbCwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dIHwgW251bGwsIEFzeW5jR2VuZXJhdG9yPFtQYXJ0aWFsPEdlbmVyYXRlZFtcInJlamVjdENvZGVcIl0+LCBudWxsXSB8IFtudWxsLCBHZW5lcmF0b3JHZW5lcmljPEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCJyZXN1bHRcIl0+XSwgdW5kZWZpbmVkPiwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dXHJcbiAgICAgICAgPiB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmhlYWRlcnMgPT09IHVuZGVmaW5lZCkgb3B0aW9ucy5oZWFkZXJzID0ge307XHJcblxyXG4gICAgICAgICAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJhc2VVcmwpIHtcclxuICAgICAgICAgICAgICAgIGxldCBiYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBiYXNlVXJsID09PSBcImZ1bmN0aW9uXCIpIGJhc2VVcmwgPSBhd2FpdCBiYXNlVXJsKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYmFzZVVybC5lbmRzV2l0aChcIi9cIikpIGJhc2VVcmwgPSBiYXNlVXJsLnNsaWNlKDAsIC0xKTtcclxuICAgICAgICAgICAgICAgIHVybCA9IGJhc2VVcmwgKyAocGF0aCBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdXJsID0gKGF3YWl0IGJhc2VVcmwpICsgKHBhdGggYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCEocGF0aCBhcyBzdHJpbmcpLmVuZHNXaXRoKFwiflwiKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gYWN0aW9uXHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWFkZXJzLkFjY2VwdCA9PT0gdW5kZWZpbmVkKSBvcHRpb25zLmhlYWRlcnMuQWNjZXB0ID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID09PSB1bmRlZmluZWQpIG9wdGlvbnMuaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdDogeyB2YWx1ZTogUmVjb3JkPGFueSwgYW55PiB9O1xyXG5cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXZlbnRNYW5hZ2VyLmVtaXQoXCJtaWxraW86ZXhlY3V0ZUJlZm9yZVwiLCB7IHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucGFyYW1zKSA/PyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGV2ZW50TWFuYWdlci5lbWl0KFwibWlsa2lvOmZldGNoQmVmb3JlXCIsIHsgcGF0aDogcGF0aCBhcyBzdHJpbmcsIG9wdGlvbnM6IG9wdGlvbnMgYXMgYW55LCBib2R5IH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvclxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbmV3IFByb21pc2U8c3RyaW5nPihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSBvcHRpb25zPy50aW1lb3V0ID8/IG9wdGlvbnM/LnRpbWVvdXQgPz8gNjAwMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChbeyBSRVFVRVNUX1RJTUVPVVQ6IHsgdGltZW91dCwgbWVzc2FnZTogYEV4ZWN1dGUgdGltZW91dCBhZnRlciAke3RpbWVvdXR9bXMuYCB9IH0sIG51bGxdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGltZW91dCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCAoYXdhaXQgJGZldGNoKHVybCwgeyBtZXRob2Q6IFwiUE9TVFwiLCBib2R5LCBoZWFkZXJzOiBvcHRpb25zLmhlYWRlcnMgfSkpLnRleHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB7IHZhbHVlOiByZXZpdmVKU09OUGFyc2UoSlNPTi5wYXJzZShyZXNwb25zZSkpIH07XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yPy5bMF0/LlJFUVVFU1RfVElNRU9VVCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBldmVudE1hbmFnZXIuZW1pdChcIm1pbGtpbzpleGVjdXRlRXJyb3JcIiwgeyBoYW5kbGVFcnJvciwgcGF0aDogcGF0aCBhcyBzdHJpbmcsIG9wdGlvbnM6IG9wdGlvbnMgYXMgYW55LCBlcnJvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvclBpbmVkID0geyBSRVFVRVNUX0ZBSUw6IGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXZlbnRNYW5hZ2VyLmVtaXQoXCJtaWxraW86ZXhlY3V0ZUVycm9yXCIsIHsgaGFuZGxlRXJyb3IsIHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSwgZXJyb3I6IGVycm9yUGluZWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtlcnJvclBpbmVkLCBudWxsLCB7IGV4ZWN1dGVJZDogXCJ1bmtub3duXCIgfV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnZhbHVlLnN1Y2Nlc3MgIT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvcjogYW55ID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JbcmVzdWx0LnZhbHVlLmNvZGVdID0gcmVzdWx0LnZhbHVlLnJlamVjdCA/PyBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGV2ZW50TWFuYWdlci5lbWl0KFwibWlsa2lvOmV4ZWN1dGVFcnJvclwiLCB7IGhhbmRsZUVycm9yLCBwYXRoOiBwYXRoIGFzIHN0cmluZywgb3B0aW9uczogb3B0aW9ucyBhcyBhbnksIGVycm9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbZXJyb3IsIG51bGwsIHsgZXhlY3V0ZUlkOiBcInVua25vd25cIiB9XTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW251bGwsIHJlc3VsdC52YWx1ZS5kYXRhLCB7IGV4ZWN1dGVJZDogcmVzdWx0LnZhbHVlLmV4ZWN1dGVJZCB9XSBhcyBhbnk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzdHJlYW1cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmhlYWRlcnMuQWNjZXB0ID09PSB1bmRlZmluZWQpIG9wdGlvbnMuaGVhZGVycy5BY2NlcHQgPSBcInRleHQvZXZlbnQtc3RyZWFtXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID09PSB1bmRlZmluZWQpIG9wdGlvbnMuaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrczogTWFwPFxyXG4gICAgICAgICAgICAgICAgICAgIG51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IGJvb2xlYW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2U6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8YW55Pj47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmU6ICh2YWx1ZTogSXRlcmF0b3JSZXN1bHQ8YW55PikgPT4gdm9pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0OiAocmVhc29uOiBhbnkpID0+IHZvaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPiA9IG5ldyBNYXAoKTtcclxuICAgICAgICAgICAgICAgIGxldCBzdGFja3NJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXRlcmF0b3JJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3RyZWFtUmVzdWx0OiBhbnk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW1SZXN1bHRGZXRjaGVkID0gd2l0aFJlc29sdmVyczx1bmRlZmluZWQ+KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdGltZW91dCA9IHN0YXJnYXRlT3B0aW9ucz8udGltZW91dCA/PyBvcHRpb25zPy50aW1lb3V0ID8/IDYwMDA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdEZldGNoZWQucmVqZWN0KFt7IFJFUVVFU1RfVElNRU9VVDogeyB0aW1lb3V0LCBtZXNzYWdlOiBgRXhlY3V0ZSB0aW1lb3V0IGFmdGVyICR7dGltZW91dH1tcy5gIH0gfSwgbnVsbCwgeyBleGVjdXRlSWQ6IFwidW5rbm93blwiIH1dKTtcclxuICAgICAgICAgICAgICAgIH0sIHRpbWVvdXQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG9ubWVzc2FnZSA9IChldmVudDogRXZlbnRTb3VyY2VNZXNzYWdlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEuc3RhcnRzV2l0aChcIkBcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdCA9IHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKGV2ZW50LmRhdGEuc2xpY2UoMSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdEZldGNoZWQucmVzb2x2ZSh1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdEZldGNoZWQucmVqZWN0KFt7IFJFUVVFU1RfRkFJTDogZXJyb3IgfSwgbnVsbCwgeyBleGVjdXRlSWQ6IFwidW5rbm93blwiIH1dKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9ICsrc3RhY2tzSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja3MuaGFzKGluZGV4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2sgPSBzdGFja3MuZ2V0KGluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrIS5kb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrIS5yZXNvbHZlKHsgZG9uZTogZmFsc2UsIHZhbHVlOiByZXZpdmVKU09OUGFyc2UoSlNPTi5wYXJzZShldmVudC5kYXRhKSkgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnJlc29sdmUoeyBkb25lOiBmYWxzZSwgdmFsdWU6IHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKGV2ZW50LmRhdGEpKSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrcy5zZXQoaW5kZXgsIHsgLi4uc3RhY2ssIGRvbmU6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY3VyUmVxdWVzdENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcjtcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBjcmVhdGUoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VyUmVxdWVzdENvbnRyb2xsZXIgPSBuZXcgJGFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnJldHVybigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGV2ZW50TWFuYWdlci5lbWl0KFwibWlsa2lvOmV4ZWN1dGVCZWZvcmVcIiwgeyBwYXRoOiBwYXRoIGFzIHN0cmluZywgb3B0aW9uczogb3B0aW9ucyBhcyBhbnkgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucyEucGFyYW1zKSA/PyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBldmVudE1hbmFnZXIuZW1pdChcIm1pbGtpbzpmZXRjaEJlZm9yZVwiLCB7IHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSwgYm9keSB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgJGZldGNoKHVybCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IG9wdGlvbnMhLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250ZW50VHlwZT8uc3RhcnRzV2l0aChcInRleHQvZXZlbnQtc3RyZWFtXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGNvbnRlbnQtdHlwZSB0byBiZSAke1widGV4dC9ldmVudC1zdHJlYW1cIn0sIEFjdHVhbDogJHtjb250ZW50VHlwZX1gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ2V0Qnl0ZXMocmVzcG9uc2UuYm9keSEsIGdldExpbmVzKGdldE1lc3NhZ2VzKG9ubWVzc2FnZSkpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1clJlcXVlc3RDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSBjdXJSZXF1ZXN0Q29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHsgUkVRVUVTVF9GQUlMOiBlcnIgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXZlbnRNYW5hZ2VyLmVtaXQoXCJtaWxraW86ZXhlY3V0ZUVycm9yXCIsIHsgaGFuZGxlRXJyb3IsIHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSwgZXJyb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGl0ZXJhdG9yLnRocm93KGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdEZldGNoZWQucmVqZWN0KFtlcnJvciwgbnVsbCwgeyBleGVjdXRlSWQ6IFwidW5rbm93blwiIH1dKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdm9pZCBjcmVhdGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVyYXRvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi4oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dW5rbm93bj4+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKytpdGVyYXRvckluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrcy5oYXMoaW5kZXggLSAyKSkgc3RhY2tzLmRlbGV0ZShpbmRleCAtIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFja3MuaGFzKGluZGV4KSAmJiAhY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja3Muc2V0KGluZGV4LCB7IC4uLnN0YWNrLCBkb25lOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tzLmhhcyhpbmRleCkgJiYgY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5yZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFja3MuZ2V0KGluZGV4KSEucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgcmV0dXJuKCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dm9pZD4+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIGN1clJlcXVlc3RDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfLCBpdGVyYXRvcl0gb2Ygc3RhY2tzKSBpdGVyYXRvci5yZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgdGhyb3coZXJyOiBhbnkpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PHZvaWQ+PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1SZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUlkOiBzdHJlYW1SZXN1bHQ/LmV4ZWN1dGVJZCA/PyBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJORVRXT1JLX0VSUk9SXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiTmV0d29yayBFcnJvclwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tQ2xpZW50OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBlcnIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfaW5kZXgsIHN0YWNrXSBvZiBzdGFja3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suZG9uZSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suZG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1clJlcXVlc3RDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSBjdXJSZXF1ZXN0Q29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbXywgaXRlcmF0b3JdIG9mIHN0YWNrcykgaXRlcmF0b3IucmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSBzYXRpc2ZpZXMgQXN5bmNJdGVyYXRvcjx1bmtub3duPiksXHJcbiAgICAgICAgICAgICAgICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzdHJlYW1SZXN1bHRGZXRjaGVkLnByb21pc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtudWxsLCBpdGVyYXRvciwgeyBleGVjdXRlSWQ6IHN0cmVhbVJlc3VsdC5leGVjdXRlSWQgfV0gYXMgYW55O1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IgYXMgYW55O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBfX2Nvb2tib29rOiB7XHJcbiAgICAgICAgICAgIHN1YnNjcmliZTogYXN5bmMgKGJhc2VVcmw6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcclxuICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgICAgICBBY2NlcHQ6IFwidGV4dC9ldmVudC1zdHJlYW1cIixcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zKSA/PyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhY2tzOiBNYXA8XHJcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogYm9vbGVhbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxhbnk+PjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTogKHZhbHVlOiBJdGVyYXRvclJlc3VsdDxhbnk+KSA9PiB2b2lkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3Q6IChyZWFzb246IGFueSkgPT4gdm9pZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA+ID0gbmV3IE1hcCgpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHN0YWNrc0luZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIGxldCBpdGVyYXRvckluZGV4ID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbm1lc3NhZ2UgPSAoZXZlbnQ6IEV2ZW50U291cmNlTWVzc2FnZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKytzdGFja3NJbmRleDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tzLmhhcyhpbmRleCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2sgPSBzdGFja3MuZ2V0KGluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2shLnJlc29sdmUoeyBkb25lOiBmYWxzZSwgdmFsdWU6IHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKGV2ZW50LmRhdGEpKSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogcmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UoZXZlbnQuZGF0YSkpIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja3Muc2V0KGluZGV4LCB7IC4uLnN0YWNrLCBkb25lOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjdXJSZXF1ZXN0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyO1xyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZSgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJSZXF1ZXN0Q29udHJvbGxlciA9IG5ldyAkYWJvcnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IucmV0dXJuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCAkZmV0Y2goYCR7YmFzZVVybH0vJHN1YnNjcmliZWAsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbDogY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJDb250ZW50LVR5cGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29udGVudFR5cGU/LnN0YXJ0c1dpdGgoXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBjb250ZW50LXR5cGUgdG8gYmUgJHtcInRleHQvZXZlbnQtc3RyZWFtXCJ9LCBBY3R1YWw6ICR7Y29udGVudFR5cGV9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGdldEJ5dGVzKHJlc3BvbnNlLmJvZHkhLCBnZXRMaW5lcyhnZXRNZXNzYWdlcyhvbm1lc3NhZ2UpKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBpdGVyYXRvci5yZXR1cm4oKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkgY3VyUmVxdWVzdENvbnRyb2xsZXIuYWJvcnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaXRlcmF0b3IudGhyb3coZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdm9pZCBjcmVhdGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVyYXRvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi4oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dW5rbm93bj4+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKytpdGVyYXRvckluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrcy5oYXMoaW5kZXggLSAyKSkgc3RhY2tzLmRlbGV0ZShpbmRleCAtIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFja3MuaGFzKGluZGV4KSAmJiAhY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja3Muc2V0KGluZGV4LCB7IC4uLnN0YWNrLCBkb25lOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tzLmhhcyhpbmRleCkgJiYgY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5yZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFja3MuZ2V0KGluZGV4KSEucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgcmV0dXJuKCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dm9pZD4+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIGN1clJlcXVlc3RDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfLCBpdGVyYXRvcl0gb2Ygc3RhY2tzKSBpdGVyYXRvci5yZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgdGhyb3coZXJyOiBhbnkpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PHZvaWQ+PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1clJlcXVlc3RDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSBjdXJSZXF1ZXN0Q29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbXywgaXRlcmF0b3JdIG9mIHN0YWNrcykgaXRlcmF0b3IucmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSBzYXRpc2ZpZXMgQXN5bmNJdGVyYXRvcjx1bmtub3duPiksXHJcbiAgICAgICAgICAgICAgICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3I7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvciBhcyBhbnk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhc3luYyBwaW5nKG9wdGlvbnM/OiB7IHRpbWVvdXQ/OiBudW1iZXIgfSk6IFByb21pc2U8UGluZz4ge1xyXG4gICAgICAgICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvclxyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8UGluZz4oYXN5bmMgKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IGAke2F3YWl0IGJhc2VVcmx9L2dlbmVyYXRlXzIwNGA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0ID0gc3RhcmdhdGVPcHRpb25zPy50aW1lb3V0ID8/IG9wdGlvbnM/LnRpbWVvdXQgPz8gNjAwMDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0c1RpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRzVGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShbeyBjb25uZWN0OiBmYWxzZSwgZGVsYXk6IGVuZHNUaW1lIC0gc3RhcnRzVGltZSwgZXJyb3I6IHsgUkVRVUVTVF9USU1FT1VUOiB7IHRpbWVvdXQsIG1lc3NhZ2U6IGBFeGVjdXRlIHRpbWVvdXQgYWZ0ZXIgJHt0aW1lb3V0fW1zLmAgfSB9IH0sIG51bGxdKTtcclxuICAgICAgICAgICAgICAgIH0sIHRpbWVvdXQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCAkZmV0Y2godXJsLCB7IG1ldGhvZDogXCJIRUFEXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kc1RpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoW3sgY29ubmVjdDogZmFsc2UsIGRlbGF5OiBlbmRzVGltZSAtIHN0YXJ0c1RpbWUsIGVycm9yOiB7IFJFUVVFU1RfRkFJTDogeyByZXNwb25zZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIG1lc3NhZ2U6IFwiU3RhdHVzIGNvZGUgbm90IDIwNFwiIH0gfSB9LCBudWxsXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFtudWxsLCB7IGNvbm5lY3Q6IHRydWUsIGRlbGF5OiBlbmRzVGltZSAtIHN0YXJ0c1RpbWUsIHNlcnZlclRpbWVzdGFtcDogTnVtYmVyKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpIS5zdWJzdHJpbmcoMTcpKSB9XSk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kc1RpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbeyBjb25uZWN0OiBmYWxzZSwgZGVsYXk6IGVuZHNUaW1lIC0gc3RhcnRzVGltZSwgZXJyb3IgfSwgbnVsbF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdHlwZXM6IHtcclxuICAgICAgICAgICAgZXJyb3I8UGF0aCBleHRlbmRzIGtleW9mIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdPihwYXRoOiBQYXRoKTogR2VuZXJhdGVkW1wicmVqZWN0Q29kZVwiXSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHJldHJpZXZlIHR5cGVzIGFuZCBjYW5ub3QgYmUgYWN0dWFsbHkgZXhlY3V0ZWQuXCIpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwYXJhbXM8UGF0aCBleHRlbmRzIGtleW9mIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdPihwYXRoOiBQYXRoKTogR2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1bUGF0aF1bXCJ0eXBlc1wiXVtcInBhcmFtc1wiXSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHJldHJpZXZlIHR5cGVzIGFuZCBjYW5ub3QgYmUgYWN0dWFsbHkgZXhlY3V0ZWQuXCIpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZXN1bHRzPFBhdGggZXh0ZW5kcyBrZXlvZiBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXT4ocGF0aDogUGF0aCk6IEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCLwn6WbXCJdIGV4dGVuZHMgYm9vbGVhblxyXG4gICAgICAgICAgICAgICAgPyAvLyBhY3Rpb25cclxuICAgICAgICAgICAgICAgIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCJyZXN1bHRcIl1cclxuICAgICAgICAgICAgICAgIDogLy8gc3RyZWFtXHJcbiAgICAgICAgICAgICAgICBBc3luY0dlbmVyYXRvcjxbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbF0gfCBbbnVsbCwgR2VuZXJhdG9yR2VuZXJpYzxHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicmVzdWx0XCJdPl0sIHVuZGVmaW5lZD4ge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBtZXRob2QgaXMgdXNlZCB0byByZXRyaWV2ZSB0eXBlcyBhbmQgY2Fubm90IGJlIGFjdHVhbGx5IGV4ZWN1dGVkLlwiKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gc3RhcmdhdGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJldml2ZUpTT05QYXJzZTxUPihqc29uOiBUKTogVCB7XHJcbiAgICBjb25zdCBpc29EYXRlUGF0dGVybiA9IC9eKFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9KD86XFwuXFxkezEsM30pPykoWnxbKy1dXFxkezJ9Oj9cXGR7Mn0pPyQvO1xyXG5cclxuICAgIGlmIChqc29uIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIGpzb247XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShqc29uKSkge1xyXG4gICAgICAgIHJldHVybiBqc29uLm1hcCgoaXRlbSkgPT4gcmV2aXZlSlNPTlBhcnNlKGl0ZW0pKSBhcyBhbnk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGpzb24gPT09IFwib2JqZWN0XCIgJiYganNvbiAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhqc29uKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgIGFjY1trZXkgYXMga2V5b2YgVF0gPSByZXZpdmVKU09OUGFyc2UodmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgIH0sIHt9IGFzIFQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBqc29uID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBqc29uLm1hdGNoKGlzb0RhdGVQYXR0ZXJuKTtcclxuICAgICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZERhdGVTdHJpbmcgPSBtYXRjaFsyXSA/IGAke21hdGNoWzFdfSR7bWF0Y2hbMl0ucmVwbGFjZShcIjpcIiwgXCJcIil9YCA6IGAke21hdGNoWzFdfVpgO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUobm9ybWFsaXplZERhdGVTdHJpbmcpIGFzIGFueTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ganNvbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRlU3RyZWFtT3B0aW9ucyB7XHJcbiAgICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxuICAgIHRpbWVvdXQ/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXBpU2NoZW1hRXh0ZW5kIHtcclxuICAgIGFwaVZhbGlkYXRvcjoge1xyXG4gICAgICAgIGdlbmVyYXRlZEF0OiBudW1iZXI7XHJcbiAgICAgICAgdmFsaWRhdGU6IFJlY29yZDxhbnksIGFueT47XHJcbiAgICB9O1xyXG4gICAgYXBpTWV0aG9kc1NjaGVtYTogUmVjb3JkPGFueSwgYW55PjtcclxuICAgIGFwaU1ldGhvZHNUeXBlU2NoZW1hOiBSZWNvcmQ8YW55LCBhbnk+O1xyXG4gICAgYXBpVGVzdHNTY2hlbWE6IFJlY29yZDxhbnksIGFueT47XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEZhaWxDb2RlRXh0ZW5kID0gUmVjb3JkPGFueSwgKC4uLmFyZ3M6IEFycmF5PGFueT4pID0+IGFueT47XHJcblxyXG5leHBvcnQgdHlwZSBCb290c3RyYXBNaWRkbGV3YXJlID0gKGRhdGE6IHsgc3RvcmFnZTogQ2xpZW50U3RvcmFnZSB9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcclxuZXhwb3J0IHR5cGUgQmVmb3JlRXhlY3V0ZU1pZGRsZXdhcmUgPSAoZGF0YTogeyBwYXRoOiBzdHJpbmc7IHBhcmFtczogYW55OyBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+OyBzdG9yYWdlOiBDbGllbnRTdG9yYWdlIH0pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xyXG5leHBvcnQgdHlwZSBBZnRlckV4ZWN1dGVNaWRkbGV3YXJlID0gKGRhdGE6IHsgcGF0aDogc3RyaW5nOyByZXN1bHQ6IHsgdmFsdWU6IGFueSB9OyBzdG9yYWdlOiBDbGllbnRTdG9yYWdlIH0pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNaWRkbGV3YXJlT3B0aW9ucyB7XHJcbiAgICBib290c3RyYXA/OiBCb290c3RyYXBNaWRkbGV3YXJlO1xyXG4gICAgYmVmb3JlRXhlY3V0ZT86IEJlZm9yZUV4ZWN1dGVNaWRkbGV3YXJlO1xyXG4gICAgYWZ0ZXJFeGVjdXRlPzogQWZ0ZXJFeGVjdXRlTWlkZGxld2FyZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDbGllbnRTdG9yYWdlIHtcclxuICAgIGdldEl0ZW06IChrZXk6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmcgfCBudWxsPjtcclxuICAgIHNldEl0ZW06IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcclxuICAgIHJlbW92ZUl0ZW06IChrZXk6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRlUmVzdWx0U3VjY2VzczxSZXN1bHQ+IHtcclxuICAgIGV4ZWN1dGVJZDogc3RyaW5nO1xyXG4gICAgc3VjY2VzczogdHJ1ZTtcclxuICAgIGRhdGE6IFJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgR2VuZXJhdG9yR2VuZXJpYzxUPiA9IFQgZXh0ZW5kcyBBc3luY0dlbmVyYXRvcjxpbmZlciBJPiA/IEkgOiBuZXZlcjtcclxuXHJcbmV4cG9ydCB0eXBlIEZsYXR0ZW5LZXlzPFQsIFByZWZpeCBleHRlbmRzIHN0cmluZyA9IFwiXCI+ID0ge1xyXG4gICAgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBvYmplY3QgPyBGbGF0dGVuS2V5czxUW0tdLCBgJHtQcmVmaXh9JHtFeGNsdWRlPEssIHN5bWJvbD59LmA+IDogYCRpbnB1dC4ke1ByZWZpeH0ke0V4Y2x1ZGU8Sywgc3ltYm9sPn1gO1xyXG59W2tleW9mIFRdO1xyXG5cclxuLy8gKioqIFRoaXMgcGFydCBvZiB0aGUgY29kZSBpcyBiYXNlZCBvbiBgQG1pY3Jvc29mdC9mZXRjaC1ldmVudC1zb3VyY2VgIHJld3JpdGUsIHRoYW5rcyB0byB0aGUgd29yayBvZiBNaWNyb3NvZnQgKioqIC8vXHJcbi8vICoqKiBodHRwczovL2dpdGh1Yi5jb20vQXp1cmUvZmV0Y2gtZXZlbnQtc291cmNlL2Jsb2IvbWFpbi9zcmMvcGFyc2UudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiAvL1xyXG5cclxuLyoqXHJcbiAqIFJlcHJlc2VudHMgYSBtZXNzYWdlIHNlbnQgaW4gYW4gZXZlbnQgc3RyZWFtXHJcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TZXJ2ZXItc2VudF9ldmVudHMvVXNpbmdfc2VydmVyLXNlbnRfZXZlbnRzI0V2ZW50X3N0cmVhbV9mb3JtYXRcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRTb3VyY2VNZXNzYWdlIHtcclxuICAgIGRhdGE6IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIGEgUmVhZGFibGVTdHJlYW0gaW50byBhIGNhbGxiYWNrIHBhdHRlcm4uXHJcbiAqIEBwYXJhbSBzdHJlYW0gVGhlIGlucHV0IFJlYWRhYmxlU3RyZWFtLlxyXG4gKiBAcGFyYW0gb25DaHVuayBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBuZXcgYnl0ZSBjaHVuayBpbiB0aGUgc3RyZWFtLlxyXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgd2lsbCBiZSByZXNvbHZlZCB3aGVuIHRoZSBzdHJlYW0gY2xvc2VzLlxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJ5dGVzKHN0cmVhbTogUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4sIG9uQ2h1bms6IChhcnI6IFVpbnQ4QXJyYXkpID0+IHZvaWQpIHtcclxuICAgIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKTtcclxuICAgIGxldCByZXN1bHQ6IFJlYWRhYmxlU3RyZWFtUmVhZFJlc3VsdDxVaW50OEFycmF5PjtcclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIHdoaWxlICghKHJlc3VsdCA9IGF3YWl0IHJlYWRlci5yZWFkKCkpLmRvbmUpIHtcclxuICAgICAgICBvbkNodW5rKHJlc3VsdC52YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXJzZXMgYXJiaXRhcnkgYnl0ZSBjaHVua3MgaW50byBFdmVudFNvdXJjZSBsaW5lIGJ1ZmZlcnMuXHJcbiAqIEVhY2ggbGluZSBzaG91bGQgYmUgb2YgdGhlIGZvcm1hdCBcImZpZWxkOiB2YWx1ZVwiIGFuZCBlbmRzIHdpdGggXFxyLCBcXG4sIG9yIFxcclxcbi5cclxuICogQHBhcmFtIG9uTGluZSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBuZXcgRXZlbnRTb3VyY2UgbGluZS5cclxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQgZm9yIGVhY2ggaW5jb21pbmcgYnl0ZSBjaHVuay5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaW5lcyhvbkxpbmU6IChsaW5lOiBVaW50OEFycmF5LCBmaWVsZExlbmd0aDogbnVtYmVyKSA9PiB2b2lkKSB7XHJcbiAgICBsZXQgYnVmZmVyOiBVaW50OEFycmF5IHwgdW5kZWZpbmVkO1xyXG4gICAgbGV0IHBvc2l0aW9uOiBudW1iZXI7IC8vIGN1cnJlbnQgcmVhZCBwb3NpdGlvblxyXG4gICAgbGV0IGZpZWxkTGVuZ3RoOiBudW1iZXI7IC8vIGxlbmd0aCBvZiB0aGUgYGZpZWxkYCBwb3J0aW9uIG9mIHRoZSBsaW5lXHJcbiAgICBsZXQgZGlzY2FyZFRyYWlsaW5nTmV3bGluZSA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHJldHVybiBhIGZ1bmN0aW9uIHRoYXQgY2FuIHByb2Nlc3MgZWFjaCBpbmNvbWluZyBieXRlIGNodW5rOlxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG9uQ2h1bmsoYXJyOiBVaW50OEFycmF5KSB7XHJcbiAgICAgICAgaWYgKGJ1ZmZlciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlciA9IGFycjtcclxuICAgICAgICAgICAgcG9zaXRpb24gPSAwO1xyXG4gICAgICAgICAgICBmaWVsZExlbmd0aCA9IC0xO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHdlJ3JlIHN0aWxsIHBhcnNpbmcgdGhlIG9sZCBsaW5lLiBBcHBlbmQgdGhlIG5ldyBieXRlcyBpbnRvIGJ1ZmZlcjpcclxuICAgICAgICAgICAgYnVmZmVyID0gY29uY2F0KGJ1ZmZlciwgYXJyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGJ1Zkxlbmd0aCA9IGJ1ZmZlci5sZW5ndGg7XHJcbiAgICAgICAgbGV0IGxpbmVTdGFydCA9IDA7IC8vIGluZGV4IHdoZXJlIHRoZSBjdXJyZW50IGxpbmUgc3RhcnRzXHJcbiAgICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYnVmTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGlmIChkaXNjYXJkVHJhaWxpbmdOZXdsaW5lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYnVmZmVyW3Bvc2l0aW9uXSA9PT0gMTApIHtcclxuICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSArK3Bvc2l0aW9uOyAvLyBza2lwIHRvIG5leHQgY2hhclxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGRpc2NhcmRUcmFpbGluZ05ld2xpbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gc3RhcnQgbG9va2luZyBmb3J3YXJkIHRpbGwgdGhlIGVuZCBvZiBsaW5lOlxyXG4gICAgICAgICAgICBsZXQgbGluZUVuZCA9IC0xOyAvLyBpbmRleCBvZiB0aGUgXFxyIG9yIFxcbiBjaGFyXHJcbiAgICAgICAgICAgIGZvciAoOyBwb3NpdGlvbiA8IGJ1Zkxlbmd0aCAmJiBsaW5lRW5kID09PSAtMTsgKytwb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChidWZmZXJbcG9zaXRpb25dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1ODpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkTGVuZ3RoID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3QgY29sb24gaW4gbGluZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRMZW5ndGggPSBwb3NpdGlvbiAtIGxpbmVTdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6IDxleHBsYW5hdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNjYXJkVHJhaWxpbmdOZXdsaW5lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lRW5kID0gcG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobGluZUVuZCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIC8vIFdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGJ1dCB0aGUgbGluZSBoYXNuJ3QgZW5kZWQuXHJcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgbmV4dCBhcnIgYW5kIHRoZW4gY29udGludWUgcGFyc2luZzpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyB3ZSd2ZSByZWFjaGVkIHRoZSBsaW5lIGVuZCwgc2VuZCBpdCBvdXQ6XHJcbiAgICAgICAgICAgIG9uTGluZShidWZmZXIuc3ViYXJyYXkobGluZVN0YXJ0LCBsaW5lRW5kKSwgZmllbGRMZW5ndGgpO1xyXG4gICAgICAgICAgICBsaW5lU3RhcnQgPSBwb3NpdGlvbjsgLy8gd2UncmUgbm93IG9uIHRoZSBuZXh0IGxpbmVcclxuICAgICAgICAgICAgZmllbGRMZW5ndGggPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChsaW5lU3RhcnQgPT09IGJ1Zkxlbmd0aCkge1xyXG4gICAgICAgICAgICBidWZmZXIgPSB1bmRlZmluZWQ7IC8vIHdlJ3ZlIGZpbmlzaGVkIHJlYWRpbmcgaXRcclxuICAgICAgICB9IGVsc2UgaWYgKGxpbmVTdGFydCAhPT0gMCkge1xyXG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgdmlldyBpbnRvIGJ1ZmZlciBiZWdpbm5pbmcgYXQgbGluZVN0YXJ0IHNvIHdlIGRvbid0XHJcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gY29weSBvdmVyIHRoZSBwcmV2aW91cyBsaW5lcyB3aGVuIHdlIGdldCB0aGUgbmV3IGFycjpcclxuICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KGxpbmVTdGFydCk7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uIC09IGxpbmVTdGFydDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG4vKipcclxuICogUGFyc2VzIGxpbmUgYnVmZmVycyBpbnRvIEV2ZW50U291cmNlTWVzc2FnZXMuXHJcbiAqIEBwYXJhbSBvbklkIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGBpZGAgZmllbGQuXHJcbiAqIEBwYXJhbSBvblJldHJ5IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGByZXRyeWAgZmllbGQuXHJcbiAqIEBwYXJhbSBvbk1lc3NhZ2UgQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggbWVzc2FnZS5cclxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQgZm9yIGVhY2ggaW5jb21pbmcgbGluZSBidWZmZXIuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVzc2FnZXMob25NZXNzYWdlPzogKG1zZzogRXZlbnRTb3VyY2VNZXNzYWdlKSA9PiB2b2lkKSB7XHJcbiAgICBsZXQgbWVzc2FnZSA9IG5ld01lc3NhZ2UoKTtcclxuICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcclxuXHJcbiAgICAvLyByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IGNhbiBwcm9jZXNzIGVhY2ggaW5jb21pbmcgbGluZSBidWZmZXI6XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gb25MaW5lKGxpbmU6IFVpbnQ4QXJyYXksIGZpZWxkTGVuZ3RoOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAobGluZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgLy8gZW1wdHkgbGluZSBkZW5vdGVzIGVuZCBvZiBtZXNzYWdlLiBUcmlnZ2VyIHRoZSBjYWxsYmFjayBhbmQgc3RhcnQgYSBuZXcgbWVzc2FnZTpcclxuICAgICAgICAgICAgb25NZXNzYWdlPy4obWVzc2FnZSk7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBuZXdNZXNzYWdlKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZExlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgLy8gZXhjbHVkZSBjb21tZW50cyBhbmQgbGluZXMgd2l0aCBubyB2YWx1ZXNcclxuICAgICAgICAgICAgLy8gbGluZSBpcyBvZiBmb3JtYXQgXCI8ZmllbGQ+Ojx2YWx1ZT5cIiBvciBcIjxmaWVsZD46IDx2YWx1ZT5cIlxyXG4gICAgICAgICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZXJ2ZXItc2VudC1ldmVudHMuaHRtbCNldmVudC1zdHJlYW0taW50ZXJwcmV0YXRpb25cclxuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBkZWNvZGVyLmRlY29kZShsaW5lLnN1YmFycmF5KDAsIGZpZWxkTGVuZ3RoKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlT2Zmc2V0ID0gZmllbGRMZW5ndGggKyAobGluZVtmaWVsZExlbmd0aCArIDFdID09PSAzMiA/IDIgOiAxKTtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkZWNvZGVyLmRlY29kZShsaW5lLnN1YmFycmF5KHZhbHVlT2Zmc2V0KSk7XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGF0YVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgbWVzc2FnZSBhbHJlYWR5IGhhcyBkYXRhLCBhcHBlbmQgdGhlIG5ldyB2YWx1ZSB0byB0aGUgb2xkLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSwganVzdCBzZXQgdG8gdGhlIG5ldyB2YWx1ZTpcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRhdGEgPSBtZXNzYWdlLmRhdGEgPyBgJHttZXNzYWdlLmRhdGF9XFxuJHt2YWx1ZX1gIDogdmFsdWU7IC8vIG90aGVyd2lzZSxcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbmNhdChhOiBVaW50OEFycmF5LCBiOiBVaW50OEFycmF5KSB7XHJcbiAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShhLmxlbmd0aCArIGIubGVuZ3RoKTtcclxuICAgIHJlcy5zZXQoYSk7XHJcbiAgICByZXMuc2V0KGIsIGEubGVuZ3RoKTtcclxuICAgIHJldHVybiByZXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5ld01lc3NhZ2UoKTogRXZlbnRTb3VyY2VNZXNzYWdlIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZGF0YTogXCJcIixcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB3aXRoUmVzb2x2ZXJzPFQgPSBhbnk+KCk6IFByb21pc2VXaXRoUmVzb2x2ZXJzPFQ+IHtcclxuICAgIGxldCByZXNvbHZlOiBQcm9taXNlV2l0aFJlc29sdmVyczxUPltcInJlc29sdmVcIl07XHJcbiAgICBsZXQgcmVqZWN0OiBQcm9taXNlV2l0aFJlc29sdmVyczxUPltcInJlamVjdFwiXTtcclxuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxUPigocmVzLCByZWopID0+IHtcclxuICAgICAgICByZXNvbHZlID0gcmVzO1xyXG4gICAgICAgIHJlamVjdCA9IHJlajtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHsgcHJvbWlzZSwgcmVzb2x2ZTogcmVzb2x2ZSEsIHJlamVjdDogcmVqZWN0ISB9O1xyXG59XHJcbiIKICBdLAogICJtYXBwaW5ncyI6ICI7QUFtQ0EsZUFBc0IsY0FBdUUsQ0FBQyxpQkFBd0M7QUFBQSxFQUNsSSxNQUFNLFNBQVMsZ0JBQWdCLFNBQVM7QUFBQSxFQUN4QyxNQUFNLFNBQVMsZ0JBQWdCLFNBQVM7QUFBQSxFQWF4QyxNQUFNLGNBQW1CLE9BQU8sT0FBWSxLQUFhLFlBQXdEO0FBQUEsSUFDN0csSUFBSSxPQUFPLE9BQU87QUFBQSxNQUNkLE1BQU0sVUFBVSxNQUFNLFFBQVEsTUFBTSxJQUFJO0FBQUEsTUFDeEMsSUFBSTtBQUFBLFFBQVMsT0FBTyxNQUFNO0FBQUEsSUFDOUI7QUFBQTtBQUFBLEVBR0osTUFBTSxxQkFBcUIsTUFBTTtBQUFBLElBQzdCLE1BQU0sV0FBVyxJQUFJO0FBQUEsSUFDckIsTUFBTSxVQUFVLElBQUk7QUFBQSxJQUVwQixNQUFNLGdCQUFlO0FBQUEsTUFDakIsSUFBSSxDQUF5RixLQUFVLFlBQXFCO0FBQUEsUUFDeEgsU0FBUyxJQUFJLFNBQVMsR0FBYTtBQUFBLFFBQ25DLElBQUksUUFBUSxJQUFJLEdBQWEsTUFBTSxPQUFPO0FBQUEsVUFDdEMsUUFBUSxJQUFJLEtBQWUsSUFBSSxHQUFLO0FBQUEsUUFDeEM7QUFBQSxRQUNBLE1BQU0sTUFBTSxRQUFRLElBQUksR0FBYTtBQUFBLFFBQ3JDLElBQUksSUFBSSxPQUFPO0FBQUEsUUFDZixTQUFTLElBQUksU0FBUyxHQUFhO0FBQUEsUUFFbkMsT0FBTyxNQUFNO0FBQUEsVUFDVCxTQUFTLE9BQU8sT0FBTztBQUFBLFVBQ3ZCLElBQUksT0FBTyxPQUFPO0FBQUE7QUFBQTtB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QUFRO0FBQUEsYUFDQztBQUFBLFVBR0QsUUFBUSxPQUFPLFFBQVEsT0FBTyxHQUFHLFFBQVE7QUFBQSxFQUFTLFVBQVU7QUFBQSxVQUM1RDtBQUFBO0FBQUEsSUFFWjtBQUFBO0FBQUE7QUFJUixTQUFTLE1BQU0sQ0FBQyxHQUFlLEdBQWU7QUFBQSxFQUMxQyxNQUFNLE1BQU0sSUFBSSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU07QUFBQSxFQUM5QyxJQUFJLElBQUksQ0FBQztBQUFBLEVBQ1QsSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNO0FBQUEsRUFDbkIsT0FBTztBQUFBO0FBR1gsU0FBUyxVQUFVLEdBQXVCO0FBQUEsRUFDdEMsT0FBTztBQUFBLElBQ0gsTUFBTTtBQUFBLEVBQ1Y7QUFBQTtBQUdHLFNBQVMsYUFBc0IsR0FBNEI7QUFBQSxFQUM5RCxJQUFJO0FBQUEsRUFDSixJQUFJO0FBQUEsRUFDSixNQUFNLFVBQVUsSUFBSSxRQUFXLENBQUMsS0FBSyxRQUFRO0FBQUEsSUFDekMsVUFBVTtBQUFBLElBQ1YsU0FBUztBQUFBLEdBQ1o7QUFBQSxFQUNELE9BQU8sRUFBRSxTQUFTLFNBQW1CLE9BQWdCO0FBQUE7IiwKICAiZGVidWdJZCI6ICIxNTRCREU1MzNEQzMwNDQxNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@milkio/stargate","version":"1.0.0-beta.184","type":"module","exports":"./index.js","types":"./index.d.ts","dependencies":{}}
1
+ {"name":"@milkio/stargate","version":"1.0.0-beta.185","type":"module","exports":"./index.js","types":"./index.d.ts","dependencies":{}}