nextlove 2.14.0 → 2.14.1

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.
@@ -398,7 +398,7 @@ function parseNullable({
398
398
  }) {
399
399
  const schema = generateSchema(zodRef.unwrap(), useOutput);
400
400
  return merge(
401
- { ...schema, type: [schema.type, "null"] },
401
+ { ...schema, type: schema.type, nullable: true },
402
402
  parseDescription(zodRef),
403
403
  ...schemas
404
404
  );
@@ -1526,4 +1526,4 @@ export {
1526
1526
  generateOpenAPI,
1527
1527
  generateRouteTypes
1528
1528
  };
1529
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2dlbmVyYXRvcnMvaW5kZXgudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvZ2VuZXJhdGUtb3BlbmFwaS9pbmRleC50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9saWIvcGFyc2Utcm91dGVzLWluLXBhY2thZ2UudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvbGliL2RlZmF1bHQtbWFwLWZpbGUtcGF0aC10by1odHRwLXJvdXRlLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2xpYi96b2Qtb3BlbmFwaS50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9saWIvZnJvbnQtbWF0dGVyLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2dlbmVyYXRlLW9wZW5hcGkvZW1iZWQtc2NoZW1hLXJlZmVyZW5jZXMudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvZ2VuZXJhdGUtb3BlbmFwaS9mZXJuLXNkay11dGlscy50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9nZW5lcmF0ZS1yb3V0ZS10eXBlcy9pbmRleC50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9saWIvem9kLXRvLXRzLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2V4dHJhY3Qtcm91dGUtc3BlYy1zY2hlbWFzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJleHBvcnQgKiBmcm9tIFwiLi9nZW5lcmF0ZS1vcGVuYXBpXCJcbmV4cG9ydCAqIGZyb20gXCIuL2dlbmVyYXRlLXJvdXRlLXR5cGVzXCJcbmV4cG9ydCAqIGZyb20gXCIuL2V4dHJhY3Qtcm91dGUtc3BlYy1zY2hlbWFzXCJcbiIsICJpbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0IHtcbiAgT3BlbkFwaUJ1aWxkZXIsXG4gIE9wZXJhdGlvbk9iamVjdCxcbiAgUGFyYW1ldGVyT2JqZWN0LFxufSBmcm9tIFwib3BlbmFwaTMtdHMvb2FzMzFcIlxuaW1wb3J0IHsgU2V0dXBQYXJhbXMgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgcGFyc2VSb3V0ZXNJblBhY2thZ2UgfSBmcm9tIFwiLi4vbGliL3BhcnNlLXJvdXRlcy1pbi1wYWNrYWdlXCJcbmltcG9ydCB7IGdlbmVyYXRlU2NoZW1hIH0gZnJvbSBcIi4uL2xpYi96b2Qtb3BlbmFwaVwiXG5pbXBvcnQgeyBlbWJlZFNjaGVtYVJlZmVyZW5jZXMgfSBmcm9tIFwiLi9lbWJlZC1zY2hlbWEtcmVmZXJlbmNlc1wiXG5pbXBvcnQgeyBtYXBNZXRob2RzVG9GZXJuU2RrTWV0YWRhdGEgfSBmcm9tIFwiLi9mZXJuLXNkay11dGlsc1wiXG5cbmZ1bmN0aW9uIHJlcGxhY2VGaXJzdENoYXJUb0xvd2VyY2FzZShzdHI6IHN0cmluZykge1xuICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBzdHJcbiAgfVxuXG4gIGNvbnN0IGZpcnN0Q2hhciA9IHN0ci5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKVxuICByZXR1cm4gZmlyc3RDaGFyICsgc3RyLnNsaWNlKDEpXG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVBhdGhUb09wZXJhdGlvbklkKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnRzID0gcGF0aFxuICAgIC5yZXBsYWNlKC8tL2csIFwiX1wiKVxuICAgIC5zcGxpdChcIi9cIilcbiAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSBcIlwiKVxuICBjb25zdCB0cmFuc2Zvcm1lZFBhcnRzID0gcGFydHMubWFwKChwYXJ0KSA9PiB7XG4gICAgaWYgKHBhcnQuc3RhcnRzV2l0aChcIltcIikgJiYgcGFydC5lbmRzV2l0aChcIl1cIikpIHtcbiAgICAgIC8vIENvbnZlcnQgW3BhcmFtXSB0byBCeVBhcmFtXG4gICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHBhcnQuc2xpY2UoMSwgLTEpXG4gICAgICBjb25zdCB3b3JkcyA9IHNlcnZpY2VOYW1lLnNwbGl0KFwiX1wiKVxuICAgICAgY29uc3QgY2FwaXRhbGl6ZWRXb3JkcyA9IHdvcmRzLm1hcChcbiAgICAgICAgKHdvcmQpID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpXG4gICAgICApXG4gICAgICByZXR1cm4gYEJ5JHtjYXBpdGFsaXplZFdvcmRzLmpvaW4oXCJcIil9YFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb252ZXJ0IGFwaV9wYXRoIHRvIEFwaVBhdGhcbiAgICAgIGNvbnN0IHdvcmRzID0gcGFydC5zcGxpdChcIl9cIilcbiAgICAgIGNvbnN0IGNhcGl0YWxpemVkV29yZHMgPSB3b3Jkcy5tYXAoXG4gICAgICAgICh3b3JkKSA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKVxuICAgICAgKVxuICAgICAgcmV0dXJuIGNhcGl0YWxpemVkV29yZHMuam9pbihcIlwiKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gcmVwbGFjZUZpcnN0Q2hhclRvTG93ZXJjYXNlKHRyYW5zZm9ybWVkUGFydHMuam9pbihcIlwiKSlcbn1cblxuZnVuY3Rpb24gcGFzY2FsQ2FzZShpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgd29yZHMgPSBpbnB1dC5zcGxpdChcIiBcIilcbiAgY29uc3QgY2FwaXRhbGl6ZWRXb3JkcyA9IHdvcmRzLm1hcChcbiAgICAod29yZCkgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKVxuICApXG4gIGNvbnN0IHBhc2NhbENhc2VTdHJpbmcgPSBjYXBpdGFsaXplZFdvcmRzLmpvaW4oXCJcIilcbiAgcmV0dXJuIHBhc2NhbENhc2VTdHJpbmdcbn1cblxuaW50ZXJmYWNlIFRhZ09wdGlvbiB7XG4gIG5hbWU6IHN0cmluZ1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gIGRvZXNSb3V0ZUhhdmVUYWc/OiAocm91dGU6IHN0cmluZykgPT4gYm9vbGVhblxufVxuXG5pbnRlcmZhY2UgR2VuZXJhdGVPcGVuQVBJT3B0cyB7XG4gIHBhY2thZ2VEaXI6IHN0cmluZ1xuICBvdXRwdXRGaWxlPzogc3RyaW5nXG4gIHBhdGhHbG9iPzogc3RyaW5nXG4gIHRhZ3M/OiBBcnJheTxUYWdPcHRpb24+XG4gIGFwaVByZWZpeD86IHN0cmluZ1xuICBtYXBGaWxlUGF0aFRvSFRUUFJvdXRlPzogKGZpbGVfcGF0aDogc3RyaW5nKSA9PiBzdHJpbmdcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyBhbiBPcGVuQVBJIHNwZWMgZnJvbSB0aGUgTmV4dC5qcyBBUEkgcm91dGVzLlxuICpcbiAqIFlvdSBub3JtYWxseSBpbnZva2UgdGhpcyB3aXRoIGBuZXh0YXBpIGdlbmVyYXRlLW9wZW5hcGlgIGluIGFcbiAqIFwiYnVpbGQ6b3BlbmFwaVwiIHBhY2thZ2UuanNvbiBzY3JpcHQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU9wZW5BUEkob3B0czogR2VuZXJhdGVPcGVuQVBJT3B0cykge1xuICBjb25zdCBjaGFsayA9IChhd2FpdCBpbXBvcnQoXCJjaGFsa1wiKSkuZGVmYXVsdFxuICBjb25zdCB7IG91dHB1dEZpbGUsIHRhZ3MgPSBbXSB9ID0gb3B0c1xuXG4gIGNvbnN0IGZpbGVwYXRoVG9Sb3V0ZUZuID0gYXdhaXQgcGFyc2VSb3V0ZXNJblBhY2thZ2Uob3B0cylcblxuICAvLyBUT0RPIGRldGVjdCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgc2V0dXBzIGFuZCBvdXRwdXQgZGlmZmVyZW50IEFQSXNcbiAgY29uc3QgeyBzZXR1cFBhcmFtczogZ2xvYmFsU2V0dXBQYXJhbXMgfSA9IGZpbGVwYXRoVG9Sb3V0ZUZuLnZhbHVlcygpLm5leHQoKVxuICAgIC52YWx1ZSBhcyB7IHNldHVwUGFyYW1zOiBTZXR1cFBhcmFtcyB9XG5cbiAgY29uc3Qgc2VjdXJpdHlTY2hlbWVzID0gZ2xvYmFsU2V0dXBQYXJhbXMuc2VjdXJpdHlTY2hlbWFzID8/IHt9XG4gIGNvbnN0IHNlY3VyaXR5T2JqZWN0c0ZvckF1dGhUeXBlID0ge31cbiAgZm9yIChjb25zdCBhdXRoTmFtZSBvZiBPYmplY3Qua2V5cyhnbG9iYWxTZXR1cFBhcmFtcy5hdXRoTWlkZGxld2FyZU1hcCkpIHtcbiAgICBjb25zdCBtdyA9IGdsb2JhbFNldHVwUGFyYW1zLmF1dGhNaWRkbGV3YXJlTWFwW2F1dGhOYW1lXVxuICAgIGlmIChtdy5zZWN1cml0eVNjaGVtYSkge1xuICAgICAgc2VjdXJpdHlTY2hlbWVzW2F1dGhOYW1lXSA9IChtdyBhcyBhbnkpLnNlY3VyaXR5U2NoZW1hXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgY2hhbGsueWVsbG93KFxuICAgICAgICAgIGBBdXRoZW50aWNhdGlvbiBtaWRkbGV3YXJlIFwiJHthdXRoTmFtZX1cIiBoYXMgbm8gc2VjdXJpdHlTY2hlbWEuIFlvdSBjYW4gZGVmaW5lIHRoaXMgb24gdGhlIGZ1bmN0aW9uIChlLmcuIGFmdGVyIHRoZSBleHBvcnQgZG8uLi4gXFxuXFxubXlNaWRkbGV3YXJlLnNlY3VyaXR5U2NoZW1hID0ge1xcbiAgdHlwZTogXCJodHRwXCJcXG4gIHNjaGVtZTogXCJiZWFyZXJcIlxcbiAgYmVhcmVyRm9ybWF0OiBcIkpXVFwiXFxuIC8vIG9yIEFQSSBUb2tlbiBldGMuXFxufVxcblxcbllvdSBjYW4gYWxzbyBkZWZpbmUgXCJzZWN1cml0eU9iamVjdHNcIiB0aGlzIHdheSwgaWYgeW91IHdhbnQgdG8gbWFrZSB0aGUgZW5kcG9pbnQgc3VwcG9ydCBtdWx0aXBsZSBtb2RlcyBvZiBhdXRoZW50aWNhdGlvbi5cXG5cXG5gXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9XG5cbiAgICBzZWN1cml0eU9iamVjdHNGb3JBdXRoVHlwZVthdXRoTmFtZV0gPSAobXcgYXMgYW55KS5zZWN1cml0eU9iamVjdHMgfHwgW1xuICAgICAge1xuICAgICAgICBbYXV0aE5hbWVdOiBbXSxcbiAgICAgIH0sXG4gICAgXVxuICB9XG5cbiAgY29uc3QgZ2xvYmFsU2NoZW1hcyA9IHt9XG4gIGZvciAoY29uc3QgW3NjaGVtYU5hbWUsIHpvZFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgZ2xvYmFsU2V0dXBQYXJhbXMuZ2xvYmFsU2NoZW1hcyA/PyB7fVxuICApKSB7XG4gICAgZ2xvYmFsU2NoZW1hc1tzY2hlbWFOYW1lXSA9IGdlbmVyYXRlU2NoZW1hKHpvZFNjaGVtYSlcbiAgfVxuXG4gIC8vIEJ1aWxkIE9wZW5BUEkgc3BlY1xuICBjb25zdCBidWlsZGVyID0gT3BlbkFwaUJ1aWxkZXIuY3JlYXRlKHtcbiAgICBvcGVuYXBpOiBcIjMuMC4wXCIsXG4gICAgaW5mbzoge1xuICAgICAgdGl0bGU6IGdsb2JhbFNldHVwUGFyYW1zLmFwaU5hbWUsXG4gICAgICB2ZXJzaW9uOiBcIjEuMC4wXCIsXG4gICAgfSxcbiAgICBzZXJ2ZXJzOiBbXG4gICAgICB7XG4gICAgICAgIHVybDogZ2xvYmFsU2V0dXBQYXJhbXMucHJvZHVjdGlvblNlcnZlclVybCB8fCBcImh0dHBzOi8vZXhhbXBsZS5jb21cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICB0YWdzOiB0YWdzLm1hcCgodGFnKSA9PiAoeyBuYW1lOiB0YWcubmFtZSwgZGVzY3JpcHRpb246IHRhZy5kZXNjcmlwdGlvbiB9KSksXG4gICAgcGF0aHM6IHt9LFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIHNlY3VyaXR5U2NoZW1lcyxcbiAgICAgIHNjaGVtYXM6IGdsb2JhbFNjaGVtYXMsXG4gICAgfSxcbiAgfSlcblxuICBmb3IgKGNvbnN0IFtcbiAgICBmaWxlX3BhdGgsXG4gICAgeyBzZXR1cFBhcmFtcywgcm91dGVTcGVjLCByb3V0ZTogcm91dGVQYXRoIH0sXG4gIF0gb2YgZmlsZXBhdGhUb1JvdXRlRm4pIHtcbiAgICBjb25zdCBpc1Bvc3RPclB1dE9yUGF0Y2ggPSBbXCJQT1NUXCIsIFwiUFVUXCIsIFwiUEFUQ0hcIl0uc29tZSgobWV0aG9kKSA9PlxuICAgICAgcm91dGVTcGVjLm1ldGhvZHMuaW5jbHVkZXMobWV0aG9kKVxuICAgIClcbiAgICAvLyBUT0RPOiBzdXBwb3J0IG11bHRpcGFydC9mb3JtLWRhdGFcblxuICAgIC8vIGhhbmRsZSBib2R5XG4gICAgbGV0IGJvZHlfdG9fZ2VuZXJhdGVfc2NoZW1hXG4gICAgaWYgKGlzUG9zdE9yUHV0T3JQYXRjaCkge1xuICAgICAgYm9keV90b19nZW5lcmF0ZV9zY2hlbWEgPSByb3V0ZVNwZWMuanNvbkJvZHkgPz8gcm91dGVTcGVjLmNvbW1vblBhcmFtc1xuXG4gICAgICBpZiAocm91dGVTcGVjLmpzb25Cb2R5ICYmIHJvdXRlU3BlYy5jb21tb25QYXJhbXMpIHtcbiAgICAgICAgYm9keV90b19nZW5lcmF0ZV9zY2hlbWEgPSByb3V0ZVNwZWMuanNvbkJvZHkubWVyZ2UoXG4gICAgICAgICAgcm91dGVTcGVjLmNvbW1vblBhcmFtc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvZHlfdG9fZ2VuZXJhdGVfc2NoZW1hID0gcm91dGVTcGVjLmpzb25Cb2R5XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHF1ZXJ5XG4gICAgbGV0IHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYVxuICAgIGlmIChpc1Bvc3RPclB1dE9yUGF0Y2gpIHtcbiAgICAgIHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5xdWVyeVBhcmFtc1xuICAgIH0gZWxzZSB7XG4gICAgICBxdWVyeV90b19nZW5lcmF0ZV9zY2hlbWEgPSByb3V0ZVNwZWMucXVlcnlQYXJhbXMgPz8gcm91dGVTcGVjLmNvbW1vblBhcmFtc1xuXG4gICAgICBpZiAocm91dGVTcGVjLnF1ZXJ5UGFyYW1zICYmIHJvdXRlU3BlYy5jb21tb25QYXJhbXMpIHtcbiAgICAgICAgcXVlcnlfdG9fZ2VuZXJhdGVfc2NoZW1hID0gcm91dGVTcGVjLnF1ZXJ5UGFyYW1zLm1lcmdlKFxuICAgICAgICAgIHJvdXRlU3BlYy5jb21tb25QYXJhbXNcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERFTEVURSBhbmQgR0VUIGNhbm5vdCBoYXZlIGEgYm9keVxuICAgIGxldCBtZXRob2RzID0gcm91dGVTcGVjLm1ldGhvZHNcblxuICAgIGlmIChyb3V0ZVNwZWMubWV0aG9kcy5pbmNsdWRlcyhcIkRFTEVURVwiKSAmJiBib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSkge1xuICAgICAgbWV0aG9kcyA9IG1ldGhvZHMuZmlsdGVyKChtKSA9PiBtICE9PSBcIkRFTEVURVwiKVxuICAgIH1cblxuICAgIGlmIChyb3V0ZVNwZWMubWV0aG9kcy5pbmNsdWRlcyhcIkdFVFwiKSAmJiBib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSkge1xuICAgICAgbWV0aG9kcyA9IG1ldGhvZHMuZmlsdGVyKChtKSA9PiBtICE9PSBcIkdFVFwiKVxuICAgIH1cblxuICAgIGlmIChtZXRob2RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBjaGFsay55ZWxsb3coYFNraXBwaW5nIHJvdXRlICR7cm91dGVQYXRofSBiZWNhdXNlIGl0IGhhcyBubyBtZXRob2RzLmApXG4gICAgICApXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IHJvdXRlOiBPcGVyYXRpb25PYmplY3QgPSB7XG4gICAgICAuLi5yb3V0ZVNwZWMub3BlbkFwaU1ldGFkYXRhLFxuICAgICAgc3VtbWFyeTogcm91dGVQYXRoLFxuICAgICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk9LXCIsXG4gICAgICAgIH0sXG4gICAgICAgIDQwMDoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkJhZCBSZXF1ZXN0XCIsXG4gICAgICAgIH0sXG4gICAgICAgIDQwMToge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlVuYXV0aG9yaXplZFwiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNlY3VyaXR5OiBBcnJheS5pc0FycmF5KHJvdXRlU3BlYy5hdXRoKVxuICAgICAgICA/IHJvdXRlU3BlYy5hdXRoXG4gICAgICAgICAgICAubWFwKChhdXRoVHlwZSkgPT4gc2VjdXJpdHlPYmplY3RzRm9yQXV0aFR5cGVbYXV0aFR5cGVdKVxuICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICA6IHNlY3VyaXR5T2JqZWN0c0ZvckF1dGhUeXBlW3JvdXRlU3BlYy5hdXRoXSxcbiAgICB9XG5cbiAgICBpZiAoYm9keV90b19nZW5lcmF0ZV9zY2hlbWEpIHtcbiAgICAgIHJvdXRlLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICAgIHNjaGVtYTogZ2VuZXJhdGVTY2hlbWEoYm9keV90b19nZW5lcmF0ZV9zY2hlbWEgYXMgYW55KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChxdWVyeV90b19nZW5lcmF0ZV9zY2hlbWEpIHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IGdlbmVyYXRlU2NoZW1hKHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYSBhcyBhbnkpXG4gICAgICBpZiAoc2NoZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyczogUGFyYW1ldGVyT2JqZWN0W10gPSBPYmplY3Qua2V5cyhcbiAgICAgICAgICBzY2hlbWEucHJvcGVydGllcyBhcyBhbnlcbiAgICAgICAgKS5tYXAoKG5hbWUpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGluOiBcInF1ZXJ5XCIsXG4gICAgICAgICAgICBzY2hlbWE6IHNjaGVtYS5wcm9wZXJ0aWVzIVtuYW1lXSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBzY2hlbWEucmVxdWlyZWQ/LmluY2x1ZGVzKG5hbWUpLFxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICByb3V0ZS5wYXJhbWV0ZXJzID0gcGFyYW1ldGVyc1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsganNvblJlc3BvbnNlIH0gPSByb3V0ZVNwZWNcbiAgICBjb25zdCB7IGFkZE9rU3RhdHVzID0gdHJ1ZSB9ID0gc2V0dXBQYXJhbXNcblxuICAgIGlmIChqc29uUmVzcG9uc2UpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIWpzb25SZXNwb25zZS5fZGVmIHx8XG4gICAgICAgICFqc29uUmVzcG9uc2UuX2RlZi50eXBlTmFtZSB8fFxuICAgICAgICBqc29uUmVzcG9uc2UuX2RlZi50eXBlTmFtZSAhPT0gXCJab2RPYmplY3RcIlxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBjaGFsay55ZWxsb3coXG4gICAgICAgICAgICBgU2tpcHBpbmcgcm91dGUgJHtyb3V0ZVBhdGh9IGJlY2F1c2UgdGhlIHJlc3BvbnNlIGlzIG5vdCBhIFpvZE9iamVjdC5gXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlU2NoZW1hID0gZ2VuZXJhdGVTY2hlbWEoXG4gICAgICAgIGFkZE9rU3RhdHVzICYmIGpzb25SZXNwb25zZSBpbnN0YW5jZW9mIHouWm9kT2JqZWN0XG4gICAgICAgICAgPyBqc29uUmVzcG9uc2UuZXh0ZW5kKHsgb2s6IHouYm9vbGVhbigpIH0pXG4gICAgICAgICAgOiBqc29uUmVzcG9uc2VcbiAgICAgIClcblxuICAgICAgY29uc3Qgc2NoZW1hV2l0aFJlZmVyZW5jZXMgPSBlbWJlZFNjaGVtYVJlZmVyZW5jZXMoXG4gICAgICAgIHJlc3BvbnNlU2NoZW1hLFxuICAgICAgICBnbG9iYWxTY2hlbWFzXG4gICAgICApXG5cbiAgICAgIC8vIFRPRE86IHdlIHNob3VsZCBub3QgaGFyZGNvZGUgMjAwIGhlcmVcbiAgICAgIHJvdXRlLnJlc3BvbnNlc1syMDBdLmNvbnRlbnQgPSB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiBzY2hlbWFXaXRoUmVmZXJlbmNlcyxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICByb3V0ZS50YWdzID0gW11cbiAgICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7XG4gICAgICBpZiAodGFnLmRvZXNSb3V0ZUhhdmVUYWcgJiYgdGFnLmRvZXNSb3V0ZUhhdmVUYWcocm91dGUuc3VtbWFyeSB8fCBcIlwiKSkge1xuICAgICAgICByb3V0ZS50YWdzLnB1c2godGFnLm5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWV0aG9kc01hcHBlZFRvRmVyblNka01ldGFkYXRhID0gYXdhaXQgbWFwTWV0aG9kc1RvRmVyblNka01ldGFkYXRhKHtcbiAgICAgIG1ldGhvZHMsXG4gICAgICBwYXRoOiByb3V0ZVBhdGgsXG4gICAgICBzZGtSZXR1cm5WYWx1ZTogcm91dGVTcGVjLnNka1JldHVyblZhbHVlLFxuICAgIH0pXG5cbiAgICAvLyBTb21lIHJvdXRlcyBhY2NlcHQgbXVsdGlwbGUgbWV0aG9kc1xuICAgIGJ1aWxkZXIuYWRkUGF0aChyb3V0ZVBhdGgsIHtcbiAgICAgIC4uLm1ldGhvZHNcbiAgICAgICAgLm1hcCgobWV0aG9kKSA9PiAoe1xuICAgICAgICAgIFttZXRob2QudG9Mb3dlckNhc2UoKV06IHtcbiAgICAgICAgICAgIC4uLm1ldGhvZHNNYXBwZWRUb0Zlcm5TZGtNZXRhZGF0YVttZXRob2RdLFxuICAgICAgICAgICAgLi4ucm91dGUsXG4gICAgICAgICAgICBvcGVyYXRpb25JZDogYCR7dHJhbnNmb3JtUGF0aFRvT3BlcmF0aW9uSWQocm91dGVQYXRoKX0ke3Bhc2NhbENhc2UoXG4gICAgICAgICAgICAgIG1ldGhvZFxuICAgICAgICAgICAgKX1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pKVxuICAgICAgICAucmVkdWNlUmlnaHQoKGFjYywgY3VyKSA9PiAoeyAuLi5hY2MsIC4uLmN1ciB9KSwge30pLFxuICAgIH0pXG4gIH1cblxuICBpZiAob3V0cHV0RmlsZSkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShvdXRwdXRGaWxlLCBidWlsZGVyLmdldFNwZWNBc0pzb24odW5kZWZpbmVkLCAyKSlcbiAgfVxuXG4gIHJldHVybiBidWlsZGVyLmdldFNwZWNBc0pzb24odW5kZWZpbmVkLCAyKVxufVxuIiwgImltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgUm91dGVTcGVjLCBTZXR1cFBhcmFtcyB9IGZyb20gXCIuLi8uLi90eXBlc1wiXG5pbXBvcnQgeyBkZWZhdWx0TWFwRmlsZVBhdGhUb0hUVFBSb3V0ZSB9IGZyb20gXCIuL2RlZmF1bHQtbWFwLWZpbGUtcGF0aC10by1odHRwLXJvdXRlXCJcblxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZUluZm8ge1xuICBzZXR1cFBhcmFtczogU2V0dXBQYXJhbXNcbiAgcm91dGVTcGVjOiBSb3V0ZVNwZWNcbiAgcm91dGVGbjogRnVuY3Rpb25cbiAgcm91dGU6IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgcGFyc2VSb3V0ZXNJblBhY2thZ2UgPSBhc3luYyAob3B0czoge1xuICBwYWNrYWdlRGlyOiBzdHJpbmdcbiAgcGF0aEdsb2I/OiBzdHJpbmdcbiAgYXBpUHJlZml4Pzogc3RyaW5nXG4gIG1hcEZpbGVQYXRoVG9IVFRQUm91dGU/OiAoZmlsZV9wYXRoOiBzdHJpbmcpID0+IHN0cmluZ1xuICBpbmNsdWRlT3BlbkFwaUV4Y2x1ZGVkUm91dGVzPzogYm9vbGVhblxufSk6IFByb21pc2U8TWFwPHN0cmluZywgUm91dGVJbmZvPj4gPT4ge1xuICBjb25zdCBjaGFsayA9IChhd2FpdCBpbXBvcnQoXCJjaGFsa1wiKSkuZGVmYXVsdFxuICBjb25zdCBnbG9iYnkgPSAoYXdhaXQgaW1wb3J0KFwiZ2xvYmJ5XCIpKS5nbG9iYnlcbiAgY29uc3Qge1xuICAgIHBhY2thZ2VEaXIsXG4gICAgcGF0aEdsb2IgPSBcIi9wYWdlcy9hcGkvKiovKi50c1wiLFxuICAgIG1hcEZpbGVQYXRoVG9IVFRQUm91dGUgPSBkZWZhdWx0TWFwRmlsZVBhdGhUb0hUVFBSb3V0ZShvcHRzLmFwaVByZWZpeCksXG4gIH0gPSBvcHRzXG4gIC8vIExvYWQgYWxsIHJvdXRlIHNwZWNzXG4gIGNvbnN0IGZ1bGxQYXRoR2xvYiA9IHBhdGgucG9zaXguam9pbihwYWNrYWdlRGlyLCBwYXRoR2xvYilcbiAgY29uc29sZS5sb2coYHNlYXJjaGluZyBcIiR7ZnVsbFBhdGhHbG9ifVwiLi4uYClcbiAgY29uc3QgZmlsZXBhdGhzID0gYXdhaXQgZ2xvYmJ5KGAke2Z1bGxQYXRoR2xvYn1gKVxuICBjb25zb2xlLmxvZyhgZm91bmQgJHtmaWxlcGF0aHMubGVuZ3RofSBmaWxlc2ApXG4gIGlmIChmaWxlcGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBmaWxlcyBmb3VuZCBhdCBcIiR7ZnVsbFBhdGhHbG9ifVwiYClcbiAgfVxuICBjb25zdCBmaWxlcGF0aFRvUm91dGVGbiA9IG5ldyBNYXA8c3RyaW5nLCBSb3V0ZUluZm8+KClcblxuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBmaWxlcGF0aHMubWFwKGFzeW5jIChwKSA9PiB7XG4gICAgICBjb25zdCB7IGRlZmF1bHQ6IHJvdXRlRm4gfSA9IGF3YWl0IHJlcXVpcmUocGF0aC5yZXNvbHZlKHApKVxuXG4gICAgICBpZiAocm91dGVGbikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcm91dGVGbi5fcm91dGVTcGVjPy5leGNsdWRlRnJvbU9wZW5BcGkgJiZcbiAgICAgICAgICAhb3B0cy5pbmNsdWRlT3BlbkFwaUV4Y2x1ZGVkUm91dGVzXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgY2hhbGsuZ3JheShcbiAgICAgICAgICAgICAgYElnbm9yaW5nIFwiJHtwfSBiZWNhdXNlIGl0IHdhcyBleGNsdWRlZCBmcm9tIE9wZW5BUEkgZ2VuZXJhdGlvblwiYFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJvdXRlRm4uX3NldHVwUGFyYW1zKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgY2hhbGsueWVsbG93KFxuICAgICAgICAgICAgICBgSWdub3JpbmcgXCIke3B9XCIgYmVjYXVzZSBpdCB3YXNuJ3QgY3JlYXRlZCB3aXRoIHdpdGhSb3V0ZVNwZWNgXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGZpbGVwYXRoVG9Sb3V0ZUZuLnNldChwLCB7XG4gICAgICAgICAgc2V0dXBQYXJhbXM6IHJvdXRlRm4uX3NldHVwUGFyYW1zLFxuICAgICAgICAgIHJvdXRlU3BlYzogcm91dGVGbi5fcm91dGVTcGVjLFxuICAgICAgICAgIHJvdXRlOiBtYXBGaWxlUGF0aFRvSFRUUFJvdXRlKHApLFxuICAgICAgICAgIHJvdXRlRm4sXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oY2hhbGsueWVsbG93KGBDb3VsZG4ndCBmaW5kIHJvdXRlICR7cH1gKSlcbiAgICAgIH1cbiAgICB9KVxuICApXG5cbiAgcmV0dXJuIGZpbGVwYXRoVG9Sb3V0ZUZuXG59XG4iLCAiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5leHBvcnQgY29uc3QgZGVmYXVsdE1hcEZpbGVQYXRoVG9IVFRQUm91dGUgPVxuICAoYXBpX3ByZWZpeDogc3RyaW5nID0gXCIvYXBpXCIpID0+XG4gIChmaWxlX3BhdGg6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJvdXRlID0gZmlsZV9wYXRoXG4gICAgICAvLyByZXBsYWNlIC4vIGlmIGl0IHN0YXJ0cyB3aXRoIC4vXG4gICAgICAucmVwbGFjZSgvXlxcLlxcLy8sIFwiL1wiKVxuICAgICAgLy8gcmVwbGFjZSBzdGFydGluZyAvXG4gICAgICAucmVwbGFjZSgvXlxcLy8sIFwiXCIpXG4gICAgICAvLyByZXBsYWNlIC9zcmMgaWYgaXQgc3RhcnRzIHdpdGggL3NyY1xuICAgICAgLnJlcGxhY2UoL15zcmNcXC8vLCBcIlwiKVxuICAgICAgLy8gcmVwbGFjZSAvcGFnZXMgaWYgaXQgc3RhcnRzIHdpdGggL3BhZ2VzXG4gICAgICAucmVwbGFjZSgvXnBhZ2VzXFwvLywgXCJcIilcbiAgICAgIC8vIHJlcGxhY2UgL2FwaSBpZiBpdCBzdGFydHMgd2l0aCAvYXBpXG4gICAgICAucmVwbGFjZSgvXmFwaVxcLy8sIFwiXCIpXG4gICAgICAvLyByZXBsYWNlIC50cyBpZiBpdCBlbmRzIHdpdGggLnRzXG4gICAgICAucmVwbGFjZSgvXFwudHMkLywgXCJcIilcbiAgICAgIC8vIHJlbW92ZSBwdWJsaWMgcmVmZXJlbmNlXG4gICAgICAucmVwbGFjZShcInB1YmxpY1wiLCBcIlwiKVxuICAgICAgLy8gcmVwbGFjZSBpbmRleCBpZiBpdCBlbmRzIHdpdGggaW5kZXhcbiAgICAgIC5yZXBsYWNlKC9cXC9cXGluZGV4KD8hLikvLCBcIlwiKVxuXG4gICAgcmV0dXJuIHBhdGguam9pbihhcGlfcHJlZml4LCByb3V0ZSlcbiAgfVxuIiwgIi8qKlxuICogWm9kIE9wZW5BUEkgR2VuZXJhdG9yLlxuICpcbiAqIFZlbmRvcmVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FuYXRpbmUvem9kLXBsdWdpbnNcbiAqXG4gKiBNSVQgTGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAyMiBCcmlhbiBNY0JyaWRlXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNjaGVtYU9iamVjdCwgU2NoZW1hT2JqZWN0VHlwZSB9IGZyb20gXCJvcGVuYXBpMy10cy9vYXMzMVwiXG5pbXBvcnQgbWVyZ2UgZnJvbSBcInRzLWRlZXBtZXJnZVwiXG5pbXBvcnQgeyBBbnlab2RPYmplY3QsIHosIFpvZFR5cGVBbnkgfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IHBhcnNlRnJvbnRNYXR0ZXIsIHRlc3RGcm9udE1hdHRlciB9IGZyb20gXCIuL2Zyb250LW1hdHRlclwiXG5pbXBvcnQgZGVkZW50IGZyb20gXCJkZWRlbnRcIlxuXG50eXBlIEFuYXRpbmVTY2hlbWFPYmplY3QgPSBTY2hlbWFPYmplY3QgJiB7IGhpZGVEZWZpbml0aW9ucz86IHN0cmluZ1tdIH1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQXBpWm9kQW55IGV4dGVuZHMgWm9kVHlwZUFueSB7XG4gIG1ldGFPcGVuQXBpPzogQW5hdGluZVNjaGVtYU9iamVjdCB8IEFuYXRpbmVTY2hlbWFPYmplY3RbXVxufVxuXG5pbnRlcmZhY2UgT3BlbkFwaVpvZEFueU9iamVjdCBleHRlbmRzIEFueVpvZE9iamVjdCB7XG4gIG1ldGFPcGVuQXBpPzogQW5hdGluZVNjaGVtYU9iamVjdCB8IEFuYXRpbmVTY2hlbWFPYmplY3RbXVxufVxuXG5pbnRlcmZhY2UgUGFyc2luZ0FyZ3M8VD4ge1xuICB6b2RSZWY6IFRcbiAgc2NoZW1hczogQW5hdGluZVNjaGVtYU9iamVjdFtdXG4gIHVzZU91dHB1dD86IGJvb2xlYW5cbiAgaGlkZURlZmluaXRpb25zPzogc3RyaW5nW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZEFwaTxUIGV4dGVuZHMgT3BlbkFwaVpvZEFueT4oXG4gIHNjaGVtYTogVCxcbiAgc2NoZW1hT2JqZWN0OiBBbmF0aW5lU2NoZW1hT2JqZWN0ID0ge31cbik6IFQge1xuICBzY2hlbWEubWV0YU9wZW5BcGkgPSBPYmplY3QuYXNzaWduKHNjaGVtYS5tZXRhT3BlbkFwaSB8fCB7fSwgc2NoZW1hT2JqZWN0KVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmZ1bmN0aW9uIGl0ZXJhdGVab2RPYmplY3Qoe1xuICB6b2RSZWYsXG4gIHVzZU91dHB1dCxcbiAgaGlkZURlZmluaXRpb25zLFxufTogUGFyc2luZ0FyZ3M8T3BlbkFwaVpvZEFueU9iamVjdD4pIHtcbiAgY29uc3QgcmVkdWNlZCA9IE9iamVjdC5rZXlzKHpvZFJlZi5zaGFwZSlcbiAgICAuZmlsdGVyKChrZXkpID0+IGhpZGVEZWZpbml0aW9ucz8uaW5jbHVkZXMoa2V5KSA9PT0gZmFsc2UpXG4gICAgLnJlZHVjZShcbiAgICAgIChjYXJyeSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5jYXJyeSxcbiAgICAgICAgW2tleV06IGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5zaGFwZVtrZXldLCB1c2VPdXRwdXQpLFxuICAgICAgfSksXG4gICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBTY2hlbWFPYmplY3Q+XG4gICAgKVxuXG4gIHJldHVybiByZWR1Y2VkXG59XG5cbmZ1bmN0aW9uIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmOiBPcGVuQXBpWm9kQW55KTogU2NoZW1hT2JqZWN0IHtcbiAgaWYgKCF6b2RSZWYuZGVzY3JpcHRpb24pIHJldHVybiB7fVxuICBjb25zdCB0cmltbWVkRGVzY3JpcHRpb24gPSBkZWRlbnQoem9kUmVmLmRlc2NyaXB0aW9uKVxuICBpZiAoIXRlc3RGcm9udE1hdHRlcih0cmltbWVkRGVzY3JpcHRpb24pKVxuICAgIHJldHVybiB7IGRlc2NyaXB0aW9uOiB6b2RSZWYuZGVzY3JpcHRpb24gfVxuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGJvZHkgfSA9IHBhcnNlRnJvbnRNYXR0ZXIodHJpbW1lZERlc2NyaXB0aW9uKVxuICBjb25zdCBvdXRwdXQ6IFNjaGVtYU9iamVjdCA9IHt9XG4gIGlmIChib2R5LnRyaW0oKSkgb3V0cHV0LmRlc2NyaXB0aW9uID0gYm9keS50cmltKClcbiAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiICYmIGF0dHJpYnV0ZXMgIT09IG51bGwpIHtcbiAgICBpZiAoXCJkZXByZWNhdGVkXCIgaW4gYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmRlcHJlY2F0ZWQpIHtcbiAgICAgIG91dHB1dC5kZXByZWNhdGVkID0gdHJ1ZVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKSkge1xuICAgICAgb3V0cHV0W2B4LSR7a2V5fWBdID0gdmFsdWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dHB1dFxufVxuXG5mdW5jdGlvbiBwYXJzZVRyYW5zZm9ybWF0aW9uKHtcbiAgem9kUmVmLFxuICBzY2hlbWFzLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZFRyYW5zZm9ybWVyPG5ldmVyPiB8IHouWm9kRWZmZWN0czxuZXZlcj4+KTogU2NoZW1hT2JqZWN0IHtcbiAgY29uc3QgaW5wdXQgPSBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi5zY2hlbWEsIHVzZU91dHB1dClcblxuICBsZXQgb3V0cHV0ID0gXCJ1bmRlZmluZWRcIlxuICBpZiAodXNlT3V0cHV0ICYmIHpvZFJlZi5fZGVmLmVmZmVjdCkge1xuICAgIGNvbnN0IGVmZmVjdCA9XG4gICAgICB6b2RSZWYuX2RlZi5lZmZlY3QudHlwZSA9PT0gXCJ0cmFuc2Zvcm1cIiA/IHpvZFJlZi5fZGVmLmVmZmVjdCA6IG51bGxcbiAgICBpZiAoZWZmZWN0ICYmIFwidHJhbnNmb3JtXCIgaW4gZWZmZWN0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBvdXRwdXQgPSB0eXBlb2YgZWZmZWN0LnRyYW5zZm9ybShcbiAgICAgICAgICBbXCJpbnRlZ2VyXCIsIFwibnVtYmVyXCJdLmluY2x1ZGVzKGAke2lucHV0LnR5cGV9YClcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBcInN0cmluZ1wiID09PSBpbnB1dC50eXBlXG4gICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgIDogXCJib29sZWFuXCIgPT09IGlucHV0LnR5cGVcbiAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgIDogXCJvYmplY3RcIiA9PT0gaW5wdXQudHlwZVxuICAgICAgICAgICAgPyB7fVxuICAgICAgICAgICAgOiBcIm51bGxcIiA9PT0gaW5wdXQudHlwZVxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IFwiYXJyYXlcIiA9PT0gaW5wdXQudHlwZVxuICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgeyBhZGRJc3N1ZTogKCkgPT4gdW5kZWZpbmVkLCBwYXRoOiBbXSB9IC8vIFRPRE86IERpc2NvdmVyIGlmIGNvbnRleHQgaXMgbmVjZXNzYXJ5IGhlcmVcbiAgICAgICAgKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiovXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtZXJnZShcbiAgICB7XG4gICAgICAuLi4oem9kUmVmLmRlc2NyaXB0aW9uID8geyBkZXNjcmlwdGlvbjogem9kUmVmLmRlc2NyaXB0aW9uIH0gOiB7fSksXG4gICAgICAuLi5pbnB1dCxcbiAgICAgIC4uLihbXCJudW1iZXJcIiwgXCJzdHJpbmdcIiwgXCJib29sZWFuXCIsIFwibnVsbFwiXS5pbmNsdWRlcyhvdXRwdXQpXG4gICAgICAgID8ge1xuICAgICAgICAgICAgdHlwZTogb3V0cHV0IGFzIFwibnVtYmVyXCIgfCBcInN0cmluZ1wiIHwgXCJib29sZWFuXCIgfCBcIm51bGxcIixcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH0sXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlU3RyaW5nKHtcbiAgem9kUmVmLFxuICBzY2hlbWFzLFxufTogUGFyc2luZ0FyZ3M8ei5ab2RTdHJpbmc+KTogU2NoZW1hT2JqZWN0IHtcbiAgY29uc3QgYmFzZVNjaGVtYTogU2NoZW1hT2JqZWN0ID0ge1xuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gIH1cbiAgY29uc3QgeyBjaGVja3MgPSBbXSB9ID0gem9kUmVmLl9kZWZcbiAgY2hlY2tzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICBzd2l0Y2ggKGl0ZW0ua2luZCkge1xuICAgICAgY2FzZSBcImVtYWlsXCI6XG4gICAgICAgIGJhc2VTY2hlbWEuZm9ybWF0ID0gXCJlbWFpbFwiXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwidXVpZFwiOlxuICAgICAgICBiYXNlU2NoZW1hLmZvcm1hdCA9IFwidXVpZFwiXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwiY3VpZFwiOlxuICAgICAgICBiYXNlU2NoZW1hLmZvcm1hdCA9IFwiY3VpZFwiXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwidXJsXCI6XG4gICAgICAgIGJhc2VTY2hlbWEuZm9ybWF0ID0gXCJ1cmlcIlxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcImRhdGV0aW1lXCI6XG4gICAgICAgIGJhc2VTY2hlbWEuZm9ybWF0ID0gXCJkYXRlLXRpbWVcIlxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcImxlbmd0aFwiOlxuICAgICAgICBiYXNlU2NoZW1hLm1pbkxlbmd0aCA9IGl0ZW0udmFsdWVcbiAgICAgICAgYmFzZVNjaGVtYS5tYXhMZW5ndGggPSBpdGVtLnZhbHVlXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgIGJhc2VTY2hlbWEubWF4TGVuZ3RoID0gaXRlbS52YWx1ZVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIm1pblwiOlxuICAgICAgICBiYXNlU2NoZW1hLm1pbkxlbmd0aCA9IGl0ZW0udmFsdWVcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJyZWdleFwiOlxuICAgICAgICBiYXNlU2NoZW1hLnBhdHRlcm4gPSBpdGVtLnJlZ2V4LnNvdXJjZVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG1lcmdlKGJhc2VTY2hlbWEsIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSwgLi4uc2NoZW1hcylcbn1cblxuZnVuY3Rpb24gcGFyc2VOdW1iZXIoe1xuICB6b2RSZWYsXG4gIHNjaGVtYXMsXG59OiBQYXJzaW5nQXJnczx6LlpvZE51bWJlcj4pOiBTY2hlbWFPYmplY3Qge1xuICBjb25zdCBiYXNlU2NoZW1hOiBTY2hlbWFPYmplY3QgPSB7XG4gICAgdHlwZTogXCJudW1iZXJcIixcbiAgICBmb3JtYXQ6IFwiZmxvYXRcIixcbiAgfVxuICBjb25zdCB7IGNoZWNrcyA9IFtdIH0gPSB6b2RSZWYuX2RlZlxuICBjaGVja3MuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgIHN3aXRjaCAoaXRlbS5raW5kKSB7XG4gICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgIGJhc2VTY2hlbWEubWF4aW11bSA9IGl0ZW0udmFsdWVcbiAgICAgICAgLy8gVE9ETzogb3B0aW9uIHRvIG1ha2UgdGhpcyBhbHdheXMgZXhwbGljaXQ/IChmYWxzZSBpbnN0ZWFkIG9mIG5vbi1leGlzdGVudClcbiAgICAgICAgaWYgKCFpdGVtLmluY2x1c2l2ZSkgYmFzZVNjaGVtYS5leGNsdXNpdmVNYXhpbXVtID0gaXRlbS52YWx1ZVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIm1pblwiOlxuICAgICAgICBiYXNlU2NoZW1hLm1pbmltdW0gPSBpdGVtLnZhbHVlXG4gICAgICAgIGlmICghaXRlbS5pbmNsdXNpdmUpIGJhc2VTY2hlbWEuZXhjbHVzaXZlTWluaW11bSA9IGl0ZW0udmFsdWVcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJpbnRcIjpcbiAgICAgICAgYmFzZVNjaGVtYS50eXBlID0gXCJpbnRlZ2VyXCJcbiAgICAgICAgZGVsZXRlIGJhc2VTY2hlbWEuZm9ybWF0XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwibXVsdGlwbGVPZlwiOlxuICAgICAgICBiYXNlU2NoZW1hLm11bHRpcGxlT2YgPSBpdGVtLnZhbHVlXG4gICAgfVxuICB9KVxuICByZXR1cm4gbWVyZ2UoYmFzZVNjaGVtYSwgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLCAuLi5zY2hlbWFzKVxufVxuXG5mdW5jdGlvbiBnZXRFeGNsdWRlZERlZmluaXRpb25zRnJvbVNjaGVtYShcbiAgc2NoZW1hczogQW5hdGluZVNjaGVtYU9iamVjdFtdXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGV4Y2x1ZGVkRGVmaW5pdGlvbnM6IHN0cmluZ1tdID0gW11cbiAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5oaWRlRGVmaW5pdGlvbnMpKSB7XG4gICAgICBleGNsdWRlZERlZmluaXRpb25zLnB1c2goLi4uc2NoZW1hLmhpZGVEZWZpbml0aW9ucylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhjbHVkZWREZWZpbml0aW9uc1xufVxuXG5mdW5jdGlvbiBwYXJzZU9iamVjdCh7XG4gIHpvZFJlZixcbiAgc2NoZW1hcyxcbiAgdXNlT3V0cHV0LFxuICBoaWRlRGVmaW5pdGlvbnMsXG59OiBQYXJzaW5nQXJnczxcbiAgei5ab2RPYmplY3Q8bmV2ZXIsIFwicGFzc3Rocm91Z2hcIiB8IFwic3RyaWN0XCIgfCBcInN0cmlwXCI+XG4+KTogU2NoZW1hT2JqZWN0IHtcbiAgbGV0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBTY2hlbWFPYmplY3RbXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiXVxuXG4gIC8vIGBjYXRjaGFsbGAgb2J2aWF0ZXMgYHN0cmljdGAsIGBzdHJpcGAsIGFuZCBgcGFzc3Rocm91Z2hgXG4gIGlmIChcbiAgICAhKFxuICAgICAgem9kUmVmLl9kZWYuY2F0Y2hhbGwgaW5zdGFuY2VvZiB6LlpvZE5ldmVyIHx8XG4gICAgICB6b2RSZWYuX2RlZi5jYXRjaGFsbD8uX2RlZi50eXBlTmFtZSA9PT0gXCJab2ROZXZlclwiXG4gICAgKVxuICApXG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXMgPSBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi5jYXRjaGFsbCwgdXNlT3V0cHV0KVxuICBlbHNlIGlmICh6b2RSZWYuX2RlZi51bmtub3duS2V5cyA9PT0gXCJwYXNzdGhyb3VnaFwiKVxuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gdHJ1ZVxuICBlbHNlIGlmICh6b2RSZWYuX2RlZi51bmtub3duS2V5cyA9PT0gXCJzdHJpY3RcIikgYWRkaXRpb25hbFByb3BlcnRpZXMgPSBmYWxzZVxuXG4gIC8vIFNvIHRoYXQgYHVuZGVmaW5lZGAgdmFsdWVzIGRvbid0IGVuZCB1cCBpbiB0aGUgc2NoZW1hIGFuZCBiZSB3ZWlyZFxuICBhZGRpdGlvbmFsUHJvcGVydGllcyA9XG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXMgIT0gbnVsbCA/IHsgYWRkaXRpb25hbFByb3BlcnRpZXMgfSA6IHt9XG5cbiAgY29uc3QgcmVxdWlyZWRQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoXG4gICAgKHpvZFJlZiBhcyB6LkFueVpvZE9iamVjdCkuc2hhcGVcbiAgKS5maWx0ZXIoKGtleSkgPT4ge1xuICAgIGNvbnN0IGl0ZW0gPSAoem9kUmVmIGFzIHouQW55Wm9kT2JqZWN0KS5zaGFwZVtrZXldXG4gICAgcmV0dXJuIChcbiAgICAgICEoXG4gICAgICAgIGl0ZW0uaXNPcHRpb25hbCgpIHx8XG4gICAgICAgIGl0ZW0gaW5zdGFuY2VvZiB6LlpvZERlZmF1bHQgfHxcbiAgICAgICAgaXRlbS5fZGVmLnR5cGVOYW1lID09PSBcIlpvZERlZmF1bHRcIlxuICAgICAgKSAmJiAhKGl0ZW0gaW5zdGFuY2VvZiB6LlpvZE5ldmVyIHx8IGl0ZW0uX2RlZi50eXBlTmFtZSA9PT0gXCJab2REZWZhdWx0XCIpXG4gICAgKVxuICB9KVxuXG4gIGNvbnN0IHJlcXVpcmVkID1cbiAgICByZXF1aXJlZFByb3BlcnRpZXMubGVuZ3RoID4gMCA/IHsgcmVxdWlyZWQ6IHJlcXVpcmVkUHJvcGVydGllcyB9IDoge31cblxuICByZXR1cm4gbWVyZ2UoXG4gICAge1xuICAgICAgdHlwZTogXCJvYmplY3RcIiBhcyBTY2hlbWFPYmplY3RUeXBlLFxuICAgICAgcHJvcGVydGllczogaXRlcmF0ZVpvZE9iamVjdCh7XG4gICAgICAgIHpvZFJlZjogem9kUmVmIGFzIE9wZW5BcGlab2RBbnlPYmplY3QsXG4gICAgICAgIHNjaGVtYXMsXG4gICAgICAgIHVzZU91dHB1dCxcbiAgICAgICAgaGlkZURlZmluaXRpb25zOiBnZXRFeGNsdWRlZERlZmluaXRpb25zRnJvbVNjaGVtYShzY2hlbWFzKSxcbiAgICAgIH0pLFxuICAgICAgLi4ucmVxdWlyZWQsXG4gICAgICAuLi5hZGRpdGlvbmFsUHJvcGVydGllcyxcbiAgICAgIC4uLmhpZGVEZWZpbml0aW9ucyxcbiAgICB9LFxuICAgIHpvZFJlZi5kZXNjcmlwdGlvblxuICAgICAgPyB7IGRlc2NyaXB0aW9uOiB6b2RSZWYuZGVzY3JpcHRpb24sIGhpZGVEZWZpbml0aW9ucyB9XG4gICAgICA6IHt9LFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZVJlY29yZCh7XG4gIHpvZFJlZixcbiAgc2NoZW1hcyxcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2RSZWNvcmQ+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIgYXMgU2NoZW1hT2JqZWN0VHlwZSxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOlxuICAgICAgICB6b2RSZWYuX2RlZi52YWx1ZVR5cGUgaW5zdGFuY2VvZiB6LlpvZFVua25vd25cbiAgICAgICAgICA/IHt9XG4gICAgICAgICAgOiBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi52YWx1ZVR5cGUsIHVzZU91dHB1dCksXG4gICAgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlQmlnSW50KHtcbiAgem9kUmVmLFxuICBzY2hlbWFzLFxufTogUGFyc2luZ0FyZ3M8ei5ab2RCaWdJbnQ+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHsgdHlwZTogXCJpbnRlZ2VyXCIgYXMgU2NoZW1hT2JqZWN0VHlwZSwgZm9ybWF0OiBcImludDY0XCIgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbGVhbih7XG4gIHpvZFJlZixcbiAgc2NoZW1hcyxcbn06IFBhcnNpbmdBcmdzPHouWm9kQm9vbGVhbj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAgeyB0eXBlOiBcImJvb2xlYW5cIiBhcyBTY2hlbWFPYmplY3RUeXBlIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZURhdGUoeyB6b2RSZWYsIHNjaGVtYXMgfTogUGFyc2luZ0FyZ3M8ei5ab2REYXRlPik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShcbiAgICB7IHR5cGU6IFwic3RyaW5nXCIgYXMgU2NoZW1hT2JqZWN0VHlwZSwgZm9ybWF0OiBcImRhdGUtdGltZVwiIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZU51bGwoeyB6b2RSZWYsIHNjaGVtYXMgfTogUGFyc2luZ0FyZ3M8ei5ab2ROdWxsPik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShcbiAgICB7XG4gICAgICB0eXBlOiBcIm51bGxcIiBhcyBTY2hlbWFPYmplY3RUeXBlLFxuICAgIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZU9wdGlvbmFsKHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZE9wdGlvbmFsPE9wZW5BcGlab2RBbnk+Pik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShcbiAgICBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYudW53cmFwKCksIHVzZU91dHB1dCksXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZU51bGxhYmxlKHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZE51bGxhYmxlPE9wZW5BcGlab2RBbnk+Pik6IFNjaGVtYU9iamVjdCB7XG4gIGNvbnN0IHNjaGVtYSA9IGdlbmVyYXRlU2NoZW1hKHpvZFJlZi51bndyYXAoKSwgdXNlT3V0cHV0KVxuICByZXR1cm4gbWVyZ2UoXG4gICAgeyAuLi5zY2hlbWEsIHR5cGU6IFtzY2hlbWEudHlwZSwgXCJudWxsXCJdIGFzIFNjaGVtYU9iamVjdFR5cGVbXSB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VEZWZhdWx0KHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZERlZmF1bHQ8T3BlbkFwaVpvZEFueT4+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIGRlZmF1bHQ6IHpvZFJlZi5fZGVmLmRlZmF1bHRWYWx1ZSgpLFxuICAgICAgLi4uZ2VuZXJhdGVTY2hlbWEoem9kUmVmLl9kZWYuaW5uZXJUeXBlLCB1c2VPdXRwdXQpLFxuICAgIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZUFycmF5KHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZEFycmF5PE9wZW5BcGlab2RBbnk+Pik6IFNjaGVtYU9iamVjdCB7XG4gIGNvbnN0IGNvbnN0cmFpbnRzOiBTY2hlbWFPYmplY3QgPSB7fVxuICBpZiAoem9kUmVmLl9kZWYuZXhhY3RMZW5ndGggIT0gbnVsbCkge1xuICAgIGNvbnN0cmFpbnRzLm1pbkl0ZW1zID0gem9kUmVmLl9kZWYuZXhhY3RMZW5ndGgudmFsdWVcbiAgICBjb25zdHJhaW50cy5tYXhJdGVtcyA9IHpvZFJlZi5fZGVmLmV4YWN0TGVuZ3RoLnZhbHVlXG4gIH1cblxuICBpZiAoem9kUmVmLl9kZWYubWluTGVuZ3RoICE9IG51bGwpXG4gICAgY29uc3RyYWludHMubWluSXRlbXMgPSB6b2RSZWYuX2RlZi5taW5MZW5ndGgudmFsdWVcbiAgaWYgKHpvZFJlZi5fZGVmLm1heExlbmd0aCAhPSBudWxsKVxuICAgIGNvbnN0cmFpbnRzLm1heEl0ZW1zID0gem9kUmVmLl9kZWYubWF4TGVuZ3RoLnZhbHVlXG5cbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIiBhcyBTY2hlbWFPYmplY3RUeXBlLFxuICAgICAgaXRlbXM6IGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5lbGVtZW50LCB1c2VPdXRwdXQpLFxuICAgICAgLi4uY29uc3RyYWludHMsXG4gICAgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlTGl0ZXJhbCh7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbn06IFBhcnNpbmdBcmdzPHouWm9kTGl0ZXJhbDxPcGVuQXBpWm9kQW55Pj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAge1xuICAgICAgdHlwZTogdHlwZW9mIHpvZFJlZi5fZGVmLnZhbHVlIGFzIFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIsXG4gICAgICBlbnVtOiBbem9kUmVmLl9kZWYudmFsdWVdLFxuICAgIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZUVudW0oe1xuICBzY2hlbWFzLFxuICB6b2RSZWYsXG59OiBQYXJzaW5nQXJnczx6LlpvZEVudW08bmV2ZXI+IHwgei5ab2ROYXRpdmVFbnVtPG5ldmVyPj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAge1xuICAgICAgdHlwZTogdHlwZW9mIE9iamVjdC52YWx1ZXMoem9kUmVmLl9kZWYudmFsdWVzKVswXSBhcyBcInN0cmluZ1wiIHwgXCJudW1iZXJcIixcbiAgICAgIGVudW06IE9iamVjdC52YWx1ZXMoem9kUmVmLl9kZWYudmFsdWVzKSxcbiAgICB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VJbnRlcnNlY3Rpb24oe1xuICBzY2hlbWFzLFxuICB6b2RSZWYsXG4gIHVzZU91dHB1dCxcbn06IFBhcnNpbmdBcmdzPHouWm9kSW50ZXJzZWN0aW9uPHouWm9kVHlwZUFueSwgei5ab2RUeXBlQW55Pj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAge1xuICAgICAgYWxsT2Y6IFtcbiAgICAgICAgZ2VuZXJhdGVTY2hlbWEoem9kUmVmLl9kZWYubGVmdCwgdXNlT3V0cHV0KSxcbiAgICAgICAgZ2VuZXJhdGVTY2hlbWEoem9kUmVmLl9kZWYucmlnaHQsIHVzZU91dHB1dCksXG4gICAgICBdLFxuICAgIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZVVuaW9uKHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZFVuaW9uPFt6LlpvZFR5cGVBbnksIC4uLnouWm9kVHlwZUFueVtdXT4+KTogU2NoZW1hT2JqZWN0IHtcbiAgY29uc3QgY29udGVudHMgPSB6b2RSZWYuX2RlZi5vcHRpb25zXG4gIGlmIChcbiAgICBjb250ZW50cy5yZWR1Y2UoXG4gICAgICAocHJldiwgY29udGVudCkgPT4gcHJldiAmJiBjb250ZW50Ll9kZWYudHlwZU5hbWUgPT09IFwiWm9kTGl0ZXJhbFwiLFxuICAgICAgdHJ1ZVxuICAgIClcbiAgKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIHRvIHRyYW5zZm9ybSB1bmlvbnMgb2YgbGl0ZXJhbHMgaW50byBlbnVtc1xuICAgIGNvbnN0IGxpdGVyYWxzID0gY29udGVudHMgYXMgdW5rbm93biBhcyB6LlpvZExpdGVyYWw8T3BlbkFwaVpvZEFueT5bXVxuICAgIGNvbnN0IHR5cGUgPSBsaXRlcmFscy5yZWR1Y2UoXG4gICAgICAocHJldiwgY29udGVudCkgPT5cbiAgICAgICAgIXByZXYgfHwgcHJldiA9PT0gdHlwZW9mIGNvbnRlbnQuX2RlZi52YWx1ZVxuICAgICAgICAgID8gdHlwZW9mIGNvbnRlbnQuX2RlZi52YWx1ZVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIG51bGwgYXMgbnVsbCB8IHN0cmluZ1xuICAgIClcblxuICAgIGlmICh0eXBlKSB7XG4gICAgICByZXR1cm4gbWVyZ2UoXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiB0eXBlIGFzIFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIsXG4gICAgICAgICAgZW51bTogbGl0ZXJhbHMubWFwKChsaXRlcmFsKSA9PiBsaXRlcmFsLl9kZWYudmFsdWUpLFxuICAgICAgICB9LFxuICAgICAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgICAgIC4uLnNjaGVtYXNcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2UoXG4gICAge1xuICAgICAgb25lT2Y6IGNvbnRlbnRzLm1hcCgoc2NoZW1hKSA9PiBnZW5lcmF0ZVNjaGVtYShzY2hlbWEsIHVzZU91dHB1dCkpLFxuICAgIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZURpc2NyaW1pbmF0ZWRVbmlvbih7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8XG4gIHouWm9kRGlzY3JpbWluYXRlZFVuaW9uPHN0cmluZywgei5ab2REaXNjcmltaW5hdGVkVW5pb25PcHRpb248c3RyaW5nPltdPlxuPik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShcbiAgICB7XG4gICAgICBkaXNjcmltaW5hdG9yOiB7XG4gICAgICAgIHByb3BlcnR5TmFtZTogKFxuICAgICAgICAgIHpvZFJlZiBhcyB6LlpvZERpc2NyaW1pbmF0ZWRVbmlvbjxcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIHouWm9kRGlzY3JpbWluYXRlZFVuaW9uT3B0aW9uPHN0cmluZz5bXVxuICAgICAgICAgID5cbiAgICAgICAgKS5fZGVmLmRpc2NyaW1pbmF0b3IsXG4gICAgICB9LFxuICAgICAgb25lT2Y6IEFycmF5LmZyb20oXG4gICAgICAgIChcbiAgICAgICAgICB6b2RSZWYgYXMgei5ab2REaXNjcmltaW5hdGVkVW5pb248XG4gICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICB6LlpvZERpc2NyaW1pbmF0ZWRVbmlvbk9wdGlvbjxzdHJpbmc+W11cbiAgICAgICAgICA+XG4gICAgICAgICkuX2RlZi5vcHRpb25zLnZhbHVlcygpXG4gICAgICApLm1hcCgoc2NoZW1hKSA9PiBnZW5lcmF0ZVNjaGVtYShzY2hlbWEsIHVzZU91dHB1dCkpLFxuICAgIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZU5ldmVyKHtcbiAgem9kUmVmLFxuICBzY2hlbWFzLFxufTogUGFyc2luZ0FyZ3M8ei5ab2ROZXZlcj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoeyByZWFkT25seTogdHJ1ZSB9LCBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksIC4uLnNjaGVtYXMpXG59XG5cbmZ1bmN0aW9uIHBhcnNlQnJhbmRlZCh7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbn06IFBhcnNpbmdBcmdzPHouWm9kQnJhbmRlZDx6LlpvZEFueSwgc3RyaW5nPj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoZ2VuZXJhdGVTY2hlbWEoem9kUmVmLl9kZWYudHlwZSksIC4uLnNjaGVtYXMpXG59XG5cbmZ1bmN0aW9uIGNhdGNoQWxsUGFyc2VyKHtcbiAgem9kUmVmLFxuICBzY2hlbWFzLFxufTogUGFyc2luZ0FyZ3M8Wm9kVHlwZUFueT4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UocGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLCAuLi5zY2hlbWFzKVxufVxuXG5mdW5jdGlvbiBwYXJzZVBpcGVsaW5lKHtcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZFBpcGVsaW5lPG5ldmVyLCBuZXZlcj4+KTogU2NoZW1hT2JqZWN0IHtcbiAgaWYgKHVzZU91dHB1dCkge1xuICAgIHJldHVybiBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi5vdXQsIHVzZU91dHB1dClcbiAgfVxuICByZXR1cm4gZ2VuZXJhdGVTY2hlbWEoem9kUmVmLl9kZWYuaW4sIHVzZU91dHB1dClcbn1cblxuZnVuY3Rpb24gcGFyc2VSZWFkb25seSh7XG4gIHpvZFJlZixcbiAgdXNlT3V0cHV0LFxuICBzY2hlbWFzLFxufTogUGFyc2luZ0FyZ3M8ei5ab2RSZWFkb25seTx6LlpvZEFueT4+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5fZGVmLmlubmVyVHlwZSwgdXNlT3V0cHV0KSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmNvbnN0IHdvcmtlck1hcCA9IHtcbiAgWm9kT2JqZWN0OiBwYXJzZU9iamVjdCxcbiAgWm9kUmVjb3JkOiBwYXJzZVJlY29yZCxcbiAgWm9kU3RyaW5nOiBwYXJzZVN0cmluZyxcbiAgWm9kTnVtYmVyOiBwYXJzZU51bWJlcixcbiAgWm9kQmlnSW50OiBwYXJzZUJpZ0ludCxcbiAgWm9kQm9vbGVhbjogcGFyc2VCb29sZWFuLFxuICBab2REYXRlOiBwYXJzZURhdGUsXG4gIFpvZE51bGw6IHBhcnNlTnVsbCxcbiAgWm9kT3B0aW9uYWw6IHBhcnNlT3B0aW9uYWwsXG4gIFpvZE51bGxhYmxlOiBwYXJzZU51bGxhYmxlLFxuICBab2REZWZhdWx0OiBwYXJzZURlZmF1bHQsXG4gIFpvZEFycmF5OiBwYXJzZUFycmF5LFxuICBab2RMaXRlcmFsOiBwYXJzZUxpdGVyYWwsXG4gIFpvZEVudW06IHBhcnNlRW51bSxcbiAgWm9kTmF0aXZlRW51bTogcGFyc2VFbnVtLFxuICBab2RUcmFuc2Zvcm1lcjogcGFyc2VUcmFuc2Zvcm1hdGlvbixcbiAgWm9kRWZmZWN0czogcGFyc2VUcmFuc2Zvcm1hdGlvbixcbiAgWm9kSW50ZXJzZWN0aW9uOiBwYXJzZUludGVyc2VjdGlvbixcbiAgWm9kVW5pb246IHBhcnNlVW5pb24sXG4gIFpvZERpc2NyaW1pbmF0ZWRVbmlvbjogcGFyc2VEaXNjcmltaW5hdGVkVW5pb24sXG4gIFpvZE5ldmVyOiBwYXJzZU5ldmVyLFxuICBab2RCcmFuZGVkOiBwYXJzZUJyYW5kZWQsXG4gIC8vIFRPRE8gVHJhbnNmb3JtIHRoZSByZXN0IHRvIHNjaGVtYXNcbiAgWm9kVW5kZWZpbmVkOiBjYXRjaEFsbFBhcnNlcixcbiAgLy8gVE9ETzogYHByZWZpeEl0ZW1zYCBpcyBhbGxvd2VkIGluIE9wZW5BUEkgMy4xIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSB0dXBsZXNcbiAgWm9kVHVwbGU6IGNhdGNoQWxsUGFyc2VyLFxuICBab2RNYXA6IGNhdGNoQWxsUGFyc2VyLFxuICBab2RGdW5jdGlvbjogY2F0Y2hBbGxQYXJzZXIsXG4gIFpvZExhenk6IGNhdGNoQWxsUGFyc2VyLFxuICBab2RQcm9taXNlOiBjYXRjaEFsbFBhcnNlcixcbiAgWm9kQW55OiBjYXRjaEFsbFBhcnNlcixcbiAgWm9kVW5rbm93bjogY2F0Y2hBbGxQYXJzZXIsXG4gIFpvZFZvaWQ6IGNhdGNoQWxsUGFyc2VyLFxuICBab2RQaXBlbGluZTogcGFyc2VQaXBlbGluZSxcbiAgWm9kUmVhZG9ubHk6IHBhcnNlUmVhZG9ubHksXG59XG50eXBlIFdvcmtlcktleXMgPSBrZXlvZiB0eXBlb2Ygd29ya2VyTWFwXG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVNjaGVtYShcbiAgem9kUmVmOiBPcGVuQXBpWm9kQW55LFxuICB1c2VPdXRwdXQ/OiBib29sZWFuXG4pOiBTY2hlbWFPYmplY3Qge1xuICBjb25zdCB7IG1ldGFPcGVuQXBpID0ge30gfSA9IHpvZFJlZlxuICBjb25zdCBzY2hlbWFzOiBBbmF0aW5lU2NoZW1hT2JqZWN0W10gPSBbXG4gICAgLi4uKEFycmF5LmlzQXJyYXkobWV0YU9wZW5BcGkpID8gbWV0YU9wZW5BcGkgOiBbbWV0YU9wZW5BcGldKSxcbiAgXVxuICB0cnkge1xuICAgIGNvbnN0IHR5cGVOYW1lID0gem9kUmVmLl9kZWYudHlwZU5hbWUgYXMgV29ya2VyS2V5c1xuICAgIGlmICh0eXBlTmFtZSBpbiB3b3JrZXJNYXApIHtcbiAgICAgIHJldHVybiB3b3JrZXJNYXBbdHlwZU5hbWVdKHtcbiAgICAgICAgem9kUmVmOiB6b2RSZWYgYXMgbmV2ZXIsXG4gICAgICAgIHNjaGVtYXMsXG4gICAgICAgIHVzZU91dHB1dCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGNhdGNoQWxsUGFyc2VyKHsgem9kUmVmLCBzY2hlbWFzIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgIHJldHVybiBjYXRjaEFsbFBhcnNlcih7IHpvZFJlZiwgc2NoZW1hcyB9KVxuICB9XG59XG4iLCAiLyoqXG4gKiBGcm9udC1NYXR0ZXJcbiAqXG4gKiBWZW5kb3JlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qeHNvbi9mcm9udC1tYXR0ZXJcbiAqXG4gKiBNSVQgTGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAoYykgSmFzb24gQ2FtcGJlbGwgKFwiQXV0aG9yXCIpXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBsb2FkIH0gZnJvbSBcImpzLXlhbWxcIlxuY29uc3Qgb3B0aW9uYWxCeXRlT3JkZXJNYXJrID0gXCJcXFxcdWZlZmY/XCJcbmNvbnN0IHBsYXRmb3JtID0gdHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgPyBwcm9jZXNzLnBsYXRmb3JtIDogXCJcIlxuY29uc3QgcGF0dGVybiA9XG4gIFwiXihcIiArXG4gIG9wdGlvbmFsQnl0ZU9yZGVyTWFyayArXG4gIFwiKD0geWFtbCA9fC0tLSlcIiArXG4gIFwiJChbXFxcXHNcXFxcU10qPylcIiArXG4gIFwiXig/OlxcXFwyfFxcXFwuXFxcXC5cXFxcLilcXFxccypcIiArXG4gIFwiJFwiICtcbiAgKHBsYXRmb3JtID09PSBcIndpbjMyXCIgPyBcIlxcXFxyP1wiIDogXCJcIikgK1xuICBcIig/OlxcXFxuKT8pXCJcbi8vIE5PVEU6IElmIHRoaXMgcGF0dGVybiB1c2VzIHRoZSAnZycgZmxhZyB0aGUgYHJlZ2V4YCB2YXJpYWJsZSBkZWZpbml0aW9uIHdpbGxcbi8vIG5lZWQgdG8gYmUgbW92ZWQgZG93biBpbnRvIHRoZSBmdW5jdGlvbnMgdGhhdCB1c2UgaXQuXG5jb25zdCByZWdleCA9IG5ldyBSZWdFeHAocGF0dGVybiwgXCJtXCIpXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZyb250TWF0dGVyKFxuICBzdHJpbmc6IHN0cmluZyxcbiAgb3B0aW9ucyA9IHt9XG4pOiB7IGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+OyBib2R5OiBzdHJpbmc7IGJvZHlCZWdpbjogbnVtYmVyIH0ge1xuICBzdHJpbmcgPSBzdHJpbmcgfHwgXCJcIlxuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSB7IGFsbG93VW5zYWZlOiBmYWxzZSB9XG4gIG9wdGlvbnMgPVxuICAgIG9wdGlvbnMgaW5zdGFuY2VvZiBPYmplY3RcbiAgICAgID8geyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9XG4gICAgICA6IGRlZmF1bHRPcHRpb25zXG4gIHZhciBsaW5lcyA9IHN0cmluZy5zcGxpdCgvKFxccj9cXG4pLylcbiAgaWYgKGxpbmVzWzBdICYmIC89IHlhbWwgPXwtLS0vLnRlc3QobGluZXNbMF0pKSB7XG4gICAgcmV0dXJuIHBhcnNlKHN0cmluZylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRlczoge30sXG4gICAgICBib2R5OiBzdHJpbmcsXG4gICAgICBib2R5QmVnaW46IDEsXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVMb2NhdGlvbihtYXRjaDogUmVnRXhwRXhlY0FycmF5LCBib2R5OiBzdHJpbmcpIHtcbiAgdmFyIGxpbmUgPSAxXG4gIHZhciBwb3MgPSBib2R5LmluZGV4T2YoXCJcXG5cIilcbiAgdmFyIG9mZnNldCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG5cbiAgd2hpbGUgKHBvcyAhPT0gLTEpIHtcbiAgICBpZiAocG9zID49IG9mZnNldCkge1xuICAgICAgcmV0dXJuIGxpbmVcbiAgICB9XG4gICAgbGluZSsrXG4gICAgcG9zID0gYm9keS5pbmRleE9mKFwiXFxuXCIsIHBvcyArIDEpXG4gIH1cblxuICByZXR1cm4gbGluZVxufVxuXG5mdW5jdGlvbiBwYXJzZShzdHJpbmc6IHN0cmluZyk6IHtcbiAgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgYm9keTogc3RyaW5nXG4gIGJvZHlCZWdpbjogbnVtYmVyXG59IHtcbiAgdmFyIG1hdGNoID0gcmVnZXguZXhlYyhzdHJpbmcpXG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRlczoge30sXG4gICAgICBib2R5OiBzdHJpbmcsXG4gICAgICBib2R5QmVnaW46IDEsXG4gICAgfVxuICB9XG5cbiAgdmFyIHlhbWwgPSBtYXRjaFttYXRjaC5sZW5ndGggLSAxXS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBcIlwiKVxuICB2YXIgYXR0cmlidXRlcyA9IChsb2FkKHlhbWwpIHx8IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICB2YXIgYm9keSA9IHN0cmluZy5yZXBsYWNlKG1hdGNoWzBdLCBcIlwiKVxuICB2YXIgbGluZSA9IGNvbXB1dGVMb2NhdGlvbihtYXRjaCwgc3RyaW5nKVxuXG4gIHJldHVybiB7XG4gICAgYXR0cmlidXRlczogYXR0cmlidXRlcyxcbiAgICBib2R5OiBib2R5LFxuICAgIGJvZHlCZWdpbjogbGluZSxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdEZyb250TWF0dGVyKHN0cmluZzogc3RyaW5nKSB7XG4gIHN0cmluZyA9IHN0cmluZyB8fCBcIlwiXG5cbiAgcmV0dXJuIHJlZ2V4LnRlc3Qoc3RyaW5nKVxufVxuIiwgImltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIlxuXG5mdW5jdGlvbiBmaW5kS2V5SW5PYmoob2JqOiBhbnksIHZhbHVlOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgbGV0IHJlc3VsdEtleTogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgXy5mb3JPd24ob2JqLCAodiwgaykgPT4ge1xuICAgIGlmIChfLmlzT2JqZWN0KHYpICYmIF8uaXNNYXRjaCh2LCB2YWx1ZSkpIHtcbiAgICAgIHJlc3VsdEtleSA9IGtcbiAgICAgIC8vIFN0b3AgdGhlIGl0ZXJhdGlvblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9KVxuICByZXR1cm4gcmVzdWx0S2V5XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWJlZFNjaGVtYVJlZmVyZW5jZXMob2JqMTogYW55LCBvYmoyOiBhbnkpOiBhbnkge1xuICByZXR1cm4gXy50cmFuc2Zvcm0ob2JqMSwgKHJlc3VsdCwgdmFsdWUsIGtleSkgPT4ge1xuICAgIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgY29uc3QgbWF0Y2hpbmdLZXkgPSBmaW5kS2V5SW5PYmoob2JqMiwgdmFsdWUpXG4gICAgICBpZiAobWF0Y2hpbmdLZXkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB7XG4gICAgICAgICAgJHJlZjogYCMvY29tcG9uZW50cy9zY2hlbWFzLyR7bWF0Y2hpbmdLZXl9YCxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBlbWJlZFNjaGVtYVJlZmVyZW5jZXModmFsdWUsIG9iajIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVcbiAgICB9XG4gIH0pXG59XG4iLCAiaW1wb3J0IHsgUm91dGVTcGVjIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCJcblxuZnVuY3Rpb24gdHJhbnNmb3JtUGF0aFRvRmVyblNka01ldGhvZE5hbWUocGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSBcIlwiKVxuICBjb25zdCBsYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdXG4gIGlmIChsYXN0UGFydC5zdGFydHNXaXRoKFwiW1wiKSAmJiBsYXN0UGFydC5lbmRzV2l0aChcIl1cIikpIHtcbiAgICAvLyBDb252ZXJ0IFtwYXJhbV0gdG8gYnlfcGFyYW1cbiAgICBjb25zdCBwYXJhbSA9IGxhc3RQYXJ0LnNsaWNlKDEsIC0xKVxuICAgIHJldHVybiBgYnlfJHtwYXJhbX1gXG4gIH1cblxuICByZXR1cm4gbGFzdFBhcnRcbn1cblxuLy8gZmVybiBkb2NzOiBodHRwczovL2J1aWxkd2l0aGZlcm4uY29tL2RvY3Mvc3BlYy9leHRlbnNpb25zXG5mdW5jdGlvbiB0cmFuc2Zvcm1QYXRoVG9GZXJuU2RrR3JvdXBOYW1lKHBhdGg6IHN0cmluZykge1xuICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gXCJcIilcbiAgcmV0dXJuIHBhcnRzLnNsaWNlKDAsIHBhcnRzLmxlbmd0aCAtIDEpXG59XG5cbmZ1bmN0aW9uIGdldEZlcm5TZGtNZXRhZGF0YShcbiAgcGF0aDogc3RyaW5nLFxuICBzZGtSZXR1cm5WYWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdXG4pOlxuICB8IHtcbiAgICAgIFwieC1mZXJuLWlnbm9yZVwiOiB0cnVlXG4gICAgfVxuICB8IHtcbiAgICAgIFwieC1mZXJuLXNkay1ncm91cC1uYW1lXCI6IHN0cmluZ1tdXG4gICAgICBcIngtZmVybi1zZGstbWV0aG9kLW5hbWVcIjogc3RyaW5nXG4gICAgfSB7XG4gIGlmIChwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09IFwiXCIpLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICBcIngtZmVybi1pZ25vcmVcIjogdHJ1ZSxcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIFwieC1mZXJuLXNkay1ncm91cC1uYW1lXCI6IHRyYW5zZm9ybVBhdGhUb0Zlcm5TZGtHcm91cE5hbWUocGF0aCksXG4gICAgXCJ4LWZlcm4tc2RrLW1ldGhvZC1uYW1lXCI6IHRyYW5zZm9ybVBhdGhUb0Zlcm5TZGtNZXRob2ROYW1lKHBhdGgpLFxuICAgIC4uLihzZGtSZXR1cm5WYWx1ZVxuICAgICAgPyB7XG4gICAgICAgICAgXCJ4LWZlcm4tc2RrLXJldHVybi12YWx1ZVwiOiBzZGtSZXR1cm5WYWx1ZSxcbiAgICAgICAgfVxuICAgICAgOiB7fSksXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1hcE1ldGhvZHNUb0Zlcm5TZGtNZXRhZGF0YSh7XG4gIG1ldGhvZHMsXG4gIHBhdGgsXG4gIHNka1JldHVyblZhbHVlLFxufToge1xuICBtZXRob2RzOiBSb3V0ZVNwZWNbXCJtZXRob2RzXCJdXG4gIHBhdGg6IHN0cmluZ1xuICBzZGtSZXR1cm5WYWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdXG59KSB7XG4gIGNvbnN0IGZlcm5TZGtNZXRhZGF0YSA9IGdldEZlcm5TZGtNZXRhZGF0YShwYXRoLCBzZGtSZXR1cm5WYWx1ZSlcbiAgaWYgKG1ldGhvZHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFttZXRob2RzWzBdXTogZmVyblNka01ldGFkYXRhLFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1hcHBlZE1ldGhvZHMgPSB7fVxuXG4gIG1ldGhvZHMuZm9yRWFjaCgobWV0aG9kKSA9PiB7XG4gICAgaWYgKG1ldGhvZCA9PT0gXCJQT1NUXCIpIHtcbiAgICAgIG1hcHBlZE1ldGhvZHNbbWV0aG9kXSA9IGZlcm5TZGtNZXRhZGF0YVxuICAgIH0gZWxzZSB7XG4gICAgICBtYXBwZWRNZXRob2RzW21ldGhvZF0gPSB7XG4gICAgICAgIFwieC1mZXJuLWlnbm9yZVwiOiB0cnVlLFxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gbWFwcGVkTWV0aG9kc1xufVxuIiwgImltcG9ydCAqIGFzIGZzIGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCJcbmltcG9ydCB7IHBhcnNlUm91dGVzSW5QYWNrYWdlIH0gZnJvbSBcIi4uL2xpYi9wYXJzZS1yb3V0ZXMtaW4tcGFja2FnZVwiXG5pbXBvcnQgeyB6b2RUb1RzLCBwcmludE5vZGUgfSBmcm9tIFwiLi4vbGliL3pvZC10by10c1wiXG5pbXBvcnQgcHJldHRpZXIgZnJvbSBcInByZXR0aWVyXCJcbmltcG9ydCB7IHosIFpvZEVmZmVjdHMsIFpvZE9wdGlvbmFsIH0gZnJvbSBcInpvZFwiXG5cbmludGVyZmFjZSBHZW5lcmF0ZVJvdXRlVHlwZXNPcHRzIHtcbiAgcGFja2FnZURpcjogc3RyaW5nXG4gIG91dHB1dEZpbGU/OiBzdHJpbmdcbiAgcGF0aEdsb2I/OiBzdHJpbmdcbiAgYXBpUHJlZml4Pzogc3RyaW5nXG4gIG1hcEZpbGVQYXRoVG9IVFRQUm91dGU/OiAoZmlsZV9wYXRoOiBzdHJpbmcpID0+IHN0cmluZ1xuICAvKipcbiAgICogSWYgcHJvdmlkZWQsIG9ubHkgcm91dGVzIHRoYXQgcmV0dXJuIHRydWUgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZ2VuZXJhdGVkIHR5cGVzLlxuICAgKi9cbiAgZmlsdGVyUm91dGVzPzogKHJvdXRlOiBzdHJpbmcpID0+IGJvb2xlYW5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIHJvdXRlcyB0aGF0IGhhdmUgYGV4Y2x1ZGVGcm9tT3BlbkFwaWAgc2V0IHRvIHRydWUgd2lsbCBiZSBleGNsdWRlZCBmcm9tIHRoZSBnZW5lcmF0ZWQgdHlwZXMuXG4gICAqIFNldCB0aGlzIHRvIHRydWUgdG8gaW5jbHVkZSB0aGVtLlxuICAgKi9cbiAgaW5jbHVkZU9wZW5BcGlFeGNsdWRlZFJvdXRlcz86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUm91dGVUeXBlcyA9IGFzeW5jIChvcHRzOiBHZW5lcmF0ZVJvdXRlVHlwZXNPcHRzKSA9PiB7XG4gIGNvbnN0IGZpbGVwYXRoVG9Sb3V0ZSA9IGF3YWl0IHBhcnNlUm91dGVzSW5QYWNrYWdlKG9wdHMpXG5cbiAgY29uc3Qgc29ydGVkUm91dGVzID0gQXJyYXkuZnJvbShmaWxlcGF0aFRvUm91dGUuZW50cmllcygpKS5zb3J0KChhLCBiKSA9PlxuICAgIGFbMV0ucm91dGUubG9jYWxlQ29tcGFyZShiWzFdLnJvdXRlKVxuICApXG4gIGNvbnN0IGZpbHRlcmVkUm91dGVzID0gc29ydGVkUm91dGVzLmZpbHRlcihcbiAgICAoW18sIHsgcm91dGUgfV0pID0+ICFvcHRzLmZpbHRlclJvdXRlcyB8fCBvcHRzLmZpbHRlclJvdXRlcyhyb3V0ZSlcbiAgKVxuXG4gIC8vIFRPRE8gd2hlbiBsZXNzIGxhenksIHVzZSB0cy1tb3JwaCBmb3IgYmV0dGVyIGdlbmVyYXRpb25cbiAgY29uc3Qgcm91dGVEZWZzOiBzdHJpbmdbXSA9IFtdXG4gIGZvciAoY29uc3QgW18sIHsgcm91dGUsIHJvdXRlU3BlYywgc2V0dXBQYXJhbXMgfV0gb2YgZmlsdGVyZWRSb3V0ZXMpIHtcbiAgICBjb25zdCBxdWVyeUtleXMgPSBPYmplY3Qua2V5cyhyb3V0ZVNwZWMucXVlcnlQYXJhbXM/LnNoYXBlID8/IHt9KVxuICAgIGNvbnN0IHBhdGhQYXJhbWV0ZXJzID0gcXVlcnlLZXlzLmZpbHRlcigoa2V5KSA9PiByb3V0ZS5pbmNsdWRlcyhgWyR7a2V5fV1gKSlcblxuICAgIC8vIHF1ZXJ5UGFyYW1zIG1pZ2h0IGJlIGEgWm9kRWZmZWN0cyBvciBab2RPcHRpb25hbCBpbiBzb21lIGNhc2VzXG4gICAgbGV0IHF1ZXJ5UGFyYW1zID0gcm91dGVTcGVjLnF1ZXJ5UGFyYW1zXG4gICAgd2hpbGUgKFxuICAgICAgcXVlcnlQYXJhbXMgJiZcbiAgICAgIChcInNvdXJjZVR5cGVcIiBpbiBxdWVyeVBhcmFtcyB8fCBcInVud3JhcFwiIGluIHF1ZXJ5UGFyYW1zKVxuICAgICkge1xuICAgICAgaWYgKFwic291cmNlVHlwZVwiIGluIHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zID0gKHF1ZXJ5UGFyYW1zIGFzIHVua25vd24gYXMgWm9kRWZmZWN0czxhbnk+KS5zb3VyY2VUeXBlKClcbiAgICAgIH0gZWxzZSBpZiAoXCJ1bndyYXBcIiBpbiBxdWVyeVBhcmFtcykge1xuICAgICAgICBxdWVyeVBhcmFtcyA9IChxdWVyeVBhcmFtcyBhcyB1bmtub3duIGFzIFpvZE9wdGlvbmFsPGFueT4pLnVud3JhcCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zICYmIFwib21pdFwiIGluIHF1ZXJ5UGFyYW1zKSB7XG4gICAgICBxdWVyeVBhcmFtcyA9IHF1ZXJ5UGFyYW1zLm9taXQoXG4gICAgICAgIE9iamVjdC5mcm9tRW50cmllcyhwYXRoUGFyYW1ldGVycy5tYXAoKHBhcmFtKSA9PiBbcGFyYW0sIHRydWVdKSlcbiAgICAgIClcbiAgICB9XG5cbiAgICByb3V0ZURlZnMucHVzaChcbiAgICAgIGBcblwiJHtyb3V0ZX1cIjoge1xuICByb3V0ZTogXCIke3JvdXRlfVwiLFxuICBtZXRob2Q6ICR7cm91dGVTcGVjLm1ldGhvZHMubWFwKChtKSA9PiBgXCIke219XCJgKS5qb2luKFwiIHwgXCIpfSxcbiAgcXVlcnlQYXJhbXM6ICR7cXVlcnlQYXJhbXMgPyBwcmludE5vZGUoem9kVG9UcyhxdWVyeVBhcmFtcykubm9kZSkgOiBcInt9XCJ9LFxuICBqc29uQm9keTogJHtcbiAgICByb3V0ZVNwZWMuanNvbkJvZHkgPyBwcmludE5vZGUoem9kVG9Ucyhyb3V0ZVNwZWMuanNvbkJvZHkpLm5vZGUpIDogXCJ7fVwiXG4gIH0sXG4gIGNvbW1vblBhcmFtczogJHtcbiAgICByb3V0ZVNwZWMuY29tbW9uUGFyYW1zXG4gICAgICA/IHByaW50Tm9kZSh6b2RUb1RzKHJvdXRlU3BlYy5jb21tb25QYXJhbXMpLm5vZGUpXG4gICAgICA6IFwie31cIlxuICB9LFxuICBmb3JtRGF0YTogJHtcbiAgICByb3V0ZVNwZWMuZm9ybURhdGEgPyBwcmludE5vZGUoem9kVG9Ucyhyb3V0ZVNwZWMuZm9ybURhdGEpLm5vZGUpIDogXCJ7fVwiXG4gIH0sXG4gIGpzb25SZXNwb25zZTogJHtcbiAgICByb3V0ZVNwZWMuanNvblJlc3BvbnNlXG4gICAgICA/IHByaW50Tm9kZShcbiAgICAgICAgICB6b2RUb1RzKFxuICAgICAgICAgICAgc2V0dXBQYXJhbXMuYWRkT2tTdGF0dXMgJiZcbiAgICAgICAgICAgICAgcm91dGVTcGVjLmpzb25SZXNwb25zZSBpbnN0YW5jZW9mIHouWm9kT2JqZWN0XG4gICAgICAgICAgICAgID8gcm91dGVTcGVjLmpzb25SZXNwb25zZS5leHRlbmQoeyBvazogei5ib29sZWFuKCkgfSlcbiAgICAgICAgICAgICAgOiByb3V0ZVNwZWMuanNvblJlc3BvbnNlXG4gICAgICAgICAgKS5ub2RlXG4gICAgICAgIClcbiAgICAgIDogXCJ7fVwiXG4gIH1cbn1gLnRyaW0oKVxuICAgIClcbiAgfVxuICBjb25zdCByb3V0ZURlZlN0ciA9IHJvdXRlRGVmcy5qb2luKFwiLFxcblwiKVxuICBjb25zdCBvdXRwdXQgPSBhd2FpdCBwcmV0dGllci5mb3JtYXQoXG4gICAgYGV4cG9ydCB0eXBlIFJvdXRlcyA9IHtcbiR7cm91dGVEZWZTdHJ9XG59XG5cbmV4cG9ydCB0eXBlIFJvdXRlUmVzcG9uc2U8UGF0aCBleHRlbmRzIGtleW9mIFJvdXRlcz4gPVxuICBSb3V0ZXNbUGF0aF1bXCJqc29uUmVzcG9uc2VcIl1cblxuZXhwb3J0IHR5cGUgUm91dGVSZXF1ZXN0Qm9keTxQYXRoIGV4dGVuZHMga2V5b2YgUm91dGVzPiA9XG4gIFJvdXRlc1tQYXRoXVtcImpzb25Cb2R5XCJdICYgUm91dGVzW1BhdGhdW1wiY29tbW9uUGFyYW1zXCJdXG5cbmV4cG9ydCB0eXBlIFJvdXRlUmVxdWVzdFBhcmFtczxQYXRoIGV4dGVuZHMga2V5b2YgUm91dGVzPiA9XG4gIFJvdXRlc1tQYXRoXVtcInF1ZXJ5UGFyYW1zXCJdICYgUm91dGVzW1BhdGhdW1wiY29tbW9uUGFyYW1zXCJdXG5gLnRyaW0oKSxcbiAgICB7IHNlbWk6IGZhbHNlLCBwYXJzZXI6IFwidHlwZXNjcmlwdFwiIH1cbiAgKVxuXG4gIGlmIChvcHRzLm91dHB1dEZpbGUpIHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUob3B0cy5vdXRwdXRGaWxlLCBvdXRwdXQpXG4gIH1cblxuICByZXR1cm4gb3V0cHV0XG59XG4iLCAiLyoqXG4gKiBab2QgVG8gVFNcbiAqXG4gKiBWZW5kb3JlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zYWNoaW5yYWphL3pvZC10by10c1xuICpcbiAqIE1JVCBMaWNlbnNlXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDIxIFNhY2hpbiBSYWphXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgdHMgZnJvbSBcInR5cGVzY3JpcHRcIlxuaW1wb3J0IHsgWm9kVHlwZSwgWm9kVHlwZUFueSB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgcGFyc2VGcm9udE1hdHRlciwgdGVzdEZyb250TWF0dGVyIH0gZnJvbSBcIi4vZnJvbnQtbWF0dGVyXCJcbmltcG9ydCBkZWRlbnQgZnJvbSBcImRlZGVudFwiXG5cbmNvbnN0IHsgZmFjdG9yeTogZiwgU3ludGF4S2luZCwgU2NyaXB0S2luZCwgU2NyaXB0VGFyZ2V0LCBFbWl0SGludCB9ID0gdHNcblxuY29uc3QgbWF5YmVJZGVudGlmaWVyVG9UeXBlUmVmZXJlbmNlID0gKFxuICBpZGVudGlmaWVyOiB0cy5JZGVudGlmaWVyIHwgdHMuVHlwZU5vZGVcbikgPT4ge1xuICBpZiAodHMuaXNJZGVudGlmaWVyKGlkZW50aWZpZXIpKSB7XG4gICAgcmV0dXJuIGYuY3JlYXRlVHlwZVJlZmVyZW5jZU5vZGUoaWRlbnRpZmllcilcbiAgfVxuXG4gIHJldHVybiBpZGVudGlmaWVyXG59XG5cbmNvbnN0IGNyZWF0ZVR5cGVSZWZlcmVuY2VGcm9tU3RyaW5nID0gKGlkZW50aWZpZXI6IHN0cmluZykgPT5cbiAgZi5jcmVhdGVUeXBlUmVmZXJlbmNlTm9kZShmLmNyZWF0ZUlkZW50aWZpZXIoaWRlbnRpZmllcikpXG5cbmNvbnN0IGNyZWF0ZVVua25vd25LZXl3b3JkTm9kZSA9ICgpID0+XG4gIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuVW5rbm93bktleXdvcmQpXG5cbmV4cG9ydCBjb25zdCBwcmludE5vZGUgPSAoXG4gIG5vZGU6IHRzLk5vZGUsXG4gIHByaW50ZXJPcHRpb25zPzogdHMuUHJpbnRlck9wdGlvbnNcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHNvdXJjZUZpbGUgPSB0cy5jcmVhdGVTb3VyY2VGaWxlKFxuICAgIFwicHJpbnQudHNcIixcbiAgICBcIlwiLFxuICAgIFNjcmlwdFRhcmdldC5MYXRlc3QsXG4gICAgZmFsc2UsXG4gICAgU2NyaXB0S2luZC5UU1xuICApXG4gIGNvbnN0IHByaW50ZXIgPSB0cy5jcmVhdGVQcmludGVyKHByaW50ZXJPcHRpb25zKVxuICByZXR1cm4gcHJpbnRlci5wcmludE5vZGUoRW1pdEhpbnQuVW5zcGVjaWZpZWQsIG5vZGUsIHNvdXJjZUZpbGUpXG59XG5cbmNvbnN0IGlkZW50aWZpZXJSRSA9IC9eWyRBLVpfYS16XVtcXHckXSokL1xuXG5jb25zdCBnZXRJZGVudGlmaWVyT3JTdHJpbmdMaXRlcmFsID0gKHN0cmluZ186IHN0cmluZykgPT4ge1xuICBpZiAoaWRlbnRpZmllclJFLnRlc3Qoc3RyaW5nXykpIHtcbiAgICByZXR1cm4gZi5jcmVhdGVJZGVudGlmaWVyKHN0cmluZ18pXG4gIH1cblxuICByZXR1cm4gZi5jcmVhdGVTdHJpbmdMaXRlcmFsKHN0cmluZ18pXG59XG5cbmNvbnN0IGFkZEpzRG9jQ29tbWVudCA9IChub2RlOiB0cy5Ob2RlLCB0ZXh0OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgeyBkZXNjcmlwdGlvbiwgZGVwcmVjYXRlZCB9ID0gcGFyc2VEZXNjcmlwdGlvbih0ZXh0KVxuXG4gIGxldCBjb21tZW50ID0gYCogJHtkZXNjcmlwdGlvbn1gXG4gIGlmIChkZXByZWNhdGVkKSB7XG4gICAgY29tbWVudCArPSBgXFxuICogQGRlcHJlY2F0ZWQgJHtcbiAgICAgIHR5cGVvZiBkZXByZWNhdGVkID09PSBcInN0cmluZ1wiID8gZGVwcmVjYXRlZCA6IFwiXCJcbiAgICB9YFxuICB9IGVsc2Uge1xuICAgIGNvbW1lbnQgKz0gYCBgXG4gIH1cblxuICB0cy5hZGRTeW50aGV0aWNMZWFkaW5nQ29tbWVudChcbiAgICBub2RlLFxuICAgIFN5bnRheEtpbmQuTXVsdGlMaW5lQ29tbWVudFRyaXZpYSxcbiAgICBjb21tZW50LFxuICAgIHRydWVcbiAgKVxufVxuXG50eXBlIFBhcnNlZERlc2NyaXB0aW9uID0ge1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gIGRlcHJlY2F0ZWQ/OiBib29sZWFuIHwgc3RyaW5nXG4gIFtrZXk6IHN0cmluZ106IHVua25vd25cbn1cblxuZnVuY3Rpb24gcGFyc2VEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogc3RyaW5nKTogUGFyc2VkRGVzY3JpcHRpb24ge1xuICBpZiAoIWRlc2NyaXB0aW9uKVxuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICB9XG4gIGNvbnN0IHRyaW1tZWREZXNjcmlwdGlvbiA9IGRlZGVudChkZXNjcmlwdGlvbilcbiAgaWYgKCF0ZXN0RnJvbnRNYXR0ZXIodHJpbW1lZERlc2NyaXB0aW9uKSkgcmV0dXJuIHsgZGVzY3JpcHRpb24gfVxuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGJvZHkgfSA9IHBhcnNlRnJvbnRNYXR0ZXIodHJpbW1lZERlc2NyaXB0aW9uKVxuICBjb25zdCBvdXRwdXQ6IFBhcnNlZERlc2NyaXB0aW9uID0ge1xuICAgIGRlc2NyaXB0aW9uOiBib2R5LnRyaW0oKSxcbiAgfVxuICBpZiAodHlwZW9mIGF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIgJiYgYXR0cmlidXRlcyAhPT0gbnVsbCkge1xuICAgIGlmIChcImRlcHJlY2F0ZWRcIiBpbiBhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMuZGVwcmVjYXRlZCkge1xuICAgICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzLmRlcHJlY2F0ZWQgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIG91dHB1dC5kZXByZWNhdGVkID0gdHJ1ZVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXR0cmlidXRlcy5kZXByZWNhdGVkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIG91dHB1dC5kZXByZWNhdGVkID1cbiAgICAgICAgICBhdHRyaWJ1dGVzLmRlcHJlY2F0ZWQubGVuZ3RoID4gMCA/IGF0dHJpYnV0ZXMuZGVwcmVjYXRlZCA6IHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcykpIHtcbiAgICAgIGlmIChrZXkgPT09IFwiZGVzY3JpcHRpb25cIiB8fCBrZXkgPT09IFwiZGVwcmVjYXRlZFwiKSBjb250aW51ZVxuICAgICAgb3V0cHV0W2tleV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0cHV0XG59XG5cbnR5cGUgTGl0ZXJhbFR5cGUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuXG5cbnR5cGUgWm9kVG9Uc09wdGlvbnMgPSB7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgYG5hdGl2ZUVudW1zYCBpbnN0ZWFkICovXG4gIHJlc29sdmVOYXRpdmVFbnVtcz86IGJvb2xlYW5cbiAgbmF0aXZlRW51bXM/OiBcImlkZW50aWZpZXJcIiB8IFwicmVzb2x2ZVwiIHwgXCJ1bmlvblwiXG59XG5cbmNvbnN0IHJlc29sdmVPcHRpb25zID0gKHJhdz86IFpvZFRvVHNPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHJlc29sdmVkID0ge1xuICAgIG5hdGl2ZUVudW1zOiByYXc/LnJlc29sdmVOYXRpdmVFbnVtcyA/IFwicmVzb2x2ZVwiIDogXCJpZGVudGlmaWVyXCIsXG4gIH1cblxuICByZXR1cm4geyAuLi5yZXNvbHZlZCwgLi4ucmF3IH1cbn1cblxudHlwZSBSZXNvbHZlZFpvZFRvVHNPcHRpb25zID0gUmV0dXJuVHlwZTx0eXBlb2YgcmVzb2x2ZU9wdGlvbnM+XG5cbnR5cGUgWm9kVG9Uc1N0b3JlID0ge1xuICBuYXRpdmVFbnVtczogdHMuRW51bURlY2xhcmF0aW9uW11cbn1cblxudHlwZSBab2RUb1RzUmV0dXJuID0ge1xuICBub2RlOiB0cy5UeXBlTm9kZVxuICBzdG9yZTogWm9kVG9Uc1N0b3JlXG59XG5cbnR5cGUgR2V0VHlwZUZ1bmN0aW9uID0gKFxuICB0eXBlc2NyaXB0OiB0eXBlb2YgdHMsXG4gIGlkZW50aWZpZXI6IHN0cmluZyxcbiAgb3B0aW9uczogUmVzb2x2ZWRab2RUb1RzT3B0aW9uc1xuKSA9PiB0cy5JZGVudGlmaWVyIHwgdHMuVHlwZU5vZGVcblxudHlwZSBHZXRUeXBlID0geyBfZGVmOiB7IGdldFR5cGU/OiBHZXRUeXBlRnVuY3Rpb24gfSB9XG5cbmNvbnN0IGNhbGxHZXRUeXBlID0gKFxuICB6b2Q6IFpvZFR5cGVBbnksXG4gIGlkZW50aWZpZXI6IHN0cmluZyxcbiAgb3B0aW9uczogUmVzb2x2ZWRab2RUb1RzT3B0aW9uc1xuKSA9PiB7XG4gIGxldCB0eXBlOiBSZXR1cm5UeXBlPEdldFR5cGVGdW5jdGlvbj4gfCB1bmRlZmluZWRcblxuICBjb25zdCBnZXRUeXBlU2NoZW1hID0gem9kIGFzIEdldFR5cGVcbiAgLy8gdGhpcyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgYWNjZXNzaW5nICd0eXBlJ1xuICBpZiAoZ2V0VHlwZVNjaGVtYS5fZGVmLmdldFR5cGUpXG4gICAgdHlwZSA9IGdldFR5cGVTY2hlbWEuX2RlZi5nZXRUeXBlKHRzLCBpZGVudGlmaWVyLCBvcHRpb25zKVxuICByZXR1cm4gdHlwZVxufVxuXG5leHBvcnQgY29uc3Qgem9kVG9UcyA9IChcbiAgem9kOiBab2RUeXBlQW55LFxuICBpZGVudGlmaWVyPzogc3RyaW5nLFxuICBvcHRpb25zPzogWm9kVG9Uc09wdGlvbnNcbik6IFpvZFRvVHNSZXR1cm4gPT4ge1xuICBpZiAoISh6b2QgaW5zdGFuY2VvZiBab2RUeXBlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBub2RlOiBjcmVhdGVVbmtub3duS2V5d29yZE5vZGUoKSxcbiAgICAgIHN0b3JlOiB7IG5hdGl2ZUVudW1zOiBbXSB9LFxuICAgIH1cbiAgfVxuICBjb25zdCByZXNvbHZlZElkZW50aWZpZXIgPSBpZGVudGlmaWVyID8/IFwiSWRlbnRpZmllclwiXG5cbiAgY29uc3QgcmVzb2x2ZWRPcHRpb25zID0gcmVzb2x2ZU9wdGlvbnMob3B0aW9ucylcblxuICBjb25zdCBzdG9yZTogWm9kVG9Uc1N0b3JlID0geyBuYXRpdmVFbnVtczogW10gfVxuXG4gIGNvbnN0IG5vZGUgPSB6b2RUb1RzTm9kZSh6b2QsIHJlc29sdmVkSWRlbnRpZmllciwgc3RvcmUsIHJlc29sdmVkT3B0aW9ucylcblxuICByZXR1cm4geyBub2RlLCBzdG9yZSB9XG59XG5cbmNvbnN0IHpvZFRvVHNOb2RlID0gKFxuICB6b2Q6IFpvZFR5cGVBbnksXG4gIGlkZW50aWZpZXI6IHN0cmluZyxcbiAgc3RvcmU6IFpvZFRvVHNTdG9yZSxcbiAgb3B0aW9uczogUmVzb2x2ZWRab2RUb1RzT3B0aW9uc1xuKSA9PiB7XG4gIGNvbnN0IHR5cGVOYW1lID0gem9kLl9kZWYudHlwZU5hbWVcblxuICBjb25zdCBnZXRUeXBlVHlwZSA9IGNhbGxHZXRUeXBlKHpvZCwgaWRlbnRpZmllciwgb3B0aW9ucylcbiAgLy8gc3BlY2lhbCBjYXNlIG5hdGl2ZSBlbnVtLCB3aGljaCBuZWVkcyBhbiBpZGVudGlmaWVyIG5vZGVcbiAgaWYgKGdldFR5cGVUeXBlICYmIHR5cGVOYW1lICE9PSBcIlpvZE5hdGl2ZUVudW1cIikge1xuICAgIHJldHVybiBtYXliZUlkZW50aWZpZXJUb1R5cGVSZWZlcmVuY2UoZ2V0VHlwZVR5cGUpXG4gIH1cblxuICBjb25zdCBvdGhlckFyZ3VtZW50cyA9IFtpZGVudGlmaWVyLCBzdG9yZSwgb3B0aW9uc10gYXMgY29uc3RcblxuICBzd2l0Y2ggKHR5cGVOYW1lKSB7XG4gICAgY2FzZSBcIlpvZFN0cmluZ1wiOiB7XG4gICAgICByZXR1cm4gZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5TdHJpbmdLZXl3b3JkKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kTnVtYmVyXCI6IHtcbiAgICAgIHJldHVybiBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLk51bWJlcktleXdvcmQpXG4gICAgfVxuICAgIGNhc2UgXCJab2RCaWdJbnRcIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuQmlnSW50S2V5d29yZClcbiAgICB9XG4gICAgY2FzZSBcIlpvZEJvb2xlYW5cIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuQm9vbGVhbktleXdvcmQpXG4gICAgfVxuICAgIGNhc2UgXCJab2REYXRlXCI6IHtcbiAgICAgIHJldHVybiBmLmNyZWF0ZVR5cGVSZWZlcmVuY2VOb2RlKGYuY3JlYXRlSWRlbnRpZmllcihcIkRhdGVcIikpXG4gICAgfVxuICAgIGNhc2UgXCJab2RVbmRlZmluZWRcIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuVW5kZWZpbmVkS2V5d29yZClcbiAgICB9XG4gICAgY2FzZSBcIlpvZE51bGxcIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlTGl0ZXJhbFR5cGVOb2RlKGYuY3JlYXRlTnVsbCgpKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kVm9pZFwiOiB7XG4gICAgICByZXR1cm4gZi5jcmVhdGVVbmlvblR5cGVOb2RlKFtcbiAgICAgICAgZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5Wb2lkS2V5d29yZCksXG4gICAgICAgIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuVW5kZWZpbmVkS2V5d29yZCksXG4gICAgICBdKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kQW55XCI6IHtcbiAgICAgIHJldHVybiBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLkFueUtleXdvcmQpXG4gICAgfVxuICAgIGNhc2UgXCJab2RVbmtub3duXCI6IHtcbiAgICAgIHJldHVybiBjcmVhdGVVbmtub3duS2V5d29yZE5vZGUoKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kTmV2ZXJcIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuTmV2ZXJLZXl3b3JkKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kTGF6eVwiOiB7XG4gICAgICAvLyBpdCBpcyBpbXBvc3NpYmxlIHRvIGRldGVybWluZSB3aGF0IHRoZSBsYXp5IHZhbHVlIGlzIHJlZmVycmluZyB0b1xuICAgICAgLy8gc28gd2UgZm9yY2UgdGhlIHVzZXIgdG8gZGVjbGFyZSBpdFxuICAgICAgaWYgKCFnZXRUeXBlVHlwZSkgcmV0dXJuIGNyZWF0ZVR5cGVSZWZlcmVuY2VGcm9tU3RyaW5nKGlkZW50aWZpZXIpXG4gICAgICBicmVha1xuICAgIH1cbiAgICBjYXNlIFwiWm9kTGl0ZXJhbFwiOiB7XG4gICAgICAvLyB6LmxpdGVyYWwoJ2hpJykgLT4gJ2hpJ1xuICAgICAgbGV0IGxpdGVyYWw6IHRzLkxpdGVyYWxFeHByZXNzaW9uIHwgdHMuQm9vbGVhbkxpdGVyYWxcblxuICAgICAgY29uc3QgbGl0ZXJhbFZhbHVlID0gem9kLl9kZWYudmFsdWUgYXMgTGl0ZXJhbFR5cGVcbiAgICAgIHN3aXRjaCAodHlwZW9mIGxpdGVyYWxWYWx1ZSkge1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6IHtcbiAgICAgICAgICBsaXRlcmFsID0gZi5jcmVhdGVOdW1lcmljTGl0ZXJhbChsaXRlcmFsVmFsdWUpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOiB7XG4gICAgICAgICAgbGl0ZXJhbCA9IGxpdGVyYWxWYWx1ZSA9PT0gdHJ1ZSA/IGYuY3JlYXRlVHJ1ZSgpIDogZi5jcmVhdGVGYWxzZSgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgbGl0ZXJhbCA9IGYuY3JlYXRlU3RyaW5nTGl0ZXJhbChsaXRlcmFsVmFsdWUpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZi5jcmVhdGVMaXRlcmFsVHlwZU5vZGUobGl0ZXJhbClcbiAgICB9XG4gICAgY2FzZSBcIlpvZE9iamVjdFwiOiB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmVudHJpZXMoem9kLl9kZWYuc2hhcGUoKSlcblxuICAgICAgY29uc3QgbWVtYmVyczogdHMuVHlwZUVsZW1lbnRbXSA9IHByb3BlcnRpZXMubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgY29uc3QgbmV4dFpvZE5vZGUgPSB2YWx1ZSBhcyBab2RUeXBlQW55XG4gICAgICAgIGNvbnN0IHR5cGUgPSB6b2RUb1RzTm9kZShuZXh0Wm9kTm9kZSwgLi4ub3RoZXJBcmd1bWVudHMpXG5cbiAgICAgICAgY29uc3QgeyB0eXBlTmFtZTogbmV4dFpvZE5vZGVUeXBlTmFtZSB9ID0gbmV4dFpvZE5vZGUuX2RlZlxuICAgICAgICBjb25zdCBpc09wdGlvbmFsID1cbiAgICAgICAgICBuZXh0Wm9kTm9kZVR5cGVOYW1lID09PSBcIlpvZE9wdGlvbmFsXCIgfHwgbmV4dFpvZE5vZGUuaXNPcHRpb25hbCgpXG5cbiAgICAgICAgY29uc3QgcHJvcGVydHlTaWduYXR1cmUgPSBmLmNyZWF0ZVByb3BlcnR5U2lnbmF0dXJlKFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBnZXRJZGVudGlmaWVyT3JTdHJpbmdMaXRlcmFsKGtleSksXG4gICAgICAgICAgaXNPcHRpb25hbCA/IGYuY3JlYXRlVG9rZW4oU3ludGF4S2luZC5RdWVzdGlvblRva2VuKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0eXBlXG4gICAgICAgIClcblxuICAgICAgICBpZiAobmV4dFpvZE5vZGUuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICBhZGRKc0RvY0NvbW1lbnQocHJvcGVydHlTaWduYXR1cmUsIG5leHRab2ROb2RlLmRlc2NyaXB0aW9uKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByb3BlcnR5U2lnbmF0dXJlXG4gICAgICB9KVxuICAgICAgcmV0dXJuIGYuY3JlYXRlVHlwZUxpdGVyYWxOb2RlKG1lbWJlcnMpXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZEFycmF5XCI6IHtcbiAgICAgIGNvbnN0IHR5cGUgPSB6b2RUb1RzTm9kZSh6b2QuX2RlZi50eXBlLCAuLi5vdGhlckFyZ3VtZW50cylcbiAgICAgIGNvbnN0IG5vZGUgPSBmLmNyZWF0ZUFycmF5VHlwZU5vZGUodHlwZSlcbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZEVudW1cIjoge1xuICAgICAgLy8gei5lbnVtWydhJywgJ2InLCAnYyddIC0+ICdhJyB8ICdiJyB8ICdjXG4gICAgICBjb25zdCB0eXBlcyA9IHpvZC5fZGVmLnZhbHVlcy5tYXAoKHZhbHVlOiBzdHJpbmcpID0+XG4gICAgICAgIGYuY3JlYXRlTGl0ZXJhbFR5cGVOb2RlKGYuY3JlYXRlU3RyaW5nTGl0ZXJhbCh2YWx1ZSkpXG4gICAgICApXG4gICAgICByZXR1cm4gZi5jcmVhdGVVbmlvblR5cGVOb2RlKHR5cGVzKVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RVbmlvblwiOiB7XG4gICAgICAvLyB6LnVuaW9uKFt6LnN0cmluZygpLCB6Lm51bWJlcigpXSkgLT4gc3RyaW5nIHwgbnVtYmVyXG4gICAgICBjb25zdCBvcHRpb25zOiBab2RUeXBlQW55W10gPSB6b2QuX2RlZi5vcHRpb25zXG4gICAgICBjb25zdCB0eXBlczogdHMuVHlwZU5vZGVbXSA9IG9wdGlvbnMubWFwKChvcHRpb24pID0+XG4gICAgICAgIHpvZFRvVHNOb2RlKG9wdGlvbiwgLi4ub3RoZXJBcmd1bWVudHMpXG4gICAgICApXG4gICAgICByZXR1cm4gZi5jcmVhdGVVbmlvblR5cGVOb2RlKHR5cGVzKVxuICAgIH1cblxuICAgIGNhc2UgXCJab2REaXNjcmltaW5hdGVkVW5pb25cIjoge1xuICAgICAgLy8gei5kaXNjcmltaW5hdGVkVW5pb24oJ2tpbmQnLCBbei5vYmplY3QoeyBraW5kOiB6LmxpdGVyYWwoJ2EnKSwgYTogei5zdHJpbmcoKSB9KSwgei5vYmplY3QoeyBraW5kOiB6LmxpdGVyYWwoJ2InKSwgYjogei5udW1iZXIoKSB9KV0pIC0+IHsga2luZDogJ2EnLCBhOiBzdHJpbmcgfSB8IHsga2luZDogJ2InLCBiOiBudW1iZXIgfVxuICAgICAgY29uc3Qgb3B0aW9uczogWm9kVHlwZUFueVtdID0gWy4uLnpvZC5fZGVmLm9wdGlvbnMudmFsdWVzKCldXG4gICAgICBjb25zdCB0eXBlczogdHMuVHlwZU5vZGVbXSA9IG9wdGlvbnMubWFwKChvcHRpb24pID0+XG4gICAgICAgIHpvZFRvVHNOb2RlKG9wdGlvbiwgLi4ub3RoZXJBcmd1bWVudHMpXG4gICAgICApXG4gICAgICByZXR1cm4gZi5jcmVhdGVVbmlvblR5cGVOb2RlKHR5cGVzKVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RFZmZlY3RzXCI6IHtcbiAgICAgIC8vIGlnbm9yZSBhbnkgZWZmZWN0cywgdGhleSB3b24ndCBmYWN0b3IgaW50byB0aGUgdHlwZXNcbiAgICAgIGNvbnN0IG5vZGUgPSB6b2RUb1RzTm9kZShcbiAgICAgICAgem9kLl9kZWYuc2NoZW1hLFxuICAgICAgICAuLi5vdGhlckFyZ3VtZW50c1xuICAgICAgKSBhcyB0cy5UeXBlTm9kZVxuICAgICAgcmV0dXJuIG5vZGVcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kTmF0aXZlRW51bVwiOiB7XG4gICAgICBjb25zdCB0eXBlID0gZ2V0VHlwZVR5cGVcblxuICAgICAgaWYgKG9wdGlvbnMubmF0aXZlRW51bXMgPT09IFwidW5pb25cIikge1xuICAgICAgICAvLyBhbGxvdyBvdmVycmlkaW5nIHdpdGggdGhpcyBvcHRpb25cbiAgICAgICAgaWYgKHR5cGUpIHJldHVybiBtYXliZUlkZW50aWZpZXJUb1R5cGVSZWZlcmVuY2UodHlwZSlcblxuICAgICAgICBjb25zdCB0eXBlcyA9IE9iamVjdC52YWx1ZXMoem9kLl9kZWYudmFsdWVzKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuIGYuY3JlYXRlTGl0ZXJhbFR5cGVOb2RlKGYuY3JlYXRlTnVtZXJpY0xpdGVyYWwodmFsdWUpKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZi5jcmVhdGVMaXRlcmFsVHlwZU5vZGUoZi5jcmVhdGVTdHJpbmdMaXRlcmFsKHZhbHVlIGFzIHN0cmluZykpXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiBmLmNyZWF0ZVVuaW9uVHlwZU5vZGUodHlwZXMpXG4gICAgICB9XG5cbiAgICAgIC8vIHoubmF0aXZlRW51bShGcnVpdHMpIC0+IEZydWl0c1xuICAgICAgLy8gY2FuIHJlc29sdmUgRnJ1aXRzIGludG8gc3RvcmUgYW5kIHVzZXIgY2FuIGhhbmRsZSBlbnVtc1xuICAgICAgaWYgKCF0eXBlKSByZXR1cm4gY3JlYXRlVW5rbm93bktleXdvcmROb2RlKClcblxuICAgICAgaWYgKG9wdGlvbnMubmF0aXZlRW51bXMgPT09IFwicmVzb2x2ZVwiKSB7XG4gICAgICAgIGNvbnN0IGVudW1NZW1iZXJzID0gT2JqZWN0LmVudHJpZXMoXG4gICAgICAgICAgem9kLl9kZWYudmFsdWVzIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj5cbiAgICAgICAgKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxpdGVyYWwgPVxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiXG4gICAgICAgICAgICAgID8gZi5jcmVhdGVOdW1lcmljTGl0ZXJhbCh2YWx1ZSlcbiAgICAgICAgICAgICAgOiBmLmNyZWF0ZVN0cmluZ0xpdGVyYWwodmFsdWUpXG5cbiAgICAgICAgICByZXR1cm4gZi5jcmVhdGVFbnVtTWVtYmVyKGdldElkZW50aWZpZXJPclN0cmluZ0xpdGVyYWwoa2V5KSwgbGl0ZXJhbClcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAodHMuaXNJZGVudGlmaWVyKHR5cGUpKSB7XG4gICAgICAgICAgc3RvcmUubmF0aXZlRW51bXMucHVzaChcbiAgICAgICAgICAgIGYuY3JlYXRlRW51bURlY2xhcmF0aW9uKHVuZGVmaW5lZCwgdHlwZSwgZW51bU1lbWJlcnMpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdnZXRUeXBlIG9uIG5hdGl2ZUVudW0gbXVzdCByZXR1cm4gYW4gaWRlbnRpZmllciB3aGVuIG5hdGl2ZUVudW1zIGlzIFwicmVzb2x2ZVwiJ1xuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWF5YmVJZGVudGlmaWVyVG9UeXBlUmVmZXJlbmNlKHR5cGUpXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZE9wdGlvbmFsXCI6IHtcbiAgICAgIGNvbnN0IGlubmVyVHlwZSA9IHpvZFRvVHNOb2RlKFxuICAgICAgICB6b2QuX2RlZi5pbm5lclR5cGUsXG4gICAgICAgIC4uLm90aGVyQXJndW1lbnRzXG4gICAgICApIGFzIHRzLlR5cGVOb2RlXG4gICAgICByZXR1cm4gZi5jcmVhdGVVbmlvblR5cGVOb2RlKFtcbiAgICAgICAgaW5uZXJUeXBlLFxuICAgICAgICBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLlVuZGVmaW5lZEtleXdvcmQpLFxuICAgICAgXSlcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kTnVsbGFibGVcIjoge1xuICAgICAgY29uc3QgaW5uZXJUeXBlID0gem9kVG9Uc05vZGUoXG4gICAgICAgIHpvZC5fZGVmLmlubmVyVHlwZSxcbiAgICAgICAgLi4ub3RoZXJBcmd1bWVudHNcbiAgICAgICkgYXMgdHMuVHlwZU5vZGVcbiAgICAgIHJldHVybiBmLmNyZWF0ZVVuaW9uVHlwZU5vZGUoW1xuICAgICAgICBpbm5lclR5cGUsXG4gICAgICAgIGYuY3JlYXRlTGl0ZXJhbFR5cGVOb2RlKGYuY3JlYXRlTnVsbCgpKSxcbiAgICAgIF0pXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZFR1cGxlXCI6IHtcbiAgICAgIC8vIHoudHVwbGUoW3ouc3RyaW5nKCksIHoubnVtYmVyKCldKSAtPiBbc3RyaW5nLCBudW1iZXJdXG4gICAgICBjb25zdCB0eXBlcyA9IHpvZC5fZGVmLml0ZW1zLm1hcCgob3B0aW9uOiBab2RUeXBlQW55KSA9PlxuICAgICAgICB6b2RUb1RzTm9kZShvcHRpb24sIC4uLm90aGVyQXJndW1lbnRzKVxuICAgICAgKVxuICAgICAgcmV0dXJuIGYuY3JlYXRlVHVwbGVUeXBlTm9kZSh0eXBlcylcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kUmVjb3JkXCI6IHtcbiAgICAgIC8vIHoucmVjb3JkKHoubnVtYmVyKCkpIC0+IHsgW3g6IHN0cmluZ106IG51bWJlciB9XG4gICAgICBjb25zdCB2YWx1ZVR5cGUgPSB6b2RUb1RzTm9kZSh6b2QuX2RlZi52YWx1ZVR5cGUsIC4uLm90aGVyQXJndW1lbnRzKVxuXG4gICAgICBjb25zdCBub2RlID0gZi5jcmVhdGVUeXBlTGl0ZXJhbE5vZGUoW1xuICAgICAgICBmLmNyZWF0ZUluZGV4U2lnbmF0dXJlKFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBmLmNyZWF0ZVBhcmFtZXRlckRlY2xhcmF0aW9uKFxuICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgZi5jcmVhdGVJZGVudGlmaWVyKFwieFwiKSxcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLlN0cmluZ0tleXdvcmQpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgdmFsdWVUeXBlXG4gICAgICAgICksXG4gICAgICBdKVxuXG4gICAgICByZXR1cm4gbm9kZVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RNYXBcIjoge1xuICAgICAgLy8gei5tYXAoei5zdHJpbmcoKSkgLT4gTWFwPHN0cmluZz5cbiAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHpvZFRvVHNOb2RlKHpvZC5fZGVmLnZhbHVlVHlwZSwgLi4ub3RoZXJBcmd1bWVudHMpXG4gICAgICBjb25zdCBrZXlUeXBlID0gem9kVG9Uc05vZGUoem9kLl9kZWYua2V5VHlwZSwgLi4ub3RoZXJBcmd1bWVudHMpXG5cbiAgICAgIGNvbnN0IG5vZGUgPSBmLmNyZWF0ZVR5cGVSZWZlcmVuY2VOb2RlKGYuY3JlYXRlSWRlbnRpZmllcihcIk1hcFwiKSwgW1xuICAgICAgICBrZXlUeXBlLFxuICAgICAgICB2YWx1ZVR5cGUsXG4gICAgICBdKVxuXG4gICAgICByZXR1cm4gbm9kZVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RTZXRcIjoge1xuICAgICAgLy8gei5zZXQoei5zdHJpbmcoKSkgLT4gU2V0PHN0cmluZz5cbiAgICAgIGNvbnN0IHR5cGUgPSB6b2RUb1RzTm9kZSh6b2QuX2RlZi52YWx1ZVR5cGUsIC4uLm90aGVyQXJndW1lbnRzKVxuXG4gICAgICBjb25zdCBub2RlID0gZi5jcmVhdGVUeXBlUmVmZXJlbmNlTm9kZShmLmNyZWF0ZUlkZW50aWZpZXIoXCJTZXRcIiksIFt0eXBlXSlcbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZEludGVyc2VjdGlvblwiOiB7XG4gICAgICAvLyB6Lm51bWJlcigpLmFuZCh6LnN0cmluZygpKSAtPiBudW1iZXIgJiBzdHJpbmdcbiAgICAgIGNvbnN0IGxlZnQgPSB6b2RUb1RzTm9kZSh6b2QuX2RlZi5sZWZ0LCAuLi5vdGhlckFyZ3VtZW50cylcbiAgICAgIGNvbnN0IHJpZ2h0ID0gem9kVG9Uc05vZGUoem9kLl9kZWYucmlnaHQsIC4uLm90aGVyQXJndW1lbnRzKVxuICAgICAgY29uc3Qgbm9kZSA9IGYuY3JlYXRlSW50ZXJzZWN0aW9uVHlwZU5vZGUoW2xlZnQsIHJpZ2h0XSlcbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZFByb21pc2VcIjoge1xuICAgICAgLy8gei5wcm9taXNlKHouc3RyaW5nKCkpIC0+IFByb21pc2U8c3RyaW5nPlxuICAgICAgY29uc3QgdHlwZSA9IHpvZFRvVHNOb2RlKHpvZC5fZGVmLnR5cGUsIC4uLm90aGVyQXJndW1lbnRzKVxuXG4gICAgICBjb25zdCBub2RlID0gZi5jcmVhdGVUeXBlUmVmZXJlbmNlTm9kZShmLmNyZWF0ZUlkZW50aWZpZXIoXCJQcm9taXNlXCIpLCBbXG4gICAgICAgIHR5cGUsXG4gICAgICBdKVxuXG4gICAgICByZXR1cm4gbm9kZVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RGdW5jdGlvblwiOiB7XG4gICAgICAvLyB6LmZ1bmN0aW9uKCkuYXJncyh6LnN0cmluZygpKS5yZXR1cm5zKHoubnVtYmVyKCkpIC0+IChhcmdzXzA6IHN0cmluZykgPT4gbnVtYmVyXG4gICAgICBjb25zdCBhcmd1bWVudFR5cGVzID0gem9kLl9kZWYuYXJncy5fZGVmLml0ZW1zLm1hcChcbiAgICAgICAgKGFyZ3VtZW50OiBab2RUeXBlQW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgYXJndW1lbnRUeXBlID0gem9kVG9Uc05vZGUoYXJndW1lbnQsIC4uLm90aGVyQXJndW1lbnRzKVxuXG4gICAgICAgICAgcmV0dXJuIGYuY3JlYXRlUGFyYW1ldGVyRGVjbGFyYXRpb24oXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBmLmNyZWF0ZUlkZW50aWZpZXIoYGFyZ3NfJHtpbmRleH1gKSxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFyZ3VtZW50VHlwZVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgKSBhcyB0cy5QYXJhbWV0ZXJEZWNsYXJhdGlvbltdXG5cbiAgICAgIGFyZ3VtZW50VHlwZXMucHVzaChcbiAgICAgICAgZi5jcmVhdGVQYXJhbWV0ZXJEZWNsYXJhdGlvbihcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgZi5jcmVhdGVUb2tlbihTeW50YXhLaW5kLkRvdERvdERvdFRva2VuKSxcbiAgICAgICAgICBmLmNyZWF0ZUlkZW50aWZpZXIoYGFyZ3NfJHthcmd1bWVudFR5cGVzLmxlbmd0aH1gKSxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgZi5jcmVhdGVBcnJheVR5cGVOb2RlKGNyZWF0ZVVua25vd25LZXl3b3JkTm9kZSgpKVxuICAgICAgICApXG4gICAgICApXG5cbiAgICAgIGNvbnN0IHJldHVyblR5cGUgPSB6b2RUb1RzTm9kZSh6b2QuX2RlZi5yZXR1cm5zLCAuLi5vdGhlckFyZ3VtZW50cylcblxuICAgICAgY29uc3Qgbm9kZSA9IGYuY3JlYXRlRnVuY3Rpb25UeXBlTm9kZShcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBhcmd1bWVudFR5cGVzLFxuICAgICAgICByZXR1cm5UeXBlXG4gICAgICApXG5cbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZERlZmF1bHRcIjoge1xuICAgICAgLy8gei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlZmF1bHQoJ2hpJykgLT4gc3RyaW5nXG4gICAgICBjb25zdCB0eXBlID0gem9kVG9Uc05vZGUoXG4gICAgICAgIHpvZC5fZGVmLmlubmVyVHlwZSxcbiAgICAgICAgLi4ub3RoZXJBcmd1bWVudHNcbiAgICAgICkgYXMgdHMuVHlwZU5vZGVcblxuICAgICAgY29uc3QgZmlsdGVyZWROb2RlczogdHMuTm9kZVtdID0gW11cblxuICAgICAgdHlwZS5mb3JFYWNoQ2hpbGQoKG5vZGUpID0+IHtcbiAgICAgICAgaWYgKCFbU3ludGF4S2luZC5VbmRlZmluZWRLZXl3b3JkXS5pbmNsdWRlcyhub2RlLmtpbmQpKSB7XG4gICAgICAgICAgZmlsdGVyZWROb2Rlcy5wdXNoKG5vZGUpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbmVlZGVkIHRvIHNldCBjaGlsZHJlblxuICAgICAgdHlwZS50eXBlcyA9IGZpbHRlcmVkTm9kZXNcblxuICAgICAgcmV0dXJuIHR5cGVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5BbnlLZXl3b3JkKVxufVxuIiwgImltcG9ydCAqIGFzIGZzIGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCJcbmltcG9ydCBjcnlwdG8gZnJvbSBcIm5vZGU6Y3J5cHRvXCJcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgUHJvamVjdCwgU3ludGF4S2luZCB9IGZyb20gXCJ0cy1tb3JwaFwiXG5pbXBvcnQgKiBhcyBlc2J1aWxkIGZyb20gXCJlc2J1aWxkXCJcbmltcG9ydCB7IGRlZmF1bHRNYXBGaWxlUGF0aFRvSFRUUFJvdXRlIH0gZnJvbSBcIi4vbGliL2RlZmF1bHQtbWFwLWZpbGUtcGF0aC10by1odHRwLXJvdXRlXCJcblxuaW50ZXJmYWNlIEdlbmVyYXRlUm91dGVUeXBlc09wdHMge1xuICBwYWNrYWdlRGlyOiBzdHJpbmdcbiAgYWxsb3dlZEltcG9ydFBhdHRlcm5zPzogc3RyaW5nW11cbiAgb3V0cHV0RmlsZT86IHN0cmluZ1xuICBwYXRoR2xvYj86IHN0cmluZ1xuICBhcGlQcmVmaXg/OiBzdHJpbmdcbiAgbWFwRmlsZVBhdGhUb0hUVFBSb3V0ZT86IChmaWxlX3BhdGg6IHN0cmluZykgPT4gc3RyaW5nXG4gIC8qKlxuICAgKiBJZiBwcm92aWRlZCwgb25seSByb3V0ZXMgdGhhdCByZXR1cm4gdHJ1ZSB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWQgdHlwZXMuXG4gICAqL1xuICBmaWx0ZXJSb3V0ZXM/OiAocm91dGU6IHN0cmluZykgPT4gYm9vbGVhblxuICAvKipcbiAgICogQnkgZGVmYXVsdCwgcm91dGVzIHRoYXQgaGF2ZSBgZXhjbHVkZUZyb21PcGVuQXBpYCBzZXQgdG8gdHJ1ZSB3aWxsIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGdlbmVyYXRlZCB0eXBlcy5cbiAgICogU2V0IHRoaXMgdG8gdHJ1ZSB0byBpbmNsdWRlIHRoZW0uXG4gICAqL1xuICBpbmNsdWRlT3BlbkFwaUV4Y2x1ZGVkUm91dGVzPzogYm9vbGVhblxuICBlc2J1aWxkT3B0aW9ucz86IGVzYnVpbGQuQnVpbGRPcHRpb25zXG59XG5cbmV4cG9ydCBjb25zdCBleHRyYWN0Um91dGVTcGVjcyA9IGFzeW5jIChvcHRzOiBHZW5lcmF0ZVJvdXRlVHlwZXNPcHRzKSA9PiB7XG4gIGNvbnN0IHsgcGFja2FnZURpciwgcGF0aEdsb2IgPSBcIi9wYWdlcy9hcGkvKiovKi50c1wiIH0gPSBvcHRzXG4gIGNvbnN0IGZ1bGxQYXRoR2xvYiA9IHBhdGgucG9zaXguam9pbihwYWNrYWdlRGlyLCBwYXRoR2xvYilcblxuICBjb25zdCBwcm9qZWN0ID0gbmV3IFByb2plY3QoeyBjb21waWxlck9wdGlvbnM6IHsgZGVjbGFyYXRpb246IHRydWUgfSB9KVxuXG4gIGNvbnN0IHBhdGhzOiBzdHJpbmdbXSA9IFtdXG4gIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBwcm9qZWN0LmFkZFNvdXJjZUZpbGVzQXRQYXRocyhmdWxsUGF0aEdsb2IpKSB7XG4gICAgY29uc3QgZGVmYXVsdEV4cG9ydCA9IHNvdXJjZUZpbGUuZ2V0RXhwb3J0QXNzaWdubWVudChcbiAgICAgIChkKSA9PiAhZC5pc0V4cG9ydEVxdWFscygpXG4gICAgKVxuICAgIGlmICghZGVmYXVsdEV4cG9ydCkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyaWVkV2l0aFJvdXRlU3BlY0NhbGwgPSBkZWZhdWx0RXhwb3J0XG4gICAgICAuZ2V0RXhwcmVzc2lvbigpXG4gICAgICAuYXNLaW5kKFN5bnRheEtpbmQuQ2FsbEV4cHJlc3Npb24pXG4gICAgaWYgKCFjdXJyaWVkV2l0aFJvdXRlU3BlY0NhbGwpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IHdpdGhSb3V0ZVNwZWNDYWxsID0gY3VycmllZFdpdGhSb3V0ZVNwZWNDYWxsXG4gICAgICAuZ2V0RXhwcmVzc2lvbigpXG4gICAgICAuYXNLaW5kKFN5bnRheEtpbmQuQ2FsbEV4cHJlc3Npb24pXG4gICAgaWYgKCF3aXRoUm91dGVTcGVjQ2FsbCkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCBbcm91dGVTcGVjXSA9IHdpdGhSb3V0ZVNwZWNDYWxsLmdldEFyZ3VtZW50cygpXG4gICAgaWYgKCFyb3V0ZVNwZWMpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgc291cmNlRmlsZS5hZGRTdGF0ZW1lbnRzKFxuICAgICAgYGV4cG9ydCBjb25zdCBleHRyYWN0ZWRSb3V0ZVNwZWMgPSAke3JvdXRlU3BlYy5nZXRUZXh0KCl9YFxuICAgIClcblxuICAgIGRlZmF1bHRFeHBvcnQucmVtb3ZlKClcblxuICAgIC8vIFJlbW92ZSBhbGwgdW51c2VkIGltcG9ydHMgc28gZmlsZSBjYW4gYmUgdHJlZSBzaGFrZW5cbiAgICAvLyAoQXNzdW1lcyBhbGwgaW1wb3J0cyBhcmUgZnJlZSBvZiBzaWRlLWVmZmVjdHMpXG4gICAgbGV0IGxhc3RXaWR0aDogbnVtYmVyXG4gICAgZG8ge1xuICAgICAgbGFzdFdpZHRoID0gc291cmNlRmlsZS5nZXRGdWxsV2lkdGgoKVxuICAgICAgLy8gTWF5IG5lZWQgdG8gY2FsbCB0aGlzIG11bHRpcGxlIHRpbWVzXG4gICAgICBzb3VyY2VGaWxlLmZpeFVudXNlZElkZW50aWZpZXJzKClcbiAgICB9IHdoaWxlIChsYXN0V2lkdGggIT09IHNvdXJjZUZpbGUuZ2V0RnVsbFdpZHRoKCkpXG5cbiAgICBjb25zdCBhYnNvbHV0ZVBhY2thZ2VEaXIgPSBwYXRoLnJlc29sdmUocGFja2FnZURpcilcbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKFxuICAgICAgYWJzb2x1dGVQYWNrYWdlRGlyLFxuICAgICAgc291cmNlRmlsZS5nZXRGaWxlUGF0aCgpXG4gICAgKVxuICAgIHBhdGhzLnB1c2gocmVsYXRpdmVQYXRoKVxuICB9XG5cbiAgY29uc3QgcGF0aFRvSWQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fVxuICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICAvLyBhZGQgcHJlZml4IHRvIGF2b2lkIHN0YXJ0aW5nIHdpdGggYSBudW1iZXJcbiAgICBwYXRoVG9JZFtwYXRoXSA9XG4gICAgICBcImhhc2hcIiArIGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShwYXRoKS5kaWdlc3QoXCJoZXhcIilcbiAgfVxuXG4gIGNvbnN0IGVudHJ5UG9pbnRDb250ZW50ID0gYFxuICAke3BhdGhzXG4gICAgLm1hcCgocCkgPT4gYGltcG9ydCB7ZXh0cmFjdGVkUm91dGVTcGVjIGFzICR7cGF0aFRvSWRbcF19fSBmcm9tIFwiLi8ke3B9XCJgKVxuICAgIC5qb2luKFwiXFxuXCIpfVxuXG4gIGV4cG9ydCBjb25zdCByb3V0ZXMgPSB7XG4gICAgJHtwYXRoc1xuICAgICAgLm1hcCgocCkgPT4ge1xuICAgICAgICBjb25zdCBodHRwUm91dGUgPSAoXG4gICAgICAgICAgb3B0cy5tYXBGaWxlUGF0aFRvSFRUUFJvdXRlID8/XG4gICAgICAgICAgZGVmYXVsdE1hcEZpbGVQYXRoVG9IVFRQUm91dGUob3B0cy5hcGlQcmVmaXgpXG4gICAgICAgICkocClcblxuICAgICAgICByZXR1cm4gYFwiJHtodHRwUm91dGV9XCI6ICR7cGF0aFRvSWRbcF19YFxuICAgICAgfSlcbiAgICAgIC5qb2luKFwiLFxcblwiKX1cbiAgfVxuICBgXG5cbiAgLy8gQ29weSBhbGxvd2VkIGltcG9ydCBnbG9icyBpbnRvIHByb2plY3RcbiAgaWYgKG9wdHMuYWxsb3dlZEltcG9ydFBhdHRlcm5zKSB7XG4gICAgcHJvamVjdC5hZGRTb3VyY2VGaWxlc0F0UGF0aHMob3B0cy5hbGxvd2VkSW1wb3J0UGF0dGVybnMpXG4gIH1cblxuICAvLyBHZW5lcmF0ZSB0eXBlcyAoLmQudHMpXG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBwcm9qZWN0LmNyZWF0ZVNvdXJjZUZpbGUoXG4gICAgXCJleHRyYWN0ZWQtcm91dGUtc3BlY3MudHNcIixcbiAgICBlbnRyeVBvaW50Q29udGVudFxuICApXG4gIGNvbnN0IGVtaXRSZXN1bHQgPSBlbnRyeVBvaW50LmdldEVtaXRPdXRwdXQoeyBlbWl0T25seUR0c0ZpbGVzOiB0cnVlIH0pXG4gIGlmIChvcHRzLm91dHB1dEZpbGUpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbkZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgcGF0aC5kaXJuYW1lKG9wdHMub3V0cHV0RmlsZSksXG4gICAgICBwYXRoLmJhc2VuYW1lKG9wdHMub3V0cHV0RmlsZSkucmVwbGFjZShcIi5tanNcIiwgXCJcIikucmVwbGFjZShcIi5qc1wiLCBcIlwiKSArXG4gICAgICAgIFwiLmQudHNcIlxuICAgIClcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICBkZWNsYXJhdGlvbkZpbGVQYXRoLFxuICAgICAgZW1pdFJlc3VsdC5nZXRPdXRwdXRGaWxlcygpWzBdLmdldFRleHQoKVxuICAgIClcbiAgfVxuXG4gIC8vIEdlbmVyYXRlIHZhbHVlcyAoLmpzKVxuICBjb25zdCBwa2dSYXcgPSBhd2FpdCBmcy5yZWFkRmlsZShcbiAgICBwYXRoLmpvaW4ocGFja2FnZURpciwgXCJwYWNrYWdlLmpzb25cIiksXG4gICAgXCJ1dGYtOFwiXG4gIClcbiAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShwa2dSYXcpXG5cbiAgYXdhaXQgZXNidWlsZC5idWlsZCh7XG4gICAgLi4ub3B0cy5lc2J1aWxkT3B0aW9ucyxcbiAgICBzdGRpbjoge1xuICAgICAgY29udGVudHM6IGVudHJ5UG9pbnRDb250ZW50LFxuICAgICAgcmVzb2x2ZURpcjogcGF0aC5yZXNvbHZlKHBhY2thZ2VEaXIpLFxuICAgIH0sXG4gICAgb3V0ZmlsZTogb3B0cy5vdXRwdXRGaWxlLFxuICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICBwbGF0Zm9ybTogXCJub2RlXCIsXG4gICAgZm9ybWF0OiBcImVzbVwiLFxuICAgIHRyZWVTaGFraW5nOiB0cnVlLFxuICAgIGV4dGVybmFsOiBbXG4gICAgICAuLi5PYmplY3Qua2V5cyhwa2cuZGVwZW5kZW5jaWVzKSxcbiAgICAgIC4uLk9iamVjdC5rZXlzKHBrZy5kZXZEZXBlbmRlbmNpZXMpLFxuICAgICAgLi4uKG9wdHMuZXNidWlsZE9wdGlvbnM/LmV4dGVybmFsID8/IFtdKSxcbiAgICBdLFxuICAgIHBsdWdpbnM6IFtcbiAgICAgIC8vIFdpdGggdGhpcyBwbHVnaW4sIGVzYnVpbGQgd2lsbCBuZXZlciB0b3VjaCB0aGUgYWN0dWFsIGZpbGVzeXN0ZW0gYW5kIHRodXMgY2Fubm90IGludGVyYWN0IHdpdGggaW1wb3J0cyB0aGF0IGRvbid0IG1hdGNoIGFsbG93ZWRJbXBvcnRQYXR0ZXJuc1tdLlxuICAgICAge1xuICAgICAgICBuYW1lOiBcInJlc29sdmUtdmlydHVhbC1mc1wiLFxuICAgICAgICBzZXR1cChidWlsZCkge1xuICAgICAgICAgIGJ1aWxkLm9uTG9hZCh7IGZpbHRlcjogLy4qLyB9LCAoYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGVudHMgPSBwcm9qZWN0LmdldFNvdXJjZUZpbGUoYXJncy5wYXRoKT8uZ2V0RnVsbFRleHQoKVxuICAgICAgICAgICAgaWYgKCFjb250ZW50cykge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvbnRlbnRzOiBcImV4cG9ydCBkZWZhdWx0IHt9XCIsXG4gICAgICAgICAgICAgICAgbG9hZGVyOiBcInRzXCIsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudHMsXG4gICAgICAgICAgICAgIGxvYWRlcjogXCJ0c1wiLFxuICAgICAgICAgICAgICByZXNvbHZlRGlyOiBwYXRoLmRpcm5hbWUoYXJncy5wYXRoKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIC4uLihvcHRzLmVzYnVpbGRPcHRpb25zPy5wbHVnaW5zID8/IFtdKSxcbiAgICBdLFxuICB9KVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7OztBQUFBOzs7QUNBQTtBQUFBLE9BQU8sUUFBUTtBQUNmO0FBQUEsRUFDRTtBQUFBLE9BR0s7QUFFUCxTQUFTLEtBQUFBLFVBQVM7OztBQ1BsQjtBQUFBLE9BQU9DLFdBQVU7OztBQ0FqQjtBQUFBLE9BQU8sVUFBVTtBQUVWLElBQU0sZ0NBQ1gsQ0FBQyxhQUFxQixXQUN0QixDQUFDLGNBQXNCO0FBQ3JCLFFBQU0sUUFBUSxVQUVYLFFBQVEsU0FBUyxHQUFHLEVBRXBCLFFBQVEsT0FBTyxFQUFFLEVBRWpCLFFBQVEsVUFBVSxFQUFFLEVBRXBCLFFBQVEsWUFBWSxFQUFFLEVBRXRCLFFBQVEsVUFBVSxFQUFFLEVBRXBCLFFBQVEs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TUFDVixZQUFZQSxNQUFLLFFBQVEsVUFBVTtBQUFBLElBQ3JDO0FBQUEsSUFDQSxTQUFTLEtBQUs7QUFBQSxJQUNkLFFBQVE7QUFBQSxJQUNSLFVBQVU7QUFBQSxJQUNWLFFBQVE7QUFBQSxJQUNSLGFBQWE7QUFBQSxJQUNiLFVBQVU7QUFBQSxNQUNSLEdBQUcsT0FBTyxLQUFLLElBQUksWUFBWTtBQUFBLE1BQy9CLEdBQUcsT0FBTyxLQUFLLElBQUksZUFBZTtBQUFBLE1BQ2xDLElBQUksZ0JBQUssbUJBQUwsbUJBQXFCLGFBQXJCLFlBQWlDLENBQUM7QUFBQSxJQUN4QztBQUFBLElBQ0EsU0FBUztBQUFBLE1BRVA7QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLE1BQU1HLFFBQU87QUFDWCxVQUFBQSxPQUFNLE9BQU8sRUFBRSxRQUFRLEtBQUssR0FBRyxDQUFDLFNBQVM7QUEvSm5ELGdCQUFBRDtBQWdLWSxrQkFBTSxZQUFXQSxNQUFBLFFBQVEsY0FBYyxLQUFLLElBQUksTUFBL0IsZ0JBQUFBLElBQWtDO0FBQ25ELGdCQUFJLENBQUMsVUFBVTtBQUNiLHFCQUFPO0FBQUEsZ0JBQ0wsVUFBVTtBQUFBLGdCQUNWLFFBQVE7QUFBQSxjQUNWO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsY0FDTDtBQUFBLGNBQ0EsUUFBUTtBQUFBLGNBQ1IsWUFBWUYsTUFBSyxRQUFRLEtBQUssSUFBSTtBQUFBLFlBQ3BDO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLElBQUksZ0JBQUssbUJBQUwsbUJBQXFCLFlBQXJCLFlBQWdDLENBQUM7QUFBQSxJQUN2QztBQUFBLEVBQ0YsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogWyJ6IiwgInBhdGgiLCAicGF0aCIsICJwYXRoIiwgInBhdGgiLCAiX2EiLCAieiIsICJmcyIsICJkZWRlbnQiLCAicGFyc2VEZXNjcmlwdGlvbiIsICJvcHRpb25zIiwgInoiLCAiXyIsICJmcyIsICJwYXRoIiwgIlN5bnRheEtpbmQiLCAicGF0aCIsICJTeW50YXhLaW5kIiwgIl9hIiwgImJ1aWxkIl0KfQo=
1529
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2dlbmVyYXRvcnMvaW5kZXgudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvZ2VuZXJhdGUtb3BlbmFwaS9pbmRleC50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9saWIvcGFyc2Utcm91dGVzLWluLXBhY2thZ2UudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvbGliL2RlZmF1bHQtbWFwLWZpbGUtcGF0aC10by1odHRwLXJvdXRlLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2xpYi96b2Qtb3BlbmFwaS50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9saWIvZnJvbnQtbWF0dGVyLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2dlbmVyYXRlLW9wZW5hcGkvZW1iZWQtc2NoZW1hLXJlZmVyZW5jZXMudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvZ2VuZXJhdGUtb3BlbmFwaS9mZXJuLXNkay11dGlscy50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9nZW5lcmF0ZS1yb3V0ZS10eXBlcy9pbmRleC50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9saWIvem9kLXRvLXRzLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2V4dHJhY3Qtcm91dGUtc3BlYy1zY2hlbWFzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJleHBvcnQgKiBmcm9tIFwiLi9nZW5lcmF0ZS1vcGVuYXBpXCJcbmV4cG9ydCAqIGZyb20gXCIuL2dlbmVyYXRlLXJvdXRlLXR5cGVzXCJcbmV4cG9ydCAqIGZyb20gXCIuL2V4dHJhY3Qtcm91dGUtc3BlYy1zY2hlbWFzXCJcbiIsICJpbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0IHtcbiAgT3BlbkFwaUJ1aWxkZXIsXG4gIE9wZXJhdGlvbk9iamVjdCxcbiAgUGFyYW1ldGVyT2JqZWN0LFxufSBmcm9tIFwib3BlbmFwaTMtdHMvb2FzMzFcIlxuaW1wb3J0IHsgU2V0dXBQYXJhbXMgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgcGFyc2VSb3V0ZXNJblBhY2thZ2UgfSBmcm9tIFwiLi4vbGliL3BhcnNlLXJvdXRlcy1pbi1wYWNrYWdlXCJcbmltcG9ydCB7IGdlbmVyYXRlU2NoZW1hIH0gZnJvbSBcIi4uL2xpYi96b2Qtb3BlbmFwaVwiXG5pbXBvcnQgeyBlbWJlZFNjaGVtYVJlZmVyZW5jZXMgfSBmcm9tIFwiLi9lbWJlZC1zY2hlbWEtcmVmZXJlbmNlc1wiXG5pbXBvcnQgeyBtYXBNZXRob2RzVG9GZXJuU2RrTWV0YWRhdGEgfSBmcm9tIFwiLi9mZXJuLXNkay11dGlsc1wiXG5cbmZ1bmN0aW9uIHJlcGxhY2VGaXJzdENoYXJUb0xvd2VyY2FzZShzdHI6IHN0cmluZykge1xuICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBzdHJcbiAgfVxuXG4gIGNvbnN0IGZpcnN0Q2hhciA9IHN0ci5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKVxuICByZXR1cm4gZmlyc3RDaGFyICsgc3RyLnNsaWNlKDEpXG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVBhdGhUb09wZXJhdGlvbklkKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnRzID0gcGF0aFxuICAgIC5yZXBsYWNlKC8tL2csIFwiX1wiKVxuICAgIC5zcGxpdChcIi9cIilcbiAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSBcIlwiKVxuICBjb25zdCB0cmFuc2Zvcm1lZFBhcnRzID0gcGFydHMubWFwKChwYXJ0KSA9PiB7XG4gICAgaWYgKHBhcnQuc3RhcnRzV2l0aChcIltcIikgJiYgcGFydC5lbmRzV2l0aChcIl1cIikpIHtcbiAgICAgIC8vIENvbnZlcnQgW3BhcmFtXSB0byBCeVBhcmFtXG4gICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHBhcnQuc2xpY2UoMSwgLTEpXG4gICAgICBjb25zdCB3b3JkcyA9IHNlcnZpY2VOYW1lLnNwbGl0KFwiX1wiKVxuICAgICAgY29uc3QgY2FwaXRhbGl6ZWRXb3JkcyA9IHdvcmRzLm1hcChcbiAgICAgICAgKHdvcmQpID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpXG4gICAgICApXG4gICAgICByZXR1cm4gYEJ5JHtjYXBpdGFsaXplZFdvcmRzLmpvaW4oXCJcIil9YFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb252ZXJ0IGFwaV9wYXRoIHRvIEFwaVBhdGhcbiAgICAgIGNvbnN0IHdvcmRzID0gcGFydC5zcGxpdChcIl9cIilcbiAgICAgIGNvbnN0IGNhcGl0YWxpemVkV29yZHMgPSB3b3Jkcy5tYXAoXG4gICAgICAgICh3b3JkKSA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKVxuICAgICAgKVxuICAgICAgcmV0dXJuIGNhcGl0YWxpemVkV29yZHMuam9pbihcIlwiKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gcmVwbGFjZUZpcnN0Q2hhclRvTG93ZXJjYXNlKHRyYW5zZm9ybWVkUGFydHMuam9pbihcIlwiKSlcbn1cblxuZnVuY3Rpb24gcGFzY2FsQ2FzZShpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgd29yZHMgPSBpbnB1dC5zcGxpdChcIiBcIilcbiAgY29uc3QgY2FwaXRhbGl6ZWRXb3JkcyA9IHdvcmRzLm1hcChcbiAgICAod29yZCkgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKVxuICApXG4gIGNvbnN0IHBhc2NhbENhc2VTdHJpbmcgPSBjYXBpdGFsaXplZFdvcmRzLmpvaW4oXCJcIilcbiAgcmV0dXJuIHBhc2NhbENhc2VTdHJpbmdcbn1cblxuaW50ZXJmYWNlIFRhZ09wdGlvbiB7XG4gIG5hbWU6IHN0cmluZ1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gIGRvZXNSb3V0ZUhhdmVUYWc/OiAocm91dGU6IHN0cmluZykgPT4gYm9vbGVhblxufVxuXG5pbnRlcmZhY2UgR2VuZXJhdGVPcGVuQVBJT3B0cyB7XG4gIHBhY2thZ2VEaXI6IHN0cmluZ1xuICBvdXRwdXRGaWxlPzogc3RyaW5nXG4gIHBhdGhHbG9iPzogc3RyaW5nXG4gIHRhZ3M/OiBBcnJheTxUYWdPcHRpb24+XG4gIGFwaVByZWZpeD86IHN0cmluZ1xuICBtYXBGaWxlUGF0aFRvSFRUUFJvdXRlPzogKGZpbGVfcGF0aDogc3RyaW5nKSA9PiBzdHJpbmdcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyBhbiBPcGVuQVBJIHNwZWMgZnJvbSB0aGUgTmV4dC5qcyBBUEkgcm91dGVzLlxuICpcbiAqIFlvdSBub3JtYWxseSBpbnZva2UgdGhpcyB3aXRoIGBuZXh0YXBpIGdlbmVyYXRlLW9wZW5hcGlgIGluIGFcbiAqIFwiYnVpbGQ6b3BlbmFwaVwiIHBhY2thZ2UuanNvbiBzY3JpcHQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU9wZW5BUEkob3B0czogR2VuZXJhdGVPcGVuQVBJT3B0cykge1xuICBjb25zdCBjaGFsayA9IChhd2FpdCBpbXBvcnQoXCJjaGFsa1wiKSkuZGVmYXVsdFxuICBjb25zdCB7IG91dHB1dEZpbGUsIHRhZ3MgPSBbXSB9ID0gb3B0c1xuXG4gIGNvbnN0IGZpbGVwYXRoVG9Sb3V0ZUZuID0gYXdhaXQgcGFyc2VSb3V0ZXNJblBhY2thZ2Uob3B0cylcblxuICAvLyBUT0RPIGRldGVjdCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgc2V0dXBzIGFuZCBvdXRwdXQgZGlmZmVyZW50IEFQSXNcbiAgY29uc3QgeyBzZXR1cFBhcmFtczogZ2xvYmFsU2V0dXBQYXJhbXMgfSA9IGZpbGVwYXRoVG9Sb3V0ZUZuLnZhbHVlcygpLm5leHQoKVxuICAgIC52YWx1ZSBhcyB7IHNldHVwUGFyYW1zOiBTZXR1cFBhcmFtcyB9XG5cbiAgY29uc3Qgc2VjdXJpdHlTY2hlbWVzID0gZ2xvYmFsU2V0dXBQYXJhbXMuc2VjdXJpdHlTY2hlbWFzID8/IHt9XG4gIGNvbnN0IHNlY3VyaXR5T2JqZWN0c0ZvckF1dGhUeXBlID0ge31cbiAgZm9yIChjb25zdCBhdXRoTmFtZSBvZiBPYmplY3Qua2V5cyhnbG9iYWxTZXR1cFBhcmFtcy5hdXRoTWlkZGxld2FyZU1hcCkpIHtcbiAgICBjb25zdCBtdyA9IGdsb2JhbFNldHVwUGFyYW1zLmF1dGhNaWRkbGV3YXJlTWFwW2F1dGhOYW1lXVxuICAgIGlmIChtdy5zZWN1cml0eVNjaGVtYSkge1xuICAgICAgc2VjdXJpdHlTY2hlbWVzW2F1dGhOYW1lXSA9IChtdyBhcyBhbnkpLnNlY3VyaXR5U2NoZW1hXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgY2hhbGsueWVsbG93KFxuICAgICAgICAgIGBBdXRoZW50aWNhdGlvbiBtaWRkbGV3YXJlIFwiJHthdXRoTmFtZX1cIiBoYXMgbm8gc2VjdXJpdHlTY2hlbWEuIFlvdSBjYW4gZGVmaW5lIHRoaXMgb24gdGhlIGZ1bmN0aW9uIChlLmcuIGFmdGVyIHRoZSBleHBvcnQgZG8uLi4gXFxuXFxubXlNaWRkbGV3YXJlLnNlY3VyaXR5U2NoZW1hID0ge1xcbiAgdHlwZTogXCJodHRwXCJcXG4gIHNjaGVtZTogXCJiZWFyZXJcIlxcbiAgYmVhcmVyRm9ybWF0OiBcIkpXVFwiXFxuIC8vIG9yIEFQSSBUb2tlbiBldGMuXFxufVxcblxcbllvdSBjYW4gYWxzbyBkZWZpbmUgXCJzZWN1cml0eU9iamVjdHNcIiB0aGlzIHdheSwgaWYgeW91IHdhbnQgdG8gbWFrZSB0aGUgZW5kcG9pbnQgc3VwcG9ydCBtdWx0aXBsZSBtb2RlcyBvZiBhdXRoZW50aWNhdGlvbi5cXG5cXG5gXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9XG5cbiAgICBzZWN1cml0eU9iamVjdHNGb3JBdXRoVHlwZVthdXRoTmFtZV0gPSAobXcgYXMgYW55KS5zZWN1cml0eU9iamVjdHMgfHwgW1xuICAgICAge1xuICAgICAgICBbYXV0aE5hbWVdOiBbXSxcbiAgICAgIH0sXG4gICAgXVxuICB9XG5cbiAgY29uc3QgZ2xvYmFsU2NoZW1hcyA9IHt9XG4gIGZvciAoY29uc3QgW3NjaGVtYU5hbWUsIHpvZFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgZ2xvYmFsU2V0dXBQYXJhbXMuZ2xvYmFsU2NoZW1hcyA/PyB7fVxuICApKSB7XG4gICAgZ2xvYmFsU2NoZW1hc1tzY2hlbWFOYW1lXSA9IGdlbmVyYXRlU2NoZW1hKHpvZFNjaGVtYSlcbiAgfVxuXG4gIC8vIEJ1aWxkIE9wZW5BUEkgc3BlY1xuICBjb25zdCBidWlsZGVyID0gT3BlbkFwaUJ1aWxkZXIuY3JlYXRlKHtcbiAgICBvcGVuYXBpOiBcIjMuMC4wXCIsXG4gICAgaW5mbzoge1xuICAgICAgdGl0bGU6IGdsb2JhbFNldHVwUGFyYW1zLmFwaU5hbWUsXG4gICAgICB2ZXJzaW9uOiBcIjEuMC4wXCIsXG4gICAgfSxcbiAgICBzZXJ2ZXJzOiBbXG4gICAgICB7XG4gICAgICAgIHVybDogZ2xvYmFsU2V0dXBQYXJhbXMucHJvZHVjdGlvblNlcnZlclVybCB8fCBcImh0dHBzOi8vZXhhbXBsZS5jb21cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICB0YWdzOiB0YWdzLm1hcCgodGFnKSA9PiAoeyBuYW1lOiB0YWcubmFtZSwgZGVzY3JpcHRpb246IHRhZy5kZXNjcmlwdGlvbiB9KSksXG4gICAgcGF0aHM6IHt9LFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIHNlY3VyaXR5U2NoZW1lcyxcbiAgICAgIHNjaGVtYXM6IGdsb2JhbFNjaGVtYXMsXG4gICAgfSxcbiAgfSlcblxuICBmb3IgKGNvbnN0IFtcbiAgICBmaWxlX3BhdGgsXG4gICAgeyBzZXR1cFBhcmFtcywgcm91dGVTcGVjLCByb3V0ZTogcm91dGVQYXRoIH0sXG4gIF0gb2YgZmlsZXBhdGhUb1JvdXRlRm4pIHtcbiAgICBjb25zdCBpc1Bvc3RPclB1dE9yUGF0Y2ggPSBbXCJQT1NUXCIsIFwiUFVUXCIsIFwiUEFUQ0hcIl0uc29tZSgobWV0aG9kKSA9PlxuICAgICAgcm91dGVTcGVjLm1ldGhvZHMuaW5jbHVkZXMobWV0aG9kKVxuICAgIClcbiAgICAvLyBUT0RPOiBzdXBwb3J0IG11bHRpcGFydC9mb3JtLWRhdGFcblxuICAgIC8vIGhhbmRsZSBib2R5XG4gICAgbGV0IGJvZHlfdG9fZ2VuZXJhdGVfc2NoZW1hXG4gICAgaWYgKGlzUG9zdE9yUHV0T3JQYXRjaCkge1xuICAgICAgYm9keV90b19nZW5lcmF0ZV9zY2hlbWEgPSByb3V0ZVNwZWMuanNvbkJvZHkgPz8gcm91dGVTcGVjLmNvbW1vblBhcmFtc1xuXG4gICAgICBpZiAocm91dGVTcGVjLmpzb25Cb2R5ICYmIHJvdXRlU3BlYy5jb21tb25QYXJhbXMpIHtcbiAgICAgICAgYm9keV90b19nZW5lcmF0ZV9zY2hlbWEgPSByb3V0ZVNwZWMuanNvbkJvZHkubWVyZ2UoXG4gICAgICAgICAgcm91dGVTcGVjLmNvbW1vblBhcmFtc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvZHlfdG9fZ2VuZXJhdGVfc2NoZW1hID0gcm91dGVTcGVjLmpzb25Cb2R5XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHF1ZXJ5XG4gICAgbGV0IHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYVxuICAgIGlmIChpc1Bvc3RPclB1dE9yUGF0Y2gpIHtcbiAgICAgIHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5xdWVyeVBhcmFtc1xuICAgIH0gZWxzZSB7XG4gICAgICBxdWVyeV90b19nZW5lcmF0ZV9zY2hlbWEgPSByb3V0ZVNwZWMucXVlcnlQYXJhbXMgPz8gcm91dGVTcGVjLmNvbW1vblBhcmFtc1xuXG4gICAgICBpZiAocm91dGVTcGVjLnF1ZXJ5UGFyYW1zICYmIHJvdXRlU3BlYy5jb21tb25QYXJhbXMpIHtcbiAgICAgICAgcXVlcnlfdG9fZ2VuZXJhdGVfc2NoZW1hID0gcm91dGVTcGVjLnF1ZXJ5UGFyYW1zLm1lcmdlKFxuICAgICAgICAgIHJvdXRlU3BlYy5jb21tb25QYXJhbXNcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERFTEVURSBhbmQgR0VUIGNhbm5vdCBoYXZlIGEgYm9keVxuICAgIGxldCBtZXRob2RzID0gcm91dGVTcGVjLm1ldGhvZHNcblxuICAgIGlmIChyb3V0ZVNwZWMubWV0aG9kcy5pbmNsdWRlcyhcIkRFTEVURVwiKSAmJiBib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSkge1xuICAgICAgbWV0aG9kcyA9IG1ldGhvZHMuZmlsdGVyKChtKSA9PiBtICE9PSBcIkRFTEVURVwiKVxuICAgIH1cblxuICAgIGlmIChyb3V0ZVNwZWMubWV0aG9kcy5pbmNsdWRlcyhcIkdFVFwiKSAmJiBib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSkge1xuICAgICAgbWV0aG9kcyA9IG1ldGhvZHMuZmlsdGVyKChtKSA9PiBtICE9PSBcIkdFVFwiKVxuICAgIH1cblxuICAgIGlmIChtZXRob2RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBjaGFsay55ZWxsb3coYFNraXBwaW5nIHJvdXRlICR7cm91dGVQYXRofSBiZWNhdXNlIGl0IGhhcyBubyBtZXRob2RzLmApXG4gICAgICApXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IHJvdXRlOiBPcGVyYXRpb25PYmplY3QgPSB7XG4gICAgICAuLi5yb3V0ZVNwZWMub3BlbkFwaU1ldGFkYXRhLFxuICAgICAgc3VtbWFyeTogcm91dGVQYXRoLFxuICAgICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk9LXCIsXG4gICAgICAgIH0sXG4gICAgICAgIDQwMDoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkJhZCBSZXF1ZXN0XCIsXG4gICAgICAgIH0sXG4gICAgICAgIDQwMToge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlVuYXV0aG9yaXplZFwiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNlY3VyaXR5OiBBcnJheS5pc0FycmF5KHJvdXRlU3BlYy5hdXRoKVxuICAgICAgICA/IHJvdXRlU3BlYy5hdXRoXG4gICAgICAgICAgICAubWFwKChhdXRoVHlwZSkgPT4gc2VjdXJpdHlPYmplY3RzRm9yQXV0aFR5cGVbYXV0aFR5cGVdKVxuICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICA6IHNlY3VyaXR5T2JqZWN0c0ZvckF1dGhUeXBlW3JvdXRlU3BlYy5hdXRoXSxcbiAgICB9XG5cbiAgICBpZiAoYm9keV90b19nZW5lcmF0ZV9zY2hlbWEpIHtcbiAgICAgIHJvdXRlLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICAgIHNjaGVtYTogZ2VuZXJhdGVTY2hlbWEoYm9keV90b19nZW5lcmF0ZV9zY2hlbWEgYXMgYW55KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChxdWVyeV90b19nZW5lcmF0ZV9zY2hlbWEpIHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IGdlbmVyYXRlU2NoZW1hKHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYSBhcyBhbnkpXG4gICAgICBpZiAoc2NoZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyczogUGFyYW1ldGVyT2JqZWN0W10gPSBPYmplY3Qua2V5cyhcbiAgICAgICAgICBzY2hlbWEucHJvcGVydGllcyBhcyBhbnlcbiAgICAgICAgKS5tYXAoKG5hbWUpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGluOiBcInF1ZXJ5XCIsXG4gICAgICAgICAgICBzY2hlbWE6IHNjaGVtYS5wcm9wZXJ0aWVzIVtuYW1lXSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBzY2hlbWEucmVxdWlyZWQ/LmluY2x1ZGVzKG5hbWUpLFxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICByb3V0ZS5wYXJhbWV0ZXJzID0gcGFyYW1ldGVyc1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsganNvblJlc3BvbnNlIH0gPSByb3V0ZVNwZWNcbiAgICBjb25zdCB7IGFkZE9rU3RhdHVzID0gdHJ1ZSB9ID0gc2V0dXBQYXJhbXNcblxuICAgIGlmIChqc29uUmVzcG9uc2UpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIWpzb25SZXNwb25zZS5fZGVmIHx8XG4gICAgICAgICFqc29uUmVzcG9uc2UuX2RlZi50eXBlTmFtZSB8fFxuICAgICAgICBqc29uUmVzcG9uc2UuX2RlZi50eXBlTmFtZSAhPT0gXCJab2RPYmplY3RcIlxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBjaGFsay55ZWxsb3coXG4gICAgICAgICAgICBgU2tpcHBpbmcgcm91dGUgJHtyb3V0ZVBhdGh9IGJlY2F1c2UgdGhlIHJlc3BvbnNlIGlzIG5vdCBhIFpvZE9iamVjdC5gXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlU2NoZW1hID0gZ2VuZXJhdGVTY2hlbWEoXG4gICAgICAgIGFkZE9rU3RhdHVzICYmIGpzb25SZXNwb25zZSBpbnN0YW5jZW9mIHouWm9kT2JqZWN0XG4gICAgICAgICAgPyBqc29uUmVzcG9uc2UuZXh0ZW5kKHsgb2s6IHouYm9vbGVhbigpIH0pXG4gICAgICAgICAgOiBqc29uUmVzcG9uc2VcbiAgICAgIClcblxuICAgICAgY29uc3Qgc2NoZW1hV2l0aFJlZmVyZW5jZXMgPSBlbWJlZFNjaGVtYVJlZmVyZW5jZXMoXG4gICAgICAgIHJlc3BvbnNlU2NoZW1hLFxuICAgICAgICBnbG9iYWxTY2hlbWFzXG4gICAgICApXG5cbiAgICAgIC8vIFRPRE86IHdlIHNob3VsZCBub3QgaGFyZGNvZGUgMjAwIGhlcmVcbiAgICAgIHJvdXRlLnJlc3BvbnNlc1syMDBdLmNvbnRlbnQgPSB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiBzY2hlbWFXaXRoUmVmZXJlbmNlcyxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICByb3V0ZS50YWdzID0gW11cbiAgICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7XG4gICAgICBpZiAodGFnLmRvZXNSb3V0ZUhhdmVUYWcgJiYgdGFnLmRvZXNSb3V0ZUhhdmVUYWcocm91dGUuc3VtbWFyeSB8fCBcIlwiKSkge1xuICAgICAgICByb3V0ZS50YWdzLnB1c2godGFnLm5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWV0aG9kc01hcHBlZFRvRmVyblNka01ldGFkYXRhID0gYXdhaXQgbWFwTWV0aG9kc1RvRmVyblNka01ldGFkYXRhKHtcbiAgICAgIG1ldGhvZHMsXG4gICAgICBwYXRoOiByb3V0ZVBhdGgsXG4gICAgICBzZGtSZXR1cm5WYWx1ZTogcm91dGVTcGVjLnNka1JldHVyblZhbHVlLFxuICAgIH0pXG5cbiAgICAvLyBTb21lIHJvdXRlcyBhY2NlcHQgbXVsdGlwbGUgbWV0aG9kc1xuICAgIGJ1aWxkZXIuYWRkUGF0aChyb3V0ZVBhdGgsIHtcbiAgICAgIC4uLm1ldGhvZHNcbiAgICAgICAgLm1hcCgobWV0aG9kKSA9PiAoe1xuICAgICAgICAgIFttZXRob2QudG9Mb3dlckNhc2UoKV06IHtcbiAgICAgICAgICAgIC4uLm1ldGhvZHNNYXBwZWRUb0Zlcm5TZGtNZXRhZGF0YVttZXRob2RdLFxuICAgICAgICAgICAgLi4ucm91dGUsXG4gICAgICAgICAgICBvcGVyYXRpb25JZDogYCR7dHJhbnNmb3JtUGF0aFRvT3BlcmF0aW9uSWQocm91dGVQYXRoKX0ke3Bhc2NhbENhc2UoXG4gICAgICAgICAgICAgIG1ldGhvZFxuICAgICAgICAgICAgKX1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pKVxuICAgICAgICAucmVkdWNlUmlnaHQoKGFjYywgY3VyKSA9PiAoeyAuLi5hY2MsIC4uLmN1ciB9KSwge30pLFxuICAgIH0pXG4gIH1cblxuICBpZiAob3V0cHV0RmlsZSkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShvdXRwdXRGaWxlLCBidWlsZGVyLmdldFNwZWNBc0pzb24odW5kZWZpbmVkLCAyKSlcbiAgfVxuXG4gIHJldHVybiBidWlsZGVyLmdldFNwZWNBc0pzb24odW5kZWZpbmVkLCAyKVxufVxuIiwgImltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgUm91dGVTcGVjLCBTZXR1cFBhcmFtcyB9IGZyb20gXCIuLi8uLi90eXBlc1wiXG5pbXBvcnQgeyBkZWZhdWx0TWFwRmlsZVBhdGhUb0hUVFBSb3V0ZSB9IGZyb20gXCIuL2RlZmF1bHQtbWFwLWZpbGUtcGF0aC10by1odHRwLXJvdXRlXCJcblxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZUluZm8ge1xuICBzZXR1cFBhcmFtczogU2V0dXBQYXJhbXNcbiAgcm91dGVTcGVjOiBSb3V0ZVNwZWNcbiAgcm91dGVGbjogRnVuY3Rpb25cbiAgcm91dGU6IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgcGFyc2VSb3V0ZXNJblBhY2thZ2UgPSBhc3luYyAob3B0czoge1xuICBwYWNrYWdlRGlyOiBzdHJpbmdcbiAgcGF0aEdsb2I/OiBzdHJpbmdcbiAgYXBpUHJlZml4Pzogc3RyaW5nXG4gIG1hcEZpbGVQYXRoVG9IVFRQUm91dGU/OiAoZmlsZV9wYXRoOiBzdHJpbmcpID0+IHN0cmluZ1xuICBpbmNsdWRlT3BlbkFwaUV4Y2x1ZGVkUm91dGVzPzogYm9vbGVhblxufSk6IFByb21pc2U8TWFwPHN0cmluZywgUm91dGVJbmZvPj4gPT4ge1xuICBjb25zdCBjaGFsayA9IChhd2FpdCBpbXBvcnQoXCJjaGFsa1wiKSkuZGVmYXVsdFxuICBjb25zdCBnbG9iYnkgPSAoYXdhaXQgaW1wb3J0KFwiZ2xvYmJ5XCIpKS5nbG9iYnlcbiAgY29uc3Qge1xuICAgIHBhY2thZ2VEaXIsXG4gICAgcGF0aEdsb2IgPSBcIi9wYWdlcy9hcGkvKiovKi50c1wiLFxuICAgIG1hcEZpbGVQYXRoVG9IVFRQUm91dGUgPSBkZWZhdWx0TWFwRmlsZVBhdGhUb0hUVFBSb3V0ZShvcHRzLmFwaVByZWZpeCksXG4gIH0gPSBvcHRzXG4gIC8vIExvYWQgYWxsIHJvdXRlIHNwZWNzXG4gIGNvbnN0IGZ1bGxQYXRoR2xvYiA9IHBhdGgucG9zaXguam9pbihwYWNrYWdlRGlyLCBwYXRoR2xvYilcbiAgY29uc29sZS5sb2coYHNlYXJjaGluZyBcIiR7ZnVsbFBhdGhHbG9ifVwiLi4uYClcbiAgY29uc3QgZmlsZXBhdGhzID0gYXdhaXQgZ2xvYmJ5KGAke2Z1bGxQYXRoR2xvYn1gKVxuICBjb25zb2xlLmxvZyhgZm91bmQgJHtmaWxlcGF0aHMubGVuZ3RofSBmaWxlc2ApXG4gIGlmIChmaWxlcGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBmaWxlcyBmb3VuZCBhdCBcIiR7ZnVsbFBhdGhHbG9ifVwiYClcbiAgfVxuICBjb25zdCBmaWxlcGF0aFRvUm91dGVGbiA9IG5ldyBNYXA8c3RyaW5nLCBSb3V0ZUluZm8+KClcblxuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBmaWxlcGF0aHMubWFwKGFzeW5jIChwKSA9PiB7XG4gICAgICBjb25zdCB7IGRlZmF1bHQ6IHJvdXRlRm4gfSA9IGF3YWl0IHJlcXVpcmUocGF0aC5yZXNvbHZlKHApKVxuXG4gICAgICBpZiAocm91dGVGbikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcm91dGVGbi5fcm91dGVTcGVjPy5leGNsdWRlRnJvbU9wZW5BcGkgJiZcbiAgICAgICAgICAhb3B0cy5pbmNsdWRlT3BlbkFwaUV4Y2x1ZGVkUm91dGVzXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgY2hhbGsuZ3JheShcbiAgICAgICAgICAgICAgYElnbm9yaW5nIFwiJHtwfSBiZWNhdXNlIGl0IHdhcyBleGNsdWRlZCBmcm9tIE9wZW5BUEkgZ2VuZXJhdGlvblwiYFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJvdXRlRm4uX3NldHVwUGFyYW1zKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgY2hhbGsueWVsbG93KFxuICAgICAgICAgICAgICBgSWdub3JpbmcgXCIke3B9XCIgYmVjYXVzZSBpdCB3YXNuJ3QgY3JlYXRlZCB3aXRoIHdpdGhSb3V0ZVNwZWNgXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGZpbGVwYXRoVG9Sb3V0ZUZuLnNldChwLCB7XG4gICAgICAgICAgc2V0dXBQYXJhbXM6IHJvdXRlRm4uX3NldHVwUGFyYW1zLFxuICAgICAgICAgIHJvdXRlU3BlYzogcm91dGVGbi5fcm91dGVTcGVjLFxuICAgICAgICAgIHJvdXRlOiBtYXBGaWxlUGF0aFRvSFRUUFJvdXRlKHApLFxuICAgICAgICAgIHJvdXRlRm4sXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oY2hhbGsueWVsbG93KGBDb3VsZG4ndCBmaW5kIHJvdXRlICR7cH1gKSlcbiAgICAgIH1cbiAgICB9KVxuICApXG5cbiAgcmV0dXJuIGZpbGVwYXRoVG9Sb3V0ZUZuXG59XG4iLCAiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5leHBvcnQgY29uc3QgZGVmYXVsdE1hcEZpbGVQYXRoVG9IVFRQUm91dGUgPVxuICAoYXBpX3ByZWZpeDogc3RyaW5nID0gXCIvYXBpXCIpID0+XG4gIChmaWxlX3BhdGg6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJvdXRlID0gZmlsZV9wYXRoXG4gICAgICAvLyByZXBsYWNlIC4vIGlmIGl0IHN0YXJ0cyB3aXRoIC4vXG4gICAgICAucmVwbGFjZSgvXlxcLlxcLy8sIFwiL1wiKVxuICAgICAgLy8gcmVwbGFjZSBzdGFydGluZyAvXG4gICAgICAucmVwbGFjZSgvXlxcLy8sIFwiXCIpXG4gICAgICAvLyByZXBsYWNlIC9zcmMgaWYgaXQgc3RhcnRzIHdpdGggL3NyY1xuICAgICAgLnJlcGxhY2UoL15zcmNcXC8vLCBcIlwiKVxuICAgICAgLy8gcmVwbGFjZSAvcGFnZXMgaWYgaXQgc3RhcnRzIHdpdGggL3BhZ2VzXG4gICAgICAucmVwbGFjZSgvXnBhZ2VzXFwvLywgXCJcIilcbiAgICAgIC8vIHJlcGxhY2UgL2FwaSBpZiBpdCBzdGFydHMgd2l0aCAvYXBpXG4gICAgICAucmVwbGFjZSgvXmFwaVxcLy8sIFwiXCIpXG4gICAgICAvLyByZXBsYWNlIC50cyBpZiBpdCBlbmRzIHdpdGggLnRzXG4gICAgICAucmVwbGFjZSgvXFwudHMkLywgXCJcIilcbiAgICAgIC8vIHJlbW92ZSBwdWJsaWMgcmVmZXJlbmNlXG4gICAgICAucmVwbGFjZShcInB1YmxpY1wiLCBcIlwiKVxuICAgICAgLy8gcmVwbGFjZSBpbmRleCBpZiBpdCBlbmRzIHdpdGggaW5kZXhcbiAgICAgIC5yZXBsYWNlKC9cXC9cXGluZGV4KD8hLikvLCBcIlwiKVxuXG4gICAgcmV0dXJuIHBhdGguam9pbihhcGlfcHJlZml4LCByb3V0ZSlcbiAgfVxuIiwgIi8qKlxuICogWm9kIE9wZW5BUEkgR2VuZXJhdG9yLlxuICpcbiAqIFZlbmRvcmVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FuYXRpbmUvem9kLXBsdWdpbnNcbiAqXG4gKiBNSVQgTGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAyMiBCcmlhbiBNY0JyaWRlXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNjaGVtYU9iamVjdCwgU2NoZW1hT2JqZWN0VHlwZSB9IGZyb20gXCJvcGVuYXBpMy10cy9vYXMzMVwiXG5pbXBvcnQgbWVyZ2UgZnJvbSBcInRzLWRlZXBtZXJnZVwiXG5pbXBvcnQgeyBBbnlab2RPYmplY3QsIHosIFpvZFR5cGVBbnkgfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IHBhcnNlRnJvbnRNYXR0ZXIsIHRlc3RGcm9udE1hdHRlciB9IGZyb20gXCIuL2Zyb250LW1hdHRlclwiXG5pbXBvcnQgZGVkZW50IGZyb20gXCJkZWRlbnRcIlxuXG50eXBlIEFuYXRpbmVTY2hlbWFPYmplY3QgPSBTY2hlbWFPYmplY3QgJiB7IGhpZGVEZWZpbml0aW9ucz86IHN0cmluZ1tdIH1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQXBpWm9kQW55IGV4dGVuZHMgWm9kVHlwZUFueSB7XG4gIG1ldGFPcGVuQXBpPzogQW5hdGluZVNjaGVtYU9iamVjdCB8IEFuYXRpbmVTY2hlbWFPYmplY3RbXVxufVxuXG5pbnRlcmZhY2UgT3BlbkFwaVpvZEFueU9iamVjdCBleHRlbmRzIEFueVpvZE9iamVjdCB7XG4gIG1ldGFPcGVuQXBpPzogQW5hdGluZVNjaGVtYU9iamVjdCB8IEFuYXRpbmVTY2hlbWFPYmplY3RbXVxufVxuXG5pbnRlcmZhY2UgUGFyc2luZ0FyZ3M8VD4ge1xuICB6b2RSZWY6IFRcbiAgc2NoZW1hczogQW5hdGluZVNjaGVtYU9iamVjdFtdXG4gIHVzZU91dHB1dD86IGJvb2xlYW5cbiAgaGlkZURlZmluaXRpb25zPzogc3RyaW5nW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZEFwaTxUIGV4dGVuZHMgT3BlbkFwaVpvZEFueT4oXG4gIHNjaGVtYTogVCxcbiAgc2NoZW1hT2JqZWN0OiBBbmF0aW5lU2NoZW1hT2JqZWN0ID0ge31cbik6IFQge1xuICBzY2hlbWEubWV0YU9wZW5BcGkgPSBPYmplY3QuYXNzaWduKHNjaGVtYS5tZXRhT3BlbkFwaSB8fCB7fSwgc2NoZW1hT2JqZWN0KVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmZ1bmN0aW9uIGl0ZXJhdGVab2RPYmplY3Qoe1xuICB6b2RSZWYsXG4gIHVzZU91dHB1dCxcbiAgaGlkZURlZmluaXRpb25zLFxufTogUGFyc2luZ0FyZ3M8T3BlbkFwaVpvZEFueU9iamVjdD4pIHtcbiAgY29uc3QgcmVkdWNlZCA9IE9iamVjdC5rZXlzKHpvZFJlZi5zaGFwZSlcbiAgICAuZmlsdGVyKChrZXkpID0+IGhpZGVEZWZpbml0aW9ucz8uaW5jbHVkZXMoa2V5KSA9PT0gZmFsc2UpXG4gICAgLnJlZHVjZShcbiAgICAgIChjYXJyeSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5jYXJyeSxcbiAgICAgICAgW2tleV06IGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5zaGFwZVtrZXldLCB1c2VPdXRwdXQpLFxuICAgICAgfSksXG4gICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBTY2hlbWFPYmplY3Q+XG4gICAgKVxuXG4gIHJldHVybiByZWR1Y2VkXG59XG5cbmZ1bmN0aW9uIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmOiBPcGVuQXBpWm9kQW55KTogU2NoZW1hT2JqZWN0IHtcbiAgaWYgKCF6b2RSZWYuZGVzY3JpcHRpb24pIHJldHVybiB7fVxuICBjb25zdCB0cmltbWVkRGVzY3JpcHRpb24gPSBkZWRlbnQoem9kUmVmLmRlc2NyaXB0aW9uKVxuICBpZiAoIXRlc3RGcm9udE1hdHRlcih0cmltbWVkRGVzY3JpcHRpb24pKVxuICAgIHJldHVybiB7IGRlc2NyaXB0aW9uOiB6b2RSZWYuZGVzY3JpcHRpb24gfVxuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGJvZHkgfSA9IHBhcnNlRnJvbnRNYXR0ZXIodHJpbW1lZERlc2NyaXB0aW9uKVxuICBjb25zdCBvdXRwdXQ6IFNjaGVtYU9iamVjdCA9IHt9XG4gIGlmIChib2R5LnRyaW0oKSkgb3V0cHV0LmRlc2NyaXB0aW9uID0gYm9keS50cmltKClcbiAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiICYmIGF0dHJpYnV0ZXMgIT09IG51bGwpIHtcbiAgICBpZiAoXCJkZXByZWNhdGVkXCIgaW4gYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmRlcHJlY2F0ZWQpIHtcbiAgICAgIG91dHB1dC5kZXByZWNhdGVkID0gdHJ1ZVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKSkge1xuICAgICAgb3V0cHV0W2B4LSR7a2V5fWBdID0gdmFsdWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dHB1dFxufVxuXG5mdW5jdGlvbiBwYXJzZVRyYW5zZm9ybWF0aW9uKHtcbiAgem9kUmVmLFxuICBzY2hlbWFzLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZFRyYW5zZm9ybWVyPG5ldmVyPiB8IHouWm9kRWZmZWN0czxuZXZlcj4+KTogU2NoZW1hT2JqZWN0IHtcbiAgY29uc3QgaW5wdXQgPSBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi5zY2hlbWEsIHVzZU91dHB1dClcblxuICBsZXQgb3V0cHV0ID0gXCJ1bmRlZmluZWRcIlxuICBpZiAodXNlT3V0cHV0ICYmIHpvZFJlZi5fZGVmLmVmZmVjdCkge1xuICAgIGNvbnN0IGVmZmVjdCA9XG4gICAgICB6b2RSZWYuX2RlZi5lZmZlY3QudHlwZSA9PT0gXCJ0cmFuc2Zvcm1cIiA/IHpvZFJlZi5fZGVmLmVmZmVjdCA6IG51bGxcbiAgICBpZiAoZWZmZWN0ICYmIFwidHJhbnNmb3JtXCIgaW4gZWZmZWN0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBvdXRwdXQgPSB0eXBlb2YgZWZmZWN0LnRyYW5zZm9ybShcbiAgICAgICAgICBbXCJpbnRlZ2VyXCIsIFwibnVtYmVyXCJdLmluY2x1ZGVzKGAke2lucHV0LnR5cGV9YClcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBcInN0cmluZ1wiID09PSBpbnB1dC50eXBlXG4gICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgIDogXCJib29sZWFuXCIgPT09IGlucHV0LnR5cGVcbiAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgIDogXCJvYmplY3RcIiA9PT0gaW5wdXQudHlwZVxuICAgICAgICAgICAgPyB7fVxuICAgICAgICAgICAgOiBcIm51bGxcIiA9PT0gaW5wdXQudHlwZVxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IFwiYXJyYXlcIiA9PT0gaW5wdXQudHlwZVxuICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgeyBhZGRJc3N1ZTogKCkgPT4gdW5kZWZpbmVkLCBwYXRoOiBbXSB9IC8vIFRPRE86IERpc2NvdmVyIGlmIGNvbnRleHQgaXMgbmVjZXNzYXJ5IGhlcmVcbiAgICAgICAgKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiovXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtZXJnZShcbiAgICB7XG4gICAgICAuLi4oem9kUmVmLmRlc2NyaXB0aW9uID8geyBkZXNjcmlwdGlvbjogem9kUmVmLmRlc2NyaXB0aW9uIH0gOiB7fSksXG4gICAgICAuLi5pbnB1dCxcbiAgICAgIC4uLihbXCJudW1iZXJcIiwgXCJzdHJpbmdcIiwgXCJib29sZWFuXCIsIFwibnVsbFwiXS5pbmNsdWRlcyhvdXRwdXQpXG4gICAgICAgID8ge1xuICAgICAgICAgICAgdHlwZTogb3V0cHV0IGFzIFwibnVtYmVyXCIgfCBcInN0cmluZ1wiIHwgXCJib29sZWFuXCIgfCBcIm51bGxcIixcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH0sXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlU3RyaW5nKHtcbiAgem9kUmVmLFxuICBzY2hlbWFzLFxufTogUGFyc2luZ0FyZ3M8ei5ab2RTdHJpbmc+KTogU2NoZW1hT2JqZWN0IHtcbiAgY29uc3QgYmFzZVNjaGVtYTogU2NoZW1hT2JqZWN0ID0ge1xuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gIH1cbiAgY29uc3QgeyBjaGVja3MgPSBbXSB9ID0gem9kUmVmLl9kZWZcbiAgY2hlY2tzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICBzd2l0Y2ggKGl0ZW0ua2luZCkge1xuICAgICAgY2FzZSBcImVtYWlsXCI6XG4gICAgICAgIGJhc2VTY2hlbWEuZm9ybWF0ID0gXCJlbWFpbFwiXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwidXVpZFwiOlxuICAgICAgICBiYXNlU2NoZW1hLmZvcm1hdCA9IFwidXVpZFwiXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwiY3VpZFwiOlxuICAgICAgICBiYXNlU2NoZW1hLmZvcm1hdCA9IFwiY3VpZFwiXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwidXJsXCI6XG4gICAgICAgIGJhc2VTY2hlbWEuZm9ybWF0ID0gXCJ1cmlcIlxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcImRhdGV0aW1lXCI6XG4gICAgICAgIGJhc2VTY2hlbWEuZm9ybWF0ID0gXCJkYXRlLXRpbWVcIlxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcImxlbmd0aFwiOlxuICAgICAgICBiYXNlU2NoZW1hLm1pbkxlbmd0aCA9IGl0ZW0udmFsdWVcbiAgICAgICAgYmFzZVNjaGVtYS5tYXhMZW5ndGggPSBpdGVtLnZhbHVlXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgIGJhc2VTY2hlbWEubWF4TGVuZ3RoID0gaXRlbS52YWx1ZVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIm1pblwiOlxuICAgICAgICBiYXNlU2NoZW1hLm1pbkxlbmd0aCA9IGl0ZW0udmFsdWVcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJyZWdleFwiOlxuICAgICAgICBiYXNlU2NoZW1hLnBhdHRlcm4gPSBpdGVtLnJlZ2V4LnNvdXJjZVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG1lcmdlKGJhc2VTY2hlbWEsIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSwgLi4uc2NoZW1hcylcbn1cblxuZnVuY3Rpb24gcGFyc2VOdW1iZXIoe1xuICB6b2RSZWYsXG4gIHNjaGVtYXMsXG59OiBQYXJzaW5nQXJnczx6LlpvZE51bWJlcj4pOiBTY2hlbWFPYmplY3Qge1xuICBjb25zdCBiYXNlU2NoZW1hOiBTY2hlbWFPYmplY3QgPSB7XG4gICAgdHlwZTogXCJudW1iZXJcIixcbiAgICBmb3JtYXQ6IFwiZmxvYXRcIixcbiAgfVxuICBjb25zdCB7IGNoZWNrcyA9IFtdIH0gPSB6b2RSZWYuX2RlZlxuICBjaGVja3MuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgIHN3aXRjaCAoaXRlbS5raW5kKSB7XG4gICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgIGJhc2VTY2hlbWEubWF4aW11bSA9IGl0ZW0udmFsdWVcbiAgICAgICAgLy8gVE9ETzogb3B0aW9uIHRvIG1ha2UgdGhpcyBhbHdheXMgZXhwbGljaXQ/IChmYWxzZSBpbnN0ZWFkIG9mIG5vbi1leGlzdGVudClcbiAgICAgICAgaWYgKCFpdGVtLmluY2x1c2l2ZSkgYmFzZVNjaGVtYS5leGNsdXNpdmVNYXhpbXVtID0gaXRlbS52YWx1ZVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIm1pblwiOlxuICAgICAgICBiYXNlU2NoZW1hLm1pbmltdW0gPSBpdGVtLnZhbHVlXG4gICAgICAgIGlmICghaXRlbS5pbmNsdXNpdmUpIGJhc2VTY2hlbWEuZXhjbHVzaXZlTWluaW11bSA9IGl0ZW0udmFsdWVcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJpbnRcIjpcbiAgICAgICAgYmFzZVNjaGVtYS50eXBlID0gXCJpbnRlZ2VyXCJcbiAgICAgICAgZGVsZXRlIGJhc2VTY2hlbWEuZm9ybWF0XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwibXVsdGlwbGVPZlwiOlxuICAgICAgICBiYXNlU2NoZW1hLm11bHRpcGxlT2YgPSBpdGVtLnZhbHVlXG4gICAgfVxuICB9KVxuICByZXR1cm4gbWVyZ2UoYmFzZVNjaGVtYSwgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLCAuLi5zY2hlbWFzKVxufVxuXG5mdW5jdGlvbiBnZXRFeGNsdWRlZERlZmluaXRpb25zRnJvbVNjaGVtYShcbiAgc2NoZW1hczogQW5hdGluZVNjaGVtYU9iamVjdFtdXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGV4Y2x1ZGVkRGVmaW5pdGlvbnM6IHN0cmluZ1tdID0gW11cbiAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5oaWRlRGVmaW5pdGlvbnMpKSB7XG4gICAgICBleGNsdWRlZERlZmluaXRpb25zLnB1c2goLi4uc2NoZW1hLmhpZGVEZWZpbml0aW9ucylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhjbHVkZWREZWZpbml0aW9uc1xufVxuXG5mdW5jdGlvbiBwYXJzZU9iamVjdCh7XG4gIHpvZFJlZixcbiAgc2NoZW1hcyxcbiAgdXNlT3V0cHV0LFxuICBoaWRlRGVmaW5pdGlvbnMsXG59OiBQYXJzaW5nQXJnczxcbiAgei5ab2RPYmplY3Q8bmV2ZXIsIFwicGFzc3Rocm91Z2hcIiB8IFwic3RyaWN0XCIgfCBcInN0cmlwXCI+XG4+KTogU2NoZW1hT2JqZWN0IHtcbiAgbGV0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBTY2hlbWFPYmplY3RbXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiXVxuXG4gIC8vIGBjYXRjaGFsbGAgb2J2aWF0ZXMgYHN0cmljdGAsIGBzdHJpcGAsIGFuZCBgcGFzc3Rocm91Z2hgXG4gIGlmIChcbiAgICAhKFxuICAgICAgem9kUmVmLl9kZWYuY2F0Y2hhbGwgaW5zdGFuY2VvZiB6LlpvZE5ldmVyIHx8XG4gICAgICB6b2RSZWYuX2RlZi5jYXRjaGFsbD8uX2RlZi50eXBlTmFtZSA9PT0gXCJab2ROZXZlclwiXG4gICAgKVxuICApXG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXMgPSBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi5jYXRjaGFsbCwgdXNlT3V0cHV0KVxuICBlbHNlIGlmICh6b2RSZWYuX2RlZi51bmtub3duS2V5cyA9PT0gXCJwYXNzdGhyb3VnaFwiKVxuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gdHJ1ZVxuICBlbHNlIGlmICh6b2RSZWYuX2RlZi51bmtub3duS2V5cyA9PT0gXCJzdHJpY3RcIikgYWRkaXRpb25hbFByb3BlcnRpZXMgPSBmYWxzZVxuXG4gIC8vIFNvIHRoYXQgYHVuZGVmaW5lZGAgdmFsdWVzIGRvbid0IGVuZCB1cCBpbiB0aGUgc2NoZW1hIGFuZCBiZSB3ZWlyZFxuICBhZGRpdGlvbmFsUHJvcGVydGllcyA9XG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXMgIT0gbnVsbCA/IHsgYWRkaXRpb25hbFByb3BlcnRpZXMgfSA6IHt9XG5cbiAgY29uc3QgcmVxdWlyZWRQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoXG4gICAgKHpvZFJlZiBhcyB6LkFueVpvZE9iamVjdCkuc2hhcGVcbiAgKS5maWx0ZXIoKGtleSkgPT4ge1xuICAgIGNvbnN0IGl0ZW0gPSAoem9kUmVmIGFzIHouQW55Wm9kT2JqZWN0KS5zaGFwZVtrZXldXG4gICAgcmV0dXJuIChcbiAgICAgICEoXG4gICAgICAgIGl0ZW0uaXNPcHRpb25hbCgpIHx8XG4gICAgICAgIGl0ZW0gaW5zdGFuY2VvZiB6LlpvZERlZmF1bHQgfHxcbiAgICAgICAgaXRlbS5fZGVmLnR5cGVOYW1lID09PSBcIlpvZERlZmF1bHRcIlxuICAgICAgKSAmJiAhKGl0ZW0gaW5zdGFuY2VvZiB6LlpvZE5ldmVyIHx8IGl0ZW0uX2RlZi50eXBlTmFtZSA9PT0gXCJab2REZWZhdWx0XCIpXG4gICAgKVxuICB9KVxuXG4gIGNvbnN0IHJlcXVpcmVkID1cbiAgICByZXF1aXJlZFByb3BlcnRpZXMubGVuZ3RoID4gMCA/IHsgcmVxdWlyZWQ6IHJlcXVpcmVkUHJvcGVydGllcyB9IDoge31cblxuICByZXR1cm4gbWVyZ2UoXG4gICAge1xuICAgICAgdHlwZTogXCJvYmplY3RcIiBhcyBTY2hlbWFPYmplY3RUeXBlLFxuICAgICAgcHJvcGVydGllczogaXRlcmF0ZVpvZE9iamVjdCh7XG4gICAgICAgIHpvZFJlZjogem9kUmVmIGFzIE9wZW5BcGlab2RBbnlPYmplY3QsXG4gICAgICAgIHNjaGVtYXMsXG4gICAgICAgIHVzZU91dHB1dCxcbiAgICAgICAgaGlkZURlZmluaXRpb25zOiBnZXRFeGNsdWRlZERlZmluaXRpb25zRnJvbVNjaGVtYShzY2hlbWFzKSxcbiAgICAgIH0pLFxuICAgICAgLi4ucmVxdWlyZWQsXG4gICAgICAuLi5hZGRpdGlvbmFsUHJvcGVydGllcyxcbiAgICAgIC4uLmhpZGVEZWZpbml0aW9ucyxcbiAgICB9LFxuICAgIHpvZFJlZi5kZXNjcmlwdGlvblxuICAgICAgPyB7IGRlc2NyaXB0aW9uOiB6b2RSZWYuZGVzY3JpcHRpb24sIGhpZGVEZWZpbml0aW9ucyB9XG4gICAgICA6IHt9LFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZVJlY29yZCh7XG4gIHpvZFJlZixcbiAgc2NoZW1hcyxcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2RSZWNvcmQ+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIgYXMgU2NoZW1hT2JqZWN0VHlwZSxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOlxuICAgICAgICB6b2RSZWYuX2RlZi52YWx1ZVR5cGUgaW5zdGFuY2VvZiB6LlpvZFVua25vd25cbiAgICAgICAgICA/IHt9XG4gICAgICAgICAgOiBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi52YWx1ZVR5cGUsIHVzZU91dHB1dCksXG4gICAgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlQmlnSW50KHtcbiAgem9kUmVmLFxuICBzY2hlbWFzLFxufTogUGFyc2luZ0FyZ3M8ei5ab2RCaWdJbnQ+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHsgdHlwZTogXCJpbnRlZ2VyXCIgYXMgU2NoZW1hT2JqZWN0VHlwZSwgZm9ybWF0OiBcImludDY0XCIgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbGVhbih7XG4gIHpvZFJlZixcbiAgc2NoZW1hcyxcbn06IFBhcnNpbmdBcmdzPHouWm9kQm9vbGVhbj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAgeyB0eXBlOiBcImJvb2xlYW5cIiBhcyBTY2hlbWFPYmplY3RUeXBlIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZURhdGUoeyB6b2RSZWYsIHNjaGVtYXMgfTogUGFyc2luZ0FyZ3M8ei5ab2REYXRlPik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShcbiAgICB7IHR5cGU6IFwic3RyaW5nXCIgYXMgU2NoZW1hT2JqZWN0VHlwZSwgZm9ybWF0OiBcImRhdGUtdGltZVwiIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZU51bGwoeyB6b2RSZWYsIHNjaGVtYXMgfTogUGFyc2luZ0FyZ3M8ei5ab2ROdWxsPik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShcbiAgICB7XG4gICAgICB0eXBlOiBcIm51bGxcIiBhcyBTY2hlbWFPYmplY3RUeXBlLFxuICAgIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZU9wdGlvbmFsKHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZE9wdGlvbmFsPE9wZW5BcGlab2RBbnk+Pik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShcbiAgICBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYudW53cmFwKCksIHVzZU91dHB1dCksXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZU51bGxhYmxlKHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZE51bGxhYmxlPE9wZW5BcGlab2RBbnk+Pik6IFNjaGVtYU9iamVjdCB7XG4gIGNvbnN0IHNjaGVtYSA9IGdlbmVyYXRlU2NoZW1hKHpvZFJlZi51bndyYXAoKSwgdXNlT3V0cHV0KVxuICByZXR1cm4gbWVyZ2UoXG4gICAgeyAuLi5zY2hlbWEsIHR5cGU6IHNjaGVtYS50eXBlLCBudWxsYWJsZTogdHJ1ZSB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VEZWZhdWx0KHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZERlZmF1bHQ8T3BlbkFwaVpvZEFueT4+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIGRlZmF1bHQ6IHpvZFJlZi5fZGVmLmRlZmF1bHRWYWx1ZSgpLFxuICAgICAgLi4uZ2VuZXJhdGVTY2hlbWEoem9kUmVmLl9kZWYuaW5uZXJUeXBlLCB1c2VPdXRwdXQpLFxuICAgIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZUFycmF5KHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZEFycmF5PE9wZW5BcGlab2RBbnk+Pik6IFNjaGVtYU9iamVjdCB7XG4gIGNvbnN0IGNvbnN0cmFpbnRzOiBTY2hlbWFPYmplY3QgPSB7fVxuICBpZiAoem9kUmVmLl9kZWYuZXhhY3RMZW5ndGggIT0gbnVsbCkge1xuICAgIGNvbnN0cmFpbnRzLm1pbkl0ZW1zID0gem9kUmVmLl9kZWYuZXhhY3RMZW5ndGgudmFsdWVcbiAgICBjb25zdHJhaW50cy5tYXhJdGVtcyA9IHpvZFJlZi5fZGVmLmV4YWN0TGVuZ3RoLnZhbHVlXG4gIH1cblxuICBpZiAoem9kUmVmLl9kZWYubWluTGVuZ3RoICE9IG51bGwpXG4gICAgY29uc3RyYWludHMubWluSXRlbXMgPSB6b2RSZWYuX2RlZi5taW5MZW5ndGgudmFsdWVcbiAgaWYgKHpvZFJlZi5fZGVmLm1heExlbmd0aCAhPSBudWxsKVxuICAgIGNvbnN0cmFpbnRzLm1heEl0ZW1zID0gem9kUmVmLl9kZWYubWF4TGVuZ3RoLnZhbHVlXG5cbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIiBhcyBTY2hlbWFPYmplY3RUeXBlLFxuICAgICAgaXRlbXM6IGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5lbGVtZW50LCB1c2VPdXRwdXQpLFxuICAgICAgLi4uY29uc3RyYWludHMsXG4gICAgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlTGl0ZXJhbCh7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbn06IFBhcnNpbmdBcmdzPHouWm9kTGl0ZXJhbDxPcGVuQXBpWm9kQW55Pj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAge1xuICAgICAgdHlwZTogdHlwZW9mIHpvZFJlZi5fZGVmLnZhbHVlIGFzIFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIsXG4gICAgICBlbnVtOiBbem9kUmVmLl9kZWYudmFsdWVdLFxuICAgIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZUVudW0oe1xuICBzY2hlbWFzLFxuICB6b2RSZWYsXG59OiBQYXJzaW5nQXJnczx6LlpvZEVudW08bmV2ZXI+IHwgei5ab2ROYXRpdmVFbnVtPG5ldmVyPj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAge1xuICAgICAgdHlwZTogdHlwZW9mIE9iamVjdC52YWx1ZXMoem9kUmVmLl9kZWYudmFsdWVzKVswXSBhcyBcInN0cmluZ1wiIHwgXCJudW1iZXJcIixcbiAgICAgIGVudW06IE9iamVjdC52YWx1ZXMoem9kUmVmLl9kZWYudmFsdWVzKSxcbiAgICB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VJbnRlcnNlY3Rpb24oe1xuICBzY2hlbWFzLFxuICB6b2RSZWYsXG4gIHVzZU91dHB1dCxcbn06IFBhcnNpbmdBcmdzPHouWm9kSW50ZXJzZWN0aW9uPHouWm9kVHlwZUFueSwgei5ab2RUeXBlQW55Pj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAge1xuICAgICAgYWxsT2Y6IFtcbiAgICAgICAgZ2VuZXJhdGVTY2hlbWEoem9kUmVmLl9kZWYubGVmdCwgdXNlT3V0cHV0KSxcbiAgICAgICAgZ2VuZXJhdGVTY2hlbWEoem9kUmVmLl9kZWYucmlnaHQsIHVzZU91dHB1dCksXG4gICAgICBdLFxuICAgIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZVVuaW9uKHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZFVuaW9uPFt6LlpvZFR5cGVBbnksIC4uLnouWm9kVHlwZUFueVtdXT4+KTogU2NoZW1hT2JqZWN0IHtcbiAgY29uc3QgY29udGVudHMgPSB6b2RSZWYuX2RlZi5vcHRpb25zXG4gIGlmIChcbiAgICBjb250ZW50cy5yZWR1Y2UoXG4gICAgICAocHJldiwgY29udGVudCkgPT4gcHJldiAmJiBjb250ZW50Ll9kZWYudHlwZU5hbWUgPT09IFwiWm9kTGl0ZXJhbFwiLFxuICAgICAgdHJ1ZVxuICAgIClcbiAgKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIHRvIHRyYW5zZm9ybSB1bmlvbnMgb2YgbGl0ZXJhbHMgaW50byBlbnVtc1xuICAgIGNvbnN0IGxpdGVyYWxzID0gY29udGVudHMgYXMgdW5rbm93biBhcyB6LlpvZExpdGVyYWw8T3BlbkFwaVpvZEFueT5bXVxuICAgIGNvbnN0IHR5cGUgPSBsaXRlcmFscy5yZWR1Y2UoXG4gICAgICAocHJldiwgY29udGVudCkgPT5cbiAgICAgICAgIXByZXYgfHwgcHJldiA9PT0gdHlwZW9mIGNvbnRlbnQuX2RlZi52YWx1ZVxuICAgICAgICAgID8gdHlwZW9mIGNvbnRlbnQuX2RlZi52YWx1ZVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIG51bGwgYXMgbnVsbCB8IHN0cmluZ1xuICAgIClcblxuICAgIGlmICh0eXBlKSB7XG4gICAgICByZXR1cm4gbWVyZ2UoXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiB0eXBlIGFzIFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIsXG4gICAgICAgICAgZW51bTogbGl0ZXJhbHMubWFwKChsaXRlcmFsKSA9PiBsaXRlcmFsLl9kZWYudmFsdWUpLFxuICAgICAgICB9LFxuICAgICAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgICAgIC4uLnNjaGVtYXNcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2UoXG4gICAge1xuICAgICAgb25lT2Y6IGNvbnRlbnRzLm1hcCgoc2NoZW1hKSA9PiBnZW5lcmF0ZVNjaGVtYShzY2hlbWEsIHVzZU91dHB1dCkpLFxuICAgIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZURpc2NyaW1pbmF0ZWRVbmlvbih7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8XG4gIHouWm9kRGlzY3JpbWluYXRlZFVuaW9uPHN0cmluZywgei5ab2REaXNjcmltaW5hdGVkVW5pb25PcHRpb248c3RyaW5nPltdPlxuPik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShcbiAgICB7XG4gICAgICBkaXNjcmltaW5hdG9yOiB7XG4gICAgICAgIHByb3BlcnR5TmFtZTogKFxuICAgICAgICAgIHpvZFJlZiBhcyB6LlpvZERpc2NyaW1pbmF0ZWRVbmlvbjxcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIHouWm9kRGlzY3JpbWluYXRlZFVuaW9uT3B0aW9uPHN0cmluZz5bXVxuICAgICAgICAgID5cbiAgICAgICAgKS5fZGVmLmRpc2NyaW1pbmF0b3IsXG4gICAgICB9LFxuICAgICAgb25lT2Y6IEFycmF5LmZyb20oXG4gICAgICAgIChcbiAgICAgICAgICB6b2RSZWYgYXMgei5ab2REaXNjcmltaW5hdGVkVW5pb248XG4gICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICB6LlpvZERpc2NyaW1pbmF0ZWRVbmlvbk9wdGlvbjxzdHJpbmc+W11cbiAgICAgICAgICA+XG4gICAgICAgICkuX2RlZi5vcHRpb25zLnZhbHVlcygpXG4gICAgICApLm1hcCgoc2NoZW1hKSA9PiBnZW5lcmF0ZVNjaGVtYShzY2hlbWEsIHVzZU91dHB1dCkpLFxuICAgIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZU5ldmVyKHtcbiAgem9kUmVmLFxuICBzY2hlbWFzLFxufTogUGFyc2luZ0FyZ3M8ei5ab2ROZXZlcj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoeyByZWFkT25seTogdHJ1ZSB9LCBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksIC4uLnNjaGVtYXMpXG59XG5cbmZ1bmN0aW9uIHBhcnNlQnJhbmRlZCh7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbn06IFBhcnNpbmdBcmdzPHouWm9kQnJhbmRlZDx6LlpvZEFueSwgc3RyaW5nPj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoZ2VuZXJhdGVTY2hlbWEoem9kUmVmLl9kZWYudHlwZSksIC4uLnNjaGVtYXMpXG59XG5cbmZ1bmN0aW9uIGNhdGNoQWxsUGFyc2VyKHtcbiAgem9kUmVmLFxuICBzY2hlbWFzLFxufTogUGFyc2luZ0FyZ3M8Wm9kVHlwZUFueT4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UocGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLCAuLi5zY2hlbWFzKVxufVxuXG5mdW5jdGlvbiBwYXJzZVBpcGVsaW5lKHtcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZFBpcGVsaW5lPG5ldmVyLCBuZXZlcj4+KTogU2NoZW1hT2JqZWN0IHtcbiAgaWYgKHVzZU91dHB1dCkge1xuICAgIHJldHVybiBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi5vdXQsIHVzZU91dHB1dClcbiAgfVxuICByZXR1cm4gZ2VuZXJhdGVTY2hlbWEoem9kUmVmLl9kZWYuaW4sIHVzZU91dHB1dClcbn1cblxuZnVuY3Rpb24gcGFyc2VSZWFkb25seSh7XG4gIHpvZFJlZixcbiAgdXNlT3V0cHV0LFxuICBzY2hlbWFzLFxufTogUGFyc2luZ0FyZ3M8ei5ab2RSZWFkb25seTx6LlpvZEFueT4+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5fZGVmLmlubmVyVHlwZSwgdXNlT3V0cHV0KSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmNvbnN0IHdvcmtlck1hcCA9IHtcbiAgWm9kT2JqZWN0OiBwYXJzZU9iamVjdCxcbiAgWm9kUmVjb3JkOiBwYXJzZVJlY29yZCxcbiAgWm9kU3RyaW5nOiBwYXJzZVN0cmluZyxcbiAgWm9kTnVtYmVyOiBwYXJzZU51bWJlcixcbiAgWm9kQmlnSW50OiBwYXJzZUJpZ0ludCxcbiAgWm9kQm9vbGVhbjogcGFyc2VCb29sZWFuLFxuICBab2REYXRlOiBwYXJzZURhdGUsXG4gIFpvZE51bGw6IHBhcnNlTnVsbCxcbiAgWm9kT3B0aW9uYWw6IHBhcnNlT3B0aW9uYWwsXG4gIFpvZE51bGxhYmxlOiBwYXJzZU51bGxhYmxlLFxuICBab2REZWZhdWx0OiBwYXJzZURlZmF1bHQsXG4gIFpvZEFycmF5OiBwYXJzZUFycmF5LFxuICBab2RMaXRlcmFsOiBwYXJzZUxpdGVyYWwsXG4gIFpvZEVudW06IHBhcnNlRW51bSxcbiAgWm9kTmF0aXZlRW51bTogcGFyc2VFbnVtLFxuICBab2RUcmFuc2Zvcm1lcjogcGFyc2VUcmFuc2Zvcm1hdGlvbixcbiAgWm9kRWZmZWN0czogcGFyc2VUcmFuc2Zvcm1hdGlvbixcbiAgWm9kSW50ZXJzZWN0aW9uOiBwYXJzZUludGVyc2VjdGlvbixcbiAgWm9kVW5pb246IHBhcnNlVW5pb24sXG4gIFpvZERpc2NyaW1pbmF0ZWRVbmlvbjogcGFyc2VEaXNjcmltaW5hdGVkVW5pb24sXG4gIFpvZE5ldmVyOiBwYXJzZU5ldmVyLFxuICBab2RCcmFuZGVkOiBwYXJzZUJyYW5kZWQsXG4gIC8vIFRPRE8gVHJhbnNmb3JtIHRoZSByZXN0IHRvIHNjaGVtYXNcbiAgWm9kVW5kZWZpbmVkOiBjYXRjaEFsbFBhcnNlcixcbiAgLy8gVE9ETzogYHByZWZpeEl0ZW1zYCBpcyBhbGxvd2VkIGluIE9wZW5BUEkgMy4xIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSB0dXBsZXNcbiAgWm9kVHVwbGU6IGNhdGNoQWxsUGFyc2VyLFxuICBab2RNYXA6IGNhdGNoQWxsUGFyc2VyLFxuICBab2RGdW5jdGlvbjogY2F0Y2hBbGxQYXJzZXIsXG4gIFpvZExhenk6IGNhdGNoQWxsUGFyc2VyLFxuICBab2RQcm9taXNlOiBjYXRjaEFsbFBhcnNlcixcbiAgWm9kQW55OiBjYXRjaEFsbFBhcnNlcixcbiAgWm9kVW5rbm93bjogY2F0Y2hBbGxQYXJzZXIsXG4gIFpvZFZvaWQ6IGNhdGNoQWxsUGFyc2VyLFxuICBab2RQaXBlbGluZTogcGFyc2VQaXBlbGluZSxcbiAgWm9kUmVhZG9ubHk6IHBhcnNlUmVhZG9ubHksXG59XG50eXBlIFdvcmtlcktleXMgPSBrZXlvZiB0eXBlb2Ygd29ya2VyTWFwXG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVNjaGVtYShcbiAgem9kUmVmOiBPcGVuQXBpWm9kQW55LFxuICB1c2VPdXRwdXQ/OiBib29sZWFuXG4pOiBTY2hlbWFPYmplY3Qge1xuICBjb25zdCB7IG1ldGFPcGVuQXBpID0ge30gfSA9IHpvZFJlZlxuICBjb25zdCBzY2hlbWFzOiBBbmF0aW5lU2NoZW1hT2JqZWN0W10gPSBbXG4gICAgLi4uKEFycmF5LmlzQXJyYXkobWV0YU9wZW5BcGkpID8gbWV0YU9wZW5BcGkgOiBbbWV0YU9wZW5BcGldKSxcbiAgXVxuICB0cnkge1xuICAgIGNvbnN0IHR5cGVOYW1lID0gem9kUmVmLl9kZWYudHlwZU5hbWUgYXMgV29ya2VyS2V5c1xuICAgIGlmICh0eXBlTmFtZSBpbiB3b3JrZXJNYXApIHtcbiAgICAgIHJldHVybiB3b3JrZXJNYXBbdHlwZU5hbWVdKHtcbiAgICAgICAgem9kUmVmOiB6b2RSZWYgYXMgbmV2ZXIsXG4gICAgICAgIHNjaGVtYXMsXG4gICAgICAgIHVzZU91dHB1dCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGNhdGNoQWxsUGFyc2VyKHsgem9kUmVmLCBzY2hlbWFzIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgIHJldHVybiBjYXRjaEFsbFBhcnNlcih7IHpvZFJlZiwgc2NoZW1hcyB9KVxuICB9XG59XG4iLCAiLyoqXG4gKiBGcm9udC1NYXR0ZXJcbiAqXG4gKiBWZW5kb3JlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qeHNvbi9mcm9udC1tYXR0ZXJcbiAqXG4gKiBNSVQgTGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAoYykgSmFzb24gQ2FtcGJlbGwgKFwiQXV0aG9yXCIpXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBsb2FkIH0gZnJvbSBcImpzLXlhbWxcIlxuY29uc3Qgb3B0aW9uYWxCeXRlT3JkZXJNYXJrID0gXCJcXFxcdWZlZmY/XCJcbmNvbnN0IHBsYXRmb3JtID0gdHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgPyBwcm9jZXNzLnBsYXRmb3JtIDogXCJcIlxuY29uc3QgcGF0dGVybiA9XG4gIFwiXihcIiArXG4gIG9wdGlvbmFsQnl0ZU9yZGVyTWFyayArXG4gIFwiKD0geWFtbCA9fC0tLSlcIiArXG4gIFwiJChbXFxcXHNcXFxcU10qPylcIiArXG4gIFwiXig/OlxcXFwyfFxcXFwuXFxcXC5cXFxcLilcXFxccypcIiArXG4gIFwiJFwiICtcbiAgKHBsYXRmb3JtID09PSBcIndpbjMyXCIgPyBcIlxcXFxyP1wiIDogXCJcIikgK1xuICBcIig/OlxcXFxuKT8pXCJcbi8vIE5PVEU6IElmIHRoaXMgcGF0dGVybiB1c2VzIHRoZSAnZycgZmxhZyB0aGUgYHJlZ2V4YCB2YXJpYWJsZSBkZWZpbml0aW9uIHdpbGxcbi8vIG5lZWQgdG8gYmUgbW92ZWQgZG93biBpbnRvIHRoZSBmdW5jdGlvbnMgdGhhdCB1c2UgaXQuXG5jb25zdCByZWdleCA9IG5ldyBSZWdFeHAocGF0dGVybiwgXCJtXCIpXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZyb250TWF0dGVyKFxuICBzdHJpbmc6IHN0cmluZyxcbiAgb3B0aW9ucyA9IHt9XG4pOiB7IGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+OyBib2R5OiBzdHJpbmc7IGJvZHlCZWdpbjogbnVtYmVyIH0ge1xuICBzdHJpbmcgPSBzdHJpbmcgfHwgXCJcIlxuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSB7IGFsbG93VW5zYWZlOiBmYWxzZSB9XG4gIG9wdGlvbnMgPVxuICAgIG9wdGlvbnMgaW5zdGFuY2VvZiBPYmplY3RcbiAgICAgID8geyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9XG4gICAgICA6IGRlZmF1bHRPcHRpb25zXG4gIHZhciBsaW5lcyA9IHN0cmluZy5zcGxpdCgvKFxccj9cXG4pLylcbiAgaWYgKGxpbmVzWzBdICYmIC89IHlhbWwgPXwtLS0vLnRlc3QobGluZXNbMF0pKSB7XG4gICAgcmV0dXJuIHBhcnNlKHN0cmluZylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRlczoge30sXG4gICAgICBib2R5OiBzdHJpbmcsXG4gICAgICBib2R5QmVnaW46IDEsXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVMb2NhdGlvbihtYXRjaDogUmVnRXhwRXhlY0FycmF5LCBib2R5OiBzdHJpbmcpIHtcbiAgdmFyIGxpbmUgPSAxXG4gIHZhciBwb3MgPSBib2R5LmluZGV4T2YoXCJcXG5cIilcbiAgdmFyIG9mZnNldCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG5cbiAgd2hpbGUgKHBvcyAhPT0gLTEpIHtcbiAgICBpZiAocG9zID49IG9mZnNldCkge1xuICAgICAgcmV0dXJuIGxpbmVcbiAgICB9XG4gICAgbGluZSsrXG4gICAgcG9zID0gYm9keS5pbmRleE9mKFwiXFxuXCIsIHBvcyArIDEpXG4gIH1cblxuICByZXR1cm4gbGluZVxufVxuXG5mdW5jdGlvbiBwYXJzZShzdHJpbmc6IHN0cmluZyk6IHtcbiAgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgYm9keTogc3RyaW5nXG4gIGJvZHlCZWdpbjogbnVtYmVyXG59IHtcbiAgdmFyIG1hdGNoID0gcmVnZXguZXhlYyhzdHJpbmcpXG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRlczoge30sXG4gICAgICBib2R5OiBzdHJpbmcsXG4gICAgICBib2R5QmVnaW46IDEsXG4gICAgfVxuICB9XG5cbiAgdmFyIHlhbWwgPSBtYXRjaFttYXRjaC5sZW5ndGggLSAxXS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBcIlwiKVxuICB2YXIgYXR0cmlidXRlcyA9IChsb2FkKHlhbWwpIHx8IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICB2YXIgYm9keSA9IHN0cmluZy5yZXBsYWNlKG1hdGNoWzBdLCBcIlwiKVxuICB2YXIgbGluZSA9IGNvbXB1dGVMb2NhdGlvbihtYXRjaCwgc3RyaW5nKVxuXG4gIHJldHVybiB7XG4gICAgYXR0cmlidXRlczogYXR0cmlidXRlcyxcbiAgICBib2R5OiBib2R5LFxuICAgIGJvZHlCZWdpbjogbGluZSxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdEZyb250TWF0dGVyKHN0cmluZzogc3RyaW5nKSB7XG4gIHN0cmluZyA9IHN0cmluZyB8fCBcIlwiXG5cbiAgcmV0dXJuIHJlZ2V4LnRlc3Qoc3RyaW5nKVxufVxuIiwgImltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIlxuXG5mdW5jdGlvbiBmaW5kS2V5SW5PYmoob2JqOiBhbnksIHZhbHVlOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgbGV0IHJlc3VsdEtleTogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgXy5mb3JPd24ob2JqLCAodiwgaykgPT4ge1xuICAgIGlmIChfLmlzT2JqZWN0KHYpICYmIF8uaXNNYXRjaCh2LCB2YWx1ZSkpIHtcbiAgICAgIHJlc3VsdEtleSA9IGtcbiAgICAgIC8vIFN0b3AgdGhlIGl0ZXJhdGlvblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9KVxuICByZXR1cm4gcmVzdWx0S2V5XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWJlZFNjaGVtYVJlZmVyZW5jZXMob2JqMTogYW55LCBvYmoyOiBhbnkpOiBhbnkge1xuICByZXR1cm4gXy50cmFuc2Zvcm0ob2JqMSwgKHJlc3VsdCwgdmFsdWUsIGtleSkgPT4ge1xuICAgIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgY29uc3QgbWF0Y2hpbmdLZXkgPSBmaW5kS2V5SW5PYmoob2JqMiwgdmFsdWUpXG4gICAgICBpZiAobWF0Y2hpbmdLZXkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB7XG4gICAgICAgICAgJHJlZjogYCMvY29tcG9uZW50cy9zY2hlbWFzLyR7bWF0Y2hpbmdLZXl9YCxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBlbWJlZFNjaGVtYVJlZmVyZW5jZXModmFsdWUsIG9iajIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVcbiAgICB9XG4gIH0pXG59XG4iLCAiaW1wb3J0IHsgUm91dGVTcGVjIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCJcblxuZnVuY3Rpb24gdHJhbnNmb3JtUGF0aFRvRmVyblNka01ldGhvZE5hbWUocGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSBcIlwiKVxuICBjb25zdCBsYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdXG4gIGlmIChsYXN0UGFydC5zdGFydHNXaXRoKFwiW1wiKSAmJiBsYXN0UGFydC5lbmRzV2l0aChcIl1cIikpIHtcbiAgICAvLyBDb252ZXJ0IFtwYXJhbV0gdG8gYnlfcGFyYW1cbiAgICBjb25zdCBwYXJhbSA9IGxhc3RQYXJ0LnNsaWNlKDEsIC0xKVxuICAgIHJldHVybiBgYnlfJHtwYXJhbX1gXG4gIH1cblxuICByZXR1cm4gbGFzdFBhcnRcbn1cblxuLy8gZmVybiBkb2NzOiBodHRwczovL2J1aWxkd2l0aGZlcm4uY29tL2RvY3Mvc3BlYy9leHRlbnNpb25zXG5mdW5jdGlvbiB0cmFuc2Zvcm1QYXRoVG9GZXJuU2RrR3JvdXBOYW1lKHBhdGg6IHN0cmluZykge1xuICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gXCJcIilcbiAgcmV0dXJuIHBhcnRzLnNsaWNlKDAsIHBhcnRzLmxlbmd0aCAtIDEpXG59XG5cbmZ1bmN0aW9uIGdldEZlcm5TZGtNZXRhZGF0YShcbiAgcGF0aDogc3RyaW5nLFxuICBzZGtSZXR1cm5WYWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdXG4pOlxuICB8IHtcbiAgICAgIFwieC1mZXJuLWlnbm9yZVwiOiB0cnVlXG4gICAgfVxuICB8IHtcbiAgICAgIFwieC1mZXJuLXNkay1ncm91cC1uYW1lXCI6IHN0cmluZ1tdXG4gICAgICBcIngtZmVybi1zZGstbWV0aG9kLW5hbWVcIjogc3RyaW5nXG4gICAgfSB7XG4gIGlmIChwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09IFwiXCIpLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICBcIngtZmVybi1pZ25vcmVcIjogdHJ1ZSxcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIFwieC1mZXJuLXNkay1ncm91cC1uYW1lXCI6IHRyYW5zZm9ybVBhdGhUb0Zlcm5TZGtHcm91cE5hbWUocGF0aCksXG4gICAgXCJ4LWZlcm4tc2RrLW1ldGhvZC1uYW1lXCI6IHRyYW5zZm9ybVBhdGhUb0Zlcm5TZGtNZXRob2ROYW1lKHBhdGgpLFxuICAgIC4uLihzZGtSZXR1cm5WYWx1ZVxuICAgICAgPyB7XG4gICAgICAgICAgXCJ4LWZlcm4tc2RrLXJldHVybi12YWx1ZVwiOiBzZGtSZXR1cm5WYWx1ZSxcbiAgICAgICAgfVxuICAgICAgOiB7fSksXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1hcE1ldGhvZHNUb0Zlcm5TZGtNZXRhZGF0YSh7XG4gIG1ldGhvZHMsXG4gIHBhdGgsXG4gIHNka1JldHVyblZhbHVlLFxufToge1xuICBtZXRob2RzOiBSb3V0ZVNwZWNbXCJtZXRob2RzXCJdXG4gIHBhdGg6IHN0cmluZ1xuICBzZGtSZXR1cm5WYWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdXG59KSB7XG4gIGNvbnN0IGZlcm5TZGtNZXRhZGF0YSA9IGdldEZlcm5TZGtNZXRhZGF0YShwYXRoLCBzZGtSZXR1cm5WYWx1ZSlcbiAgaWYgKG1ldGhvZHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFttZXRob2RzWzBdXTogZmVyblNka01ldGFkYXRhLFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1hcHBlZE1ldGhvZHMgPSB7fVxuXG4gIG1ldGhvZHMuZm9yRWFjaCgobWV0aG9kKSA9PiB7XG4gICAgaWYgKG1ldGhvZCA9PT0gXCJQT1NUXCIpIHtcbiAgICAgIG1hcHBlZE1ldGhvZHNbbWV0aG9kXSA9IGZlcm5TZGtNZXRhZGF0YVxuICAgIH0gZWxzZSB7XG4gICAgICBtYXBwZWRNZXRob2RzW21ldGhvZF0gPSB7XG4gICAgICAgIFwieC1mZXJuLWlnbm9yZVwiOiB0cnVlLFxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gbWFwcGVkTWV0aG9kc1xufVxuIiwgImltcG9ydCAqIGFzIGZzIGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCJcbmltcG9ydCB7IHBhcnNlUm91dGVzSW5QYWNrYWdlIH0gZnJvbSBcIi4uL2xpYi9wYXJzZS1yb3V0ZXMtaW4tcGFja2FnZVwiXG5pbXBvcnQgeyB6b2RUb1RzLCBwcmludE5vZGUgfSBmcm9tIFwiLi4vbGliL3pvZC10by10c1wiXG5pbXBvcnQgcHJldHRpZXIgZnJvbSBcInByZXR0aWVyXCJcbmltcG9ydCB7IHosIFpvZEVmZmVjdHMsIFpvZE9wdGlvbmFsIH0gZnJvbSBcInpvZFwiXG5cbmludGVyZmFjZSBHZW5lcmF0ZVJvdXRlVHlwZXNPcHRzIHtcbiAgcGFja2FnZURpcjogc3RyaW5nXG4gIG91dHB1dEZpbGU/OiBzdHJpbmdcbiAgcGF0aEdsb2I/OiBzdHJpbmdcbiAgYXBpUHJlZml4Pzogc3RyaW5nXG4gIG1hcEZpbGVQYXRoVG9IVFRQUm91dGU/OiAoZmlsZV9wYXRoOiBzdHJpbmcpID0+IHN0cmluZ1xuICAvKipcbiAgICogSWYgcHJvdmlkZWQsIG9ubHkgcm91dGVzIHRoYXQgcmV0dXJuIHRydWUgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZ2VuZXJhdGVkIHR5cGVzLlxuICAgKi9cbiAgZmlsdGVyUm91dGVzPzogKHJvdXRlOiBzdHJpbmcpID0+IGJvb2xlYW5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIHJvdXRlcyB0aGF0IGhhdmUgYGV4Y2x1ZGVGcm9tT3BlbkFwaWAgc2V0IHRvIHRydWUgd2lsbCBiZSBleGNsdWRlZCBmcm9tIHRoZSBnZW5lcmF0ZWQgdHlwZXMuXG4gICAqIFNldCB0aGlzIHRvIHRydWUgdG8gaW5jbHVkZSB0aGVtLlxuICAgKi9cbiAgaW5jbHVkZU9wZW5BcGlFeGNsdWRlZFJvdXRlcz86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUm91dGVUeXBlcyA9IGFzeW5jIChvcHRzOiBHZW5lcmF0ZVJvdXRlVHlwZXNPcHRzKSA9PiB7XG4gIGNvbnN0IGZpbGVwYXRoVG9Sb3V0ZSA9IGF3YWl0IHBhcnNlUm91dGVzSW5QYWNrYWdlKG9wdHMpXG5cbiAgY29uc3Qgc29ydGVkUm91dGVzID0gQXJyYXkuZnJvbShmaWxlcGF0aFRvUm91dGUuZW50cmllcygpKS5zb3J0KChhLCBiKSA9PlxuICAgIGFbMV0ucm91dGUubG9jYWxlQ29tcGFyZShiWzFdLnJvdXRlKVxuICApXG4gIGNvbnN0IGZpbHRlcmVkUm91dGVzID0gc29ydGVkUm91dGVzLmZpbHRlcihcbiAgICAoW18sIHsgcm91dGUgfV0pID0+ICFvcHRzLmZpbHRlclJvdXRlcyB8fCBvcHRzLmZpbHRlclJvdXRlcyhyb3V0ZSlcbiAgKVxuXG4gIC8vIFRPRE8gd2hlbiBsZXNzIGxhenksIHVzZSB0cy1tb3JwaCBmb3IgYmV0dGVyIGdlbmVyYXRpb25cbiAgY29uc3Qgcm91dGVEZWZzOiBzdHJpbmdbXSA9IFtdXG4gIGZvciAoY29uc3QgW18sIHsgcm91dGUsIHJvdXRlU3BlYywgc2V0dXBQYXJhbXMgfV0gb2YgZmlsdGVyZWRSb3V0ZXMpIHtcbiAgICBjb25zdCBxdWVyeUtleXMgPSBPYmplY3Qua2V5cyhyb3V0ZVNwZWMucXVlcnlQYXJhbXM/LnNoYXBlID8/IHt9KVxuICAgIGNvbnN0IHBhdGhQYXJhbWV0ZXJzID0gcXVlcnlLZXlzLmZpbHRlcigoa2V5KSA9PiByb3V0ZS5pbmNsdWRlcyhgWyR7a2V5fV1gKSlcblxuICAgIC8vIHF1ZXJ5UGFyYW1zIG1pZ2h0IGJlIGEgWm9kRWZmZWN0cyBvciBab2RPcHRpb25hbCBpbiBzb21lIGNhc2VzXG4gICAgbGV0IHF1ZXJ5UGFyYW1zID0gcm91dGVTcGVjLnF1ZXJ5UGFyYW1zXG4gICAgd2hpbGUgKFxuICAgICAgcXVlcnlQYXJhbXMgJiZcbiAgICAgIChcInNvdXJjZVR5cGVcIiBpbiBxdWVyeVBhcmFtcyB8fCBcInVud3JhcFwiIGluIHF1ZXJ5UGFyYW1zKVxuICAgICkge1xuICAgICAgaWYgKFwic291cmNlVHlwZVwiIGluIHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zID0gKHF1ZXJ5UGFyYW1zIGFzIHVua25vd24gYXMgWm9kRWZmZWN0czxhbnk+KS5zb3VyY2VUeXBlKClcbiAgICAgIH0gZWxzZSBpZiAoXCJ1bndyYXBcIiBpbiBxdWVyeVBhcmFtcykge1xuICAgICAgICBxdWVyeVBhcmFtcyA9IChxdWVyeVBhcmFtcyBhcyB1bmtub3duIGFzIFpvZE9wdGlvbmFsPGFueT4pLnVud3JhcCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zICYmIFwib21pdFwiIGluIHF1ZXJ5UGFyYW1zKSB7XG4gICAgICBxdWVyeVBhcmFtcyA9IHF1ZXJ5UGFyYW1zLm9taXQoXG4gICAgICAgIE9iamVjdC5mcm9tRW50cmllcyhwYXRoUGFyYW1ldGVycy5tYXAoKHBhcmFtKSA9PiBbcGFyYW0sIHRydWVdKSlcbiAgICAgIClcbiAgICB9XG5cbiAgICByb3V0ZURlZnMucHVzaChcbiAgICAgIGBcblwiJHtyb3V0ZX1cIjoge1xuICByb3V0ZTogXCIke3JvdXRlfVwiLFxuICBtZXRob2Q6ICR7cm91dGVTcGVjLm1ldGhvZHMubWFwKChtKSA9PiBgXCIke219XCJgKS5qb2luKFwiIHwgXCIpfSxcbiAgcXVlcnlQYXJhbXM6ICR7cXVlcnlQYXJhbXMgPyBwcmludE5vZGUoem9kVG9UcyhxdWVyeVBhcmFtcykubm9kZSkgOiBcInt9XCJ9LFxuICBqc29uQm9keTogJHtcbiAgICByb3V0ZVNwZWMuanNvbkJvZHkgPyBwcmludE5vZGUoem9kVG9Ucyhyb3V0ZVNwZWMuanNvbkJvZHkpLm5vZGUpIDogXCJ7fVwiXG4gIH0sXG4gIGNvbW1vblBhcmFtczogJHtcbiAgICByb3V0ZVNwZWMuY29tbW9uUGFyYW1zXG4gICAgICA/IHByaW50Tm9kZSh6b2RUb1RzKHJvdXRlU3BlYy5jb21tb25QYXJhbXMpLm5vZGUpXG4gICAgICA6IFwie31cIlxuICB9LFxuICBmb3JtRGF0YTogJHtcbiAgICByb3V0ZVNwZWMuZm9ybURhdGEgPyBwcmludE5vZGUoem9kVG9Ucyhyb3V0ZVNwZWMuZm9ybURhdGEpLm5vZGUpIDogXCJ7fVwiXG4gIH0sXG4gIGpzb25SZXNwb25zZTogJHtcbiAgICByb3V0ZVNwZWMuanNvblJlc3BvbnNlXG4gICAgICA/IHByaW50Tm9kZShcbiAgICAgICAgICB6b2RUb1RzKFxuICAgICAgICAgICAgc2V0dXBQYXJhbXMuYWRkT2tTdGF0dXMgJiZcbiAgICAgICAgICAgICAgcm91dGVTcGVjLmpzb25SZXNwb25zZSBpbnN0YW5jZW9mIHouWm9kT2JqZWN0XG4gICAgICAgICAgICAgID8gcm91dGVTcGVjLmpzb25SZXNwb25zZS5leHRlbmQoeyBvazogei5ib29sZWFuKCkgfSlcbiAgICAgICAgICAgICAgOiByb3V0ZVNwZWMuanNvblJlc3BvbnNlXG4gICAgICAgICAgKS5ub2RlXG4gICAgICAgIClcbiAgICAgIDogXCJ7fVwiXG4gIH1cbn1gLnRyaW0oKVxuICAgIClcbiAgfVxuICBjb25zdCByb3V0ZURlZlN0ciA9IHJvdXRlRGVmcy5qb2luKFwiLFxcblwiKVxuICBjb25zdCBvdXRwdXQgPSBhd2FpdCBwcmV0dGllci5mb3JtYXQoXG4gICAgYGV4cG9ydCB0eXBlIFJvdXRlcyA9IHtcbiR7cm91dGVEZWZTdHJ9XG59XG5cbmV4cG9ydCB0eXBlIFJvdXRlUmVzcG9uc2U8UGF0aCBleHRlbmRzIGtleW9mIFJvdXRlcz4gPVxuICBSb3V0ZXNbUGF0aF1bXCJqc29uUmVzcG9uc2VcIl1cblxuZXhwb3J0IHR5cGUgUm91dGVSZXF1ZXN0Qm9keTxQYXRoIGV4dGVuZHMga2V5b2YgUm91dGVzPiA9XG4gIFJvdXRlc1tQYXRoXVtcImpzb25Cb2R5XCJdICYgUm91dGVzW1BhdGhdW1wiY29tbW9uUGFyYW1zXCJdXG5cbmV4cG9ydCB0eXBlIFJvdXRlUmVxdWVzdFBhcmFtczxQYXRoIGV4dGVuZHMga2V5b2YgUm91dGVzPiA9XG4gIFJvdXRlc1tQYXRoXVtcInF1ZXJ5UGFyYW1zXCJdICYgUm91dGVzW1BhdGhdW1wiY29tbW9uUGFyYW1zXCJdXG5gLnRyaW0oKSxcbiAgICB7IHNlbWk6IGZhbHNlLCBwYXJzZXI6IFwidHlwZXNjcmlwdFwiIH1cbiAgKVxuXG4gIGlmIChvcHRzLm91dHB1dEZpbGUpIHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUob3B0cy5vdXRwdXRGaWxlLCBvdXRwdXQpXG4gIH1cblxuICByZXR1cm4gb3V0cHV0XG59XG4iLCAiLyoqXG4gKiBab2QgVG8gVFNcbiAqXG4gKiBWZW5kb3JlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zYWNoaW5yYWphL3pvZC10by10c1xuICpcbiAqIE1JVCBMaWNlbnNlXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDIxIFNhY2hpbiBSYWphXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgdHMgZnJvbSBcInR5cGVzY3JpcHRcIlxuaW1wb3J0IHsgWm9kVHlwZSwgWm9kVHlwZUFueSB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgcGFyc2VGcm9udE1hdHRlciwgdGVzdEZyb250TWF0dGVyIH0gZnJvbSBcIi4vZnJvbnQtbWF0dGVyXCJcbmltcG9ydCBkZWRlbnQgZnJvbSBcImRlZGVudFwiXG5cbmNvbnN0IHsgZmFjdG9yeTogZiwgU3ludGF4S2luZCwgU2NyaXB0S2luZCwgU2NyaXB0VGFyZ2V0LCBFbWl0SGludCB9ID0gdHNcblxuY29uc3QgbWF5YmVJZGVudGlmaWVyVG9UeXBlUmVmZXJlbmNlID0gKFxuICBpZGVudGlmaWVyOiB0cy5JZGVudGlmaWVyIHwgdHMuVHlwZU5vZGVcbikgPT4ge1xuICBpZiAodHMuaXNJZGVudGlmaWVyKGlkZW50aWZpZXIpKSB7XG4gICAgcmV0dXJuIGYuY3JlYXRlVHlwZVJlZmVyZW5jZU5vZGUoaWRlbnRpZmllcilcbiAgfVxuXG4gIHJldHVybiBpZGVudGlmaWVyXG59XG5cbmNvbnN0IGNyZWF0ZVR5cGVSZWZlcmVuY2VGcm9tU3RyaW5nID0gKGlkZW50aWZpZXI6IHN0cmluZykgPT5cbiAgZi5jcmVhdGVUeXBlUmVmZXJlbmNlTm9kZShmLmNyZWF0ZUlkZW50aWZpZXIoaWRlbnRpZmllcikpXG5cbmNvbnN0IGNyZWF0ZVVua25vd25LZXl3b3JkTm9kZSA9ICgpID0+XG4gIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuVW5rbm93bktleXdvcmQpXG5cbmV4cG9ydCBjb25zdCBwcmludE5vZGUgPSAoXG4gIG5vZGU6IHRzLk5vZGUsXG4gIHByaW50ZXJPcHRpb25zPzogdHMuUHJpbnRlck9wdGlvbnNcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHNvdXJjZUZpbGUgPSB0cy5jcmVhdGVTb3VyY2VGaWxlKFxuICAgIFwicHJpbnQudHNcIixcbiAgICBcIlwiLFxuICAgIFNjcmlwdFRhcmdldC5MYXRlc3QsXG4gICAgZmFsc2UsXG4gICAgU2NyaXB0S2luZC5UU1xuICApXG4gIGNvbnN0IHByaW50ZXIgPSB0cy5jcmVhdGVQcmludGVyKHByaW50ZXJPcHRpb25zKVxuICByZXR1cm4gcHJpbnRlci5wcmludE5vZGUoRW1pdEhpbnQuVW5zcGVjaWZpZWQsIG5vZGUsIHNvdXJjZUZpbGUpXG59XG5cbmNvbnN0IGlkZW50aWZpZXJSRSA9IC9eWyRBLVpfYS16XVtcXHckXSokL1xuXG5jb25zdCBnZXRJZGVudGlmaWVyT3JTdHJpbmdMaXRlcmFsID0gKHN0cmluZ186IHN0cmluZykgPT4ge1xuICBpZiAoaWRlbnRpZmllclJFLnRlc3Qoc3RyaW5nXykpIHtcbiAgICByZXR1cm4gZi5jcmVhdGVJZGVudGlmaWVyKHN0cmluZ18pXG4gIH1cblxuICByZXR1cm4gZi5jcmVhdGVTdHJpbmdMaXRlcmFsKHN0cmluZ18pXG59XG5cbmNvbnN0IGFkZEpzRG9jQ29tbWVudCA9IChub2RlOiB0cy5Ob2RlLCB0ZXh0OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgeyBkZXNjcmlwdGlvbiwgZGVwcmVjYXRlZCB9ID0gcGFyc2VEZXNjcmlwdGlvbih0ZXh0KVxuXG4gIGxldCBjb21tZW50ID0gYCogJHtkZXNjcmlwdGlvbn1gXG4gIGlmIChkZXByZWNhdGVkKSB7XG4gICAgY29tbWVudCArPSBgXFxuICogQGRlcHJlY2F0ZWQgJHtcbiAgICAgIHR5cGVvZiBkZXByZWNhdGVkID09PSBcInN0cmluZ1wiID8gZGVwcmVjYXRlZCA6IFwiXCJcbiAgICB9YFxuICB9IGVsc2Uge1xuICAgIGNvbW1lbnQgKz0gYCBgXG4gIH1cblxuICB0cy5hZGRTeW50aGV0aWNMZWFkaW5nQ29tbWVudChcbiAgICBub2RlLFxuICAgIFN5bnRheEtpbmQuTXVsdGlMaW5lQ29tbWVudFRyaXZpYSxcbiAgICBjb21tZW50LFxuICAgIHRydWVcbiAgKVxufVxuXG50eXBlIFBhcnNlZERlc2NyaXB0aW9uID0ge1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gIGRlcHJlY2F0ZWQ/OiBib29sZWFuIHwgc3RyaW5nXG4gIFtrZXk6IHN0cmluZ106IHVua25vd25cbn1cblxuZnVuY3Rpb24gcGFyc2VEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogc3RyaW5nKTogUGFyc2VkRGVzY3JpcHRpb24ge1xuICBpZiAoIWRlc2NyaXB0aW9uKVxuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICB9XG4gIGNvbnN0IHRyaW1tZWREZXNjcmlwdGlvbiA9IGRlZGVudChkZXNjcmlwdGlvbilcbiAgaWYgKCF0ZXN0RnJvbnRNYXR0ZXIodHJpbW1lZERlc2NyaXB0aW9uKSkgcmV0dXJuIHsgZGVzY3JpcHRpb24gfVxuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGJvZHkgfSA9IHBhcnNlRnJvbnRNYXR0ZXIodHJpbW1lZERlc2NyaXB0aW9uKVxuICBjb25zdCBvdXRwdXQ6IFBhcnNlZERlc2NyaXB0aW9uID0ge1xuICAgIGRlc2NyaXB0aW9uOiBib2R5LnRyaW0oKSxcbiAgfVxuICBpZiAodHlwZW9mIGF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIgJiYgYXR0cmlidXRlcyAhPT0gbnVsbCkge1xuICAgIGlmIChcImRlcHJlY2F0ZWRcIiBpbiBhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMuZGVwcmVjYXRlZCkge1xuICAgICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzLmRlcHJlY2F0ZWQgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIG91dHB1dC5kZXByZWNhdGVkID0gdHJ1ZVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXR0cmlidXRlcy5kZXByZWNhdGVkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIG91dHB1dC5kZXByZWNhdGVkID1cbiAgICAgICAgICBhdHRyaWJ1dGVzLmRlcHJlY2F0ZWQubGVuZ3RoID4gMCA/IGF0dHJpYnV0ZXMuZGVwcmVjYXRlZCA6IHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcykpIHtcbiAgICAgIGlmIChrZXkgPT09IFwiZGVzY3JpcHRpb25cIiB8fCBrZXkgPT09IFwiZGVwcmVjYXRlZFwiKSBjb250aW51ZVxuICAgICAgb3V0cHV0W2tleV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0cHV0XG59XG5cbnR5cGUgTGl0ZXJhbFR5cGUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuXG5cbnR5cGUgWm9kVG9Uc09wdGlvbnMgPSB7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgYG5hdGl2ZUVudW1zYCBpbnN0ZWFkICovXG4gIHJlc29sdmVOYXRpdmVFbnVtcz86IGJvb2xlYW5cbiAgbmF0aXZlRW51bXM/OiBcImlkZW50aWZpZXJcIiB8IFwicmVzb2x2ZVwiIHwgXCJ1bmlvblwiXG59XG5cbmNvbnN0IHJlc29sdmVPcHRpb25zID0gKHJhdz86IFpvZFRvVHNPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHJlc29sdmVkID0ge1xuICAgIG5hdGl2ZUVudW1zOiByYXc/LnJlc29sdmVOYXRpdmVFbnVtcyA/IFwicmVzb2x2ZVwiIDogXCJpZGVudGlmaWVyXCIsXG4gIH1cblxuICByZXR1cm4geyAuLi5yZXNvbHZlZCwgLi4ucmF3IH1cbn1cblxudHlwZSBSZXNvbHZlZFpvZFRvVHNPcHRpb25zID0gUmV0dXJuVHlwZTx0eXBlb2YgcmVzb2x2ZU9wdGlvbnM+XG5cbnR5cGUgWm9kVG9Uc1N0b3JlID0ge1xuICBuYXRpdmVFbnVtczogdHMuRW51bURlY2xhcmF0aW9uW11cbn1cblxudHlwZSBab2RUb1RzUmV0dXJuID0ge1xuICBub2RlOiB0cy5UeXBlTm9kZVxuICBzdG9yZTogWm9kVG9Uc1N0b3JlXG59XG5cbnR5cGUgR2V0VHlwZUZ1bmN0aW9uID0gKFxuICB0eXBlc2NyaXB0OiB0eXBlb2YgdHMsXG4gIGlkZW50aWZpZXI6IHN0cmluZyxcbiAgb3B0aW9uczogUmVzb2x2ZWRab2RUb1RzT3B0aW9uc1xuKSA9PiB0cy5JZGVudGlmaWVyIHwgdHMuVHlwZU5vZGVcblxudHlwZSBHZXRUeXBlID0geyBfZGVmOiB7IGdldFR5cGU/OiBHZXRUeXBlRnVuY3Rpb24gfSB9XG5cbmNvbnN0IGNhbGxHZXRUeXBlID0gKFxuICB6b2Q6IFpvZFR5cGVBbnksXG4gIGlkZW50aWZpZXI6IHN0cmluZyxcbiAgb3B0aW9uczogUmVzb2x2ZWRab2RUb1RzT3B0aW9uc1xuKSA9PiB7XG4gIGxldCB0eXBlOiBSZXR1cm5UeXBlPEdldFR5cGVGdW5jdGlvbj4gfCB1bmRlZmluZWRcblxuICBjb25zdCBnZXRUeXBlU2NoZW1hID0gem9kIGFzIEdldFR5cGVcbiAgLy8gdGhpcyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgYWNjZXNzaW5nICd0eXBlJ1xuICBpZiAoZ2V0VHlwZVNjaGVtYS5fZGVmLmdldFR5cGUpXG4gICAgdHlwZSA9IGdldFR5cGVTY2hlbWEuX2RlZi5nZXRUeXBlKHRzLCBpZGVudGlmaWVyLCBvcHRpb25zKVxuICByZXR1cm4gdHlwZVxufVxuXG5leHBvcnQgY29uc3Qgem9kVG9UcyA9IChcbiAgem9kOiBab2RUeXBlQW55LFxuICBpZGVudGlmaWVyPzogc3RyaW5nLFxuICBvcHRpb25zPzogWm9kVG9Uc09wdGlvbnNcbik6IFpvZFRvVHNSZXR1cm4gPT4ge1xuICBpZiAoISh6b2QgaW5zdGFuY2VvZiBab2RUeXBlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBub2RlOiBjcmVhdGVVbmtub3duS2V5d29yZE5vZGUoKSxcbiAgICAgIHN0b3JlOiB7IG5hdGl2ZUVudW1zOiBbXSB9LFxuICAgIH1cbiAgfVxuICBjb25zdCByZXNvbHZlZElkZW50aWZpZXIgPSBpZGVudGlmaWVyID8/IFwiSWRlbnRpZmllclwiXG5cbiAgY29uc3QgcmVzb2x2ZWRPcHRpb25zID0gcmVzb2x2ZU9wdGlvbnMob3B0aW9ucylcblxuICBjb25zdCBzdG9yZTogWm9kVG9Uc1N0b3JlID0geyBuYXRpdmVFbnVtczogW10gfVxuXG4gIGNvbnN0IG5vZGUgPSB6b2RUb1RzTm9kZSh6b2QsIHJlc29sdmVkSWRlbnRpZmllciwgc3RvcmUsIHJlc29sdmVkT3B0aW9ucylcblxuICByZXR1cm4geyBub2RlLCBzdG9yZSB9XG59XG5cbmNvbnN0IHpvZFRvVHNOb2RlID0gKFxuICB6b2Q6IFpvZFR5cGVBbnksXG4gIGlkZW50aWZpZXI6IHN0cmluZyxcbiAgc3RvcmU6IFpvZFRvVHNTdG9yZSxcbiAgb3B0aW9uczogUmVzb2x2ZWRab2RUb1RzT3B0aW9uc1xuKSA9PiB7XG4gIGNvbnN0IHR5cGVOYW1lID0gem9kLl9kZWYudHlwZU5hbWVcblxuICBjb25zdCBnZXRUeXBlVHlwZSA9IGNhbGxHZXRUeXBlKHpvZCwgaWRlbnRpZmllciwgb3B0aW9ucylcbiAgLy8gc3BlY2lhbCBjYXNlIG5hdGl2ZSBlbnVtLCB3aGljaCBuZWVkcyBhbiBpZGVudGlmaWVyIG5vZGVcbiAgaWYgKGdldFR5cGVUeXBlICYmIHR5cGVOYW1lICE9PSBcIlpvZE5hdGl2ZUVudW1cIikge1xuICAgIHJldHVybiBtYXliZUlkZW50aWZpZXJUb1R5cGVSZWZlcmVuY2UoZ2V0VHlwZVR5cGUpXG4gIH1cblxuICBjb25zdCBvdGhlckFyZ3VtZW50cyA9IFtpZGVudGlmaWVyLCBzdG9yZSwgb3B0aW9uc10gYXMgY29uc3RcblxuICBzd2l0Y2ggKHR5cGVOYW1lKSB7XG4gICAgY2FzZSBcIlpvZFN0cmluZ1wiOiB7XG4gICAgICByZXR1cm4gZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5TdHJpbmdLZXl3b3JkKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kTnVtYmVyXCI6IHtcbiAgICAgIHJldHVybiBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLk51bWJlcktleXdvcmQpXG4gICAgfVxuICAgIGNhc2UgXCJab2RCaWdJbnRcIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuQmlnSW50S2V5d29yZClcbiAgICB9XG4gICAgY2FzZSBcIlpvZEJvb2xlYW5cIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuQm9vbGVhbktleXdvcmQpXG4gICAgfVxuICAgIGNhc2UgXCJab2REYXRlXCI6IHtcbiAgICAgIHJldHVybiBmLmNyZWF0ZVR5cGVSZWZlcmVuY2VOb2RlKGYuY3JlYXRlSWRlbnRpZmllcihcIkRhdGVcIikpXG4gICAgfVxuICAgIGNhc2UgXCJab2RVbmRlZmluZWRcIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuVW5kZWZpbmVkS2V5d29yZClcbiAgICB9XG4gICAgY2FzZSBcIlpvZE51bGxcIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlTGl0ZXJhbFR5cGVOb2RlKGYuY3JlYXRlTnVsbCgpKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kVm9pZFwiOiB7XG4gICAgICByZXR1cm4gZi5jcmVhdGVVbmlvblR5cGVOb2RlKFtcbiAgICAgICAgZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5Wb2lkS2V5d29yZCksXG4gICAgICAgIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuVW5kZWZpbmVkS2V5d29yZCksXG4gICAgICBdKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kQW55XCI6IHtcbiAgICAgIHJldHVybiBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLkFueUtleXdvcmQpXG4gICAgfVxuICAgIGNhc2UgXCJab2RVbmtub3duXCI6IHtcbiAgICAgIHJldHVybiBjcmVhdGVVbmtub3duS2V5d29yZE5vZGUoKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kTmV2ZXJcIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuTmV2ZXJLZXl3b3JkKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kTGF6eVwiOiB7XG4gICAgICAvLyBpdCBpcyBpbXBvc3NpYmxlIHRvIGRldGVybWluZSB3aGF0IHRoZSBsYXp5IHZhbHVlIGlzIHJlZmVycmluZyB0b1xuICAgICAgLy8gc28gd2UgZm9yY2UgdGhlIHVzZXIgdG8gZGVjbGFyZSBpdFxuICAgICAgaWYgKCFnZXRUeXBlVHlwZSkgcmV0dXJuIGNyZWF0ZVR5cGVSZWZlcmVuY2VGcm9tU3RyaW5nKGlkZW50aWZpZXIpXG4gICAgICBicmVha1xuICAgIH1cbiAgICBjYXNlIFwiWm9kTGl0ZXJhbFwiOiB7XG4gICAgICAvLyB6LmxpdGVyYWwoJ2hpJykgLT4gJ2hpJ1xuICAgICAgbGV0IGxpdGVyYWw6IHRzLkxpdGVyYWxFeHByZXNzaW9uIHwgdHMuQm9vbGVhbkxpdGVyYWxcblxuICAgICAgY29uc3QgbGl0ZXJhbFZhbHVlID0gem9kLl9kZWYudmFsdWUgYXMgTGl0ZXJhbFR5cGVcbiAgICAgIHN3aXRjaCAodHlwZW9mIGxpdGVyYWxWYWx1ZSkge1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6IHtcbiAgICAgICAgICBsaXRlcmFsID0gZi5jcmVhdGVOdW1lcmljTGl0ZXJhbChsaXRlcmFsVmFsdWUpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOiB7XG4gICAgICAgICAgbGl0ZXJhbCA9IGxpdGVyYWxWYWx1ZSA9PT0gdHJ1ZSA/IGYuY3JlYXRlVHJ1ZSgpIDogZi5jcmVhdGVGYWxzZSgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgbGl0ZXJhbCA9IGYuY3JlYXRlU3RyaW5nTGl0ZXJhbChsaXRlcmFsVmFsdWUpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZi5jcmVhdGVMaXRlcmFsVHlwZU5vZGUobGl0ZXJhbClcbiAgICB9XG4gICAgY2FzZSBcIlpvZE9iamVjdFwiOiB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmVudHJpZXMoem9kLl9kZWYuc2hhcGUoKSlcblxuICAgICAgY29uc3QgbWVtYmVyczogdHMuVHlwZUVsZW1lbnRbXSA9IHByb3BlcnRpZXMubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgY29uc3QgbmV4dFpvZE5vZGUgPSB2YWx1ZSBhcyBab2RUeXBlQW55XG4gICAgICAgIGNvbnN0IHR5cGUgPSB6b2RUb1RzTm9kZShuZXh0Wm9kTm9kZSwgLi4ub3RoZXJBcmd1bWVudHMpXG5cbiAgICAgICAgY29uc3QgeyB0eXBlTmFtZTogbmV4dFpvZE5vZGVUeXBlTmFtZSB9ID0gbmV4dFpvZE5vZGUuX2RlZlxuICAgICAgICBjb25zdCBpc09wdGlvbmFsID1cbiAgICAgICAgICBuZXh0Wm9kTm9kZVR5cGVOYW1lID09PSBcIlpvZE9wdGlvbmFsXCIgfHwgbmV4dFpvZE5vZGUuaXNPcHRpb25hbCgpXG5cbiAgICAgICAgY29uc3QgcHJvcGVydHlTaWduYXR1cmUgPSBmLmNyZWF0ZVByb3BlcnR5U2lnbmF0dXJlKFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBnZXRJZGVudGlmaWVyT3JTdHJpbmdMaXRlcmFsKGtleSksXG4gICAgICAgICAgaXNPcHRpb25hbCA/IGYuY3JlYXRlVG9rZW4oU3ludGF4S2luZC5RdWVzdGlvblRva2VuKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0eXBlXG4gICAgICAgIClcblxuICAgICAgICBpZiAobmV4dFpvZE5vZGUuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICBhZGRKc0RvY0NvbW1lbnQocHJvcGVydHlTaWduYXR1cmUsIG5leHRab2ROb2RlLmRlc2NyaXB0aW9uKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByb3BlcnR5U2lnbmF0dXJlXG4gICAgICB9KVxuICAgICAgcmV0dXJuIGYuY3JlYXRlVHlwZUxpdGVyYWxOb2RlKG1lbWJlcnMpXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZEFycmF5XCI6IHtcbiAgICAgIGNvbnN0IHR5cGUgPSB6b2RUb1RzTm9kZSh6b2QuX2RlZi50eXBlLCAuLi5vdGhlckFyZ3VtZW50cylcbiAgICAgIGNvbnN0IG5vZGUgPSBmLmNyZWF0ZUFycmF5VHlwZU5vZGUodHlwZSlcbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZEVudW1cIjoge1xuICAgICAgLy8gei5lbnVtWydhJywgJ2InLCAnYyddIC0+ICdhJyB8ICdiJyB8ICdjXG4gICAgICBjb25zdCB0eXBlcyA9IHpvZC5fZGVmLnZhbHVlcy5tYXAoKHZhbHVlOiBzdHJpbmcpID0+XG4gICAgICAgIGYuY3JlYXRlTGl0ZXJhbFR5cGVOb2RlKGYuY3JlYXRlU3RyaW5nTGl0ZXJhbCh2YWx1ZSkpXG4gICAgICApXG4gICAgICByZXR1cm4gZi5jcmVhdGVVbmlvblR5cGVOb2RlKHR5cGVzKVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RVbmlvblwiOiB7XG4gICAgICAvLyB6LnVuaW9uKFt6LnN0cmluZygpLCB6Lm51bWJlcigpXSkgLT4gc3RyaW5nIHwgbnVtYmVyXG4gICAgICBjb25zdCBvcHRpb25zOiBab2RUeXBlQW55W10gPSB6b2QuX2RlZi5vcHRpb25zXG4gICAgICBjb25zdCB0eXBlczogdHMuVHlwZU5vZGVbXSA9IG9wdGlvbnMubWFwKChvcHRpb24pID0+XG4gICAgICAgIHpvZFRvVHNOb2RlKG9wdGlvbiwgLi4ub3RoZXJBcmd1bWVudHMpXG4gICAgICApXG4gICAgICByZXR1cm4gZi5jcmVhdGVVbmlvblR5cGVOb2RlKHR5cGVzKVxuICAgIH1cblxuICAgIGNhc2UgXCJab2REaXNjcmltaW5hdGVkVW5pb25cIjoge1xuICAgICAgLy8gei5kaXNjcmltaW5hdGVkVW5pb24oJ2tpbmQnLCBbei5vYmplY3QoeyBraW5kOiB6LmxpdGVyYWwoJ2EnKSwgYTogei5zdHJpbmcoKSB9KSwgei5vYmplY3QoeyBraW5kOiB6LmxpdGVyYWwoJ2InKSwgYjogei5udW1iZXIoKSB9KV0pIC0+IHsga2luZDogJ2EnLCBhOiBzdHJpbmcgfSB8IHsga2luZDogJ2InLCBiOiBudW1iZXIgfVxuICAgICAgY29uc3Qgb3B0aW9uczogWm9kVHlwZUFueVtdID0gWy4uLnpvZC5fZGVmLm9wdGlvbnMudmFsdWVzKCldXG4gICAgICBjb25zdCB0eXBlczogdHMuVHlwZU5vZGVbXSA9IG9wdGlvbnMubWFwKChvcHRpb24pID0+XG4gICAgICAgIHpvZFRvVHNOb2RlKG9wdGlvbiwgLi4ub3RoZXJBcmd1bWVudHMpXG4gICAgICApXG4gICAgICByZXR1cm4gZi5jcmVhdGVVbmlvblR5cGVOb2RlKHR5cGVzKVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RFZmZlY3RzXCI6IHtcbiAgICAgIC8vIGlnbm9yZSBhbnkgZWZmZWN0cywgdGhleSB3b24ndCBmYWN0b3IgaW50byB0aGUgdHlwZXNcbiAgICAgIGNvbnN0IG5vZGUgPSB6b2RUb1RzTm9kZShcbiAgICAgICAgem9kLl9kZWYuc2NoZW1hLFxuICAgICAgICAuLi5vdGhlckFyZ3VtZW50c1xuICAgICAgKSBhcyB0cy5UeXBlTm9kZVxuICAgICAgcmV0dXJuIG5vZGVcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kTmF0aXZlRW51bVwiOiB7XG4gICAgICBjb25zdCB0eXBlID0gZ2V0VHlwZVR5cGVcblxuICAgICAgaWYgKG9wdGlvbnMubmF0aXZlRW51bXMgPT09IFwidW5pb25cIikge1xuICAgICAgICAvLyBhbGxvdyBvdmVycmlkaW5nIHdpdGggdGhpcyBvcHRpb25cbiAgICAgICAgaWYgKHR5cGUpIHJldHVybiBtYXliZUlkZW50aWZpZXJUb1R5cGVSZWZlcmVuY2UodHlwZSlcblxuICAgICAgICBjb25zdCB0eXBlcyA9IE9iamVjdC52YWx1ZXMoem9kLl9kZWYudmFsdWVzKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuIGYuY3JlYXRlTGl0ZXJhbFR5cGVOb2RlKGYuY3JlYXRlTnVtZXJpY0xpdGVyYWwodmFsdWUpKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZi5jcmVhdGVMaXRlcmFsVHlwZU5vZGUoZi5jcmVhdGVTdHJpbmdMaXRlcmFsKHZhbHVlIGFzIHN0cmluZykpXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiBmLmNyZWF0ZVVuaW9uVHlwZU5vZGUodHlwZXMpXG4gICAgICB9XG5cbiAgICAgIC8vIHoubmF0aXZlRW51bShGcnVpdHMpIC0+IEZydWl0c1xuICAgICAgLy8gY2FuIHJlc29sdmUgRnJ1aXRzIGludG8gc3RvcmUgYW5kIHVzZXIgY2FuIGhhbmRsZSBlbnVtc1xuICAgICAgaWYgKCF0eXBlKSByZXR1cm4gY3JlYXRlVW5rbm93bktleXdvcmROb2RlKClcblxuICAgICAgaWYgKG9wdGlvbnMubmF0aXZlRW51bXMgPT09IFwicmVzb2x2ZVwiKSB7XG4gICAgICAgIGNvbnN0IGVudW1NZW1iZXJzID0gT2JqZWN0LmVudHJpZXMoXG4gICAgICAgICAgem9kLl9kZWYudmFsdWVzIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj5cbiAgICAgICAgKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxpdGVyYWwgPVxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiXG4gICAgICAgICAgICAgID8gZi5jcmVhdGVOdW1lcmljTGl0ZXJhbCh2YWx1ZSlcbiAgICAgICAgICAgICAgOiBmLmNyZWF0ZVN0cmluZ0xpdGVyYWwodmFsdWUpXG5cbiAgICAgICAgICByZXR1cm4gZi5jcmVhdGVFbnVtTWVtYmVyKGdldElkZW50aWZpZXJPclN0cmluZ0xpdGVyYWwoa2V5KSwgbGl0ZXJhbClcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAodHMuaXNJZGVudGlmaWVyKHR5cGUpKSB7XG4gICAgICAgICAgc3RvcmUubmF0aXZlRW51bXMucHVzaChcbiAgICAgICAgICAgIGYuY3JlYXRlRW51bURlY2xhcmF0aW9uKHVuZGVmaW5lZCwgdHlwZSwgZW51bU1lbWJlcnMpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdnZXRUeXBlIG9uIG5hdGl2ZUVudW0gbXVzdCByZXR1cm4gYW4gaWRlbnRpZmllciB3aGVuIG5hdGl2ZUVudW1zIGlzIFwicmVzb2x2ZVwiJ1xuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWF5YmVJZGVudGlmaWVyVG9UeXBlUmVmZXJlbmNlKHR5cGUpXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZE9wdGlvbmFsXCI6IHtcbiAgICAgIGNvbnN0IGlubmVyVHlwZSA9IHpvZFRvVHNOb2RlKFxuICAgICAgICB6b2QuX2RlZi5pbm5lclR5cGUsXG4gICAgICAgIC4uLm90aGVyQXJndW1lbnRzXG4gICAgICApIGFzIHRzLlR5cGVOb2RlXG4gICAgICByZXR1cm4gZi5jcmVhdGVVbmlvblR5cGVOb2RlKFtcbiAgICAgICAgaW5uZXJUeXBlLFxuICAgICAgICBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLlVuZGVmaW5lZEtleXdvcmQpLFxuICAgICAgXSlcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kTnVsbGFibGVcIjoge1xuICAgICAgY29uc3QgaW5uZXJUeXBlID0gem9kVG9Uc05vZGUoXG4gICAgICAgIHpvZC5fZGVmLmlubmVyVHlwZSxcbiAgICAgICAgLi4ub3RoZXJBcmd1bWVudHNcbiAgICAgICkgYXMgdHMuVHlwZU5vZGVcbiAgICAgIHJldHVybiBmLmNyZWF0ZVVuaW9uVHlwZU5vZGUoW1xuICAgICAgICBpbm5lclR5cGUsXG4gICAgICAgIGYuY3JlYXRlTGl0ZXJhbFR5cGVOb2RlKGYuY3JlYXRlTnVsbCgpKSxcbiAgICAgIF0pXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZFR1cGxlXCI6IHtcbiAgICAgIC8vIHoudHVwbGUoW3ouc3RyaW5nKCksIHoubnVtYmVyKCldKSAtPiBbc3RyaW5nLCBudW1iZXJdXG4gICAgICBjb25zdCB0eXBlcyA9IHpvZC5fZGVmLml0ZW1zLm1hcCgob3B0aW9uOiBab2RUeXBlQW55KSA9PlxuICAgICAgICB6b2RUb1RzTm9kZShvcHRpb24sIC4uLm90aGVyQXJndW1lbnRzKVxuICAgICAgKVxuICAgICAgcmV0dXJuIGYuY3JlYXRlVHVwbGVUeXBlTm9kZSh0eXBlcylcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kUmVjb3JkXCI6IHtcbiAgICAgIC8vIHoucmVjb3JkKHoubnVtYmVyKCkpIC0+IHsgW3g6IHN0cmluZ106IG51bWJlciB9XG4gICAgICBjb25zdCB2YWx1ZVR5cGUgPSB6b2RUb1RzTm9kZSh6b2QuX2RlZi52YWx1ZVR5cGUsIC4uLm90aGVyQXJndW1lbnRzKVxuXG4gICAgICBjb25zdCBub2RlID0gZi5jcmVhdGVUeXBlTGl0ZXJhbE5vZGUoW1xuICAgICAgICBmLmNyZWF0ZUluZGV4U2lnbmF0dXJlKFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBmLmNyZWF0ZVBhcmFtZXRlckRlY2xhcmF0aW9uKFxuICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgZi5jcmVhdGVJZGVudGlmaWVyKFwieFwiKSxcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLlN0cmluZ0tleXdvcmQpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgdmFsdWVUeXBlXG4gICAgICAgICksXG4gICAgICBdKVxuXG4gICAgICByZXR1cm4gbm9kZVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RNYXBcIjoge1xuICAgICAgLy8gei5tYXAoei5zdHJpbmcoKSkgLT4gTWFwPHN0cmluZz5cbiAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHpvZFRvVHNOb2RlKHpvZC5fZGVmLnZhbHVlVHlwZSwgLi4ub3RoZXJBcmd1bWVudHMpXG4gICAgICBjb25zdCBrZXlUeXBlID0gem9kVG9Uc05vZGUoem9kLl9kZWYua2V5VHlwZSwgLi4ub3RoZXJBcmd1bWVudHMpXG5cbiAgICAgIGNvbnN0IG5vZGUgPSBmLmNyZWF0ZVR5cGVSZWZlcmVuY2VOb2RlKGYuY3JlYXRlSWRlbnRpZmllcihcIk1hcFwiKSwgW1xuICAgICAgICBrZXlUeXBlLFxuICAgICAgICB2YWx1ZVR5cGUsXG4gICAgICBdKVxuXG4gICAgICByZXR1cm4gbm9kZVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RTZXRcIjoge1xuICAgICAgLy8gei5zZXQoei5zdHJpbmcoKSkgLT4gU2V0PHN0cmluZz5cbiAgICAgIGNvbnN0IHR5cGUgPSB6b2RUb1RzTm9kZSh6b2QuX2RlZi52YWx1ZVR5cGUsIC4uLm90aGVyQXJndW1lbnRzKVxuXG4gICAgICBjb25zdCBub2RlID0gZi5jcmVhdGVUeXBlUmVmZXJlbmNlTm9kZShmLmNyZWF0ZUlkZW50aWZpZXIoXCJTZXRcIiksIFt0eXBlXSlcbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZEludGVyc2VjdGlvblwiOiB7XG4gICAgICAvLyB6Lm51bWJlcigpLmFuZCh6LnN0cmluZygpKSAtPiBudW1iZXIgJiBzdHJpbmdcbiAgICAgIGNvbnN0IGxlZnQgPSB6b2RUb1RzTm9kZSh6b2QuX2RlZi5sZWZ0LCAuLi5vdGhlckFyZ3VtZW50cylcbiAgICAgIGNvbnN0IHJpZ2h0ID0gem9kVG9Uc05vZGUoem9kLl9kZWYucmlnaHQsIC4uLm90aGVyQXJndW1lbnRzKVxuICAgICAgY29uc3Qgbm9kZSA9IGYuY3JlYXRlSW50ZXJzZWN0aW9uVHlwZU5vZGUoW2xlZnQsIHJpZ2h0XSlcbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZFByb21pc2VcIjoge1xuICAgICAgLy8gei5wcm9taXNlKHouc3RyaW5nKCkpIC0+IFByb21pc2U8c3RyaW5nPlxuICAgICAgY29uc3QgdHlwZSA9IHpvZFRvVHNOb2RlKHpvZC5fZGVmLnR5cGUsIC4uLm90aGVyQXJndW1lbnRzKVxuXG4gICAgICBjb25zdCBub2RlID0gZi5jcmVhdGVUeXBlUmVmZXJlbmNlTm9kZShmLmNyZWF0ZUlkZW50aWZpZXIoXCJQcm9taXNlXCIpLCBbXG4gICAgICAgIHR5cGUsXG4gICAgICBdKVxuXG4gICAgICByZXR1cm4gbm9kZVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RGdW5jdGlvblwiOiB7XG4gICAgICAvLyB6LmZ1bmN0aW9uKCkuYXJncyh6LnN0cmluZygpKS5yZXR1cm5zKHoubnVtYmVyKCkpIC0+IChhcmdzXzA6IHN0cmluZykgPT4gbnVtYmVyXG4gICAgICBjb25zdCBhcmd1bWVudFR5cGVzID0gem9kLl9kZWYuYXJncy5fZGVmLml0ZW1zLm1hcChcbiAgICAgICAgKGFyZ3VtZW50OiBab2RUeXBlQW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgYXJndW1lbnRUeXBlID0gem9kVG9Uc05vZGUoYXJndW1lbnQsIC4uLm90aGVyQXJndW1lbnRzKVxuXG4gICAgICAgICAgcmV0dXJuIGYuY3JlYXRlUGFyYW1ldGVyRGVjbGFyYXRpb24oXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBmLmNyZWF0ZUlkZW50aWZpZXIoYGFyZ3NfJHtpbmRleH1gKSxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFyZ3VtZW50VHlwZVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgKSBhcyB0cy5QYXJhbWV0ZXJEZWNsYXJhdGlvbltdXG5cbiAgICAgIGFyZ3VtZW50VHlwZXMucHVzaChcbiAgICAgICAgZi5jcmVhdGVQYXJhbWV0ZXJEZWNsYXJhdGlvbihcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgZi5jcmVhdGVUb2tlbihTeW50YXhLaW5kLkRvdERvdERvdFRva2VuKSxcbiAgICAgICAgICBmLmNyZWF0ZUlkZW50aWZpZXIoYGFyZ3NfJHthcmd1bWVudFR5cGVzLmxlbmd0aH1gKSxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgZi5jcmVhdGVBcnJheVR5cGVOb2RlKGNyZWF0ZVVua25vd25LZXl3b3JkTm9kZSgpKVxuICAgICAgICApXG4gICAgICApXG5cbiAgICAgIGNvbnN0IHJldHVyblR5cGUgPSB6b2RUb1RzTm9kZSh6b2QuX2RlZi5yZXR1cm5zLCAuLi5vdGhlckFyZ3VtZW50cylcblxuICAgICAgY29uc3Qgbm9kZSA9IGYuY3JlYXRlRnVuY3Rpb25UeXBlTm9kZShcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBhcmd1bWVudFR5cGVzLFxuICAgICAgICByZXR1cm5UeXBlXG4gICAgICApXG5cbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZERlZmF1bHRcIjoge1xuICAgICAgLy8gei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlZmF1bHQoJ2hpJykgLT4gc3RyaW5nXG4gICAgICBjb25zdCB0eXBlID0gem9kVG9Uc05vZGUoXG4gICAgICAgIHpvZC5fZGVmLmlubmVyVHlwZSxcbiAgICAgICAgLi4ub3RoZXJBcmd1bWVudHNcbiAgICAgICkgYXMgdHMuVHlwZU5vZGVcblxuICAgICAgY29uc3QgZmlsdGVyZWROb2RlczogdHMuTm9kZVtdID0gW11cblxuICAgICAgdHlwZS5mb3JFYWNoQ2hpbGQoKG5vZGUpID0+IHtcbiAgICAgICAgaWYgKCFbU3ludGF4S2luZC5VbmRlZmluZWRLZXl3b3JkXS5pbmNsdWRlcyhub2RlLmtpbmQpKSB7XG4gICAgICAgICAgZmlsdGVyZWROb2Rlcy5wdXNoKG5vZGUpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbmVlZGVkIHRvIHNldCBjaGlsZHJlblxuICAgICAgdHlwZS50eXBlcyA9IGZpbHRlcmVkTm9kZXNcblxuICAgICAgcmV0dXJuIHR5cGVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5BbnlLZXl3b3JkKVxufVxuIiwgImltcG9ydCAqIGFzIGZzIGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCJcbmltcG9ydCBjcnlwdG8gZnJvbSBcIm5vZGU6Y3J5cHRvXCJcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgUHJvamVjdCwgU3ludGF4S2luZCB9IGZyb20gXCJ0cy1tb3JwaFwiXG5pbXBvcnQgKiBhcyBlc2J1aWxkIGZyb20gXCJlc2J1aWxkXCJcbmltcG9ydCB7IGRlZmF1bHRNYXBGaWxlUGF0aFRvSFRUUFJvdXRlIH0gZnJvbSBcIi4vbGliL2RlZmF1bHQtbWFwLWZpbGUtcGF0aC10by1odHRwLXJvdXRlXCJcblxuaW50ZXJmYWNlIEdlbmVyYXRlUm91dGVUeXBlc09wdHMge1xuICBwYWNrYWdlRGlyOiBzdHJpbmdcbiAgYWxsb3dlZEltcG9ydFBhdHRlcm5zPzogc3RyaW5nW11cbiAgb3V0cHV0RmlsZT86IHN0cmluZ1xuICBwYXRoR2xvYj86IHN0cmluZ1xuICBhcGlQcmVmaXg/OiBzdHJpbmdcbiAgbWFwRmlsZVBhdGhUb0hUVFBSb3V0ZT86IChmaWxlX3BhdGg6IHN0cmluZykgPT4gc3RyaW5nXG4gIC8qKlxuICAgKiBJZiBwcm92aWRlZCwgb25seSByb3V0ZXMgdGhhdCByZXR1cm4gdHJ1ZSB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWQgdHlwZXMuXG4gICAqL1xuICBmaWx0ZXJSb3V0ZXM/OiAocm91dGU6IHN0cmluZykgPT4gYm9vbGVhblxuICAvKipcbiAgICogQnkgZGVmYXVsdCwgcm91dGVzIHRoYXQgaGF2ZSBgZXhjbHVkZUZyb21PcGVuQXBpYCBzZXQgdG8gdHJ1ZSB3aWxsIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGdlbmVyYXRlZCB0eXBlcy5cbiAgICogU2V0IHRoaXMgdG8gdHJ1ZSB0byBpbmNsdWRlIHRoZW0uXG4gICAqL1xuICBpbmNsdWRlT3BlbkFwaUV4Y2x1ZGVkUm91dGVzPzogYm9vbGVhblxuICBlc2J1aWxkT3B0aW9ucz86IGVzYnVpbGQuQnVpbGRPcHRpb25zXG59XG5cbmV4cG9ydCBjb25zdCBleHRyYWN0Um91dGVTcGVjcyA9IGFzeW5jIChvcHRzOiBHZW5lcmF0ZVJvdXRlVHlwZXNPcHRzKSA9PiB7XG4gIGNvbnN0IHsgcGFja2FnZURpciwgcGF0aEdsb2IgPSBcIi9wYWdlcy9hcGkvKiovKi50c1wiIH0gPSBvcHRzXG4gIGNvbnN0IGZ1bGxQYXRoR2xvYiA9IHBhdGgucG9zaXguam9pbihwYWNrYWdlRGlyLCBwYXRoR2xvYilcblxuICBjb25zdCBwcm9qZWN0ID0gbmV3IFByb2plY3QoeyBjb21waWxlck9wdGlvbnM6IHsgZGVjbGFyYXRpb246IHRydWUgfSB9KVxuXG4gIGNvbnN0IHBhdGhzOiBzdHJpbmdbXSA9IFtdXG4gIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBwcm9qZWN0LmFkZFNvdXJjZUZpbGVzQXRQYXRocyhmdWxsUGF0aEdsb2IpKSB7XG4gICAgY29uc3QgZGVmYXVsdEV4cG9ydCA9IHNvdXJjZUZpbGUuZ2V0RXhwb3J0QXNzaWdubWVudChcbiAgICAgIChkKSA9PiAhZC5pc0V4cG9ydEVxdWFscygpXG4gICAgKVxuICAgIGlmICghZGVmYXVsdEV4cG9ydCkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyaWVkV2l0aFJvdXRlU3BlY0NhbGwgPSBkZWZhdWx0RXhwb3J0XG4gICAgICAuZ2V0RXhwcmVzc2lvbigpXG4gICAgICAuYXNLaW5kKFN5bnRheEtpbmQuQ2FsbEV4cHJlc3Npb24pXG4gICAgaWYgKCFjdXJyaWVkV2l0aFJvdXRlU3BlY0NhbGwpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IHdpdGhSb3V0ZVNwZWNDYWxsID0gY3VycmllZFdpdGhSb3V0ZVNwZWNDYWxsXG4gICAgICAuZ2V0RXhwcmVzc2lvbigpXG4gICAgICAuYXNLaW5kKFN5bnRheEtpbmQuQ2FsbEV4cHJlc3Npb24pXG4gICAgaWYgKCF3aXRoUm91dGVTcGVjQ2FsbCkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCBbcm91dGVTcGVjXSA9IHdpdGhSb3V0ZVNwZWNDYWxsLmdldEFyZ3VtZW50cygpXG4gICAgaWYgKCFyb3V0ZVNwZWMpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgc291cmNlRmlsZS5hZGRTdGF0ZW1lbnRzKFxuICAgICAgYGV4cG9ydCBjb25zdCBleHRyYWN0ZWRSb3V0ZVNwZWMgPSAke3JvdXRlU3BlYy5nZXRUZXh0KCl9YFxuICAgIClcblxuICAgIGRlZmF1bHRFeHBvcnQucmVtb3ZlKClcblxuICAgIC8vIFJlbW92ZSBhbGwgdW51c2VkIGltcG9ydHMgc28gZmlsZSBjYW4gYmUgdHJlZSBzaGFrZW5cbiAgICAvLyAoQXNzdW1lcyBhbGwgaW1wb3J0cyBhcmUgZnJlZSBvZiBzaWRlLWVmZmVjdHMpXG4gICAgbGV0IGxhc3RXaWR0aDogbnVtYmVyXG4gICAgZG8ge1xuICAgICAgbGFzdFdpZHRoID0gc291cmNlRmlsZS5nZXRGdWxsV2lkdGgoKVxuICAgICAgLy8gTWF5IG5lZWQgdG8gY2FsbCB0aGlzIG11bHRpcGxlIHRpbWVzXG4gICAgICBzb3VyY2VGaWxlLmZpeFVudXNlZElkZW50aWZpZXJzKClcbiAgICB9IHdoaWxlIChsYXN0V2lkdGggIT09IHNvdXJjZUZpbGUuZ2V0RnVsbFdpZHRoKCkpXG5cbiAgICBjb25zdCBhYnNvbHV0ZVBhY2thZ2VEaXIgPSBwYXRoLnJlc29sdmUocGFja2FnZURpcilcbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKFxuICAgICAgYWJzb2x1dGVQYWNrYWdlRGlyLFxuICAgICAgc291cmNlRmlsZS5nZXRGaWxlUGF0aCgpXG4gICAgKVxuICAgIHBhdGhzLnB1c2gocmVsYXRpdmVQYXRoKVxuICB9XG5cbiAgY29uc3QgcGF0aFRvSWQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fVxuICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICAvLyBhZGQgcHJlZml4IHRvIGF2b2lkIHN0YXJ0aW5nIHdpdGggYSBudW1iZXJcbiAgICBwYXRoVG9JZFtwYXRoXSA9XG4gICAgICBcImhhc2hcIiArIGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShwYXRoKS5kaWdlc3QoXCJoZXhcIilcbiAgfVxuXG4gIGNvbnN0IGVudHJ5UG9pbnRDb250ZW50ID0gYFxuICAke3BhdGhzXG4gICAgLm1hcCgocCkgPT4gYGltcG9ydCB7ZXh0cmFjdGVkUm91dGVTcGVjIGFzICR7cGF0aFRvSWRbcF19fSBmcm9tIFwiLi8ke3B9XCJgKVxuICAgIC5qb2luKFwiXFxuXCIpfVxuXG4gIGV4cG9ydCBjb25zdCByb3V0ZXMgPSB7XG4gICAgJHtwYXRoc1xuICAgICAgLm1hcCgocCkgPT4ge1xuICAgICAgICBjb25zdCBodHRwUm91dGUgPSAoXG4gICAgICAgICAgb3B0cy5tYXBGaWxlUGF0aFRvSFRUUFJvdXRlID8/XG4gICAgICAgICAgZGVmYXVsdE1hcEZpbGVQYXRoVG9IVFRQUm91dGUob3B0cy5hcGlQcmVmaXgpXG4gICAgICAgICkocClcblxuICAgICAgICByZXR1cm4gYFwiJHtodHRwUm91dGV9XCI6ICR7cGF0aFRvSWRbcF19YFxuICAgICAgfSlcbiAgICAgIC5qb2luKFwiLFxcblwiKX1cbiAgfVxuICBgXG5cbiAgLy8gQ29weSBhbGxvd2VkIGltcG9ydCBnbG9icyBpbnRvIHByb2plY3RcbiAgaWYgKG9wdHMuYWxsb3dlZEltcG9ydFBhdHRlcm5zKSB7XG4gICAgcHJvamVjdC5hZGRTb3VyY2VGaWxlc0F0UGF0aHMob3B0cy5hbGxvd2VkSW1wb3J0UGF0dGVybnMpXG4gIH1cblxuICAvLyBHZW5lcmF0ZSB0eXBlcyAoLmQudHMpXG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBwcm9qZWN0LmNyZWF0ZVNvdXJjZUZpbGUoXG4gICAgXCJleHRyYWN0ZWQtcm91dGUtc3BlY3MudHNcIixcbiAgICBlbnRyeVBvaW50Q29udGVudFxuICApXG4gIGNvbnN0IGVtaXRSZXN1bHQgPSBlbnRyeVBvaW50LmdldEVtaXRPdXRwdXQoeyBlbWl0T25seUR0c0ZpbGVzOiB0cnVlIH0pXG4gIGlmIChvcHRzLm91dHB1dEZpbGUpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbkZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgcGF0aC5kaXJuYW1lKG9wdHMub3V0cHV0RmlsZSksXG4gICAgICBwYXRoLmJhc2VuYW1lKG9wdHMub3V0cHV0RmlsZSkucmVwbGFjZShcIi5tanNcIiwgXCJcIikucmVwbGFjZShcIi5qc1wiLCBcIlwiKSArXG4gICAgICAgIFwiLmQudHNcIlxuICAgIClcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICBkZWNsYXJhdGlvbkZpbGVQYXRoLFxuICAgICAgZW1pdFJlc3VsdC5nZXRPdXRwdXRGaWxlcygpWzBdLmdldFRleHQoKVxuICAgIClcbiAgfVxuXG4gIC8vIEdlbmVyYXRlIHZhbHVlcyAoLmpzKVxuICBjb25zdCBwa2dSYXcgPSBhd2FpdCBmcy5yZWFkRmlsZShcbiAgICBwYXRoLmpvaW4ocGFja2FnZURpciwgXCJwYWNrYWdlLmpzb25cIiksXG4gICAgXCJ1dGYtOFwiXG4gIClcbiAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShwa2dSYXcpXG5cbiAgYXdhaXQgZXNidWlsZC5idWlsZCh7XG4gICAgLi4ub3B0cy5lc2J1aWxkT3B0aW9ucyxcbiAgICBzdGRpbjoge1xuICAgICAgY29udGVudHM6IGVudHJ5UG9pbnRDb250ZW50LFxuICAgICAgcmVzb2x2ZURpcjogcGF0aC5yZXNvbHZlKHBhY2thZ2VEaXIpLFxuICAgIH0sXG4gICAgb3V0ZmlsZTogb3B0cy5vdXRwdXRGaWxlLFxuICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICBwbGF0Zm9ybTogXCJub2RlXCIsXG4gICAgZm9ybWF0OiBcImVzbVwiLFxuICAgIHRyZWVTaGFraW5nOiB0cnVlLFxuICAgIGV4dGVybmFsOiBbXG4gICAgICAuLi5PYmplY3Qua2V5cyhwa2cuZGVwZW5kZW5jaWVzKSxcbiAgICAgIC4uLk9iamVjdC5rZXlzKHBrZy5kZXZEZXBlbmRlbmNpZXMpLFxuICAgICAgLi4uKG9wdHMuZXNidWlsZE9wdGlvbnM/LmV4dGVybmFsID8/IFtdKSxcbiAgICBdLFxuICAgIHBsdWdpbnM6IFtcbiAgICAgIC8vIFdpdGggdGhpcyBwbHVnaW4sIGVzYnVpbGQgd2lsbCBuZXZlciB0b3VjaCB0aGUgYWN0dWFsIGZpbGVzeXN0ZW0gYW5kIHRodXMgY2Fubm90IGludGVyYWN0IHdpdGggaW1wb3J0cyB0aGF0IGRvbid0IG1hdGNoIGFsbG93ZWRJbXBvcnRQYXR0ZXJuc1tdLlxuICAgICAge1xuICAgICAgICBuYW1lOiBcInJlc29sdmUtdmlydHVhbC1mc1wiLFxuICAgICAgICBzZXR1cChidWlsZCkge1xuICAgICAgICAgIGJ1aWxkLm9uTG9hZCh7IGZpbHRlcjogLy4qLyB9LCAoYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGVudHMgPSBwcm9qZWN0LmdldFNvdXJjZUZpbGUoYXJncy5wYXRoKT8uZ2V0RnVsbFRleHQoKVxuICAgICAgICAgICAgaWYgKCFjb250ZW50cykge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvbnRlbnRzOiBcImV4cG9ydCBkZWZhdWx0IHt9XCIsXG4gICAgICAgICAgICAgICAgbG9hZGVyOiBcInRzXCIsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudHMsXG4gICAgICAgICAgICAgIGxvYWRlcjogXCJ0c1wiLFxuICAgICAgICAgICAgICByZXNvbHZlRGlyOiBwYXRoLmRpcm5hbWUoYXJncy5wYXRoKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIC4uLihvcHRzLmVzYnVpbGRPcHRpb25zPy5wbHVnaW5zID8/IFtdKSxcbiAgICBdLFxuICB9KVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7OztBQUFBOzs7QUNBQTtBQUFBLE9BQU8sUUFBUTtBQUNmO0FBQUEsRUFDRTtBQUFBLE9BR0s7QUFFUCxTQUFTLEtBQUFBLFVBQVM7OztBQ1BsQjtBQUFBLE9BQU9DLFdBQVU7OztBQ0FqQjtBQUFBLE9BQU8sVUFBVTtBQUVWLElBQU0sZ0NBQ1gsQ0FBQyxhQUFxQixXQUN0QixDQUFDLGNBQXNCO0FBQ3JCLFFBQU0sUUFBUSxVQUVYLFFBQVEsU0FBUyxHQUFHLEVBRXBCLFFBQVEsT0FBTyxFQUFFLEVBRWpCLFFBQVEsVUFBVSxFQUFFLEVBRXBCLFFBQVEsWUFBWSxFQUFFLEVBRXRCLFFBQVEsVUFBVSxFQUFFLEVBRXBCLFFBQVEsU0FBUyxFQUFFLEVBRW5CLFFB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VTtBQUFBLElBQ3JDO0FBQUEsSUFDQSxTQUFTLEtBQUs7QUFBQSxJQUNkLFFBQVE7QUFBQSxJQUNSLFVBQVU7QUFBQSxJQUNWLFFBQVE7QUFBQSxJQUNSLGFBQWE7QUFBQSxJQUNiLFVBQVU7QUFBQSxNQUNSLEdBQUcsT0FBTyxLQUFLLElBQUksWUFBWTtBQUFBLE1BQy9CLEdBQUcsT0FBTyxLQUFLLElBQUksZUFBZTtBQUFBLE1BQ2xDLElBQUksZ0JBQUssbUJBQUwsbUJBQXFCLGFBQXJCLFlBQWlDLENBQUM7QUFBQSxJQUN4QztBQUFBLElBQ0EsU0FBUztBQUFBLE1BRVA7QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLE1BQU1HLFFBQU87QUFDWCxVQUFBQSxPQUFNLE9BQU8sRUFBRSxRQUFRLEtBQUssR0FBRyxDQUFDLFNBQVM7QUEvSm5ELGdCQUFBRDtBQWdLWSxrQkFBTSxZQUFXQSxNQUFBLFFBQVEsY0FBYyxLQUFLLElBQUksTUFBL0IsZ0JBQUFBLElBQWtDO0FBQ25ELGdCQUFJLENBQUMsVUFBVTtBQUNiLHFCQUFPO0FBQUEsZ0JBQ0wsVUFBVTtBQUFBLGdCQUNWLFFBQVE7QUFBQSxjQUNWO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsY0FDTDtBQUFBLGNBQ0EsUUFBUTtBQUFBLGNBQ1IsWUFBWUYsTUFBSyxRQUFRLEtBQUssSUFBSTtBQUFBLFlBQ3BDO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLElBQUksZ0JBQUssbUJBQUwsbUJBQXFCLFlBQXJCLFlBQWdDLENBQUM7QUFBQSxJQUN2QztBQUFBLEVBQ0YsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogWyJ6IiwgInBhdGgiLCAicGF0aCIsICJwYXRoIiwgInBhdGgiLCAiX2EiLCAieiIsICJmcyIsICJkZWRlbnQiLCAicGFyc2VEZXNjcmlwdGlvbiIsICJvcHRpb25zIiwgInoiLCAiXyIsICJmcyIsICJwYXRoIiwgIlN5bnRheEtpbmQiLCAicGF0aCIsICJTeW50YXhLaW5kIiwgIl9hIiwgImJ1aWxkIl0KfQo=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nextlove",
3
- "version": "2.14.0",
3
+ "version": "2.14.1",
4
4
  "private": false,
5
5
  "sideEffects": false,
6
6
  "repository": "https://github.com/seamapi/nextlove",