@appium/support 2.59.2 → 2.59.5

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.
package/build/lib/npm.js CHANGED
@@ -48,7 +48,7 @@ class NPM {
48
48
  json,
49
49
  lockFile
50
50
  } = opts;
51
- execOpts = { ...execOpts,
51
+ const teenProcessExecOpts = { ...execOpts,
52
52
  cwd
53
53
  };
54
54
  args.unshift(cmd);
@@ -59,7 +59,7 @@ class NPM {
59
59
 
60
60
  const npmCmd = system.isWindows() ? 'npm.cmd' : 'npm';
61
61
 
62
- let runner = async () => await (0, _teen_process.exec)(npmCmd, args, execOpts);
62
+ let runner = async () => await (0, _teen_process.exec)(npmCmd, args, teenProcessExecOpts);
63
63
 
64
64
  if (lockFile) {
65
65
  const acquireLock = util.getLockFileGuard(lockFile);
@@ -214,4 +214,4 @@ class NPM {
214
214
  exports.NPM = NPM;
215
215
  const npm = new NPM();
216
216
  exports.npm = npm;
217
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDQUNIRV9ESVJfUkVMQVRJVkVfUEFUSCIsInBhdGgiLCJqb2luIiwiSU5TVEFMTF9MT0NLRklMRV9SRUxBVElWRV9QQVRIIiwiTlBNIiwiX2dldEluc3RhbGxMb2NrZmlsZVBhdGgiLCJjd2QiLCJleGVjIiwiY21kIiwiYXJncyIsIm9wdHMiLCJleGVjT3B0cyIsImpzb24iLCJsb2NrRmlsZSIsInVuc2hpZnQiLCJwdXNoIiwibnBtQ21kIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwicnVubmVyIiwiYWNxdWlyZUxvY2siLCJ1dGlsIiwiZ2V0TG9ja0ZpbGVHdWFyZCIsIl9ydW5uZXIiLCJyZXQiLCJzdGRvdXQiLCJzdGRlcnIiLCJjb2RlIiwiSlNPTiIsInBhcnNlIiwiaWduIiwiZSIsImVyciIsIkVycm9yIiwidHJpbSIsImdldExhdGVzdFZlcnNpb24iLCJwa2ciLCJsYXRlc3QiLCJnZXRMYXRlc3RTYWZlVXBncmFkZVZlcnNpb24iLCJjdXJWZXJzaW9uIiwiYWxsVmVyc2lvbnMiLCJnZXRMYXRlc3RTYWZlVXBncmFkZUZyb21WZXJzaW9ucyIsImxpc3QiLCJzYWZlVXBncmFkZVZlciIsImN1clNlbXZlciIsInNlbXZlciIsInRlc3RWZXIiLCJ0ZXN0U2VtdmVyIiwicHJlcmVsZWFzZSIsImxlbmd0aCIsImNvbXBhcmUiLCJtYWpvciIsImZvcm1hdCIsImluc3RhbGxQYWNrYWdlIiwicGtnTmFtZSIsInBrZ1ZlciIsImR1bW15UGtnSnNvbiIsImR1bW15UGtnUGF0aCIsImZzIiwicmVhZEZpbGUiLCJ3cml0ZUZpbGUiLCJzdHJpbmdpZnkiLCJpbnN0YWxsT3B0cyIsImhhc0FwcGl1bURlcGVuZGVuY3kiLCJyZXMiLCJlcnJvciIsInBrZ0pzb25QYXRoIiwicmVzb2x2ZUZyb20iLCJyZXF1aXJlIiwidW5pbnN0YWxsUGFja2FnZSIsIm5wbSJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9ucG0uanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHtoYXNBcHBpdW1EZXBlbmRlbmN5fSBmcm9tICcuL2Vudic7XG5pbXBvcnQge2V4ZWN9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQge2ZzfSBmcm9tICcuL2ZzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi91dGlsJztcbmltcG9ydCAqIGFzIHN5c3RlbSBmcm9tICcuL3N5c3RlbSc7XG5pbXBvcnQgcmVzb2x2ZUZyb20gZnJvbSAncmVzb2x2ZS1mcm9tJztcblxuLyoqXG4gKiBSZWxhdGl2ZSBwYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIGFueSBBcHBpdW0gaW50ZXJuYWwgZmlsZXNcbiAqIFhYWDogdGhpcyBpcyBkdXBsaWNhdGVkIGluIGBhcHBpdW0vbGliL2NvbnN0YW50cy5qc2AuXG4gKi9cbmV4cG9ydCBjb25zdCBDQUNIRV9ESVJfUkVMQVRJVkVfUEFUSCA9IHBhdGguam9pbignbm9kZV9tb2R1bGVzJywgJy5jYWNoZScsICdhcHBpdW0nKTtcblxuLyoqXG4gKiBSZWxhdGl2ZSBwYXRoIHRvIGxvY2tmaWxlIHVzZWQgd2hlbiBpbnN0YWxsaW5nIGFuIGV4dGVuc2lvbiB2aWEgYGFwcGl1bWBcbiAqL1xuZXhwb3J0IGNvbnN0IElOU1RBTExfTE9DS0ZJTEVfUkVMQVRJVkVfUEFUSCA9IHBhdGguam9pbihDQUNIRV9ESVJfUkVMQVRJVkVfUEFUSCwgJy5pbnN0YWxsLmxvY2snKTtcblxuLyoqXG4gKiBYWFg6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIGEgc2luZ2xldG9uLCBidXQgaXQgaXNuJ3QuICBNYXliZSB0aGlzIG1vZHVsZSBzaG91bGQganVzdCBleHBvcnQgZnVuY3Rpb25zP1xuICovXG5leHBvcnQgY2xhc3MgTlBNIHtcbiAgLyoqXG4gICAqIFJldHVybnMgcGF0aCB0byBcImluc3RhbGxcIiBsb2NrZmlsZVxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3dkXG4gICAqL1xuICBfZ2V0SW5zdGFsbExvY2tmaWxlUGF0aChjd2QpIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKGN3ZCwgSU5TVEFMTF9MT0NLRklMRV9SRUxBVElWRV9QQVRIKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGBucG1gIHdpdGggZ2l2ZW4gYXJncy5cbiAgICpcbiAgICogSWYgdGhlIHByb2Nlc3MgZXhpdHMgd2l0aCBhIG5vbnplcm8gY29kZSwgdGhlIGNvbnRlbnRzIG9mIGBTVERPVVRgIGFuZCBgU1RERVJSYCB3aWxsIGJlIGluIHRoZVxuICAgKiBgbWVzc2FnZWAgb2YgdGhlIHtAbGluayBUZWVuUHJvY2Vzc0V4ZWNFcnJvcn0gcmVqZWN0ZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJnc1xuICAgKiBAcGFyYW0ge0V4ZWNPcHRzfSBvcHRzXG4gICAqIEBwYXJhbSB7RXhlY09wdHN9IFtleGVjT3B0c11cbiAgICovXG4gIGFzeW5jIGV4ZWMoY21kLCBhcmdzLCBvcHRzLCBleGVjT3B0cyA9IC8qKiBAdHlwZSB7RXhlY09wdHN9ICovICh7fSkpIHtcbiAgICBsZXQge2N3ZCwganNvbiwgbG9ja0ZpbGV9ID0gb3B0cztcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBwZXJmb3JtIHRoZSBjdXJyZW50IG9wZXJhdGlvbiBpbiBjd2RcbiAgICBleGVjT3B0cyA9IHsuLi5leGVjT3B0cywgY3dkfTtcblxuICAgIGFyZ3MudW5zaGlmdChjbWQpO1xuICAgIGlmIChqc29uKSB7XG4gICAgICBhcmdzLnB1c2goJy0tanNvbicpO1xuICAgIH1cbiAgICBjb25zdCBucG1DbWQgPSBzeXN0ZW0uaXNXaW5kb3dzKCkgPyAnbnBtLmNtZCcgOiAnbnBtJztcbiAgICBsZXQgcnVubmVyID0gYXN5bmMgKCkgPT4gYXdhaXQgZXhlYyhucG1DbWQsIGFyZ3MsIGV4ZWNPcHRzKTtcbiAgICBpZiAobG9ja0ZpbGUpIHtcbiAgICAgIGNvbnN0IGFjcXVpcmVMb2NrID0gdXRpbC5nZXRMb2NrRmlsZUd1YXJkKGxvY2tGaWxlKTtcbiAgICAgIGNvbnN0IF9ydW5uZXIgPSBydW5uZXI7XG4gICAgICBydW5uZXIgPSBhc3luYyAoKSA9PiBhd2FpdCBhY3F1aXJlTG9jayhfcnVubmVyKTtcbiAgICB9XG5cbiAgICAvKiogQHR5cGUge2ltcG9ydCgndGVlbl9wcm9jZXNzJykuRXhlY1Jlc3VsdDxzdHJpbmc+ICYge2pzb24/OiBhbnl9fSAqL1xuICAgIGxldCByZXQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtzdGRvdXQsIHN0ZGVyciwgY29kZX0gPSBhd2FpdCBydW5uZXIoKTtcbiAgICAgIHJldCA9IHtzdGRvdXQsIHN0ZGVyciwgY29kZX07XG4gICAgICAvLyBpZiBwb3NzaWJsZSwgcGFyc2UgTlBNJ3MganNvbiBvdXRwdXQuIER1cmluZyBOUE0gaW5zdGFsbCAzcmQtcGFydHlcbiAgICAgIC8vIHBhY2thZ2VzIGNhbiB3cml0ZSB0byBzdGRvdXQsIHNvIHNvbWV0aW1lcyB0aGUganNvbiBvdXRwdXQgY2FuJ3QgYmVcbiAgICAgIC8vIGd1YXJhbnRlZWQgdG8gYmUgcGFyc2VhYmxlXG4gICAgICB0cnkge1xuICAgICAgICByZXQuanNvbiA9IEpTT04ucGFyc2Uoc3Rkb3V0KTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCB7c3Rkb3V0ID0gJycsIHN0ZGVyciA9ICcnLCBjb2RlID0gbnVsbH0gPSAvKiogQHR5cGUge1RlZW5Qcm9jZXNzRXhlY0Vycm9yfSAqLyAoZSk7XG4gICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgIGBucG0gY29tbWFuZCAnJHthcmdzLmpvaW4oXG4gICAgICAgICAgJyAnXG4gICAgICAgICl9JyBmYWlsZWQgd2l0aCBjb2RlICR7Y29kZX0uXFxuXFxuU1RET1VUOlxcbiR7c3Rkb3V0LnRyaW0oKX1cXG5cXG5TVERFUlI6XFxuJHtzdGRlcnIudHJpbSgpfWBcbiAgICAgICk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN3ZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGtnXG4gICAqL1xuICBhc3luYyBnZXRMYXRlc3RWZXJzaW9uKGN3ZCwgcGtnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IHRoaXMuZXhlYygndmlldycsIFtwa2csICdkaXN0LXRhZ3MnXSwge1xuICAgICAgICBqc29uOiB0cnVlLFxuICAgICAgICBjd2QsXG4gICAgICB9KVxuICAgICkuanNvbj8ubGF0ZXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjd2RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBrZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VyVmVyc2lvblxuICAgKi9cbiAgYXN5bmMgZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVWZXJzaW9uKGN3ZCwgcGtnLCBjdXJWZXJzaW9uKSB7XG4gICAgY29uc3QgYWxsVmVyc2lvbnMgPSAoXG4gICAgICBhd2FpdCB0aGlzLmV4ZWMoJ3ZpZXcnLCBbcGtnLCAndmVyc2lvbnMnXSwge1xuICAgICAgICBqc29uOiB0cnVlLFxuICAgICAgICBjd2QsXG4gICAgICB9KVxuICAgICkuanNvbjtcbiAgICByZXR1cm4gdGhpcy5nZXRMYXRlc3RTYWZlVXBncmFkZUZyb21WZXJzaW9ucyhjdXJWZXJzaW9uLCBhbGxWZXJzaW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBgbnBtIGxzYCwgb3B0aW9uYWxseSBmb3IgYSBwYXJ0aWN1bGFyIHBhY2thZ2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjd2RcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwa2ddXG4gICAqL1xuICBhc3luYyBsaXN0KGN3ZCwgcGtnKSB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmV4ZWMoJ2xpc3QnLCBwa2cgPyBbcGtnXSA6IFtdLCB7Y3dkLCBqc29uOiB0cnVlfSkpLmpzb247XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYSBjdXJyZW50IHZlcnNpb24gYW5kIGEgbGlzdCBvZiBhbGwgdmVyc2lvbnMgZm9yIGEgcGFja2FnZSwgcmV0dXJuIHRoZSB2ZXJzaW9uIHdoaWNoIGlzXG4gICAqIHRoZSBoaWdoZXN0IHNhZmVseS11cGdyYWRhYmxlIHZlcnNpb24gKG1lYW5pbmcgbm90IGNyb3NzaW5nIGFueSBtYWpvciByZXZpc2lvbiBib3VuZGFyaWVzLCBhbmRcbiAgICogbm90IGluY2x1ZGluZyBhbnkgYWxwaGEvYmV0YS9yYyB2ZXJzaW9ucylcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN1clZlcnNpb24gLSB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIGEgcGFja2FnZVxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGFsbFZlcnNpb25zIC0gYSBsaXN0IG9mIHZlcnNpb24gc3RyaW5nc1xuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH0gLSB0aGUgaGlnaGVzdCBzYWZlbHktdXBncmFkYWJsZSB2ZXJzaW9uLCBvciBudWxsIGlmIHRoZXJlIGlzbid0IG9uZVxuICAgKi9cbiAgZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVGcm9tVmVyc2lvbnMoY3VyVmVyc2lvbiwgYWxsVmVyc2lvbnMpIHtcbiAgICBsZXQgc2FmZVVwZ3JhZGVWZXIgPSBudWxsO1xuICAgIGNvbnN0IGN1clNlbXZlciA9IHNlbXZlci5wYXJzZShjdXJWZXJzaW9uKTtcbiAgICBpZiAoY3VyU2VtdmVyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBwYXJzZSBjdXJyZW50IHZlcnNpb24gJyR7Y3VyVmVyc2lvbn0nYCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdGVzdFZlciBvZiBhbGxWZXJzaW9ucykge1xuICAgICAgY29uc3QgdGVzdFNlbXZlciA9IHNlbXZlci5wYXJzZSh0ZXN0VmVyKTtcbiAgICAgIGlmICh0ZXN0U2VtdmVyID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHBhcnNlIHZlcnNpb24gdG8gdGVzdCBhZ2FpbnN0OiAnJHt0ZXN0VmVyfSdgKTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSB0ZXN0IHZlcnNpb24gaXMgYSBwcmVyZWxlYXNlLCBpZ25vcmUgaXRcbiAgICAgIGlmICh0ZXN0U2VtdmVyLnByZXJlbGVhc2UubGVuZ3RoID4gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHZlcnNpb24gaXMgbGF0ZXIgdGhhbiB0aGUgdGVzdCB2ZXJzaW9uLCBza2lwIHRoaXMgdGVzdCB2ZXJzaW9uXG4gICAgICBpZiAoY3VyU2VtdmVyLmNvbXBhcmUodGVzdFNlbXZlcikgPT09IDEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgdGVzdCB2ZXJzaW9uIGlzIG5ld2VyLCBidXQgY3Jvc3NlcyBhIG1ham9yIHJldmlzaW9uIGJvdW5kYXJ5LCBhbHNvIHNraXAgaXRcbiAgICAgIGlmICh0ZXN0U2VtdmVyLm1ham9yID4gY3VyU2VtdmVyLm1ham9yKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gb3RoZXJ3aXNlIHRoaXMgdmVyc2lvbiBpcyBzYWZlIHRvIHVwZ3JhZGUgdG8uIEJ1dCB0aGVyZSBtaWdodCBiZSBtdWx0aXBsZSBvbmVzIG9mIHRoaXNcbiAgICAgIC8vIGtpbmQsIHNvIGtlZXAgaXRlcmF0aW5nIGFuZCBrZWVwaW5nIHRoZSBoaWdoZXN0XG4gICAgICBpZiAoc2FmZVVwZ3JhZGVWZXIgPT09IG51bGwgfHwgdGVzdFNlbXZlci5jb21wYXJlKHNhZmVVcGdyYWRlVmVyKSA9PT0gMSkge1xuICAgICAgICBzYWZlVXBncmFkZVZlciA9IHRlc3RTZW12ZXI7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzYWZlVXBncmFkZVZlcikge1xuICAgICAgc2FmZVVwZ3JhZGVWZXIgPSBzYWZlVXBncmFkZVZlci5mb3JtYXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNhZmVVcGdyYWRlVmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RhbGxzIGEgcGFja2FnZSB3LyBgbnBtYFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3dkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwa2dOYW1lXG4gICAqIEBwYXJhbSB7SW5zdGFsbFBhY2thZ2VPcHRzfSBbb3B0c11cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KCd0eXBlLWZlc3QnKS5QYWNrYWdlSnNvbj59XG4gICAqL1xuICBhc3luYyBpbnN0YWxsUGFja2FnZShjd2QsIHBrZ05hbWUsIHtwa2dWZXJ9ID0ge30pIHtcbiAgICAvKiogQHR5cGUge2FueX0gKi9cbiAgICBsZXQgZHVtbXlQa2dKc29uO1xuICAgIGNvbnN0IGR1bW15UGtnUGF0aCA9IHBhdGguam9pbihjd2QsICdwYWNrYWdlLmpzb24nKTtcbiAgICB0cnkge1xuICAgICAgZHVtbXlQa2dKc29uID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShkdW1teVBrZ1BhdGgsICd1dGY4JykpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBkdW1teVBrZ0pzb24gPSB7fTtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKGR1bW15UGtnUGF0aCwgSlNPTi5zdHJpbmdpZnkoZHVtbXlQa2dKc29uLCBudWxsLCAyKSwgJ3V0ZjgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZiB3ZSd2ZSBmb3VuZCBhIGBwYWNrYWdlLmpzb25gIGNvbnRhaW5pbmVkIHRoZSBgYXBwaXVtQ3JlYXRlZGAgcHJvcGVydHksXG4gICAgICogdGhlbiB3ZSBjYW4gZG8gd2hhdGV2ZXIgd2UgcGxlYXNlIHdpdGggaXQsIHNpbmNlIHdlIGNyZWF0ZWQgaXQuICBUaGlzIGlzXG4gICAgICogbGlrZWx5IHdoZW4gYEFQUElVTV9IT01FYCBpcyB0aGUgZGVmYXVsdCAoaW4gYH4vLmFwcGl1bWApLiAgSW4gdGhhdCBjYXNlLFxuICAgICAqIHdlIHdhbnQgYC0tZ2xvYmFsLXN0eWxlYCB0byBhdm9pZCBkZWR1cGluZywgYW5kIHdlIGFsc28gZG8gbm90IG5lZWQgYVxuICAgICAqIGBwYWNrYWdlLWxvY2suanNvbmAuXG4gICAgICpcbiAgICAgKiBJZiB3ZSBfaGF2ZW4ndF8gZm91bmQgc3VjaCBhIGtleSwgdGhlbiB0aGlzIGBwYWNrYWdlLmpzb25gIGlzbid0IGFcbiAgICAgKiBcImR1bW15XCIgYW5kIGlzIGNvbnRyb2xsZWQgYnkgdGhlIHVzZXIuICBTbyB3ZSdsbCBqdXN0IGFkZCBpdCBhcyBhIGRldlxuICAgICAqIGRlcDsgd2hhdGV2ZXIgZWxzZSBpdCBkb2VzIGlzIHVwIHRvIHRoZSB1c2VyJ3MgbnBtIGNvbmZpZy5cbiAgICAgKi9cbiAgICBjb25zdCBpbnN0YWxsT3B0cyA9IChhd2FpdCBoYXNBcHBpdW1EZXBlbmRlbmN5KGN3ZCkpXG4gICAgICA/IFsnLS1zYXZlLWRldiddXG4gICAgICA6IFsnLS1zYXZlLWRldicsICctLXNhdmUtZXhhY3QnLCAnLS1nbG9iYWwtc3R5bGUnLCAnLS1uby1wYWNrYWdlLWxvY2snXTtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZXhlYyhcbiAgICAgICdpbnN0YWxsJyxcbiAgICAgIFsuLi5pbnN0YWxsT3B0cywgcGtnVmVyID8gYCR7cGtnTmFtZX1AJHtwa2dWZXJ9YCA6IHBrZ05hbWVdLFxuICAgICAge1xuICAgICAgICBjd2QsXG4gICAgICAgIGpzb246IHRydWUsXG4gICAgICAgIGxvY2tGaWxlOiB0aGlzLl9nZXRJbnN0YWxsTG9ja2ZpbGVQYXRoKGN3ZCksXG4gICAgICB9XG4gICAgKTtcblxuICAgIGlmIChyZXMuanNvbikge1xuICAgICAgLy8gd2UgcGFyc2VkIGEgdmFsaWQganNvbiByZXNwb25zZSwgc28gaWYgd2UgZ290IGFuIGVycm9yIGhlcmUsIHJldHVybiB0aGF0XG4gICAgICAvLyBtZXNzYWdlIHN0cmFpZ2h0YXdheVxuICAgICAgaWYgKHJlcy5qc29uLmVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihyZXMuanNvbi5lcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTm93IHJlYWQgcGFja2FnZSBkYXRhIGZyb20gdGhlIGluc3RhbGxlZCBwYWNrYWdlIHRvIHJldHVybiwgYW5kIG1ha2Ugc3VyZVxuICAgIC8vIGV2ZXJ5dGhpbmcgZ290IGluc3RhbGxlZCBvay4gUmVtZW1iZXIsIHBrZ05hbWUgbWlnaHQgZW5kIHVwIHdpdGggYSAvIGluIGl0IGR1ZSB0byBhbiBucG1cbiAgICAvLyBvcmcsIHNvIGlmIHNvLCB0aGF0IHdpbGwgZ2V0IGNvcnJlY3RseSBleHBsb2RlZCBpbnRvIG11bHRpcGxlIGRpcmVjdG9yaWVzLCBieSBwYXRoLnJlc29sdmUgaGVyZVxuICAgIC8vIChldmVuIG9uIFdpbmRvd3MhKVxuICAgIGNvbnN0IHBrZ0pzb25QYXRoID0gcmVzb2x2ZUZyb20oY3dkLCBgJHtwa2dOYW1lfS9wYWNrYWdlLmpzb25gKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlcXVpcmUocGtnSnNvblBhdGgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVGhlIHBhY2thZ2Ugd2FzIG5vdCBkb3dubG9hZGVkIGNvcnJlY3RseTsgaXRzIHBhY2thZ2UuanNvbiAnICtcbiAgICAgICAgICAnZGlkIG5vdCBleGlzdCBvciB3YXMgdW5yZWFkYWJsZS4gV2UgbG9va2VkIGZvciBpdCBhdCAnICtcbiAgICAgICAgICBwa2dKc29uUGF0aFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN3ZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGtnXG4gICAqL1xuICBhc3luYyB1bmluc3RhbGxQYWNrYWdlKGN3ZCwgcGtnKSB7XG4gICAgYXdhaXQgdGhpcy5leGVjKCd1bmluc3RhbGwnLCBbcGtnXSwge1xuICAgICAgY3dkLFxuICAgICAgbG9ja0ZpbGU6IHRoaXMuX2dldEluc3RhbGxMb2NrZmlsZVBhdGgoY3dkKSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbnBtID0gbmV3IE5QTSgpO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBOUE0uaW5zdGFsbFBhY2thZ2V9XG4gKiBAdHlwZWRlZiBJbnN0YWxsUGFja2FnZU9wdHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGtnVmVyXSAtIHRoZSB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlIHRvIGluc3RhbGxcbiAqL1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBOUE0uZXhlY31cbiAqIEB0eXBlZGVmIEV4ZWNPcHRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY3dkIC0gQ3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICogQHByb3BlcnR5IHtib29sZWFufSBbanNvbl0gLSBJZiBgdHJ1ZWAsIHN1cHBseSBgLS1qc29uYCBmbGFnIHRvIG5wbSBhbmQgcmVzb2x2ZSB3LyBwYXJzZWQgSlNPTlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtsb2NrRmlsZV0gLSBQYXRoIHRvIGxvY2tmaWxlIHRvIHVzZVxuICovXG5cbi8vIFRIRVNFIFRZUEVTIFNIT1VMRCBCRSBJTiBURUVOIFBST0NFU1MsIE5PVCBIRVJFXG5cbi8qKlxuICogRXh0cmEgcHJvcHMgYHRlZW5fcHJvY2Vzcy5leGVjYCBhZGRzIHRvIGl0cyBlcnJvciBvYmplY3RzXG4gKiBAdHlwZWRlZiBUZWVuUHJvY2Vzc0V4ZWNFcnJvclByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3Rkb3V0IC0gU1RET1VUXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3RkZXJyIC0gU1RERVJSXG4gKiBAcHJvcGVydHkge251bWJlcj99IGNvZGUgLSBFeGl0IGNvZGVcbiAqL1xuXG4vKipcbiAqIEVycm9yIHRocm93biBieSBgdGVlbl9wcm9jZXNzLmV4ZWNgXG4gKiBAdHlwZWRlZiB7RXJyb3IgJiBUZWVuUHJvY2Vzc0V4ZWNFcnJvclByb3BzfSBUZWVuUHJvY2Vzc0V4ZWNFcnJvclxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQU1PLE1BQU1BLHVCQUF1QixHQUFHQyxhQUFBLENBQUtDLElBQUwsQ0FBVSxjQUFWLEVBQTBCLFFBQTFCLEVBQW9DLFFBQXBDLENBQWhDOzs7O0FBS0EsTUFBTUMsOEJBQThCLEdBQUdGLGFBQUEsQ0FBS0MsSUFBTCxDQUFVRix1QkFBVixFQUFtQyxlQUFuQyxDQUF2Qzs7OztBQUtBLE1BQU1JLEdBQU4sQ0FBVTtFQU1mQyx1QkFBdUIsQ0FBQ0MsR0FBRCxFQUFNO0lBQzNCLE9BQU9MLGFBQUEsQ0FBS0MsSUFBTCxDQUFVSSxHQUFWLEVBQWVILDhCQUFmLENBQVA7RUFDRDs7RUFZUyxNQUFKSSxJQUFJLENBQUNDLEdBQUQsRUFBTUMsSUFBTixFQUFZQyxJQUFaLEVBQWtCQyxRQUFRLEdBQTRCLEVBQXRELEVBQTJEO0lBQ25FLElBQUk7TUFBQ0wsR0FBRDtNQUFNTSxJQUFOO01BQVlDO0lBQVosSUFBd0JILElBQTVCO0lBR0FDLFFBQVEsR0FBRyxFQUFDLEdBQUdBLFFBQUo7TUFBY0w7SUFBZCxDQUFYO0lBRUFHLElBQUksQ0FBQ0ssT0FBTCxDQUFhTixHQUFiOztJQUNBLElBQUlJLElBQUosRUFBVTtNQUNSSCxJQUFJLENBQUNNLElBQUwsQ0FBVSxRQUFWO0lBQ0Q7O0lBQ0QsTUFBTUMsTUFBTSxHQUFHQyxNQUFNLENBQUNDLFNBQVAsS0FBcUIsU0FBckIsR0FBaUMsS0FBaEQ7O0lBQ0EsSUFBSUMsTUFBTSxHQUFHLFlBQVksTUFBTSxJQUFBWixrQkFBQSxFQUFL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
217
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDQUNIRV9ESVJfUkVMQVRJVkVfUEFUSCIsInBhdGgiLCJqb2luIiwiSU5TVEFMTF9MT0NLRklMRV9SRUxBVElWRV9QQVRIIiwiTlBNIiwiX2dldEluc3RhbGxMb2NrZmlsZVBhdGgiLCJjd2QiLCJleGVjIiwiY21kIiwiYXJncyIsIm9wdHMiLCJleGVjT3B0cyIsImpzb24iLCJsb2NrRmlsZSIsInRlZW5Qcm9jZXNzRXhlY09wdHMiLCJ1bnNoaWZ0IiwicHVzaCIsIm5wbUNtZCIsInN5c3RlbSIsImlzV2luZG93cyIsInJ1bm5lciIsImFjcXVpcmVMb2NrIiwidXRpbCIsImdldExvY2tGaWxlR3VhcmQiLCJfcnVubmVyIiwicmV0Iiwic3Rkb3V0Iiwic3RkZXJyIiwiY29kZSIsIkpTT04iLCJwYXJzZSIsImlnbiIsImUiLCJlcnIiLCJFcnJvciIsInRyaW0iLCJnZXRMYXRlc3RWZXJzaW9uIiwicGtnIiwibGF0ZXN0IiwiZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVWZXJzaW9uIiwiY3VyVmVyc2lvbiIsImFsbFZlcnNpb25zIiwiZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVGcm9tVmVyc2lvbnMiLCJsaXN0Iiwic2FmZVVwZ3JhZGVWZXIiLCJjdXJTZW12ZXIiLCJzZW12ZXIiLCJ0ZXN0VmVyIiwidGVzdFNlbXZlciIsInByZXJlbGVhc2UiLCJsZW5ndGgiLCJjb21wYXJlIiwibWFqb3IiLCJmb3JtYXQiLCJpbnN0YWxsUGFja2FnZSIsInBrZ05hbWUiLCJwa2dWZXIiLCJkdW1teVBrZ0pzb24iLCJkdW1teVBrZ1BhdGgiLCJmcyIsInJlYWRGaWxlIiwid3JpdGVGaWxlIiwic3RyaW5naWZ5IiwiaW5zdGFsbE9wdHMiLCJoYXNBcHBpdW1EZXBlbmRlbmN5IiwicmVzIiwiZXJyb3IiLCJwa2dKc29uUGF0aCIsInJlc29sdmVGcm9tIiwicmVxdWlyZSIsInVuaW5zdGFsbFBhY2thZ2UiLCJucG0iXSwic291cmNlcyI6WyIuLi8uLi9saWIvbnBtLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7aGFzQXBwaXVtRGVwZW5kZW5jeX0gZnJvbSAnLi9lbnYnO1xuaW1wb3J0IHtleGVjfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHtmc30gZnJvbSAnLi9mcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgKiBhcyBzeXN0ZW0gZnJvbSAnLi9zeXN0ZW0nO1xuaW1wb3J0IHJlc29sdmVGcm9tIGZyb20gJ3Jlc29sdmUtZnJvbSc7XG5cbi8qKlxuICogUmVsYXRpdmUgcGF0aCB0byBkaXJlY3RvcnkgY29udGFpbmluZyBhbnkgQXBwaXVtIGludGVybmFsIGZpbGVzXG4gKiBYWFg6IHRoaXMgaXMgZHVwbGljYXRlZCBpbiBgYXBwaXVtL2xpYi9jb25zdGFudHMuanNgLlxuICovXG5leHBvcnQgY29uc3QgQ0FDSEVfRElSX1JFTEFUSVZFX1BBVEggPSBwYXRoLmpvaW4oJ25vZGVfbW9kdWxlcycsICcuY2FjaGUnLCAnYXBwaXVtJyk7XG5cbi8qKlxuICogUmVsYXRpdmUgcGF0aCB0byBsb2NrZmlsZSB1c2VkIHdoZW4gaW5zdGFsbGluZyBhbiBleHRlbnNpb24gdmlhIGBhcHBpdW1gXG4gKi9cbmV4cG9ydCBjb25zdCBJTlNUQUxMX0xPQ0tGSUxFX1JFTEFUSVZFX1BBVEggPSBwYXRoLmpvaW4oQ0FDSEVfRElSX1JFTEFUSVZFX1BBVEgsICcuaW5zdGFsbC5sb2NrJyk7XG5cbi8qKlxuICogWFhYOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSBhIHNpbmdsZXRvbiwgYnV0IGl0IGlzbid0LiAgTWF5YmUgdGhpcyBtb2R1bGUgc2hvdWxkIGp1c3QgZXhwb3J0IGZ1bmN0aW9ucz9cbiAqL1xuZXhwb3J0IGNsYXNzIE5QTSB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHBhdGggdG8gXCJpbnN0YWxsXCIgbG9ja2ZpbGVcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN3ZFxuICAgKi9cbiAgX2dldEluc3RhbGxMb2NrZmlsZVBhdGgoY3dkKSB7XG4gICAgcmV0dXJuIHBhdGguam9pbihjd2QsIElOU1RBTExfTE9DS0ZJTEVfUkVMQVRJVkVfUEFUSCk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBgbnBtYCB3aXRoIGdpdmVuIGFyZ3MuXG4gICAqXG4gICAqIElmIHRoZSBwcm9jZXNzIGV4aXRzIHdpdGggYSBub256ZXJvIGNvZGUsIHRoZSBjb250ZW50cyBvZiBgU1RET1VUYCBhbmQgYFNUREVSUmAgd2lsbCBiZSBpbiB0aGVcbiAgICogYG1lc3NhZ2VgIG9mIGFueSByZWplY3RlZCBlcnJvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNtZFxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBhcmdzXG4gICAqIEBwYXJhbSB7RXhlY09wdHN9IG9wdHNcbiAgICogQHBhcmFtIHtPbWl0PGltcG9ydCgndGVlbl9wcm9jZXNzJykuRXhlY09wdGlvbnMsICdjd2QnPn0gW2V4ZWNPcHRzXVxuICAgKi9cbiAgYXN5bmMgZXhlYyhjbWQsIGFyZ3MsIG9wdHMsIGV4ZWNPcHRzID0ge30pIHtcbiAgICBsZXQge2N3ZCwganNvbiwgbG9ja0ZpbGV9ID0gb3B0cztcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBwZXJmb3JtIHRoZSBjdXJyZW50IG9wZXJhdGlvbiBpbiBjd2RcbiAgICAvKiogQHR5cGUge2ltcG9ydCgndGVlbl9wcm9jZXNzJykuRXhlY09wdGlvbnN9ICovXG4gICAgY29uc3QgdGVlblByb2Nlc3NFeGVjT3B0cyA9IHsuLi5leGVjT3B0cywgY3dkfTtcblxuICAgIGFyZ3MudW5zaGlmdChjbWQpO1xuICAgIGlmIChqc29uKSB7XG4gICAgICBhcmdzLnB1c2goJy0tanNvbicpO1xuICAgIH1cbiAgICBjb25zdCBucG1DbWQgPSBzeXN0ZW0uaXNXaW5kb3dzKCkgPyAnbnBtLmNtZCcgOiAnbnBtJztcbiAgICBsZXQgcnVubmVyID0gYXN5bmMgKCkgPT4gYXdhaXQgZXhlYyhucG1DbWQsIGFyZ3MsIHRlZW5Qcm9jZXNzRXhlY09wdHMpO1xuICAgIGlmIChsb2NrRmlsZSkge1xuICAgICAgY29uc3QgYWNxdWlyZUxvY2sgPSB1dGlsLmdldExvY2tGaWxlR3VhcmQobG9ja0ZpbGUpO1xuICAgICAgY29uc3QgX3J1bm5lciA9IHJ1bm5lcjtcbiAgICAgIHJ1bm5lciA9IGFzeW5jICgpID0+IGF3YWl0IGFjcXVpcmVMb2NrKF9ydW5uZXIpO1xuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCd0ZWVuX3Byb2Nlc3MnKS5FeGVjUmVzdWx0PHN0cmluZz4gJiB7anNvbj86IGFueX19ICovXG4gICAgbGV0IHJldDtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyLCBjb2RlfSA9IGF3YWl0IHJ1bm5lcigpO1xuICAgICAgcmV0ID0ge3N0ZG91dCwgc3RkZXJyLCBjb2RlfTtcbiAgICAgIC8vIGlmIHBvc3NpYmxlLCBwYXJzZSBOUE0ncyBqc29uIG91dHB1dC4gRHVyaW5nIE5QTSBpbnN0YWxsIDNyZC1wYXJ0eVxuICAgICAgLy8gcGFja2FnZXMgY2FuIHdyaXRlIHRvIHN0ZG91dCwgc28gc29tZXRpbWVzIHRoZSBqc29uIG91dHB1dCBjYW4ndCBiZVxuICAgICAgLy8gZ3VhcmFudGVlZCB0byBiZSBwYXJzZWFibGVcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldC5qc29uID0gSlNPTi5wYXJzZShzdGRvdXQpO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3Rkb3V0ID0gJycsXG4gICAgICAgIHN0ZGVyciA9ICcnLFxuICAgICAgICBjb2RlID0gbnVsbCxcbiAgICAgIH0gPSAvKiogQHR5cGUge2ltcG9ydCgndGVlbl9wcm9jZXNzJykuRXhlY0Vycm9yfSAqLyAoZSk7XG4gICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgIGBucG0gY29tbWFuZCAnJHthcmdzLmpvaW4oXG4gICAgICAgICAgJyAnXG4gICAgICAgICl9JyBmYWlsZWQgd2l0aCBjb2RlICR7Y29kZX0uXFxuXFxuU1RET1VUOlxcbiR7c3Rkb3V0LnRyaW0oKX1cXG5cXG5TVERFUlI6XFxuJHtzdGRlcnIudHJpbSgpfWBcbiAgICAgICk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN3ZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGtnXG4gICAqL1xuICBhc3luYyBnZXRMYXRlc3RWZXJzaW9uKGN3ZCwgcGtnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IHRoaXMuZXhlYygndmlldycsIFtwa2csICdkaXN0LXRhZ3MnXSwge1xuICAgICAgICBqc29uOiB0cnVlLFxuICAgICAgICBjd2QsXG4gICAgICB9KVxuICAgICkuanNvbj8ubGF0ZXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjd2RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBrZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VyVmVyc2lvblxuICAgKi9cbiAgYXN5bmMgZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVWZXJzaW9uKGN3ZCwgcGtnLCBjdXJWZXJzaW9uKSB7XG4gICAgY29uc3QgYWxsVmVyc2lvbnMgPSAoXG4gICAgICBhd2FpdCB0aGlzLmV4ZWMoJ3ZpZXcnLCBbcGtnLCAndmVyc2lvbnMnXSwge1xuICAgICAgICBqc29uOiB0cnVlLFxuICAgICAgICBjd2QsXG4gICAgICB9KVxuICAgICkuanNvbjtcbiAgICByZXR1cm4gdGhpcy5nZXRMYXRlc3RTYWZlVXBncmFkZUZyb21WZXJzaW9ucyhjdXJWZXJzaW9uLCBhbGxWZXJzaW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBgbnBtIGxzYCwgb3B0aW9uYWxseSBmb3IgYSBwYXJ0aWN1bGFyIHBhY2thZ2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjd2RcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwa2ddXG4gICAqL1xuICBhc3luYyBsaXN0KGN3ZCwgcGtnKSB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmV4ZWMoJ2xpc3QnLCBwa2cgPyBbcGtnXSA6IFtdLCB7Y3dkLCBqc29uOiB0cnVlfSkpLmpzb247XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYSBjdXJyZW50IHZlcnNpb24gYW5kIGEgbGlzdCBvZiBhbGwgdmVyc2lvbnMgZm9yIGEgcGFja2FnZSwgcmV0dXJuIHRoZSB2ZXJzaW9uIHdoaWNoIGlzXG4gICAqIHRoZSBoaWdoZXN0IHNhZmVseS11cGdyYWRhYmxlIHZlcnNpb24gKG1lYW5pbmcgbm90IGNyb3NzaW5nIGFueSBtYWpvciByZXZpc2lvbiBib3VuZGFyaWVzLCBhbmRcbiAgICogbm90IGluY2x1ZGluZyBhbnkgYWxwaGEvYmV0YS9yYyB2ZXJzaW9ucylcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN1clZlcnNpb24gLSB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIGEgcGFja2FnZVxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGFsbFZlcnNpb25zIC0gYSBsaXN0IG9mIHZlcnNpb24gc3RyaW5nc1xuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH0gLSB0aGUgaGlnaGVzdCBzYWZlbHktdXBncmFkYWJsZSB2ZXJzaW9uLCBvciBudWxsIGlmIHRoZXJlIGlzbid0IG9uZVxuICAgKi9cbiAgZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVGcm9tVmVyc2lvbnMoY3VyVmVyc2lvbiwgYWxsVmVyc2lvbnMpIHtcbiAgICBsZXQgc2FmZVVwZ3JhZGVWZXIgPSBudWxsO1xuICAgIGNvbnN0IGN1clNlbXZlciA9IHNlbXZlci5wYXJzZShjdXJWZXJzaW9uKTtcbiAgICBpZiAoY3VyU2VtdmVyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBwYXJzZSBjdXJyZW50IHZlcnNpb24gJyR7Y3VyVmVyc2lvbn0nYCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdGVzdFZlciBvZiBhbGxWZXJzaW9ucykge1xuICAgICAgY29uc3QgdGVzdFNlbXZlciA9IHNlbXZlci5wYXJzZSh0ZXN0VmVyKTtcbiAgICAgIGlmICh0ZXN0U2VtdmVyID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHBhcnNlIHZlcnNpb24gdG8gdGVzdCBhZ2FpbnN0OiAnJHt0ZXN0VmVyfSdgKTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSB0ZXN0IHZlcnNpb24gaXMgYSBwcmVyZWxlYXNlLCBpZ25vcmUgaXRcbiAgICAgIGlmICh0ZXN0U2VtdmVyLnByZXJlbGVhc2UubGVuZ3RoID4gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHZlcnNpb24gaXMgbGF0ZXIgdGhhbiB0aGUgdGVzdCB2ZXJzaW9uLCBza2lwIHRoaXMgdGVzdCB2ZXJzaW9uXG4gICAgICBpZiAoY3VyU2VtdmVyLmNvbXBhcmUodGVzdFNlbXZlcikgPT09IDEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgdGVzdCB2ZXJzaW9uIGlzIG5ld2VyLCBidXQgY3Jvc3NlcyBhIG1ham9yIHJldmlzaW9uIGJvdW5kYXJ5LCBhbHNvIHNraXAgaXRcbiAgICAgIGlmICh0ZXN0U2VtdmVyLm1ham9yID4gY3VyU2VtdmVyLm1ham9yKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gb3RoZXJ3aXNlIHRoaXMgdmVyc2lvbiBpcyBzYWZlIHRvIHVwZ3JhZGUgdG8uIEJ1dCB0aGVyZSBtaWdodCBiZSBtdWx0aXBsZSBvbmVzIG9mIHRoaXNcbiAgICAgIC8vIGtpbmQsIHNvIGtlZXAgaXRlcmF0aW5nIGFuZCBrZWVwaW5nIHRoZSBoaWdoZXN0XG4gICAgICBpZiAoc2FmZVVwZ3JhZGVWZXIgPT09IG51bGwgfHwgdGVzdFNlbXZlci5jb21wYXJlKHNhZmVVcGdyYWRlVmVyKSA9PT0gMSkge1xuICAgICAgICBzYWZlVXBncmFkZVZlciA9IHRlc3RTZW12ZXI7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzYWZlVXBncmFkZVZlcikge1xuICAgICAgc2FmZVVwZ3JhZGVWZXIgPSBzYWZlVXBncmFkZVZlci5mb3JtYXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNhZmVVcGdyYWRlVmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RhbGxzIGEgcGFja2FnZSB3LyBgbnBtYFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3dkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwa2dOYW1lXG4gICAqIEBwYXJhbSB7SW5zdGFsbFBhY2thZ2VPcHRzfSBbb3B0c11cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KCd0eXBlLWZlc3QnKS5QYWNrYWdlSnNvbj59XG4gICAqL1xuICBhc3luYyBpbnN0YWxsUGFja2FnZShjd2QsIHBrZ05hbWUsIHtwa2dWZXJ9ID0ge30pIHtcbiAgICAvKiogQHR5cGUge2FueX0gKi9cbiAgICBsZXQgZHVtbXlQa2dKc29uO1xuICAgIGNvbnN0IGR1bW15UGtnUGF0aCA9IHBhdGguam9pbihjd2QsICdwYWNrYWdlLmpzb24nKTtcbiAgICB0cnkge1xuICAgICAgZHVtbXlQa2dKc29uID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShkdW1teVBrZ1BhdGgsICd1dGY4JykpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBkdW1teVBrZ0pzb24gPSB7fTtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKGR1bW15UGtnUGF0aCwgSlNPTi5zdHJpbmdpZnkoZHVtbXlQa2dKc29uLCBudWxsLCAyKSwgJ3V0ZjgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZiB3ZSd2ZSBmb3VuZCBhIGBwYWNrYWdlLmpzb25gIGNvbnRhaW5pbmVkIHRoZSBgYXBwaXVtQ3JlYXRlZGAgcHJvcGVydHksXG4gICAgICogdGhlbiB3ZSBjYW4gZG8gd2hhdGV2ZXIgd2UgcGxlYXNlIHdpdGggaXQsIHNpbmNlIHdlIGNyZWF0ZWQgaXQuICBUaGlzIGlzXG4gICAgICogbGlrZWx5IHdoZW4gYEFQUElVTV9IT01FYCBpcyB0aGUgZGVmYXVsdCAoaW4gYH4vLmFwcGl1bWApLiAgSW4gdGhhdCBjYXNlLFxuICAgICAqIHdlIHdhbnQgYC0tZ2xvYmFsLXN0eWxlYCB0byBhdm9pZCBkZWR1cGluZywgYW5kIHdlIGFsc28gZG8gbm90IG5lZWQgYVxuICAgICAqIGBwYWNrYWdlLWxvY2suanNvbmAuXG4gICAgICpcbiAgICAgKiBJZiB3ZSBfaGF2ZW4ndF8gZm91bmQgc3VjaCBhIGtleSwgdGhlbiB0aGlzIGBwYWNrYWdlLmpzb25gIGlzbid0IGFcbiAgICAgKiBcImR1bW15XCIgYW5kIGlzIGNvbnRyb2xsZWQgYnkgdGhlIHVzZXIuICBTbyB3ZSdsbCBqdXN0IGFkZCBpdCBhcyBhIGRldlxuICAgICAqIGRlcDsgd2hhdGV2ZXIgZWxzZSBpdCBkb2VzIGlzIHVwIHRvIHRoZSB1c2VyJ3MgbnBtIGNvbmZpZy5cbiAgICAgKi9cbiAgICBjb25zdCBpbnN0YWxsT3B0cyA9IChhd2FpdCBoYXNBcHBpdW1EZXBlbmRlbmN5KGN3ZCkpXG4gICAgICA/IFsnLS1zYXZlLWRldiddXG4gICAgICA6IFsnLS1zYXZlLWRldicsICctLXNhdmUtZXhhY3QnLCAnLS1nbG9iYWwtc3R5bGUnLCAnLS1uby1wYWNrYWdlLWxvY2snXTtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZXhlYyhcbiAgICAgICdpbnN0YWxsJyxcbiAgICAgIFsuLi5pbnN0YWxsT3B0cywgcGtnVmVyID8gYCR7cGtnTmFtZX1AJHtwa2dWZXJ9YCA6IHBrZ05hbWVdLFxuICAgICAge1xuICAgICAgICBjd2QsXG4gICAgICAgIGpzb246IHRydWUsXG4gICAgICAgIGxvY2tGaWxlOiB0aGlzLl9nZXRJbnN0YWxsTG9ja2ZpbGVQYXRoKGN3ZCksXG4gICAgICB9XG4gICAgKTtcblxuICAgIGlmIChyZXMuanNvbikge1xuICAgICAgLy8gd2UgcGFyc2VkIGEgdmFsaWQganNvbiByZXNwb25zZSwgc28gaWYgd2UgZ290IGFuIGVycm9yIGhlcmUsIHJldHVybiB0aGF0XG4gICAgICAvLyBtZXNzYWdlIHN0cmFpZ2h0YXdheVxuICAgICAgaWYgKHJlcy5qc29uLmVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihyZXMuanNvbi5lcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTm93IHJlYWQgcGFja2FnZSBkYXRhIGZyb20gdGhlIGluc3RhbGxlZCBwYWNrYWdlIHRvIHJldHVybiwgYW5kIG1ha2Ugc3VyZVxuICAgIC8vIGV2ZXJ5dGhpbmcgZ290IGluc3RhbGxlZCBvay4gUmVtZW1iZXIsIHBrZ05hbWUgbWlnaHQgZW5kIHVwIHdpdGggYSAvIGluIGl0IGR1ZSB0byBhbiBucG1cbiAgICAvLyBvcmcsIHNvIGlmIHNvLCB0aGF0IHdpbGwgZ2V0IGNvcnJlY3RseSBleHBsb2RlZCBpbnRvIG11bHRpcGxlIGRpcmVjdG9yaWVzLCBieSBwYXRoLnJlc29sdmUgaGVyZVxuICAgIC8vIChldmVuIG9uIFdpbmRvd3MhKVxuICAgIGNvbnN0IHBrZ0pzb25QYXRoID0gcmVzb2x2ZUZyb20oY3dkLCBgJHtwa2dOYW1lfS9wYWNrYWdlLmpzb25gKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlcXVpcmUocGtnSnNvblBhdGgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVGhlIHBhY2thZ2Ugd2FzIG5vdCBkb3dubG9hZGVkIGNvcnJlY3RseTsgaXRzIHBhY2thZ2UuanNvbiAnICtcbiAgICAgICAgICAnZGlkIG5vdCBleGlzdCBvciB3YXMgdW5yZWFkYWJsZS4gV2UgbG9va2VkIGZvciBpdCBhdCAnICtcbiAgICAgICAgICBwa2dKc29uUGF0aFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN3ZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGtnXG4gICAqL1xuICBhc3luYyB1bmluc3RhbGxQYWNrYWdlKGN3ZCwgcGtnKSB7XG4gICAgYXdhaXQgdGhpcy5leGVjKCd1bmluc3RhbGwnLCBbcGtnXSwge1xuICAgICAgY3dkLFxuICAgICAgbG9ja0ZpbGU6IHRoaXMuX2dldEluc3RhbGxMb2NrZmlsZVBhdGgoY3dkKSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbnBtID0gbmV3IE5QTSgpO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBOUE0uaW5zdGFsbFBhY2thZ2V9XG4gKiBAdHlwZWRlZiBJbnN0YWxsUGFja2FnZU9wdHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGtnVmVyXSAtIHRoZSB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlIHRvIGluc3RhbGxcbiAqL1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBOUE0uZXhlY31cbiAqIEB0eXBlZGVmIEV4ZWNPcHRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY3dkIC0gQ3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICogQHByb3BlcnR5IHtib29sZWFufSBbanNvbl0gLSBJZiBgdHJ1ZWAsIHN1cHBseSBgLS1qc29uYCBmbGFnIHRvIG5wbSBhbmQgcmVzb2x2ZSB3LyBwYXJzZWQgSlNPTlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtsb2NrRmlsZV0gLSBQYXRoIHRvIGxvY2tmaWxlIHRvIHVzZVxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQU1PLE1BQU1BLHVCQUF1QixH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
package/build/lib/zip.js CHANGED
@@ -445,7 +445,7 @@ async function toArchive(dstPath, src = {}, opts = {}) {
445
445
  const getExecutablePath = _lodash.default.memoize(async function getExecutablePath(binaryName) {
446
446
  const fullPath = await _fs2.default.which(binaryName);
447
447
 
448
- _logger.default.debug(`Found '%s' at '%s'`, binaryName, fullPath);
448
+ _logger.default.debug(`Found '${binaryName}' at '${fullPath}'`);
449
449
 
450
450
  return fullPath;
451
451
  });
@@ -458,4 +458,4 @@ var _default = {
458
458
  toArchive
459
459
  };
460
460
  exports.default = _default;
461
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcGVuWmlwIiwiQiIsInByb21pc2lmeSIsInlhdXpsIiwib3BlbiIsInBpcGVsaW5lIiwic3RyZWFtIiwiWklQX01BR0lDIiwiSUZNVCIsIklGRElSIiwiSUZMTksiLCJaaXBFeHRyYWN0b3IiLCJ6aXBmaWxlIiwiY29uc3RydWN0b3IiLCJzb3VyY2VQYXRoIiwib3B0cyIsInppcFBhdGgiLCJjYW5jZWxlZCIsImV4dHJhY3RGaWxlTmFtZSIsImVudHJ5IiwiXyIsImlzQnVmZmVyIiwiZmlsZU5hbWUiLCJ0b1N0cmluZyIsImZpbGVOYW1lc0VuY29kaW5nIiwiZXh0cmFjdCIsImRpciIsImxhenlFbnRyaWVzIiwiZGVjb2RlU3RyaW5ncyIsInJlc29sdmUiLCJyZWplY3QiLCJvbiIsImVyciIsInJlYWRFbnRyeSIsInN0YXJ0c1dpdGgiLCJkZXN0RGlyIiwicGF0aCIsImRpcm5hbWUiLCJqb2luIiwiZnMiLCJta2RpciIsInJlY3Vyc2l2ZSIsImNhbm9uaWNhbERlc3REaXIiLCJyZWFscGF0aCIsInJlbGF0aXZlRGVzdERpciIsInJlbGF0aXZlIiwic3BsaXQiLCJzZXAiLCJpbmNsdWRlcyIsIkVycm9yIiwiZXh0cmFjdEVudHJ5IiwiY2xvc2UiLCJkZXN0IiwibW9kZSIsImV4dGVybmFsRmlsZUF0dHJpYnV0ZXMiLCJpc1N5bWxpbmsiLCJpc0RpciIsImVuZHNXaXRoIiwidmVyc2lvbk1hZGVCeSIsInByb2NNb2RlIiwiZ2V0RXh0cmFjdGVkTW9kZSIsIm1rZGlyT3B0aW9ucyIsIm9wZW5SZWFkU3RyZWFtIiwiYmluZCIsInJlYWRTdHJlYW0iLCJsaW5rIiwiZ2V0U3RyZWFtIiwic3ltbGluayIsImNyZWF0ZVdyaXRlU3RyZWFtIiwiZW50cnlNb2RlIiwiZGVmYXVsdERpck1vZGUiLCJkZWZhdWx0RmlsZU1vZGUiLCJwYXJzZUludCIsImV4dHJhY3RBbGxUbyIsInppcEZpbGVQYXRoIiwiaXNBYnNvbHV0ZSIsInVzZVN5c3RlbVVuemlwIiwiZXh0cmFjdFdpdGhTeXN0ZW1VbnppcCIsImxvZyIsIndhcm4iLCJzdGRlcnIiLCJtZXNzYWdlIiwiZXh0cmFjdG9yIiwiaXNXaW5kb3dzSG9zdCIsImlzV2luZG93cyIsImV4ZWN1dGFibGVQYXRoIiwiZ2V0RXhlY3V0YWJsZVBhdGgiLCJlIiwiZXhlYyIsIl9leHRyYWN0RW50cnlUbyIsInppcEZpbGUiLCJkc3RQYXRoIiwidGVzdCIsImV4aXN0cyIsIm1rZGlycCIsIndyaXRlU3RyZWFtIiwiZmxhZ3MiLCJ3cml0ZVN0cmVhbVByb21pc2UiLCJvbmNlIiwiemlwUmVhZFN0cmVhbSIsInppcFJlYWRTdHJlYW1Qcm9taXNlIiwicGlwZSIsImFsbCIsInJlYWRFbnRyaWVzIiwib25FbnRyeSIsInJlcyIsImV4dHJhY3RFbnRyeVRvIiwiZW1pdCIsInRvSW5NZW1vcnlaaXAiLCJzcmNQYXRoIiwiaXNNZXRlcmVkIiwiZW5jb2RlVG9CYXNlNjQiLCJtYXhTaXplIiwiR2lCIiwibGV2ZWwiLCJyZXN1bHRCdWZmZXJzIiwicmVzdWx0QnVmZmVyc1NpemUiLCJyZXN1bHRXcml0ZVN0cmVhbSIsIldyaXRhYmxlIiwid3JpdGUiLCJidWZmZXIiLCJlbmNvZGluZyIsIm5leHQiLCJwdXNoIiwibGVuZ3RoIiwidG9SZWFkYWJsZVNpemVTdHJpbmciLCJhcmNoaXZlIiwiYXJjaGl2ZXIiLCJ6bGliIiwic3JjU2l6ZSIsImJhc2U2NEVuY29kZXJTdHJlYW0iLCJCYXNlNjRFbmNvZGUiLCJyZXN1bHRXcml0ZVN0cmVhbVByb21pc2UiLCJ1bnBpcGUiLCJhYm9ydCIsImRlc3Ryb3kiLCJwb2ludGVyIiwiYXJjaGl2ZVN0cmVhbVByb21pc2UiLCJ0aW1lciIsIlRpbWVyIiwic3RhcnQiLCJzdGF0IiwiaXNEaXJlY3RvcnkiLCJkaXJlY3RvcnkiLCJmaWxlIiwibmFtZSIsImJhc2VuYW1lIiwiZmluYWxpemUiLCJkZWJ1ZyIsImdldER1cmF0aW9uIiwiYXNTZWNvbmRzIiwidG9GaXhlZCIsIkJ1ZmZlciIsImNvbmNhdCIsImFzc2VydFZhbGlkWmlwIiwiZmlsZVBhdGgiLCJzaXplIiwiZmQiLCJhbGxvYyIsInJlYWQiLCJzaWduYXR1cmUiLCJ0b0FyY2hpdmUiLCJzcmMiLCJwYXR0ZXJuIiwiY3dkIiwiaWdub3JlIiwiZ2xvYiIsIm1lbW9pemUiLCJiaW5hcnlOYW1lIiwiZnVsbFBhdGgiLCJ3aGljaCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi96aXAuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB5YXV6bCBmcm9tICd5YXV6bCc7XG5pbXBvcnQgYXJjaGl2ZXIgZnJvbSAnYXJjaGl2ZXInO1xuaW1wb3J0IHtjcmVhdGVXcml0ZVN0cmVhbX0gZnJvbSAnZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgc3RyZWFtIGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgZnMgZnJvbSAnLi9mcyc7XG5pbXBvcnQge2lzV2luZG93c30gZnJvbSAnLi9zeXN0ZW0nO1xuaW1wb3J0IHtCYXNlNjRFbmNvZGV9IGZyb20gJ2Jhc2U2NC1zdHJlYW0nO1xuaW1wb3J0IHt0b1JlYWRhYmxlU2l6ZVN0cmluZywgR2lCfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IFRpbWVyIGZyb20gJy4vdGltaW5nJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IGdldFN0cmVhbSBmcm9tICdnZXQtc3RyZWFtJztcbmltcG9ydCB7ZXhlY30gZnJvbSAndGVlbl9wcm9jZXNzJztcblxuLyoqXG4gKiBAdHlwZSB7KHBhdGg6IHN0cmluZywgb3B0aW9ucz86IHlhdXpsLk9wdGlvbnMpID0+IFByb21pc2U8eWF1emwuWmlwRmlsZT59XG4gKi9cbmNvbnN0IG9wZW5aaXAgPSBCLnByb21pc2lmeSh5YXV6bC5vcGVuKTtcbi8qKlxuICogQHR5cGUgeyhzb3VyY2U6IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSwgZGVzdGluYXRpb246IE5vZGVKUy5Xcml0YWJsZVN0cmVhbSkgPT4gUHJvbWlzZTxOb2RlSlMuV3JpdGFibGVTdHJlYW0+fVxuICovXG5jb25zdCBwaXBlbGluZSA9IEIucHJvbWlzaWZ5KHN0cmVhbS5waXBlbGluZSk7XG5jb25zdCBaSVBfTUFHSUMgPSAnUEsnO1xuY29uc3QgSUZNVCA9IDYxNDQwO1xuY29uc3QgSUZESVIgPSAxNjM4NDtcbmNvbnN0IElGTE5LID0gNDA5NjA7XG5cbi8vIFRoaXMgY2xhc3MgaXMgbW9zdGx5IGNvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXhvZ2Rlbi9leHRyYWN0LXppcC9ibG9iL21hc3Rlci9pbmRleC5qc1xuY2xhc3MgWmlwRXh0cmFjdG9yIHtcbiAgLyoqIEB0eXBlIHt5YXV6bC5aaXBGaWxlfSAqL1xuICB6aXBmaWxlO1xuXG4gIGNvbnN0cnVjdG9yKHNvdXJjZVBhdGgsIG9wdHMgPSB7fSkge1xuICAgIHRoaXMuemlwUGF0aCA9IHNvdXJjZVBhdGg7XG4gICAgdGhpcy5vcHRzID0gb3B0cztcbiAgICB0aGlzLmNhbmNlbGVkID0gZmFsc2U7XG4gIH1cblxuICBleHRyYWN0RmlsZU5hbWUoZW50cnkpIHtcbiAgICByZXR1cm4gXy5pc0J1ZmZlcihlbnRyeS5maWxlTmFtZSlcbiAgICAgID8gZW50cnkuZmlsZU5hbWUudG9TdHJpbmcodGhpcy5vcHRzLmZpbGVOYW1lc0VuY29kaW5nKVxuICAgICAgOiBlbnRyeS5maWxlTmFtZTtcbiAgfVxuXG4gIGFzeW5jIGV4dHJhY3QoKSB7XG4gICAgY29uc3Qge2RpciwgZmlsZU5hbWVzRW5jb2Rpbmd9ID0gdGhpcy5vcHRzO1xuICAgIHRoaXMuemlwZmlsZSA9IGF3YWl0IG9wZW5aaXAodGhpcy56aXBQYXRoLCB7XG4gICAgICBsYXp5RW50cmllczogdHJ1ZSxcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVqb3Nod29sZmUveWF1emwvY29tbWl0L2NjNzQ1NWFjNzg5YmE4NDk3MzE4NGU1ZWJkZTA1ODFjZGM0YzNiMzkjZGlmZi0wNGM2ZTkwZmFhYzI2NzVhYTg5ZTIxNzZkMmVlYzdkOFI5NVxuICAgICAgZGVjb2RlU3RyaW5nczogIWZpbGVOYW1lc0VuY29kaW5nLFxuICAgIH0pO1xuICAgIHRoaXMuY2FuY2VsZWQgPSBmYWxzZTtcblxuICAgIHJldHVybiBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnppcGZpbGUub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLmNhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuemlwZmlsZS5yZWFkRW50cnkoKTtcblxuICAgICAgdGhpcy56aXBmaWxlLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbGVkKSB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy56aXBmaWxlLm9uKCdlbnRyeScsIGFzeW5jIChlbnRyeSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW5jZWxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5leHRyYWN0RmlsZU5hbWUoZW50cnkpO1xuICAgICAgICBpZiAoZmlsZU5hbWUuc3RhcnRzV2l0aCgnX19NQUNPU1gvJykpIHtcbiAgICAgICAgICB0aGlzLnppcGZpbGUucmVhZEVudHJ5KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVzdERpciA9IHBhdGguZGlybmFtZShwYXRoLmpvaW4oZGlyLCBmaWxlTmFtZSkpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGZzLm1rZGlyKGRlc3REaXIsIHtyZWN1cnNpdmU6IHRydWV9KTtcblxuICAgICAgICAgIGNvbnN0IGNhbm9uaWNhbERlc3REaXIgPSBhd2FpdCBmcy5yZWFscGF0aChkZXN0RGlyKTtcbiAgICAgICAgICBjb25zdCByZWxhdGl2ZURlc3REaXIgPSBwYXRoLnJlbGF0aXZlKGRpciwgY2Fub25pY2FsRGVzdERpcik7XG5cbiAgICAgICAgICBpZiAocmVsYXRpdmVEZXN0RGlyLnNwbGl0KHBhdGguc2VwKS5pbmNsdWRlcygnLi4nKSkge1xuICAgICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgT3V0IG9mIGJvdW5kIHBhdGggXCIke2Nhbm9uaWNhbERlc3REaXJ9XCIgZm91bmQgd2hpbGUgcHJvY2Vzc2luZyBmaWxlICR7ZmlsZU5hbWV9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhd2FpdCB0aGlzLmV4dHJhY3RFbnRyeShlbnRyeSk7XG4gICAgICAgICAgdGhpcy56aXBmaWxlLnJlYWRFbnRyeSgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmNhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnppcGZpbGUuY2xvc2UoKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBleHRyYWN0RW50cnkoZW50cnkpIHtcbiAgICBpZiAodGhpcy5jYW5jZWxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHtkaXJ9ID0gdGhpcy5vcHRzO1xuXG4gICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLmV4dHJhY3RGaWxlTmFtZShlbnRyeSk7XG4gICAgY29uc3QgZGVzdCA9IHBhdGguam9pbihkaXIsIGZpbGVOYW1lKTtcblxuICAgIC8vIGNvbnZlcnQgZXh0ZXJuYWwgZmlsZSBhdHRyIGludCBpbnRvIGEgZnMgc3RhdCBtb2RlIGludFxuICAgIGNvbnN0IG1vZGUgPSAoZW50cnkuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyA+PiAxNikgJiAweGZmZmY7XG4gICAgLy8gY2hlY2sgaWYgaXQncyBhIHN5bWxpbmsgb3IgZGlyICh1c2luZyBzdGF0IG1vZGUgY29uc3RhbnRzKVxuICAgIGNvbnN0IGlzU3ltbGluayA9IChtb2RlICYgSUZNVCkgPT09IElGTE5LO1xuICAgIGNvbnN0IGlzRGlyID1cbiAgICAgIChtb2RlICYgSUZNVCkgPT09IElGRElSIHx8XG4gICAgICAvLyBGYWlsc2FmZSwgYm9ycm93ZWQgZnJvbSBqc1ppcFxuICAgICAgZmlsZU5hbWUuZW5kc1dpdGgoJy8nKSB8fFxuICAgICAgLy8gY2hlY2sgZm9yIHdpbmRvd3Mgd2VpcmQgd2F5IG9mIHNwZWNpZnlpbmcgYSBkaXJlY3RvcnlcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXhvZ2Rlbi9leHRyYWN0LXppcC9pc3N1ZXMvMTMjaXNzdWVjb21tZW50LTE1NDQ5NDU2NlxuICAgICAgKGVudHJ5LnZlcnNpb25NYWRlQnkgPj4gOCA9PT0gMCAmJiBlbnRyeS5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzID09PSAxNik7XG4gICAgY29uc3QgcHJvY01vZGUgPSB0aGlzLmdldEV4dHJhY3RlZE1vZGUobW9kZSwgaXNEaXIpICYgMG83Nzc7XG4gICAgLy8gYWx3YXlzIGVuc3VyZSBmb2xkZXJzIGFyZSBjcmVhdGVkXG4gICAgY29uc3QgZGVzdERpciA9IGlzRGlyID8gZGVzdCA6IHBhdGguZGlybmFtZShkZXN0KTtcbiAgICBjb25zdCBta2Rpck9wdGlvbnMgPSB7cmVjdXJzaXZlOiB0cnVlfTtcbiAgICBpZiAoaXNEaXIpIHtcbiAgICAgIG1rZGlyT3B0aW9ucy5tb2RlID0gcHJvY01vZGU7XG4gICAgfVxuICAgIGF3YWl0IGZzLm1rZGlyKGRlc3REaXIsIG1rZGlyT3B0aW9ucyk7XG4gICAgaWYgKGlzRGlyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHsoZW50cnk6IHlhdXpsLkVudHJ5KSA9PiBQcm9taXNlPE5vZGVKUy5SZWFkYWJsZVN0cmVhbT59ICovXG4gICAgY29uc3Qgb3BlblJlYWRTdHJlYW0gPSBCLnByb21pc2lmeSh0aGlzLnppcGZpbGUub3BlblJlYWRTdHJlYW0uYmluZCh0aGlzLnppcGZpbGUpKTtcbiAgICBjb25zdCByZWFkU3RyZWFtID0gYXdhaXQgb3BlblJlYWRTdHJlYW0oZW50cnkpO1xuICAgIGlmIChpc1N5bWxpbmspIHtcbiAgICAgIGNvbnN0IGxpbmsgPSBhd2FpdCBnZXRTdHJlYW0ocmVhZFN0cmVhbSk7XG4gICAgICBhd2FpdCBmcy5zeW1saW5rKGxpbmssIGRlc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBwaXBlbGluZShyZWFkU3RyZWFtLCBmcy5jcmVhdGVXcml0ZVN0cmVhbShkZXN0LCB7bW9kZTogcHJvY01vZGV9KSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RXh0cmFjdGVkTW9kZShlbnRyeU1vZGUsIGlzRGlyKSB7XG4gICAgY29uc3Qge2RlZmF1bHREaXJNb2RlLCBkZWZhdWx0RmlsZU1vZGV9ID0gdGhpcy5vcHRzO1xuXG4gICAgbGV0IG1vZGUgPSBlbnRyeU1vZGU7XG4gICAgLy8gU2V0IGRlZmF1bHRzLCBpZiBuZWNlc3NhcnlcbiAgICBpZiAobW9kZSA9PT0gMCkge1xuICAgICAgaWYgKGlzRGlyKSB7XG4gICAgICAgIGlmIChkZWZhdWx0RGlyTW9kZSkge1xuICAgICAgICAgIG1vZGUgPSBwYXJzZUludChkZWZhdWx0RGlyTW9kZSwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgbW9kZSA9IDBvNzU1O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZGVmYXVsdEZpbGVNb2RlKSB7XG4gICAgICAgICAgbW9kZSA9IHBhcnNlSW50KGRlZmF1bHRGaWxlTW9kZSwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgbW9kZSA9IDBvNjQ0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGU7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBFeHRyYWN0QWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtmaWxlTmFtZXNFbmNvZGluZ10gVGhlIGVuY29kaW5nIHRvIHVzZSBmb3IgZXh0cmFjdGVkIGZpbGUgbmFtZXMuXG4gKiBGb3IgWklQIGFyY2hpdmVzIGNyZWF0ZWQgb24gTWFjT1MgaXQgaXMgdXN1YWxseSBleHBlY3RlZCB0byBiZSBgdXRmOGAuXG4gKiBCeSBkZWZhdWx0IGl0IGlzIGF1dG9kZXRlY3RlZCBiYXNlZCBvbiB0aGUgZW50cnkgbWV0YWRhdGEgYW5kIGlzIG9ubHkgbmVlZGVkIHRvIGJlIHNldCBleHBsaWNpdGx5XG4gKiBpZiB0aGUgcGFydGljdWxhciBhcmNoaXZlIGRvZXMgbm90IGNvbXBseSB0byB0aGUgc3RhbmRhcmRzLCB3aGljaCBsZWFkcyB0byBjb3JydXB0ZWQgZmlsZSBuYW1lc1xuICogYWZ0ZXIgZXh0cmFjdGlvbi4gT25seSBhcHBsaWNhYmxlIGlmIHN5c3RlbSB1bnppcCBiaW5hcnkgaXMgTk9UIGJlaW5nIHVzZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFt1c2VTeXN0ZW1VbnppcF0gSWYgdHJ1ZSwgYXR0ZW1wdCB0byB1c2Ugc3lzdGVtIHVuemlwOyBpZiB0aGlzIGZhaWxzLFxuICogZmFsbGJhY2sgdG8gdGhlIEpTIHVuemlwIGltcGxlbWVudGF0aW9uLlxuICovXG5cbi8qKlxuICogRXh0cmFjdCB6aXBmaWxlIHRvIGEgZGlyZWN0b3J5XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHppcEZpbGVQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHNvdXJjZSBaSVAgZmlsZVxuICogQHBhcmFtIHtzdHJpbmd9IGRlc3REaXIgVGhlIGZ1bGwgcGF0aCB0byB0aGUgZGVzdGluYXRpb24gZm9sZGVyXG4gKiBAcGFyYW0ge0V4dHJhY3RBbGxPcHRpb25zfSBbb3B0c11cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdEFsbFRvKHppcEZpbGVQYXRoLCBkZXN0RGlyLCBvcHRzID0gLyoqIEB0eXBlIHtFeHRyYWN0QWxsT3B0aW9uc30gKi8gKHt9KSkge1xuICBpZiAoIXBhdGguaXNBYnNvbHV0ZShkZXN0RGlyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGFyZ2V0IHBhdGggJyR7ZGVzdERpcn0nIGlzIGV4cGVjdGVkIHRvIGJlIGFic29sdXRlYCk7XG4gIH1cblxuICBhd2FpdCBmcy5ta2RpcihkZXN0RGlyLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gIGNvbnN0IGRpciA9IGF3YWl0IGZzLnJlYWxwYXRoKGRlc3REaXIpO1xuICBpZiAob3B0cy51c2VTeXN0ZW1VbnppcCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleHRyYWN0V2l0aFN5c3RlbVVuemlwKHppcEZpbGVQYXRoLCBkaXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oJ3VuemlwIGZhaWxlZDsgZmFsbGluZyBiYWNrIHRvIEpTOiAlcycsIGVyci5zdGRlcnIgfHwgZXJyLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBjb25zdCBleHRyYWN0b3IgPSBuZXcgWmlwRXh0cmFjdG9yKHppcEZpbGVQYXRoLCB7XG4gICAgLi4ub3B0cyxcbiAgICBkaXIsXG4gIH0pO1xuICBhd2FpdCBleHRyYWN0b3IuZXh0cmFjdCgpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIHN5c3RlbSB1bnppcCAoZS5nLiwgYC91c3IvYmluL3VuemlwYCkuIElmIGF2YWlsYWJsZSwgaXQgaXNcbiAqIHNpZ25pZmljYW50bHkgZmFzdGVyIHRoYW4gdGhlIEpTIGltcGxlbWVudGF0aW9uLlxuICogQnkgZGVmYXVsdCBhbGwgZmlsZXMgaW4gdGhlIGRlc3REaXIgZ2V0IG92ZXJyaWRkZW4gaWYgYWxyZWFkeSBleGlzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gemlwRmlsZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgc291cmNlIFpJUCBmaWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdERpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXIuXG4gKiBUaGlzIGZvbGRlciBpcyBleHBlY3RlZCB0byBhbHJlYWR5IGV4aXN0IGJlZm9yZSBleHRyYWN0aW5nIHRoZSBhcmNoaXZlLlxuICovXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0V2l0aFN5c3RlbVVuemlwKHppcEZpbGVQYXRoLCBkZXN0RGlyKSB7XG4gIGNvbnN0IGlzV2luZG93c0hvc3QgPSBpc1dpbmRvd3MoKTtcbiAgbGV0IGV4ZWN1dGFibGVQYXRoO1xuICB0cnkge1xuICAgIGV4ZWN1dGFibGVQYXRoID0gYXdhaXQgZ2V0RXhlY3V0YWJsZVBhdGgoaXNXaW5kb3dzSG9zdCA/ICdwb3dlcnNoZWxsLmV4ZScgOiAndW56aXAnKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgc3lzdGVtIHVuemlwJyk7XG4gIH1cblxuICBpZiAoaXNXaW5kb3dzSG9zdCkge1xuICAgIC8vIG9uIFdpbmRvd3Mgd2UgdXNlIFBvd2VyU2hlbGwgdG8gdW56aXAgZmlsZXNcbiAgICBhd2FpdCBleGVjKGV4ZWN1dGFibGVQYXRoLCBbXG4gICAgICAnLWNvbW1hbmQnLFxuICAgICAgJ0V4cGFuZC1BcmNoaXZlJyxcbiAgICAgICctTGl0ZXJhbFBhdGgnLFxuICAgICAgemlwRmlsZVBhdGgsXG4gICAgICAnLURlc3RpbmF0aW9uUGF0aCcsXG4gICAgICBkZXN0RGlyLFxuICAgICAgJy1Gb3JjZScsXG4gICAgXSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gLXEgbWVhbnMgcXVpZXQgKG5vIHN0ZG91dClcbiAgICAvLyAtbyBtZWFucyBvdmVyd3JpdGVcbiAgICAvLyAtZCBpcyB0aGUgZGVzdCBkaXJcbiAgICBhd2FpdCBleGVjKGV4ZWN1dGFibGVQYXRoLCBbJy1xJywgJy1vJywgemlwRmlsZVBhdGgsICctZCcsIGRlc3REaXJdKTtcbiAgfVxufVxuXG4vKipcbiAqIEV4dHJhY3QgYSBzaW5nbGUgemlwIGVudHJ5IHRvIGEgZGlyZWN0b3J5XG4gKlxuICogQHBhcmFtIHt5YXV6bC5aaXBGaWxlfSB6aXBGaWxlIFRoZSBzb3VyY2UgWklQIHN0cmVhbVxuICogQHBhcmFtIHt5YXV6bC5FbnRyeX0gZW50cnkgVGhlIGVudHJ5IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdERpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gX2V4dHJhY3RFbnRyeVRvKHppcEZpbGUsIGVudHJ5LCBkZXN0RGlyKSB7XG4gIGNvbnN0IGRzdFBhdGggPSBwYXRoLnJlc29sdmUoZGVzdERpciwgZW50cnkuZmlsZU5hbWUpO1xuXG4gIC8vIENyZWF0ZSBkZXN0IGRpcmVjdG9yeSBpZiBkb2Vzbid0IGV4aXN0IGFscmVhZHlcbiAgaWYgKC9cXC8kLy50ZXN0KGVudHJ5LmZpbGVOYW1lKSkge1xuICAgIGlmICghKGF3YWl0IGZzLmV4aXN0cyhkc3RQYXRoKSkpIHtcbiAgICAgIGF3YWl0IGZzLm1rZGlycChkc3RQYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKHBhdGguZGlybmFtZShkc3RQYXRoKSkpKSB7XG4gICAgYXdhaXQgZnMubWtkaXJwKHBhdGguZGlybmFtZShkc3RQYXRoKSk7XG4gIH1cblxuICAvLyBDcmVhdGUgYSB3cml0ZSBzdHJlYW1cbiAgY29uc3Qgd3JpdGVTdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbShkc3RQYXRoLCB7ZmxhZ3M6ICd3J30pO1xuICBjb25zdCB3cml0ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgd3JpdGVTdHJlYW0ub25jZSgnZmluaXNoJywgcmVzb2x2ZSk7XG4gICAgd3JpdGVTdHJlYW0ub25jZSgnZXJyb3InLCByZWplY3QpO1xuICB9KTtcblxuICAvLyBDcmVhdGUgemlwUmVhZFN0cmVhbSBhbmQgcGlwZSBkYXRhIHRvIHRoZSB3cml0ZSBzdHJlYW1cbiAgLy8gKGZvciBzb21lIG9kZCByZWFzb24gQi5wcm9taXNpZnkgZG9lc24ndCB3b3JrIG9uIHppcGZpbGUub3BlblJlYWRTdHJlYW0sIGl0IGNhdXNlcyBhbiBlcnJvciAnY2xvc2VkJylcbiAgY29uc3QgemlwUmVhZFN0cmVhbSA9IGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB6aXBGaWxlLm9wZW5SZWFkU3RyZWFtKGVudHJ5LCAoZXJyLCByZWFkU3RyZWFtKSA9PiAoZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKHJlYWRTdHJlYW0pKSk7XG4gIH0pO1xuICBjb25zdCB6aXBSZWFkU3RyZWFtUHJvbWlzZSA9IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB6aXBSZWFkU3RyZWFtLm9uY2UoJ2VuZCcsIHJlc29sdmUpO1xuICAgIHppcFJlYWRTdHJlYW0ub25jZSgnZXJyb3InLCByZWplY3QpO1xuICB9KTtcbiAgemlwUmVhZFN0cmVhbS5waXBlKHdyaXRlU3RyZWFtKTtcblxuICAvLyBXYWl0IGZvciB0aGUgemlwUmVhZFN0cmVhbSBhbmQgd3JpdGVTdHJlYW0gdG8gZW5kIGJlZm9yZSByZXR1cm5pbmdcbiAgcmV0dXJuIGF3YWl0IEIuYWxsKFt6aXBSZWFkU3RyZWFtUHJvbWlzZSwgd3JpdGVTdHJlYW1Qcm9taXNlXSk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgWmlwRW50cnlcbiAqIEBwcm9wZXJ0eSB7eWF1emwuRW50cnl9IGVudHJ5IFRoZSBhY3R1YWwgZW50cnkgaW5zdGFuY2VcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGV4dHJhY3RFbnRyeVRvIEFuIGFzeW5jIGZ1bmN0aW9uLCB3aGljaCBhY2NlcHRzIG9uZSBwYXJhbWV0ZXIuXG4gKiBUaGlzIHBhcmFtZXRlciBjb250YWlucyB0aGUgZGVzdGluYXRpb24gZm9sZGVyIHBhdGggdG8gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBleHRyYWN0IHRoZSBlbnRyeS5cbiAqL1xuXG4vKipcbiAqIEdldCBlbnRyaWVzIGZvciBhIHppcCBmb2xkZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gemlwRmlsZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgc291cmNlIFpJUCBmaWxlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBvbkVudHJ5IENhbGxiYWNrIHdoZW4gZW50cnkgaXMgcmVhZC5cbiAqIFRoZSBjYWxsYmFjayBpcyBleHBlY3RlZCB0byBhY2NlcHQgb25lIGFyZ3VtZW50IG9mIFppcEVudHJ5IHR5cGUuXG4gKiBUaGUgaXRlcmF0aW9uIHRocm91Z2ggdGhlIHNvdXJjZSB6aXAgZmlsZSB3aWxsIGJpIHRlcm1pbmF0ZWQgYXMgc29vbiBhc1xuICogdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGVxdWFscyB0byBgZmFsc2VgLlxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkRW50cmllcyh6aXBGaWxlUGF0aCwgb25FbnRyeSkge1xuICAvLyBPcGVuIGEgemlwIGZpbGUgYW5kIHN0YXJ0IHJlYWRpbmcgZW50cmllc1xuICBjb25zdCB6aXBmaWxlID0gYXdhaXQgb3BlblppcCh6aXBGaWxlUGF0aCwge2xhenlFbnRyaWVzOiB0cnVlfSk7XG4gIGNvbnN0IHppcFJlYWRTdHJlYW1Qcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHppcGZpbGUub25jZSgnZW5kJywgcmVzb2x2ZSk7XG4gICAgemlwZmlsZS5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG5cbiAgICAvLyBPbiBlYWNoIGVudHJ5LCBjYWxsICdvbkVudHJ5JyBhbmQgdGhlbiByZWFkIHRoZSBuZXh0IGVudHJ5XG4gICAgemlwZmlsZS5vbignZW50cnknLCBhc3luYyAoZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IG9uRW50cnkoe1xuICAgICAgICBlbnRyeSxcbiAgICAgICAgZXh0cmFjdEVudHJ5VG86IGFzeW5jIChkZXN0RGlyKSA9PiBhd2FpdCBfZXh0cmFjdEVudHJ5VG8oemlwZmlsZSwgZW50cnksIGRlc3REaXIpLFxuICAgICAgfSk7XG4gICAgICBpZiAocmVzID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gemlwZmlsZS5lbWl0KCdlbmQnKTtcbiAgICAgIH1cbiAgICAgIHppcGZpbGUucmVhZEVudHJ5KCk7XG4gICAgfSk7XG4gIH0pO1xuICB6aXBmaWxlLnJlYWRFbnRyeSgpO1xuXG4gIC8vIFdhaXQgZm9yIHRoZSBlbnRyaWVzIHRvIGZpbmlzaCBiZWluZyBpdGVyYXRlZCB0aHJvdWdoXG4gIHJldHVybiBhd2FpdCB6aXBSZWFkU3RyZWFtUHJvbWlzZTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBaaXBPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGVuY29kZVRvQmFzZTY0IFtmYWxzZV0gV2hldGhlciB0byBlbmNvZGVcbiAqIHRoZSByZXN1bHRpbmcgYXJjaGl2ZSB0byBhIGJhc2U2NC1lbmNvZGVkIHN0cmluZ1xuICogQHByb3BlcnR5IHtib29sZWFufSBpc01ldGVyZWQgW3RydWVdIFdoZXRoZXIgdG8gbG9nIHRoZSBhY3R1YWxcbiAqIGFyY2hpdmVyIHBlcmZvcm1hbmNlXG4gKiBAcHJvcGVydHkge251bWJlcn0gbWF4U2l6ZSBbMTA3Mzc0MTgyNF0gVGhlIG1heGltdW0gc2l6ZSBvZlxuICogdGhlIHJlc3VsdGluZyBhcmNoaXZlIGluIGJ5dGVzLiBUaGlzIGlzIHNldCB0byAxR0IgYnkgZGVmYXVsdCwgYmVjYXVzZVxuICogQXBwaXVtIGxpbWl0cyB0aGUgbWF4aW11bSBIVFRQIGJvZHkgc2l6ZSB0byAxR0IuIEFsc28sIHRoZSBOb2RlSlMgaGVhcFxuICogc2l6ZSBtdXN0IGJlIGVub3VnaCB0byBrZWVwIHRoZSByZXN1bHRpbmcgb2JqZWN0ICh1c3VhbGx5IHRoaXMgc2l6ZSBpc1xuICogbGltaXRlZCB0byAxLjQgR0IpXG4gKiBAcHJvcGVydHkge251bWJlcn0gbGV2ZWwgWzldIFRoZSBjb21wcmVzc2lvbiBsZXZlbC4gVGhlIG1heGltdW1cbiAqIGxldmVsIGlzIDkgKHRoZSBiZXN0IGNvbXByZXNzaW9uLCB3b3JzdCBwZXJmb3JtYW5jZSkuIFRoZSBtaW5pbXVtXG4gKiBjb21wcmVzc2lvbiBsZXZlbCBpcyAwIChubyBjb21wcmVzc2lvbikuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBjb250ZW50cyBvZiBsb2NhbCBkaXJlY3RvcnkgdG8gYW4gaW4tbWVtb3J5IC56aXAgYnVmZmVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNyY1BhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgZm9sZGVyIG9yIGZpbGUgYmVpbmcgemlwcGVkXG4gKiBAcGFyYW0ge1ppcE9wdGlvbnN9IG9wdHMgWmlwcGluZyBvcHRpb25zXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxCdWZmZXI+fSBaaXBwZWQgKGFuZCBlbmNvZGVkIGlmIGBlbmNvZGVUb0Jhc2U2NGAgaXMgdHJ1dGh5KVxuICogY29udGVudCBvZiB0aGUgc291cmNlIHBhdGggYXMgbWVtb3J5IGJ1ZmZlclxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSByZWFkaW5nIHRoZSBzb3VyY2VcbiAqIG9yIHRoZSBzb3VyY2UgaXMgdG9vIGJpZ1xuICovXG5hc3luYyBmdW5jdGlvbiB0b0luTWVtb3J5WmlwKHNyY1BhdGgsIG9wdHMgPSAvKiogQHR5cGUge1ppcE9wdGlvbnN9ICovICh7fSkpIHtcbiAgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKHNyY1BhdGgpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBmaWxlIG9yIGZvbGRlcjogJHtzcmNQYXRofWApO1xuICB9XG5cbiAgY29uc3Qge2lzTWV0ZXJlZCA9IHRydWUsIGVuY29kZVRvQmFzZTY0ID0gZmFsc2UsIG1heFNpemUgPSAxICogR2lCLCBsZXZlbCA9IDl9ID0gb3B0cztcbiAgY29uc3QgcmVzdWx0QnVmZmVycyA9IFtdO1xuICBsZXQgcmVzdWx0QnVmZmVyc1NpemUgPSAwO1xuICAvLyBDcmVhdGUgYSB3cml0YWJsZSBzdHJlYW0gdGhhdCB6aXAgYnVmZmVycyB3aWxsIGJlIHN0cmVhbWVkIHRvXG4gIGNvbnN0IHJlc3VsdFdyaXRlU3RyZWFtID0gbmV3IHN0cmVhbS5Xcml0YWJsZSh7XG4gICAgd3JpdGU6IChidWZmZXIsIGVuY29kaW5nLCBuZXh0KSA9PiB7XG4gICAgICByZXN1bHRCdWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICAgIHJlc3VsdEJ1ZmZlcnNTaXplICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICBpZiAobWF4U2l6ZSA+IDAgJiYgcmVzdWx0QnVmZmVyc1NpemUgPiBtYXhTaXplKSB7XG4gICAgICAgIHJlc3VsdFdyaXRlU3RyZWFtLmVtaXQoXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVGhlIHNpemUgb2YgdGhlIHJlc3VsdGluZyBgICtcbiAgICAgICAgICAgICAgYGFyY2hpdmUgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuICR7dG9SZWFkYWJsZVNpemVTdHJpbmcobWF4U2l6ZSl9YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG5leHQoKTtcbiAgICB9LFxuICB9KTtcblxuICAvLyBaaXAgJ3NyY0RpcicgYW5kIHN0cmVhbSBpdCB0byB0aGUgYWJvdmUgd3JpdGFibGUgc3RyZWFtXG4gIGNvbnN0IGFyY2hpdmUgPSBhcmNoaXZlcignemlwJywge1xuICAgIHpsaWI6IHtsZXZlbH0sXG4gIH0pO1xuICBsZXQgc3JjU2l6ZSA9IG51bGw7XG4gIGNvbnN0IGJhc2U2NEVuY29kZXJTdHJlYW0gPSBlbmNvZGVUb0Jhc2U2NCA/IG5ldyBCYXNlNjRFbmNvZGUoKSA6IG51bGw7XG4gIGNvbnN0IHJlc3VsdFdyaXRlU3RyZWFtUHJvbWlzZSA9IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICByZXN1bHRXcml0ZVN0cmVhbS5vbmNlKCdlcnJvcicsIChlKSA9PiB7XG4gICAgICBpZiAoYmFzZTY0RW5jb2RlclN0cmVhbSkge1xuICAgICAgICBhcmNoaXZlLnVucGlwZShiYXNlNjRFbmNvZGVyU3RyZWFtKTtcbiAgICAgICAgYmFzZTY0RW5jb2RlclN0cmVhbS51bnBpcGUocmVzdWx0V3JpdGVTdHJlYW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXJjaGl2ZS51bnBpcGUocmVzdWx0V3JpdGVTdHJlYW0pO1xuICAgICAgfVxuICAgICAgYXJjaGl2ZS5hYm9ydCgpO1xuICAgICAgYXJjaGl2ZS5kZXN0cm95KCk7XG4gICAgICByZWplY3QoZSk7XG4gICAgfSk7XG4gICAgcmVzdWx0V3JpdGVTdHJlYW0ub25jZSgnZmluaXNoJywgKCkgPT4ge1xuICAgICAgc3JjU2l6ZSA9IGFyY2hpdmUucG9pbnRlcigpO1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9KTtcbiAgY29uc3QgYXJjaGl2ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXJjaGl2ZS5vbmNlKCdmaW5pc2gnLCByZXNvbHZlKTtcbiAgICBhcmNoaXZlLm9uY2UoJ2Vycm9yJywgKGUpID0+IHJlamVjdChuZXcgRXJyb3IoYEZhaWxlZCB0byBhcmNoaXZlICcke3NyY1BhdGh9JzogJHtlLm1lc3NhZ2V9YCkpKTtcbiAgfSk7XG4gIGNvbnN0IHRpbWVyID0gaXNNZXRlcmVkID8gbmV3IFRpbWVyKCkuc3RhcnQoKSA6IG51bGw7XG4gIGlmICgoYXdhaXQgZnMuc3RhdChzcmNQYXRoKSkuaXNEaXJlY3RvcnkoKSkge1xuICAgIGFyY2hpdmUuZGlyZWN0b3J5KHNyY1BhdGgsIGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICBhcmNoaXZlLmZpbGUoc3JjUGF0aCwge1xuICAgICAgbmFtZTogcGF0aC5iYXNlbmFtZShzcmNQYXRoKSxcbiAgICB9KTtcbiAgfVxuICBpZiAoYmFzZTY0RW5jb2RlclN0cmVhbSkge1xuICAgIGFyY2hpdmUucGlwZShiYXNlNjRFbmNvZGVyU3RyZWFtKTtcbiAgICBiYXNlNjRFbmNvZGVyU3RyZWFtLnBpcGUocmVzdWx0V3JpdGVTdHJlYW0pO1xuICB9IGVsc2Uge1xuICAgIGFyY2hpdmUucGlwZShyZXN1bHRXcml0ZVN0cmVhbSk7XG4gIH1cbiAgYXJjaGl2ZS5maW5hbGl6ZSgpO1xuXG4gIC8vIFdhaXQgZm9yIHRoZSBzdHJlYW1zIHRvIGZpbmlzaFxuICBhd2FpdCBCLmFsbChbYXJjaGl2ZVN0cmVhbVByb21pc2UsIHJlc3VsdFdyaXRlU3RyZWFtUHJvbWlzZV0pO1xuXG4gIGlmICh0aW1lcikge1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGBaaXBwZWQgJHtlbmNvZGVUb0Jhc2U2NCA/ICdhbmQgYmFzZTY0LWVuY29kZWQgJyA6ICcnfWAgK1xuICAgICAgICBgJyR7cGF0aC5iYXNlbmFtZShzcmNQYXRoKX0nIGAgK1xuICAgICAgICAoc3JjU2l6ZSA/IGAoJHt0b1JlYWRhYmxlU2l6ZVN0cmluZyhzcmNTaXplKX0pIGAgOiAnJykgK1xuICAgICAgICBgaW4gJHt0aW1lci5nZXREdXJhdGlvbigpLmFzU2Vjb25kcy50b0ZpeGVkKDMpfXMgYCArXG4gICAgICAgIGAoY29tcHJlc3Npb24gbGV2ZWw6ICR7bGV2ZWx9KWBcbiAgICApO1xuICB9XG4gIC8vIFJldHVybiB0aGUgYXJyYXkgb2YgemlwIGJ1ZmZlcnMgY29uY2F0ZW5hdGVkIGludG8gb25lIGJ1ZmZlclxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChyZXN1bHRCdWZmZXJzKTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlIGlzIGEgdmFsaWQgWklQIGFyY2hpdmVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGggLSBGdWxsIHBhdGggdG8gdGhlIGZpbGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYSB2YWxpZCBaSVAgYXJjaGl2ZVxuICovXG5hc3luYyBmdW5jdGlvbiBhc3NlcnRWYWxpZFppcChmaWxlUGF0aCkge1xuICBpZiAoIShhd2FpdCBmcy5leGlzdHMoZmlsZVBhdGgpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGZpbGUgYXQgJyR7ZmlsZVBhdGh9JyBkb2VzIG5vdCBleGlzdGApO1xuICB9XG5cbiAgY29uc3Qge3NpemV9ID0gYXdhaXQgZnMuc3RhdChmaWxlUGF0aCk7XG4gIGlmIChzaXplIDwgNCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGZpbGUgYXQgJyR7ZmlsZVBhdGh9JyBpcyB0b28gc21hbGwgdG8gYmUgYSBaSVAgYXJjaGl2ZWApO1xuICB9XG4gIGNvbnN0IGZkID0gYXdhaXQgZnMub3BlbihmaWxlUGF0aCwgJ3InKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2MoWklQX01BR0lDLmxlbmd0aCk7XG4gICAgYXdhaXQgZnMucmVhZChmZCwgYnVmZmVyLCAwLCBaSVBfTUFHSUMubGVuZ3RoLCAwKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBidWZmZXIudG9TdHJpbmcoJ2FzY2lpJyk7XG4gICAgaWYgKHNpZ25hdHVyZSAhPT0gWklQX01BR0lDKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUgZmlsZSBzaWduYXR1cmUgJyR7c2lnbmF0dXJlfScgb2YgJyR7ZmlsZVBhdGh9JyBgICtcbiAgICAgICAgICBgaXMgbm90IGVxdWFsIHRvIHRoZSBleHBlY3RlZCBaSVAgYXJjaGl2ZSBzaWduYXR1cmUgJyR7WklQX01BR0lDfSdgXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5jbG9zZShmZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBaaXBDb21wcmVzc2lvbk9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZXZlbCBbOV0gLSBDb21wcmVzc2lvbiBsZXZlbCBpbiByYW5nZSAwLi45XG4gKiAoZ3JlYXRlciBudW1iZXJzIG1lYW4gYmV0dGVyIGNvbXByZXNzaW9uLCBidXQgbG9uZ2VyIHByb2Nlc3NpbmcgdGltZSlcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFppcFNvdXJjZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXR0ZXJuIFsnKipcXC8qJ10gLSBHTE9CIHBhdHRlcm4gZm9yIGNvbXByZXNzaW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY3dkIC0gVGhlIHNvdXJjZSByb290IGZvbGRlciAodGhlIHBhcmVudCBmb2xkZXIgb2ZcbiAqIHRoZSBkZXN0aW5hdGlvbiBmaWxlIGJ5IGRlZmF1bHQpXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbaWdub3JlXSAtIFRoZSBsaXN0IG9mIGlnbm9yZWQgcGF0dGVybnNcbiAqL1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJjaGl2ZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gZ2xvYiBwYXR0ZXJuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGRzdFBhdGggLSBUaGUgcmVzdWx0aW5nIGFyY2hpdmUgcGF0aFxuICogQHBhcmFtIHtaaXBTb3VyY2VPcHRpb25zfSBzcmMgLSBTb3VyY2Ugb3B0aW9uc1xuICogQHBhcmFtIHtaaXBDb21wcmVzc2lvbk9wdGlvbnN9IG9wdHMgLSBDb21wcmVzc2lvbiBvcHRpb25zXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGNyZWF0aW5nIHRoZSBhcmNoaXZlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHRvQXJjaGl2ZShcbiAgZHN0UGF0aCxcbiAgc3JjID0gLyoqIEB0eXBlIHtaaXBTb3VyY2VPcHRpb25zfSAqLyAoe30pLFxuICBvcHRzID0gLyoqIEB0eXBlIHtaaXBDb21wcmVzc2lvbk9wdGlvbnN9ICovICh7fSlcbikge1xuICBjb25zdCB7bGV2ZWwgPSA5fSA9IG9wdHM7XG4gIGNvbnN0IHtwYXR0ZXJuID0gJyoqLyonLCBjd2QgPSBwYXRoLmRpcm5hbWUoZHN0UGF0aCksIGlnbm9yZSA9IFtdfSA9IHNyYztcbiAgY29uc3QgYXJjaGl2ZSA9IGFyY2hpdmVyKCd6aXAnLCB7emxpYjoge2xldmVsfX0pO1xuICBjb25zdCBzdHJlYW0gPSBmcy5jcmVhdGVXcml0ZVN0cmVhbShkc3RQYXRoKTtcbiAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBhcmNoaXZlXG4gICAgICAuZ2xvYihwYXR0ZXJuLCB7XG4gICAgICAgIGN3ZCxcbiAgICAgICAgaWdub3JlLFxuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCByZWplY3QpXG4gICAgICAucGlwZShzdHJlYW0pO1xuICAgIHN0cmVhbVxuICAgICAgLm9uKCdlcnJvcicsIChlKSA9PiB7XG4gICAgICAgIGFyY2hpdmUudW5waXBlKHN0cmVhbSk7XG4gICAgICAgIGFyY2hpdmUuYWJvcnQoKTtcbiAgICAgICAgYXJjaGl2ZS5kZXN0cm95KCk7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH0pXG4gICAgICAub24oJ2ZpbmlzaCcsIHJlc29sdmUpO1xuICAgIGFyY2hpdmUuZmluYWxpemUoKTtcbiAgfSk7XG59XG5cbi8qKlxuICogRmluZHMgYW5kIG1lbW9pemVzIHRoZSBmdWxsIHBhdGggdG8gdGhlIGdpdmVuIGV4ZWN1dGFibGUuXG4gKiBSZWplY3RzIGlmIGl0IGlzIG5vdCBmb3VuZC5cbiAqL1xuY29uc3QgZ2V0RXhlY3V0YWJsZVBhdGggPSBfLm1lbW9pemUoXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSBGdWxsIFBhdGggdG8gdGhlIGV4ZWN1dGFibGVcbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIGdldEV4ZWN1dGFibGVQYXRoKGJpbmFyeU5hbWUpIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGF3YWl0IGZzLndoaWNoKGJpbmFyeU5hbWUpO1xuICAgIGxvZy5kZWJ1ZyhgRm91bmQgJyVzJyBhdCAnJXMnYCwgYmluYXJ5TmFtZSwgZnVsbFBhdGgpO1xuICAgIHJldHVybiBmdWxsUGF0aDtcbiAgfVxuKTtcblxuZXhwb3J0IHtleHRyYWN0QWxsVG8sIHJlYWRFbnRyaWVzLCB0b0luTWVtb3J5WmlwLCBfZXh0cmFjdEVudHJ5VG8sIGFzc2VydFZhbGlkWmlwLCB0b0FyY2hpdmV9O1xuZXhwb3J0IGRlZmF1bHQge1xuICBleHRyYWN0QWxsVG8sXG4gIHJlYWRFbnRyaWVzLFxuICB0b0luTWVtb3J5WmlwLFxuICBhc3NlcnRWYWxpZFppcCxcbiAgdG9BcmNoaXZlLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFLQSxNQUFNQSxPQUFPLEdBQUdDLGlCQUFBLENBQUVDLFNBQUYsQ0FBWUMsY0FBQSxDQUFNQyxJQUFsQixDQUFoQjs7QUFJQSxNQUFNQyxRQUFRLEdBQUdKLGlCQUFBLENBQUVDLFNBQUYsQ0FBWUksZUFBQSxDQUFPRCxRQUFuQixDQUFqQjs7QUFDQSxNQUFNRSxTQUFTLEdBQUcsSUFBbEI7QUFDQSxNQUFNQyxJQUFJLEdBQUcsS0FBYjtBQUNBLE1BQU1DLEtBQUssR0FBRyxLQUFkO0FBQ0EsTUFBTUMsS0FBSyxHQUFHLEtBQWQ7O0FBR0EsTUFBTUMsWUFBTixDQUFtQjtFQUVqQkMsT0FBTzs7RUFFUEMsV0FBVyxDQUFDQyxVQUFELEVBQWFDLElBQUksR0FBRyxFQUFwQixFQUF3QjtJQUNqQyxLQUFLQyxPQUFMLEdBQWVGLFVBQWY7SUFDQSxLQUFLQyxJQUFMLEdBQVlBLElBQVo7SUFDQSxLQUFLRSxRQUFMLEdBQWdCLEtBQWhCO0VBQ0Q7O0VBRURDLGVBQWUsQ0FBQ0MsS0FBRCxFQUFRO0lBQ3JCLE9BQU9DLGVBQUEsQ0FBRUMsUUFBRixDQUFXRixLQUFLLENBQUNHLFFBQWpCLElBQ0hILEtBQUssQ0FBQ0csUUFBTixDQUFlQyxRQUFmLENBQXdCLEtBQUtSLElBQUwsQ0FBVVMsaUJBQWxDLENBREcsR0FFSEwsS0FBSyxDQUFDRyxRQUZWO0VBR0Q7O0VBRVksTUFBUEcsT0FBTyxHQUFHO0lBQ2QsTUFBTTtNQUFDQyxHQUFEO01BQU1GO0lBQU4sSUFBMkIsS0FBS1QsSUFBdEM7SUFDQSxLQUFLSCxPQUFMLEdBQWUsTUFBTVosT0FBTyxDQUFDLEtBQUtnQixPQUFOLEVBQWU7TUFDekNXLFdBQVcsRUFBRSxJQUQ0QjtNQUd6Q0MsYUFBYSxFQUFFLENBQUNKO0lBSHlCLENBQWYsQ0FBNUI7SUFLQSxLQUFLUCxRQUFMLEdBQWdCLEtBQWhCO0lBRUEsT0FBTyxJQUFJaEIsaUJBQUosQ0FBTSxDQUFDNEIsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO01BQ2hDLEtBQUtsQixPQUFMLENBQWFtQixFQUFiLENBQWdCLE9BQWhCLEVBQTBCQyxHQUFELElBQVM7UUFDaEMsS0FBS2YsUUFBTCxHQUFnQixJQUFoQjtRQUNBYSxNQUFNLENBQUNFLEdBQUQsQ0FBTjtNQUNELENBSEQ7TUFJQSxLQUFLcEIsT0FBTCxDQUFhcUIsU0FBYjtNQUVBLEtBQUtyQixPQUFMLENBQWFtQixFQUFiLENBQWdCLE9BQWhCLEVBQXlCLE1BQU07UUFDN0IsSUFBSSxDQUFDLEtBQUtkLFFBQVYsRUFBb0I7VUFDbEJZLE9BQU87UUFDUjtNQUNGLENBSkQ7TUFNQSxLQUFLakIsT0FBTCxDQUFhbUIsRUFBYixDQUFnQixPQUFoQixFQUF5QixNQUFPWixLQUFQLElBQWlCO1FBQ3hDLElBQUksS0FBS0YsUUFBVCxFQUFtQjtVQUNqQjtRQUNEOztRQUVELE1BQU1LLFFBQVEsR0FBRyxLQUFLSixlQUFMLENBQXFCQyxLQUFyQixDQUFqQjs7UUFDQSxJQUFJRyxRQUFRLENBQUNZLFVBQVQsQ0FBb0IsV0FBcEIsQ0FBSixFQUFzQztVQUNwQyxLQUFLdEIsT0FBTCxDQUFhcUIsU0FBYjtVQUNBO1FBQ0Q7O1FBRUQsTUFBTUUsT0FBTyxHQUFHQyxhQUFBLENBQUtDLE9BQUwsQ0FBYUQsYUFBQSxDQUFLRSxJQUFMLENBQVVaLEdBQVYsRUFBZUosUUFBZixDQUFiLENBQWhCOztRQUNBLElBQUk7VUFDRixNQUFNaUIsWUFBQSxDQUFHQyxLQUFILENBQVNMLE9BQVQsRUFBa0I7WUFBQ00sU0FBUyxFQUFFO1VBQVosQ0FBbEIsQ0FBTjtVQUVBLE1BQU1DLGdCQUFnQixHQUFHLE1BQU1ILFlBQUEsQ0FBR0ksUUFBSCxDQUFZUixPQUFaLENBQS9COztVQUNBLE1BQU1TLGVBQWUsR0FBR1IsYUFBQSxDQUFLUyxRQUFMLENBQWNuQixHQUFkLEVBQW1CZ0IsZ0JBQW5CLENBQXhCOztVQUVBLElBQUlFLGVBQWUsQ0FBQ0UsS0FBaEIsQ0FBc0JWLGFBQUEsQ0FBS1csR0FBM0IsRUFBZ0NDLFFBQWhDLENBQXlDLElBQXpDLENBQUosRUFBb0Q7WUFDbEQsSUFBSUMsS0FBSixDQUNHLHNCQUFxQlAsZ0JBQWlCLGlDQUFnQ3BCLFFBQVMsRUFEbEY7VUFHRDs7VUFFRCxNQUFNLEtBQUs0QixZQUFMLENBQWtCL0IsS0FBbEIsQ0FBTjtVQUNBLEtBQUtQLE9BQUwsQ0FBYXFCLFNBQWI7UUFDRCxDQWRELENBY0UsT0FBT0QsR0FBUCxFQUFZO1VBQ1osS0FBS2YsUUFBTCxHQUFnQixJQUFoQjtVQUNBLEtBQUtMLE9BQUwsQ0FBYXVDLEtBQWI7VUFDQXJCLE1BQU0sQ0FBQ0UsR0FBRCxDQUFOO1FBQ0Q7TUFDRixDQS9CRDtJQWdDRCxDQTdDTSxDQUFQO0VBOENEOztFQUVpQixNQUFaa0IsWUFBWSxDQUFDL0IsS0FBRCxFQUFRO0lBQ3hCLElBQUksS0FBS0YsUUFBVCxFQUFtQjtNQUNqQjtJQUNEOztJQUVELE1BQU07TUFBQ1M7SUFBRCxJQUFRLEtBQUtYLElBQW5CO0lBRUEsTUFBTU8sUUFBUSxHQUFHLEtBQUtKLGVBQUwsQ0FBcUJDLEtBQXJCLENBQWpCOztJQUNBLE1BQU1pQyxJQUFJLEdBQUdoQixhQUFBLENBQUtFLElBQUwsQ0FBVVosR0FBVixFQUFlSixRQUFmLENBQWI7O0lBR0EsTUFBTStCLElBQUksR0FBSWxDLEtBQUssQ0FBQ21DLHNCQUFOLElBQWdDLEVBQWpDLEdBQXVDLE1BQXBEO0lBRUEsTUFBTUMsU0FBUyxHQUFHLENBQUNGLElBQUksR0FBRzdDLElBQVIsTUFBa0JFLEtBQXBDO0lBQ0EsTUFBTThDLEtBQUssR0FDVCxDQUFDSCxJQUFJLEdBQUc3QyxJQUFSLE1BQWtCQyxLQUFsQixJQUVBYSxRQUFRLENBQUNtQyxRQUFULENBQWtCLEdBQWxCLENBRkEsSUFLQ3RDLEtBQUssQ0FBQ3VDLGFBQU4sSUFBdUIsQ0FBdkIsS0FBNkIsQ0FBN0IsSUFBa0N2QyxLQUFLLENBQUNtQyxzQkFBTixLQUFpQyxFQU50RTtJQU9BLE1BQU1LLFFBQVEsR0FBRyxLQUFLQyxnQkFBTCxDQUFzQlAsSUFBdEIsRUFBNEJHLEtBQTVCLElBQXFDLEtBQXREO0lBRUEsTUFBTXJCLE9BQU8sR0FBR3FCLEtBQUssR0FBR0osSUFBSCxHQUFVaEIsYUFBQSxDQUFLQyxPQUFMLENBQWFlLElBQWIsQ0FBL0I7SUFDQSxNQUFNUyxZQUFZLEdBQUc7TUFBQ3BCLFNBQVMsRUFBRTtJQUFaLENBQXJCOztJQUNBLElBQUllLEtBQUosRUFBVztNQUNUSyxZQUFZLENBQUNSLElBQWIsR0FBb0JNLFFBQXBCO0lBQ0Q7O0lBQ0QsTUFBTXBCLFlBQUEsQ0FBR0MsS0FBSCxDQUFTTCxPQUFULEVBQWtCMEIsWUFBbEIsQ0FBTjs7SUFDQSxJQUFJTCxLQUFKLEVBQVc7TUFDVDtJQUNEOztJQUdELE1BQU1NLGNBQWMsR0FBRzdELGlCQUFBLENBQUVDLFNBQUYsQ0FBWSxLQUFLVSxPQUFMLENBQWFrRCxjQUFiLENBQTRCQyxJQUE1QixDQUFpQyxLQUFLbkQsT0FBdEMsQ0FBWixDQUF2Qjs7SUFDQSxNQUFNb0QsVUFBVSxHQUFHLE1BQU1GLGNBQWMsQ0FBQzNDLEtBQUQsQ0FBdkM7O0lBQ0EsSUFBSW9DLFNBQUosRUFBZTtNQUNiLE1BQU1VLElBQUksR0FBRyxNQUFNLElBQUFDLGtCQUFBLEVBQVVGLFVBQVYsQ0FBbkI7TUFDQSxNQUFNekIsWUFBQSxDQUFHNEIsT0FBSCxDQUFXRixJQUFYLEVBQWlCYixJQUFqQixDQUFOO0lBQ0QsQ0FIRCxNQUdPO01BQ0wsTUFBTS9DLFFBQVEsQ0FBQzJELFVBQUQsRUFBYXpCLFlBQUEsQ0FBRzZCLGlCQUFILENBQXFCaEIsSUFBckIsRUFBMkI7UUFBQ0MsSUFBSSxFQUFFTTtNQUFQLENBQTNCLENBQWIsQ0FBZDtJQUNEO0VBQ0Y7O0VBRURDLGdCQUFnQixDQUFDUyxTQUFELEVBQVliLEtBQVosRUFBbUI7SUFDakMsTUFBTTtNQUFDYyxjQUFEO01BQWlCQztJQUFqQixJQUFvQyxLQUFLeEQsSUFBL0M7SUFFQSxJQUFJc0MsSUFBSSxHQUFHZ0IsU0FBWDs7SUFFQSxJQUFJaEIsSUFBSSxLQUFLLENBQWIsRUFBZ0I7TUFDZCxJQUFJRyxLQUFKLEVBQVc7UUFDVCxJQUFJYyxjQUFKLEVBQW9CO1VBQ2xCakIsSUFBSSxHQUFHbUIsUUFBUSxDQUFDRixjQUFELEVBQWlCLEVBQWpCLENBQWY7UUFDRDs7UUFFRCxJQUFJLENBQUNqQixJQUFMLEVBQVc7VUFDVEEsSUFBSSxHQUFHLEtBQVA7UUFDRDtNQUNGLENBUkQsTUFRTztRQUNMLElBQUlrQixlQUFKLEVBQXFCO1VBQ25CbEIsSUFBSSxHQUFHbUIsUUFBUSxDQUFDRCxlQUFELEVBQWtCLEVBQWxCLENBQWY7UUFDRDs7UUFFRCxJQUFJLENBQUNsQixJQUFMLEVBQVc7VUFDVEEsSUFBSSxHQUFHLEtBQVA7UUFDRDtNQUNGO0lBQ0Y7O0lBRUQsT0FBT0EsSUFBUDtFQUNEOztBQS9JZ0I7O0FBb0tuQixlQUFlb0IsWUFBZixDQUE0QkMsV0FBNUIsRUFBeUN2QyxPQUF6QyxFQUFrRHBCLElBQUksR0FBcUMsRUFBM0YsRUFBZ0c7RUFDOUYsSUFBSSxDQUFDcUIsYUFBQSxDQUFLdUMsVUFBTCxDQUFnQnhDLE9BQWhCLENBQUwsRUFBK0I7SUFDN0IsTUFBTSxJQUFJYyxLQUFKLENBQVcsZ0JBQWVkLE9BQVEsOEJBQWxDLENBQU47RUFDRDs7RUFFRCxNQUFNSSxZQUFBLENBQUdDLEtBQUgsQ0FBU0wsT0FBVCxFQUFrQjtJQUFDTSxTQUFTLEVBQUU7RUFBWixDQUFsQixDQUFOO0VBQ0EsTUFBTWYsR0FBRyxHQUFHLE1BQU1hLFlBQUEsQ0FBR0ksUUFBSCxDQUFZUixPQUFaLENBQWxCOztFQUNBLElBQUlwQixJQUFJLENBQUM2RCxjQUFULEVBQXlCO0lBQ3ZCLElBQUk7TUFDRixNQUFNQyxzQkFBc0IsQ0FBQ0gsV0FBRCxFQUFjaEQsR0FBZCxDQUE1QjtNQUNBO0lBQ0QsQ0FIRCxDQUdFLE9BQU9NLEdBQVAsRUFBWTtNQUNaOEMsZUFBQSxDQUFJQyxJQUFKLENBQVMsc0NBQVQsRUFBaUQvQyxHQUFHLENBQUNnRCxNQUFKLElBQWNoRCxHQUFHLENBQUNpRCxPQUFuRTtJQUNEO0VBQ0Y7O0VBQ0QsTUFBTUMsU0FBUyxHQUFHLElBQUl2RSxZQUFKLENBQWlCK0QsV0FBakIsRUFBOEIsRUFDOUMsR0FBRzNELElBRDJDO0lBRTlDVztFQUY4QyxDQUE5QixDQUFsQjtFQUlBLE1BQU13RCxTQUFTLENBQUN6RCxPQUFWLEVBQU47QUFDRDs7QUFXRCxlQUFlb0Qsc0JBQWYsQ0FBc0NILFdBQXRDLEVBQW1EdkMsT0FBbkQsRUFBNEQ7RUFDMUQsTUFBTWdELGFBQWEsR0FBRyxJQUFBQyxpQkFBQSxHQUF0QjtFQUNBLElBQUlDLGNBQUo7O0VBQ0EsSUFBSTtJQUNGQSxjQUFjLEdBQUcsTUFBTUMsaUJBQWlCLENBQUNILGFBQWEsR0FBRyxnQkFBSCxHQUFzQixPQUFwQyxDQUF4QztFQUNELENBRkQsQ0FFRSxPQUFPSSxDQUFQLEVBQVU7SUFDVixNQUFNLElBQUl0QyxLQUFKLENBQVUsNkJBQVYsQ0FBTjtFQUNEOztFQUVELElBQUlrQyxhQUFKLEVBQW1CO0lBRWpCLE1BQU0sSUFBQUssa0JBQUEsRUFBS0gsY0FBTCxFQUFxQixDQUN6QixVQUR5QixFQUV6QixnQkFGeUIsRUFHekIsY0FIeUIsRUFJekJYLFdBSnlCLEVBS3pCLGtCQUx5QixFQU16QnZDLE9BTnlCLEVBT3pCLFFBUHlCLENBQXJCLENBQU47RUFTRCxDQVhELE1BV087SUFJTCxNQUFNLElBQUFxRCxrQkFBQSxFQUFLSCxjQUFMLEVBQXFCLENBQUMsSUFBRCxFQUFPLElBQVAsRUFBYVgsV0FBYixFQUEwQixJQUExQixFQUFnQ3ZDLE9BQWhDLENBQXJCLENBQU47RUFDRDtBQUNGOztBQVNELGVBQWVzRCxlQUFmLENBQStCQyxPQUEvQixFQUF3Q3ZFLEtBQXhDLEVBQStDZ0IsT0FBL0MsRUFBd0Q7RUFDdEQsTUFBTXdELE9BQU8sR0FBR3ZELGFBQUEsQ0FBS1AsT0FBTCxDQUFhTSxPQUFiLEVBQXNCaEIsS0FBSyxDQUFDRyxRQUE1QixDQUFoQjs7RUFHQSxJQUFJLE1BQU1zRSxJQUFOLENBQVd6RSxLQUFLLENBQUNHLFFBQWpCLENBQUosRUFBZ0M7SUFDOUIsSUFBSSxFQUFFLE1BQU1pQixZQUFBLENBQUdzRCxNQUFILENBQVVGLE9BQVYsQ0FBUixDQUFKLEVBQWlDO01BQy9CLE1BQU1wRCxZQUFBLENBQUd1RCxNQUFILENBQVVILE9BQVYsQ0FBTjtJQUNEOztJQUNEO0VBQ0QsQ0FMRCxNQUtPLElBQUksRUFBRSxNQUFNcEQsWUFBQSxDQUFHc0QsTUFBSCxDQUFVekQsYUFBQSxDQUFLQyxPQUFMLENBQWFzRCxPQUFiLENBQVYsQ0FBUixDQUFKLEVBQStDO0lBQ3BELE1BQU1wRCxZQUFBLENBQUd1RCxNQUFILENBQVUxRCxhQUFBLENBQUtDLE9BQUwsQ0FBYXNELE9BQWIsQ0FBVixDQUFOO0VBQ0Q7O0VBR0QsTUFBTUksV0FBVyxHQUFHLElBQUEzQixxQkFBQSxFQUFrQnVCLE9BQWxCLEVBQTJCO0lBQUNLLEtBQUssRUFBRTtFQUFSLENBQTNCLENBQXBCO0VBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsSUFBSWhHLGlCQUFKLENBQU0sQ0FBQzRCLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtJQUNwRGlFLFdBQVcsQ0FBQ0csSUFBWixDQUFpQixRQUFqQixFQUEyQnJFLE9BQTNCO0lBQ0FrRSxXQUFXLENBQUNHLElBQVosQ0FBaUIsT0FBakIsRUFBMEJwRSxNQUExQjtFQUNELENBSDBCLENBQTNCO0VBT0EsTUFBTXFFLGFBQWEsR0FBRyxNQUFNLElBQUlsRyxpQkFBSixDQUFNLENBQUM0QixPQUFELEVBQVVDLE1BQVYsS0FBcUI7SUFDckQ0RCxPQUFPLENBQUM1QixjQUFSLENBQXVCM0MsS0FBdkIsRUFBOEIsQ0FBQ2EsR0FBRCxFQUFNZ0MsVUFBTixLQUFzQmhDLEdBQUcsR0FBR0YsTUFBTSxDQUFDRSxHQUFELENBQVQsR0FBaUJILE9BQU8sQ0FBQ21DLFVBQUQsQ0FBL0U7RUFDRCxDQUYyQixDQUE1QjtFQUdBLE1BQU1vQyxvQkFBb0IsR0FBRyxJQUFJbkcsaUJBQUosQ0FBTSxDQUFDNEIsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0lBQ3REcUUsYUFBYSxDQUFDRCxJQUFkLENBQW1CLEtBQW5CLEVBQTBCckUsT0FBMUI7SUFDQXNFLGFBQWEsQ0FBQ0QsSUFBZCxDQUFtQixPQUFuQixFQUE0QnBFLE1BQTVCO0VBQ0QsQ0FINEIsQ0FBN0I7RUFJQXFFLGFBQWEsQ0FBQ0UsSUFBZCxDQUFtQk4sV0FBbkI7RUFHQSxPQUFPLE1BQU05RixpQkFBQSxDQUFFcUcsR0FBRixDQUFNLENBQUNGLG9CQUFELEVBQXVCSCxrQkFBdkIsQ0FBTixDQUFiO0FBQ0Q7O0FBa0JELGVBQWVNLFdBQWYsQ0FBMkI3QixXQUEzQixFQUF3QzhCLE9BQXhDLEVBQWlEO0VBRS9DLE1BQU01RixPQUFPLEdBQUcsTUFBTVosT0FBTyxDQUFDMEUsV0FBRCxFQUFjO0lBQUMvQyxXQUFXLEVBQUU7RUFBZCxDQUFkLENBQTdCO0VBQ0EsTUFBTXlFLG9CQUFvQixHQUFHLElBQUluRyxpQkFBSixDQUFNLENBQUM0QixPQUFELEVBQVVDLE1BQVYsS0FBcUI7SUFDdERsQixPQUFPLENBQUNzRixJQUFSLENBQWEsS0FBYixFQUFvQnJFLE9BQXBCO0lBQ0FqQixPQUFPLENBQUNzRixJQUFSLENBQWEsT0FBYixFQUFzQnBFLE1BQXRCO0lBR0FsQixPQUFPLENBQUNtQixFQUFSLENBQVcsT0FBWCxFQUFvQixNQUFPWixLQUFQLElBQWlCO01BQ25DLE1BQU1zRixHQUFHLEdBQUcsTUFBTUQsT0FBTyxDQUFDO1FBQ3hCckYsS0FEd0I7UUFFeEJ1RixjQUFjLEVBQUUsTUFBT3ZFLE9BQVAsSUFBbUIsTUFBTXNELGVBQWUsQ0FBQzdFLE9BQUQsRUFBVU8sS0FBVixFQUFpQmdCLE9BQWpCO01BRmhDLENBQUQsQ0FBekI7O01BSUEsSUFBSXNFLEdBQUcsS0FBSyxLQUFaLEVBQW1CO1FBQ2pCLE9BQU83RixPQUFPLENBQUMrRixJQUFSLENBQWEsS0FBYixDQUFQO01BQ0Q7O01BQ0QvRixPQUFPLENBQUNxQixTQUFSO0lBQ0QsQ0FURDtFQVVELENBZjRCLENBQTdCO0VBZ0JBckIsT0FBTyxDQUFDcUIsU0FBUjtFQUdBLE9BQU8sTUFBTW1FLG9CQUFiO0FBQ0Q7O0FBNEJELGVBQWVRLGFBQWYsQ0FBNkJDLE9BQTdCLEVBQXNDOUYsSUFBSSxHQUE4QixFQUF4RSxFQUE2RTtFQUMzRSxJQUFJLEVBQUUsTUFBTXdCLFlBQUEsQ0FBR3NELE1BQUgsQ0FBVWdCLE9BQVYsQ0FBUixDQUFKLEVBQWlDO0lBQy9CLE1BQU0sSUFBSTVELEtBQUosQ0FBVywyQkFBMEI0RCxPQUFRLEVBQTdDLENBQU47RUFDRDs7RUFFRCxNQUFNO0lBQUNDLFNBQVMsR0FBRyxJQUFiO0lBQW1CQyxjQUFjLEdBQUcsS0FBcEM7SUFBMkNDLE9BQU8sR0FBRyxJQUFJQyxTQUF6RDtJQUE4REMsS0FBSyxHQUFHO0VBQXRFLElBQTJFbkcsSUFBakY7RUFDQSxNQUFNb0csYUFBYSxHQUFHLEVBQXRCO0VBQ0EsSUFBSUMsaUJBQWlCLEdBQUcsQ0FBeEI7RUFFQSxNQUFNQyxpQkFBaUIsR0FBRyxJQUFJL0csZUFBQSxDQUFPZ0gsUUFBWCxDQUFvQjtJQUM1Q0MsS0FBSyxFQUFFLENBQUNDLE1BQUQsRUFBU0MsUUFBVCxFQUFtQkMsSUFBbkIsS0FBNEI7TUFDakNQLGFBQWEsQ0FBQ1EsSUFBZCxDQUFtQkgsTUFBbkI7TUFDQUosaUJBQWlCLElBQUlJLE1BQU0sQ0FBQ0ksTUFBNUI7O01BQ0EsSUFBSVosT0FBTyxHQUFHLENBQVYsSUFBZUksaUJBQWlCLEdBQUdKLE9BQXZDLEVBQWdEO1FBQzlDSyxpQkFBaUIsQ0FBQ1YsSUFBbEIsQ0FDRSxPQURGLEVBRUUsSUFBSTFELEtBQUosQ0FDRyw0QkFBRCxHQUNHLG9DQUFtQyxJQUFBNEUsMEJBQUEsRUFBcUJiLE9BQXJCLENBQThCLEVBRnRFLENBRkY7TUFPRDs7TUFDRFUsSUFBSTtJQUNMO0VBZDJDLENBQXBCLENBQTFCO0VBa0JBLE1BQU1JLE9BQU8sR0FBRyxJQUFBQyxpQkFBQSxFQUFTLEtBQVQsRUFBZ0I7SUFDOUJDLElBQUksRUFBRTtNQUFDZDtJQUFEO0VBRHdCLENBQWhCLENBQWhCO0VBR0EsSUFBSWUsT0FBTyxHQUFHLElBQWQ7RUFDQSxNQUFNQyxtQkFBbUIsR0FBR25CLGNBQWMsR0FBRyxJQUFJb0IsMEJBQUosRUFBSCxHQUF3QixJQUFsRTtFQUNBLE1BQU1DLHdCQUF3QixHQUFHLElBQUluSSxpQkFBSixDQUFNLENBQUM0QixPQUFELEVBQVVDLE1BQVYsS0FBcUI7SUFDMUR1RixpQkFBaUIsQ0FBQ25CLElBQWxCLENBQXVCLE9BQXZCLEVBQWlDWCxDQUFELElBQU87TUFDckMsSUFBSTJDLG1CQUFKLEVBQXlCO1FBQ3ZCSixPQUFPLENBQUNPLE1BQVIsQ0FBZUgsbUJBQWY7UUFDQUEsbUJBQW1CLENBQUNHLE1BQXBCLENBQTJCaEIsaUJBQTNCO01BQ0QsQ0FIRCxNQUdPO1FBQ0xTLE9BQU8sQ0FBQ08sTUFBUixDQUFlaEIsaUJBQWY7TUFDRDs7TUFDRFMsT0FBTyxDQUFDUSxLQUFSO01BQ0FSLE9BQU8sQ0FBQ1MsT0FBUjtNQUNBekcsTUFBTSxDQUFDeUQsQ0FBRCxDQUFOO0lBQ0QsQ0FWRDtJQVdBOEIsaUJBQWlCLENBQUNuQixJQUFsQixDQUF1QixRQUF2QixFQUFpQyxNQUFNO01BQ3JDK0IsT0FBTyxHQUFHSCxPQUFPLENBQUNVLE9BQVIsRUFBVjtNQUNBM0csT0FBTztJQUNSLENBSEQ7RUFJRCxDQWhCZ0MsQ0FBakM7RUFpQkEsTUFBTTRHLG9CQUFvQixHQUFHLElBQUl4SSxpQkFBSixDQUFNLENBQUM0QixPQUFELEVBQVVDLE1BQVYsS0FBcUI7SUFDdERnRyxPQUFPLENBQUM1QixJQUFSLENBQWEsUUFBYixFQUF1QnJFLE9BQXZCO0lBQ0FpRyxPQUFPLENBQUM1QixJQUFSLENBQWEsT0FBYixFQUF1QlgsQ0FBRCxJQUFPekQsTUFBTSxDQUFDLElBQUltQixLQUFKLENBQVcsc0JBQXFCNEQsT0FBUSxNQUFLdEIsQ0FBQyxDQUFDTixPQUFRLEVBQXZELENBQUQsQ0FBbkM7RUFDRCxDQUg0QixDQUE3QjtFQUlBLE1BQU15RCxLQUFLLEdBQUc1QixTQUFTLEdBQUcsSUFBSTZCLGVBQUosR0FBWUMsS0FBWixFQUFILEdBQXlCLElBQWhEOztFQUNBLElBQUksQ0FBQyxNQUFNckcsWUFBQSxDQUFHc0csSUFBSCxDQUFRaEMsT0FBUixDQUFQLEVBQXlCaUMsV0FBekIsRUFBSixFQUE0QztJQUMxQ2hCLE9BQU8sQ0FBQ2lCLFNBQVIsQ0FBa0JsQyxPQUFsQixFQUEyQixLQUEzQjtFQUNELENBRkQsTUFFTztJQUNMaUIsT0FBTyxDQUFDa0IsSUFBUixDQUFhbkMsT0FBYixFQUFzQjtNQUNwQm9DLElBQUksRUFBRTdHLGFBQUEsQ0FBSzhHLFFBQUwsQ0FBY3JDLE9BQWQ7SUFEYyxDQUF0QjtFQUdEOztFQUNELElBQUlxQixtQkFBSixFQUF5QjtJQUN2QkosT0FBTyxDQUFDekIsSUFBUixDQUFhNkIsbUJBQWI7SUFDQUEsbUJBQW1CLENBQUM3QixJQUFwQixDQUF5QmdCLGlCQUF6QjtFQUNELENBSEQsTUFHTztJQUNMUyxPQUFPLENBQUN6QixJQUFSLENBQWFnQixpQkFBYjtFQUNEOztFQUNEUyxPQUFPLENBQUNxQixRQUFSO0VBR0EsTUFBTWxKLGlCQUFBLENBQUVxRyxHQUFGLENBQU0sQ0FBQ21DLG9CQUFELEVBQXVCTCx3QkFBdkIsQ0FBTixDQUFOOztFQUVBLElBQUlNLEtBQUosRUFBVztJQUNUNUQsZUFBQSxDQUFJc0UsS0FBSixDQUNHLFVBQVNyQyxjQUFjLEdBQUcscUJBQUgsR0FBMkIsRUFBRyxFQUF0RCxHQUNHLElBQUczRSxhQUFBLENBQUs4RyxRQUFMLENBQWNyQyxPQUFkLENBQXVCLElBRDdCLElBRUdvQixPQUFPLEdBQUksSUFBRyxJQUFBSiwwQkFBQSxFQUFxQkksT0FBckIsQ0FBOEIsSUFBckMsR0FBMkMsRUFGckQsSUFHRyxNQUFLUyxLQUFLLENBQUNXLFdBQU4sR0FBb0JDLFNBQXBCLENBQThCQyxPQUE5QixDQUFzQyxDQUF0QyxDQUF5QyxJQUhqRCxHQUlHLHVCQUFzQnJDLEtBQU0sR0FMakM7RUFPRDs7RUFFRCxPQUFPc0MsTUFBTSxDQUFDQyxNQUFQLENBQWN0QyxhQUFkLENBQVA7QUFDRDs7QUFRRCxlQUFldUMsY0FBZixDQUE4QkMsUUFBOUIsRUFBd0M7RUFDdEMsSUFBSSxFQUFFLE1BQU1wSCxZQUFBLENBQUdzRCxNQUFILENBQVU4RCxRQUFWLENBQVIsQ0FBSixFQUFrQztJQUNoQyxNQUFNLElBQUkxRyxLQUFKLENBQVcsZ0JBQWUwRyxRQUFTLGtCQUFuQyxDQUFOO0VBQ0Q7O0VBRUQsTUFBTTtJQUFDQztFQUFELElBQVMsTUFBTXJILFlBQUEsQ0FBR3NHLElBQUgsQ0FBUWMsUUFBUixDQUFyQjs7RUFDQSxJQUFJQyxJQUFJLEdBQUcsQ0FBWCxFQUFjO0lBQ1osTUFBTSxJQUFJM0csS0FBSixDQUFXLGdCQUFlMEcsUUFBUyxvQ0FBbkMsQ0FBTjtFQUNEOztFQUNELE1BQU1FLEVBQUUsR0FBRyxNQUFNdEgsWUFBQSxDQUFHbkMsSUFBSCxDQUFRdUosUUFBUixFQUFrQixHQUFsQixDQUFqQjs7RUFDQSxJQUFJO0lBQ0YsTUFBTW5DLE1BQU0sR0FBR2dDLE1BQU0sQ0FBQ00sS0FBUCxDQUFhdkosU0FBUyxDQUFDcUgsTUFBdkIsQ0FBZjtJQUNBLE1BQU1yRixZQUFBLENBQUd3SCxJQUFILENBQVFGLEVBQVIsRUFBWXJDLE1BQVosRUFBb0IsQ0FBcEIsRUFBdUJqSCxTQUFTLENBQUNxSCxNQUFqQyxFQUF5QyxDQUF6QyxDQUFOO0lBQ0EsTUFBTW9DLFNBQVMsR0FBR3hDLE1BQU0sQ0FBQ2pHLFFBQVAsQ0FBZ0IsT0FBaEIsQ0FBbEI7O0lBQ0EsSUFBSXlJLFNBQVMsS0FBS3pKLFNBQWxCLEVBQTZCO01BQzNCLE1BQU0sSUFBSTBDLEtBQUosQ0FDSCx1QkFBc0IrRyxTQUFVLFNBQVFMLFFBQVMsSUFBbEQsR0FDRyx1REFBc0RwSixTQUFVLEdBRi9ELENBQU47SUFJRDs7SUFDRCxPQUFPLElBQVA7RUFDRCxDQVhELFNBV1U7SUFDUixNQUFNZ0MsWUFBQSxDQUFHWSxLQUFILENBQVMwRyxFQUFULENBQU47RUFDRDtBQUNGOztBQXdCRCxlQUFlSSxTQUFmLENBQ0V0RSxPQURGLEVBRUV1RSxHQUFHLEdBQW9DLEVBRnpDLEVBR0VuSixJQUFJLEdBQXlDLEVBSC9DLEVBSUU7RUFDQSxNQUFNO0lBQUNtRyxLQUFLLEdBQUc7RUFBVCxJQUFjbkcsSUFBcEI7RUFDQSxNQUFNO0lBQUNvSixPQUFPLEdBQUcsTUFBWDtJQUFtQkMsR0FBRyxHQUFHaEksYUFBQSxDQUFLQyxPQUFMLENBQWFzRCxPQUFiLENBQXpCO0lBQWdEMEUsTUFBTSxHQUFHO0VBQXpELElBQStESCxHQUFyRTtFQUNBLE1BQU1wQyxPQUFPLEdBQUcsSUFBQUMsaUJBQUEsRUFBUyxLQUFULEVBQWdCO0lBQUNDLElBQUksRUFBRTtNQUFDZDtJQUFEO0VBQVAsQ0FBaEIsQ0FBaEI7O0VBQ0EsTUFBTTVHLE1BQU0sR0FBR2lDLFlBQUEsQ0FBRzZCLGlCQUFILENBQXFCdUIsT0FBckIsQ0FBZjs7RUFDQSxPQUFPLE1BQU0sSUFBSTFGLGlCQUFKLENBQU0sQ0FBQzRCLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtJQUN0Q2dHLE9BQU8sQ0FDSndDLElBREgsQ0FDUUgsT0FEUixFQUNpQjtNQUNiQyxHQURhO01BRWJDO0lBRmEsQ0FEakIsRUFLR3RJLEVBTEgsQ0FLTSxPQUxOLEVBS2VELE1BTGYsRUFNR3VFLElBTkgsQ0FNUS9GLE1BTlI7SUFPQUEsTUFBTSxDQUNIeUIsRUFESCxDQUNNLE9BRE4sRUFDZ0J3RCxDQUFELElBQU87TUFDbEJ1QyxPQUFPLENBQUNPLE1BQVIsQ0FBZS9ILE1BQWY7TUFDQXdILE9BQU8sQ0FBQ1EsS0FBUjtNQUNBUixPQUFPLENBQUNTLE9BQVI7TUFDQXpHLE1BQU0sQ0FBQ3lELENBQUQsQ0FBTjtJQUNELENBTkgsRUFPR3hELEVBUEgsQ0FPTSxRQVBOLEVBT2dCRixPQVBoQjtJQVFBaUcsT0FBTyxDQUFDcUIsUUFBUjtFQUNELENBakJZLENBQWI7QUFrQkQ7O0FBTUQsTUFBTTdELGlCQUFpQixHQUFHbEUsZUFBQSxDQUFFbUosT0FBRixDQUl4QixlQUFlakYsaUJBQWYsQ0FBaUNrRixVQUFqQyxFQUE2QztFQUMzQyxNQUFNQyxRQUFRLEdBQUcsTUFBTWxJLFlBQUEsQ0FBR21JLEtBQUgsQ0FBU0YsVUFBVCxDQUF2Qjs7RUFDQTFGLGVBQUEsQ0FBSXNFLEtBQUosQ0FBVyxvQkFBWCxFQUFnQ29CLFVBQWhDLEVBQTRDQyxRQUE1Qzs7RUFDQSxPQUFPQSxRQUFQO0FBQ0QsQ0FSdUIsQ0FBMUI7O2VBWWU7RUFDYmhHLFlBRGE7RUFFYjhCLFdBRmE7RUFHYkssYUFIYTtFQUliOEMsY0FKYTtFQUtiTztBQUxhLEMifQ==
461
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcGVuWmlwIiwiQiIsInByb21pc2lmeSIsInlhdXpsIiwib3BlbiIsInBpcGVsaW5lIiwic3RyZWFtIiwiWklQX01BR0lDIiwiSUZNVCIsIklGRElSIiwiSUZMTksiLCJaaXBFeHRyYWN0b3IiLCJ6aXBmaWxlIiwiY29uc3RydWN0b3IiLCJzb3VyY2VQYXRoIiwib3B0cyIsInppcFBhdGgiLCJjYW5jZWxlZCIsImV4dHJhY3RGaWxlTmFtZSIsImVudHJ5IiwiXyIsImlzQnVmZmVyIiwiZmlsZU5hbWUiLCJ0b1N0cmluZyIsImZpbGVOYW1lc0VuY29kaW5nIiwiZXh0cmFjdCIsImRpciIsImxhenlFbnRyaWVzIiwiZGVjb2RlU3RyaW5ncyIsInJlc29sdmUiLCJyZWplY3QiLCJvbiIsImVyciIsInJlYWRFbnRyeSIsInN0YXJ0c1dpdGgiLCJkZXN0RGlyIiwicGF0aCIsImRpcm5hbWUiLCJqb2luIiwiZnMiLCJta2RpciIsInJlY3Vyc2l2ZSIsImNhbm9uaWNhbERlc3REaXIiLCJyZWFscGF0aCIsInJlbGF0aXZlRGVzdERpciIsInJlbGF0aXZlIiwic3BsaXQiLCJzZXAiLCJpbmNsdWRlcyIsIkVycm9yIiwiZXh0cmFjdEVudHJ5IiwiY2xvc2UiLCJkZXN0IiwibW9kZSIsImV4dGVybmFsRmlsZUF0dHJpYnV0ZXMiLCJpc1N5bWxpbmsiLCJpc0RpciIsImVuZHNXaXRoIiwidmVyc2lvbk1hZGVCeSIsInByb2NNb2RlIiwiZ2V0RXh0cmFjdGVkTW9kZSIsIm1rZGlyT3B0aW9ucyIsIm9wZW5SZWFkU3RyZWFtIiwiYmluZCIsInJlYWRTdHJlYW0iLCJsaW5rIiwiZ2V0U3RyZWFtIiwic3ltbGluayIsImNyZWF0ZVdyaXRlU3RyZWFtIiwiZW50cnlNb2RlIiwiZGVmYXVsdERpck1vZGUiLCJkZWZhdWx0RmlsZU1vZGUiLCJwYXJzZUludCIsImV4dHJhY3RBbGxUbyIsInppcEZpbGVQYXRoIiwiaXNBYnNvbHV0ZSIsInVzZVN5c3RlbVVuemlwIiwiZXh0cmFjdFdpdGhTeXN0ZW1VbnppcCIsImxvZyIsIndhcm4iLCJzdGRlcnIiLCJtZXNzYWdlIiwiZXh0cmFjdG9yIiwiaXNXaW5kb3dzSG9zdCIsImlzV2luZG93cyIsImV4ZWN1dGFibGVQYXRoIiwiZ2V0RXhlY3V0YWJsZVBhdGgiLCJlIiwiZXhlYyIsIl9leHRyYWN0RW50cnlUbyIsInppcEZpbGUiLCJkc3RQYXRoIiwidGVzdCIsImV4aXN0cyIsIm1rZGlycCIsIndyaXRlU3RyZWFtIiwiZmxhZ3MiLCJ3cml0ZVN0cmVhbVByb21pc2UiLCJvbmNlIiwiemlwUmVhZFN0cmVhbSIsInppcFJlYWRTdHJlYW1Qcm9taXNlIiwicGlwZSIsImFsbCIsInJlYWRFbnRyaWVzIiwib25FbnRyeSIsInJlcyIsImV4dHJhY3RFbnRyeVRvIiwiZW1pdCIsInRvSW5NZW1vcnlaaXAiLCJzcmNQYXRoIiwiaXNNZXRlcmVkIiwiZW5jb2RlVG9CYXNlNjQiLCJtYXhTaXplIiwiR2lCIiwibGV2ZWwiLCJyZXN1bHRCdWZmZXJzIiwicmVzdWx0QnVmZmVyc1NpemUiLCJyZXN1bHRXcml0ZVN0cmVhbSIsIldyaXRhYmxlIiwid3JpdGUiLCJidWZmZXIiLCJlbmNvZGluZyIsIm5leHQiLCJwdXNoIiwibGVuZ3RoIiwidG9SZWFkYWJsZVNpemVTdHJpbmciLCJhcmNoaXZlIiwiYXJjaGl2ZXIiLCJ6bGliIiwic3JjU2l6ZSIsImJhc2U2NEVuY29kZXJTdHJlYW0iLCJCYXNlNjRFbmNvZGUiLCJyZXN1bHRXcml0ZVN0cmVhbVByb21pc2UiLCJ1bnBpcGUiLCJhYm9ydCIsImRlc3Ryb3kiLCJwb2ludGVyIiwiYXJjaGl2ZVN0cmVhbVByb21pc2UiLCJ0aW1lciIsIlRpbWVyIiwic3RhcnQiLCJzdGF0IiwiaXNEaXJlY3RvcnkiLCJkaXJlY3RvcnkiLCJmaWxlIiwibmFtZSIsImJhc2VuYW1lIiwiZmluYWxpemUiLCJkZWJ1ZyIsImdldER1cmF0aW9uIiwiYXNTZWNvbmRzIiwidG9GaXhlZCIsIkJ1ZmZlciIsImNvbmNhdCIsImFzc2VydFZhbGlkWmlwIiwiZmlsZVBhdGgiLCJzaXplIiwiZmQiLCJhbGxvYyIsInJlYWQiLCJzaWduYXR1cmUiLCJ0b0FyY2hpdmUiLCJzcmMiLCJwYXR0ZXJuIiwiY3dkIiwiaWdub3JlIiwiZ2xvYiIsIm1lbW9pemUiLCJiaW5hcnlOYW1lIiwiZnVsbFBhdGgiLCJ3aGljaCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi96aXAuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB5YXV6bCBmcm9tICd5YXV6bCc7XG5pbXBvcnQgYXJjaGl2ZXIgZnJvbSAnYXJjaGl2ZXInO1xuaW1wb3J0IHtjcmVhdGVXcml0ZVN0cmVhbX0gZnJvbSAnZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgc3RyZWFtIGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgZnMgZnJvbSAnLi9mcyc7XG5pbXBvcnQge2lzV2luZG93c30gZnJvbSAnLi9zeXN0ZW0nO1xuaW1wb3J0IHtCYXNlNjRFbmNvZGV9IGZyb20gJ2Jhc2U2NC1zdHJlYW0nO1xuaW1wb3J0IHt0b1JlYWRhYmxlU2l6ZVN0cmluZywgR2lCfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IFRpbWVyIGZyb20gJy4vdGltaW5nJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IGdldFN0cmVhbSBmcm9tICdnZXQtc3RyZWFtJztcbmltcG9ydCB7ZXhlY30gZnJvbSAndGVlbl9wcm9jZXNzJztcblxuLyoqXG4gKiBAdHlwZSB7KHBhdGg6IHN0cmluZywgb3B0aW9ucz86IHlhdXpsLk9wdGlvbnMpID0+IFByb21pc2U8eWF1emwuWmlwRmlsZT59XG4gKi9cbmNvbnN0IG9wZW5aaXAgPSBCLnByb21pc2lmeSh5YXV6bC5vcGVuKTtcbi8qKlxuICogQHR5cGUgeyhzb3VyY2U6IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSwgZGVzdGluYXRpb246IE5vZGVKUy5Xcml0YWJsZVN0cmVhbSkgPT4gUHJvbWlzZTxOb2RlSlMuV3JpdGFibGVTdHJlYW0+fVxuICovXG5jb25zdCBwaXBlbGluZSA9IEIucHJvbWlzaWZ5KHN0cmVhbS5waXBlbGluZSk7XG5jb25zdCBaSVBfTUFHSUMgPSAnUEsnO1xuY29uc3QgSUZNVCA9IDYxNDQwO1xuY29uc3QgSUZESVIgPSAxNjM4NDtcbmNvbnN0IElGTE5LID0gNDA5NjA7XG5cbi8vIFRoaXMgY2xhc3MgaXMgbW9zdGx5IGNvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXhvZ2Rlbi9leHRyYWN0LXppcC9ibG9iL21hc3Rlci9pbmRleC5qc1xuY2xhc3MgWmlwRXh0cmFjdG9yIHtcbiAgLyoqIEB0eXBlIHt5YXV6bC5aaXBGaWxlfSAqL1xuICB6aXBmaWxlO1xuXG4gIGNvbnN0cnVjdG9yKHNvdXJjZVBhdGgsIG9wdHMgPSB7fSkge1xuICAgIHRoaXMuemlwUGF0aCA9IHNvdXJjZVBhdGg7XG4gICAgdGhpcy5vcHRzID0gb3B0cztcbiAgICB0aGlzLmNhbmNlbGVkID0gZmFsc2U7XG4gIH1cblxuICBleHRyYWN0RmlsZU5hbWUoZW50cnkpIHtcbiAgICByZXR1cm4gXy5pc0J1ZmZlcihlbnRyeS5maWxlTmFtZSlcbiAgICAgID8gZW50cnkuZmlsZU5hbWUudG9TdHJpbmcodGhpcy5vcHRzLmZpbGVOYW1lc0VuY29kaW5nKVxuICAgICAgOiBlbnRyeS5maWxlTmFtZTtcbiAgfVxuXG4gIGFzeW5jIGV4dHJhY3QoKSB7XG4gICAgY29uc3Qge2RpciwgZmlsZU5hbWVzRW5jb2Rpbmd9ID0gdGhpcy5vcHRzO1xuICAgIHRoaXMuemlwZmlsZSA9IGF3YWl0IG9wZW5aaXAodGhpcy56aXBQYXRoLCB7XG4gICAgICBsYXp5RW50cmllczogdHJ1ZSxcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVqb3Nod29sZmUveWF1emwvY29tbWl0L2NjNzQ1NWFjNzg5YmE4NDk3MzE4NGU1ZWJkZTA1ODFjZGM0YzNiMzkjZGlmZi0wNGM2ZTkwZmFhYzI2NzVhYTg5ZTIxNzZkMmVlYzdkOFI5NVxuICAgICAgZGVjb2RlU3RyaW5nczogIWZpbGVOYW1lc0VuY29kaW5nLFxuICAgIH0pO1xuICAgIHRoaXMuY2FuY2VsZWQgPSBmYWxzZTtcblxuICAgIHJldHVybiBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnppcGZpbGUub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLmNhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuemlwZmlsZS5yZWFkRW50cnkoKTtcblxuICAgICAgdGhpcy56aXBmaWxlLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbGVkKSB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy56aXBmaWxlLm9uKCdlbnRyeScsIGFzeW5jIChlbnRyeSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW5jZWxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5leHRyYWN0RmlsZU5hbWUoZW50cnkpO1xuICAgICAgICBpZiAoZmlsZU5hbWUuc3RhcnRzV2l0aCgnX19NQUNPU1gvJykpIHtcbiAgICAgICAgICB0aGlzLnppcGZpbGUucmVhZEVudHJ5KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVzdERpciA9IHBhdGguZGlybmFtZShwYXRoLmpvaW4oZGlyLCBmaWxlTmFtZSkpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGZzLm1rZGlyKGRlc3REaXIsIHtyZWN1cnNpdmU6IHRydWV9KTtcblxuICAgICAgICAgIGNvbnN0IGNhbm9uaWNhbERlc3REaXIgPSBhd2FpdCBmcy5yZWFscGF0aChkZXN0RGlyKTtcbiAgICAgICAgICBjb25zdCByZWxhdGl2ZURlc3REaXIgPSBwYXRoLnJlbGF0aXZlKGRpciwgY2Fub25pY2FsRGVzdERpcik7XG5cbiAgICAgICAgICBpZiAocmVsYXRpdmVEZXN0RGlyLnNwbGl0KHBhdGguc2VwKS5pbmNsdWRlcygnLi4nKSkge1xuICAgICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgT3V0IG9mIGJvdW5kIHBhdGggXCIke2Nhbm9uaWNhbERlc3REaXJ9XCIgZm91bmQgd2hpbGUgcHJvY2Vzc2luZyBmaWxlICR7ZmlsZU5hbWV9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhd2FpdCB0aGlzLmV4dHJhY3RFbnRyeShlbnRyeSk7XG4gICAgICAgICAgdGhpcy56aXBmaWxlLnJlYWRFbnRyeSgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmNhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnppcGZpbGUuY2xvc2UoKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBleHRyYWN0RW50cnkoZW50cnkpIHtcbiAgICBpZiAodGhpcy5jYW5jZWxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHtkaXJ9ID0gdGhpcy5vcHRzO1xuXG4gICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLmV4dHJhY3RGaWxlTmFtZShlbnRyeSk7XG4gICAgY29uc3QgZGVzdCA9IHBhdGguam9pbihkaXIsIGZpbGVOYW1lKTtcblxuICAgIC8vIGNvbnZlcnQgZXh0ZXJuYWwgZmlsZSBhdHRyIGludCBpbnRvIGEgZnMgc3RhdCBtb2RlIGludFxuICAgIGNvbnN0IG1vZGUgPSAoZW50cnkuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyA+PiAxNikgJiAweGZmZmY7XG4gICAgLy8gY2hlY2sgaWYgaXQncyBhIHN5bWxpbmsgb3IgZGlyICh1c2luZyBzdGF0IG1vZGUgY29uc3RhbnRzKVxuICAgIGNvbnN0IGlzU3ltbGluayA9IChtb2RlICYgSUZNVCkgPT09IElGTE5LO1xuICAgIGNvbnN0IGlzRGlyID1cbiAgICAgIChtb2RlICYgSUZNVCkgPT09IElGRElSIHx8XG4gICAgICAvLyBGYWlsc2FmZSwgYm9ycm93ZWQgZnJvbSBqc1ppcFxuICAgICAgZmlsZU5hbWUuZW5kc1dpdGgoJy8nKSB8fFxuICAgICAgLy8gY2hlY2sgZm9yIHdpbmRvd3Mgd2VpcmQgd2F5IG9mIHNwZWNpZnlpbmcgYSBkaXJlY3RvcnlcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXhvZ2Rlbi9leHRyYWN0LXppcC9pc3N1ZXMvMTMjaXNzdWVjb21tZW50LTE1NDQ5NDU2NlxuICAgICAgKGVudHJ5LnZlcnNpb25NYWRlQnkgPj4gOCA9PT0gMCAmJiBlbnRyeS5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzID09PSAxNik7XG4gICAgY29uc3QgcHJvY01vZGUgPSB0aGlzLmdldEV4dHJhY3RlZE1vZGUobW9kZSwgaXNEaXIpICYgMG83Nzc7XG4gICAgLy8gYWx3YXlzIGVuc3VyZSBmb2xkZXJzIGFyZSBjcmVhdGVkXG4gICAgY29uc3QgZGVzdERpciA9IGlzRGlyID8gZGVzdCA6IHBhdGguZGlybmFtZShkZXN0KTtcbiAgICBjb25zdCBta2Rpck9wdGlvbnMgPSB7cmVjdXJzaXZlOiB0cnVlfTtcbiAgICBpZiAoaXNEaXIpIHtcbiAgICAgIG1rZGlyT3B0aW9ucy5tb2RlID0gcHJvY01vZGU7XG4gICAgfVxuICAgIGF3YWl0IGZzLm1rZGlyKGRlc3REaXIsIG1rZGlyT3B0aW9ucyk7XG4gICAgaWYgKGlzRGlyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHsoZW50cnk6IHlhdXpsLkVudHJ5KSA9PiBQcm9taXNlPE5vZGVKUy5SZWFkYWJsZVN0cmVhbT59ICovXG4gICAgY29uc3Qgb3BlblJlYWRTdHJlYW0gPSBCLnByb21pc2lmeSh0aGlzLnppcGZpbGUub3BlblJlYWRTdHJlYW0uYmluZCh0aGlzLnppcGZpbGUpKTtcbiAgICBjb25zdCByZWFkU3RyZWFtID0gYXdhaXQgb3BlblJlYWRTdHJlYW0oZW50cnkpO1xuICAgIGlmIChpc1N5bWxpbmspIHtcbiAgICAgIGNvbnN0IGxpbmsgPSBhd2FpdCBnZXRTdHJlYW0ocmVhZFN0cmVhbSk7XG4gICAgICBhd2FpdCBmcy5zeW1saW5rKGxpbmssIGRlc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBwaXBlbGluZShyZWFkU3RyZWFtLCBmcy5jcmVhdGVXcml0ZVN0cmVhbShkZXN0LCB7bW9kZTogcHJvY01vZGV9KSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RXh0cmFjdGVkTW9kZShlbnRyeU1vZGUsIGlzRGlyKSB7XG4gICAgY29uc3Qge2RlZmF1bHREaXJNb2RlLCBkZWZhdWx0RmlsZU1vZGV9ID0gdGhpcy5vcHRzO1xuXG4gICAgbGV0IG1vZGUgPSBlbnRyeU1vZGU7XG4gICAgLy8gU2V0IGRlZmF1bHRzLCBpZiBuZWNlc3NhcnlcbiAgICBpZiAobW9kZSA9PT0gMCkge1xuICAgICAgaWYgKGlzRGlyKSB7XG4gICAgICAgIGlmIChkZWZhdWx0RGlyTW9kZSkge1xuICAgICAgICAgIG1vZGUgPSBwYXJzZUludChkZWZhdWx0RGlyTW9kZSwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgbW9kZSA9IDBvNzU1O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZGVmYXVsdEZpbGVNb2RlKSB7XG4gICAgICAgICAgbW9kZSA9IHBhcnNlSW50KGRlZmF1bHRGaWxlTW9kZSwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgbW9kZSA9IDBvNjQ0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGU7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBFeHRyYWN0QWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtmaWxlTmFtZXNFbmNvZGluZ10gVGhlIGVuY29kaW5nIHRvIHVzZSBmb3IgZXh0cmFjdGVkIGZpbGUgbmFtZXMuXG4gKiBGb3IgWklQIGFyY2hpdmVzIGNyZWF0ZWQgb24gTWFjT1MgaXQgaXMgdXN1YWxseSBleHBlY3RlZCB0byBiZSBgdXRmOGAuXG4gKiBCeSBkZWZhdWx0IGl0IGlzIGF1dG9kZXRlY3RlZCBiYXNlZCBvbiB0aGUgZW50cnkgbWV0YWRhdGEgYW5kIGlzIG9ubHkgbmVlZGVkIHRvIGJlIHNldCBleHBsaWNpdGx5XG4gKiBpZiB0aGUgcGFydGljdWxhciBhcmNoaXZlIGRvZXMgbm90IGNvbXBseSB0byB0aGUgc3RhbmRhcmRzLCB3aGljaCBsZWFkcyB0byBjb3JydXB0ZWQgZmlsZSBuYW1lc1xuICogYWZ0ZXIgZXh0cmFjdGlvbi4gT25seSBhcHBsaWNhYmxlIGlmIHN5c3RlbSB1bnppcCBiaW5hcnkgaXMgTk9UIGJlaW5nIHVzZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFt1c2VTeXN0ZW1VbnppcF0gSWYgdHJ1ZSwgYXR0ZW1wdCB0byB1c2Ugc3lzdGVtIHVuemlwOyBpZiB0aGlzIGZhaWxzLFxuICogZmFsbGJhY2sgdG8gdGhlIEpTIHVuemlwIGltcGxlbWVudGF0aW9uLlxuICovXG5cbi8qKlxuICogRXh0cmFjdCB6aXBmaWxlIHRvIGEgZGlyZWN0b3J5XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHppcEZpbGVQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHNvdXJjZSBaSVAgZmlsZVxuICogQHBhcmFtIHtzdHJpbmd9IGRlc3REaXIgVGhlIGZ1bGwgcGF0aCB0byB0aGUgZGVzdGluYXRpb24gZm9sZGVyXG4gKiBAcGFyYW0ge0V4dHJhY3RBbGxPcHRpb25zfSBbb3B0c11cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdEFsbFRvKHppcEZpbGVQYXRoLCBkZXN0RGlyLCBvcHRzID0gLyoqIEB0eXBlIHtFeHRyYWN0QWxsT3B0aW9uc30gKi8gKHt9KSkge1xuICBpZiAoIXBhdGguaXNBYnNvbHV0ZShkZXN0RGlyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGFyZ2V0IHBhdGggJyR7ZGVzdERpcn0nIGlzIGV4cGVjdGVkIHRvIGJlIGFic29sdXRlYCk7XG4gIH1cblxuICBhd2FpdCBmcy5ta2RpcihkZXN0RGlyLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gIGNvbnN0IGRpciA9IGF3YWl0IGZzLnJlYWxwYXRoKGRlc3REaXIpO1xuICBpZiAob3B0cy51c2VTeXN0ZW1VbnppcCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleHRyYWN0V2l0aFN5c3RlbVVuemlwKHppcEZpbGVQYXRoLCBkaXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oJ3VuemlwIGZhaWxlZDsgZmFsbGluZyBiYWNrIHRvIEpTOiAlcycsIGVyci5zdGRlcnIgfHwgZXJyLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBjb25zdCBleHRyYWN0b3IgPSBuZXcgWmlwRXh0cmFjdG9yKHppcEZpbGVQYXRoLCB7XG4gICAgLi4ub3B0cyxcbiAgICBkaXIsXG4gIH0pO1xuICBhd2FpdCBleHRyYWN0b3IuZXh0cmFjdCgpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIHN5c3RlbSB1bnppcCAoZS5nLiwgYC91c3IvYmluL3VuemlwYCkuIElmIGF2YWlsYWJsZSwgaXQgaXNcbiAqIHNpZ25pZmljYW50bHkgZmFzdGVyIHRoYW4gdGhlIEpTIGltcGxlbWVudGF0aW9uLlxuICogQnkgZGVmYXVsdCBhbGwgZmlsZXMgaW4gdGhlIGRlc3REaXIgZ2V0IG92ZXJyaWRkZW4gaWYgYWxyZWFkeSBleGlzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gemlwRmlsZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgc291cmNlIFpJUCBmaWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdERpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXIuXG4gKiBUaGlzIGZvbGRlciBpcyBleHBlY3RlZCB0byBhbHJlYWR5IGV4aXN0IGJlZm9yZSBleHRyYWN0aW5nIHRoZSBhcmNoaXZlLlxuICovXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0V2l0aFN5c3RlbVVuemlwKHppcEZpbGVQYXRoLCBkZXN0RGlyKSB7XG4gIGNvbnN0IGlzV2luZG93c0hvc3QgPSBpc1dpbmRvd3MoKTtcbiAgbGV0IGV4ZWN1dGFibGVQYXRoO1xuICB0cnkge1xuICAgIGV4ZWN1dGFibGVQYXRoID0gYXdhaXQgZ2V0RXhlY3V0YWJsZVBhdGgoaXNXaW5kb3dzSG9zdCA/ICdwb3dlcnNoZWxsLmV4ZScgOiAndW56aXAnKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgc3lzdGVtIHVuemlwJyk7XG4gIH1cblxuICBpZiAoaXNXaW5kb3dzSG9zdCkge1xuICAgIC8vIG9uIFdpbmRvd3Mgd2UgdXNlIFBvd2VyU2hlbGwgdG8gdW56aXAgZmlsZXNcbiAgICBhd2FpdCBleGVjKGV4ZWN1dGFibGVQYXRoLCBbXG4gICAgICAnLWNvbW1hbmQnLFxuICAgICAgJ0V4cGFuZC1BcmNoaXZlJyxcbiAgICAgICctTGl0ZXJhbFBhdGgnLFxuICAgICAgemlwRmlsZVBhdGgsXG4gICAgICAnLURlc3RpbmF0aW9uUGF0aCcsXG4gICAgICBkZXN0RGlyLFxuICAgICAgJy1Gb3JjZScsXG4gICAgXSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gLXEgbWVhbnMgcXVpZXQgKG5vIHN0ZG91dClcbiAgICAvLyAtbyBtZWFucyBvdmVyd3JpdGVcbiAgICAvLyAtZCBpcyB0aGUgZGVzdCBkaXJcbiAgICBhd2FpdCBleGVjKGV4ZWN1dGFibGVQYXRoLCBbJy1xJywgJy1vJywgemlwRmlsZVBhdGgsICctZCcsIGRlc3REaXJdKTtcbiAgfVxufVxuXG4vKipcbiAqIEV4dHJhY3QgYSBzaW5nbGUgemlwIGVudHJ5IHRvIGEgZGlyZWN0b3J5XG4gKlxuICogQHBhcmFtIHt5YXV6bC5aaXBGaWxlfSB6aXBGaWxlIFRoZSBzb3VyY2UgWklQIHN0cmVhbVxuICogQHBhcmFtIHt5YXV6bC5FbnRyeX0gZW50cnkgVGhlIGVudHJ5IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdERpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gX2V4dHJhY3RFbnRyeVRvKHppcEZpbGUsIGVudHJ5LCBkZXN0RGlyKSB7XG4gIGNvbnN0IGRzdFBhdGggPSBwYXRoLnJlc29sdmUoZGVzdERpciwgZW50cnkuZmlsZU5hbWUpO1xuXG4gIC8vIENyZWF0ZSBkZXN0IGRpcmVjdG9yeSBpZiBkb2Vzbid0IGV4aXN0IGFscmVhZHlcbiAgaWYgKC9cXC8kLy50ZXN0KGVudHJ5LmZpbGVOYW1lKSkge1xuICAgIGlmICghKGF3YWl0IGZzLmV4aXN0cyhkc3RQYXRoKSkpIHtcbiAgICAgIGF3YWl0IGZzLm1rZGlycChkc3RQYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKHBhdGguZGlybmFtZShkc3RQYXRoKSkpKSB7XG4gICAgYXdhaXQgZnMubWtkaXJwKHBhdGguZGlybmFtZShkc3RQYXRoKSk7XG4gIH1cblxuICAvLyBDcmVhdGUgYSB3cml0ZSBzdHJlYW1cbiAgY29uc3Qgd3JpdGVTdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbShkc3RQYXRoLCB7ZmxhZ3M6ICd3J30pO1xuICBjb25zdCB3cml0ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgd3JpdGVTdHJlYW0ub25jZSgnZmluaXNoJywgcmVzb2x2ZSk7XG4gICAgd3JpdGVTdHJlYW0ub25jZSgnZXJyb3InLCByZWplY3QpO1xuICB9KTtcblxuICAvLyBDcmVhdGUgemlwUmVhZFN0cmVhbSBhbmQgcGlwZSBkYXRhIHRvIHRoZSB3cml0ZSBzdHJlYW1cbiAgLy8gKGZvciBzb21lIG9kZCByZWFzb24gQi5wcm9taXNpZnkgZG9lc24ndCB3b3JrIG9uIHppcGZpbGUub3BlblJlYWRTdHJlYW0sIGl0IGNhdXNlcyBhbiBlcnJvciAnY2xvc2VkJylcbiAgY29uc3QgemlwUmVhZFN0cmVhbSA9IGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB6aXBGaWxlLm9wZW5SZWFkU3RyZWFtKGVudHJ5LCAoZXJyLCByZWFkU3RyZWFtKSA9PiAoZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKHJlYWRTdHJlYW0pKSk7XG4gIH0pO1xuICBjb25zdCB6aXBSZWFkU3RyZWFtUHJvbWlzZSA9IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB6aXBSZWFkU3RyZWFtLm9uY2UoJ2VuZCcsIHJlc29sdmUpO1xuICAgIHppcFJlYWRTdHJlYW0ub25jZSgnZXJyb3InLCByZWplY3QpO1xuICB9KTtcbiAgemlwUmVhZFN0cmVhbS5waXBlKHdyaXRlU3RyZWFtKTtcblxuICAvLyBXYWl0IGZvciB0aGUgemlwUmVhZFN0cmVhbSBhbmQgd3JpdGVTdHJlYW0gdG8gZW5kIGJlZm9yZSByZXR1cm5pbmdcbiAgcmV0dXJuIGF3YWl0IEIuYWxsKFt6aXBSZWFkU3RyZWFtUHJvbWlzZSwgd3JpdGVTdHJlYW1Qcm9taXNlXSk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgWmlwRW50cnlcbiAqIEBwcm9wZXJ0eSB7eWF1emwuRW50cnl9IGVudHJ5IFRoZSBhY3R1YWwgZW50cnkgaW5zdGFuY2VcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGV4dHJhY3RFbnRyeVRvIEFuIGFzeW5jIGZ1bmN0aW9uLCB3aGljaCBhY2NlcHRzIG9uZSBwYXJhbWV0ZXIuXG4gKiBUaGlzIHBhcmFtZXRlciBjb250YWlucyB0aGUgZGVzdGluYXRpb24gZm9sZGVyIHBhdGggdG8gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBleHRyYWN0IHRoZSBlbnRyeS5cbiAqL1xuXG4vKipcbiAqIEdldCBlbnRyaWVzIGZvciBhIHppcCBmb2xkZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gemlwRmlsZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgc291cmNlIFpJUCBmaWxlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBvbkVudHJ5IENhbGxiYWNrIHdoZW4gZW50cnkgaXMgcmVhZC5cbiAqIFRoZSBjYWxsYmFjayBpcyBleHBlY3RlZCB0byBhY2NlcHQgb25lIGFyZ3VtZW50IG9mIFppcEVudHJ5IHR5cGUuXG4gKiBUaGUgaXRlcmF0aW9uIHRocm91Z2ggdGhlIHNvdXJjZSB6aXAgZmlsZSB3aWxsIGJpIHRlcm1pbmF0ZWQgYXMgc29vbiBhc1xuICogdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGVxdWFscyB0byBgZmFsc2VgLlxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkRW50cmllcyh6aXBGaWxlUGF0aCwgb25FbnRyeSkge1xuICAvLyBPcGVuIGEgemlwIGZpbGUgYW5kIHN0YXJ0IHJlYWRpbmcgZW50cmllc1xuICBjb25zdCB6aXBmaWxlID0gYXdhaXQgb3BlblppcCh6aXBGaWxlUGF0aCwge2xhenlFbnRyaWVzOiB0cnVlfSk7XG4gIGNvbnN0IHppcFJlYWRTdHJlYW1Qcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHppcGZpbGUub25jZSgnZW5kJywgcmVzb2x2ZSk7XG4gICAgemlwZmlsZS5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG5cbiAgICAvLyBPbiBlYWNoIGVudHJ5LCBjYWxsICdvbkVudHJ5JyBhbmQgdGhlbiByZWFkIHRoZSBuZXh0IGVudHJ5XG4gICAgemlwZmlsZS5vbignZW50cnknLCBhc3luYyAoZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IG9uRW50cnkoe1xuICAgICAgICBlbnRyeSxcbiAgICAgICAgZXh0cmFjdEVudHJ5VG86IGFzeW5jIChkZXN0RGlyKSA9PiBhd2FpdCBfZXh0cmFjdEVudHJ5VG8oemlwZmlsZSwgZW50cnksIGRlc3REaXIpLFxuICAgICAgfSk7XG4gICAgICBpZiAocmVzID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gemlwZmlsZS5lbWl0KCdlbmQnKTtcbiAgICAgIH1cbiAgICAgIHppcGZpbGUucmVhZEVudHJ5KCk7XG4gICAgfSk7XG4gIH0pO1xuICB6aXBmaWxlLnJlYWRFbnRyeSgpO1xuXG4gIC8vIFdhaXQgZm9yIHRoZSBlbnRyaWVzIHRvIGZpbmlzaCBiZWluZyBpdGVyYXRlZCB0aHJvdWdoXG4gIHJldHVybiBhd2FpdCB6aXBSZWFkU3RyZWFtUHJvbWlzZTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBaaXBPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGVuY29kZVRvQmFzZTY0IFtmYWxzZV0gV2hldGhlciB0byBlbmNvZGVcbiAqIHRoZSByZXN1bHRpbmcgYXJjaGl2ZSB0byBhIGJhc2U2NC1lbmNvZGVkIHN0cmluZ1xuICogQHByb3BlcnR5IHtib29sZWFufSBpc01ldGVyZWQgW3RydWVdIFdoZXRoZXIgdG8gbG9nIHRoZSBhY3R1YWxcbiAqIGFyY2hpdmVyIHBlcmZvcm1hbmNlXG4gKiBAcHJvcGVydHkge251bWJlcn0gbWF4U2l6ZSBbMTA3Mzc0MTgyNF0gVGhlIG1heGltdW0gc2l6ZSBvZlxuICogdGhlIHJlc3VsdGluZyBhcmNoaXZlIGluIGJ5dGVzLiBUaGlzIGlzIHNldCB0byAxR0IgYnkgZGVmYXVsdCwgYmVjYXVzZVxuICogQXBwaXVtIGxpbWl0cyB0aGUgbWF4aW11bSBIVFRQIGJvZHkgc2l6ZSB0byAxR0IuIEFsc28sIHRoZSBOb2RlSlMgaGVhcFxuICogc2l6ZSBtdXN0IGJlIGVub3VnaCB0byBrZWVwIHRoZSByZXN1bHRpbmcgb2JqZWN0ICh1c3VhbGx5IHRoaXMgc2l6ZSBpc1xuICogbGltaXRlZCB0byAxLjQgR0IpXG4gKiBAcHJvcGVydHkge251bWJlcn0gbGV2ZWwgWzldIFRoZSBjb21wcmVzc2lvbiBsZXZlbC4gVGhlIG1heGltdW1cbiAqIGxldmVsIGlzIDkgKHRoZSBiZXN0IGNvbXByZXNzaW9uLCB3b3JzdCBwZXJmb3JtYW5jZSkuIFRoZSBtaW5pbXVtXG4gKiBjb21wcmVzc2lvbiBsZXZlbCBpcyAwIChubyBjb21wcmVzc2lvbikuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBjb250ZW50cyBvZiBsb2NhbCBkaXJlY3RvcnkgdG8gYW4gaW4tbWVtb3J5IC56aXAgYnVmZmVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNyY1BhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgZm9sZGVyIG9yIGZpbGUgYmVpbmcgemlwcGVkXG4gKiBAcGFyYW0ge1ppcE9wdGlvbnN9IG9wdHMgWmlwcGluZyBvcHRpb25zXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxCdWZmZXI+fSBaaXBwZWQgKGFuZCBlbmNvZGVkIGlmIGBlbmNvZGVUb0Jhc2U2NGAgaXMgdHJ1dGh5KVxuICogY29udGVudCBvZiB0aGUgc291cmNlIHBhdGggYXMgbWVtb3J5IGJ1ZmZlclxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSByZWFkaW5nIHRoZSBzb3VyY2VcbiAqIG9yIHRoZSBzb3VyY2UgaXMgdG9vIGJpZ1xuICovXG5hc3luYyBmdW5jdGlvbiB0b0luTWVtb3J5WmlwKHNyY1BhdGgsIG9wdHMgPSAvKiogQHR5cGUge1ppcE9wdGlvbnN9ICovICh7fSkpIHtcbiAgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKHNyY1BhdGgpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBmaWxlIG9yIGZvbGRlcjogJHtzcmNQYXRofWApO1xuICB9XG5cbiAgY29uc3Qge2lzTWV0ZXJlZCA9IHRydWUsIGVuY29kZVRvQmFzZTY0ID0gZmFsc2UsIG1heFNpemUgPSAxICogR2lCLCBsZXZlbCA9IDl9ID0gb3B0cztcbiAgY29uc3QgcmVzdWx0QnVmZmVycyA9IFtdO1xuICBsZXQgcmVzdWx0QnVmZmVyc1NpemUgPSAwO1xuICAvLyBDcmVhdGUgYSB3cml0YWJsZSBzdHJlYW0gdGhhdCB6aXAgYnVmZmVycyB3aWxsIGJlIHN0cmVhbWVkIHRvXG4gIGNvbnN0IHJlc3VsdFdyaXRlU3RyZWFtID0gbmV3IHN0cmVhbS5Xcml0YWJsZSh7XG4gICAgd3JpdGU6IChidWZmZXIsIGVuY29kaW5nLCBuZXh0KSA9PiB7XG4gICAgICByZXN1bHRCdWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICAgIHJlc3VsdEJ1ZmZlcnNTaXplICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICBpZiAobWF4U2l6ZSA+IDAgJiYgcmVzdWx0QnVmZmVyc1NpemUgPiBtYXhTaXplKSB7XG4gICAgICAgIHJlc3VsdFdyaXRlU3RyZWFtLmVtaXQoXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVGhlIHNpemUgb2YgdGhlIHJlc3VsdGluZyBgICtcbiAgICAgICAgICAgICAgYGFyY2hpdmUgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuICR7dG9SZWFkYWJsZVNpemVTdHJpbmcobWF4U2l6ZSl9YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG5leHQoKTtcbiAgICB9LFxuICB9KTtcblxuICAvLyBaaXAgJ3NyY0RpcicgYW5kIHN0cmVhbSBpdCB0byB0aGUgYWJvdmUgd3JpdGFibGUgc3RyZWFtXG4gIGNvbnN0IGFyY2hpdmUgPSBhcmNoaXZlcignemlwJywge1xuICAgIHpsaWI6IHtsZXZlbH0sXG4gIH0pO1xuICBsZXQgc3JjU2l6ZSA9IG51bGw7XG4gIGNvbnN0IGJhc2U2NEVuY29kZXJTdHJlYW0gPSBlbmNvZGVUb0Jhc2U2NCA/IG5ldyBCYXNlNjRFbmNvZGUoKSA6IG51bGw7XG4gIGNvbnN0IHJlc3VsdFdyaXRlU3RyZWFtUHJvbWlzZSA9IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICByZXN1bHRXcml0ZVN0cmVhbS5vbmNlKCdlcnJvcicsIChlKSA9PiB7XG4gICAgICBpZiAoYmFzZTY0RW5jb2RlclN0cmVhbSkge1xuICAgICAgICBhcmNoaXZlLnVucGlwZShiYXNlNjRFbmNvZGVyU3RyZWFtKTtcbiAgICAgICAgYmFzZTY0RW5jb2RlclN0cmVhbS51bnBpcGUocmVzdWx0V3JpdGVTdHJlYW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXJjaGl2ZS51bnBpcGUocmVzdWx0V3JpdGVTdHJlYW0pO1xuICAgICAgfVxuICAgICAgYXJjaGl2ZS5hYm9ydCgpO1xuICAgICAgYXJjaGl2ZS5kZXN0cm95KCk7XG4gICAgICByZWplY3QoZSk7XG4gICAgfSk7XG4gICAgcmVzdWx0V3JpdGVTdHJlYW0ub25jZSgnZmluaXNoJywgKCkgPT4ge1xuICAgICAgc3JjU2l6ZSA9IGFyY2hpdmUucG9pbnRlcigpO1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9KTtcbiAgY29uc3QgYXJjaGl2ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXJjaGl2ZS5vbmNlKCdmaW5pc2gnLCByZXNvbHZlKTtcbiAgICBhcmNoaXZlLm9uY2UoJ2Vycm9yJywgKGUpID0+IHJlamVjdChuZXcgRXJyb3IoYEZhaWxlZCB0byBhcmNoaXZlICcke3NyY1BhdGh9JzogJHtlLm1lc3NhZ2V9YCkpKTtcbiAgfSk7XG4gIGNvbnN0IHRpbWVyID0gaXNNZXRlcmVkID8gbmV3IFRpbWVyKCkuc3RhcnQoKSA6IG51bGw7XG4gIGlmICgoYXdhaXQgZnMuc3RhdChzcmNQYXRoKSkuaXNEaXJlY3RvcnkoKSkge1xuICAgIGFyY2hpdmUuZGlyZWN0b3J5KHNyY1BhdGgsIGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICBhcmNoaXZlLmZpbGUoc3JjUGF0aCwge1xuICAgICAgbmFtZTogcGF0aC5iYXNlbmFtZShzcmNQYXRoKSxcbiAgICB9KTtcbiAgfVxuICBpZiAoYmFzZTY0RW5jb2RlclN0cmVhbSkge1xuICAgIGFyY2hpdmUucGlwZShiYXNlNjRFbmNvZGVyU3RyZWFtKTtcbiAgICBiYXNlNjRFbmNvZGVyU3RyZWFtLnBpcGUocmVzdWx0V3JpdGVTdHJlYW0pO1xuICB9IGVsc2Uge1xuICAgIGFyY2hpdmUucGlwZShyZXN1bHRXcml0ZVN0cmVhbSk7XG4gIH1cbiAgYXJjaGl2ZS5maW5hbGl6ZSgpO1xuXG4gIC8vIFdhaXQgZm9yIHRoZSBzdHJlYW1zIHRvIGZpbmlzaFxuICBhd2FpdCBCLmFsbChbYXJjaGl2ZVN0cmVhbVByb21pc2UsIHJlc3VsdFdyaXRlU3RyZWFtUHJvbWlzZV0pO1xuXG4gIGlmICh0aW1lcikge1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGBaaXBwZWQgJHtlbmNvZGVUb0Jhc2U2NCA/ICdhbmQgYmFzZTY0LWVuY29kZWQgJyA6ICcnfWAgK1xuICAgICAgICBgJyR7cGF0aC5iYXNlbmFtZShzcmNQYXRoKX0nIGAgK1xuICAgICAgICAoc3JjU2l6ZSA/IGAoJHt0b1JlYWRhYmxlU2l6ZVN0cmluZyhzcmNTaXplKX0pIGAgOiAnJykgK1xuICAgICAgICBgaW4gJHt0aW1lci5nZXREdXJhdGlvbigpLmFzU2Vjb25kcy50b0ZpeGVkKDMpfXMgYCArXG4gICAgICAgIGAoY29tcHJlc3Npb24gbGV2ZWw6ICR7bGV2ZWx9KWBcbiAgICApO1xuICB9XG4gIC8vIFJldHVybiB0aGUgYXJyYXkgb2YgemlwIGJ1ZmZlcnMgY29uY2F0ZW5hdGVkIGludG8gb25lIGJ1ZmZlclxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChyZXN1bHRCdWZmZXJzKTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlIGlzIGEgdmFsaWQgWklQIGFyY2hpdmVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGggLSBGdWxsIHBhdGggdG8gdGhlIGZpbGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYSB2YWxpZCBaSVAgYXJjaGl2ZVxuICovXG5hc3luYyBmdW5jdGlvbiBhc3NlcnRWYWxpZFppcChmaWxlUGF0aCkge1xuICBpZiAoIShhd2FpdCBmcy5leGlzdHMoZmlsZVBhdGgpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGZpbGUgYXQgJyR7ZmlsZVBhdGh9JyBkb2VzIG5vdCBleGlzdGApO1xuICB9XG5cbiAgY29uc3Qge3NpemV9ID0gYXdhaXQgZnMuc3RhdChmaWxlUGF0aCk7XG4gIGlmIChzaXplIDwgNCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGZpbGUgYXQgJyR7ZmlsZVBhdGh9JyBpcyB0b28gc21hbGwgdG8gYmUgYSBaSVAgYXJjaGl2ZWApO1xuICB9XG4gIGNvbnN0IGZkID0gYXdhaXQgZnMub3BlbihmaWxlUGF0aCwgJ3InKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2MoWklQX01BR0lDLmxlbmd0aCk7XG4gICAgYXdhaXQgZnMucmVhZChmZCwgYnVmZmVyLCAwLCBaSVBfTUFHSUMubGVuZ3RoLCAwKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBidWZmZXIudG9TdHJpbmcoJ2FzY2lpJyk7XG4gICAgaWYgKHNpZ25hdHVyZSAhPT0gWklQX01BR0lDKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUgZmlsZSBzaWduYXR1cmUgJyR7c2lnbmF0dXJlfScgb2YgJyR7ZmlsZVBhdGh9JyBgICtcbiAgICAgICAgICBgaXMgbm90IGVxdWFsIHRvIHRoZSBleHBlY3RlZCBaSVAgYXJjaGl2ZSBzaWduYXR1cmUgJyR7WklQX01BR0lDfSdgXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5jbG9zZShmZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBaaXBDb21wcmVzc2lvbk9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZXZlbCBbOV0gLSBDb21wcmVzc2lvbiBsZXZlbCBpbiByYW5nZSAwLi45XG4gKiAoZ3JlYXRlciBudW1iZXJzIG1lYW4gYmV0dGVyIGNvbXByZXNzaW9uLCBidXQgbG9uZ2VyIHByb2Nlc3NpbmcgdGltZSlcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFppcFNvdXJjZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXR0ZXJuIFsnKipcXC8qJ10gLSBHTE9CIHBhdHRlcm4gZm9yIGNvbXByZXNzaW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY3dkIC0gVGhlIHNvdXJjZSByb290IGZvbGRlciAodGhlIHBhcmVudCBmb2xkZXIgb2ZcbiAqIHRoZSBkZXN0aW5hdGlvbiBmaWxlIGJ5IGRlZmF1bHQpXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbaWdub3JlXSAtIFRoZSBsaXN0IG9mIGlnbm9yZWQgcGF0dGVybnNcbiAqL1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJjaGl2ZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gZ2xvYiBwYXR0ZXJuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGRzdFBhdGggLSBUaGUgcmVzdWx0aW5nIGFyY2hpdmUgcGF0aFxuICogQHBhcmFtIHtaaXBTb3VyY2VPcHRpb25zfSBzcmMgLSBTb3VyY2Ugb3B0aW9uc1xuICogQHBhcmFtIHtaaXBDb21wcmVzc2lvbk9wdGlvbnN9IG9wdHMgLSBDb21wcmVzc2lvbiBvcHRpb25zXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGNyZWF0aW5nIHRoZSBhcmNoaXZlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHRvQXJjaGl2ZShcbiAgZHN0UGF0aCxcbiAgc3JjID0gLyoqIEB0eXBlIHtaaXBTb3VyY2VPcHRpb25zfSAqLyAoe30pLFxuICBvcHRzID0gLyoqIEB0eXBlIHtaaXBDb21wcmVzc2lvbk9wdGlvbnN9ICovICh7fSlcbikge1xuICBjb25zdCB7bGV2ZWwgPSA5fSA9IG9wdHM7XG4gIGNvbnN0IHtwYXR0ZXJuID0gJyoqLyonLCBjd2QgPSBwYXRoLmRpcm5hbWUoZHN0UGF0aCksIGlnbm9yZSA9IFtdfSA9IHNyYztcbiAgY29uc3QgYXJjaGl2ZSA9IGFyY2hpdmVyKCd6aXAnLCB7emxpYjoge2xldmVsfX0pO1xuICBjb25zdCBzdHJlYW0gPSBmcy5jcmVhdGVXcml0ZVN0cmVhbShkc3RQYXRoKTtcbiAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBhcmNoaXZlXG4gICAgICAuZ2xvYihwYXR0ZXJuLCB7XG4gICAgICAgIGN3ZCxcbiAgICAgICAgaWdub3JlLFxuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCByZWplY3QpXG4gICAgICAucGlwZShzdHJlYW0pO1xuICAgIHN0cmVhbVxuICAgICAgLm9uKCdlcnJvcicsIChlKSA9PiB7XG4gICAgICAgIGFyY2hpdmUudW5waXBlKHN0cmVhbSk7XG4gICAgICAgIGFyY2hpdmUuYWJvcnQoKTtcbiAgICAgICAgYXJjaGl2ZS5kZXN0cm95KCk7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH0pXG4gICAgICAub24oJ2ZpbmlzaCcsIHJlc29sdmUpO1xuICAgIGFyY2hpdmUuZmluYWxpemUoKTtcbiAgfSk7XG59XG5cbi8qKlxuICogRmluZHMgYW5kIG1lbW9pemVzIHRoZSBmdWxsIHBhdGggdG8gdGhlIGdpdmVuIGV4ZWN1dGFibGUuXG4gKiBSZWplY3RzIGlmIGl0IGlzIG5vdCBmb3VuZC5cbiAqL1xuY29uc3QgZ2V0RXhlY3V0YWJsZVBhdGggPSBfLm1lbW9pemUoXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSBGdWxsIFBhdGggdG8gdGhlIGV4ZWN1dGFibGVcbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIGdldEV4ZWN1dGFibGVQYXRoKGJpbmFyeU5hbWUpIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGF3YWl0IGZzLndoaWNoKGJpbmFyeU5hbWUpO1xuICAgIGxvZy5kZWJ1ZyhgRm91bmQgJyR7YmluYXJ5TmFtZX0nIGF0ICcke2Z1bGxQYXRofSdgKTtcbiAgICByZXR1cm4gZnVsbFBhdGg7XG4gIH1cbik7XG5cbmV4cG9ydCB7ZXh0cmFjdEFsbFRvLCByZWFkRW50cmllcywgdG9Jbk1lbW9yeVppcCwgX2V4dHJhY3RFbnRyeVRvLCBhc3NlcnRWYWxpZFppcCwgdG9BcmNoaXZlfTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZXh0cmFjdEFsbFRvLFxuICByZWFkRW50cmllcyxcbiAgdG9Jbk1lbW9yeVppcCxcbiAgYXNzZXJ0VmFsaWRaaXAsXG4gIHRvQXJjaGl2ZSxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0EsTUFBTUEsT0FBTyxHQUFHQyxpQkFBQSxDQUFFQyxTQUFGLENBQVlDLGNBQUEsQ0FBTUMsSUFBbEIsQ0FBaEI7O0FBSUEsTUFBTUMsUUFBUSxHQUFHSixpQkFBQSxDQUFFQyxTQUFGLENBQVlJLGVBQUEsQ0FBT0QsUUFBbkIsQ0FBakI7O0FBQ0EsTUFBTUUsU0FBUyxHQUFHLElBQWxCO0FBQ0EsTUFBTUMsSUFBSSxHQUFHLEtBQWI7QUFDQSxNQUFNQyxLQUFLLEdBQUcsS0FBZDtBQUNBLE1BQU1DLEtBQUssR0FBRyxLQUFkOztBQUdBLE1BQU1DLFlBQU4sQ0FBbUI7RUFFakJDLE9BQU87O0VBRVBDLFdBQVcsQ0FBQ0MsVUFBRCxFQUFhQyxJQUFJLEdBQUcsRUFBcEIsRUFBd0I7SUFDakMsS0FBS0MsT0FBTCxHQUFlRixVQUFmO0lBQ0EsS0FBS0MsSUFBTCxHQUFZQSxJQUFaO0lBQ0EsS0FBS0UsUUFBTCxHQUFnQixLQUFoQjtFQUNEOztFQUVEQyxlQUFlLENBQUNDLEtBQUQsRUFBUTtJQUNyQixPQUFPQyxlQUFBLENBQUVDLFFBQUYsQ0FBV0YsS0FBSyxDQUFDRyxRQUFqQixJQUNISCxLQUFLLENBQUNHLFFBQU4sQ0FBZUMsUUFBZixDQUF3QixLQUFLUixJQUFMLENBQVVTLGlCQUFsQyxDQURHLEdBRUhMLEtBQUssQ0FBQ0csUUFGVjtFQUdEOztFQUVZLE1BQVBHLE9BQU8sR0FBRztJQUNkLE1BQU07TUFBQ0MsR0FBRDtNQUFNRjtJQUFOLElBQTJCLEtBQUtULElBQXRDO0lBQ0EsS0FBS0gsT0FBTCxHQUFlLE1BQU1aLE9BQU8sQ0FBQyxLQUFLZ0IsT0FBTixFQUFlO01BQ3pDVyxXQUFXLEVBQUUsSUFENEI7TUFHekNDLGFBQWEsRUFBRSxDQUFDSjtJQUh5QixDQUFmLENBQTVCO0lBS0EsS0FBS1AsUUFBTCxHQUFnQixLQUFoQjtJQUVBLE9BQU8sSUFBSWhCLGlCQUFKLENBQU0sQ0FBQzRCLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtNQUNoQyxLQUFLbEIsT0FBTCxDQUFhbUIsRUFBYixDQUFnQixPQUFoQixFQUEwQkMsR0FBRCxJQUFTO1FBQ2hDLEtBQUtmLFFBQUwsR0FBZ0IsSUFBaEI7UUFDQWEsTUFBTSxDQUFDRSxHQUFELENBQU47TUFDRCxDQUhEO01BSUEsS0FBS3BCLE9BQUwsQ0FBYXFCLFNBQWI7TUFFQSxLQUFLckIsT0FBTCxDQUFhbUIsRUFBYixDQUFnQixPQUFoQixFQUF5QixNQUFNO1FBQzdCLElBQUksQ0FBQyxLQUFLZCxRQUFWLEVBQW9CO1VBQ2xCWSxPQUFPO1FBQ1I7TUFDRixDQUpEO01BTUEsS0FBS2pCLE9BQUwsQ0FBYW1CLEVBQWIsQ0FBZ0IsT0FBaEIsRUFBeUIsTUFBT1osS0FBUCxJQUFpQjtRQUN4QyxJQUFJLEtBQUtGLFFBQVQsRUFBbUI7VUFDakI7UUFDRDs7UUFFRCxNQUFNSyxRQUFRLEdBQUcsS0FBS0osZUFBTCxDQUFxQkMsS0FBckIsQ0FBakI7O1FBQ0EsSUFBSUcsUUFBUSxDQUFDWSxVQUFULENBQW9CLFdBQXBCLENBQUosRUFBc0M7VUFDcEMsS0FBS3RCLE9BQUwsQ0FBYXFCLFNBQWI7VUFDQTtRQUNEOztRQUVELE1BQU1FLE9BQU8sR0FBR0MsYUFBQSxDQUFLQyxPQUFMLENBQWFELGFBQUEsQ0FBS0UsSUFBTCxDQUFVWixHQUFWLEVBQWVKLFFBQWYsQ0FBYixDQUFoQjs7UUFDQSxJQUFJO1VBQ0YsTUFBTWlCLFlBQUEsQ0FBR0MsS0FBSCxDQUFTTCxPQUFULEVBQWtCO1lBQUNNLFNBQVMsRUFBRTtVQUFaLENBQWxCLENBQU47VUFFQSxNQUFNQyxnQkFBZ0IsR0FBRyxNQUFNSCxZQUFBLENBQUdJLFFBQUgsQ0FBWVIsT0FBWixDQUEvQjs7VUFDQSxNQUFNUyxlQUFlLEdBQUdSLGFBQUEsQ0FBS1MsUUFBTCxDQUFjbkIsR0FBZCxFQUFtQmdCLGdCQUFuQixDQUF4Qjs7VUFFQSxJQUFJRSxlQUFlLENBQUNFLEtBQWhCLENBQXNCVixhQUFBLENBQUtXLEdBQTNCLEVBQWdDQyxRQUFoQyxDQUF5QyxJQUF6QyxDQUFKLEVBQW9EO1lBQ2xELElBQUlDLEtBQUosQ0FDRyxzQkFBcUJQLGdCQUFpQixpQ0FBZ0NwQixRQUFTLEVBRGxGO1VBR0Q7O1VBRUQsTUFBTSxLQUFLNEIsWUFBTCxDQUFrQi9CLEtBQWxCLENBQU47VUFDQSxLQUFLUCxPQUFMLENBQWFxQixTQUFiO1FBQ0QsQ0FkRCxDQWNFLE9BQU9ELEdBQVAsRUFBWTtVQUNaLEtBQUtmLFFBQUwsR0FBZ0IsSUFBaEI7VUFDQSxLQUFLTCxPQUFMLENBQWF1QyxLQUFiO1VBQ0FyQixNQUFNLENBQUNFLEdBQUQsQ0FBTjtRQUNEO01BQ0YsQ0EvQkQ7SUFnQ0QsQ0E3Q00sQ0FBUDtFQThDRDs7RUFFaUIsTUFBWmtCLFlBQVksQ0FBQy9CLEtBQUQsRUFBUTtJQUN4QixJQUFJLEtBQUtGLFFBQVQsRUFBbUI7TUFDakI7SUFDRDs7SUFFRCxNQUFNO01BQUNTO0lBQUQsSUFBUSxLQUFLWCxJQUFuQjtJQUVBLE1BQU1PLFFBQVEsR0FBRyxLQUFLSixlQUFMLENBQXFCQyxLQUFyQixDQUFqQjs7SUFDQSxNQUFNaUMsSUFBSSxHQUFHaEIsYUFBQSxDQUFLRSxJQUFMLENBQVVaLEdBQVYsRUFBZUosUUFBZixDQUFiOztJQUdBLE1BQU0rQixJQUFJLEdBQUlsQyxLQUFLLENBQUNtQyxzQkFBTixJQUFnQyxFQUFqQyxHQUF1QyxNQUFwRDtJQUVBLE1BQU1DLFNBQVMsR0FBRyxDQUFDRixJQUFJLEdBQUc3QyxJQUFSLE1BQWtCRSxLQUFwQztJQUNBLE1BQU04QyxLQUFLLEdBQ1QsQ0FBQ0gsSUFBSSxHQUFHN0MsSUFBUixNQUFrQkMsS0FBbEIsSUFFQWEsUUFBUSxDQUFDbUMsUUFBVCxDQUFrQixHQUFsQixDQUZBLElBS0N0QyxLQUFLLENBQUN1QyxhQUFOLElBQXVCLENBQXZCLEtBQTZCLENBQTdCLElBQWtDdkMsS0FBSyxDQUFDbUMsc0JBQU4sS0FBaUMsRUFOdEU7SUFPQSxNQUFNSyxRQUFRLEdBQUcsS0FBS0MsZ0JBQUwsQ0FBc0JQLElBQXRCLEVBQTRCRyxLQUE1QixJQUFxQyxLQUF0RDtJQUVBLE1BQU1yQixPQUFPLEdBQUdxQixLQUFLLEdBQUdKLElBQUgsR0FBVWhCLGFBQUEsQ0FBS0MsT0FBTCxDQUFhZSxJQUFiLENBQS9CO0lBQ0EsTUFBTVMsWUFBWSxHQUFHO01BQUNwQixTQUFTLEVBQUU7SUFBWixDQUFyQjs7SUFDQSxJQUFJZSxLQUFKLEVBQVc7TUFDVEssWUFBWSxDQUFDUixJQUFiLEdBQW9CTSxRQUFwQjtJQUNEOztJQUNELE1BQU1wQixZQUFBLENBQUdDLEtBQUgsQ0FBU0wsT0FBVCxFQUFrQjBCLFlBQWxCLENBQU47O0lBQ0EsSUFBSUwsS0FBSixFQUFXO01BQ1Q7SUFDRDs7SUFHRCxNQUFNTSxjQUFjLEdBQUc3RCxpQkFBQSxDQUFFQyxTQUFGLENBQVksS0FBS1UsT0FBTCxDQUFha0QsY0FBYixDQUE0QkMsSUFBNUIsQ0FBaUMsS0FBS25ELE9BQXRDLENBQVosQ0FBdkI7O0lBQ0EsTUFBTW9ELFVBQVUsR0FBRyxNQUFNRixjQUFjLENBQUMzQyxLQUFELENBQXZDOztJQUNBLElBQUlvQyxTQUFKLEVBQWU7TUFDYixNQUFNVSxJQUFJLEdBQUcsTUFBTSxJQUFBQyxrQkFBQSxFQUFVRixVQUFWLENBQW5CO01BQ0EsTUFBTXpCLFlBQUEsQ0FBRzRCLE9BQUgsQ0FBV0YsSUFBWCxFQUFpQmIsSUFBakIsQ0FBTjtJQUNELENBSEQsTUFHTztNQUNMLE1BQU0vQyxRQUFRLENBQUMyRCxVQUFELEVBQWF6QixZQUFBLENBQUc2QixpQkFBSCxDQUFxQmhCLElBQXJCLEVBQTJCO1FBQUNDLElBQUksRUFBRU07TUFBUCxDQUEzQixDQUFiLENBQWQ7SUFDRDtFQUNGOztFQUVEQyxnQkFBZ0IsQ0FBQ1MsU0FBRCxFQUFZYixLQUFaLEVBQW1CO0lBQ2pDLE1BQU07TUFBQ2MsY0FBRDtNQUFpQkM7SUFBakIsSUFBb0MsS0FBS3hELElBQS9DO0lBRUEsSUFBSXNDLElBQUksR0FBR2dCLFNBQVg7O0lBRUEsSUFBSWhCLElBQUksS0FBSyxDQUFiLEVBQWdCO01BQ2QsSUFBSUcsS0FBSixFQUFXO1FBQ1QsSUFBSWMsY0FBSixFQUFvQjtVQUNsQmpCLElBQUksR0FBR21CLFFBQVEsQ0FBQ0YsY0FBRCxFQUFpQixFQUFqQixDQUFmO1FBQ0Q7O1FBRUQsSUFBSSxDQUFDakIsSUFBTCxFQUFXO1VBQ1RBLElBQUksR0FBRyxLQUFQO1FBQ0Q7TUFDRixDQVJELE1BUU87UUFDTCxJQUFJa0IsZUFBSixFQUFxQjtVQUNuQmxCLElBQUksR0FBR21CLFFBQVEsQ0FBQ0QsZUFBRCxFQUFrQixFQUFsQixDQUFmO1FBQ0Q7O1FBRUQsSUFBSSxDQUFDbEIsSUFBTCxFQUFXO1VBQ1RBLElBQUksR0FBRyxLQUFQO1FBQ0Q7TUFDRjtJQUNGOztJQUVELE9BQU9BLElBQVA7RUFDRDs7QUEvSWdCOztBQW9LbkIsZUFBZW9CLFlBQWYsQ0FBNEJDLFdBQTVCLEVBQXlDdkMsT0FBekMsRUFBa0RwQixJQUFJLEdBQXFDLEVBQTNGLEVBQWdHO0VBQzlGLElBQUksQ0FBQ3FCLGFBQUEsQ0FBS3VDLFVBQUwsQ0FBZ0J4QyxPQUFoQixDQUFMLEVBQStCO0lBQzdCLE1BQU0sSUFBSWMsS0FBSixDQUFXLGdCQUFlZCxPQUFRLDhCQUFsQyxDQUFOO0VBQ0Q7O0VBRUQsTUFBTUksWUFBQSxDQUFHQyxLQUFILENBQVNMLE9BQVQsRUFBa0I7SUFBQ00sU0FBUyxFQUFFO0VBQVosQ0FBbEIsQ0FBTjtFQUNBLE1BQU1mLEdBQUcsR0FBRyxNQUFNYSxZQUFBLENBQUdJLFFBQUgsQ0FBWVIsT0FBWixDQUFsQjs7RUFDQSxJQUFJcEIsSUFBSSxDQUFDNkQsY0FBVCxFQUF5QjtJQUN2QixJQUFJO01BQ0YsTUFBTUMsc0JBQXNCLENBQUNILFdBQUQsRUFBY2hELEdBQWQsQ0FBNUI7TUFDQTtJQUNELENBSEQsQ0FHRSxPQUFPTSxHQUFQLEVBQVk7TUFDWjhDLGVBQUEsQ0FBSUMsSUFBSixDQUFTLHNDQUFULEVBQWlEL0MsR0FBRyxDQUFDZ0QsTUFBSixJQUFjaEQsR0FBRyxDQUFDaUQsT0FBbkU7SUFDRDtFQUNGOztFQUNELE1BQU1DLFNBQVMsR0FBRyxJQUFJdkUsWUFBSixDQUFpQitELFdBQWpCLEVBQThCLEVBQzlDLEdBQUczRCxJQUQyQztJQUU5Q1c7RUFGOEMsQ0FBOUIsQ0FBbEI7RUFJQSxNQUFNd0QsU0FBUyxDQUFDekQsT0FBVixFQUFOO0FBQ0Q7O0FBV0QsZUFBZW9ELHNCQUFmLENBQXNDSCxXQUF0QyxFQUFtRHZDLE9BQW5ELEVBQTREO0VBQzFELE1BQU1nRCxhQUFhLEdBQUcsSUFBQUMsaUJBQUEsR0FBdEI7RUFDQSxJQUFJQyxjQUFKOztFQUNBLElBQUk7SUFDRkEsY0FBYyxHQUFHLE1BQU1DLGlCQUFpQixDQUFDSCxhQUFhLEdBQUcsZ0JBQUgsR0FBc0IsT0FBcEMsQ0FBeEM7RUFDRCxDQUZELENBRUUsT0FBT0ksQ0FBUCxFQUFVO0lBQ1YsTUFBTSxJQUFJdEMsS0FBSixDQUFVLDZCQUFWLENBQU47RUFDRDs7RUFFRCxJQUFJa0MsYUFBSixFQUFtQjtJQUVqQixNQUFNLElBQUFLLGtCQUFBLEVBQUtILGNBQUwsRUFBcUIsQ0FDekIsVUFEeUIsRUFFekIsZ0JBRnlCLEVBR3pCLGNBSHlCLEVBSXpCWCxXQUp5QixFQUt6QixrQkFMeUIsRUFNekJ2QyxPQU55QixFQU96QixRQVB5QixDQUFyQixDQUFOO0VBU0QsQ0FYRCxNQVdPO0lBSUwsTUFBTSxJQUFBcUQsa0JBQUEsRUFBS0gsY0FBTCxFQUFxQixDQUFDLElBQUQsRUFBTyxJQUFQLEVBQWFYLFdBQWIsRUFBMEIsSUFBMUIsRUFBZ0N2QyxPQUFoQyxDQUFyQixDQUFOO0VBQ0Q7QUFDRjs7QUFTRCxlQUFlc0QsZUFBZixDQUErQkMsT0FBL0IsRUFBd0N2RSxLQUF4QyxFQUErQ2dCLE9BQS9DLEVBQXdEO0VBQ3RELE1BQU13RCxPQUFPLEdBQUd2RCxhQUFBLENBQUtQLE9BQUwsQ0FBYU0sT0FBYixFQUFzQmhCLEtBQUssQ0FBQ0csUUFBNUIsQ0FBaEI7O0VBR0EsSUFBSSxNQUFNc0UsSUFBTixDQUFXekUsS0FBSyxDQUFDRyxRQUFqQixDQUFKLEVBQWdDO0lBQzlCLElBQUksRUFBRSxNQUFNaUIsWUFBQSxDQUFHc0QsTUFBSCxDQUFVRixPQUFWLENBQVIsQ0FBSixFQUFpQztNQUMvQixNQUFNcEQsWUFBQSxDQUFHdUQsTUFBSCxDQUFVSCxPQUFWLENBQU47SUFDRDs7SUFDRDtFQUNELENBTEQsTUFLTyxJQUFJLEVBQUUsTUFBTXBELFlBQUEsQ0FBR3NELE1BQUgsQ0FBVXpELGFBQUEsQ0FBS0MsT0FBTCxDQUFhc0QsT0FBYixDQUFWLENBQVIsQ0FBSixFQUErQztJQUNwRCxNQUFNcEQsWUFBQSxDQUFHdUQsTUFBSCxDQUFVMUQsYUFBQSxDQUFLQyxPQUFMLENBQWFzRCxPQUFiLENBQVYsQ0FBTjtFQUNEOztFQUdELE1BQU1JLFdBQVcsR0FBRyxJQUFBM0IscUJBQUEsRUFBa0J1QixPQUFsQixFQUEyQjtJQUFDSyxLQUFLLEVBQUU7RUFBUixDQUEzQixDQUFwQjtFQUNBLE1BQU1DLGtCQUFrQixHQUFHLElBQUloRyxpQkFBSixDQUFNLENBQUM0QixPQUFELEVBQVVDLE1BQVYsS0FBcUI7SUFDcERpRSxXQUFXLENBQUNHLElBQVosQ0FBaUIsUUFBakIsRUFBMkJyRSxPQUEzQjtJQUNBa0UsV0FBVyxDQUFDRyxJQUFaLENBQWlCLE9BQWpCLEVBQTBCcEUsTUFBMUI7RUFDRCxDQUgwQixDQUEzQjtFQU9BLE1BQU1xRSxhQUFhLEdBQUcsTUFBTSxJQUFJbEcsaUJBQUosQ0FBTSxDQUFDNEIsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0lBQ3JENEQsT0FBTyxDQUFDNUIsY0FBUixDQUF1QjNDLEtBQXZCLEVBQThCLENBQUNhLEdBQUQsRUFBTWdDLFVBQU4sS0FBc0JoQyxHQUFHLEdBQUdGLE1BQU0sQ0FBQ0UsR0FBRCxDQUFULEdBQWlCSCxPQUFPLENBQUNtQyxVQUFELENBQS9FO0VBQ0QsQ0FGMkIsQ0FBNUI7RUFHQSxNQUFNb0Msb0JBQW9CLEdBQUcsSUFBSW5HLGlCQUFKLENBQU0sQ0FBQzRCLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtJQUN0RHFFLGFBQWEsQ0FBQ0QsSUFBZCxDQUFtQixLQUFuQixFQUEwQnJFLE9BQTFCO0lBQ0FzRSxhQUFhLENBQUNELElBQWQsQ0FBbUIsT0FBbkIsRUFBNEJwRSxNQUE1QjtFQUNELENBSDRCLENBQTdCO0VBSUFxRSxhQUFhLENBQUNFLElBQWQsQ0FBbUJOLFdBQW5CO0VBR0EsT0FBTyxNQUFNOUYsaUJBQUEsQ0FBRXFHLEdBQUYsQ0FBTSxDQUFDRixvQkFBRCxFQUF1Qkgsa0JBQXZCLENBQU4sQ0FBYjtBQUNEOztBQWtCRCxlQUFlTSxXQUFmLENBQTJCN0IsV0FBM0IsRUFBd0M4QixPQUF4QyxFQUFpRDtFQUUvQyxNQUFNNUYsT0FBTyxHQUFHLE1BQU1aLE9BQU8sQ0FBQzBFLFdBQUQsRUFBYztJQUFDL0MsV0FBVyxFQUFFO0VBQWQsQ0FBZCxDQUE3QjtFQUNBLE1BQU15RSxvQkFBb0IsR0FBRyxJQUFJbkcsaUJBQUosQ0FBTSxDQUFDNEIsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0lBQ3REbEIsT0FBTyxDQUFDc0YsSUFBUixDQUFhLEtBQWIsRUFBb0JyRSxPQUFwQjtJQUNBakIsT0FBTyxDQUFDc0YsSUFBUixDQUFhLE9BQWIsRUFBc0JwRSxNQUF0QjtJQUdBbEIsT0FBTyxDQUFDbUIsRUFBUixDQUFXLE9BQVgsRUFBb0IsTUFBT1osS0FBUCxJQUFpQjtNQUNuQyxNQUFNc0YsR0FBRyxHQUFHLE1BQU1ELE9BQU8sQ0FBQztRQUN4QnJGLEtBRHdCO1FBRXhCdUYsY0FBYyxFQUFFLE1BQU92RSxPQUFQLElBQW1CLE1BQU1zRCxlQUFlLENBQUM3RSxPQUFELEVBQVVPLEtBQVYsRUFBaUJnQixPQUFqQjtNQUZoQyxDQUFELENBQXpCOztNQUlBLElBQUlzRSxHQUFHLEtBQUssS0FBWixFQUFtQjtRQUNqQixPQUFPN0YsT0FBTyxDQUFDK0YsSUFBUixDQUFhLEtBQWIsQ0FBUDtNQUNEOztNQUNEL0YsT0FBTyxDQUFDcUIsU0FBUjtJQUNELENBVEQ7RUFVRCxDQWY0QixDQUE3QjtFQWdCQXJCLE9BQU8sQ0FBQ3FCLFNBQVI7RUFHQSxPQUFPLE1BQU1tRSxvQkFBYjtBQUNEOztBQTRCRCxlQUFlUSxhQUFmLENBQTZCQyxPQUE3QixFQUFzQzlGLElBQUksR0FBOEIsRUFBeEUsRUFBNkU7RUFDM0UsSUFBSSxFQUFFLE1BQU13QixZQUFBLENBQUdzRCxNQUFILENBQVVnQixPQUFWLENBQVIsQ0FBSixFQUFpQztJQUMvQixNQUFNLElBQUk1RCxLQUFKLENBQVcsMkJBQTBCNEQsT0FBUSxFQUE3QyxDQUFOO0VBQ0Q7O0VBRUQsTUFBTTtJQUFDQyxTQUFTLEdBQUcsSUFBYjtJQUFtQkMsY0FBYyxHQUFHLEtBQXBDO0lBQTJDQyxPQUFPLEdBQUcsSUFBSUMsU0FBekQ7SUFBOERDLEtBQUssR0FBRztFQUF0RSxJQUEyRW5HLElBQWpGO0VBQ0EsTUFBTW9HLGFBQWEsR0FBRyxFQUF0QjtFQUNBLElBQUlDLGlCQUFpQixHQUFHLENBQXhCO0VBRUEsTUFBTUMsaUJBQWlCLEdBQUcsSUFBSS9HLGVBQUEsQ0FBT2dILFFBQVgsQ0FBb0I7SUFDNUNDLEtBQUssRUFBRSxDQUFDQyxNQUFELEVBQVNDLFFBQVQsRUFBbUJDLElBQW5CLEtBQTRCO01BQ2pDUCxhQUFhLENBQUNRLElBQWQsQ0FBbUJILE1BQW5CO01BQ0FKLGlCQUFpQixJQUFJSSxNQUFNLENBQUNJLE1BQTVCOztNQUNBLElBQUlaLE9BQU8sR0FBRyxDQUFWLElBQWVJLGlCQUFpQixHQUFHSixPQUF2QyxFQUFnRDtRQUM5Q0ssaUJBQWlCLENBQUNWLElBQWxCLENBQ0UsT0FERixFQUVFLElBQUkxRCxLQUFKLENBQ0csNEJBQUQsR0FDRyxvQ0FBbUMsSUFBQTRFLDBCQUFBLEVBQXFCYixPQUFyQixDQUE4QixFQUZ0RSxDQUZGO01BT0Q7O01BQ0RVLElBQUk7SUFDTDtFQWQyQyxDQUFwQixDQUExQjtFQWtCQSxNQUFNSSxPQUFPLEdBQUcsSUFBQUMsaUJBQUEsRUFBUyxLQUFULEVBQWdCO0lBQzlCQyxJQUFJLEVBQUU7TUFBQ2Q7SUFBRDtFQUR3QixDQUFoQixDQUFoQjtFQUdBLElBQUllLE9BQU8sR0FBRyxJQUFkO0VBQ0EsTUFBTUMsbUJBQW1CLEdBQUduQixjQUFjLEdBQUcsSUFBSW9CLDBCQUFKLEVBQUgsR0FBd0IsSUFBbEU7RUFDQSxNQUFNQyx3QkFBd0IsR0FBRyxJQUFJbkksaUJBQUosQ0FBTSxDQUFDNEIsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0lBQzFEdUYsaUJBQWlCLENBQUNuQixJQUFsQixDQUF1QixPQUF2QixFQUFpQ1gsQ0FBRCxJQUFPO01BQ3JDLElBQUkyQyxtQkFBSixFQUF5QjtRQUN2QkosT0FBTyxDQUFDTyxNQUFSLENBQWVILG1CQUFmO1FBQ0FBLG1CQUFtQixDQUFDRyxNQUFwQixDQUEyQmhCLGlCQUEzQjtNQUNELENBSEQsTUFHTztRQUNMUyxPQUFPLENBQUNPLE1BQVIsQ0FBZWhCLGlCQUFmO01BQ0Q7O01BQ0RTLE9BQU8sQ0FBQ1EsS0FBUjtNQUNBUixPQUFPLENBQUNTLE9BQVI7TUFDQXpHLE1BQU0sQ0FBQ3lELENBQUQsQ0FBTjtJQUNELENBVkQ7SUFXQThCLGlCQUFpQixDQUFDbkIsSUFBbEIsQ0FBdUIsUUFBdkIsRUFBaUMsTUFBTTtNQUNyQytCLE9BQU8sR0FBR0gsT0FBTyxDQUFDVSxPQUFSLEVBQVY7TUFDQTNHLE9BQU87SUFDUixDQUhEO0VBSUQsQ0FoQmdDLENBQWpDO0VBaUJBLE1BQU00RyxvQkFBb0IsR0FBRyxJQUFJeEksaUJBQUosQ0FBTSxDQUFDNEIsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0lBQ3REZ0csT0FBTyxDQUFDNUIsSUFBUixDQUFhLFFBQWIsRUFBdUJyRSxPQUF2QjtJQUNBaUcsT0FBTyxDQUFDNUIsSUFBUixDQUFhLE9BQWIsRUFBdUJYLENBQUQsSUFBT3pELE1BQU0sQ0FBQyxJQUFJbUIsS0FBSixDQUFXLHNCQUFxQjRELE9BQVEsTUFBS3RCLENBQUMsQ0FBQ04sT0FBUSxFQUF2RCxDQUFELENBQW5DO0VBQ0QsQ0FINEIsQ0FBN0I7RUFJQSxNQUFNeUQsS0FBSyxHQUFHNUIsU0FBUyxHQUFHLElBQUk2QixlQUFKLEdBQVlDLEtBQVosRUFBSCxHQUF5QixJQUFoRDs7RUFDQSxJQUFJLENBQUMsTUFBTXJHLFlBQUEsQ0FBR3NHLElBQUgsQ0FBUWhDLE9BQVIsQ0FBUCxFQUF5QmlDLFdBQXpCLEVBQUosRUFBNEM7SUFDMUNoQixPQUFPLENBQUNpQixTQUFSLENBQWtCbEMsT0FBbEIsRUFBMkIsS0FBM0I7RUFDRCxDQUZELE1BRU87SUFDTGlCLE9BQU8sQ0FBQ2tCLElBQVIsQ0FBYW5DLE9BQWIsRUFBc0I7TUFDcEJvQyxJQUFJLEVBQUU3RyxhQUFBLENBQUs4RyxRQUFMLENBQWNyQyxPQUFkO0lBRGMsQ0FBdEI7RUFHRDs7RUFDRCxJQUFJcUIsbUJBQUosRUFBeUI7SUFDdkJKLE9BQU8sQ0FBQ3pCLElBQVIsQ0FBYTZCLG1CQUFiO0lBQ0FBLG1CQUFtQixDQUFDN0IsSUFBcEIsQ0FBeUJnQixpQkFBekI7RUFDRCxDQUhELE1BR087SUFDTFMsT0FBTyxDQUFDekIsSUFBUixDQUFhZ0IsaUJBQWI7RUFDRDs7RUFDRFMsT0FBTyxDQUFDcUIsUUFBUjtFQUdBLE1BQU1sSixpQkFBQSxDQUFFcUcsR0FBRixDQUFNLENBQUNtQyxvQkFBRCxFQUF1Qkwsd0JBQXZCLENBQU4sQ0FBTjs7RUFFQSxJQUFJTSxLQUFKLEVBQVc7SUFDVDVELGVBQUEsQ0FBSXNFLEtBQUosQ0FDRyxVQUFTckMsY0FBYyxHQUFHLHFCQUFILEdBQTJCLEVBQUcsRUFBdEQsR0FDRyxJQUFHM0UsYUFBQSxDQUFLOEcsUUFBTCxDQUFjckMsT0FBZCxDQUF1QixJQUQ3QixJQUVHb0IsT0FBTyxHQUFJLElBQUcsSUFBQUosMEJBQUEsRUFBcUJJLE9BQXJCLENBQThCLElBQXJDLEdBQTJDLEVBRnJELElBR0csTUFBS1MsS0FBSyxDQUFDVyxXQUFOLEdBQW9CQyxTQUFwQixDQUE4QkMsT0FBOUIsQ0FBc0MsQ0FBdEMsQ0FBeUMsSUFIakQsR0FJRyx1QkFBc0JyQyxLQUFNLEdBTGpDO0VBT0Q7O0VBRUQsT0FBT3NDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjdEMsYUFBZCxDQUFQO0FBQ0Q7O0FBUUQsZUFBZXVDLGNBQWYsQ0FBOEJDLFFBQTlCLEVBQXdDO0VBQ3RDLElBQUksRUFBRSxNQUFNcEgsWUFBQSxDQUFHc0QsTUFBSCxDQUFVOEQsUUFBVixDQUFSLENBQUosRUFBa0M7SUFDaEMsTUFBTSxJQUFJMUcsS0FBSixDQUFXLGdCQUFlMEcsUUFBUyxrQkFBbkMsQ0FBTjtFQUNEOztFQUVELE1BQU07SUFBQ0M7RUFBRCxJQUFTLE1BQU1ySCxZQUFBLENBQUdzRyxJQUFILENBQVFjLFFBQVIsQ0FBckI7O0VBQ0EsSUFBSUMsSUFBSSxHQUFHLENBQVgsRUFBYztJQUNaLE1BQU0sSUFBSTNHLEtBQUosQ0FBVyxnQkFBZTBHLFFBQVMsb0NBQW5DLENBQU47RUFDRDs7RUFDRCxNQUFNRSxFQUFFLEdBQUcsTUFBTXRILFlBQUEsQ0FBR25DLElBQUgsQ0FBUXVKLFFBQVIsRUFBa0IsR0FBbEIsQ0FBakI7O0VBQ0EsSUFBSTtJQUNGLE1BQU1uQyxNQUFNLEdBQUdnQyxNQUFNLENBQUNNLEtBQVAsQ0FBYXZKLFNBQVMsQ0FBQ3FILE1BQXZCLENBQWY7SUFDQSxNQUFNckYsWUFBQSxDQUFHd0gsSUFBSCxDQUFRRixFQUFSLEVBQVlyQyxNQUFaLEVBQW9CLENBQXBCLEVBQXVCakgsU0FBUyxDQUFDcUgsTUFBakMsRUFBeUMsQ0FBekMsQ0FBTjtJQUNBLE1BQU1vQyxTQUFTLEdBQUd4QyxNQUFNLENBQUNqRyxRQUFQLENBQWdCLE9BQWhCLENBQWxCOztJQUNBLElBQUl5SSxTQUFTLEtBQUt6SixTQUFsQixFQUE2QjtNQUMzQixNQUFNLElBQUkwQyxLQUFKLENBQ0gsdUJBQXNCK0csU0FBVSxTQUFRTCxRQUFTLElBQWxELEdBQ0csdURBQXNEcEosU0FBVSxHQUYvRCxDQUFOO0lBSUQ7O0lBQ0QsT0FBTyxJQUFQO0VBQ0QsQ0FYRCxTQVdVO0lBQ1IsTUFBTWdDLFlBQUEsQ0FBR1ksS0FBSCxDQUFTMEcsRUFBVCxDQUFOO0VBQ0Q7QUFDRjs7QUF3QkQsZUFBZUksU0FBZixDQUNFdEUsT0FERixFQUVFdUUsR0FBRyxHQUFvQyxFQUZ6QyxFQUdFbkosSUFBSSxHQUF5QyxFQUgvQyxFQUlFO0VBQ0EsTUFBTTtJQUFDbUcsS0FBSyxHQUFHO0VBQVQsSUFBY25HLElBQXBCO0VBQ0EsTUFBTTtJQUFDb0osT0FBTyxHQUFHLE1BQVg7SUFBbUJDLEdBQUcsR0FBR2hJLGFBQUEsQ0FBS0MsT0FBTCxDQUFhc0QsT0FBYixDQUF6QjtJQUFnRDBFLE1BQU0sR0FBRztFQUF6RCxJQUErREgsR0FBckU7RUFDQSxNQUFNcEMsT0FBTyxHQUFHLElBQUFDLGlCQUFBLEVBQVMsS0FBVCxFQUFnQjtJQUFDQyxJQUFJLEVBQUU7TUFBQ2Q7SUFBRDtFQUFQLENBQWhCLENBQWhCOztFQUNBLE1BQU01RyxNQUFNLEdBQUdpQyxZQUFBLENBQUc2QixpQkFBSCxDQUFxQnVCLE9BQXJCLENBQWY7O0VBQ0EsT0FBTyxNQUFNLElBQUkxRixpQkFBSixDQUFNLENBQUM0QixPQUFELEVBQVVDLE1BQVYsS0FBcUI7SUFDdENnRyxPQUFPLENBQ0p3QyxJQURILENBQ1FILE9BRFIsRUFDaUI7TUFDYkMsR0FEYTtNQUViQztJQUZhLENBRGpCLEVBS0d0SSxFQUxILENBS00sT0FMTixFQUtlRCxNQUxmLEVBTUd1RSxJQU5ILENBTVEvRixNQU5SO0lBT0FBLE1BQU0sQ0FDSHlCLEVBREgsQ0FDTSxPQUROLEVBQ2dCd0QsQ0FBRCxJQUFPO01BQ2xCdUMsT0FBTyxDQUFDTyxNQUFSLENBQWUvSCxNQUFmO01BQ0F3SCxPQUFPLENBQUNRLEtBQVI7TUFDQVIsT0FBTyxDQUFDUyxPQUFSO01BQ0F6RyxNQUFNLENBQUN5RCxDQUFELENBQU47SUFDRCxDQU5ILEVBT0d4RCxFQVBILENBT00sUUFQTixFQU9nQkYsT0FQaEI7SUFRQWlHLE9BQU8sQ0FBQ3FCLFFBQVI7RUFDRCxDQWpCWSxDQUFiO0FBa0JEOztBQU1ELE1BQU03RCxpQkFBaUIsR0FBR2xFLGVBQUEsQ0FBRW1KLE9BQUYsQ0FJeEIsZUFBZWpGLGlCQUFmLENBQWlDa0YsVUFBakMsRUFBNkM7RUFDM0MsTUFBTUMsUUFBUSxHQUFHLE1BQU1sSSxZQUFBLENBQUdtSSxLQUFILENBQVNGLFVBQVQsQ0FBdkI7O0VBQ0ExRixlQUFBLENBQUlzRSxLQUFKLENBQVcsVUFBU29CLFVBQVcsU0FBUUMsUUFBUyxHQUFoRDs7RUFDQSxPQUFPQSxRQUFQO0FBQ0QsQ0FSdUIsQ0FBMUI7O2VBWWU7RUFDYmhHLFlBRGE7RUFFYjhCLFdBRmE7RUFHYkssYUFIYTtFQUliOEMsY0FKYTtFQUtiTztBQUxhLEMifQ==