parse-server 9.5.1-alpha.2 → 9.5.2-alpha.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.
@@ -108,7 +108,8 @@ class PagesRouter extends _PromiseRouter.default {
108
108
  resendVerificationEmail(req) {
109
109
  const config = req.config;
110
110
  const username = req.body?.username;
111
- const token = req.body?.token;
111
+ const rawToken = req.body?.token;
112
+ const token = rawToken && typeof rawToken !== 'string' ? rawToken.toString() : rawToken;
112
113
  if (!config) {
113
114
  this.invalidRequest();
114
115
  }
@@ -648,4 +649,4 @@ module.exports = {
648
649
  pageParams,
649
650
  pages
650
651
  };
651
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUHJvbWlzZVJvdXRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX0NvbmZpZyIsIl9leHByZXNzIiwiX3BhdGgiLCJfZnMiLCJfbm9kZSIsIl9VdGlscyIsIl9tdXN0YWNoZSIsIl9QYWdlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwicGFnZXMiLCJPYmplY3QiLCJmcmVlemUiLCJwYXNzd29yZFJlc2V0IiwiUGFnZSIsImlkIiwiZGVmYXVsdEZpbGUiLCJwYXNzd29yZFJlc2V0U3VjY2VzcyIsInBhc3N3b3JkUmVzZXRMaW5rSW52YWxpZCIsImVtYWlsVmVyaWZpY2F0aW9uU3VjY2VzcyIsImVtYWlsVmVyaWZpY2F0aW9uU2VuZEZhaWwiLCJlbWFpbFZlcmlmaWNhdGlvblNlbmRTdWNjZXNzIiwiZW1haWxWZXJpZmljYXRpb25MaW5rSW52YWxpZCIsImVtYWlsVmVyaWZpY2F0aW9uTGlua0V4cGlyZWQiLCJwYWdlUGFyYW1zIiwiYXBwTmFtZSIsImFwcElkIiwidG9rZW4iLCJ1c2VybmFtZSIsImVycm9yIiwibG9jYWxlIiwicHVibGljU2VydmVyVXJsIiwicGFnZVBhcmFtSGVhZGVyUHJlZml4IiwiZXJyb3JzIiwianNvbkZhaWxlZEZpbGVMb2FkaW5nIiwiZmlsZU91dHNpZGVBbGxvd2VkU2NvcGUiLCJQYWdlc1JvdXRlciIsIlByb21pc2VSb3V0ZXIiLCJjb25zdHJ1Y3RvciIsInBhZ2VzQ29uZmlnIiwicGFnZXNFbmRwb2ludCIsInBhZ2VzUGF0aCIsInBhdGgiLCJyZXNvbHZlIiwiX19kaXJuYW1lIiwibG9hZEpzb25SZXNvdXJjZSIsIm1vdW50UGFnZXNSb3V0ZXMiLCJtb3VudEN1c3RvbVJvdXRlcyIsIm1vdW50U3RhdGljUm91dGUiLCJ2ZXJpZnlFbWFpbCIsInJlcSIsImNvbmZpZyIsInJhd1Rva2VuIiwicXVlcnkiLCJ0b1N0cmluZyIsImludmFsaWRSZXF1ZXN0IiwiZ29Ub1BhZ2UiLCJ1c2VyQ29udHJvbGxlciIsInRoZW4iLCJyZXNlbmRWZXJpZmljYXRpb25FbWFpbCIsImJvZHkiLCJwYXJhbXMiLCJwdWJsaWNTZXJ2ZXJVUkwiLCJyZXF1ZXN0UmVzZXRQYXNzd29yZCIsImNoZWNrUmVzZXRUb2tlblZhbGlkaXR5IiwiYXBwbGljYXRpb25JZCIsInJlc2V0UGFzc3dvcmQiLCJuZXdfcGFzc3dvcmQiLCJ4aHIiLCJQYXJzZSIsIkVycm9yIiwiT1RIRVJfQ0FVU0UiLCJQQVNTV09SRF9NSVNTSU5HIiwidXBkYXRlUGFzc3dvcmQiLCJQcm9taXNlIiwic3VjY2VzcyIsImVyciIsInJlc3VsdCIsInN0YXR1cyIsInJlc3BvbnNlIiwicGFnZSIsInJlc3BvbnNlVHlwZSIsInJlZGlyZWN0IiwiZm9yY2VSZWRpcmVjdCIsInVuZGVmaW5lZCIsIm1ldGhvZCIsImRlZmF1bHRQYXJhbXMiLCJnZXREZWZhdWx0UGFyYW1zIiwidmFsdWVzIiwiaW5jbHVkZXMiLCJub3RGb3VuZCIsImFzc2lnbiIsImdldExvY2FsZSIsImRlZmF1bHRQYXRoIiwiZGVmYXVsdFBhZ2VQYXRoIiwiZGVmYXVsdFVybCIsImNvbXBvc2VQYWdlVXJsIiwiY3VzdG9tVXJsIiwiY3VzdG9tVXJscyIsIlV0aWxzIiwiaXNQYXRoIiwicmVkaXJlY3RSZXNwb25zZSIsInBsYWNlaG9sZGVycyIsImVuYWJsZUxvY2FsaXphdGlvbiIsImxvY2FsaXphdGlvbkpzb25QYXRoIiwiZ2V0SnNvblBsYWNlaG9sZGVycyIsImdldExvY2FsaXplZFBhdGgiLCJzdWJkaXIiLCJwYWdlUmVzcG9uc2UiLCJzdGF0aWNSb3V0ZSIsInJlbGF0aXZlUGF0aCIsImFic29sdXRlUGF0aCIsImVuZHNXaXRoIiwiZmlsZVJlc3BvbnNlIiwiZ2V0SnNvblRyYW5zbGF0aW9uIiwianNvblBhcmFtZXRlcnMiLCJsb2NhbGl6YXRpb25GYWxsYmFja0xvY2FsZSIsImxhbmd1YWdlIiwic3BsaXQiLCJyZXNvdXJjZSIsInRyYW5zbGF0aW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsIm11c3RhY2hlIiwicmVuZGVyIiwicGFyc2UiLCJkYXRhIiwicmVhZEZpbGUiLCJjb25maWdQbGFjZWhvbGRlcnMiLCJwcm90b3R5cGUiLCJjYWxsIiwiYWxsUGxhY2Vob2xkZXJzIiwicGFyYW1zQW5kUGxhY2Vob2xkZXJzIiwiZW5jb2RlIiwiZW5jb2RlUGFnZVBhcmFtSGVhZGVycyIsImhlYWRlcnMiLCJlbnRyaWVzIiwicmVkdWNlIiwibSIsInAiLCJ0b0xvd2VyQ2FzZSIsImVuY29kZVVSSUNvbXBvbmVudCIsInRleHQiLCJmaWxlUGF0aCIsIm5vcm1hbGl6ZWRQYXRoIiwibm9ybWFsaXplIiwic3RhcnRzV2l0aCIsInNlcCIsImZzIiwianNvbiIsInVybCIsImxvY2F0aW9uIiwiVVJMIiwiZm9yRWFjaCIsInNlYXJjaFBhcmFtcyIsInNldCIsImxvY2F0aW9uU3RyaW5nIiwiZmlsZSIsImpvaW4iLCJtZXNzYWdlIiwic2V0Q29uZmlnIiwiZmFpbEdyYWNlZnVsbHkiLCJDb25maWciLCJnZXQiLCJsb2FkS2V5cyIsInJvdXRlIiwiY3VzdG9tUm91dGVzIiwiaGFuZGxlciIsImV4cHJlc3NSb3V0ZXIiLCJyb3V0ZXIiLCJleHByZXNzIiwiUm91dGVyIiwidXNlIiwiZXhwb3J0cyIsIl9kZWZhdWx0IiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1JvdXRlcnMvUGFnZXNSb3V0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFByb21pc2VSb3V0ZXIgZnJvbSAnLi4vUHJvbWlzZVJvdXRlcic7XG5pbXBvcnQgQ29uZmlnIGZyb20gJy4uL0NvbmZpZyc7XG5pbXBvcnQgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBQYXJzZSB9IGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uL1V0aWxzJztcbmltcG9ydCBtdXN0YWNoZSBmcm9tICdtdXN0YWNoZSc7XG5pbXBvcnQgUGFnZSBmcm9tICcuLi9QYWdlJztcblxuLy8gQWxsIHBhZ2VzIHdpdGggY3VzdG9tIHBhZ2Uga2V5IGZvciByZWZlcmVuY2UgYW5kIGZpbGUgbmFtZVxuY29uc3QgcGFnZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgcGFzc3dvcmRSZXNldDogbmV3IFBhZ2UoeyBpZDogJ3Bhc3N3b3JkUmVzZXQnLCBkZWZhdWx0RmlsZTogJ3Bhc3N3b3JkX3Jlc2V0Lmh0bWwnIH0pLFxuICBwYXNzd29yZFJlc2V0U3VjY2VzczogbmV3IFBhZ2Uoe1xuICAgIGlkOiAncGFzc3dvcmRSZXNldFN1Y2Nlc3MnLFxuICAgIGRlZmF1bHRGaWxlOiAncGFzc3dvcmRfcmVzZXRfc3VjY2Vzcy5odG1sJyxcbiAgfSksXG4gIHBhc3N3b3JkUmVzZXRMaW5rSW52YWxpZDogbmV3IFBhZ2Uoe1xuICAgIGlkOiAncGFzc3dvcmRSZXNldExpbmtJbnZhbGlkJyxcbiAgICBkZWZhdWx0RmlsZTogJ3Bhc3N3b3JkX3Jlc2V0X2xpbmtfaW52YWxpZC5odG1sJyxcbiAgfSksXG4gIGVtYWlsVmVyaWZpY2F0aW9uU3VjY2VzczogbmV3IFBhZ2Uoe1xuICAgIGlkOiAnZW1haWxWZXJpZmljYXRpb25TdWNjZXNzJyxcbiAgICBkZWZhdWx0RmlsZTogJ2VtYWlsX3ZlcmlmaWNhdGlvbl9zdWNjZXNzLmh0bWwnLFxuICB9KSxcbiAgZW1haWxWZXJpZmljYXRpb25TZW5kRmFpbDogbmV3IFBhZ2Uoe1xuICAgIGlkOiAnZW1haWxWZXJpZmljYXRpb25TZW5kRmFpbCcsXG4gICAgZGVmYXVsdEZpbGU6ICdlbWFpbF92ZXJpZmljYXRpb25fc2VuZF9mYWlsLmh0bWwnLFxuICB9KSxcbiAgZW1haWxWZXJpZmljYXRpb25TZW5kU3VjY2VzczogbmV3IFBhZ2Uoe1xuICAgIGlkOiAnZW1haWxWZXJpZmljYXRpb25TZW5kU3VjY2VzcycsXG4gICAgZGVmYXVsdEZpbGU6ICdlbWFpbF92ZXJpZmljYXRpb25fc2VuZF9zdWNjZXNzLmh0bWwnLFxuICB9KSxcbiAgZW1haWxWZXJpZmljYXRpb25MaW5rSW52YWxpZDogbmV3IFBhZ2Uoe1xuICAgIGlkOiAnZW1haWxWZXJpZmljYXRpb25MaW5rSW52YWxpZCcsXG4gICAgZGVmYXVsdEZpbGU6ICdlbWFpbF92ZXJpZmljYXRpb25fbGlua19pbnZhbGlkLmh0bWwnLFxuICB9KSxcbiAgZW1haWxWZXJpZmljYXRpb25MaW5rRXhwaXJlZDogbmV3IFBhZ2Uoe1xuICAgIGlkOiAnZW1haWxWZXJpZmljYXRpb25MaW5rRXhwaXJlZCcsXG4gICAgZGVmYXVsdEZpbGU6ICdlbWFpbF92ZXJpZmljYXRpb25fbGlua19leHBpcmVkLmh0bWwnLFxuICB9KSxcbn0pO1xuXG4vLyBBbGwgcGFnZSBwYXJhbWV0ZXJzIGZvciByZWZlcmVuY2UgdG8gYmUgdXNlZCBhcyB0ZW1wbGF0ZSBwbGFjZWhvbGRlcnMgb3IgcXVlcnkgcGFyYW1zXG5jb25zdCBwYWdlUGFyYW1zID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGFwcE5hbWU6ICdhcHBOYW1lJyxcbiAgYXBwSWQ6ICdhcHBJZCcsXG4gIHRva2VuOiAndG9rZW4nLFxuICB1c2VybmFtZTogJ3VzZXJuYW1lJyxcbiAgZXJyb3I6ICdlcnJvcicsXG4gIGxvY2FsZTogJ2xvY2FsZScsXG4gIHB1YmxpY1NlcnZlclVybDogJ3B1YmxpY1NlcnZlclVybCcsXG59KTtcblxuLy8gVGhlIGhlYWRlciBwcmVmaXggdG8gYWRkIHBhZ2UgcGFyYW1zIGFzIHJlc3BvbnNlIGhlYWRlcnNcbmNvbnN0IHBhZ2VQYXJhbUhlYWRlclByZWZpeCA9ICd4LXBhcnNlLXBhZ2UtcGFyYW0tJztcblxuLy8gVGhlIGVycm9ycyBiZWluZyB0aHJvd25cbmNvbnN0IGVycm9ycyA9IE9iamVjdC5mcmVlemUoe1xuICBqc29uRmFpbGVkRmlsZUxvYWRpbmc6ICdmYWlsZWQgdG8gbG9hZCBKU09OIGZpbGUnLFxuICBmaWxlT3V0c2lkZUFsbG93ZWRTY29wZTogJ25vdCBhbGxvd2VkIHRvIHJlYWQgZmlsZSBvdXRzaWRlIG9mIHBhZ2VzIGRpcmVjdG9yeScsXG59KTtcblxuZXhwb3J0IGNsYXNzIFBhZ2VzUm91dGVyIGV4dGVuZHMgUHJvbWlzZVJvdXRlciB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgUGFnZXNSb3V0ZXIuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYWdlcyBUaGUgcGFnZXMgb3B0aW9ucyBmcm9tIHRoZSBQYXJzZSBTZXJ2ZXIgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHBhZ2VzID0ge30pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgLy8gU2V0IGluc3RhbmNlIHByb3BlcnRpZXNcbiAgICB0aGlzLnBhZ2VzQ29uZmlnID0gcGFnZXM7XG4gICAgdGhpcy5wYWdlc0VuZHBvaW50ID0gcGFnZXMucGFnZXNFbmRwb2ludCA/IHBhZ2VzLnBhZ2VzRW5kcG9pbnQgOiAnYXBwcyc7XG4gICAgdGhpcy5wYWdlc1BhdGggPSBwYWdlcy5wYWdlc1BhdGhcbiAgICAgID8gcGF0aC5yZXNvbHZlKCcuLycsIHBhZ2VzLnBhZ2VzUGF0aClcbiAgICAgIDogcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uLy4uL3B1YmxpYycpO1xuICAgIHRoaXMubG9hZEpzb25SZXNvdXJjZSgpO1xuICAgIHRoaXMubW91bnRQYWdlc1JvdXRlcygpO1xuICAgIHRoaXMubW91bnRDdXN0b21Sb3V0ZXMoKTtcbiAgICB0aGlzLm1vdW50U3RhdGljUm91dGUoKTtcbiAgfVxuXG4gIHZlcmlmeUVtYWlsKHJlcSkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgY29uc3QgeyB0b2tlbjogcmF3VG9rZW4gfSA9IHJlcS5xdWVyeTtcbiAgICBjb25zdCB0b2tlbiA9IHJhd1Rva2VuICYmIHR5cGVvZiByYXdUb2tlbiAhPT0gJ3N0cmluZycgPyByYXdUb2tlbi50b1N0cmluZygpIDogcmF3VG9rZW47XG5cbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgdGhpcy5pbnZhbGlkUmVxdWVzdCgpO1xuICAgIH1cblxuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdvVG9QYWdlKHJlcSwgcGFnZXMuZW1haWxWZXJpZmljYXRpb25MaW5rSW52YWxpZCk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckNvbnRyb2xsZXIgPSBjb25maWcudXNlckNvbnRyb2xsZXI7XG4gICAgcmV0dXJuIHVzZXJDb250cm9sbGVyLnZlcmlmeUVtYWlsKHRva2VuKS50aGVuKFxuICAgICAgKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nb1RvUGFnZShyZXEsIHBhZ2VzLmVtYWlsVmVyaWZpY2F0aW9uU3VjY2Vzcyk7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nb1RvUGFnZShyZXEsIHBhZ2VzLmVtYWlsVmVyaWZpY2F0aW9uTGlua0ludmFsaWQpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICByZXNlbmRWZXJpZmljYXRpb25FbWFpbChyZXEpIHtcbiAgICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICAgIGNvbnN0IHVzZXJuYW1lID0gcmVxLmJvZHk/LnVzZXJuYW1lO1xuICAgIGNvbnN0IHRva2VuID0gcmVxLmJvZHk/LnRva2VuO1xuXG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIHRoaXMuaW52YWxpZFJlcXVlc3QoKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZXJuYW1lICYmICF0b2tlbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ29Ub1BhZ2UocmVxLCBwYWdlcy5lbWFpbFZlcmlmaWNhdGlvbkxpbmtJbnZhbGlkKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyQ29udHJvbGxlciA9IGNvbmZpZy51c2VyQ29udHJvbGxlcjtcblxuICAgIHJldHVybiB1c2VyQ29udHJvbGxlci5yZXNlbmRWZXJpZmljYXRpb25FbWFpbCh1c2VybmFtZSwgcmVxLCB0b2tlbikudGhlbihcbiAgICAgICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ29Ub1BhZ2UocmVxLCBwYWdlcy5lbWFpbFZlcmlmaWNhdGlvblNlbmRTdWNjZXNzKTtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvVG9QYWdlKHJlcSwgcGFnZXMuZW1haWxWZXJpZmljYXRpb25TZW5kRmFpbCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHBhc3N3b3JkUmVzZXQocmVxKSB7XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBbcGFnZVBhcmFtcy5hcHBJZF06IHJlcS5wYXJhbXMuYXBwSWQsXG4gICAgICBbcGFnZVBhcmFtcy5hcHBOYW1lXTogY29uZmlnLmFwcE5hbWUsXG4gICAgICBbcGFnZVBhcmFtcy50b2tlbl06IHJlcS5xdWVyeS50b2tlbixcbiAgICAgIFtwYWdlUGFyYW1zLnVzZXJuYW1lXTogcmVxLnF1ZXJ5LnVzZXJuYW1lLFxuICAgICAgW3BhZ2VQYXJhbXMucHVibGljU2VydmVyVXJsXTogY29uZmlnLnB1YmxpY1NlcnZlclVSTCxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmdvVG9QYWdlKHJlcSwgcGFnZXMucGFzc3dvcmRSZXNldCwgcGFyYW1zKTtcbiAgfVxuXG4gIHJlcXVlc3RSZXNldFBhc3N3b3JkKHJlcSkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG5cbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgdGhpcy5pbnZhbGlkUmVxdWVzdCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgdG9rZW46IHJhd1Rva2VuIH0gPSByZXEucXVlcnk7XG4gICAgY29uc3QgdG9rZW4gPSByYXdUb2tlbiAmJiB0eXBlb2YgcmF3VG9rZW4gIT09ICdzdHJpbmcnID8gcmF3VG9rZW4udG9TdHJpbmcoKSA6IHJhd1Rva2VuO1xuXG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ29Ub1BhZ2UocmVxLCBwYWdlcy5wYXNzd29yZFJlc2V0TGlua0ludmFsaWQpO1xuICAgIH1cblxuICAgIHJldHVybiBjb25maWcudXNlckNvbnRyb2xsZXIuY2hlY2tSZXNldFRva2VuVmFsaWRpdHkodG9rZW4pLnRoZW4oXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBbcGFnZVBhcmFtcy50b2tlbl06IHRva2VuLFxuICAgICAgICAgIFtwYWdlUGFyYW1zLmFwcElkXTogY29uZmlnLmFwcGxpY2F0aW9uSWQsXG4gICAgICAgICAgW3BhZ2VQYXJhbXMuYXBwTmFtZV06IGNvbmZpZy5hcHBOYW1lLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5nb1RvUGFnZShyZXEsIHBhZ2VzLnBhc3N3b3JkUmVzZXQsIHBhcmFtcyk7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nb1RvUGFnZShyZXEsIHBhZ2VzLnBhc3N3b3JkUmVzZXRMaW5rSW52YWxpZCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHJlc2V0UGFzc3dvcmQocmVxKSB7XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICB0aGlzLmludmFsaWRSZXF1ZXN0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBuZXdfcGFzc3dvcmQsIHRva2VuOiByYXdUb2tlbiB9ID0gcmVxLmJvZHkgfHwge307XG4gICAgY29uc3QgdG9rZW4gPSByYXdUb2tlbiAmJiB0eXBlb2YgcmF3VG9rZW4gIT09ICdzdHJpbmcnID8gcmF3VG9rZW4udG9TdHJpbmcoKSA6IHJhd1Rva2VuO1xuXG4gICAgaWYgKCghdG9rZW4gfHwgIW5ld19wYXNzd29yZCkgJiYgcmVxLnhociA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmdvVG9QYWdlKHJlcSwgcGFnZXMucGFzc3dvcmRSZXNldExpbmtJbnZhbGlkKTtcbiAgICB9XG5cbiAgICBpZiAoIXRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT1RIRVJfQ0FVU0UsICdNaXNzaW5nIHRva2VuJyk7XG4gICAgfVxuXG4gICAgaWYgKCFuZXdfcGFzc3dvcmQpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5QQVNTV09SRF9NSVNTSU5HLCAnTWlzc2luZyBwYXNzd29yZCcpO1xuICAgIH1cblxuICAgIHJldHVybiBjb25maWcudXNlckNvbnRyb2xsZXJcbiAgICAgIC51cGRhdGVQYXNzd29yZCh0b2tlbiwgbmV3X3Bhc3N3b3JkKVxuICAgICAgLnRoZW4oXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycixcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlcS54aHIpIHtcbiAgICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgICAgICAgcmVzcG9uc2U6ICdQYXNzd29yZCBzdWNjZXNzZnVsbHkgcmVzZXQnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXN1bHQuZXJyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT1RIRVJfQ0FVU0UsIGAke3Jlc3VsdC5lcnJ9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcXVlcnkgPSByZXN1bHQuc3VjY2Vzc1xuICAgICAgICAgID8ge31cbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgIFtwYWdlUGFyYW1zLnRva2VuXTogdG9rZW4sXG4gICAgICAgICAgICBbcGFnZVBhcmFtcy5hcHBJZF06IGNvbmZpZy5hcHBsaWNhdGlvbklkLFxuICAgICAgICAgICAgW3BhZ2VQYXJhbXMuZXJyb3JdOiByZXN1bHQuZXJyLFxuICAgICAgICAgICAgW3BhZ2VQYXJhbXMuYXBwTmFtZV06IGNvbmZpZy5hcHBOYW1lLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgaWYgKHJlc3VsdD8uZXJyID09PSAnVGhlIHBhc3N3b3JkIHJlc2V0IGxpbmsgaGFzIGV4cGlyZWQnKSB7XG4gICAgICAgICAgZGVsZXRlIHF1ZXJ5W3BhZ2VQYXJhbXMudG9rZW5dO1xuICAgICAgICAgIHF1ZXJ5W3BhZ2VQYXJhbXMudG9rZW5dID0gdG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFnZSA9IHJlc3VsdC5zdWNjZXNzID8gcGFnZXMucGFzc3dvcmRSZXNldFN1Y2Nlc3MgOiBwYWdlcy5wYXNzd29yZFJlc2V0O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmdvVG9QYWdlKHJlcSwgcGFnZSwgcXVlcnksIGZhbHNlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgcGFnZSBjb250ZW50IGlmIHRoZSBwYWdlIGlzIGEgbG9jYWwgZmlsZSBvciByZXR1cm5zIGFcbiAgICogcmVkaXJlY3QgdG8gYSBjdXN0b20gcGFnZS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHJlcSBUaGUgZXhwcmVzcyByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge1BhZ2V9IHBhZ2UgVGhlIHBhZ2UgdG8gZ28gdG8uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zPXt9XSBUaGUgcXVlcnkgcGFyYW1ldGVycyB0byBhdHRhY2ggdG8gdGhlIFVSTCBpbiBjYXNlIG9mXG4gICAqIEhUVFAgcmVkaXJlY3QgcmVzcG9uc2VzIGZvciBQT1NUIHJlcXVlc3RzLCBvciB0aGUgcGxhY2Vob2xkZXJzIHRvIGZpbGwgaW50b1xuICAgKiB0aGUgcmVzcG9uc2UgY29udGVudCBpbiBjYXNlIG9mIEhUVFAgY29udGVudCByZXNwb25zZXMgZm9yIEdFVCByZXF1ZXN0cy5cbiAgICogQHBhcmFtIHtCb29sZWFufSBbcmVzcG9uc2VUeXBlXSBJcyB0cnVlIGlmIGEgcmVkaXJlY3QgcmVzcG9uc2Ugc2hvdWxkIGJlIGZvcmNlZCxcbiAgICogZmFsc2UgaWYgYSBjb250ZW50IHJlc3BvbnNlIHNob3VsZCBiZSBmb3JjZWQsIHVuZGVmaW5lZCBpZiB0aGUgcmVzcG9uc2UgdHlwZVxuICAgKiBzaG91bGQgZGVwZW5kIG9uIHRoZSByZXF1ZXN0IHR5cGUgYnkgZGVmYXVsdDpcbiAgICogLSBHRVQgcmVxdWVzdCAtPiBjb250ZW50IHJlc3BvbnNlXG4gICAqIC0gUE9TVCByZXF1ZXN0IC0+IHJlZGlyZWN0IHJlc3BvbnNlIChQUkcgcGF0dGVybilcbiAgICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0Pn0gVGhlIFByb21pc2VSb3V0ZXIgcmVzcG9uc2UuXG4gICAqL1xuICBnb1RvUGFnZShyZXEsIHBhZ2UsIHBhcmFtcyA9IHt9LCByZXNwb25zZVR5cGUpIHtcbiAgICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuXG4gICAgLy8gRGV0ZXJtaW5lIHJlZGlyZWN0IGVpdGhlciBieSBmb3JjZSwgcmVzcG9uc2Ugc2V0dGluZyBvciByZXF1ZXN0IG1ldGhvZFxuICAgIGNvbnN0IHJlZGlyZWN0ID0gY29uZmlnLnBhZ2VzLmZvcmNlUmVkaXJlY3RcbiAgICAgID8gdHJ1ZVxuICAgICAgOiByZXNwb25zZVR5cGUgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHJlc3BvbnNlVHlwZVxuICAgICAgICA6IHJlcS5tZXRob2QgPT0gJ1BPU1QnO1xuXG4gICAgLy8gSW5jbHVkZSBkZWZhdWx0IHBhcmFtZXRlcnNcbiAgICBjb25zdCBkZWZhdWx0UGFyYW1zID0gdGhpcy5nZXREZWZhdWx0UGFyYW1zKGNvbmZpZyk7XG4gICAgaWYgKE9iamVjdC52YWx1ZXMoZGVmYXVsdFBhcmFtcykuaW5jbHVkZXModW5kZWZpbmVkKSkge1xuICAgICAgcmV0dXJuIHRoaXMubm90Rm91bmQoKTtcbiAgICB9XG4gICAgcGFyYW1zID0gT2JqZWN0LmFzc2lnbihwYXJhbXMsIGRlZmF1bHRQYXJhbXMpO1xuXG4gICAgLy8gQWRkIGxvY2FsZSB0byBwYXJhbXMgdG8gZW5zdXJlIGl0IGlzIHBhc3NlZCBvbiB3aXRoIGV2ZXJ5IHJlcXVlc3Q7XG4gICAgLy8gdGhhdCBtZWFucywgb25jZSBhIGxvY2FsZSBpcyBzZXQsIGl0IGlzIHBhc3NlZCBvbiB0byBhbnkgZm9sbG93LXVwIHBhZ2UsXG4gICAgLy8gZS5nLiByZXF1ZXN0X3Bhc3N3b3JkX3Jlc2V0IC0+IHBhc3N3b3JkX3Jlc2V0IC0+IHBhc3N3b3JkX3Jlc2V0X3N1Y2Nlc3NcbiAgICBjb25zdCBsb2NhbGUgPSB0aGlzLmdldExvY2FsZShyZXEpO1xuICAgIHBhcmFtc1twYWdlUGFyYW1zLmxvY2FsZV0gPSBsb2NhbGU7XG5cbiAgICAvLyBDb21wb3NlIHBhdGhzIGFuZCBVUkxzXG4gICAgY29uc3QgZGVmYXVsdEZpbGUgPSBwYWdlLmRlZmF1bHRGaWxlO1xuICAgIGNvbnN0IGRlZmF1bHRQYXRoID0gdGhpcy5kZWZhdWx0UGFnZVBhdGgoZGVmYXVsdEZpbGUpO1xuICAgIGNvbnN0IGRlZmF1bHRVcmwgPSB0aGlzLmNvbXBvc2VQYWdlVXJsKGRlZmF1bHRGaWxlLCBjb25maWcucHVibGljU2VydmVyVVJMKTtcblxuICAgIC8vIElmIGN1c3RvbSBVUkwgaXMgc2V0IHJlZGlyZWN0IHRvIGl0IHdpdGhvdXQgbG9jYWxpemF0aW9uXG4gICAgY29uc3QgY3VzdG9tVXJsID0gY29uZmlnLnBhZ2VzLmN1c3RvbVVybHNbcGFnZS5pZF07XG4gICAgaWYgKGN1c3RvbVVybCAmJiAhVXRpbHMuaXNQYXRoKGN1c3RvbVVybCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlZGlyZWN0UmVzcG9uc2UoY3VzdG9tVXJsLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIC8vIEdldCBKU09OIHBsYWNlaG9sZGVyc1xuICAgIGxldCBwbGFjZWhvbGRlcnMgPSB7fTtcbiAgICBpZiAoY29uZmlnLnBhZ2VzLmVuYWJsZUxvY2FsaXphdGlvbiAmJiBjb25maWcucGFnZXMubG9jYWxpemF0aW9uSnNvblBhdGgpIHtcbiAgICAgIHBsYWNlaG9sZGVycyA9IHRoaXMuZ2V0SnNvblBsYWNlaG9sZGVycyhsb2NhbGUsIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgLy8gU2VuZCByZXNwb25zZVxuICAgIGlmIChjb25maWcucGFnZXMuZW5hYmxlTG9jYWxpemF0aW9uICYmIGxvY2FsZSkge1xuICAgICAgcmV0dXJuIFV0aWxzLmdldExvY2FsaXplZFBhdGgoZGVmYXVsdFBhdGgsIGxvY2FsZSkudGhlbigoeyBwYXRoLCBzdWJkaXIgfSkgPT5cbiAgICAgICAgcmVkaXJlY3RcbiAgICAgICAgICA/IHRoaXMucmVkaXJlY3RSZXNwb25zZShcbiAgICAgICAgICAgIHRoaXMuY29tcG9zZVBhZ2VVcmwoZGVmYXVsdEZpbGUsIGNvbmZpZy5wdWJsaWNTZXJ2ZXJVUkwsIHN1YmRpciksXG4gICAgICAgICAgICBwYXJhbXNcbiAgICAgICAgICApXG4gICAgICAgICAgOiB0aGlzLnBhZ2VSZXNwb25zZShwYXRoLCBwYXJhbXMsIHBsYWNlaG9sZGVycylcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZWRpcmVjdFxuICAgICAgICA/IHRoaXMucmVkaXJlY3RSZXNwb25zZShkZWZhdWx0VXJsLCBwYXJhbXMpXG4gICAgICAgIDogdGhpcy5wYWdlUmVzcG9uc2UoZGVmYXVsdFBhdGgsIHBhcmFtcywgcGxhY2Vob2xkZXJzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VydmVzIGEgcmVxdWVzdCB0byBhIHN0YXRpYyByZXNvdXJjZSBhbmQgbG9jYWxpemVzIHRoZSByZXNvdXJjZSBpZiBpdFxuICAgKiBpcyBhIEhUTUwgZmlsZS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHJlcSBUaGUgcmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdD59IFRoZSByZXNwb25zZS5cbiAgICovXG4gIHN0YXRpY1JvdXRlKHJlcSkge1xuICAgIC8vIEdldCByZXF1ZXN0ZWQgcGF0aFxuICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHJlcS5wYXJhbXNbJ3Jlc291cmNlJ11bMF07XG5cbiAgICAvLyBSZXNvbHZlIHJlcXVlc3RlZCBwYXRoIHRvIGFic29sdXRlIHBhdGhcbiAgICBjb25zdCBhYnNvbHV0ZVBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5wYWdlc1BhdGgsIHJlbGF0aXZlUGF0aCk7XG5cbiAgICAvLyBJZiB0aGUgcmVxdWVzdGVkIGZpbGUgaXMgbm90IGEgSFRNTCBmaWxlIHNlbmQgaXRzIHJhdyBjb250ZW50XG4gICAgaWYgKCFhYnNvbHV0ZVBhdGggfHwgIWFic29sdXRlUGF0aC5lbmRzV2l0aCgnLmh0bWwnKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZVJlc3BvbnNlKGFic29sdXRlUGF0aCk7XG4gICAgfVxuXG4gICAgLy8gR2V0IHBhcmFtZXRlcnNcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmdldERlZmF1bHRQYXJhbXMocmVxLmNvbmZpZyk7XG4gICAgY29uc3QgbG9jYWxlID0gdGhpcy5nZXRMb2NhbGUocmVxKTtcbiAgICBpZiAobG9jYWxlKSB7XG4gICAgICBwYXJhbXMubG9jYWxlID0gbG9jYWxlO1xuICAgIH1cblxuICAgIC8vIEdldCBKU09OIHBsYWNlaG9sZGVyc1xuICAgIGNvbnN0IHBsYWNlaG9sZGVycyA9IHRoaXMuZ2V0SnNvblBsYWNlaG9sZGVycyhsb2NhbGUsIHBhcmFtcyk7XG5cbiAgICByZXR1cm4gdGhpcy5wYWdlUmVzcG9uc2UoYWJzb2x1dGVQYXRoLCBwYXJhbXMsIHBsYWNlaG9sZGVycyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHRyYW5zbGF0aW9uIGZyb20gdGhlIEpTT04gcmVzb3VyY2UgZm9yIGEgZ2l2ZW4gbG9jYWxlLiBUaGUgSlNPTlxuICAgKiByZXNvdXJjZSBpcyBwYXJzZWQgYWNjb3JkaW5nIHRvIGkxOG5leHQgc3ludGF4LlxuICAgKlxuICAgKiBFeGFtcGxlIEpTT04gY29udGVudDpcbiAgICogYGBganNcbiAgICogIHtcbiAgICogICAgXCJlblwiOiB7ICAgICAgICAgICAgICAgLy8gcmVzb3VyY2UgZm9yIGxhbmd1YWdlIGBlbmAgKEVuZ2xpc2gpXG4gICAqICAgICAgXCJ0cmFuc2xhdGlvblwiOiB7XG4gICAqICAgICAgICBcImdyZWV0aW5nXCI6IFwiSGVsbG8hXCJcbiAgICogICAgICB9XG4gICAqICAgIH0sXG4gICAqICAgIFwiZGVcIjogeyAgICAgICAgICAgICAgIC8vIHJlc291cmNlIGZvciBsYW5ndWFnZSBgZGVgIChHZXJtYW4pXG4gICAqICAgICAgXCJ0cmFuc2xhdGlvblwiOiB7XG4gICAqICAgICAgICBcImdyZWV0aW5nXCI6IFwiSGFsbG8hXCJcbiAgICogICAgICB9XG4gICAqICAgIH1cbiAgICogICAgXCJkZS1DSFwiOiB7ICAgICAgICAgICAgLy8gcmVzb3VyY2UgZm9yIGxvY2FsZSBgZGUtQ0hgIChTd2lzcyBHZXJtYW4pXG4gICAqICAgICAgXCJ0cmFuc2xhdGlvblwiOiB7XG4gICAqICAgICAgICBcImdyZWV0aW5nXCI6IFwiR3LDvGV6aSFcIlxuICAgKiAgICAgIH1cbiAgICogICAgfVxuICAgKiAgfVxuICAgKiBgYGBcbiAgICogQHBhcmFtIHtTdHJpbmd9IGxvY2FsZSBUaGUgbG9jYWxlIHRvIHRyYW5zbGF0ZSB0by5cbiAgICogQHJldHVybnMge09iamVjdH0gVGhlIHRyYW5zbGF0aW9uIG9yIGFuIGVtcHR5IG9iamVjdCBpZiBubyBtYXRjaGluZ1xuICAgKiB0cmFuc2xhdGlvbiB3YXMgZm91bmQuXG4gICAqL1xuICBnZXRKc29uVHJhbnNsYXRpb24obG9jYWxlKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gSlNPTiByZXNvdXJjZVxuICAgIGlmICh0aGlzLmpzb25QYXJhbWV0ZXJzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvLyBJZiBsb2NhbGUgaXMgbm90IHNldCB1c2UgdGhlIGZhbGxiYWNrIGxvY2FsZVxuICAgIGxvY2FsZSA9IGxvY2FsZSB8fCB0aGlzLnBhZ2VzQ29uZmlnLmxvY2FsaXphdGlvbkZhbGxiYWNrTG9jYWxlO1xuXG4gICAgLy8gR2V0IG1hdGNoaW5nIHRyYW5zbGF0aW9uIGJ5IGxvY2FsZSwgbGFuZ3VhZ2Ugb3IgZmFsbGJhY2sgbG9jYWxlXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBsb2NhbGUuc3BsaXQoJy0nKVswXTtcbiAgICBjb25zdCByZXNvdXJjZSA9XG4gICAgICB0aGlzLmpzb25QYXJhbWV0ZXJzW2xvY2FsZV0gfHxcbiAgICAgIHRoaXMuanNvblBhcmFtZXRlcnNbbGFuZ3VhZ2VdIHx8XG4gICAgICB0aGlzLmpzb25QYXJhbWV0ZXJzW3RoaXMucGFnZXNDb25maWcubG9jYWxpemF0aW9uRmFsbGJhY2tMb2NhbGVdIHx8XG4gICAgICB7fTtcbiAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHJlc291cmNlLnRyYW5zbGF0aW9uIHx8IHt9O1xuICAgIHJldHVybiB0cmFuc2xhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgdHJhbnNsYXRpb24gZnJvbSB0aGUgSlNPTiByZXNvdXJjZSBmb3IgYSBnaXZlbiBsb2NhbGUgd2l0aFxuICAgKiBwbGFjZWhvbGRlcnMgZmlsbGVkIGluIGJ5IGdpdmVuIHBhcmFtZXRlcnMuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBsb2NhbGUgVGhlIGxvY2FsZSB0byB0cmFuc2xhdGUgdG8uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgVGhlIHBhcmFtZXRlcnMgdG8gZmlsbCBpbnRvIGFueSBwbGFjZWhvbGRlcnNcbiAgICogd2l0aGluIHRoZSB0cmFuc2xhdGlvbnMuXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSB0cmFuc2xhdGlvbiBvciBhbiBlbXB0eSBvYmplY3QgaWYgbm8gbWF0Y2hpbmdcbiAgICogdHJhbnNsYXRpb24gd2FzIGZvdW5kLlxuICAgKi9cbiAgZ2V0SnNvblBsYWNlaG9sZGVycyhsb2NhbGUsIHBhcmFtcyA9IHt9KSB7XG4gICAgLy8gSWYgbG9jYWxpemF0aW9uIGlzIGRpc2FibGVkIG9yIHRoZXJlIGlzIG5vIEpTT04gcmVzb3VyY2VcbiAgICBpZiAoIXRoaXMucGFnZXNDb25maWcuZW5hYmxlTG9jYWxpemF0aW9uIHx8ICF0aGlzLnBhZ2VzQ29uZmlnLmxvY2FsaXphdGlvbkpzb25QYXRoKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLy8gR2V0IEpTT04gcGxhY2Vob2xkZXJzXG4gICAgbGV0IHBsYWNlaG9sZGVycyA9IHRoaXMuZ2V0SnNvblRyYW5zbGF0aW9uKGxvY2FsZSk7XG5cbiAgICAvLyBGaWxsIGluIGFueSBwbGFjZWhvbGRlcnMgaW4gdGhlIHRyYW5zbGF0aW9uOyB0aGlzIGFsbG93cyBhIHRyYW5zbGF0aW9uXG4gICAgLy8gdG8gY29udGFpbiBkZWZhdWx0IHBsYWNlaG9sZGVycyBsaWtlIHt7YXBwTmFtZX19IHdoaWNoIGFyZSBmaWxsZWQgaGVyZVxuICAgIHBsYWNlaG9sZGVycyA9IEpTT04uc3RyaW5naWZ5KHBsYWNlaG9sZGVycyk7XG4gICAgcGxhY2Vob2xkZXJzID0gbXVzdGFjaGUucmVuZGVyKHBsYWNlaG9sZGVycywgcGFyYW1zKTtcbiAgICBwbGFjZWhvbGRlcnMgPSBKU09OLnBhcnNlKHBsYWNlaG9sZGVycyk7XG5cbiAgICByZXR1cm4gcGxhY2Vob2xkZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSByZXNwb25zZSB3aXRoIGZpbGUgY29udGVudC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gcmV0dXJuLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcz17fV0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIHJlc3BvbnNlXG4gICAqIGhlYWRlci4gVGhlc2Ugd2lsbCBhbHNvIGJlIHVzZWQgdG8gZmlsbCBwbGFjZWhvbGRlcnMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbcGxhY2Vob2xkZXJzPXt9XSBUaGUgcGxhY2Vob2xkZXJzIHRvIGZpbGwgaW4gdGhlIGNvbnRlbnQuXG4gICAqIFRoZXNlIHdpbGwgbm90IGJlIGluY2x1ZGVkIGluIHRoZSByZXNwb25zZSBoZWFkZXIuXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBQcm9taXNlIFJvdXRlciByZXNwb25zZS5cbiAgICovXG4gIGFzeW5jIHBhZ2VSZXNwb25zZShwYXRoLCBwYXJhbXMgPSB7fSwgcGxhY2Vob2xkZXJzID0ge30pIHtcbiAgICAvLyBHZXQgZmlsZSBjb250ZW50XG4gICAgbGV0IGRhdGE7XG4gICAgdHJ5IHtcbiAgICAgIGRhdGEgPSBhd2FpdCB0aGlzLnJlYWRGaWxlKHBhdGgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHRoaXMubm90Rm91bmQoKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgY29uZmlnIHBsYWNlaG9sZGVyczsgY2FuIGJlIGFuIG9iamVjdCwgYSBmdW5jdGlvbiBvciBhbiBhc3luYyBmdW5jdGlvblxuICAgIGxldCBjb25maWdQbGFjZWhvbGRlcnMgPVxuICAgICAgdHlwZW9mIHRoaXMucGFnZXNDb25maWcucGxhY2Vob2xkZXJzID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gdGhpcy5wYWdlc0NvbmZpZy5wbGFjZWhvbGRlcnMocGFyYW1zKVxuICAgICAgICA6IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzLnBhZ2VzQ29uZmlnLnBsYWNlaG9sZGVycykgPT09ICdbb2JqZWN0IE9iamVjdF0nXG4gICAgICAgICAgPyB0aGlzLnBhZ2VzQ29uZmlnLnBsYWNlaG9sZGVyc1xuICAgICAgICAgIDoge307XG4gICAgaWYgKGNvbmZpZ1BsYWNlaG9sZGVycyBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgIGNvbmZpZ1BsYWNlaG9sZGVycyA9IGF3YWl0IGNvbmZpZ1BsYWNlaG9sZGVycztcbiAgICB9XG5cbiAgICAvLyBGaWxsIHBsYWNlaG9sZGVyc1xuICAgIGNvbnN0IGFsbFBsYWNlaG9sZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZ1BsYWNlaG9sZGVycywgcGxhY2Vob2xkZXJzKTtcbiAgICBjb25zdCBwYXJhbXNBbmRQbGFjZWhvbGRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMsIGFsbFBsYWNlaG9sZGVycyk7XG4gICAgZGF0YSA9IG11c3RhY2hlLnJlbmRlcihkYXRhLCBwYXJhbXNBbmRQbGFjZWhvbGRlcnMpO1xuXG4gICAgLy8gQWRkIHBsYWNlaG9sZGVycyBpbiBoZWFkZXIgdG8gYWxsb3cgcGFyc2luZyBmb3IgcHJvZ3JhbW1hdGljIHVzZVxuICAgIC8vIG9mIHJlc3BvbnNlLCBpbnN0ZWFkIG9mIGhhdmluZyB0byBwYXJzZSB0aGUgSFRNTCBjb250ZW50LlxuICAgIGNvbnN0IGVuY29kZSA9IHRoaXMucGFnZXNDb25maWcuZW5jb2RlUGFnZVBhcmFtSGVhZGVycztcbiAgICBjb25zdCBoZWFkZXJzID0gT2JqZWN0LmVudHJpZXMocGFyYW1zKS5yZWR1Y2UoKG0sIHApID0+IHtcbiAgICAgIGlmIChwWzFdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbVtgJHtwYWdlUGFyYW1IZWFkZXJQcmVmaXh9JHtwWzBdLnRvTG93ZXJDYXNlKCl9YF0gPSBlbmNvZGUgPyBlbmNvZGVVUklDb21wb25lbnQocFsxXSkgOiBwWzFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG07XG4gICAgfSwge30pO1xuXG4gICAgcmV0dXJuIHsgdGV4dDogZGF0YSwgaGVhZGVyczogaGVhZGVycyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSByZXNwb25zZSB3aXRoIGZpbGUgY29udGVudC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gcmV0dXJuLlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgUHJvbWlzZVJvdXRlciByZXNwb25zZS5cbiAgICovXG4gIGFzeW5jIGZpbGVSZXNwb25zZShwYXRoKSB7XG4gICAgLy8gR2V0IGZpbGUgY29udGVudFxuICAgIGxldCBkYXRhO1xuICAgIHRyeSB7XG4gICAgICBkYXRhID0gYXdhaXQgdGhpcy5yZWFkRmlsZShwYXRoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB0aGlzLm5vdEZvdW5kKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdGV4dDogZGF0YSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIGFuZCByZXR1cm5zIHRoZSBjb250ZW50IG9mIGEgZmlsZSBhdCBhIGdpdmVuIHBhdGguIEZpbGUgcmVhZGluZyB0b1xuICAgKiBzZXJ2ZSBjb250ZW50IG9uIHRoZSBzdGF0aWMgcm91dGUgaXMgb25seSBhbGxvd2VkIGZyb20gdGhlIHBhZ2VzXG4gICAqIGRpcmVjdG9yeSBvbiBkb3dud2FyZHMuXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqICoqV0FSTklORzoqKiBBbGwgZmlsZSByZWFkcyBpbiB0aGUgUGFnZXNSb3V0ZXIgbXVzdCBiZSBleGVjdXRlZCBieSB0aGlzXG4gICAqIHdyYXBwZXIgYmVjYXVzZSBpdCBhbHNvIGRldGVjdHMgYW5kIHByZXZlbnRzIGNvbW1vbiBleHBsb2l0cy5cbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQHBhcmFtIHtTdHJpbmd9IGZpbGVQYXRoIFRoZSBwYXRoIHRvIHRoZSBmaWxlIHRvIHJlYWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFN0cmluZz59IFRoZSBmaWxlIGNvbnRlbnQuXG4gICAqL1xuICBhc3luYyByZWFkRmlsZShmaWxlUGF0aCkge1xuICAgIC8vIE5vcm1hbGl6ZSBwYXRoIHRvIHByZXZlbnQgaXQgZnJvbSBjb250YWluaW5nIGFueSBkaXJlY3RvcnkgY2hhbmdpbmdcbiAgICAvLyBVTklYIHBhdHRlcm5zIHdoaWNoIGNvdWxkIGV4cG9zZSB0aGUgd2hvbGUgZmlsZSBzeXN0ZW0sIGUuZy5cbiAgICAvLyBgaHR0cDovL2V4YW1wbGUuY29tL3BhcnNlL2FwcHMvLi4vZmlsZS50eHRgIHJlcXVlc3RzIGEgZmlsZSBvdXRzaWRlXG4gICAgLy8gb2YgdGhlIHBhZ2VzIGRpcmVjdG9yeSBzY29wZS5cbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IHBhdGgubm9ybWFsaXplKGZpbGVQYXRoKTtcblxuICAgIC8vIEFib3J0IGlmIHRoZSBwYXRoIGlzIG91dHNpZGUgb2YgdGhlIHBhdGggZGlyZWN0b3J5IHNjb3BlXG4gICAgaWYgKCFub3JtYWxpemVkUGF0aC5zdGFydHNXaXRoKHRoaXMucGFnZXNQYXRoICsgcGF0aC5zZXApKSB7XG4gICAgICB0aHJvdyBlcnJvcnMuZmlsZU91dHNpZGVBbGxvd2VkU2NvcGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IGZzLnJlYWRGaWxlKG5vcm1hbGl6ZWRQYXRoLCAndXRmLTgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhIGxhbmd1YWdlIHJlc291cmNlIEpTT04gZmlsZSB0aGF0IGlzIHVzZWQgZm9yIHRyYW5zbGF0aW9ucy5cbiAgICovXG4gIGxvYWRKc29uUmVzb3VyY2UoKSB7XG4gICAgaWYgKHRoaXMucGFnZXNDb25maWcubG9jYWxpemF0aW9uSnNvblBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QganNvbiA9IHJlcXVpcmUocGF0aC5yZXNvbHZlKCcuLycsIHRoaXMucGFnZXNDb25maWcubG9jYWxpemF0aW9uSnNvblBhdGgpKTtcbiAgICAgIHRoaXMuanNvblBhcmFtZXRlcnMgPSBqc29uO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgZXJyb3JzLmpzb25GYWlsZWRGaWxlTG9hZGluZztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgYW5kIHJldHVybnMgdGhlIHBhZ2UgZGVmYXVsdCBwYXJhbWV0ZXJzIGZyb20gdGhlIFBhcnNlIFNlcnZlclxuICAgKiBjb25maWd1cmF0aW9uLiBUaGVzZSBwYXJhbWV0ZXJzIGFyZSBtYWRlIGFjY2Vzc2libGUgaW4gZXZlcnkgcGFnZSBzZXJ2ZWRcbiAgICogYnkgdGhpcyByb3V0ZXIuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIFBhcnNlIFNlcnZlciBjb25maWd1cmF0aW9uLlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGVmYXVsdCBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgZ2V0RGVmYXVsdFBhcmFtcyhjb25maWcpIHtcbiAgICByZXR1cm4gY29uZmlnXG4gICAgICA/IHtcbiAgICAgICAgW3BhZ2VQYXJhbXMuYXBwSWRdOiBjb25maWcuYXBwSWQsXG4gICAgICAgIFtwYWdlUGFyYW1zLmFwcE5hbWVdOiBjb25maWcuYXBwTmFtZSxcbiAgICAgICAgW3BhZ2VQYXJhbXMucHVibGljU2VydmVyVXJsXTogY29uZmlnLnB1YmxpY1NlcnZlclVSTCxcbiAgICAgIH1cbiAgICAgIDoge307XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgYW5kIHJldHVybnMgdGhlIGxvY2FsZSBmcm9tIGFuIGV4cHJlc3MgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtPYmplY3R9IHJlcSBUaGUgZXhwcmVzcyByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7U3RyaW5nfHVuZGVmaW5lZH0gVGhlIGxvY2FsZSwgb3IgdW5kZWZpbmVkIGlmIG5vIGxvY2FsZSB3YXMgc2V0LlxuICAgKi9cbiAgZ2V0TG9jYWxlKHJlcSkge1xuICAgIGNvbnN0IGxvY2FsZSA9XG4gICAgICAocmVxLnF1ZXJ5IHx8IHt9KVtwYWdlUGFyYW1zLmxvY2FsZV0gfHxcbiAgICAgIChyZXEuYm9keSB8fCB7fSlbcGFnZVBhcmFtcy5sb2NhbGVdIHx8XG4gICAgICAocmVxLnBhcmFtcyB8fCB7fSlbcGFnZVBhcmFtcy5sb2NhbGVdIHx8XG4gICAgICAocmVxLmhlYWRlcnMgfHwge30pW3BhZ2VQYXJhbUhlYWRlclByZWZpeCArIHBhZ2VQYXJhbXMubG9jYWxlXTtcbiAgICByZXR1cm4gbG9jYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSByZXNwb25zZSB3aXRoIGh0dHAgcmVkaXJlY3QuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSByZXEgVGhlIGV4cHJlc3MgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gcmV0dXJuLlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIGluY2x1ZGUuXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBQcm9taXNlIFJvdXRlciByZXNwb25zZS5cbiAgICovXG4gIGFzeW5jIHJlZGlyZWN0UmVzcG9uc2UodXJsLCBwYXJhbXMpIHtcbiAgICAvLyBSZW1vdmUgYW55IHBhcmFtZXRlcnMgd2l0aCB1bmRlZmluZWQgdmFsdWVcbiAgICBwYXJhbXMgPSBPYmplY3QuZW50cmllcyhwYXJhbXMpLnJlZHVjZSgobSwgcCkgPT4ge1xuICAgICAgaWYgKHBbMV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtW3BbMF1dID0gcFsxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtO1xuICAgIH0sIHt9KTtcblxuICAgIC8vIENvbXBvc2UgVVJMIHdpdGggcGFyYW1ldGVycyBpbiBxdWVyeVxuICAgIGNvbnN0IGxvY2F0aW9uID0gbmV3IFVSTCh1cmwpO1xuICAgIE9iamVjdC5lbnRyaWVzKHBhcmFtcykuZm9yRWFjaChwID0+IGxvY2F0aW9uLnNlYXJjaFBhcmFtcy5zZXQocFswXSwgcFsxXSkpO1xuICAgIGNvbnN0IGxvY2F0aW9uU3RyaW5nID0gbG9jYXRpb24udG9TdHJpbmcoKTtcblxuICAgIC8vIEFkZCBwYXJhbWV0ZXJzIHRvIGhlYWRlciB0byBhbGxvdyBwYXJzaW5nIGZvciBwcm9ncmFtbWF0aWMgdXNlXG4gICAgLy8gb2YgcmVzcG9uc2UsIGluc3RlYWQgb2YgaGF2aW5nIHRvIHBhcnNlIHRoZSBIVE1MIGNvbnRlbnQuXG4gICAgY29uc3QgZW5jb2RlID0gdGhpcy5wYWdlc0NvbmZpZy5lbmNvZGVQYWdlUGFyYW1IZWFkZXJzO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBPYmplY3QuZW50cmllcyhwYXJhbXMpLnJlZHVjZSgobSwgcCkgPT4ge1xuICAgICAgaWYgKHBbMV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtW2Ake3BhZ2VQYXJhbUhlYWRlclByZWZpeH0ke3BbMF0udG9Mb3dlckNhc2UoKX1gXSA9IGVuY29kZSA/IGVuY29kZVVSSUNvbXBvbmVudChwWzFdKSA6IHBbMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gbTtcbiAgICB9LCB7fSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiAzMDMsXG4gICAgICBsb2NhdGlvbjogbG9jYXRpb25TdHJpbmcsXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgIH07XG4gIH1cblxuICBkZWZhdWx0UGFnZVBhdGgoZmlsZSkge1xuICAgIHJldHVybiBwYXRoLmpvaW4odGhpcy5wYWdlc1BhdGgsIGZpbGUpO1xuICB9XG5cbiAgY29tcG9zZVBhZ2VVcmwoZmlsZSwgcHVibGljU2VydmVyVXJsLCBsb2NhbGUpIHtcbiAgICBsZXQgdXJsID0gcHVibGljU2VydmVyVXJsO1xuICAgIHVybCArPSB1cmwuZW5kc1dpdGgoJy8nKSA/ICcnIDogJy8nO1xuICAgIHVybCArPSB0aGlzLnBhZ2VzRW5kcG9pbnQgKyAnLyc7XG4gICAgdXJsICs9IGxvY2FsZSA9PT0gdW5kZWZpbmVkID8gJycgOiBsb2NhbGUgKyAnLyc7XG4gICAgdXJsICs9IGZpbGU7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIG5vdEZvdW5kKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0ZXh0OiAnTm90IGZvdW5kLicsXG4gICAgICBzdGF0dXM6IDQwNCxcbiAgICB9O1xuICB9XG5cbiAgaW52YWxpZFJlcXVlc3QoKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKTtcbiAgICBlcnJvci5zdGF0dXMgPSA0MDM7XG4gICAgZXJyb3IubWVzc2FnZSA9ICd1bmF1dGhvcml6ZWQnO1xuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIFBhcnNlIFNlcnZlciBjb25maWd1cmF0aW9uIGluIHRoZSByZXF1ZXN0IG9iamVjdCB0byBtYWtlIGl0XG4gICAqIGVhc2lseSBhY2Nlc3NpYmxlIHRocm91Z2h0b3V0IHJlcXVlc3QgcHJvY2Vzc2luZy5cbiAgICogQHBhcmFtIHtPYmplY3R9IHJlcSBUaGUgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtCb29sZWFufSBmYWlsR3JhY2VmdWxseSBJcyB0cnVlIGlmIGZhaWxpbmcgdG8gc2V0IHRoZSBjb25maWcgc2hvdWxkXG4gICAqIG5vdCByZXN1bHQgaW4gYW4gaW52YWxpZCByZXF1ZXN0IHJlc3BvbnNlLiBEZWZhdWx0IGlzIGBmYWxzZWAuXG4gICAqL1xuICBhc3luYyBzZXRDb25maWcocmVxLCBmYWlsR3JhY2VmdWxseSA9IGZhbHNlKSB7XG4gICAgcmVxLmNvbmZpZyA9IENvbmZpZy5nZXQocmVxLnBhcmFtcy5hcHBJZCB8fCByZXEucXVlcnkuYXBwSWQpO1xuICAgIGlmICghcmVxLmNvbmZpZyAmJiAhZmFpbEdyYWNlZnVsbHkpIHtcbiAgICAgIHRoaXMuaW52YWxpZFJlcXVlc3QoKTtcbiAgICB9XG4gICAgaWYgKHJlcS5jb25maWcpIHtcbiAgICAgIGF3YWl0IHJlcS5jb25maWcubG9hZEtleXMoKTtcbiAgICB9XG4gIH1cblxuICBtb3VudFBhZ2VzUm91dGVzKCkge1xuICAgIHRoaXMucm91dGUoXG4gICAgICAnR0VUJyxcbiAgICAgIGAvJHt0aGlzLnBhZ2VzRW5kcG9pbnR9LzphcHBJZC92ZXJpZnlfZW1haWxgLFxuICAgICAgcmVxID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0Q29uZmlnKHJlcSk7XG4gICAgICB9LFxuICAgICAgcmVxID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmVyaWZ5RW1haWwocmVxKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5yb3V0ZShcbiAgICAgICdQT1NUJyxcbiAgICAgIGAvJHt0aGlzLnBhZ2VzRW5kcG9pbnR9LzphcHBJZC9yZXNlbmRfdmVyaWZpY2F0aW9uX2VtYWlsYCxcbiAgICAgIHJlcSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldENvbmZpZyhyZXEpO1xuICAgICAgfSxcbiAgICAgIHJlcSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc2VuZFZlcmlmaWNhdGlvbkVtYWlsKHJlcSk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucm91dGUoXG4gICAgICAnR0VUJyxcbiAgICAgIGAvJHt0aGlzLnBhZ2VzRW5kcG9pbnR9L2Nob29zZV9wYXNzd29yZGAsXG4gICAgICByZXEgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRDb25maWcocmVxKTtcbiAgICAgIH0sXG4gICAgICByZXEgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXNzd29yZFJlc2V0KHJlcSk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucm91dGUoXG4gICAgICAnUE9TVCcsXG4gICAgICBgLyR7dGhpcy5wYWdlc0VuZHBvaW50fS86YXBwSWQvcmVxdWVzdF9wYXNzd29yZF9yZXNldGAsXG4gICAgICByZXEgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRDb25maWcocmVxKTtcbiAgICAgIH0sXG4gICAgICByZXEgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNldFBhc3N3b3JkKHJlcSk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucm91dGUoXG4gICAgICAnR0VUJyxcbiAgICAgIGAvJHt0aGlzLnBhZ2VzRW5kcG9pbnR9LzphcHBJZC9yZXF1ZXN0X3Bhc3N3b3JkX3Jlc2V0YCxcbiAgICAgIHJlcSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldENvbmZpZyhyZXEpO1xuICAgICAgfSxcbiAgICAgIHJlcSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RSZXNldFBhc3N3b3JkKHJlcSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIG1vdW50Q3VzdG9tUm91dGVzKCkge1xuICAgIGZvciAoY29uc3Qgcm91dGUgb2YgdGhpcy5wYWdlc0NvbmZpZy5jdXN0b21Sb3V0ZXMgfHwgW10pIHtcbiAgICAgIHRoaXMucm91dGUoXG4gICAgICAgIHJvdXRlLm1ldGhvZCxcbiAgICAgICAgYC8ke3RoaXMucGFnZXNFbmRwb2ludH0vOmFwcElkLyR7cm91dGUucGF0aH1gLFxuICAgICAgICByZXEgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNldENvbmZpZyhyZXEpO1xuICAgICAgICB9LFxuICAgICAgICBhc3luYyByZXEgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZmlsZSwgcXVlcnkgPSB7fSB9ID0gKGF3YWl0IHJvdXRlLmhhbmRsZXIocmVxKSkgfHwge307XG5cbiAgICAgICAgICAvLyBJZiByb3V0ZSBoYW5kbGVyIGRpZCBub3QgcmV0dXJuIGEgcGFnZSBzZW5kIDQwNCByZXNwb25zZVxuICAgICAgICAgIGlmICghZmlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubm90Rm91bmQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTZW5kIHBhZ2UgcmVzcG9uc2VcbiAgICAgICAgICBjb25zdCBwYWdlID0gbmV3IFBhZ2UoeyBpZDogZmlsZSwgZGVmYXVsdEZpbGU6IGZpbGUgfSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ29Ub1BhZ2UocmVxLCBwYWdlLCBxdWVyeSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG1vdW50U3RhdGljUm91dGUoKSB7XG4gICAgdGhpcy5yb3V0ZShcbiAgICAgICdHRVQnLFxuICAgICAgYC8ke3RoaXMucGFnZXNFbmRwb2ludH0vKnJlc291cmNlYCxcbiAgICAgIHJlcSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldENvbmZpZyhyZXEsIHRydWUpO1xuICAgICAgfSxcbiAgICAgIHJlcSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRpY1JvdXRlKHJlcSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGV4cHJlc3NSb3V0ZXIoKSB7XG4gICAgY29uc3Qgcm91dGVyID0gZXhwcmVzcy5Sb3V0ZXIoKTtcbiAgICByb3V0ZXIudXNlKCcvJywgc3VwZXIuZXhwcmVzc1JvdXRlcigpKTtcbiAgICByZXR1cm4gcm91dGVyO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhZ2VzUm91dGVyO1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFBhZ2VzUm91dGVyLFxuICBwYWdlUGFyYW1IZWFkZXJQcmVmaXgsXG4gIHBhZ2VQYXJhbXMsXG4gIHBhZ2VzLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsY0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsS0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksR0FBQSxHQUFB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
652
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUHJvbWlzZVJvdXRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX0NvbmZpZyIsIl9leHByZXNzIiwiX3BhdGgiLCJfZnMiLCJfbm9kZSIsIl9VdGlscyIsIl9tdXN0YWNoZSIsIl9QYWdlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwicGFnZXMiLCJPYmplY3QiLCJmcmVlemUiLCJwYXNzd29yZFJlc2V0IiwiUGFnZSIsImlkIiwiZGVmYXVsdEZpbGUiLCJwYXNzd29yZFJlc2V0U3VjY2VzcyIsInBhc3N3b3JkUmVzZXRMaW5rSW52YWxpZCIsImVtYWlsVmVyaWZpY2F0aW9uU3VjY2VzcyIsImVtYWlsVmVyaWZpY2F0aW9uU2VuZEZhaWwiLCJlbWFpbFZlcmlmaWNhdGlvblNlbmRTdWNjZXNzIiwiZW1haWxWZXJpZmljYXRpb25MaW5rSW52YWxpZCIsImVtYWlsVmVyaWZpY2F0aW9uTGlua0V4cGlyZWQiLCJwYWdlUGFyYW1zIiwiYXBwTmFtZSIsImFwcElkIiwidG9rZW4iLCJ1c2VybmFtZSIsImVycm9yIiwibG9jYWxlIiwicHVibGljU2VydmVyVXJsIiwicGFnZVBhcmFtSGVhZGVyUHJlZml4IiwiZXJyb3JzIiwianNvbkZhaWxlZEZpbGVMb2FkaW5nIiwiZmlsZU91dHNpZGVBbGxvd2VkU2NvcGUiLCJQYWdlc1JvdXRlciIsIlByb21pc2VSb3V0ZXIiLCJjb25zdHJ1Y3RvciIsInBhZ2VzQ29uZmlnIiwicGFnZXNFbmRwb2ludCIsInBhZ2VzUGF0aCIsInBhdGgiLCJyZXNvbHZlIiwiX19kaXJuYW1lIiwibG9hZEpzb25SZXNvdXJjZSIsIm1vdW50UGFnZXNSb3V0ZXMiLCJtb3VudEN1c3RvbVJvdXRlcyIsIm1vdW50U3RhdGljUm91dGUiLCJ2ZXJpZnlFbWFpbCIsInJlcSIsImNvbmZpZyIsInJhd1Rva2VuIiwicXVlcnkiLCJ0b1N0cmluZyIsImludmFsaWRSZXF1ZXN0IiwiZ29Ub1BhZ2UiLCJ1c2VyQ29udHJvbGxlciIsInRoZW4iLCJyZXNlbmRWZXJpZmljYXRpb25FbWFpbCIsImJvZHkiLCJwYXJhbXMiLCJwdWJsaWNTZXJ2ZXJVUkwiLCJyZXF1ZXN0UmVzZXRQYXNzd29yZCIsImNoZWNrUmVzZXRUb2tlblZhbGlkaXR5IiwiYXBwbGljYXRpb25JZCIsInJlc2V0UGFzc3dvcmQiLCJuZXdfcGFzc3dvcmQiLCJ4aHIiLCJQYXJzZSIsIkVycm9yIiwiT1RIRVJfQ0FVU0UiLCJQQVNTV09SRF9NSVNTSU5HIiwidXBkYXRlUGFzc3dvcmQiLCJQcm9taXNlIiwic3VjY2VzcyIsImVyciIsInJlc3VsdCIsInN0YXR1cyIsInJlc3BvbnNlIiwicGFnZSIsInJlc3BvbnNlVHlwZSIsInJlZGlyZWN0IiwiZm9yY2VSZWRpcmVjdCIsInVuZGVmaW5lZCIsIm1ldGhvZCIsImRlZmF1bHRQYXJhbXMiLCJnZXREZWZhdWx0UGFyYW1zIiwidmFsdWVzIiwiaW5jbHVkZXMiLCJub3RGb3VuZCIsImFzc2lnbiIsImdldExvY2FsZSIsImRlZmF1bHRQYXRoIiwiZGVmYXVsdFBhZ2VQYXRoIiwiZGVmYXVsdFVybCIsImNvbXBvc2VQYWdlVXJsIiwiY3VzdG9tVXJsIiwiY3VzdG9tVXJscyIsIlV0aWxzIiwiaXNQYXRoIiwicmVkaXJlY3RSZXNwb25zZSIsInBsYWNlaG9sZGVycyIsImVuYWJsZUxvY2FsaXphdGlvbiIsImxvY2FsaXphdGlvbkpzb25QYXRoIiwiZ2V0SnNvblBsYWNlaG9sZGVycyIsImdldExvY2FsaXplZFBhdGgiLCJzdWJkaXIiLCJwYWdlUmVzcG9uc2UiLCJzdGF0aWNSb3V0ZSIsInJlbGF0aXZlUGF0aCIsImFic29sdXRlUGF0aCIsImVuZHNXaXRoIiwiZmlsZVJlc3BvbnNlIiwiZ2V0SnNvblRyYW5zbGF0aW9uIiwianNvblBhcmFtZXRlcnMiLCJsb2NhbGl6YXRpb25GYWxsYmFja0xvY2FsZSIsImxhbmd1YWdlIiwic3BsaXQiLCJyZXNvdXJjZSIsInRyYW5zbGF0aW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsIm11c3RhY2hlIiwicmVuZGVyIiwicGFyc2UiLCJkYXRhIiwicmVhZEZpbGUiLCJjb25maWdQbGFjZWhvbGRlcnMiLCJwcm90b3R5cGUiLCJjYWxsIiwiYWxsUGxhY2Vob2xkZXJzIiwicGFyYW1zQW5kUGxhY2Vob2xkZXJzIiwiZW5jb2RlIiwiZW5jb2RlUGFnZVBhcmFtSGVhZGVycyIsImhlYWRlcnMiLCJlbnRyaWVzIiwicmVkdWNlIiwibSIsInAiLCJ0b0xvd2VyQ2FzZSIsImVuY29kZVVSSUNvbXBvbmVudCIsInRleHQiLCJmaWxlUGF0aCIsIm5vcm1hbGl6ZWRQYXRoIiwibm9ybWFsaXplIiwic3RhcnRzV2l0aCIsInNlcCIsImZzIiwianNvbiIsInVybCIsImxvY2F0aW9uIiwiVVJMIiwiZm9yRWFjaCIsInNlYXJjaFBhcmFtcyIsInNldCIsImxvY2F0aW9uU3RyaW5nIiwiZmlsZSIsImpvaW4iLCJtZXNzYWdlIiwic2V0Q29uZmlnIiwiZmFpbEdyYWNlZnVsbHkiLCJDb25maWciLCJnZXQiLCJsb2FkS2V5cyIsInJvdXRlIiwiY3VzdG9tUm91dGVzIiwiaGFuZGxlciIsImV4cHJlc3NSb3V0ZXIiLCJyb3V0ZXIiLCJleHByZXNzIiwiUm91dGVyIiwidXNlIiwiZXhwb3J0cyIsIl9kZWZhdWx0IiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1JvdXRlcnMvUGFnZXNSb3V0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFByb21pc2VSb3V0ZXIgZnJvbSAnLi4vUHJvbWlzZVJvdXRlcic7XG5pbXBvcnQgQ29uZmlnIGZyb20gJy4uL0NvbmZpZyc7XG5pbXBvcnQgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBQYXJzZSB9IGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uL1V0aWxzJztcbmltcG9ydCBtdXN0YWNoZSBmcm9tICdtdXN0YWNoZSc7XG5pbXBvcnQgUGFnZSBmcm9tICcuLi9QYWdlJztcblxuLy8gQWxsIHBhZ2VzIHdpdGggY3VzdG9tIHBhZ2Uga2V5IGZvciByZWZlcmVuY2UgYW5kIGZpbGUgbmFtZVxuY29uc3QgcGFnZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgcGFzc3dvcmRSZXNldDogbmV3IFBhZ2UoeyBpZDogJ3Bhc3N3b3JkUmVzZXQnLCBkZWZhdWx0RmlsZTogJ3Bhc3N3b3JkX3Jlc2V0Lmh0bWwnIH0pLFxuICBwYXNzd29yZFJlc2V0U3VjY2VzczogbmV3IFBhZ2Uoe1xuICAgIGlkOiAncGFzc3dvcmRSZXNldFN1Y2Nlc3MnLFxuICAgIGRlZmF1bHRGaWxlOiAncGFzc3dvcmRfcmVzZXRfc3VjY2Vzcy5odG1sJyxcbiAgfSksXG4gIHBhc3N3b3JkUmVzZXRMaW5rSW52YWxpZDogbmV3IFBhZ2Uoe1xuICAgIGlkOiAncGFzc3dvcmRSZXNldExpbmtJbnZhbGlkJyxcbiAgICBkZWZhdWx0RmlsZTogJ3Bhc3N3b3JkX3Jlc2V0X2xpbmtfaW52YWxpZC5odG1sJyxcbiAgfSksXG4gIGVtYWlsVmVyaWZpY2F0aW9uU3VjY2VzczogbmV3IFBhZ2Uoe1xuICAgIGlkOiAnZW1haWxWZXJpZmljYXRpb25TdWNjZXNzJyxcbiAgICBkZWZhdWx0RmlsZTogJ2VtYWlsX3ZlcmlmaWNhdGlvbl9zdWNjZXNzLmh0bWwnLFxuICB9KSxcbiAgZW1haWxWZXJpZmljYXRpb25TZW5kRmFpbDogbmV3IFBhZ2Uoe1xuICAgIGlkOiAnZW1haWxWZXJpZmljYXRpb25TZW5kRmFpbCcsXG4gICAgZGVmYXVsdEZpbGU6ICdlbWFpbF92ZXJpZmljYXRpb25fc2VuZF9mYWlsLmh0bWwnLFxuICB9KSxcbiAgZW1haWxWZXJpZmljYXRpb25TZW5kU3VjY2VzczogbmV3IFBhZ2Uoe1xuICAgIGlkOiAnZW1haWxWZXJpZmljYXRpb25TZW5kU3VjY2VzcycsXG4gICAgZGVmYXVsdEZpbGU6ICdlbWFpbF92ZXJpZmljYXRpb25fc2VuZF9zdWNjZXNzLmh0bWwnLFxuICB9KSxcbiAgZW1haWxWZXJpZmljYXRpb25MaW5rSW52YWxpZDogbmV3IFBhZ2Uoe1xuICAgIGlkOiAnZW1haWxWZXJpZmljYXRpb25MaW5rSW52YWxpZCcsXG4gICAgZGVmYXVsdEZpbGU6ICdlbWFpbF92ZXJpZmljYXRpb25fbGlua19pbnZhbGlkLmh0bWwnLFxuICB9KSxcbiAgZW1haWxWZXJpZmljYXRpb25MaW5rRXhwaXJlZDogbmV3IFBhZ2Uoe1xuICAgIGlkOiAnZW1haWxWZXJpZmljYXRpb25MaW5rRXhwaXJlZCcsXG4gICAgZGVmYXVsdEZpbGU6ICdlbWFpbF92ZXJpZmljYXRpb25fbGlua19leHBpcmVkLmh0bWwnLFxuICB9KSxcbn0pO1xuXG4vLyBBbGwgcGFnZSBwYXJhbWV0ZXJzIGZvciByZWZlcmVuY2UgdG8gYmUgdXNlZCBhcyB0ZW1wbGF0ZSBwbGFjZWhvbGRlcnMgb3IgcXVlcnkgcGFyYW1zXG5jb25zdCBwYWdlUGFyYW1zID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGFwcE5hbWU6ICdhcHBOYW1lJyxcbiAgYXBwSWQ6ICdhcHBJZCcsXG4gIHRva2VuOiAndG9rZW4nLFxuICB1c2VybmFtZTogJ3VzZXJuYW1lJyxcbiAgZXJyb3I6ICdlcnJvcicsXG4gIGxvY2FsZTogJ2xvY2FsZScsXG4gIHB1YmxpY1NlcnZlclVybDogJ3B1YmxpY1NlcnZlclVybCcsXG59KTtcblxuLy8gVGhlIGhlYWRlciBwcmVmaXggdG8gYWRkIHBhZ2UgcGFyYW1zIGFzIHJlc3BvbnNlIGhlYWRlcnNcbmNvbnN0IHBhZ2VQYXJhbUhlYWRlclByZWZpeCA9ICd4LXBhcnNlLXBhZ2UtcGFyYW0tJztcblxuLy8gVGhlIGVycm9ycyBiZWluZyB0aHJvd25cbmNvbnN0IGVycm9ycyA9IE9iamVjdC5mcmVlemUoe1xuICBqc29uRmFpbGVkRmlsZUxvYWRpbmc6ICdmYWlsZWQgdG8gbG9hZCBKU09OIGZpbGUnLFxuICBmaWxlT3V0c2lkZUFsbG93ZWRTY29wZTogJ25vdCBhbGxvd2VkIHRvIHJlYWQgZmlsZSBvdXRzaWRlIG9mIHBhZ2VzIGRpcmVjdG9yeScsXG59KTtcblxuZXhwb3J0IGNsYXNzIFBhZ2VzUm91dGVyIGV4dGVuZHMgUHJvbWlzZVJvdXRlciB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgUGFnZXNSb3V0ZXIuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYWdlcyBUaGUgcGFnZXMgb3B0aW9ucyBmcm9tIHRoZSBQYXJzZSBTZXJ2ZXIgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHBhZ2VzID0ge30pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgLy8gU2V0IGluc3RhbmNlIHByb3BlcnRpZXNcbiAgICB0aGlzLnBhZ2VzQ29uZmlnID0gcGFnZXM7XG4gICAgdGhpcy5wYWdlc0VuZHBvaW50ID0gcGFnZXMucGFnZXNFbmRwb2ludCA/IHBhZ2VzLnBhZ2VzRW5kcG9pbnQgOiAnYXBwcyc7XG4gICAgdGhpcy5wYWdlc1BhdGggPSBwYWdlcy5wYWdlc1BhdGhcbiAgICAgID8gcGF0aC5yZXNvbHZlKCcuLycsIHBhZ2VzLnBhZ2VzUGF0aClcbiAgICAgIDogcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uLy4uL3B1YmxpYycpO1xuICAgIHRoaXMubG9hZEpzb25SZXNvdXJjZSgpO1xuICAgIHRoaXMubW91bnRQYWdlc1JvdXRlcygpO1xuICAgIHRoaXMubW91bnRDdXN0b21Sb3V0ZXMoKTtcbiAgICB0aGlzLm1vdW50U3RhdGljUm91dGUoKTtcbiAgfVxuXG4gIHZlcmlmeUVtYWlsKHJlcSkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgY29uc3QgeyB0b2tlbjogcmF3VG9rZW4gfSA9IHJlcS5xdWVyeTtcbiAgICBjb25zdCB0b2tlbiA9IHJhd1Rva2VuICYmIHR5cGVvZiByYXdUb2tlbiAhPT0gJ3N0cmluZycgPyByYXdUb2tlbi50b1N0cmluZygpIDogcmF3VG9rZW47XG5cbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgdGhpcy5pbnZhbGlkUmVxdWVzdCgpO1xuICAgIH1cblxuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdvVG9QYWdlKHJlcSwgcGFnZXMuZW1haWxWZXJpZmljYXRpb25MaW5rSW52YWxpZCk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckNvbnRyb2xsZXIgPSBjb25maWcudXNlckNvbnRyb2xsZXI7XG4gICAgcmV0dXJuIHVzZXJDb250cm9sbGVyLnZlcmlmeUVtYWlsKHRva2VuKS50aGVuKFxuICAgICAgKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nb1RvUGFnZShyZXEsIHBhZ2VzLmVtYWlsVmVyaWZpY2F0aW9uU3VjY2Vzcyk7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nb1RvUGFnZShyZXEsIHBhZ2VzLmVtYWlsVmVyaWZpY2F0aW9uTGlua0ludmFsaWQpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICByZXNlbmRWZXJpZmljYXRpb25FbWFpbChyZXEpIHtcbiAgICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICAgIGNvbnN0IHVzZXJuYW1lID0gcmVxLmJvZHk/LnVzZXJuYW1lO1xuICAgIGNvbnN0IHJhd1Rva2VuID0gcmVxLmJvZHk/LnRva2VuO1xuICAgIGNvbnN0IHRva2VuID0gcmF3VG9rZW4gJiYgdHlwZW9mIHJhd1Rva2VuICE9PSAnc3RyaW5nJyA/IHJhd1Rva2VuLnRvU3RyaW5nKCkgOiByYXdUb2tlbjtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICB0aGlzLmludmFsaWRSZXF1ZXN0KCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VybmFtZSAmJiAhdG9rZW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdvVG9QYWdlKHJlcSwgcGFnZXMuZW1haWxWZXJpZmljYXRpb25MaW5rSW52YWxpZCk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckNvbnRyb2xsZXIgPSBjb25maWcudXNlckNvbnRyb2xsZXI7XG5cbiAgICByZXR1cm4gdXNlckNvbnRyb2xsZXIucmVzZW5kVmVyaWZpY2F0aW9uRW1haWwodXNlcm5hbWUsIHJlcSwgdG9rZW4pLnRoZW4oXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvVG9QYWdlKHJlcSwgcGFnZXMuZW1haWxWZXJpZmljYXRpb25TZW5kU3VjY2Vzcyk7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nb1RvUGFnZShyZXEsIHBhZ2VzLmVtYWlsVmVyaWZpY2F0aW9uU2VuZEZhaWwpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwYXNzd29yZFJlc2V0KHJlcSkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgW3BhZ2VQYXJhbXMuYXBwSWRdOiByZXEucGFyYW1zLmFwcElkLFxuICAgICAgW3BhZ2VQYXJhbXMuYXBwTmFtZV06IGNvbmZpZy5hcHBOYW1lLFxuICAgICAgW3BhZ2VQYXJhbXMudG9rZW5dOiByZXEucXVlcnkudG9rZW4sXG4gICAgICBbcGFnZVBhcmFtcy51c2VybmFtZV06IHJlcS5xdWVyeS51c2VybmFtZSxcbiAgICAgIFtwYWdlUGFyYW1zLnB1YmxpY1NlcnZlclVybF06IGNvbmZpZy5wdWJsaWNTZXJ2ZXJVUkwsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5nb1RvUGFnZShyZXEsIHBhZ2VzLnBhc3N3b3JkUmVzZXQsIHBhcmFtcyk7XG4gIH1cblxuICByZXF1ZXN0UmVzZXRQYXNzd29yZChyZXEpIHtcbiAgICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuXG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIHRoaXMuaW52YWxpZFJlcXVlc3QoKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHRva2VuOiByYXdUb2tlbiB9ID0gcmVxLnF1ZXJ5O1xuICAgIGNvbnN0IHRva2VuID0gcmF3VG9rZW4gJiYgdHlwZW9mIHJhd1Rva2VuICE9PSAnc3RyaW5nJyA/IHJhd1Rva2VuLnRvU3RyaW5nKCkgOiByYXdUb2tlbjtcblxuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdvVG9QYWdlKHJlcSwgcGFnZXMucGFzc3dvcmRSZXNldExpbmtJbnZhbGlkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnLnVzZXJDb250cm9sbGVyLmNoZWNrUmVzZXRUb2tlblZhbGlkaXR5KHRva2VuKS50aGVuKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgW3BhZ2VQYXJhbXMudG9rZW5dOiB0b2tlbixcbiAgICAgICAgICBbcGFnZVBhcmFtcy5hcHBJZF06IGNvbmZpZy5hcHBsaWNhdGlvbklkLFxuICAgICAgICAgIFtwYWdlUGFyYW1zLmFwcE5hbWVdOiBjb25maWcuYXBwTmFtZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ29Ub1BhZ2UocmVxLCBwYWdlcy5wYXNzd29yZFJlc2V0LCBwYXJhbXMpO1xuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ29Ub1BhZ2UocmVxLCBwYWdlcy5wYXNzd29yZFJlc2V0TGlua0ludmFsaWQpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICByZXNldFBhc3N3b3JkKHJlcSkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG5cbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgdGhpcy5pbnZhbGlkUmVxdWVzdCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgbmV3X3Bhc3N3b3JkLCB0b2tlbjogcmF3VG9rZW4gfSA9IHJlcS5ib2R5IHx8IHt9O1xuICAgIGNvbnN0IHRva2VuID0gcmF3VG9rZW4gJiYgdHlwZW9mIHJhd1Rva2VuICE9PSAnc3RyaW5nJyA/IHJhd1Rva2VuLnRvU3RyaW5nKCkgOiByYXdUb2tlbjtcblxuICAgIGlmICgoIXRva2VuIHx8ICFuZXdfcGFzc3dvcmQpICYmIHJlcS54aHIgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5nb1RvUGFnZShyZXEsIHBhZ2VzLnBhc3N3b3JkUmVzZXRMaW5rSW52YWxpZCk7XG4gICAgfVxuXG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9USEVSX0NBVVNFLCAnTWlzc2luZyB0b2tlbicpO1xuICAgIH1cblxuICAgIGlmICghbmV3X3Bhc3N3b3JkKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuUEFTU1dPUkRfTUlTU0lORywgJ01pc3NpbmcgcGFzc3dvcmQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnLnVzZXJDb250cm9sbGVyXG4gICAgICAudXBkYXRlUGFzc3dvcmQodG9rZW4sIG5ld19wYXNzd29yZClcbiAgICAgIC50aGVuKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnIsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXEueGhyKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgICAgICAgIHJlc3BvbnNlOiAnUGFzc3dvcmQgc3VjY2Vzc2Z1bGx5IHJlc2V0JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0LmVycikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9USEVSX0NBVVNFLCBgJHtyZXN1bHQuZXJyfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gcmVzdWx0LnN1Y2Nlc3NcbiAgICAgICAgICA/IHt9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICBbcGFnZVBhcmFtcy50b2tlbl06IHRva2VuLFxuICAgICAgICAgICAgW3BhZ2VQYXJhbXMuYXBwSWRdOiBjb25maWcuYXBwbGljYXRpb25JZCxcbiAgICAgICAgICAgIFtwYWdlUGFyYW1zLmVycm9yXTogcmVzdWx0LmVycixcbiAgICAgICAgICAgIFtwYWdlUGFyYW1zLmFwcE5hbWVdOiBjb25maWcuYXBwTmFtZSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgIGlmIChyZXN1bHQ/LmVyciA9PT0gJ1RoZSBwYXNzd29yZCByZXNldCBsaW5rIGhhcyBleHBpcmVkJykge1xuICAgICAgICAgIGRlbGV0ZSBxdWVyeVtwYWdlUGFyYW1zLnRva2VuXTtcbiAgICAgICAgICBxdWVyeVtwYWdlUGFyYW1zLnRva2VuXSA9IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhZ2UgPSByZXN1bHQuc3VjY2VzcyA/IHBhZ2VzLnBhc3N3b3JkUmVzZXRTdWNjZXNzIDogcGFnZXMucGFzc3dvcmRSZXNldDtcblxuICAgICAgICByZXR1cm4gdGhpcy5nb1RvUGFnZShyZXEsIHBhZ2UsIHF1ZXJ5LCBmYWxzZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHBhZ2UgY29udGVudCBpZiB0aGUgcGFnZSBpcyBhIGxvY2FsIGZpbGUgb3IgcmV0dXJucyBhXG4gICAqIHJlZGlyZWN0IHRvIGEgY3VzdG9tIHBhZ2UuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSByZXEgVGhlIGV4cHJlc3MgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtQYWdlfSBwYWdlIFRoZSBwYWdlIHRvIGdvIHRvLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcz17fV0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gYXR0YWNoIHRvIHRoZSBVUkwgaW4gY2FzZSBvZlxuICAgKiBIVFRQIHJlZGlyZWN0IHJlc3BvbnNlcyBmb3IgUE9TVCByZXF1ZXN0cywgb3IgdGhlIHBsYWNlaG9sZGVycyB0byBmaWxsIGludG9cbiAgICogdGhlIHJlc3BvbnNlIGNvbnRlbnQgaW4gY2FzZSBvZiBIVFRQIGNvbnRlbnQgcmVzcG9uc2VzIGZvciBHRVQgcmVxdWVzdHMuXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW3Jlc3BvbnNlVHlwZV0gSXMgdHJ1ZSBpZiBhIHJlZGlyZWN0IHJlc3BvbnNlIHNob3VsZCBiZSBmb3JjZWQsXG4gICAqIGZhbHNlIGlmIGEgY29udGVudCByZXNwb25zZSBzaG91bGQgYmUgZm9yY2VkLCB1bmRlZmluZWQgaWYgdGhlIHJlc3BvbnNlIHR5cGVcbiAgICogc2hvdWxkIGRlcGVuZCBvbiB0aGUgcmVxdWVzdCB0eXBlIGJ5IGRlZmF1bHQ6XG4gICAqIC0gR0VUIHJlcXVlc3QgLT4gY29udGVudCByZXNwb25zZVxuICAgKiAtIFBPU1QgcmVxdWVzdCAtPiByZWRpcmVjdCByZXNwb25zZSAoUFJHIHBhdHRlcm4pXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdD59IFRoZSBQcm9taXNlUm91dGVyIHJlc3BvbnNlLlxuICAgKi9cbiAgZ29Ub1BhZ2UocmVxLCBwYWdlLCBwYXJhbXMgPSB7fSwgcmVzcG9uc2VUeXBlKSB7XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcblxuICAgIC8vIERldGVybWluZSByZWRpcmVjdCBlaXRoZXIgYnkgZm9yY2UsIHJlc3BvbnNlIHNldHRpbmcgb3IgcmVxdWVzdCBtZXRob2RcbiAgICBjb25zdCByZWRpcmVjdCA9IGNvbmZpZy5wYWdlcy5mb3JjZVJlZGlyZWN0XG4gICAgICA/IHRydWVcbiAgICAgIDogcmVzcG9uc2VUeXBlICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyByZXNwb25zZVR5cGVcbiAgICAgICAgOiByZXEubWV0aG9kID09ICdQT1NUJztcblxuICAgIC8vIEluY2x1ZGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG4gICAgY29uc3QgZGVmYXVsdFBhcmFtcyA9IHRoaXMuZ2V0RGVmYXVsdFBhcmFtcyhjb25maWcpO1xuICAgIGlmIChPYmplY3QudmFsdWVzKGRlZmF1bHRQYXJhbXMpLmluY2x1ZGVzKHVuZGVmaW5lZCkpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vdEZvdW5kKCk7XG4gICAgfVxuICAgIHBhcmFtcyA9IE9iamVjdC5hc3NpZ24ocGFyYW1zLCBkZWZhdWx0UGFyYW1zKTtcblxuICAgIC8vIEFkZCBsb2NhbGUgdG8gcGFyYW1zIHRvIGVuc3VyZSBpdCBpcyBwYXNzZWQgb24gd2l0aCBldmVyeSByZXF1ZXN0O1xuICAgIC8vIHRoYXQgbWVhbnMsIG9uY2UgYSBsb2NhbGUgaXMgc2V0LCBpdCBpcyBwYXNzZWQgb24gdG8gYW55IGZvbGxvdy11cCBwYWdlLFxuICAgIC8vIGUuZy4gcmVxdWVzdF9wYXNzd29yZF9yZXNldCAtPiBwYXNzd29yZF9yZXNldCAtPiBwYXNzd29yZF9yZXNldF9zdWNjZXNzXG4gICAgY29uc3QgbG9jYWxlID0gdGhpcy5nZXRMb2NhbGUocmVxKTtcbiAgICBwYXJhbXNbcGFnZVBhcmFtcy5sb2NhbGVdID0gbG9jYWxlO1xuXG4gICAgLy8gQ29tcG9zZSBwYXRocyBhbmQgVVJMc1xuICAgIGNvbnN0IGRlZmF1bHRGaWxlID0gcGFnZS5kZWZhdWx0RmlsZTtcbiAgICBjb25zdCBkZWZhdWx0UGF0aCA9IHRoaXMuZGVmYXVsdFBhZ2VQYXRoKGRlZmF1bHRGaWxlKTtcbiAgICBjb25zdCBkZWZhdWx0VXJsID0gdGhpcy5jb21wb3NlUGFnZVVybChkZWZhdWx0RmlsZSwgY29uZmlnLnB1YmxpY1NlcnZlclVSTCk7XG5cbiAgICAvLyBJZiBjdXN0b20gVVJMIGlzIHNldCByZWRpcmVjdCB0byBpdCB3aXRob3V0IGxvY2FsaXphdGlvblxuICAgIGNvbnN0IGN1c3RvbVVybCA9IGNvbmZpZy5wYWdlcy5jdXN0b21VcmxzW3BhZ2UuaWRdO1xuICAgIGlmIChjdXN0b21VcmwgJiYgIVV0aWxzLmlzUGF0aChjdXN0b21VcmwpKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZWRpcmVjdFJlc3BvbnNlKGN1c3RvbVVybCwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgSlNPTiBwbGFjZWhvbGRlcnNcbiAgICBsZXQgcGxhY2Vob2xkZXJzID0ge307XG4gICAgaWYgKGNvbmZpZy5wYWdlcy5lbmFibGVMb2NhbGl6YXRpb24gJiYgY29uZmlnLnBhZ2VzLmxvY2FsaXphdGlvbkpzb25QYXRoKSB7XG4gICAgICBwbGFjZWhvbGRlcnMgPSB0aGlzLmdldEpzb25QbGFjZWhvbGRlcnMobG9jYWxlLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIC8vIFNlbmQgcmVzcG9uc2VcbiAgICBpZiAoY29uZmlnLnBhZ2VzLmVuYWJsZUxvY2FsaXphdGlvbiAmJiBsb2NhbGUpIHtcbiAgICAgIHJldHVybiBVdGlscy5nZXRMb2NhbGl6ZWRQYXRoKGRlZmF1bHRQYXRoLCBsb2NhbGUpLnRoZW4oKHsgcGF0aCwgc3ViZGlyIH0pID0+XG4gICAgICAgIHJlZGlyZWN0XG4gICAgICAgICAgPyB0aGlzLnJlZGlyZWN0UmVzcG9uc2UoXG4gICAgICAgICAgICB0aGlzLmNvbXBvc2VQYWdlVXJsKGRlZmF1bHRGaWxlLCBjb25maWcucHVibGljU2VydmVyVVJMLCBzdWJkaXIpLFxuICAgICAgICAgICAgcGFyYW1zXG4gICAgICAgICAgKVxuICAgICAgICAgIDogdGhpcy5wYWdlUmVzcG9uc2UocGF0aCwgcGFyYW1zLCBwbGFjZWhvbGRlcnMpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVkaXJlY3RcbiAgICAgICAgPyB0aGlzLnJlZGlyZWN0UmVzcG9uc2UoZGVmYXVsdFVybCwgcGFyYW1zKVxuICAgICAgICA6IHRoaXMucGFnZVJlc3BvbnNlKGRlZmF1bHRQYXRoLCBwYXJhbXMsIHBsYWNlaG9sZGVycyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlcnZlcyBhIHJlcXVlc3QgdG8gYSBzdGF0aWMgcmVzb3VyY2UgYW5kIGxvY2FsaXplcyB0aGUgcmVzb3VyY2UgaWYgaXRcbiAgICogaXMgYSBIVE1MIGZpbGUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSByZXEgVGhlIHJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fSBUaGUgcmVzcG9uc2UuXG4gICAqL1xuICBzdGF0aWNSb3V0ZShyZXEpIHtcbiAgICAvLyBHZXQgcmVxdWVzdGVkIHBhdGhcbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSByZXEucGFyYW1zWydyZXNvdXJjZSddWzBdO1xuXG4gICAgLy8gUmVzb2x2ZSByZXF1ZXN0ZWQgcGF0aCB0byBhYnNvbHV0ZSBwYXRoXG4gICAgY29uc3QgYWJzb2x1dGVQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMucGFnZXNQYXRoLCByZWxhdGl2ZVBhdGgpO1xuXG4gICAgLy8gSWYgdGhlIHJlcXVlc3RlZCBmaWxlIGlzIG5vdCBhIEhUTUwgZmlsZSBzZW5kIGl0cyByYXcgY29udGVudFxuICAgIGlmICghYWJzb2x1dGVQYXRoIHx8ICFhYnNvbHV0ZVBhdGguZW5kc1dpdGgoJy5odG1sJykpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbGVSZXNwb25zZShhYnNvbHV0ZVBhdGgpO1xuICAgIH1cblxuICAgIC8vIEdldCBwYXJhbWV0ZXJzXG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5nZXREZWZhdWx0UGFyYW1zKHJlcS5jb25maWcpO1xuICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMuZ2V0TG9jYWxlKHJlcSk7XG4gICAgaWYgKGxvY2FsZSkge1xuICAgICAgcGFyYW1zLmxvY2FsZSA9IGxvY2FsZTtcbiAgICB9XG5cbiAgICAvLyBHZXQgSlNPTiBwbGFjZWhvbGRlcnNcbiAgICBjb25zdCBwbGFjZWhvbGRlcnMgPSB0aGlzLmdldEpzb25QbGFjZWhvbGRlcnMobG9jYWxlLCBwYXJhbXMpO1xuXG4gICAgcmV0dXJuIHRoaXMucGFnZVJlc3BvbnNlKGFic29sdXRlUGF0aCwgcGFyYW1zLCBwbGFjZWhvbGRlcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSB0cmFuc2xhdGlvbiBmcm9tIHRoZSBKU09OIHJlc291cmNlIGZvciBhIGdpdmVuIGxvY2FsZS4gVGhlIEpTT05cbiAgICogcmVzb3VyY2UgaXMgcGFyc2VkIGFjY29yZGluZyB0byBpMThuZXh0IHN5bnRheC5cbiAgICpcbiAgICogRXhhbXBsZSBKU09OIGNvbnRlbnQ6XG4gICAqIGBgYGpzXG4gICAqICB7XG4gICAqICAgIFwiZW5cIjogeyAgICAgICAgICAgICAgIC8vIHJlc291cmNlIGZvciBsYW5ndWFnZSBgZW5gIChFbmdsaXNoKVxuICAgKiAgICAgIFwidHJhbnNsYXRpb25cIjoge1xuICAgKiAgICAgICAgXCJncmVldGluZ1wiOiBcIkhlbGxvIVwiXG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICBcImRlXCI6IHsgICAgICAgICAgICAgICAvLyByZXNvdXJjZSBmb3IgbGFuZ3VhZ2UgYGRlYCAoR2VybWFuKVxuICAgKiAgICAgIFwidHJhbnNsYXRpb25cIjoge1xuICAgKiAgICAgICAgXCJncmVldGluZ1wiOiBcIkhhbGxvIVwiXG4gICAqICAgICAgfVxuICAgKiAgICB9XG4gICAqICAgIFwiZGUtQ0hcIjogeyAgICAgICAgICAgIC8vIHJlc291cmNlIGZvciBsb2NhbGUgYGRlLUNIYCAoU3dpc3MgR2VybWFuKVxuICAgKiAgICAgIFwidHJhbnNsYXRpb25cIjoge1xuICAgKiAgICAgICAgXCJncmVldGluZ1wiOiBcIkdyw7xlemkhXCJcbiAgICogICAgICB9XG4gICAqICAgIH1cbiAgICogIH1cbiAgICogYGBgXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBsb2NhbGUgVGhlIGxvY2FsZSB0byB0cmFuc2xhdGUgdG8uXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSB0cmFuc2xhdGlvbiBvciBhbiBlbXB0eSBvYmplY3QgaWYgbm8gbWF0Y2hpbmdcbiAgICogdHJhbnNsYXRpb24gd2FzIGZvdW5kLlxuICAgKi9cbiAgZ2V0SnNvblRyYW5zbGF0aW9uKGxvY2FsZSkge1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIEpTT04gcmVzb3VyY2VcbiAgICBpZiAodGhpcy5qc29uUGFyYW1ldGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLy8gSWYgbG9jYWxlIGlzIG5vdCBzZXQgdXNlIHRoZSBmYWxsYmFjayBsb2NhbGVcbiAgICBsb2NhbGUgPSBsb2NhbGUgfHwgdGhpcy5wYWdlc0NvbmZpZy5sb2NhbGl6YXRpb25GYWxsYmFja0xvY2FsZTtcblxuICAgIC8vIEdldCBtYXRjaGluZyB0cmFuc2xhdGlvbiBieSBsb2NhbGUsIGxhbmd1YWdlIG9yIGZhbGxiYWNrIGxvY2FsZVxuICAgIGNvbnN0IGxhbmd1YWdlID0gbG9jYWxlLnNwbGl0KCctJylbMF07XG4gICAgY29uc3QgcmVzb3VyY2UgPVxuICAgICAgdGhpcy5qc29uUGFyYW1ldGVyc1tsb2NhbGVdIHx8XG4gICAgICB0aGlzLmpzb25QYXJhbWV0ZXJzW2xhbmd1YWdlXSB8fFxuICAgICAgdGhpcy5qc29uUGFyYW1ldGVyc1t0aGlzLnBhZ2VzQ29uZmlnLmxvY2FsaXphdGlvbkZhbGxiYWNrTG9jYWxlXSB8fFxuICAgICAge307XG4gICAgY29uc3QgdHJhbnNsYXRpb24gPSByZXNvdXJjZS50cmFuc2xhdGlvbiB8fCB7fTtcbiAgICByZXR1cm4gdHJhbnNsYXRpb247XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHRyYW5zbGF0aW9uIGZyb20gdGhlIEpTT04gcmVzb3VyY2UgZm9yIGEgZ2l2ZW4gbG9jYWxlIHdpdGhcbiAgICogcGxhY2Vob2xkZXJzIGZpbGxlZCBpbiBieSBnaXZlbiBwYXJhbWV0ZXJzLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gbG9jYWxlIFRoZSBsb2NhbGUgdG8gdHJhbnNsYXRlIHRvLlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIFRoZSBwYXJhbWV0ZXJzIHRvIGZpbGwgaW50byBhbnkgcGxhY2Vob2xkZXJzXG4gICAqIHdpdGhpbiB0aGUgdHJhbnNsYXRpb25zLlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgdHJhbnNsYXRpb24gb3IgYW4gZW1wdHkgb2JqZWN0IGlmIG5vIG1hdGNoaW5nXG4gICAqIHRyYW5zbGF0aW9uIHdhcyBmb3VuZC5cbiAgICovXG4gIGdldEpzb25QbGFjZWhvbGRlcnMobG9jYWxlLCBwYXJhbXMgPSB7fSkge1xuICAgIC8vIElmIGxvY2FsaXphdGlvbiBpcyBkaXNhYmxlZCBvciB0aGVyZSBpcyBubyBKU09OIHJlc291cmNlXG4gICAgaWYgKCF0aGlzLnBhZ2VzQ29uZmlnLmVuYWJsZUxvY2FsaXphdGlvbiB8fCAhdGhpcy5wYWdlc0NvbmZpZy5sb2NhbGl6YXRpb25Kc29uUGF0aCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8vIEdldCBKU09OIHBsYWNlaG9sZGVyc1xuICAgIGxldCBwbGFjZWhvbGRlcnMgPSB0aGlzLmdldEpzb25UcmFuc2xhdGlvbihsb2NhbGUpO1xuXG4gICAgLy8gRmlsbCBpbiBhbnkgcGxhY2Vob2xkZXJzIGluIHRoZSB0cmFuc2xhdGlvbjsgdGhpcyBhbGxvd3MgYSB0cmFuc2xhdGlvblxuICAgIC8vIHRvIGNvbnRhaW4gZGVmYXVsdCBwbGFjZWhvbGRlcnMgbGlrZSB7e2FwcE5hbWV9fSB3aGljaCBhcmUgZmlsbGVkIGhlcmVcbiAgICBwbGFjZWhvbGRlcnMgPSBKU09OLnN0cmluZ2lmeShwbGFjZWhvbGRlcnMpO1xuICAgIHBsYWNlaG9sZGVycyA9IG11c3RhY2hlLnJlbmRlcihwbGFjZWhvbGRlcnMsIHBhcmFtcyk7XG4gICAgcGxhY2Vob2xkZXJzID0gSlNPTi5wYXJzZShwbGFjZWhvbGRlcnMpO1xuXG4gICAgcmV0dXJuIHBsYWNlaG9sZGVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcmVzcG9uc2Ugd2l0aCBmaWxlIGNvbnRlbnQuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBmaWxlIHRvIHJldHVybi5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXM9e31dIFRoZSBwYXJhbWV0ZXJzIHRvIGJlIGluY2x1ZGVkIGluIHRoZSByZXNwb25zZVxuICAgKiBoZWFkZXIuIFRoZXNlIHdpbGwgYWxzbyBiZSB1c2VkIHRvIGZpbGwgcGxhY2Vob2xkZXJzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW3BsYWNlaG9sZGVycz17fV0gVGhlIHBsYWNlaG9sZGVycyB0byBmaWxsIGluIHRoZSBjb250ZW50LlxuICAgKiBUaGVzZSB3aWxsIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgcmVzcG9uc2UgaGVhZGVyLlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgUHJvbWlzZSBSb3V0ZXIgcmVzcG9uc2UuXG4gICAqL1xuICBhc3luYyBwYWdlUmVzcG9uc2UocGF0aCwgcGFyYW1zID0ge30sIHBsYWNlaG9sZGVycyA9IHt9KSB7XG4gICAgLy8gR2V0IGZpbGUgY29udGVudFxuICAgIGxldCBkYXRhO1xuICAgIHRyeSB7XG4gICAgICBkYXRhID0gYXdhaXQgdGhpcy5yZWFkRmlsZShwYXRoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB0aGlzLm5vdEZvdW5kKCk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGNvbmZpZyBwbGFjZWhvbGRlcnM7IGNhbiBiZSBhbiBvYmplY3QsIGEgZnVuY3Rpb24gb3IgYW4gYXN5bmMgZnVuY3Rpb25cbiAgICBsZXQgY29uZmlnUGxhY2Vob2xkZXJzID1cbiAgICAgIHR5cGVvZiB0aGlzLnBhZ2VzQ29uZmlnLnBsYWNlaG9sZGVycyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHRoaXMucGFnZXNDb25maWcucGxhY2Vob2xkZXJzKHBhcmFtcylcbiAgICAgICAgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcy5wYWdlc0NvbmZpZy5wbGFjZWhvbGRlcnMpID09PSAnW29iamVjdCBPYmplY3RdJ1xuICAgICAgICAgID8gdGhpcy5wYWdlc0NvbmZpZy5wbGFjZWhvbGRlcnNcbiAgICAgICAgICA6IHt9O1xuICAgIGlmIChjb25maWdQbGFjZWhvbGRlcnMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICBjb25maWdQbGFjZWhvbGRlcnMgPSBhd2FpdCBjb25maWdQbGFjZWhvbGRlcnM7XG4gICAgfVxuXG4gICAgLy8gRmlsbCBwbGFjZWhvbGRlcnNcbiAgICBjb25zdCBhbGxQbGFjZWhvbGRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBjb25maWdQbGFjZWhvbGRlcnMsIHBsYWNlaG9sZGVycyk7XG4gICAgY29uc3QgcGFyYW1zQW5kUGxhY2Vob2xkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zLCBhbGxQbGFjZWhvbGRlcnMpO1xuICAgIGRhdGEgPSBtdXN0YWNoZS5yZW5kZXIoZGF0YSwgcGFyYW1zQW5kUGxhY2Vob2xkZXJzKTtcblxuICAgIC8vIEFkZCBwbGFjZWhvbGRlcnMgaW4gaGVhZGVyIHRvIGFsbG93IHBhcnNpbmcgZm9yIHByb2dyYW1tYXRpYyB1c2VcbiAgICAvLyBvZiByZXNwb25zZSwgaW5zdGVhZCBvZiBoYXZpbmcgdG8gcGFyc2UgdGhlIEhUTUwgY29udGVudC5cbiAgICBjb25zdCBlbmNvZGUgPSB0aGlzLnBhZ2VzQ29uZmlnLmVuY29kZVBhZ2VQYXJhbUhlYWRlcnM7XG4gICAgY29uc3QgaGVhZGVycyA9IE9iamVjdC5lbnRyaWVzKHBhcmFtcykucmVkdWNlKChtLCBwKSA9PiB7XG4gICAgICBpZiAocFsxXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1bYCR7cGFnZVBhcmFtSGVhZGVyUHJlZml4fSR7cFswXS50b0xvd2VyQ2FzZSgpfWBdID0gZW5jb2RlID8gZW5jb2RlVVJJQ29tcG9uZW50KHBbMV0pIDogcFsxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtO1xuICAgIH0sIHt9KTtcblxuICAgIHJldHVybiB7IHRleHQ6IGRhdGEsIGhlYWRlcnM6IGhlYWRlcnMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcmVzcG9uc2Ugd2l0aCBmaWxlIGNvbnRlbnQuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBmaWxlIHRvIHJldHVybi5cbiAgICogQHJldHVybnMge09iamVjdH0gVGhlIFByb21pc2VSb3V0ZXIgcmVzcG9uc2UuXG4gICAqL1xuICBhc3luYyBmaWxlUmVzcG9uc2UocGF0aCkge1xuICAgIC8vIEdldCBmaWxlIGNvbnRlbnRcbiAgICBsZXQgZGF0YTtcbiAgICB0cnkge1xuICAgICAgZGF0YSA9IGF3YWl0IHRoaXMucmVhZEZpbGUocGF0aCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdGhpcy5ub3RGb3VuZCgpO1xuICAgIH1cblxuICAgIHJldHVybiB7IHRleHQ6IGRhdGEgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyBhbmQgcmV0dXJucyB0aGUgY29udGVudCBvZiBhIGZpbGUgYXQgYSBnaXZlbiBwYXRoLiBGaWxlIHJlYWRpbmcgdG9cbiAgICogc2VydmUgY29udGVudCBvbiB0aGUgc3RhdGljIHJvdXRlIGlzIG9ubHkgYWxsb3dlZCBmcm9tIHRoZSBwYWdlc1xuICAgKiBkaXJlY3Rvcnkgb24gZG93bndhcmRzLlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiAqKldBUk5JTkc6KiogQWxsIGZpbGUgcmVhZHMgaW4gdGhlIFBhZ2VzUm91dGVyIG11c3QgYmUgZXhlY3V0ZWQgYnkgdGhpc1xuICAgKiB3cmFwcGVyIGJlY2F1c2UgaXQgYWxzbyBkZXRlY3RzIGFuZCBwcmV2ZW50cyBjb21tb24gZXhwbG9pdHMuXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlUGF0aCBUaGUgcGF0aCB0byB0aGUgZmlsZSB0byByZWFkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxTdHJpbmc+fSBUaGUgZmlsZSBjb250ZW50LlxuICAgKi9cbiAgYXN5bmMgcmVhZEZpbGUoZmlsZVBhdGgpIHtcbiAgICAvLyBOb3JtYWxpemUgcGF0aCB0byBwcmV2ZW50IGl0IGZyb20gY29udGFpbmluZyBhbnkgZGlyZWN0b3J5IGNoYW5naW5nXG4gICAgLy8gVU5JWCBwYXR0ZXJucyB3aGljaCBjb3VsZCBleHBvc2UgdGhlIHdob2xlIGZpbGUgc3lzdGVtLCBlLmcuXG4gICAgLy8gYGh0dHA6Ly9leGFtcGxlLmNvbS9wYXJzZS9hcHBzLy4uL2ZpbGUudHh0YCByZXF1ZXN0cyBhIGZpbGUgb3V0c2lkZVxuICAgIC8vIG9mIHRoZSBwYWdlcyBkaXJlY3Rvcnkgc2NvcGUuXG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBwYXRoLm5vcm1hbGl6ZShmaWxlUGF0aCk7XG5cbiAgICAvLyBBYm9ydCBpZiB0aGUgcGF0aCBpcyBvdXRzaWRlIG9mIHRoZSBwYXRoIGRpcmVjdG9yeSBzY29wZVxuICAgIGlmICghbm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aCh0aGlzLnBhZ2VzUGF0aCArIHBhdGguc2VwKSkge1xuICAgICAgdGhyb3cgZXJyb3JzLmZpbGVPdXRzaWRlQWxsb3dlZFNjb3BlO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBmcy5yZWFkRmlsZShub3JtYWxpemVkUGF0aCwgJ3V0Zi04Jyk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgYSBsYW5ndWFnZSByZXNvdXJjZSBKU09OIGZpbGUgdGhhdCBpcyB1c2VkIGZvciB0cmFuc2xhdGlvbnMuXG4gICAqL1xuICBsb2FkSnNvblJlc291cmNlKCkge1xuICAgIGlmICh0aGlzLnBhZ2VzQ29uZmlnLmxvY2FsaXphdGlvbkpzb25QYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGpzb24gPSByZXF1aXJlKHBhdGgucmVzb2x2ZSgnLi8nLCB0aGlzLnBhZ2VzQ29uZmlnLmxvY2FsaXphdGlvbkpzb25QYXRoKSk7XG4gICAgICB0aGlzLmpzb25QYXJhbWV0ZXJzID0ganNvbjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IGVycm9ycy5qc29uRmFpbGVkRmlsZUxvYWRpbmc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIGFuZCByZXR1cm5zIHRoZSBwYWdlIGRlZmF1bHQgcGFyYW1ldGVycyBmcm9tIHRoZSBQYXJzZSBTZXJ2ZXJcbiAgICogY29uZmlndXJhdGlvbi4gVGhlc2UgcGFyYW1ldGVycyBhcmUgbWFkZSBhY2Nlc3NpYmxlIGluIGV2ZXJ5IHBhZ2Ugc2VydmVkXG4gICAqIGJ5IHRoaXMgcm91dGVyLlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBQYXJzZSBTZXJ2ZXIgY29uZmlndXJhdGlvbi5cbiAgICogQHJldHVybnMge09iamVjdH0gVGhlIGRlZmF1bHQgcGFyYW1ldGVycy5cbiAgICovXG4gIGdldERlZmF1bHRQYXJhbXMoY29uZmlnKSB7XG4gICAgcmV0dXJuIGNvbmZpZ1xuICAgICAgPyB7XG4gICAgICAgIFtwYWdlUGFyYW1zLmFwcElkXTogY29uZmlnLmFwcElkLFxuICAgICAgICBbcGFnZVBhcmFtcy5hcHBOYW1lXTogY29uZmlnLmFwcE5hbWUsXG4gICAgICAgIFtwYWdlUGFyYW1zLnB1YmxpY1NlcnZlclVybF06IGNvbmZpZy5wdWJsaWNTZXJ2ZXJVUkwsXG4gICAgICB9XG4gICAgICA6IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIGFuZCByZXR1cm5zIHRoZSBsb2NhbGUgZnJvbSBhbiBleHByZXNzIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSByZXEgVGhlIGV4cHJlc3MgcmVxdWVzdC5cbiAgICogQHJldHVybnMge1N0cmluZ3x1bmRlZmluZWR9IFRoZSBsb2NhbGUsIG9yIHVuZGVmaW5lZCBpZiBubyBsb2NhbGUgd2FzIHNldC5cbiAgICovXG4gIGdldExvY2FsZShyZXEpIHtcbiAgICBjb25zdCBsb2NhbGUgPVxuICAgICAgKHJlcS5xdWVyeSB8fCB7fSlbcGFnZVBhcmFtcy5sb2NhbGVdIHx8XG4gICAgICAocmVxLmJvZHkgfHwge30pW3BhZ2VQYXJhbXMubG9jYWxlXSB8fFxuICAgICAgKHJlcS5wYXJhbXMgfHwge30pW3BhZ2VQYXJhbXMubG9jYWxlXSB8fFxuICAgICAgKHJlcS5oZWFkZXJzIHx8IHt9KVtwYWdlUGFyYW1IZWFkZXJQcmVmaXggKyBwYWdlUGFyYW1zLmxvY2FsZV07XG4gICAgcmV0dXJuIGxvY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcmVzcG9uc2Ugd2l0aCBodHRwIHJlZGlyZWN0LlxuICAgKiBAcGFyYW0ge09iamVjdH0gcmVxIFRoZSBleHByZXNzIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBmaWxlIHRvIHJldHVybi5cbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBUaGUgcXVlcnkgcGFyYW1ldGVycyB0byBpbmNsdWRlLlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgUHJvbWlzZSBSb3V0ZXIgcmVzcG9uc2UuXG4gICAqL1xuICBhc3luYyByZWRpcmVjdFJlc3BvbnNlKHVybCwgcGFyYW1zKSB7XG4gICAgLy8gUmVtb3ZlIGFueSBwYXJhbWV0ZXJzIHdpdGggdW5kZWZpbmVkIHZhbHVlXG4gICAgcGFyYW1zID0gT2JqZWN0LmVudHJpZXMocGFyYW1zKS5yZWR1Y2UoKG0sIHApID0+IHtcbiAgICAgIGlmIChwWzFdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbVtwWzBdXSA9IHBbMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gbTtcbiAgICB9LCB7fSk7XG5cbiAgICAvLyBDb21wb3NlIFVSTCB3aXRoIHBhcmFtZXRlcnMgaW4gcXVlcnlcbiAgICBjb25zdCBsb2NhdGlvbiA9IG5ldyBVUkwodXJsKTtcbiAgICBPYmplY3QuZW50cmllcyhwYXJhbXMpLmZvckVhY2gocCA9PiBsb2NhdGlvbi5zZWFyY2hQYXJhbXMuc2V0KHBbMF0sIHBbMV0pKTtcbiAgICBjb25zdCBsb2NhdGlvblN0cmluZyA9IGxvY2F0aW9uLnRvU3RyaW5nKCk7XG5cbiAgICAvLyBBZGQgcGFyYW1ldGVycyB0byBoZWFkZXIgdG8gYWxsb3cgcGFyc2luZyBmb3IgcHJvZ3JhbW1hdGljIHVzZVxuICAgIC8vIG9mIHJlc3BvbnNlLCBpbnN0ZWFkIG9mIGhhdmluZyB0byBwYXJzZSB0aGUgSFRNTCBjb250ZW50LlxuICAgIGNvbnN0IGVuY29kZSA9IHRoaXMucGFnZXNDb25maWcuZW5jb2RlUGFnZVBhcmFtSGVhZGVycztcbiAgICBjb25zdCBoZWFkZXJzID0gT2JqZWN0LmVudHJpZXMocGFyYW1zKS5yZWR1Y2UoKG0sIHApID0+IHtcbiAgICAgIGlmIChwWzFdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbVtgJHtwYWdlUGFyYW1IZWFkZXJQcmVmaXh9JHtwWzBdLnRvTG93ZXJDYXNlKCl9YF0gPSBlbmNvZGUgPyBlbmNvZGVVUklDb21wb25lbnQocFsxXSkgOiBwWzFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG07XG4gICAgfSwge30pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogMzAzLFxuICAgICAgbG9jYXRpb246IGxvY2F0aW9uU3RyaW5nLFxuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICB9O1xuICB9XG5cbiAgZGVmYXVsdFBhZ2VQYXRoKGZpbGUpIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKHRoaXMucGFnZXNQYXRoLCBmaWxlKTtcbiAgfVxuXG4gIGNvbXBvc2VQYWdlVXJsKGZpbGUsIHB1YmxpY1NlcnZlclVybCwgbG9jYWxlKSB7XG4gICAgbGV0IHVybCA9IHB1YmxpY1NlcnZlclVybDtcbiAgICB1cmwgKz0gdXJsLmVuZHNXaXRoKCcvJykgPyAnJyA6ICcvJztcbiAgICB1cmwgKz0gdGhpcy5wYWdlc0VuZHBvaW50ICsgJy8nO1xuICAgIHVybCArPSBsb2NhbGUgPT09IHVuZGVmaW5lZCA/ICcnIDogbG9jYWxlICsgJy8nO1xuICAgIHVybCArPSBmaWxlO1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICBub3RGb3VuZCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGV4dDogJ05vdCBmb3VuZC4nLFxuICAgICAgc3RhdHVzOiA0MDQsXG4gICAgfTtcbiAgfVxuXG4gIGludmFsaWRSZXF1ZXN0KCkge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgZXJyb3Iuc3RhdHVzID0gNDAzO1xuICAgIGVycm9yLm1lc3NhZ2UgPSAndW5hdXRob3JpemVkJztcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBQYXJzZSBTZXJ2ZXIgY29uZmlndXJhdGlvbiBpbiB0aGUgcmVxdWVzdCBvYmplY3QgdG8gbWFrZSBpdFxuICAgKiBlYXNpbHkgYWNjZXNzaWJsZSB0aHJvdWdodG91dCByZXF1ZXN0IHByb2Nlc3NpbmcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSByZXEgVGhlIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gZmFpbEdyYWNlZnVsbHkgSXMgdHJ1ZSBpZiBmYWlsaW5nIHRvIHNldCB0aGUgY29uZmlnIHNob3VsZFxuICAgKiBub3QgcmVzdWx0IGluIGFuIGludmFsaWQgcmVxdWVzdCByZXNwb25zZS4gRGVmYXVsdCBpcyBgZmFsc2VgLlxuICAgKi9cbiAgYXN5bmMgc2V0Q29uZmlnKHJlcSwgZmFpbEdyYWNlZnVsbHkgPSBmYWxzZSkge1xuICAgIHJlcS5jb25maWcgPSBDb25maWcuZ2V0KHJlcS5wYXJhbXMuYXBwSWQgfHwgcmVxLnF1ZXJ5LmFwcElkKTtcbiAgICBpZiAoIXJlcS5jb25maWcgJiYgIWZhaWxHcmFjZWZ1bGx5KSB7XG4gICAgICB0aGlzLmludmFsaWRSZXF1ZXN0KCk7XG4gICAgfVxuICAgIGlmIChyZXEuY29uZmlnKSB7XG4gICAgICBhd2FpdCByZXEuY29uZmlnLmxvYWRLZXlzKCk7XG4gICAgfVxuICB9XG5cbiAgbW91bnRQYWdlc1JvdXRlcygpIHtcbiAgICB0aGlzLnJvdXRlKFxuICAgICAgJ0dFVCcsXG4gICAgICBgLyR7dGhpcy5wYWdlc0VuZHBvaW50fS86YXBwSWQvdmVyaWZ5X2VtYWlsYCxcbiAgICAgIHJlcSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldENvbmZpZyhyZXEpO1xuICAgICAgfSxcbiAgICAgIHJlcSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcmlmeUVtYWlsKHJlcSk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucm91dGUoXG4gICAgICAnUE9TVCcsXG4gICAgICBgLyR7dGhpcy5wYWdlc0VuZHBvaW50fS86YXBwSWQvcmVzZW5kX3ZlcmlmaWNhdGlvbl9lbWFpbGAsXG4gICAgICByZXEgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRDb25maWcocmVxKTtcbiAgICAgIH0sXG4gICAgICByZXEgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNlbmRWZXJpZmljYXRpb25FbWFpbChyZXEpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnJvdXRlKFxuICAgICAgJ0dFVCcsXG4gICAgICBgLyR7dGhpcy5wYWdlc0VuZHBvaW50fS9jaG9vc2VfcGFzc3dvcmRgLFxuICAgICAgcmVxID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0Q29uZmlnKHJlcSk7XG4gICAgICB9LFxuICAgICAgcmVxID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFzc3dvcmRSZXNldChyZXEpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnJvdXRlKFxuICAgICAgJ1BPU1QnLFxuICAgICAgYC8ke3RoaXMucGFnZXNFbmRwb2ludH0vOmFwcElkL3JlcXVlc3RfcGFzc3dvcmRfcmVzZXRgLFxuICAgICAgcmVxID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0Q29uZmlnKHJlcSk7XG4gICAgICB9LFxuICAgICAgcmVxID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzZXRQYXNzd29yZChyZXEpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnJvdXRlKFxuICAgICAgJ0dFVCcsXG4gICAgICBgLyR7dGhpcy5wYWdlc0VuZHBvaW50fS86YXBwSWQvcmVxdWVzdF9wYXNzd29yZF9yZXNldGAsXG4gICAgICByZXEgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRDb25maWcocmVxKTtcbiAgICAgIH0sXG4gICAgICByZXEgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0UmVzZXRQYXNzd29yZChyZXEpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBtb3VudEN1c3RvbVJvdXRlcygpIHtcbiAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHRoaXMucGFnZXNDb25maWcuY3VzdG9tUm91dGVzIHx8IFtdKSB7XG4gICAgICB0aGlzLnJvdXRlKFxuICAgICAgICByb3V0ZS5tZXRob2QsXG4gICAgICAgIGAvJHt0aGlzLnBhZ2VzRW5kcG9pbnR9LzphcHBJZC8ke3JvdXRlLnBhdGh9YCxcbiAgICAgICAgcmVxID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zZXRDb25maWcocmVxKTtcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgcmVxID0+IHtcbiAgICAgICAgICBjb25zdCB7IGZpbGUsIHF1ZXJ5ID0ge30gfSA9IChhd2FpdCByb3V0ZS5oYW5kbGVyKHJlcSkpIHx8IHt9O1xuXG4gICAgICAgICAgLy8gSWYgcm91dGUgaGFuZGxlciBkaWQgbm90IHJldHVybiBhIHBhZ2Ugc2VuZCA0MDQgcmVzcG9uc2VcbiAgICAgICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5vdEZvdW5kKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU2VuZCBwYWdlIHJlc3BvbnNlXG4gICAgICAgICAgY29uc3QgcGFnZSA9IG5ldyBQYWdlKHsgaWQ6IGZpbGUsIGRlZmF1bHRGaWxlOiBmaWxlIH0pO1xuICAgICAgICAgIHJldHVybiB0aGlzLmdvVG9QYWdlKHJlcSwgcGFnZSwgcXVlcnksIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBtb3VudFN0YXRpY1JvdXRlKCkge1xuICAgIHRoaXMucm91dGUoXG4gICAgICAnR0VUJyxcbiAgICAgIGAvJHt0aGlzLnBhZ2VzRW5kcG9pbnR9LypyZXNvdXJjZWAsXG4gICAgICByZXEgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRDb25maWcocmVxLCB0cnVlKTtcbiAgICAgIH0sXG4gICAgICByZXEgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0aWNSb3V0ZShyZXEpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBleHByZXNzUm91dGVyKCkge1xuICAgIGNvbnN0IHJvdXRlciA9IGV4cHJlc3MuUm91dGVyKCk7XG4gICAgcm91dGVyLnVzZSgnLycsIHN1cGVyLmV4cHJlc3NSb3V0ZXIoKSk7XG4gICAgcmV0dXJuIHJvdXRlcjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQYWdlc1JvdXRlcjtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBQYWdlc1JvdXRlcixcbiAgcGFnZVBhcmFtSGVhZGVyUHJlZml4LFxuICBwYWdlUGFyYW1zLFxuICBwYWdlcyxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLGNBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtB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
@@ -379,6 +379,9 @@ class UsersRouter extends _ClassesRouter.default {
379
379
  if (!email && !token) {
380
380
  throw new _node.default.Error(_node.default.Error.EMAIL_MISSING, 'you must provide an email');
381
381
  }
382
+ if (token && typeof token !== 'string') {
383
+ throw new _node.default.Error(_node.default.Error.INVALID_VALUE, 'token must be a string');
384
+ }
382
385
  let userResults = null;
383
386
  let userData = null;
384
387
 
@@ -638,4 +641,4 @@ class UsersRouter extends _ClassesRouter.default {
638
641
  }
639
642
  exports.UsersRouter = UsersRouter;
640
643
  var _default = exports.default = UsersRouter;
641
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX0NvbmZpZyIsIl9BY2NvdW50TG9ja291dCIsIl9DbGFzc2VzUm91dGVyIiwiX3Jlc3QiLCJfQXV0aCIsIl9wYXNzd29yZCIsIl90cmlnZ2VycyIsIl9taWRkbGV3YXJlcyIsIl9SZXN0V3JpdGUiLCJfbG9nZ2VyIiwiX0Vycm9yIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiVXNlcnNSb3V0ZXIiLCJDbGFzc2VzUm91dGVyIiwiY2xhc3NOYW1lIiwicmVtb3ZlSGlkZGVuUHJvcGVydGllcyIsIm9iaiIsImtleSIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInRlc3QiLCJfc2FuaXRpemVBdXRoRGF0YSIsInVzZXIiLCJwYXNzd29yZCIsImF1dGhEYXRhIiwia2V5cyIsImZvckVhY2giLCJwcm92aWRlciIsImxlbmd0aCIsIl9hdXRoZW50aWNhdGVVc2VyRnJvbVJlcXVlc3QiLCJyZXEiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInBheWxvYWQiLCJib2R5IiwidXNlcm5hbWUiLCJxdWVyeSIsImVtYWlsIiwiaWdub3JlRW1haWxWZXJpZmljYXRpb24iLCJQYXJzZSIsIkVycm9yIiwiVVNFUk5BTUVfTUlTU0lORyIsIlBBU1NXT1JEX01JU1NJTkciLCJPQkpFQ1RfTk9UX0ZPVU5EIiwiaXNWYWxpZFBhc3N3b3JkIiwiJG9yIiwiY29uZmlnIiwiZGF0YWJhc2UiLCJmaW5kIiwiQXV0aCIsIm1haW50ZW5hbmNlIiwidGhlbiIsInJlc3VsdHMiLCJsb2dnZXJDb250cm9sbGVyIiwid2FybiIsImZpbHRlciIsInBhc3N3b3JkQ3J5cHRvIiwiY29tcGFyZSIsImNvcnJlY3QiLCJhY2NvdW50TG9ja291dFBvbGljeSIsIkFjY291bnRMb2Nrb3V0IiwiaGFuZGxlTG9naW5BdHRlbXB0IiwiYXV0aCIsImlzTWFzdGVyIiwiQUNMIiwiYXV0aFByb3ZpZGVyIiwiam9pbiIsInJlcXVlc3QiLCJtYXN0ZXIiLCJpcCIsImluc3RhbGxhdGlvbklkIiwib2JqZWN0IiwiVXNlciIsImZyb21KU09OIiwiYXNzaWduIiwiY3JlYXRlZFdpdGgiLCJSZXN0V3JpdGUiLCJidWlsZENyZWF0ZWRXaXRoIiwiaXNNYWludGVuYW5jZSIsInZlcmlmeVVzZXJFbWFpbHMiLCJwcmV2ZW50TG9naW5XaXRoVW52ZXJpZmllZEVtYWlsIiwiZW1haWxWZXJpZmllZCIsIkVNQUlMX05PVF9GT1VORCIsImNhdGNoIiwiZXJyb3IiLCJoYW5kbGVNZSIsImluZm8iLCJzZXNzaW9uVG9rZW4iLCJjcmVhdGVTYW5pdGl6ZWRFcnJvciIsIklOVkFMSURfU0VTU0lPTl9UT0tFTiIsInJlc3QiLCJpbmNsdWRlIiwiY2xpZW50U0RLIiwiY29udGV4dCIsInJlc3BvbnNlIiwiaGFuZGxlTG9nSW4iLCJjaGVja0lmVXNlckhhc1Byb3ZpZGVkQ29uZmlndXJlZFByb3ZpZGVyc0ZvckxvZ2luIiwiYXV0aERhdGFSZXNwb25zZSIsInZhbGlkYXRlZEF1dGhEYXRhIiwicmVzIiwiaGFuZGxlQXV0aERhdGFWYWxpZGF0aW9uIiwib2JqZWN0SWQiLCJwYXNzd29yZFBvbGljeSIsIm1heFBhc3N3b3JkQWdlIiwiY2hhbmdlZEF0IiwiX3Bhc3N3b3JkX2NoYW5nZWRfYXQiLCJEYXRlIiwidXBkYXRlIiwiX2VuY29kZSIsIl9fdHlwZSIsImlzbyIsImV4cGlyZXNBdCIsImdldFRpbWUiLCJmaWxlc0NvbnRyb2xsZXIiLCJleHBhbmRGaWxlc0luT2JqZWN0IiwibWF5YmVSdW5UcmlnZ2VyIiwiVHJpZ2dlclR5cGVzIiwiYmVmb3JlTG9naW4iLCJzZXNzaW9uRGF0YSIsImNyZWF0ZVNlc3Npb24iLCJ1c2VySWQiLCJhZnRlckxvZ2luVXNlciIsImFmdGVyTG9naW4iLCJhdXRoRGF0YU1hbmFnZXIiLCJydW5BZnRlckZpbmQiLCJoYW5kbGVMb2dJbkFzIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsImlzUmVhZE9ubHkiLCJJTlZBTElEX1ZBTFVFIiwicXVlcnlSZXN1bHRzIiwiaGFuZGxlVmVyaWZ5UGFzc3dvcmQiLCJoYW5kbGVMb2dPdXQiLCJzdWNjZXNzIiwicmVjb3JkcyIsInVuZGVmaW5lZCIsImRlbCIsImFmdGVyTG9nb3V0IiwiU2Vzc2lvbiIsIl90aHJvd09uQmFkRW1haWxDb25maWciLCJDb25maWciLCJ2YWxpZGF0ZUVtYWlsQ29uZmlndXJhdGlvbiIsImVtYWlsQWRhcHRlciIsInVzZXJDb250cm9sbGVyIiwiYWRhcHRlciIsImFwcE5hbWUiLCJwdWJsaWNTZXJ2ZXJVUkwiLCJfcHVibGljU2VydmVyVVJMIiwiZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24iLCJlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkIiwiSU5URVJOQUxfU0VSVkVSX0VSUk9SIiwiaGFuZGxlUmVzZXRSZXF1ZXN0IiwidG9rZW4iLCJFTUFJTF9NSVNTSU5HIiwidXNlclJlc3VsdHMiLCJ1c2VyRGF0YSIsIl9wZXJpc2hhYmxlX3Rva2VuIiwiX3BlcmlzaGFibGVfdG9rZW5fZXhwaXJlc19hdCIsIiRsdCIsIiRleGlzdHMiLCJsaW1pdCIsIklOVkFMSURfRU1BSUxfQUREUkVTUyIsImluZmxhdGUiLCJiZWZvcmVQYXNzd29yZFJlc2V0UmVxdWVzdCIsInNlbmRQYXNzd29yZFJlc2V0RW1haWwiLCJlcnIiLCJjb2RlIiwicmVzZXRQYXNzd29yZFN1Y2Nlc3NPbkludmFsaWRFbWFpbCIsIm1lc3NhZ2UiLCJoYW5kbGVWZXJpZmljYXRpb25FbWFpbFJlcXVlc3QiLCJPVEhFUl9DQVVTRSIsInNlbmQiLCJyZWdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbiIsInNlbmRWZXJpZmljYXRpb25FbWFpbCIsImhhbmRsZUNoYWxsZW5nZSIsImNoYWxsZW5nZURhdGEiLCJwYXJzZVVzZXIiLCJpZCIsImZpbmRVc2Vyc1dpdGhBdXRoRGF0YSIsImdldFJlcXVlc3RPYmplY3QiLCJpc0NoYWxsZW5nZSIsInZhbGlkYXRvciIsImdldFZhbGlkYXRvckZvclByb3ZpZGVyIiwidmFsaWRhdG9yUmVzcG9uc2UiLCJsb2dnZXIiLCJhY2MiLCJzb3J0IiwiYXV0aEFkYXB0ZXIiLCJjaGFsbGVuZ2UiLCJwcm92aWRlckNoYWxsZW5nZVJlc3BvbnNlIiwicmVzb2x2ZUVycm9yIiwiU0NSSVBUX0ZBSUxFRCIsInVzZXJTdHJpbmciLCJKU09OIiwic3RyaW5naWZ5IiwiYXV0aGVudGljYXRpb25TdGVwIiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsImhhbmRsZUZpbmQiLCJwcm9taXNlRW5zdXJlSWRlbXBvdGVuY3kiLCJoYW5kbGVDcmVhdGUiLCJoYW5kbGVHZXQiLCJoYW5kbGVVcGRhdGUiLCJoYW5kbGVEZWxldGUiLCJleHBvcnRzIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUm91dGVycy9Vc2Vyc1JvdXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGVzZSBtZXRob2RzIGhhbmRsZSB0aGUgVXNlci1yZWxhdGVkIHJvdXRlcy5cblxuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IENvbmZpZyBmcm9tICcuLi9Db25maWcnO1xuaW1wb3J0IEFjY291bnRMb2Nrb3V0IGZyb20gJy4uL0FjY291bnRMb2Nrb3V0JztcbmltcG9ydCBDbGFzc2VzUm91dGVyIGZyb20gJy4vQ2xhc3Nlc1JvdXRlcic7XG5pbXBvcnQgcmVzdCBmcm9tICcuLi9yZXN0JztcbmltcG9ydCBBdXRoIGZyb20gJy4uL0F1dGgnO1xuaW1wb3J0IHBhc3N3b3JkQ3J5cHRvIGZyb20gJy4uL3Bhc3N3b3JkJztcbmltcG9ydCB7XG4gIG1heWJlUnVuVHJpZ2dlcixcbiAgVHlwZXMgYXMgVHJpZ2dlclR5cGVzLFxuICBnZXRSZXF1ZXN0T2JqZWN0LFxuICByZXNvbHZlRXJyb3IsXG4gIGluZmxhdGUsXG59IGZyb20gJy4uL3RyaWdnZXJzJztcbmltcG9ydCB7IHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSB9IGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCBSZXN0V3JpdGUgZnJvbSAnLi4vUmVzdFdyaXRlJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBjcmVhdGVTYW5pdGl6ZWRFcnJvciB9IGZyb20gJy4uL0Vycm9yJztcblxuZXhwb3J0IGNsYXNzIFVzZXJzUm91dGVyIGV4dGVuZHMgQ2xhc3Nlc1JvdXRlciB7XG4gIGNsYXNzTmFtZSgpIHtcbiAgICByZXR1cm4gJ19Vc2VyJztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsbCBcIl9cIiBwcmVmaXhlZCBwcm9wZXJ0aWVzIGZyb20gYW4gb2JqZWN0LCBleGNlcHQgXCJfX3R5cGVcIlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIEFuIG9iamVjdC5cbiAgICovXG4gIHN0YXRpYyByZW1vdmVIaWRkZW5Qcm9wZXJ0aWVzKG9iaikge1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIC8vIFJlZ2V4cCBjb21lcyBmcm9tIFBhcnNlLk9iamVjdC5wcm90b3R5cGUudmFsaWRhdGVcbiAgICAgICAgaWYgKGtleSAhPT0gJ19fdHlwZScgJiYgIS9eW0EtWmEtel1bMC05QS1aYS16X10qJC8udGVzdChrZXkpKSB7XG4gICAgICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIHJldHJpZXZpbmcgYSB1c2VyIGRpcmVjdGx5IGZyb20gdGhlIGRhdGFiYXNlLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGVcbiAgICogcGFzc3dvcmQgZnJvbSB0aGUgb2JqZWN0IChmb3Igc2VjdXJpdHkpLCBhbmQgZml4IGFuIGlzc3VlIHNvbWUgU0RLcyBoYXZlXG4gICAqIHdpdGggbnVsbCB2YWx1ZXNcbiAgICovXG4gIF9zYW5pdGl6ZUF1dGhEYXRhKHVzZXIpIHtcbiAgICBkZWxldGUgdXNlci5wYXNzd29yZDtcblxuICAgIC8vIFNvbWV0aW1lcyB0aGUgYXV0aERhdGEgc3RpbGwgaGFzIG51bGwgb24gdGhhdCBrZXlzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BhcnNlLWNvbW11bml0eS9wYXJzZS1zZXJ2ZXIvaXNzdWVzLzkzNVxuICAgIGlmICh1c2VyLmF1dGhEYXRhKSB7XG4gICAgICBPYmplY3Qua2V5cyh1c2VyLmF1dGhEYXRhKS5mb3JFYWNoKHByb3ZpZGVyID0+IHtcbiAgICAgICAgaWYgKHVzZXIuYXV0aERhdGFbcHJvdmlkZXJdID09PSBudWxsKSB7XG4gICAgICAgICAgZGVsZXRlIHVzZXIuYXV0aERhdGFbcHJvdmlkZXJdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChPYmplY3Qua2V5cyh1c2VyLmF1dGhEYXRhKS5sZW5ndGggPT0gMCkge1xuICAgICAgICBkZWxldGUgdXNlci5hdXRoRGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGEgcGFzc3dvcmQgcmVxdWVzdCBpbiBsb2dpbiBhbmQgdmVyaWZ5UGFzc3dvcmRcbiAgICogQHBhcmFtIHtPYmplY3R9IHJlcSBUaGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBVc2VyIG9iamVjdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2F1dGhlbnRpY2F0ZVVzZXJGcm9tUmVxdWVzdChyZXEpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gVXNlIHF1ZXJ5IHBhcmFtZXRlcnMgaW5zdGVhZCBpZiBwcm92aWRlZCBpbiB1cmxcbiAgICAgIGxldCBwYXlsb2FkID0gcmVxLmJvZHkgfHwge307XG4gICAgICBpZiAoXG4gICAgICAgICghcGF5bG9hZC51c2VybmFtZSAmJiByZXEucXVlcnkgJiYgcmVxLnF1ZXJ5LnVzZXJuYW1lKSB8fFxuICAgICAgICAoIXBheWxvYWQuZW1haWwgJiYgcmVxLnF1ZXJ5ICYmIHJlcS5xdWVyeS5lbWFpbClcbiAgICAgICkge1xuICAgICAgICBwYXlsb2FkID0gcmVxLnF1ZXJ5O1xuICAgICAgfVxuICAgICAgY29uc3QgeyB1c2VybmFtZSwgZW1haWwsIHBhc3N3b3JkLCBpZ25vcmVFbWFpbFZlcmlmaWNhdGlvbiB9ID0gcGF5bG9hZDtcblxuICAgICAgLy8gVE9ETzogdXNlIHRoZSByaWdodCBlcnJvciBjb2RlcyAvIGRlc2NyaXB0aW9ucy5cbiAgICAgIGlmICghdXNlcm5hbWUgJiYgIWVtYWlsKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5VU0VSTkFNRV9NSVNTSU5HLCAndXNlcm5hbWUvZW1haWwgaXMgcmVxdWlyZWQuJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXBhc3N3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5QQVNTV09SRF9NSVNTSU5HLCAncGFzc3dvcmQgaXMgcmVxdWlyZWQuJyk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBwYXNzd29yZCAhPT0gJ3N0cmluZycgfHxcbiAgICAgICAgKGVtYWlsICYmIHR5cGVvZiBlbWFpbCAhPT0gJ3N0cmluZycpIHx8XG4gICAgICAgICh1c2VybmFtZSAmJiB0eXBlb2YgdXNlcm5hbWUgIT09ICdzdHJpbmcnKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnSW52YWxpZCB1c2VybmFtZS9wYXNzd29yZC4nKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHVzZXI7XG4gICAgICBsZXQgaXNWYWxpZFBhc3N3b3JkID0gZmFsc2U7XG4gICAgICBsZXQgcXVlcnk7XG4gICAgICBpZiAoZW1haWwgJiYgdXNlcm5hbWUpIHtcbiAgICAgICAgcXVlcnkgPSB7IGVtYWlsLCB1c2VybmFtZSB9O1xuICAgICAgfSBlbHNlIGlmIChlbWFpbCkge1xuICAgICAgICBxdWVyeSA9IHsgZW1haWwgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5ID0geyAkb3I6IFt7IHVzZXJuYW1lIH0sIHsgZW1haWw6IHVzZXJuYW1lIH1dIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVxLmNvbmZpZy5kYXRhYmFzZVxuICAgICAgICAuZmluZCgnX1VzZXInLCBxdWVyeSwge30sIEF1dGgubWFpbnRlbmFuY2UocmVxLmNvbmZpZykpXG4gICAgICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnSW52YWxpZCB1c2VybmFtZS9wYXNzd29yZC4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAvLyBjb3JuZXIgY2FzZSB3aGVyZSB1c2VyMSBoYXMgdXNlcm5hbWUgPT0gdXNlcjIgZW1haWxcbiAgICAgICAgICAgIHJlcS5jb25maWcubG9nZ2VyQ29udHJvbGxlci53YXJuKFxuICAgICAgICAgICAgICBcIlRoZXJlIGlzIGEgdXNlciB3aGljaCBlbWFpbCBpcyB0aGUgc2FtZSBhcyBhbm90aGVyIHVzZXIncyB1c2VybmFtZSwgbG9nZ2luZyBpbiBiYXNlZCBvbiB1c2VybmFtZVwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdXNlciA9IHJlc3VsdHMuZmlsdGVyKHVzZXIgPT4gdXNlci51c2VybmFtZSA9PT0gdXNlcm5hbWUpWzBdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1c2VyID0gcmVzdWx0c1swXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcGFzc3dvcmRDcnlwdG8uY29tcGFyZShwYXNzd29yZCwgdXNlci5wYXNzd29yZCk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKGNvcnJlY3QgPT4ge1xuICAgICAgICAgIGlzVmFsaWRQYXNzd29yZCA9IGNvcnJlY3Q7XG4gICAgICAgICAgY29uc3QgYWNjb3VudExvY2tvdXRQb2xpY3kgPSBuZXcgQWNjb3VudExvY2tvdXQodXNlciwgcmVxLmNvbmZpZyk7XG4gICAgICAgICAgcmV0dXJuIGFjY291bnRMb2Nrb3V0UG9saWN5LmhhbmRsZUxvZ2luQXR0ZW1wdChpc1ZhbGlkUGFzc3dvcmQpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgaWYgKCFpc1ZhbGlkUGFzc3dvcmQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnSW52YWxpZCB1c2VybmFtZS9wYXNzd29yZC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gRW5zdXJlIHRoZSB1c2VyIGlzbid0IGxvY2tlZCBvdXRcbiAgICAgICAgICAvLyBBIGxvY2tlZCBvdXQgdXNlciB3b24ndCBiZSBhYmxlIHRvIGxvZ2luXG4gICAgICAgICAgLy8gVG8gbG9jayBhIHVzZXIgb3V0LCBqdXN0IHNldCB0aGUgQUNMIHRvIGBtYXN0ZXJLZXlgIG9ubHkgICh7fSkuXG4gICAgICAgICAgLy8gRW1wdHkgQUNMIGlzIE9LXG4gICAgICAgICAgaWYgKCFyZXEuYXV0aC5pc01hc3RlciAmJiB1c2VyLkFDTCAmJiBPYmplY3Qua2V5cyh1c2VyLkFDTCkubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnSW52YWxpZCB1c2VybmFtZS9wYXNzd29yZC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQ3JlYXRlIHJlcXVlc3Qgb2JqZWN0IGZvciB2ZXJpZmljYXRpb24gZnVuY3Rpb25zXG4gICAgICAgICAgY29uc3QgYXV0aFByb3ZpZGVyID1cbiAgICAgICAgICAgIHJlcS5ib2R5ICYmXG4gICAgICAgICAgICByZXEuYm9keS5hdXRoRGF0YSAmJlxuICAgICAgICAgICAgT2JqZWN0LmtleXMocmVxLmJvZHkuYXV0aERhdGEpLmxlbmd0aCAmJlxuICAgICAgICAgICAgT2JqZWN0LmtleXMocmVxLmJvZHkuYXV0aERhdGEpLmpvaW4oJywnKTtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgbWFzdGVyOiByZXEuYXV0aC5pc01hc3RlcixcbiAgICAgICAgICAgIGlwOiByZXEuY29uZmlnLmlwLFxuICAgICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IHJlcS5hdXRoLmluc3RhbGxhdGlvbklkLFxuICAgICAgICAgICAgb2JqZWN0OiBQYXJzZS5Vc2VyLmZyb21KU09OKE9iamVjdC5hc3NpZ24oeyBjbGFzc05hbWU6ICdfVXNlcicgfSwgdXNlcikpLFxuICAgICAgICAgICAgY3JlYXRlZFdpdGg6IFJlc3RXcml0ZS5idWlsZENyZWF0ZWRXaXRoKCdsb2dpbicsIGF1dGhQcm92aWRlciksXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIC8vIElmIHJlcXVlc3QgZG9lc24ndCB1c2UgbWFzdGVyIG9yIG1haW50ZW5hbmNlIGtleSB3aXRoIGlnbm9yaW5nIGVtYWlsIHZlcmlmaWNhdGlvblxuICAgICAgICAgIGlmICghKChyZXEuYXV0aC5pc01hc3RlciB8fCByZXEuYXV0aC5pc01haW50ZW5hbmNlKSAmJiBpZ25vcmVFbWFpbFZlcmlmaWNhdGlvbikpIHtcblxuICAgICAgICAgICAgLy8gR2V0IHZlcmlmaWNhdGlvbiBjb25kaXRpb25zIHdoaWNoIGNhbiBiZSBib29sZWFucyBvciBmdW5jdGlvbnM7IHRoZSBwdXJwb3NlIG9mIHRoaXMgYXN5bmMvYXdhaXRcbiAgICAgICAgICAgIC8vIHN0cnVjdHVyZSBpcyB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IGV4ZWN1dGluZyBzdWJzZXF1ZW50IGZ1bmN0aW9ucyBpZiBwcmV2aW91cyBvbmVzIGZhaWwgaW4gdGhlXG4gICAgICAgICAgICAvLyBjb25kaXRpb25hbCBzdGF0ZW1lbnQgYmVsb3csIGFzIGEgZGV2ZWxvcGVyIG1heSBkZWNpZGUgdG8gZXhlY3V0ZSBleHBlbnNpdmUgb3BlcmF0aW9ucyBpbiB0aGVtXG4gICAgICAgICAgICBjb25zdCB2ZXJpZnlVc2VyRW1haWxzID0gYXN5bmMgKCkgPT4gcmVxLmNvbmZpZy52ZXJpZnlVc2VyRW1haWxzID09PSB0cnVlIHx8ICh0eXBlb2YgcmVxLmNvbmZpZy52ZXJpZnlVc2VyRW1haWxzID09PSAnZnVuY3Rpb24nICYmIGF3YWl0IFByb21pc2UucmVzb2x2ZShyZXEuY29uZmlnLnZlcmlmeVVzZXJFbWFpbHMocmVxdWVzdCkpID09PSB0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZlbnRMb2dpbldpdGhVbnZlcmlmaWVkRW1haWwgPSBhc3luYyAoKSA9PiByZXEuY29uZmlnLnByZXZlbnRMb2dpbldpdGhVbnZlcmlmaWVkRW1haWwgPT09IHRydWUgfHwgKHR5cGVvZiByZXEuY29uZmlnLnByZXZlbnRMb2dpbldpdGhVbnZlcmlmaWVkRW1haWwgPT09ICdmdW5jdGlvbicgJiYgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKHJlcS5jb25maWcucHJldmVudExvZ2luV2l0aFVudmVyaWZpZWRFbWFpbChyZXF1ZXN0KSkgPT09IHRydWUpO1xuICAgICAgICAgICAgaWYgKGF3YWl0IHZlcmlmeVVzZXJFbWFpbHMoKSAmJiBhd2FpdCBwcmV2ZW50TG9naW5XaXRoVW52ZXJpZmllZEVtYWlsKCkgJiYgIXVzZXIuZW1haWxWZXJpZmllZCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRU1BSUxfTk9UX0ZPVU5ELCAnVXNlciBlbWFpbCBpcyBub3QgdmVyaWZpZWQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fc2FuaXRpemVBdXRoRGF0YSh1c2VyKTtcblxuICAgICAgICAgIHJldHVybiByZXNvbHZlKHVzZXIpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZU1lKHJlcSkge1xuICAgIGlmICghcmVxLmluZm8gfHwgIXJlcS5pbmZvLnNlc3Npb25Ub2tlbikge1xuICAgICAgdGhyb3cgY3JlYXRlU2FuaXRpemVkRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9TRVNTSU9OX1RPS0VOLCAnSW52YWxpZCBzZXNzaW9uIHRva2VuJywgcmVxLmNvbmZpZyk7XG4gICAgfVxuICAgIGNvbnN0IHNlc3Npb25Ub2tlbiA9IHJlcS5pbmZvLnNlc3Npb25Ub2tlbjtcbiAgICByZXR1cm4gcmVzdFxuICAgICAgLmZpbmQoXG4gICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgIEF1dGgubWFzdGVyKHJlcS5jb25maWcpLFxuICAgICAgICAnX1Nlc3Npb24nLFxuICAgICAgICB7IHNlc3Npb25Ub2tlbiB9LFxuICAgICAgICB7IGluY2x1ZGU6ICd1c2VyJyB9LFxuICAgICAgICByZXEuaW5mby5jbGllbnRTREssXG4gICAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICAgIClcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKCFyZXNwb25zZS5yZXN1bHRzIHx8IHJlc3BvbnNlLnJlc3VsdHMubGVuZ3RoID09IDAgfHwgIXJlc3BvbnNlLnJlc3VsdHNbMF0udXNlcikge1xuICAgICAgICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfU0VTU0lPTl9UT0tFTiwgJ0ludmFsaWQgc2Vzc2lvbiB0b2tlbicsIHJlcS5jb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHVzZXIgPSByZXNwb25zZS5yZXN1bHRzWzBdLnVzZXI7XG4gICAgICAgICAgLy8gU2VuZCB0b2tlbiBiYWNrIG9uIHRoZSBsb2dpbiwgYmVjYXVzZSBTREtzIGV4cGVjdCB0aGF0LlxuICAgICAgICAgIHVzZXIuc2Vzc2lvblRva2VuID0gc2Vzc2lvblRva2VuO1xuXG4gICAgICAgICAgLy8gUmVtb3ZlIGhpZGRlbiBwcm9wZXJ0aWVzLlxuICAgICAgICAgIFVzZXJzUm91dGVyLnJlbW92ZUhpZGRlblByb3BlcnRpZXModXNlcik7XG4gICAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHVzZXIgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyBoYW5kbGVMb2dJbihyZXEpIHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgdGhpcy5fYXV0aGVudGljYXRlVXNlckZyb21SZXF1ZXN0KHJlcSk7XG4gICAgY29uc3QgYXV0aERhdGEgPSByZXEuYm9keSAmJiByZXEuYm9keS5hdXRoRGF0YTtcbiAgICAvLyBDaGVjayBpZiB1c2VyIGhhcyBwcm92aWRlZCB0aGVpciByZXF1aXJlZCBhdXRoIHByb3ZpZGVyc1xuICAgIEF1dGguY2hlY2tJZlVzZXJIYXNQcm92aWRlZENvbmZpZ3VyZWRQcm92aWRlcnNGb3JMb2dpbihcbiAgICAgIHJlcSxcbiAgICAgIGF1dGhEYXRhLFxuICAgICAgdXNlci5hdXRoRGF0YSxcbiAgICAgIHJlcS5jb25maWdcbiAgICApO1xuXG4gICAgbGV0IGF1dGhEYXRhUmVzcG9uc2U7XG4gICAgbGV0IHZhbGlkYXRlZEF1dGhEYXRhO1xuICAgIGlmIChhdXRoRGF0YSkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgQXV0aC5oYW5kbGVBdXRoRGF0YVZhbGlkYXRpb24oXG4gICAgICAgIGF1dGhEYXRhLFxuICAgICAgICBuZXcgUmVzdFdyaXRlKFxuICAgICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgICAgcmVxLmF1dGgsXG4gICAgICAgICAgJ19Vc2VyJyxcbiAgICAgICAgICB7IG9iamVjdElkOiB1c2VyLm9iamVjdElkIH0sXG4gICAgICAgICAgcmVxLmJvZHkgfHwge30sXG4gICAgICAgICAgdXNlcixcbiAgICAgICAgICByZXEuaW5mby5jbGllbnRTREssXG4gICAgICAgICAgcmVxLmluZm8uY29udGV4dFxuICAgICAgICApLFxuICAgICAgICB1c2VyXG4gICAgICApO1xuICAgICAgYXV0aERhdGFSZXNwb25zZSA9IHJlcy5hdXRoRGF0YVJlc3BvbnNlO1xuICAgICAgdmFsaWRhdGVkQXV0aERhdGEgPSByZXMuYXV0aERhdGE7XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHBhc3N3b3JkIGV4cGlyeSBwb2xpY3lcbiAgICBpZiAocmVxLmNvbmZpZy5wYXNzd29yZFBvbGljeSAmJiByZXEuY29uZmlnLnBhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkQWdlKSB7XG4gICAgICBsZXQgY2hhbmdlZEF0ID0gdXNlci5fcGFzc3dvcmRfY2hhbmdlZF9hdDtcblxuICAgICAgaWYgKCFjaGFuZ2VkQXQpIHtcbiAgICAgICAgLy8gcGFzc3dvcmQgd2FzIGNyZWF0ZWQgYmVmb3JlIGV4cGlyeSBwb2xpY3kgd2FzIGVuYWJsZWQuXG4gICAgICAgIC8vIHNpbXBseSB1cGRhdGUgX1VzZXIgb2JqZWN0IHNvIHRoYXQgaXQgd2lsbCBzdGFydCBlbmZvcmNpbmcgZnJvbSBub3dcbiAgICAgICAgY2hhbmdlZEF0ID0gbmV3IERhdGUoKTtcbiAgICAgICAgcmVxLmNvbmZpZy5kYXRhYmFzZS51cGRhdGUoXG4gICAgICAgICAgJ19Vc2VyJyxcbiAgICAgICAgICB7IHVzZXJuYW1lOiB1c2VyLnVzZXJuYW1lIH0sXG4gICAgICAgICAgeyBfcGFzc3dvcmRfY2hhbmdlZF9hdDogUGFyc2UuX2VuY29kZShjaGFuZ2VkQXQpIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgdGhlIHBhc3N3b3JkIGhhcyBleHBpcmVkXG4gICAgICAgIGlmIChjaGFuZ2VkQXQuX190eXBlID09ICdEYXRlJykge1xuICAgICAgICAgIGNoYW5nZWRBdCA9IG5ldyBEYXRlKGNoYW5nZWRBdC5pc28pO1xuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZXhwaXJ5IHRpbWUuXG4gICAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IG5ldyBEYXRlKFxuICAgICAgICAgIGNoYW5nZWRBdC5nZXRUaW1lKCkgKyA4NjQwMDAwMCAqIHJlcS5jb25maWcucGFzc3dvcmRQb2xpY3kubWF4UGFzc3dvcmRBZ2VcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGV4cGlyZXNBdCA8IG5ldyBEYXRlKCkpXG4gICAgICAgIC8vIGZhaWwgb2YgY3VycmVudCB0aW1lIGlzIHBhc3QgcGFzc3dvcmQgZXhwaXJ5IHRpbWVcbiAgICAgICAgeyB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgICAgICAnWW91ciBwYXNzd29yZCBoYXMgZXhwaXJlZC4gUGxlYXNlIHJlc2V0IHlvdXIgcGFzc3dvcmQuJ1xuICAgICAgICApOyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGhpZGRlbiBwcm9wZXJ0aWVzLlxuICAgIFVzZXJzUm91dGVyLnJlbW92ZUhpZGRlblByb3BlcnRpZXModXNlcik7XG5cbiAgICBhd2FpdCByZXEuY29uZmlnLmZpbGVzQ29udHJvbGxlci5leHBhbmRGaWxlc0luT2JqZWN0KHJlcS5jb25maWcsIHVzZXIpO1xuXG4gICAgLy8gQmVmb3JlIGxvZ2luIHRyaWdnZXI7IHRocm93cyBpZiBmYWlsdXJlXG4gICAgYXdhaXQgbWF5YmVSdW5UcmlnZ2VyKFxuICAgICAgVHJpZ2dlclR5cGVzLmJlZm9yZUxvZ2luLFxuICAgICAgcmVxLmF1dGgsXG4gICAgICBQYXJzZS5Vc2VyLmZyb21KU09OKE9iamVjdC5hc3NpZ24oeyBjbGFzc05hbWU6ICdfVXNlcicgfSwgdXNlcikpLFxuICAgICAgbnVsbCxcbiAgICAgIHJlcS5jb25maWcsXG4gICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgKTtcblxuICAgIC8vIElmIHdlIGhhdmUgc29tZSBuZXcgdmFsaWRhdGVkIGF1dGhEYXRhIHVwZGF0ZSBkaXJlY3RseVxuICAgIGlmICh2YWxpZGF0ZWRBdXRoRGF0YSAmJiBPYmplY3Qua2V5cyh2YWxpZGF0ZWRBdXRoRGF0YSkubGVuZ3RoKSB7XG4gICAgICBhd2FpdCByZXEuY29uZmlnLmRhdGFiYXNlLnVwZGF0ZShcbiAgICAgICAgJ19Vc2VyJyxcbiAgICAgICAgeyBvYmplY3RJZDogdXNlci5vYmplY3RJZCB9LFxuICAgICAgICB7IGF1dGhEYXRhOiB2YWxpZGF0ZWRBdXRoRGF0YSB9LFxuICAgICAgICB7fVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHNlc3Npb25EYXRhLCBjcmVhdGVTZXNzaW9uIH0gPSBSZXN0V3JpdGUuY3JlYXRlU2Vzc2lvbihyZXEuY29uZmlnLCB7XG4gICAgICB1c2VySWQ6IHVzZXIub2JqZWN0SWQsXG4gICAgICBjcmVhdGVkV2l0aDogUmVzdFdyaXRlLmJ1aWxkQ3JlYXRlZFdpdGgoJ2xvZ2luJyksXG4gICAgICBpbnN0YWxsYXRpb25JZDogcmVxLmluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgfSk7XG5cbiAgICB1c2VyLnNlc3Npb25Ub2tlbiA9IHNlc3Npb25EYXRhLnNlc3Npb25Ub2tlbjtcblxuICAgIGF3YWl0IGNyZWF0ZVNlc3Npb24oKTtcblxuICAgIGNvbnN0IGFmdGVyTG9naW5Vc2VyID0gUGFyc2UuVXNlci5mcm9tSlNPTihPYmplY3QuYXNzaWduKHsgY2xhc3NOYW1lOiAnX1VzZXInIH0sIHVzZXIpKTtcbiAgICBhd2FpdCBtYXliZVJ1blRyaWdnZXIoXG4gICAgICBUcmlnZ2VyVHlwZXMuYWZ0ZXJMb2dpbixcbiAgICAgIHsgLi4ucmVxLmF1dGgsIHVzZXI6IGFmdGVyTG9naW5Vc2VyIH0sXG4gICAgICBhZnRlckxvZ2luVXNlcixcbiAgICAgIG51bGwsXG4gICAgICByZXEuY29uZmlnLFxuICAgICAgcmVxLmluZm8uY29udGV4dFxuICAgICk7XG5cbiAgICBpZiAoYXV0aERhdGFSZXNwb25zZSkge1xuICAgICAgdXNlci5hdXRoRGF0YVJlc3BvbnNlID0gYXV0aERhdGFSZXNwb25zZTtcbiAgICB9XG4gICAgYXdhaXQgcmVxLmNvbmZpZy5hdXRoRGF0YU1hbmFnZXIucnVuQWZ0ZXJGaW5kKHJlcSwgdXNlci5hdXRoRGF0YSk7XG5cbiAgICByZXR1cm4geyByZXNwb25zZTogdXNlciB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgYWxsb3dzIG1hc3Rlci1rZXkgY2xpZW50cyB0byBjcmVhdGUgdXNlciBzZXNzaW9ucyB3aXRob3V0IGFjY2VzcyB0b1xuICAgKiB1c2VyIGNyZWRlbnRpYWxzLiBUaGlzIGVuYWJsZXMgc3lzdGVtcyB0aGF0IGNhbiBhdXRoZW50aWNhdGUgYWNjZXNzIGFub3RoZXJcbiAgICogd2F5IChBUEkga2V5LCBhcHAgYWRtaW5pc3RyYXRvcnMpIHRvIGFjdCBvbiBhIHVzZXIncyBiZWhhbGYuXG4gICAqXG4gICAqIFdlIGNyZWF0ZSBhIG5ldyBzZXNzaW9uIHJhdGhlciB0aGFuIGxvb2tpbmcgZm9yIGFuIGV4aXN0aW5nIHNlc3Npb247IHdlXG4gICAqIHdhbnQgdGhpcyB0byB3b3JrIGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlIHVzZXIgaXMgbG9nZ2VkIG91dCBvbiBhbGxcbiAgICogZGV2aWNlcywgc2luY2UgdGhpcyBjYW4gYmUgdXNlZCBieSBhdXRvbWF0ZWQgc3lzdGVtcyBhY3Rpbmcgb24gdGhlIHVzZXInc1xuICAgKiBiZWhhbGYuXG4gICAqXG4gICAqIEZvciB0aGUgbW9tZW50LCB3ZSdyZSBvbWl0dGluZyBldmVudCBob29rcyBhbmQgbG9ja291dCBjaGVja3MsIHNpbmNlXG4gICAqIGltbWVkaWF0ZSB1c2UgY2FzZXMgc3VnZ2VzdCAvbG9naW5BcyBjb3VsZCBiZSB1c2VkIGZvciBzZW1hbnRpY2FsbHlcbiAgICogZGlmZmVyZW50IHJlYXNvbnMgZnJvbSAvbG9naW5cbiAgICovXG4gIGFzeW5jIGhhbmRsZUxvZ0luQXMocmVxKSB7XG4gICAgaWYgKCFyZXEuYXV0aC5pc01hc3Rlcikge1xuICAgICAgdGhyb3cgY3JlYXRlU2FuaXRpemVkRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICdtYXN0ZXIga2V5IGlzIHJlcXVpcmVkJyxcbiAgICAgICAgcmVxLmNvbmZpZ1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHJlcS5hdXRoLmlzUmVhZE9ubHkpIHtcbiAgICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICBcInJlYWQtb25seSBtYXN0ZXJLZXkgaXNuJ3QgYWxsb3dlZCB0byBsb2dpbiBhcyBhbm90aGVyIHVzZXIuXCIsXG4gICAgICAgIHJlcS5jb25maWdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlcklkID0gcmVxLmJvZHk/LnVzZXJJZCB8fCByZXEucXVlcnkudXNlcklkO1xuICAgIGlmICghdXNlcklkKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfVkFMVUUsXG4gICAgICAgICd1c2VySWQgbXVzdCBub3QgYmUgZW1wdHksIG51bGwsIG9yIHVuZGVmaW5lZCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlSZXN1bHRzID0gYXdhaXQgcmVxLmNvbmZpZy5kYXRhYmFzZS5maW5kKCdfVXNlcicsIHsgb2JqZWN0SWQ6IHVzZXJJZCB9KTtcbiAgICBjb25zdCB1c2VyID0gcXVlcnlSZXN1bHRzWzBdO1xuICAgIGlmICghdXNlcikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICd1c2VyIG5vdCBmb3VuZCcpO1xuICAgIH1cblxuICAgIHRoaXMuX3Nhbml0aXplQXV0aERhdGEodXNlcik7XG5cbiAgICBjb25zdCB7IHNlc3Npb25EYXRhLCBjcmVhdGVTZXNzaW9uIH0gPSBSZXN0V3JpdGUuY3JlYXRlU2Vzc2lvbihyZXEuY29uZmlnLCB7XG4gICAgICB1c2VySWQsXG4gICAgICBjcmVhdGVkV2l0aDogUmVzdFdyaXRlLmJ1aWxkQ3JlYXRlZFdpdGgoJ2xvZ2luJywgJ21hc3RlcmtleScpLFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IHJlcS5pbmZvLmluc3RhbGxhdGlvbklkLFxuICAgIH0pO1xuXG4gICAgdXNlci5zZXNzaW9uVG9rZW4gPSBzZXNzaW9uRGF0YS5zZXNzaW9uVG9rZW47XG5cbiAgICBhd2FpdCBjcmVhdGVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4geyByZXNwb25zZTogdXNlciB9O1xuICB9XG5cbiAgaGFuZGxlVmVyaWZ5UGFzc3dvcmQocmVxKSB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0ZVVzZXJGcm9tUmVxdWVzdChyZXEpXG4gICAgICAudGhlbih1c2VyID0+IHtcbiAgICAgICAgLy8gUmVtb3ZlIGhpZGRlbiBwcm9wZXJ0aWVzLlxuICAgICAgICBVc2Vyc1JvdXRlci5yZW1vdmVIaWRkZW5Qcm9wZXJ0aWVzKHVzZXIpO1xuXG4gICAgICAgIHJldHVybiB7IHJlc3BvbnNlOiB1c2VyIH07XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUxvZ091dChyZXEpIHtcbiAgICBjb25zdCBzdWNjZXNzID0geyByZXNwb25zZToge30gfTtcbiAgICBpZiAocmVxLmluZm8gJiYgcmVxLmluZm8uc2Vzc2lvblRva2VuKSB7XG4gICAgICBjb25zdCByZWNvcmRzID0gYXdhaXQgcmVzdC5maW5kKFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICBBdXRoLm1hc3RlcihyZXEuY29uZmlnKSxcbiAgICAgICAgJ19TZXNzaW9uJyxcbiAgICAgICAgeyBzZXNzaW9uVG9rZW46IHJlcS5pbmZvLnNlc3Npb25Ub2tlbiB9LFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHJlcS5pbmZvLmNsaWVudFNESyxcbiAgICAgICAgcmVxLmluZm8uY29udGV4dFxuICAgICAgKTtcbiAgICAgIGlmIChyZWNvcmRzLnJlc3VsdHMgJiYgcmVjb3Jkcy5yZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICBhd2FpdCByZXN0LmRlbChcbiAgICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICAgIEF1dGgubWFzdGVyKHJlcS5jb25maWcpLFxuICAgICAgICAgICdfU2Vzc2lvbicsXG4gICAgICAgICAgcmVjb3Jkcy5yZXN1bHRzWzBdLm9iamVjdElkLFxuICAgICAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgbWF5YmVSdW5UcmlnZ2VyKFxuICAgICAgICAgIFRyaWdnZXJUeXBlcy5hZnRlckxvZ291dCxcbiAgICAgICAgICByZXEuYXV0aCxcbiAgICAgICAgICBQYXJzZS5TZXNzaW9uLmZyb21KU09OKE9iamVjdC5hc3NpZ24oeyBjbGFzc05hbWU6ICdfU2Vzc2lvbicgfSwgcmVjb3Jkcy5yZXN1bHRzWzBdKSksXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICByZXEuY29uZmlnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgX3Rocm93T25CYWRFbWFpbENvbmZpZyhyZXEpIHtcbiAgICB0cnkge1xuICAgICAgQ29uZmlnLnZhbGlkYXRlRW1haWxDb25maWd1cmF0aW9uKHtcbiAgICAgICAgZW1haWxBZGFwdGVyOiByZXEuY29uZmlnLnVzZXJDb250cm9sbGVyLmFkYXB0ZXIsXG4gICAgICAgIGFwcE5hbWU6IHJlcS5jb25maWcuYXBwTmFtZSxcbiAgICAgICAgcHVibGljU2VydmVyVVJMOiByZXEuY29uZmlnLnB1YmxpY1NlcnZlclVSTCB8fCByZXEuY29uZmlnLl9wdWJsaWNTZXJ2ZXJVUkwsXG4gICAgICAgIGVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uOiByZXEuY29uZmlnLmVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uLFxuICAgICAgICBlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkOiByZXEuY29uZmlnLmVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAodHlwZW9mIGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIE1heWJlIHdlIG5lZWQgYSBCYWQgQ29uZmlndXJhdGlvbiBlcnJvciwgYnV0IHRoZSBTREtzIHdvbid0IHVuZGVyc3RhbmQgaXQuIEZvciBub3csIEludGVybmFsIFNlcnZlciBFcnJvci5cbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUixcbiAgICAgICAgICAnQW4gYXBwTmFtZSwgcHVibGljU2VydmVyVVJMLCBhbmQgZW1haWxBZGFwdGVyIGFyZSByZXF1aXJlZCBmb3IgcGFzc3dvcmQgcmVzZXQgYW5kIGVtYWlsIHZlcmlmaWNhdGlvbiBmdW5jdGlvbmFsaXR5LidcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlUmVzZXRSZXF1ZXN0KHJlcSkge1xuICAgIHRoaXMuX3Rocm93T25CYWRFbWFpbENvbmZpZyhyZXEpO1xuXG4gICAgbGV0IGVtYWlsID0gcmVxLmJvZHk/LmVtYWlsO1xuICAgIGNvbnN0IHRva2VuID0gcmVxLmJvZHk/LnRva2VuO1xuXG4gICAgaWYgKCFlbWFpbCAmJiAhdG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5FTUFJTF9NSVNTSU5HLCAneW91IG11c3QgcHJvdmlkZSBhbiBlbWFpbCcpO1xuICAgIH1cblxuICAgIGxldCB1c2VyUmVzdWx0cyA9IG51bGw7XG4gICAgbGV0IHVzZXJEYXRhID0gbnVsbDtcblxuICAgIC8vIFdlIGNhbiBmaW5kIHRoZSB1c2VyIHVzaW5nIHRva2VuXG4gICAgaWYgKHRva2VuKSB7XG4gICAgICB1c2VyUmVzdWx0cyA9IGF3YWl0IHJlcS5jb25maWcuZGF0YWJhc2UuZmluZCgnX1VzZXInLCB7XG4gICAgICAgIF9wZXJpc2hhYmxlX3Rva2VuOiB0b2tlbixcbiAgICAgICAgX3BlcmlzaGFibGVfdG9rZW5fZXhwaXJlc19hdDogeyAkbHQ6IFBhcnNlLl9lbmNvZGUobmV3IERhdGUoKSkgfSxcbiAgICAgIH0pO1xuICAgICAgaWYgKHVzZXJSZXN1bHRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHVzZXJEYXRhID0gdXNlclJlc3VsdHNbMF07XG4gICAgICAgIGlmICh1c2VyRGF0YS5lbWFpbCkge1xuICAgICAgICAgIGVtYWlsID0gdXNlckRhdGEuZW1haWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAvLyBPciB1c2luZyBlbWFpbCBpZiBubyB0b2tlbiBwcm92aWRlZFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVtYWlsID09PSAnc3RyaW5nJykge1xuICAgICAgdXNlclJlc3VsdHMgPSBhd2FpdCByZXEuY29uZmlnLmRhdGFiYXNlLmZpbmQoXG4gICAgICAgICdfVXNlcicsXG4gICAgICAgIHsgJG9yOiBbeyBlbWFpbCB9LCB7IHVzZXJuYW1lOiBlbWFpbCwgZW1haWw6IHsgJGV4aXN0czogZmFsc2UgfSB9XSB9LFxuICAgICAgICB7IGxpbWl0OiAxIH0sXG4gICAgICAgIEF1dGgubWFpbnRlbmFuY2UocmVxLmNvbmZpZylcbiAgICAgICk7XG4gICAgICBpZiAodXNlclJlc3VsdHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdXNlckRhdGEgPSB1c2VyUmVzdWx0c1swXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGVtYWlsICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0VNQUlMX0FERFJFU1MsXG4gICAgICAgICd5b3UgbXVzdCBwcm92aWRlIGEgdmFsaWQgZW1haWwgc3RyaW5nJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodXNlckRhdGEpIHtcbiAgICAgIHRoaXMuX3Nhbml0aXplQXV0aERhdGEodXNlckRhdGEpO1xuICAgICAgLy8gR2V0IGZpbGVzIGF0dGFjaGVkIHRvIHVzZXJcbiAgICAgIGF3YWl0IHJlcS5jb25maWcuZmlsZXNDb250cm9sbGVyLmV4cGFuZEZpbGVzSW5PYmplY3QocmVxLmNvbmZpZywgdXNlckRhdGEpO1xuXG4gICAgICBjb25zdCB1c2VyID0gaW5mbGF0ZSgnX1VzZXInLCB1c2VyRGF0YSk7XG5cbiAgICAgIGF3YWl0IG1heWJlUnVuVHJpZ2dlcihcbiAgICAgICAgVHJpZ2dlclR5cGVzLmJlZm9yZVBhc3N3b3JkUmVzZXRSZXF1ZXN0LFxuICAgICAgICByZXEuYXV0aCxcbiAgICAgICAgdXNlcixcbiAgICAgICAgbnVsbCxcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmluZm8uY29udGV4dFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyQ29udHJvbGxlciA9IHJlcS5jb25maWcudXNlckNvbnRyb2xsZXI7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHVzZXJDb250cm9sbGVyLnNlbmRQYXNzd29yZFJlc2V0RW1haWwoZW1haWwpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzcG9uc2U6IHt9LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCkge1xuICAgICAgICBpZiAocmVxLmNvbmZpZy5wYXNzd29yZFBvbGljeT8ucmVzZXRQYXNzd29yZFN1Y2Nlc3NPbkludmFsaWRFbWFpbCA/PyB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlc3BvbnNlOiB7fSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVyci5tZXNzYWdlID0gYEEgdXNlciB3aXRoIHRoYXQgZW1haWwgZG9lcyBub3QgZXhpc3QuYDtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBhc3luYyBoYW5kbGVWZXJpZmljYXRpb25FbWFpbFJlcXVlc3QocmVxKSB7XG4gICAgdGhpcy5fdGhyb3dPbkJhZEVtYWlsQ29uZmlnKHJlcSk7XG5cbiAgICBjb25zdCB7IGVtYWlsIH0gPSByZXEuYm9keSB8fCB7fTtcbiAgICBpZiAoIWVtYWlsKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRU1BSUxfTUlTU0lORywgJ3lvdSBtdXN0IHByb3ZpZGUgYW4gZW1haWwnKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbWFpbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9FTUFJTF9BRERSRVNTLFxuICAgICAgICAneW91IG11c3QgcHJvdmlkZSBhIHZhbGlkIGVtYWlsIHN0cmluZydcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHJlcS5jb25maWcuZGF0YWJhc2UuZmluZCgnX1VzZXInLCB7IGVtYWlsOiBlbWFpbCB9LCB7fSwgQXV0aC5tYWludGVuYW5jZShyZXEuY29uZmlnKSk7XG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCB8fCByZXN1bHRzLmxlbmd0aCA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5FTUFJTF9OT1RfRk9VTkQsIGBObyB1c2VyIGZvdW5kIHdpdGggZW1haWwgJHtlbWFpbH1gKTtcbiAgICB9XG4gICAgY29uc3QgdXNlciA9IHJlc3VsdHNbMF07XG5cbiAgICAvLyByZW1vdmUgcGFzc3dvcmQgZmllbGQsIG1lc3NlcyB3aXRoIHNhdmluZyBvbiBwb3N0Z3Jlc1xuICAgIGRlbGV0ZSB1c2VyLnBhc3N3b3JkO1xuXG4gICAgaWYgKHVzZXIuZW1haWxWZXJpZmllZCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9USEVSX0NBVVNFLCBgRW1haWwgJHtlbWFpbH0gaXMgYWxyZWFkeSB2ZXJpZmllZC5gKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyQ29udHJvbGxlciA9IHJlcS5jb25maWcudXNlckNvbnRyb2xsZXI7XG4gICAgY29uc3Qgc2VuZCA9IGF3YWl0IHVzZXJDb250cm9sbGVyLnJlZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuKHVzZXIsIHJlcS5hdXRoLmlzTWFzdGVyLCByZXEuYXV0aC5pbnN0YWxsYXRpb25JZCwgcmVxLmlwKTtcbiAgICBpZiAoc2VuZCkge1xuICAgICAgdXNlckNvbnRyb2xsZXIuc2VuZFZlcmlmaWNhdGlvbkVtYWlsKHVzZXIsIHJlcSk7XG4gICAgfVxuICAgIHJldHVybiB7IHJlc3BvbnNlOiB7fSB9O1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlQ2hhbGxlbmdlKHJlcSkge1xuICAgIGNvbnN0IHsgdXNlcm5hbWUsIGVtYWlsLCBwYXNzd29yZCwgYXV0aERhdGEsIGNoYWxsZW5nZURhdGEgfSA9IHJlcS5ib2R5IHx8IHt9O1xuXG4gICAgLy8gaWYgdXNlcm5hbWUgb3IgZW1haWwgcHJvdmlkZWQgd2l0aCBwYXNzd29yZCB0cnkgdG8gYXV0aGVudGljYXRlIHRoZSB1c2VyIGJ5IHVzZXJuYW1lXG4gICAgbGV0IHVzZXI7XG4gICAgaWYgKHVzZXJuYW1lIHx8IGVtYWlsKSB7XG4gICAgICBpZiAoIXBhc3N3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5PVEhFUl9DQVVTRSxcbiAgICAgICAgICAnWW91IHByb3ZpZGVkIHVzZXJuYW1lIG9yIGVtYWlsLCB5b3UgbmVlZCB0byBhbHNvIHByb3ZpZGUgcGFzc3dvcmQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdXNlciA9IGF3YWl0IHRoaXMuX2F1dGhlbnRpY2F0ZVVzZXJGcm9tUmVxdWVzdChyZXEpO1xuICAgIH1cblxuICAgIGlmICghY2hhbGxlbmdlRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9USEVSX0NBVVNFLCAnTm90aGluZyB0byBjaGFsbGVuZ2UuJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjaGFsbGVuZ2VEYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9USEVSX0NBVVNFLCAnY2hhbGxlbmdlRGF0YSBzaG91bGQgYmUgYW4gb2JqZWN0LicpO1xuICAgIH1cblxuICAgIGxldCByZXF1ZXN0O1xuICAgIGxldCBwYXJzZVVzZXI7XG5cbiAgICAvLyBUcnkgdG8gZmluZCB1c2VyIGJ5IGF1dGhEYXRhXG4gICAgaWYgKGF1dGhEYXRhKSB7XG4gICAgICBpZiAodHlwZW9mIGF1dGhEYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT1RIRVJfQ0FVU0UsICdhdXRoRGF0YSBzaG91bGQgYmUgYW4gb2JqZWN0LicpO1xuICAgICAgfVxuICAgICAgaWYgKHVzZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLk9USEVSX0NBVVNFLFxuICAgICAgICAgICdZb3UgY2Fubm90IHByb3ZpZGUgdXNlcm5hbWUvZW1haWwgYW5kIGF1dGhEYXRhLCBvbmx5IHVzZSBvbmUgaWRlbnRpZmljYXRpb24gbWV0aG9kLidcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKE9iamVjdC5rZXlzKGF1dGhEYXRhKS5maWx0ZXIoa2V5ID0+IGF1dGhEYXRhW2tleV0uaWQpLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLk9USEVSX0NBVVNFLFxuICAgICAgICAgICdZb3UgY2Fubm90IHByb3ZpZGUgbW9yZSB0aGFuIG9uZSBhdXRoRGF0YSBwcm92aWRlciB3aXRoIGFuIGlkLidcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IEF1dGguZmluZFVzZXJzV2l0aEF1dGhEYXRhKHJlcS5jb25maWcsIGF1dGhEYXRhKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFyZXN1bHRzWzBdIHx8IHJlc3VsdHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnVXNlciBub3QgZm91bmQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmluZCB0aGUgcHJvdmlkZXIgdXNlZCB0byBmaW5kIHRoZSB1c2VyXG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gT2JqZWN0LmtleXMoYXV0aERhdGEpLmZpbmQoa2V5ID0+IGF1dGhEYXRhW2tleV0uaWQpO1xuXG4gICAgICAgIHBhcnNlVXNlciA9IFBhcnNlLlVzZXIuZnJvbUpTT04oeyBjbGFzc05hbWU6ICdfVXNlcicsIC4uLnJlc3VsdHNbMF0gfSk7XG4gICAgICAgIHJlcXVlc3QgPSBnZXRSZXF1ZXN0T2JqZWN0KHVuZGVmaW5lZCwgcmVxLmF1dGgsIHBhcnNlVXNlciwgcGFyc2VVc2VyLCByZXEuY29uZmlnKTtcbiAgICAgICAgcmVxdWVzdC5pc0NoYWxsZW5nZSA9IHRydWU7XG4gICAgICAgIC8vIFZhbGlkYXRlIGF1dGhEYXRhIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHVzZXIgdG8gYXZvaWQgYnJ1dGUtZm9yY2UgYXR0YWNrIG9uIGBpZGBcbiAgICAgICAgY29uc3QgeyB2YWxpZGF0b3IgfSA9IHJlcS5jb25maWcuYXV0aERhdGFNYW5hZ2VyLmdldFZhbGlkYXRvckZvclByb3ZpZGVyKHByb3ZpZGVyKTtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yUmVzcG9uc2UgPSBhd2FpdCB2YWxpZGF0b3IoYXV0aERhdGFbcHJvdmlkZXJdLCByZXEsIHBhcnNlVXNlciwgcmVxdWVzdCk7XG4gICAgICAgIGlmICh2YWxpZGF0b3JSZXNwb25zZSAmJiB2YWxpZGF0b3JSZXNwb25zZS52YWxpZGF0b3IpIHtcbiAgICAgICAgICBhd2FpdCB2YWxpZGF0b3JSZXNwb25zZS52YWxpZGF0b3IoKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBSZXdyaXRlIHRoZSBlcnJvciB0byBhdm9pZCBndWVzcyBpZCBhdHRhY2tcbiAgICAgICAgbG9nZ2VyLmVycm9yKGUpO1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ1VzZXIgbm90IGZvdW5kLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VVc2VyKSB7XG4gICAgICBwYXJzZVVzZXIgPSB1c2VyID8gUGFyc2UuVXNlci5mcm9tSlNPTih7IGNsYXNzTmFtZTogJ19Vc2VyJywgLi4udXNlciB9KSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgIHJlcXVlc3QgPSBnZXRSZXF1ZXN0T2JqZWN0KHVuZGVmaW5lZCwgcmVxLmF1dGgsIHBhcnNlVXNlciwgcGFyc2VVc2VyLCByZXEuY29uZmlnKTtcbiAgICAgIHJlcXVlc3QuaXNDaGFsbGVuZ2UgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBhY2MgPSB7fTtcbiAgICAvLyBFeGVjdXRlIGNoYWxsZW5nZSBzdGVwLWJ5LXN0ZXAgd2l0aCBjb25zaXN0ZW50IG9yZGVyIGZvciBiZXR0ZXIgZXJyb3IgZmVlZGJhY2tcbiAgICAvLyBhbmQgdG8gYXZvaWQgdG8gdHJpZ2dlciBvdGhlcnMgY2hhbGxlbmdlcyBpZiBvbmUgb2YgdGhlbSBmYWlsc1xuICAgIGZvciAoY29uc3QgcHJvdmlkZXIgb2YgT2JqZWN0LmtleXMoY2hhbGxlbmdlRGF0YSkuc29ydCgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBhdXRoQWRhcHRlciA9IHJlcS5jb25maWcuYXV0aERhdGFNYW5hZ2VyLmdldFZhbGlkYXRvckZvclByb3ZpZGVyKHByb3ZpZGVyKTtcbiAgICAgICAgaWYgKCFhdXRoQWRhcHRlcikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBhZGFwdGVyOiB7IGNoYWxsZW5nZSB9LFxuICAgICAgICB9ID0gYXV0aEFkYXB0ZXI7XG4gICAgICAgIGlmICh0eXBlb2YgY2hhbGxlbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29uc3QgcHJvdmlkZXJDaGFsbGVuZ2VSZXNwb25zZSA9IGF3YWl0IGNoYWxsZW5nZShcbiAgICAgICAgICAgIGNoYWxsZW5nZURhdGFbcHJvdmlkZXJdLFxuICAgICAgICAgICAgYXV0aERhdGEgJiYgYXV0aERhdGFbcHJvdmlkZXJdLFxuICAgICAgICAgICAgcmVxLmNvbmZpZy5hdXRoW3Byb3ZpZGVyXSxcbiAgICAgICAgICAgIHJlcXVlc3RcbiAgICAgICAgICApO1xuICAgICAgICAgIGFjY1twcm92aWRlcl0gPSBwcm92aWRlckNoYWxsZW5nZVJlc3BvbnNlIHx8IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCBlID0gcmVzb2x2ZUVycm9yKGVyciwge1xuICAgICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsXG4gICAgICAgICAgbWVzc2FnZTogJ0NoYWxsZW5nZSBmYWlsZWQuIFVua25vd24gZXJyb3IuJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHVzZXJTdHJpbmcgPSByZXEuYXV0aCAmJiByZXEuYXV0aC51c2VyID8gcmVxLmF1dGgudXNlci5pZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICAgIGBGYWlsZWQgcnVubmluZyBhdXRoIHN0ZXAgY2hhbGxlbmdlIGZvciAke3Byb3ZpZGVyfSBmb3IgdXNlciAke3VzZXJTdHJpbmd9IHdpdGggRXJyb3I6IGAgK1xuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXV0aGVudGljYXRpb25TdGVwOiAnY2hhbGxlbmdlJyxcbiAgICAgICAgICAgIGVycm9yOiBlLFxuICAgICAgICAgICAgdXNlcjogdXNlclN0cmluZyxcbiAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgcmVzcG9uc2U6IHsgY2hhbGxlbmdlRGF0YTogYWNjIH0gfTtcbiAgfVxuXG4gIG1vdW50Um91dGVzKCkge1xuICAgIHRoaXMucm91dGUoJ0dFVCcsICcvdXNlcnMnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRmluZChyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ1BPU1QnLCAnL3VzZXJzJywgcHJvbWlzZUVuc3VyZUlkZW1wb3RlbmN5LCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlQ3JlYXRlKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnR0VUJywgJy91c2Vycy9tZScsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVNZShyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ0dFVCcsICcvdXNlcnMvOm9iamVjdElkJywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUdldChyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ1BVVCcsICcvdXNlcnMvOm9iamVjdElkJywgcHJvbWlzZUVuc3VyZUlkZW1wb3RlbmN5LCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlVXBkYXRlKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnREVMRVRFJywgJy91c2Vycy86b2JqZWN0SWQnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRGVsZXRlKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnR0VUJywgJy9sb2dpbicsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMb2dJbihyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ1BPU1QnLCAnL2xvZ2luJywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxvZ0luKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUE9TVCcsICcvbG9naW5BcycsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMb2dJbkFzKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUE9TVCcsICcvbG9nb3V0JywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxvZ091dChyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ1BPU1QnLCAnL3JlcXVlc3RQYXNzd29yZFJlc2V0JywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZVJlc2V0UmVxdWVzdChyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ1BPU1QnLCAnL3ZlcmlmaWNhdGlvbkVtYWlsUmVxdWVzdCcsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVWZXJpZmljYXRpb25FbWFpbFJlcXVlc3QocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdHRVQnLCAnL3ZlcmlmeVBhc3N3b3JkJywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZVZlcmlmeVBhc3N3b3JkKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUE9TVCcsICcvdmVyaWZ5UGFzc3dvcmQnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlVmVyaWZ5UGFzc3dvcmQocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy9jaGFsbGVuZ2UnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlQ2hhbGxlbmdlKHJlcSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVXNlcnNSb3V0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLGVBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLGNBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLEtBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLEtBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLFNBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLFNBQUEsR0FBQVAsT0FBQTtBQU9BLElBQUFRLFlBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLFVBQUEsR0FBQVYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFVLE9BQUEsR0FBQVYsT0FBQTtBQUNBLElBQUFXLE1BQUEsR0FBQVgsT0FBQTtBQUFnRCxTQUFBRCx1QkFBQWEsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQW5CaEQ7O0FBcUJPLE1BQU1HLFdBQVcsU0FBU0Msc0JB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
644
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX0NvbmZpZyIsIl9BY2NvdW50TG9ja291dCIsIl9DbGFzc2VzUm91dGVyIiwiX3Jlc3QiLCJfQXV0aCIsIl9wYXNzd29yZCIsIl90cmlnZ2VycyIsIl9taWRkbGV3YXJlcyIsIl9SZXN0V3JpdGUiLCJfbG9nZ2VyIiwiX0Vycm9yIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiVXNlcnNSb3V0ZXIiLCJDbGFzc2VzUm91dGVyIiwiY2xhc3NOYW1lIiwicmVtb3ZlSGlkZGVuUHJvcGVydGllcyIsIm9iaiIsImtleSIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInRlc3QiLCJfc2FuaXRpemVBdXRoRGF0YSIsInVzZXIiLCJwYXNzd29yZCIsImF1dGhEYXRhIiwia2V5cyIsImZvckVhY2giLCJwcm92aWRlciIsImxlbmd0aCIsIl9hdXRoZW50aWNhdGVVc2VyRnJvbVJlcXVlc3QiLCJyZXEiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInBheWxvYWQiLCJib2R5IiwidXNlcm5hbWUiLCJxdWVyeSIsImVtYWlsIiwiaWdub3JlRW1haWxWZXJpZmljYXRpb24iLCJQYXJzZSIsIkVycm9yIiwiVVNFUk5BTUVfTUlTU0lORyIsIlBBU1NXT1JEX01JU1NJTkciLCJPQkpFQ1RfTk9UX0ZPVU5EIiwiaXNWYWxpZFBhc3N3b3JkIiwiJG9yIiwiY29uZmlnIiwiZGF0YWJhc2UiLCJmaW5kIiwiQXV0aCIsIm1haW50ZW5hbmNlIiwidGhlbiIsInJlc3VsdHMiLCJsb2dnZXJDb250cm9sbGVyIiwid2FybiIsImZpbHRlciIsInBhc3N3b3JkQ3J5cHRvIiwiY29tcGFyZSIsImNvcnJlY3QiLCJhY2NvdW50TG9ja291dFBvbGljeSIsIkFjY291bnRMb2Nrb3V0IiwiaGFuZGxlTG9naW5BdHRlbXB0IiwiYXV0aCIsImlzTWFzdGVyIiwiQUNMIiwiYXV0aFByb3ZpZGVyIiwiam9pbiIsInJlcXVlc3QiLCJtYXN0ZXIiLCJpcCIsImluc3RhbGxhdGlvbklkIiwib2JqZWN0IiwiVXNlciIsImZyb21KU09OIiwiYXNzaWduIiwiY3JlYXRlZFdpdGgiLCJSZXN0V3JpdGUiLCJidWlsZENyZWF0ZWRXaXRoIiwiaXNNYWludGVuYW5jZSIsInZlcmlmeVVzZXJFbWFpbHMiLCJwcmV2ZW50TG9naW5XaXRoVW52ZXJpZmllZEVtYWlsIiwiZW1haWxWZXJpZmllZCIsIkVNQUlMX05PVF9GT1VORCIsImNhdGNoIiwiZXJyb3IiLCJoYW5kbGVNZSIsImluZm8iLCJzZXNzaW9uVG9rZW4iLCJjcmVhdGVTYW5pdGl6ZWRFcnJvciIsIklOVkFMSURfU0VTU0lPTl9UT0tFTiIsInJlc3QiLCJpbmNsdWRlIiwiY2xpZW50U0RLIiwiY29udGV4dCIsInJlc3BvbnNlIiwiaGFuZGxlTG9nSW4iLCJjaGVja0lmVXNlckhhc1Byb3ZpZGVkQ29uZmlndXJlZFByb3ZpZGVyc0ZvckxvZ2luIiwiYXV0aERhdGFSZXNwb25zZSIsInZhbGlkYXRlZEF1dGhEYXRhIiwicmVzIiwiaGFuZGxlQXV0aERhdGFWYWxpZGF0aW9uIiwib2JqZWN0SWQiLCJwYXNzd29yZFBvbGljeSIsIm1heFBhc3N3b3JkQWdlIiwiY2hhbmdlZEF0IiwiX3Bhc3N3b3JkX2NoYW5nZWRfYXQiLCJEYXRlIiwidXBkYXRlIiwiX2VuY29kZSIsIl9fdHlwZSIsImlzbyIsImV4cGlyZXNBdCIsImdldFRpbWUiLCJmaWxlc0NvbnRyb2xsZXIiLCJleHBhbmRGaWxlc0luT2JqZWN0IiwibWF5YmVSdW5UcmlnZ2VyIiwiVHJpZ2dlclR5cGVzIiwiYmVmb3JlTG9naW4iLCJzZXNzaW9uRGF0YSIsImNyZWF0ZVNlc3Npb24iLCJ1c2VySWQiLCJhZnRlckxvZ2luVXNlciIsImFmdGVyTG9naW4iLCJhdXRoRGF0YU1hbmFnZXIiLCJydW5BZnRlckZpbmQiLCJoYW5kbGVMb2dJbkFzIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsImlzUmVhZE9ubHkiLCJJTlZBTElEX1ZBTFVFIiwicXVlcnlSZXN1bHRzIiwiaGFuZGxlVmVyaWZ5UGFzc3dvcmQiLCJoYW5kbGVMb2dPdXQiLCJzdWNjZXNzIiwicmVjb3JkcyIsInVuZGVmaW5lZCIsImRlbCIsImFmdGVyTG9nb3V0IiwiU2Vzc2lvbiIsIl90aHJvd09uQmFkRW1haWxDb25maWciLCJDb25maWciLCJ2YWxpZGF0ZUVtYWlsQ29uZmlndXJhdGlvbiIsImVtYWlsQWRhcHRlciIsInVzZXJDb250cm9sbGVyIiwiYWRhcHRlciIsImFwcE5hbWUiLCJwdWJsaWNTZXJ2ZXJVUkwiLCJfcHVibGljU2VydmVyVVJMIiwiZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24iLCJlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkIiwiSU5URVJOQUxfU0VSVkVSX0VSUk9SIiwiaGFuZGxlUmVzZXRSZXF1ZXN0IiwidG9rZW4iLCJFTUFJTF9NSVNTSU5HIiwidXNlclJlc3VsdHMiLCJ1c2VyRGF0YSIsIl9wZXJpc2hhYmxlX3Rva2VuIiwiX3BlcmlzaGFibGVfdG9rZW5fZXhwaXJlc19hdCIsIiRsdCIsIiRleGlzdHMiLCJsaW1pdCIsIklOVkFMSURfRU1BSUxfQUREUkVTUyIsImluZmxhdGUiLCJiZWZvcmVQYXNzd29yZFJlc2V0UmVxdWVzdCIsInNlbmRQYXNzd29yZFJlc2V0RW1haWwiLCJlcnIiLCJjb2RlIiwicmVzZXRQYXNzd29yZFN1Y2Nlc3NPbkludmFsaWRFbWFpbCIsIm1lc3NhZ2UiLCJoYW5kbGVWZXJpZmljYXRpb25FbWFpbFJlcXVlc3QiLCJPVEhFUl9DQVVTRSIsInNlbmQiLCJyZWdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbiIsInNlbmRWZXJpZmljYXRpb25FbWFpbCIsImhhbmRsZUNoYWxsZW5nZSIsImNoYWxsZW5nZURhdGEiLCJwYXJzZVVzZXIiLCJpZCIsImZpbmRVc2Vyc1dpdGhBdXRoRGF0YSIsImdldFJlcXVlc3RPYmplY3QiLCJpc0NoYWxsZW5nZSIsInZhbGlkYXRvciIsImdldFZhbGlkYXRvckZvclByb3ZpZGVyIiwidmFsaWRhdG9yUmVzcG9uc2UiLCJsb2dnZXIiLCJhY2MiLCJzb3J0IiwiYXV0aEFkYXB0ZXIiLCJjaGFsbGVuZ2UiLCJwcm92aWRlckNoYWxsZW5nZVJlc3BvbnNlIiwicmVzb2x2ZUVycm9yIiwiU0NSSVBUX0ZBSUxFRCIsInVzZXJTdHJpbmciLCJKU09OIiwic3RyaW5naWZ5IiwiYXV0aGVudGljYXRpb25TdGVwIiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsImhhbmRsZUZpbmQiLCJwcm9taXNlRW5zdXJlSWRlbXBvdGVuY3kiLCJoYW5kbGVDcmVhdGUiLCJoYW5kbGVHZXQiLCJoYW5kbGVVcGRhdGUiLCJoYW5kbGVEZWxldGUiLCJleHBvcnRzIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUm91dGVycy9Vc2Vyc1JvdXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGVzZSBtZXRob2RzIGhhbmRsZSB0aGUgVXNlci1yZWxhdGVkIHJvdXRlcy5cblxuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IENvbmZpZyBmcm9tICcuLi9Db25maWcnO1xuaW1wb3J0IEFjY291bnRMb2Nrb3V0IGZyb20gJy4uL0FjY291bnRMb2Nrb3V0JztcbmltcG9ydCBDbGFzc2VzUm91dGVyIGZyb20gJy4vQ2xhc3Nlc1JvdXRlcic7XG5pbXBvcnQgcmVzdCBmcm9tICcuLi9yZXN0JztcbmltcG9ydCBBdXRoIGZyb20gJy4uL0F1dGgnO1xuaW1wb3J0IHBhc3N3b3JkQ3J5cHRvIGZyb20gJy4uL3Bhc3N3b3JkJztcbmltcG9ydCB7XG4gIG1heWJlUnVuVHJpZ2dlcixcbiAgVHlwZXMgYXMgVHJpZ2dlclR5cGVzLFxuICBnZXRSZXF1ZXN0T2JqZWN0LFxuICByZXNvbHZlRXJyb3IsXG4gIGluZmxhdGUsXG59IGZyb20gJy4uL3RyaWdnZXJzJztcbmltcG9ydCB7IHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSB9IGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCBSZXN0V3JpdGUgZnJvbSAnLi4vUmVzdFdyaXRlJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBjcmVhdGVTYW5pdGl6ZWRFcnJvciB9IGZyb20gJy4uL0Vycm9yJztcblxuZXhwb3J0IGNsYXNzIFVzZXJzUm91dGVyIGV4dGVuZHMgQ2xhc3Nlc1JvdXRlciB7XG4gIGNsYXNzTmFtZSgpIHtcbiAgICByZXR1cm4gJ19Vc2VyJztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsbCBcIl9cIiBwcmVmaXhlZCBwcm9wZXJ0aWVzIGZyb20gYW4gb2JqZWN0LCBleGNlcHQgXCJfX3R5cGVcIlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIEFuIG9iamVjdC5cbiAgICovXG4gIHN0YXRpYyByZW1vdmVIaWRkZW5Qcm9wZXJ0aWVzKG9iaikge1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIC8vIFJlZ2V4cCBjb21lcyBmcm9tIFBhcnNlLk9iamVjdC5wcm90b3R5cGUudmFsaWRhdGVcbiAgICAgICAgaWYgKGtleSAhPT0gJ19fdHlwZScgJiYgIS9eW0EtWmEtel1bMC05QS1aYS16X10qJC8udGVzdChrZXkpKSB7XG4gICAgICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIHJldHJpZXZpbmcgYSB1c2VyIGRpcmVjdGx5IGZyb20gdGhlIGRhdGFiYXNlLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGVcbiAgICogcGFzc3dvcmQgZnJvbSB0aGUgb2JqZWN0IChmb3Igc2VjdXJpdHkpLCBhbmQgZml4IGFuIGlzc3VlIHNvbWUgU0RLcyBoYXZlXG4gICAqIHdpdGggbnVsbCB2YWx1ZXNcbiAgICovXG4gIF9zYW5pdGl6ZUF1dGhEYXRhKHVzZXIpIHtcbiAgICBkZWxldGUgdXNlci5wYXNzd29yZDtcblxuICAgIC8vIFNvbWV0aW1lcyB0aGUgYXV0aERhdGEgc3RpbGwgaGFzIG51bGwgb24gdGhhdCBrZXlzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BhcnNlLWNvbW11bml0eS9wYXJzZS1zZXJ2ZXIvaXNzdWVzLzkzNVxuICAgIGlmICh1c2VyLmF1dGhEYXRhKSB7XG4gICAgICBPYmplY3Qua2V5cyh1c2VyLmF1dGhEYXRhKS5mb3JFYWNoKHByb3ZpZGVyID0+IHtcbiAgICAgICAgaWYgKHVzZXIuYXV0aERhdGFbcHJvdmlkZXJdID09PSBudWxsKSB7XG4gICAgICAgICAgZGVsZXRlIHVzZXIuYXV0aERhdGFbcHJvdmlkZXJdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChPYmplY3Qua2V5cyh1c2VyLmF1dGhEYXRhKS5sZW5ndGggPT0gMCkge1xuICAgICAgICBkZWxldGUgdXNlci5hdXRoRGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGEgcGFzc3dvcmQgcmVxdWVzdCBpbiBsb2dpbiBhbmQgdmVyaWZ5UGFzc3dvcmRcbiAgICogQHBhcmFtIHtPYmplY3R9IHJlcSBUaGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBVc2VyIG9iamVjdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2F1dGhlbnRpY2F0ZVVzZXJGcm9tUmVxdWVzdChyZXEpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gVXNlIHF1ZXJ5IHBhcmFtZXRlcnMgaW5zdGVhZCBpZiBwcm92aWRlZCBpbiB1cmxcbiAgICAgIGxldCBwYXlsb2FkID0gcmVxLmJvZHkgfHwge307XG4gICAgICBpZiAoXG4gICAgICAgICghcGF5bG9hZC51c2VybmFtZSAmJiByZXEucXVlcnkgJiYgcmVxLnF1ZXJ5LnVzZXJuYW1lKSB8fFxuICAgICAgICAoIXBheWxvYWQuZW1haWwgJiYgcmVxLnF1ZXJ5ICYmIHJlcS5xdWVyeS5lbWFpbClcbiAgICAgICkge1xuICAgICAgICBwYXlsb2FkID0gcmVxLnF1ZXJ5O1xuICAgICAgfVxuICAgICAgY29uc3QgeyB1c2VybmFtZSwgZW1haWwsIHBhc3N3b3JkLCBpZ25vcmVFbWFpbFZlcmlmaWNhdGlvbiB9ID0gcGF5bG9hZDtcblxuICAgICAgLy8gVE9ETzogdXNlIHRoZSByaWdodCBlcnJvciBjb2RlcyAvIGRlc2NyaXB0aW9ucy5cbiAgICAgIGlmICghdXNlcm5hbWUgJiYgIWVtYWlsKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5VU0VSTkFNRV9NSVNTSU5HLCAndXNlcm5hbWUvZW1haWwgaXMgcmVxdWlyZWQuJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXBhc3N3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5QQVNTV09SRF9NSVNTSU5HLCAncGFzc3dvcmQgaXMgcmVxdWlyZWQuJyk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBwYXNzd29yZCAhPT0gJ3N0cmluZycgfHxcbiAgICAgICAgKGVtYWlsICYmIHR5cGVvZiBlbWFpbCAhPT0gJ3N0cmluZycpIHx8XG4gICAgICAgICh1c2VybmFtZSAmJiB0eXBlb2YgdXNlcm5hbWUgIT09ICdzdHJpbmcnKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnSW52YWxpZCB1c2VybmFtZS9wYXNzd29yZC4nKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHVzZXI7XG4gICAgICBsZXQgaXNWYWxpZFBhc3N3b3JkID0gZmFsc2U7XG4gICAgICBsZXQgcXVlcnk7XG4gICAgICBpZiAoZW1haWwgJiYgdXNlcm5hbWUpIHtcbiAgICAgICAgcXVlcnkgPSB7IGVtYWlsLCB1c2VybmFtZSB9O1xuICAgICAgfSBlbHNlIGlmIChlbWFpbCkge1xuICAgICAgICBxdWVyeSA9IHsgZW1haWwgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5ID0geyAkb3I6IFt7IHVzZXJuYW1lIH0sIHsgZW1haWw6IHVzZXJuYW1lIH1dIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVxLmNvbmZpZy5kYXRhYmFzZVxuICAgICAgICAuZmluZCgnX1VzZXInLCBxdWVyeSwge30sIEF1dGgubWFpbnRlbmFuY2UocmVxLmNvbmZpZykpXG4gICAgICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnSW52YWxpZCB1c2VybmFtZS9wYXNzd29yZC4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAvLyBjb3JuZXIgY2FzZSB3aGVyZSB1c2VyMSBoYXMgdXNlcm5hbWUgPT0gdXNlcjIgZW1haWxcbiAgICAgICAgICAgIHJlcS5jb25maWcubG9nZ2VyQ29udHJvbGxlci53YXJuKFxuICAgICAgICAgICAgICBcIlRoZXJlIGlzIGEgdXNlciB3aGljaCBlbWFpbCBpcyB0aGUgc2FtZSBhcyBhbm90aGVyIHVzZXIncyB1c2VybmFtZSwgbG9nZ2luZyBpbiBiYXNlZCBvbiB1c2VybmFtZVwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdXNlciA9IHJlc3VsdHMuZmlsdGVyKHVzZXIgPT4gdXNlci51c2VybmFtZSA9PT0gdXNlcm5hbWUpWzBdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1c2VyID0gcmVzdWx0c1swXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcGFzc3dvcmRDcnlwdG8uY29tcGFyZShwYXNzd29yZCwgdXNlci5wYXNzd29yZCk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKGNvcnJlY3QgPT4ge1xuICAgICAgICAgIGlzVmFsaWRQYXNzd29yZCA9IGNvcnJlY3Q7XG4gICAgICAgICAgY29uc3QgYWNjb3VudExvY2tvdXRQb2xpY3kgPSBuZXcgQWNjb3VudExvY2tvdXQodXNlciwgcmVxLmNvbmZpZyk7XG4gICAgICAgICAgcmV0dXJuIGFjY291bnRMb2Nrb3V0UG9saWN5LmhhbmRsZUxvZ2luQXR0ZW1wdChpc1ZhbGlkUGFzc3dvcmQpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgaWYgKCFpc1ZhbGlkUGFzc3dvcmQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnSW52YWxpZCB1c2VybmFtZS9wYXNzd29yZC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gRW5zdXJlIHRoZSB1c2VyIGlzbid0IGxvY2tlZCBvdXRcbiAgICAgICAgICAvLyBBIGxvY2tlZCBvdXQgdXNlciB3b24ndCBiZSBhYmxlIHRvIGxvZ2luXG4gICAgICAgICAgLy8gVG8gbG9jayBhIHVzZXIgb3V0LCBqdXN0IHNldCB0aGUgQUNMIHRvIGBtYXN0ZXJLZXlgIG9ubHkgICh7fSkuXG4gICAgICAgICAgLy8gRW1wdHkgQUNMIGlzIE9LXG4gICAgICAgICAgaWYgKCFyZXEuYXV0aC5pc01hc3RlciAmJiB1c2VyLkFDTCAmJiBPYmplY3Qua2V5cyh1c2VyLkFDTCkubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnSW52YWxpZCB1c2VybmFtZS9wYXNzd29yZC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQ3JlYXRlIHJlcXVlc3Qgb2JqZWN0IGZvciB2ZXJpZmljYXRpb24gZnVuY3Rpb25zXG4gICAgICAgICAgY29uc3QgYXV0aFByb3ZpZGVyID1cbiAgICAgICAgICAgIHJlcS5ib2R5ICYmXG4gICAgICAgICAgICByZXEuYm9keS5hdXRoRGF0YSAmJlxuICAgICAgICAgICAgT2JqZWN0LmtleXMocmVxLmJvZHkuYXV0aERhdGEpLmxlbmd0aCAmJlxuICAgICAgICAgICAgT2JqZWN0LmtleXMocmVxLmJvZHkuYXV0aERhdGEpLmpvaW4oJywnKTtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgbWFzdGVyOiByZXEuYXV0aC5pc01hc3RlcixcbiAgICAgICAgICAgIGlwOiByZXEuY29uZmlnLmlwLFxuICAgICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IHJlcS5hdXRoLmluc3RhbGxhdGlvbklkLFxuICAgICAgICAgICAgb2JqZWN0OiBQYXJzZS5Vc2VyLmZyb21KU09OKE9iamVjdC5hc3NpZ24oeyBjbGFzc05hbWU6ICdfVXNlcicgfSwgdXNlcikpLFxuICAgICAgICAgICAgY3JlYXRlZFdpdGg6IFJlc3RXcml0ZS5idWlsZENyZWF0ZWRXaXRoKCdsb2dpbicsIGF1dGhQcm92aWRlciksXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIC8vIElmIHJlcXVlc3QgZG9lc24ndCB1c2UgbWFzdGVyIG9yIG1haW50ZW5hbmNlIGtleSB3aXRoIGlnbm9yaW5nIGVtYWlsIHZlcmlmaWNhdGlvblxuICAgICAgICAgIGlmICghKChyZXEuYXV0aC5pc01hc3RlciB8fCByZXEuYXV0aC5pc01haW50ZW5hbmNlKSAmJiBpZ25vcmVFbWFpbFZlcmlmaWNhdGlvbikpIHtcblxuICAgICAgICAgICAgLy8gR2V0IHZlcmlmaWNhdGlvbiBjb25kaXRpb25zIHdoaWNoIGNhbiBiZSBib29sZWFucyBvciBmdW5jdGlvbnM7IHRoZSBwdXJwb3NlIG9mIHRoaXMgYXN5bmMvYXdhaXRcbiAgICAgICAgICAgIC8vIHN0cnVjdHVyZSBpcyB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IGV4ZWN1dGluZyBzdWJzZXF1ZW50IGZ1bmN0aW9ucyBpZiBwcmV2aW91cyBvbmVzIGZhaWwgaW4gdGhlXG4gICAgICAgICAgICAvLyBjb25kaXRpb25hbCBzdGF0ZW1lbnQgYmVsb3csIGFzIGEgZGV2ZWxvcGVyIG1heSBkZWNpZGUgdG8gZXhlY3V0ZSBleHBlbnNpdmUgb3BlcmF0aW9ucyBpbiB0aGVtXG4gICAgICAgICAgICBjb25zdCB2ZXJpZnlVc2VyRW1haWxzID0gYXN5bmMgKCkgPT4gcmVxLmNvbmZpZy52ZXJpZnlVc2VyRW1haWxzID09PSB0cnVlIHx8ICh0eXBlb2YgcmVxLmNvbmZpZy52ZXJpZnlVc2VyRW1haWxzID09PSAnZnVuY3Rpb24nICYmIGF3YWl0IFByb21pc2UucmVzb2x2ZShyZXEuY29uZmlnLnZlcmlmeVVzZXJFbWFpbHMocmVxdWVzdCkpID09PSB0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZlbnRMb2dpbldpdGhVbnZlcmlmaWVkRW1haWwgPSBhc3luYyAoKSA9PiByZXEuY29uZmlnLnByZXZlbnRMb2dpbldpdGhVbnZlcmlmaWVkRW1haWwgPT09IHRydWUgfHwgKHR5cGVvZiByZXEuY29uZmlnLnByZXZlbnRMb2dpbldpdGhVbnZlcmlmaWVkRW1haWwgPT09ICdmdW5jdGlvbicgJiYgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKHJlcS5jb25maWcucHJldmVudExvZ2luV2l0aFVudmVyaWZpZWRFbWFpbChyZXF1ZXN0KSkgPT09IHRydWUpO1xuICAgICAgICAgICAgaWYgKGF3YWl0IHZlcmlmeVVzZXJFbWFpbHMoKSAmJiBhd2FpdCBwcmV2ZW50TG9naW5XaXRoVW52ZXJpZmllZEVtYWlsKCkgJiYgIXVzZXIuZW1haWxWZXJpZmllZCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRU1BSUxfTk9UX0ZPVU5ELCAnVXNlciBlbWFpbCBpcyBub3QgdmVyaWZpZWQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fc2FuaXRpemVBdXRoRGF0YSh1c2VyKTtcblxuICAgICAgICAgIHJldHVybiByZXNvbHZlKHVzZXIpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZU1lKHJlcSkge1xuICAgIGlmICghcmVxLmluZm8gfHwgIXJlcS5pbmZvLnNlc3Npb25Ub2tlbikge1xuICAgICAgdGhyb3cgY3JlYXRlU2FuaXRpemVkRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9TRVNTSU9OX1RPS0VOLCAnSW52YWxpZCBzZXNzaW9uIHRva2VuJywgcmVxLmNvbmZpZyk7XG4gICAgfVxuICAgIGNvbnN0IHNlc3Npb25Ub2tlbiA9IHJlcS5pbmZvLnNlc3Npb25Ub2tlbjtcbiAgICByZXR1cm4gcmVzdFxuICAgICAgLmZpbmQoXG4gICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgIEF1dGgubWFzdGVyKHJlcS5jb25maWcpLFxuICAgICAgICAnX1Nlc3Npb24nLFxuICAgICAgICB7IHNlc3Npb25Ub2tlbiB9LFxuICAgICAgICB7IGluY2x1ZGU6ICd1c2VyJyB9LFxuICAgICAgICByZXEuaW5mby5jbGllbnRTREssXG4gICAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICAgIClcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKCFyZXNwb25zZS5yZXN1bHRzIHx8IHJlc3BvbnNlLnJlc3VsdHMubGVuZ3RoID09IDAgfHwgIXJlc3BvbnNlLnJlc3VsdHNbMF0udXNlcikge1xuICAgICAgICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfU0VTU0lPTl9UT0tFTiwgJ0ludmFsaWQgc2Vzc2lvbiB0b2tlbicsIHJlcS5jb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHVzZXIgPSByZXNwb25zZS5yZXN1bHRzWzBdLnVzZXI7XG4gICAgICAgICAgLy8gU2VuZCB0b2tlbiBiYWNrIG9uIHRoZSBsb2dpbiwgYmVjYXVzZSBTREtzIGV4cGVjdCB0aGF0LlxuICAgICAgICAgIHVzZXIuc2Vzc2lvblRva2VuID0gc2Vzc2lvblRva2VuO1xuXG4gICAgICAgICAgLy8gUmVtb3ZlIGhpZGRlbiBwcm9wZXJ0aWVzLlxuICAgICAgICAgIFVzZXJzUm91dGVyLnJlbW92ZUhpZGRlblByb3BlcnRpZXModXNlcik7XG4gICAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHVzZXIgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyBoYW5kbGVMb2dJbihyZXEpIHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgdGhpcy5fYXV0aGVudGljYXRlVXNlckZyb21SZXF1ZXN0KHJlcSk7XG4gICAgY29uc3QgYXV0aERhdGEgPSByZXEuYm9keSAmJiByZXEuYm9keS5hdXRoRGF0YTtcbiAgICAvLyBDaGVjayBpZiB1c2VyIGhhcyBwcm92aWRlZCB0aGVpciByZXF1aXJlZCBhdXRoIHByb3ZpZGVyc1xuICAgIEF1dGguY2hlY2tJZlVzZXJIYXNQcm92aWRlZENvbmZpZ3VyZWRQcm92aWRlcnNGb3JMb2dpbihcbiAgICAgIHJlcSxcbiAgICAgIGF1dGhEYXRhLFxuICAgICAgdXNlci5hdXRoRGF0YSxcbiAgICAgIHJlcS5jb25maWdcbiAgICApO1xuXG4gICAgbGV0IGF1dGhEYXRhUmVzcG9uc2U7XG4gICAgbGV0IHZhbGlkYXRlZEF1dGhEYXRhO1xuICAgIGlmIChhdXRoRGF0YSkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgQXV0aC5oYW5kbGVBdXRoRGF0YVZhbGlkYXRpb24oXG4gICAgICAgIGF1dGhEYXRhLFxuICAgICAgICBuZXcgUmVzdFdyaXRlKFxuICAgICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgICAgcmVxLmF1dGgsXG4gICAgICAgICAgJ19Vc2VyJyxcbiAgICAgICAgICB7IG9iamVjdElkOiB1c2VyLm9iamVjdElkIH0sXG4gICAgICAgICAgcmVxLmJvZHkgfHwge30sXG4gICAgICAgICAgdXNlcixcbiAgICAgICAgICByZXEuaW5mby5jbGllbnRTREssXG4gICAgICAgICAgcmVxLmluZm8uY29udGV4dFxuICAgICAgICApLFxuICAgICAgICB1c2VyXG4gICAgICApO1xuICAgICAgYXV0aERhdGFSZXNwb25zZSA9IHJlcy5hdXRoRGF0YVJlc3BvbnNlO1xuICAgICAgdmFsaWRhdGVkQXV0aERhdGEgPSByZXMuYXV0aERhdGE7XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHBhc3N3b3JkIGV4cGlyeSBwb2xpY3lcbiAgICBpZiAocmVxLmNvbmZpZy5wYXNzd29yZFBvbGljeSAmJiByZXEuY29uZmlnLnBhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkQWdlKSB7XG4gICAgICBsZXQgY2hhbmdlZEF0ID0gdXNlci5fcGFzc3dvcmRfY2hhbmdlZF9hdDtcblxuICAgICAgaWYgKCFjaGFuZ2VkQXQpIHtcbiAgICAgICAgLy8gcGFzc3dvcmQgd2FzIGNyZWF0ZWQgYmVmb3JlIGV4cGlyeSBwb2xpY3kgd2FzIGVuYWJsZWQuXG4gICAgICAgIC8vIHNpbXBseSB1cGRhdGUgX1VzZXIgb2JqZWN0IHNvIHRoYXQgaXQgd2lsbCBzdGFydCBlbmZvcmNpbmcgZnJvbSBub3dcbiAgICAgICAgY2hhbmdlZEF0ID0gbmV3IERhdGUoKTtcbiAgICAgICAgcmVxLmNvbmZpZy5kYXRhYmFzZS51cGRhdGUoXG4gICAgICAgICAgJ19Vc2VyJyxcbiAgICAgICAgICB7IHVzZXJuYW1lOiB1c2VyLnVzZXJuYW1lIH0sXG4gICAgICAgICAgeyBfcGFzc3dvcmRfY2hhbmdlZF9hdDogUGFyc2UuX2VuY29kZShjaGFuZ2VkQXQpIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgdGhlIHBhc3N3b3JkIGhhcyBleHBpcmVkXG4gICAgICAgIGlmIChjaGFuZ2VkQXQuX190eXBlID09ICdEYXRlJykge1xuICAgICAgICAgIGNoYW5nZWRBdCA9IG5ldyBEYXRlKGNoYW5nZWRBdC5pc28pO1xuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZXhwaXJ5IHRpbWUuXG4gICAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IG5ldyBEYXRlKFxuICAgICAgICAgIGNoYW5nZWRBdC5nZXRUaW1lKCkgKyA4NjQwMDAwMCAqIHJlcS5jb25maWcucGFzc3dvcmRQb2xpY3kubWF4UGFzc3dvcmRBZ2VcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGV4cGlyZXNBdCA8IG5ldyBEYXRlKCkpXG4gICAgICAgIC8vIGZhaWwgb2YgY3VycmVudCB0aW1lIGlzIHBhc3QgcGFzc3dvcmQgZXhwaXJ5IHRpbWVcbiAgICAgICAgeyB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgICAgICAnWW91ciBwYXNzd29yZCBoYXMgZXhwaXJlZC4gUGxlYXNlIHJlc2V0IHlvdXIgcGFzc3dvcmQuJ1xuICAgICAgICApOyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGhpZGRlbiBwcm9wZXJ0aWVzLlxuICAgIFVzZXJzUm91dGVyLnJlbW92ZUhpZGRlblByb3BlcnRpZXModXNlcik7XG5cbiAgICBhd2FpdCByZXEuY29uZmlnLmZpbGVzQ29udHJvbGxlci5leHBhbmRGaWxlc0luT2JqZWN0KHJlcS5jb25maWcsIHVzZXIpO1xuXG4gICAgLy8gQmVmb3JlIGxvZ2luIHRyaWdnZXI7IHRocm93cyBpZiBmYWlsdXJlXG4gICAgYXdhaXQgbWF5YmVSdW5UcmlnZ2VyKFxuICAgICAgVHJpZ2dlclR5cGVzLmJlZm9yZUxvZ2luLFxuICAgICAgcmVxLmF1dGgsXG4gICAgICBQYXJzZS5Vc2VyLmZyb21KU09OKE9iamVjdC5hc3NpZ24oeyBjbGFzc05hbWU6ICdfVXNlcicgfSwgdXNlcikpLFxuICAgICAgbnVsbCxcbiAgICAgIHJlcS5jb25maWcsXG4gICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgKTtcblxuICAgIC8vIElmIHdlIGhhdmUgc29tZSBuZXcgdmFsaWRhdGVkIGF1dGhEYXRhIHVwZGF0ZSBkaXJlY3RseVxuICAgIGlmICh2YWxpZGF0ZWRBdXRoRGF0YSAmJiBPYmplY3Qua2V5cyh2YWxpZGF0ZWRBdXRoRGF0YSkubGVuZ3RoKSB7XG4gICAgICBhd2FpdCByZXEuY29uZmlnLmRhdGFiYXNlLnVwZGF0ZShcbiAgICAgICAgJ19Vc2VyJyxcbiAgICAgICAgeyBvYmplY3RJZDogdXNlci5vYmplY3RJZCB9LFxuICAgICAgICB7IGF1dGhEYXRhOiB2YWxpZGF0ZWRBdXRoRGF0YSB9LFxuICAgICAgICB7fVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHNlc3Npb25EYXRhLCBjcmVhdGVTZXNzaW9uIH0gPSBSZXN0V3JpdGUuY3JlYXRlU2Vzc2lvbihyZXEuY29uZmlnLCB7XG4gICAgICB1c2VySWQ6IHVzZXIub2JqZWN0SWQsXG4gICAgICBjcmVhdGVkV2l0aDogUmVzdFdyaXRlLmJ1aWxkQ3JlYXRlZFdpdGgoJ2xvZ2luJyksXG4gICAgICBpbnN0YWxsYXRpb25JZDogcmVxLmluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgfSk7XG5cbiAgICB1c2VyLnNlc3Npb25Ub2tlbiA9IHNlc3Npb25EYXRhLnNlc3Npb25Ub2tlbjtcblxuICAgIGF3YWl0IGNyZWF0ZVNlc3Npb24oKTtcblxuICAgIGNvbnN0IGFmdGVyTG9naW5Vc2VyID0gUGFyc2UuVXNlci5mcm9tSlNPTihPYmplY3QuYXNzaWduKHsgY2xhc3NOYW1lOiAnX1VzZXInIH0sIHVzZXIpKTtcbiAgICBhd2FpdCBtYXliZVJ1blRyaWdnZXIoXG4gICAgICBUcmlnZ2VyVHlwZXMuYWZ0ZXJMb2dpbixcbiAgICAgIHsgLi4ucmVxLmF1dGgsIHVzZXI6IGFmdGVyTG9naW5Vc2VyIH0sXG4gICAgICBhZnRlckxvZ2luVXNlcixcbiAgICAgIG51bGwsXG4gICAgICByZXEuY29uZmlnLFxuICAgICAgcmVxLmluZm8uY29udGV4dFxuICAgICk7XG5cbiAgICBpZiAoYXV0aERhdGFSZXNwb25zZSkge1xuICAgICAgdXNlci5hdXRoRGF0YVJlc3BvbnNlID0gYXV0aERhdGFSZXNwb25zZTtcbiAgICB9XG4gICAgYXdhaXQgcmVxLmNvbmZpZy5hdXRoRGF0YU1hbmFnZXIucnVuQWZ0ZXJGaW5kKHJlcSwgdXNlci5hdXRoRGF0YSk7XG5cbiAgICByZXR1cm4geyByZXNwb25zZTogdXNlciB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgYWxsb3dzIG1hc3Rlci1rZXkgY2xpZW50cyB0byBjcmVhdGUgdXNlciBzZXNzaW9ucyB3aXRob3V0IGFjY2VzcyB0b1xuICAgKiB1c2VyIGNyZWRlbnRpYWxzLiBUaGlzIGVuYWJsZXMgc3lzdGVtcyB0aGF0IGNhbiBhdXRoZW50aWNhdGUgYWNjZXNzIGFub3RoZXJcbiAgICogd2F5IChBUEkga2V5LCBhcHAgYWRtaW5pc3RyYXRvcnMpIHRvIGFjdCBvbiBhIHVzZXIncyBiZWhhbGYuXG4gICAqXG4gICAqIFdlIGNyZWF0ZSBhIG5ldyBzZXNzaW9uIHJhdGhlciB0aGFuIGxvb2tpbmcgZm9yIGFuIGV4aXN0aW5nIHNlc3Npb247IHdlXG4gICAqIHdhbnQgdGhpcyB0byB3b3JrIGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlIHVzZXIgaXMgbG9nZ2VkIG91dCBvbiBhbGxcbiAgICogZGV2aWNlcywgc2luY2UgdGhpcyBjYW4gYmUgdXNlZCBieSBhdXRvbWF0ZWQgc3lzdGVtcyBhY3Rpbmcgb24gdGhlIHVzZXInc1xuICAgKiBiZWhhbGYuXG4gICAqXG4gICAqIEZvciB0aGUgbW9tZW50LCB3ZSdyZSBvbWl0dGluZyBldmVudCBob29rcyBhbmQgbG9ja291dCBjaGVja3MsIHNpbmNlXG4gICAqIGltbWVkaWF0ZSB1c2UgY2FzZXMgc3VnZ2VzdCAvbG9naW5BcyBjb3VsZCBiZSB1c2VkIGZvciBzZW1hbnRpY2FsbHlcbiAgICogZGlmZmVyZW50IHJlYXNvbnMgZnJvbSAvbG9naW5cbiAgICovXG4gIGFzeW5jIGhhbmRsZUxvZ0luQXMocmVxKSB7XG4gICAgaWYgKCFyZXEuYXV0aC5pc01hc3Rlcikge1xuICAgICAgdGhyb3cgY3JlYXRlU2FuaXRpemVkRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICdtYXN0ZXIga2V5IGlzIHJlcXVpcmVkJyxcbiAgICAgICAgcmVxLmNvbmZpZ1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHJlcS5hdXRoLmlzUmVhZE9ubHkpIHtcbiAgICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICBcInJlYWQtb25seSBtYXN0ZXJLZXkgaXNuJ3QgYWxsb3dlZCB0byBsb2dpbiBhcyBhbm90aGVyIHVzZXIuXCIsXG4gICAgICAgIHJlcS5jb25maWdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlcklkID0gcmVxLmJvZHk/LnVzZXJJZCB8fCByZXEucXVlcnkudXNlcklkO1xuICAgIGlmICghdXNlcklkKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfVkFMVUUsXG4gICAgICAgICd1c2VySWQgbXVzdCBub3QgYmUgZW1wdHksIG51bGwsIG9yIHVuZGVmaW5lZCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlSZXN1bHRzID0gYXdhaXQgcmVxLmNvbmZpZy5kYXRhYmFzZS5maW5kKCdfVXNlcicsIHsgb2JqZWN0SWQ6IHVzZXJJZCB9KTtcbiAgICBjb25zdCB1c2VyID0gcXVlcnlSZXN1bHRzWzBdO1xuICAgIGlmICghdXNlcikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICd1c2VyIG5vdCBmb3VuZCcpO1xuICAgIH1cblxuICAgIHRoaXMuX3Nhbml0aXplQXV0aERhdGEodXNlcik7XG5cbiAgICBjb25zdCB7IHNlc3Npb25EYXRhLCBjcmVhdGVTZXNzaW9uIH0gPSBSZXN0V3JpdGUuY3JlYXRlU2Vzc2lvbihyZXEuY29uZmlnLCB7XG4gICAgICB1c2VySWQsXG4gICAgICBjcmVhdGVkV2l0aDogUmVzdFdyaXRlLmJ1aWxkQ3JlYXRlZFdpdGgoJ2xvZ2luJywgJ21hc3RlcmtleScpLFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IHJlcS5pbmZvLmluc3RhbGxhdGlvbklkLFxuICAgIH0pO1xuXG4gICAgdXNlci5zZXNzaW9uVG9rZW4gPSBzZXNzaW9uRGF0YS5zZXNzaW9uVG9rZW47XG5cbiAgICBhd2FpdCBjcmVhdGVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4geyByZXNwb25zZTogdXNlciB9O1xuICB9XG5cbiAgaGFuZGxlVmVyaWZ5UGFzc3dvcmQocmVxKSB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0ZVVzZXJGcm9tUmVxdWVzdChyZXEpXG4gICAgICAudGhlbih1c2VyID0+IHtcbiAgICAgICAgLy8gUmVtb3ZlIGhpZGRlbiBwcm9wZXJ0aWVzLlxuICAgICAgICBVc2Vyc1JvdXRlci5yZW1vdmVIaWRkZW5Qcm9wZXJ0aWVzKHVzZXIpO1xuXG4gICAgICAgIHJldHVybiB7IHJlc3BvbnNlOiB1c2VyIH07XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUxvZ091dChyZXEpIHtcbiAgICBjb25zdCBzdWNjZXNzID0geyByZXNwb25zZToge30gfTtcbiAgICBpZiAocmVxLmluZm8gJiYgcmVxLmluZm8uc2Vzc2lvblRva2VuKSB7XG4gICAgICBjb25zdCByZWNvcmRzID0gYXdhaXQgcmVzdC5maW5kKFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICBBdXRoLm1hc3RlcihyZXEuY29uZmlnKSxcbiAgICAgICAgJ19TZXNzaW9uJyxcbiAgICAgICAgeyBzZXNzaW9uVG9rZW46IHJlcS5pbmZvLnNlc3Npb25Ub2tlbiB9LFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHJlcS5pbmZvLmNsaWVudFNESyxcbiAgICAgICAgcmVxLmluZm8uY29udGV4dFxuICAgICAgKTtcbiAgICAgIGlmIChyZWNvcmRzLnJlc3VsdHMgJiYgcmVjb3Jkcy5yZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICBhd2FpdCByZXN0LmRlbChcbiAgICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICAgIEF1dGgubWFzdGVyKHJlcS5jb25maWcpLFxuICAgICAgICAgICdfU2Vzc2lvbicsXG4gICAgICAgICAgcmVjb3Jkcy5yZXN1bHRzWzBdLm9iamVjdElkLFxuICAgICAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgbWF5YmVSdW5UcmlnZ2VyKFxuICAgICAgICAgIFRyaWdnZXJUeXBlcy5hZnRlckxvZ291dCxcbiAgICAgICAgICByZXEuYXV0aCxcbiAgICAgICAgICBQYXJzZS5TZXNzaW9uLmZyb21KU09OKE9iamVjdC5hc3NpZ24oeyBjbGFzc05hbWU6ICdfU2Vzc2lvbicgfSwgcmVjb3Jkcy5yZXN1bHRzWzBdKSksXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICByZXEuY29uZmlnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgX3Rocm93T25CYWRFbWFpbENvbmZpZyhyZXEpIHtcbiAgICB0cnkge1xuICAgICAgQ29uZmlnLnZhbGlkYXRlRW1haWxDb25maWd1cmF0aW9uKHtcbiAgICAgICAgZW1haWxBZGFwdGVyOiByZXEuY29uZmlnLnVzZXJDb250cm9sbGVyLmFkYXB0ZXIsXG4gICAgICAgIGFwcE5hbWU6IHJlcS5jb25maWcuYXBwTmFtZSxcbiAgICAgICAgcHVibGljU2VydmVyVVJMOiByZXEuY29uZmlnLnB1YmxpY1NlcnZlclVSTCB8fCByZXEuY29uZmlnLl9wdWJsaWNTZXJ2ZXJVUkwsXG4gICAgICAgIGVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uOiByZXEuY29uZmlnLmVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uLFxuICAgICAgICBlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkOiByZXEuY29uZmlnLmVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAodHlwZW9mIGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIE1heWJlIHdlIG5lZWQgYSBCYWQgQ29uZmlndXJhdGlvbiBlcnJvciwgYnV0IHRoZSBTREtzIHdvbid0IHVuZGVyc3RhbmQgaXQuIEZvciBub3csIEludGVybmFsIFNlcnZlciBFcnJvci5cbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUixcbiAgICAgICAgICAnQW4gYXBwTmFtZSwgcHVibGljU2VydmVyVVJMLCBhbmQgZW1haWxBZGFwdGVyIGFyZSByZXF1aXJlZCBmb3IgcGFzc3dvcmQgcmVzZXQgYW5kIGVtYWlsIHZlcmlmaWNhdGlvbiBmdW5jdGlvbmFsaXR5LidcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlUmVzZXRSZXF1ZXN0KHJlcSkge1xuICAgIHRoaXMuX3Rocm93T25CYWRFbWFpbENvbmZpZyhyZXEpO1xuXG4gICAgbGV0IGVtYWlsID0gcmVxLmJvZHk/LmVtYWlsO1xuICAgIGNvbnN0IHRva2VuID0gcmVxLmJvZHk/LnRva2VuO1xuXG4gICAgaWYgKCFlbWFpbCAmJiAhdG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5FTUFJTF9NSVNTSU5HLCAneW91IG11c3QgcHJvdmlkZSBhbiBlbWFpbCcpO1xuICAgIH1cblxuICAgIGlmICh0b2tlbiAmJiB0eXBlb2YgdG9rZW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9WQUxVRSwgJ3Rva2VuIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICBsZXQgdXNlclJlc3VsdHMgPSBudWxsO1xuICAgIGxldCB1c2VyRGF0YSA9IG51bGw7XG5cbiAgICAvLyBXZSBjYW4gZmluZCB0aGUgdXNlciB1c2luZyB0b2tlblxuICAgIGlmICh0b2tlbikge1xuICAgICAgdXNlclJlc3VsdHMgPSBhd2FpdCByZXEuY29uZmlnLmRhdGFiYXNlLmZpbmQoJ19Vc2VyJywge1xuICAgICAgICBfcGVyaXNoYWJsZV90b2tlbjogdG9rZW4sXG4gICAgICAgIF9wZXJpc2hhYmxlX3Rva2VuX2V4cGlyZXNfYXQ6IHsgJGx0OiBQYXJzZS5fZW5jb2RlKG5ldyBEYXRlKCkpIH0sXG4gICAgICB9KTtcbiAgICAgIGlmICh1c2VyUmVzdWx0cz8ubGVuZ3RoID4gMCkge1xuICAgICAgICB1c2VyRGF0YSA9IHVzZXJSZXN1bHRzWzBdO1xuICAgICAgICBpZiAodXNlckRhdGEuZW1haWwpIHtcbiAgICAgICAgICBlbWFpbCA9IHVzZXJEYXRhLmVtYWlsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgLy8gT3IgdXNpbmcgZW1haWwgaWYgbm8gdG9rZW4gcHJvdmlkZWRcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbWFpbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHVzZXJSZXN1bHRzID0gYXdhaXQgcmVxLmNvbmZpZy5kYXRhYmFzZS5maW5kKFxuICAgICAgICAnX1VzZXInLFxuICAgICAgICB7ICRvcjogW3sgZW1haWwgfSwgeyB1c2VybmFtZTogZW1haWwsIGVtYWlsOiB7ICRleGlzdHM6IGZhbHNlIH0gfV0gfSxcbiAgICAgICAgeyBsaW1pdDogMSB9LFxuICAgICAgICBBdXRoLm1haW50ZW5hbmNlKHJlcS5jb25maWcpXG4gICAgICApO1xuICAgICAgaWYgKHVzZXJSZXN1bHRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHVzZXJEYXRhID0gdXNlclJlc3VsdHNbMF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBlbWFpbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9FTUFJTF9BRERSRVNTLFxuICAgICAgICAneW91IG11c3QgcHJvdmlkZSBhIHZhbGlkIGVtYWlsIHN0cmluZydcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHVzZXJEYXRhKSB7XG4gICAgICB0aGlzLl9zYW5pdGl6ZUF1dGhEYXRhKHVzZXJEYXRhKTtcbiAgICAgIC8vIEdldCBmaWxlcyBhdHRhY2hlZCB0byB1c2VyXG4gICAgICBhd2FpdCByZXEuY29uZmlnLmZpbGVzQ29udHJvbGxlci5leHBhbmRGaWxlc0luT2JqZWN0KHJlcS5jb25maWcsIHVzZXJEYXRhKTtcblxuICAgICAgY29uc3QgdXNlciA9IGluZmxhdGUoJ19Vc2VyJywgdXNlckRhdGEpO1xuXG4gICAgICBhd2FpdCBtYXliZVJ1blRyaWdnZXIoXG4gICAgICAgIFRyaWdnZXJUeXBlcy5iZWZvcmVQYXNzd29yZFJlc2V0UmVxdWVzdCxcbiAgICAgICAgcmVxLmF1dGgsXG4gICAgICAgIHVzZXIsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckNvbnRyb2xsZXIgPSByZXEuY29uZmlnLnVzZXJDb250cm9sbGVyO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB1c2VyQ29udHJvbGxlci5zZW5kUGFzc3dvcmRSZXNldEVtYWlsKGVtYWlsKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3BvbnNlOiB7fSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09IFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQpIHtcbiAgICAgICAgaWYgKHJlcS5jb25maWcucGFzc3dvcmRQb2xpY3k/LnJlc2V0UGFzc3dvcmRTdWNjZXNzT25JbnZhbGlkRW1haWwgPz8gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXNwb25zZToge30sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlcnIubWVzc2FnZSA9IGBBIHVzZXIgd2l0aCB0aGF0IGVtYWlsIGRvZXMgbm90IGV4aXN0LmA7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlVmVyaWZpY2F0aW9uRW1haWxSZXF1ZXN0KHJlcSkge1xuICAgIHRoaXMuX3Rocm93T25CYWRFbWFpbENvbmZpZyhyZXEpO1xuXG4gICAgY29uc3QgeyBlbWFpbCB9ID0gcmVxLmJvZHkgfHwge307XG4gICAgaWYgKCFlbWFpbCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkVNQUlMX01JU1NJTkcsICd5b3UgbXVzdCBwcm92aWRlIGFuIGVtYWlsJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW1haWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfRU1BSUxfQUREUkVTUyxcbiAgICAgICAgJ3lvdSBtdXN0IHByb3ZpZGUgYSB2YWxpZCBlbWFpbCBzdHJpbmcnXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCByZXEuY29uZmlnLmRhdGFiYXNlLmZpbmQoJ19Vc2VyJywgeyBlbWFpbDogZW1haWwgfSwge30sIEF1dGgubWFpbnRlbmFuY2UocmVxLmNvbmZpZykpO1xuICAgIGlmICghcmVzdWx0cy5sZW5ndGggfHwgcmVzdWx0cy5sZW5ndGggPCAxKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRU1BSUxfTk9UX0ZPVU5ELCBgTm8gdXNlciBmb3VuZCB3aXRoIGVtYWlsICR7ZW1haWx9YCk7XG4gICAgfVxuICAgIGNvbnN0IHVzZXIgPSByZXN1bHRzWzBdO1xuXG4gICAgLy8gcmVtb3ZlIHBhc3N3b3JkIGZpZWxkLCBtZXNzZXMgd2l0aCBzYXZpbmcgb24gcG9zdGdyZXNcbiAgICBkZWxldGUgdXNlci5wYXNzd29yZDtcblxuICAgIGlmICh1c2VyLmVtYWlsVmVyaWZpZWQpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PVEhFUl9DQVVTRSwgYEVtYWlsICR7ZW1haWx9IGlzIGFscmVhZHkgdmVyaWZpZWQuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckNvbnRyb2xsZXIgPSByZXEuY29uZmlnLnVzZXJDb250cm9sbGVyO1xuICAgIGNvbnN0IHNlbmQgPSBhd2FpdCB1c2VyQ29udHJvbGxlci5yZWdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbih1c2VyLCByZXEuYXV0aC5pc01hc3RlciwgcmVxLmF1dGguaW5zdGFsbGF0aW9uSWQsIHJlcS5pcCk7XG4gICAgaWYgKHNlbmQpIHtcbiAgICAgIHVzZXJDb250cm9sbGVyLnNlbmRWZXJpZmljYXRpb25FbWFpbCh1c2VyLCByZXEpO1xuICAgIH1cbiAgICByZXR1cm4geyByZXNwb25zZToge30gfTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUNoYWxsZW5nZShyZXEpIHtcbiAgICBjb25zdCB7IHVzZXJuYW1lLCBlbWFpbCwgcGFzc3dvcmQsIGF1dGhEYXRhLCBjaGFsbGVuZ2VEYXRhIH0gPSByZXEuYm9keSB8fCB7fTtcblxuICAgIC8vIGlmIHVzZXJuYW1lIG9yIGVtYWlsIHByb3ZpZGVkIHdpdGggcGFzc3dvcmQgdHJ5IHRvIGF1dGhlbnRpY2F0ZSB0aGUgdXNlciBieSB1c2VybmFtZVxuICAgIGxldCB1c2VyO1xuICAgIGlmICh1c2VybmFtZSB8fCBlbWFpbCkge1xuICAgICAgaWYgKCFwYXNzd29yZCkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuT1RIRVJfQ0FVU0UsXG4gICAgICAgICAgJ1lvdSBwcm92aWRlZCB1c2VybmFtZSBvciBlbWFpbCwgeW91IG5lZWQgdG8gYWxzbyBwcm92aWRlIHBhc3N3b3JkLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHVzZXIgPSBhd2FpdCB0aGlzLl9hdXRoZW50aWNhdGVVc2VyRnJvbVJlcXVlc3QocmVxKTtcbiAgICB9XG5cbiAgICBpZiAoIWNoYWxsZW5nZURhdGEpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PVEhFUl9DQVVTRSwgJ05vdGhpbmcgdG8gY2hhbGxlbmdlLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2hhbGxlbmdlRGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PVEhFUl9DQVVTRSwgJ2NoYWxsZW5nZURhdGEgc2hvdWxkIGJlIGFuIG9iamVjdC4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdDtcbiAgICBsZXQgcGFyc2VVc2VyO1xuXG4gICAgLy8gVHJ5IHRvIGZpbmQgdXNlciBieSBhdXRoRGF0YVxuICAgIGlmIChhdXRoRGF0YSkge1xuICAgICAgaWYgKHR5cGVvZiBhdXRoRGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9USEVSX0NBVVNFLCAnYXV0aERhdGEgc2hvdWxkIGJlIGFuIG9iamVjdC4nKTtcbiAgICAgIH1cbiAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5PVEhFUl9DQVVTRSxcbiAgICAgICAgICAnWW91IGNhbm5vdCBwcm92aWRlIHVzZXJuYW1lL2VtYWlsIGFuZCBhdXRoRGF0YSwgb25seSB1c2Ugb25lIGlkZW50aWZpY2F0aW9uIG1ldGhvZC4nXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhhdXRoRGF0YSkuZmlsdGVyKGtleSA9PiBhdXRoRGF0YVtrZXldLmlkKS5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5PVEhFUl9DQVVTRSxcbiAgICAgICAgICAnWW91IGNhbm5vdCBwcm92aWRlIG1vcmUgdGhhbiBvbmUgYXV0aERhdGEgcHJvdmlkZXIgd2l0aCBhbiBpZC4nXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBBdXRoLmZpbmRVc2Vyc1dpdGhBdXRoRGF0YShyZXEuY29uZmlnLCBhdXRoRGF0YSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghcmVzdWx0c1swXSB8fCByZXN1bHRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ1VzZXIgbm90IGZvdW5kLicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZpbmQgdGhlIHByb3ZpZGVyIHVzZWQgdG8gZmluZCB0aGUgdXNlclxuICAgICAgICBjb25zdCBwcm92aWRlciA9IE9iamVjdC5rZXlzKGF1dGhEYXRhKS5maW5kKGtleSA9PiBhdXRoRGF0YVtrZXldLmlkKTtcblxuICAgICAgICBwYXJzZVVzZXIgPSBQYXJzZS5Vc2VyLmZyb21KU09OKHsgY2xhc3NOYW1lOiAnX1VzZXInLCAuLi5yZXN1bHRzWzBdIH0pO1xuICAgICAgICByZXF1ZXN0ID0gZ2V0UmVxdWVzdE9iamVjdCh1bmRlZmluZWQsIHJlcS5hdXRoLCBwYXJzZVVzZXIsIHBhcnNlVXNlciwgcmVxLmNvbmZpZyk7XG4gICAgICAgIHJlcXVlc3QuaXNDaGFsbGVuZ2UgPSB0cnVlO1xuICAgICAgICAvLyBWYWxpZGF0ZSBhdXRoRGF0YSB1c2VkIHRvIGlkZW50aWZ5IHRoZSB1c2VyIHRvIGF2b2lkIGJydXRlLWZvcmNlIGF0dGFjayBvbiBgaWRgXG4gICAgICAgIGNvbnN0IHsgdmFsaWRhdG9yIH0gPSByZXEuY29uZmlnLmF1dGhEYXRhTWFuYWdlci5nZXRWYWxpZGF0b3JGb3JQcm92aWRlcihwcm92aWRlcik7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvclJlc3BvbnNlID0gYXdhaXQgdmFsaWRhdG9yKGF1dGhEYXRhW3Byb3ZpZGVyXSwgcmVxLCBwYXJzZVVzZXIsIHJlcXVlc3QpO1xuICAgICAgICBpZiAodmFsaWRhdG9yUmVzcG9uc2UgJiYgdmFsaWRhdG9yUmVzcG9uc2UudmFsaWRhdG9yKSB7XG4gICAgICAgICAgYXdhaXQgdmFsaWRhdG9yUmVzcG9uc2UudmFsaWRhdG9yKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gUmV3cml0ZSB0aGUgZXJyb3IgdG8gYXZvaWQgZ3Vlc3MgaWQgYXR0YWNrXG4gICAgICAgIGxvZ2dlci5lcnJvcihlKTtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdVc2VyIG5vdCBmb3VuZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlVXNlcikge1xuICAgICAgcGFyc2VVc2VyID0gdXNlciA/IFBhcnNlLlVzZXIuZnJvbUpTT04oeyBjbGFzc05hbWU6ICdfVXNlcicsIC4uLnVzZXIgfSkgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICByZXF1ZXN0ID0gZ2V0UmVxdWVzdE9iamVjdCh1bmRlZmluZWQsIHJlcS5hdXRoLCBwYXJzZVVzZXIsIHBhcnNlVXNlciwgcmVxLmNvbmZpZyk7XG4gICAgICByZXF1ZXN0LmlzQ2hhbGxlbmdlID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgYWNjID0ge307XG4gICAgLy8gRXhlY3V0ZSBjaGFsbGVuZ2Ugc3RlcC1ieS1zdGVwIHdpdGggY29uc2lzdGVudCBvcmRlciBmb3IgYmV0dGVyIGVycm9yIGZlZWRiYWNrXG4gICAgLy8gYW5kIHRvIGF2b2lkIHRvIHRyaWdnZXIgb3RoZXJzIGNoYWxsZW5nZXMgaWYgb25lIG9mIHRoZW0gZmFpbHNcbiAgICBmb3IgKGNvbnN0IHByb3ZpZGVyIG9mIE9iamVjdC5rZXlzKGNoYWxsZW5nZURhdGEpLnNvcnQoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYXV0aEFkYXB0ZXIgPSByZXEuY29uZmlnLmF1dGhEYXRhTWFuYWdlci5nZXRWYWxpZGF0b3JGb3JQcm92aWRlcihwcm92aWRlcik7XG4gICAgICAgIGlmICghYXV0aEFkYXB0ZXIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgYWRhcHRlcjogeyBjaGFsbGVuZ2UgfSxcbiAgICAgICAgfSA9IGF1dGhBZGFwdGVyO1xuICAgICAgICBpZiAodHlwZW9mIGNoYWxsZW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnN0IHByb3ZpZGVyQ2hhbGxlbmdlUmVzcG9uc2UgPSBhd2FpdCBjaGFsbGVuZ2UoXG4gICAgICAgICAgICBjaGFsbGVuZ2VEYXRhW3Byb3ZpZGVyXSxcbiAgICAgICAgICAgIGF1dGhEYXRhICYmIGF1dGhEYXRhW3Byb3ZpZGVyXSxcbiAgICAgICAgICAgIHJlcS5jb25maWcuYXV0aFtwcm92aWRlcl0sXG4gICAgICAgICAgICByZXF1ZXN0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBhY2NbcHJvdmlkZXJdID0gcHJvdmlkZXJDaGFsbGVuZ2VSZXNwb25zZSB8fCB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc3QgZSA9IHJlc29sdmVFcnJvcihlcnIsIHtcbiAgICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5TQ1JJUFRfRkFJTEVELFxuICAgICAgICAgIG1lc3NhZ2U6ICdDaGFsbGVuZ2UgZmFpbGVkLiBVbmtub3duIGVycm9yLicsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB1c2VyU3RyaW5nID0gcmVxLmF1dGggJiYgcmVxLmF1dGgudXNlciA/IHJlcS5hdXRoLnVzZXIuaWQgOiB1bmRlZmluZWQ7XG4gICAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgICBgRmFpbGVkIHJ1bm5pbmcgYXV0aCBzdGVwIGNoYWxsZW5nZSBmb3IgJHtwcm92aWRlcn0gZm9yIHVzZXIgJHt1c2VyU3RyaW5nfSB3aXRoIEVycm9yOiBgICtcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGUpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uU3RlcDogJ2NoYWxsZW5nZScsXG4gICAgICAgICAgICBlcnJvcjogZSxcbiAgICAgICAgICAgIHVzZXI6IHVzZXJTdHJpbmcsXG4gICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHJlc3BvbnNlOiB7IGNoYWxsZW5nZURhdGE6IGFjYyB9IH07XG4gIH1cblxuICBtb3VudFJvdXRlcygpIHtcbiAgICB0aGlzLnJvdXRlKCdHRVQnLCAnL3VzZXJzJywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUZpbmQocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy91c2VycycsIHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSwgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUNyZWF0ZShyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ0dFVCcsICcvdXNlcnMvbWUnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTWUocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdHRVQnLCAnL3VzZXJzLzpvYmplY3RJZCcsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVHZXQocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQVVQnLCAnL3VzZXJzLzpvYmplY3RJZCcsIHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSwgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZVVwZGF0ZShyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ0RFTEVURScsICcvdXNlcnMvOm9iamVjdElkJywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZURlbGV0ZShyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ0dFVCcsICcvbG9naW4nLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTG9nSW4ocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy9sb2dpbicsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMb2dJbihyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ1BPU1QnLCAnL2xvZ2luQXMnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTG9nSW5BcyhyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ1BPU1QnLCAnL2xvZ291dCcsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMb2dPdXQocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy9yZXF1ZXN0UGFzc3dvcmRSZXNldCcsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVSZXNldFJlcXVlc3QocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy92ZXJpZmljYXRpb25FbWFpbFJlcXVlc3QnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlVmVyaWZpY2F0aW9uRW1haWxSZXF1ZXN0KHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnR0VUJywgJy92ZXJpZnlQYXNzd29yZCcsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVWZXJpZnlQYXNzd29yZChyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ1BPU1QnLCAnL3ZlcmlmeVBhc3N3b3JkJywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZVZlcmlmeVBhc3N3b3JkKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUE9TVCcsICcvY2hhbGxlbmdlJywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUNoYWxsZW5nZShyZXEpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFVzZXJzUm91dGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSxJQUFBQSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxlQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxjQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxLQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxLQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxTQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxTQUFBLEdBQUFQLE9BQUE7QUFPQSxJQUFBUSxZQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxVQUFBLEdBQUFWLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBVSxPQUFBLEdBQUFWLE9BQUE7QUFDQSxJQUFBVyxN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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "parse-server",
3
- "version": "9.5.1-alpha.2",
3
+ "version": "9.5.2-alpha.1",
4
4
  "description": "An express module providing a Parse-compatible API server",
5
5
  "main": "lib/index.js",
6
6
  "repository": {