Socket
Socket
Sign inDemoInstall

appium-support

Package Overview
Dependencies
195
Maintainers
7
Versions
145
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 2.51.2 to 2.52.0

2

build/lib/log-internal.js

@@ -146,2 +146,2 @@ "use strict";

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2ctaW50ZXJuYWwuanMiXSwibmFtZXMiOlsiREVGQVVMVF9SRVBMQUNFUiIsIlNlY3VyZVZhbHVlc1ByZXByb2Nlc3NvciIsImNvbnN0cnVjdG9yIiwiX3J1bGVzIiwicnVsZXMiLCJwYXJzZVJ1bGUiLCJydWxlIiwicmFpc2VFcnJvciIsIm1zZyIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsInBhdHRlcm4iLCJyZXBsYWNlciIsImZsYWdzIiwiXyIsImlzU3RyaW5nIiwibGVuZ3RoIiwiZXNjYXBlUmVnRXhwIiwiaXNQbGFpbk9iamVjdCIsImhhcyIsInRleHQiLCJmbGFnIiwiaW5jbHVkZXMiLCJwdXNoIiwidW5pcSIsIlJlZ0V4cCIsImpvaW4iLCJlIiwibWVzc2FnZSIsImxvYWRSdWxlcyIsInNvdXJjZSIsImlzQXJyYXkiLCJmcyIsImV4aXN0cyIsInBhcnNlIiwicmVhZEZpbGUiLCJpc3N1ZXMiLCJwcmVwcm9jZXNzIiwic3RyIiwicmVzdWx0IiwicmVwbGFjZSIsIlNFQ1VSRV9WQUxVRVNfUFJFUFJPQ0VTU09SIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVBLE1BQU1BLGdCQUFnQixHQUFHLFlBQXpCOztBQVNBLE1BQU1DLHdCQUFOLENBQStCO0FBQzdCQyxFQUFBQSxXQUFXLEdBQUk7QUFDYixTQUFLQyxNQUFMLEdBQWMsRUFBZDtBQUNEOztBQU1RLE1BQUxDLEtBQUssR0FBSTtBQUNYLFdBQU8sS0FBS0QsTUFBWjtBQUNEOztBQXVCREUsRUFBQUEsU0FBUyxDQUFFQyxJQUFGLEVBQVE7QUFDZixVQUFNQyxVQUFVLEdBQUlDLEdBQUQsSUFBUztBQUMxQixZQUFNLElBQUlDLEtBQUosQ0FBVyxHQUFFQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUwsSUFBZixDQUFxQixPQUFNRSxHQUFJLEVBQTVDLENBQU47QUFDRCxLQUZEOztBQUlBLFFBQUlJLE9BQUo7QUFDQSxRQUFJQyxRQUFRLEdBQUdiLGdCQUFmO0FB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LEVBQWdDO0FBQzlCcUMsTUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUNDLE9BQVAsQ0FBZW5DLElBQUksQ0FBQ00sT0FBcEIsRUFBNkJOLElBQUksQ0FBQ08sUUFBbEMsQ0FBVDtBQUNEOztBQUNELFdBQU8yQixNQUFQO0FBQ0Q7O0FBcEo0Qjs7O0FBdUovQixNQUFNRSwwQkFBMEIsR0FBRyxJQUFJekMsd0JBQUosRUFBbkM7O2VBR2V5QywwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICcuL2ZzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IERFRkFVTFRfUkVQTEFDRVIgPSAnKipTRUNVUkUqKic7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2VjdXJlVmFsdWVQcmVwcm9jZXNzaW5nUnVsZVxuICogQHByb3BlcnR5IHtSZWdFeHB9IHBhdHRlcm4gVGhlIHBhcnNlZCBwYXR0ZXJuIHdoaWNoIGlzIGdvaW5nIHRvIGJlIHVzZWQgZm9yIHJlcGxhY2VtZW50XG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmVwbGFjZXIgW0RFRkFVTFRfU0VDVVJFX1JFUExBQ0VSXSBUaGUgcmVwbGFjZXIgdmFsdWUgdG8gdXNlLiBCeSBkZWZhdWx0XG4gKiBlcXVhbHMgdG8gYERFRkFVTFRfU0VDVVJFX1JFUExBQ0VSYFxuICovXG5cbmNsYXNzIFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9ydWxlcyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtBcnJheTxTZWN1cmVWYWx1ZVByZXByb2Nlc3NpbmdSdWxlPn0gVGhlIGxpc3Qgb2Ygc3VjY2Vzc2Z1bGx5XG4gICAqIHBhcnNlZCBwcmVwcm9jZXNzaW5nIHJ1bGVzXG4gICAqL1xuICBnZXQgcnVsZXMgKCkge1xuICAgIHJldHVybiB0aGlzLl9ydWxlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBSdWxlXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXR0ZXJuIEEgdmFsaWQgUmVnRXhwIHBhdHRlcm4gdG8gYmUgcmVwbGFjZWRcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHRleHQgQSB0ZXh0IG1hdGNoIHRvIHJlcGxhY2UuIEVpdGhlciB0aGlzIHByb3BlcnR5IG9yIHRoZVxuICAgKiBhYm92ZSBvbmUgbXVzdCBiZSBwcm92aWRlZC4gYHBhdHRlcm5gIGhhcyBwcmlvcml0eSBvdmVyIGB0ZXh0YCBpZiBib3RoIGFyZSBwcm92aWRlZC5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGZsYWdzIFsnZyddIFJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFncyBmb3IgdGhlIGdpdmVuIHBhdHRlcm4uXG4gICAqIFN1cHBvcnRlZCBmbGFnIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIHN0YW5kYXJkIEphdmFTY3JpcHQgUmVnRXhwIGNvbnN0cnVjdG9yOlxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L0d1aWRlL1JlZ3VsYXJfRXhwcmVzc2lvbnMjQWR2YW5jZWRfc2VhcmNoaW5nX3dpdGhfZmxhZ3NfMlxuICAgKiBUaGUgJ2cnIChnbG9iYWwgbWF0Y2hpbmcpIGlzIGFsd2F5cyBlbmFibGVkIHRob3VnaC5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHJlcGxhY2VyIFtERUZBVUxUX1NFQ1VSRV9SRVBMQUNFUl0gVGhlIHJlcGxhY2VyIHZhbHVlIHRvIHVzZS4gQnkgZGVmYXVsdFxuICAgKiBlcXVhbHMgdG8gYERFRkFVTFRfU0VDVVJFX1JFUExBQ0VSYFxuICAgKi9cblxuICAvKipcbiAgICogUGFyc2VzIHNpbmdsZSBydWxlIGZyb20gdGhlIGdpdmVuIEpTT04gZmlsZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xSdWxlfSBydWxlIFRoZSBydWxlIG1pZ2h0IGVpdGhlciBiZSByZXByZXNlbnRlZCBhcyBhIHNpbmdsZSBzdHJpbmdcbiAgICogb3IgYSBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHBhcnNpbmcgdGhlIHJ1bGVcbiAgICogQHJldHVybnMge1NlY3VyZVZhbHVlUHJlcHJvY2Vzc2luZ1J1bGV9IFRoZSBwYXJzZWQgcnVsZVxuICAgKi9cbiAgcGFyc2VSdWxlIChydWxlKSB7XG4gICAgY29uc3QgcmFpc2VFcnJvciA9IChtc2cpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtKU09OLnN0cmluZ2lmeShydWxlKX0gLT4gJHttc2d9YCk7XG4gICAgfTtcblxuICAgIGxldCBwYXR0ZXJuO1xuICAgIGxldCByZXBsYWNlciA9IERFRkFVTFRfUkVQTEFDRVI7XG4gICAgbGV0IGZsYWdzID0gWydnJ107XG4gICAgaWYgKF8uaXNTdHJpbmcocnVsZSkpIHtcbiAgICAgIGlmIChydWxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByYWlzZUVycm9yKCdUaGUgdmFsdWUgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgICAgIH1cbiAgICAgIHBhdHRlcm4gPSBgXFxcXGIke18uZXNjYXBlUmVnRXhwKHJ1bGUpfVxcXFxiYDtcbiAgICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChydWxlKSkge1xuICAgICAgaWYgKF8uaGFzKHJ1bGUsICdwYXR0ZXJuJykpIHtcbiAgICAgICAgaWYgKCFfLmlzU3RyaW5nKHJ1bGUucGF0dGVybikgfHwgcnVsZS5wYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJhaXNlRXJyb3IoYFRoZSB2YWx1ZSBvZiAncGF0dGVybicgbXVzdCBiZSBhIHZhbGlkIG5vbi1lbXB0eSBzdHJpbmdgKTtcbiAgICAgICAgfVxuICAgICAgICBwYXR0ZXJuID0gcnVsZS5wYXR0ZXJuO1xuICAgICAgfSBlbHNlIGlmIChfLmhhcyhydWxlLCAndGV4dCcpKSB7XG4gICAgICAgIGlmICghXy5pc1N0cmluZyhydWxlLnRleHQpIHx8IHJ1bGUudGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByYWlzZUVycm9yKGBUaGUgdmFsdWUgb2YgJ3RleHQnIG11c3QgYmUgYSB2YWxpZCBub24tZW1wdHkgc3RyaW5nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcGF0dGVybiA9IGBcXFxcYiR7Xy5lc2NhcGVSZWdFeHAocnVsZS50ZXh0KX1cXFxcYmA7XG4gICAgICB9XG4gICAgICBpZiAoIXBhdHRlcm4pIHtcbiAgICAgICAgcmFpc2VFcnJvcihgTXVzdCBlaXRoZXIgaGF2ZSBhIGZpZWxkIG5hbWVkICdwYXR0ZXJuJyBvciAndGV4dCdgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF8uaGFzKHJ1bGUsICdmbGFncycpKSB7XG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvR3VpZGUvUmVndWxhcl9FeHByZXNzaW9ucyNBZHZhbmNlZF9zZWFyY2hpbmdfd2l0aF9mbGFnc18yXG4gICAgICAgIGZvciAoY29uc3QgZmxhZyBvZiBbJ2knLCAnZycsICdtJywgJ3MnLCAndScsICd5J10pIHtcbiAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhydWxlLmZsYWdzLCBmbGFnKSkge1xuICAgICAgICAgICAgZmxhZ3MucHVzaChmbGFnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmxhZ3MgPSBfLnVuaXEoZmxhZ3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXy5pc1N0cmluZyhydWxlLnJlcGxhY2VyKSkge1xuICAgICAgICByZXBsYWNlciA9IHJ1bGUucmVwbGFjZXI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhaXNlRXJyb3IoJ011c3QgZWl0aGVyIGJlIGEgc3RyaW5nIG9yIGFuIG9iamVjdCcpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXR0ZXJuOiBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzLmpvaW4oJycpKSxcbiAgICAgICAgcmVwbGFjZXIsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJhaXNlRXJyb3IoZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgcnVsZXMgZnJvbSB0aGUgZ2l2ZW4gSlNPTiBmaWxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PHN0cmluZ3xSdWxlPn0gc291cmNlIFRoZSBmdWxsIHBhdGggdG8gdGhlIEpTT04gZmlsZSBjb250YWluaW5nIHNlY3VyZVxuICAgKiB2YWx1ZXMgcmVwbGFjZW1lbnQgcnVsZXMgb3IgdGhlIHJ1bGVzIHRoZW1zZWx2ZXMgcmVwcmVzZW50ZWQgYXMgYW4gYXJyYXlcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBmb3JtYXQgb2YgdGhlIHNvdXJjZSBmaWxlIGlzIGludmFsaWQgb3JcbiAgICogaXQgZG9lcyBub3QgZXhpc3RcbiAgICogQHJldHVybnMge0FycmF5PHN0cmluZz59IFRoZSBsaXN0IG9mIGlzc3VlcyBmb3VuZCB3aGlsZSBwYXJzaW5nIGVhY2ggcnVsZS5cbiAgICogQW4gZW1wdHkgbGlzdCBpcyByZXR1cm5lZCBpZiBubyBydWxlIHBhcnNpbmcgaXNzdWVzIHdlcmUgZm91bmRcbiAgICovXG4gIGFzeW5jIGxvYWRSdWxlcyAoc291cmNlKSB7XG4gICAgbGV0IHJ1bGVzO1xuICAgIGlmIChfLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcnVsZXMgPSBzb3VyY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKHNvdXJjZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtzb3VyY2V9JyBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYWNjZXNzaWJsZWApO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgcnVsZXMgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKHNvdXJjZSwgJ3V0ZjgnKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7c291cmNlfScgbXVzdCBiZSBhIHZhbGlkIEpTT04gZmlsZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgICAgaWYgKCFfLmlzQXJyYXkocnVsZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7c291cmNlfScgbXVzdCBjb250YWluIGEgdmFsaWQgSlNPTiBhcnJheWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlzc3VlcyA9IFtdO1xuICAgIHRoaXMuX3J1bGVzID0gW107XG4gICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLl9ydWxlcy5wdXNoKHRoaXMucGFyc2VSdWxlKHJ1bGUpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaXNzdWVzLnB1c2goZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlzc3VlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyBzZWN1cmUgdmFsdWVzIHJlcGxhY2VtZW50IGluc2lkZSB0aGUgZ2l2ZW4gc3RyaW5nXG4gICAqIGFjY29yZGluZyB0byB0aGUgcHJldmlvdXNseSBsb2FkZWQgcnVsZXMuIE5vIHJlcGxhY2VtZW50IGlzIG1hZGVcbiAgICogaWYgdGhlcmUgYXJlIG5vIHJ1bGVzIG9yIHRoZSBnaXZlbiB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIG1ha2UgcmVwbGFjZW1lbnRzIGluXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzdHJpbmcgd2l0aCByZXBsYWNlbWVudHMgbWFkZVxuICAgKi9cbiAgcHJlcHJvY2VzcyAoc3RyKSB7XG4gICAgaWYgKHRoaXMuX3J1bGVzLmxlbmd0aCA9PT0gMCB8fCAhXy5pc1N0cmluZyhzdHIpKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSBzdHI7XG4gICAgZm9yIChjb25zdCBydWxlIG9mIHRoaXMuX3J1bGVzKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShydWxlLnBhdHRlcm4sIHJ1bGUucmVwbGFjZXIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmNvbnN0IFNFQ1VSRV9WQUxVRVNfUFJFUFJPQ0VTU09SID0gbmV3IFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NvcigpO1xuXG5leHBvcnQgeyBTRUNVUkVfVkFMVUVTX1BSRVBST0NFU1NPUiwgU2VjdXJlVmFsdWVzUHJlcHJvY2Vzc29yIH07XG5leHBvcnQgZGVmYXVsdCBTRUNVUkVfVkFMVUVTX1BSRVBST0NFU1NPUjtcbiJdLCJmaWxlIjoibGliL2xvZy1pbnRlcm5hbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2ctaW50ZXJuYWwuanMiXSwibmFtZXMiOlsiREVGQVVMVF9SRVBMQUNFUiIsIlNlY3VyZVZhbHVlc1ByZXByb2Nlc3NvciIsImNvbnN0cnVjdG9yIiwiX3J1bGVzIiwicnVsZXMiLCJwYXJzZVJ1bGUiLCJydWxlIiwicmFpc2VFcnJvciIsIm1zZyIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsInBhdHRlcm4iLCJyZXBsYWNlciIsImZsYWdzIiwiXyIsImlzU3RyaW5nIiwibGVuZ3RoIiwiZXNjYXBlUmVnRXhwIiwiaXNQbGFpbk9iamVjdCIsImhhcyIsInRleHQiLCJmbGFnIiwiaW5jbHVkZXMiLCJwdXNoIiwidW5pcSIsIlJlZ0V4cCIsImpvaW4iLCJlIiwibWVzc2FnZSIsImxvYWRSdWxlcyIsInNvdXJjZSIsImlzQXJyYXkiLCJmcyIsImV4aXN0cyIsInBhcnNlIiwicmVhZEZpbGUiLCJpc3N1ZXMiLCJwcmVwcm9jZXNzIiwic3RyIiwicmVzdWx0IiwicmVwbGFjZSIsIlNFQ1VSRV9WQUxVRVNfUFJFUFJPQ0VTU09SIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVBLE1BQU1BLGdCQUFnQixHQUFHLFlBQXpCOztBQVNBLE1BQU1DLHdCQUFOLENBQStCO0FBQzdCQyxFQUFBQSxXQUFXLEdBQUk7QUFDYixTQUFLQyxNQUFMLEdBQWMsRUFBZDtBQUNEOztBQU1ELE1BQUlDLEtBQUosR0FBYTtBQUNYLFdBQU8sS0FBS0QsTUFBWjtBQUNEOztBQXVCREUsRUFBQUEsU0FBUyxDQUFFQyxJQUFGLEVBQVE7QUFDZixVQUFNQyxVQUFVLEdBQUlDLEdBQUQsSUFBUztBQUMxQixZQUFNLElBQUlDLEtBQUosQ0FBVyxHQUFFQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUwsSUFBZixDQUFxQixPQUFNRSxHQUFJLEVBQTVDLENBQU47QUFDRCxLQUZEOztBQUlBLFFBQUlJLE9BQUo7QUFDQSxRQUFJQyxRQUFRLEdBQUdiLGdCQUFmO0FB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QXhCLEVBQWdDO0FBQzlCcUMsTUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUNDLE9BQVAsQ0FBZW5DLElBQUksQ0FBQ00sT0FBcEIsRUFBNkJOLElBQUksQ0FBQ08sUUFBbEMsQ0FBVDtBQUNEOztBQUNELFdBQU8yQixNQUFQO0FBQ0Q7O0FBcEo0Qjs7O0FBdUovQixNQUFNRSwwQkFBMEIsR0FBRyxJQUFJekMsd0JBQUosRUFBbkM7O2VBR2V5QywwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICcuL2ZzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IERFRkFVTFRfUkVQTEFDRVIgPSAnKipTRUNVUkUqKic7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2VjdXJlVmFsdWVQcmVwcm9jZXNzaW5nUnVsZVxuICogQHByb3BlcnR5IHtSZWdFeHB9IHBhdHRlcm4gVGhlIHBhcnNlZCBwYXR0ZXJuIHdoaWNoIGlzIGdvaW5nIHRvIGJlIHVzZWQgZm9yIHJlcGxhY2VtZW50XG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmVwbGFjZXIgW0RFRkFVTFRfU0VDVVJFX1JFUExBQ0VSXSBUaGUgcmVwbGFjZXIgdmFsdWUgdG8gdXNlLiBCeSBkZWZhdWx0XG4gKiBlcXVhbHMgdG8gYERFRkFVTFRfU0VDVVJFX1JFUExBQ0VSYFxuICovXG5cbmNsYXNzIFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9ydWxlcyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtBcnJheTxTZWN1cmVWYWx1ZVByZXByb2Nlc3NpbmdSdWxlPn0gVGhlIGxpc3Qgb2Ygc3VjY2Vzc2Z1bGx5XG4gICAqIHBhcnNlZCBwcmVwcm9jZXNzaW5nIHJ1bGVzXG4gICAqL1xuICBnZXQgcnVsZXMgKCkge1xuICAgIHJldHVybiB0aGlzLl9ydWxlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBSdWxlXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXR0ZXJuIEEgdmFsaWQgUmVnRXhwIHBhdHRlcm4gdG8gYmUgcmVwbGFjZWRcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHRleHQgQSB0ZXh0IG1hdGNoIHRvIHJlcGxhY2UuIEVpdGhlciB0aGlzIHByb3BlcnR5IG9yIHRoZVxuICAgKiBhYm92ZSBvbmUgbXVzdCBiZSBwcm92aWRlZC4gYHBhdHRlcm5gIGhhcyBwcmlvcml0eSBvdmVyIGB0ZXh0YCBpZiBib3RoIGFyZSBwcm92aWRlZC5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGZsYWdzIFsnZyddIFJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFncyBmb3IgdGhlIGdpdmVuIHBhdHRlcm4uXG4gICAqIFN1cHBvcnRlZCBmbGFnIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIHN0YW5kYXJkIEphdmFTY3JpcHQgUmVnRXhwIGNvbnN0cnVjdG9yOlxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L0d1aWRlL1JlZ3VsYXJfRXhwcmVzc2lvbnMjQWR2YW5jZWRfc2VhcmNoaW5nX3dpdGhfZmxhZ3NfMlxuICAgKiBUaGUgJ2cnIChnbG9iYWwgbWF0Y2hpbmcpIGlzIGFsd2F5cyBlbmFibGVkIHRob3VnaC5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHJlcGxhY2VyIFtERUZBVUxUX1NFQ1VSRV9SRVBMQUNFUl0gVGhlIHJlcGxhY2VyIHZhbHVlIHRvIHVzZS4gQnkgZGVmYXVsdFxuICAgKiBlcXVhbHMgdG8gYERFRkFVTFRfU0VDVVJFX1JFUExBQ0VSYFxuICAgKi9cblxuICAvKipcbiAgICogUGFyc2VzIHNpbmdsZSBydWxlIGZyb20gdGhlIGdpdmVuIEpTT04gZmlsZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xSdWxlfSBydWxlIFRoZSBydWxlIG1pZ2h0IGVpdGhlciBiZSByZXByZXNlbnRlZCBhcyBhIHNpbmdsZSBzdHJpbmdcbiAgICogb3IgYSBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHBhcnNpbmcgdGhlIHJ1bGVcbiAgICogQHJldHVybnMge1NlY3VyZVZhbHVlUHJlcHJvY2Vzc2luZ1J1bGV9IFRoZSBwYXJzZWQgcnVsZVxuICAgKi9cbiAgcGFyc2VSdWxlIChydWxlKSB7XG4gICAgY29uc3QgcmFpc2VFcnJvciA9IChtc2cpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtKU09OLnN0cmluZ2lmeShydWxlKX0gLT4gJHttc2d9YCk7XG4gICAgfTtcblxuICAgIGxldCBwYXR0ZXJuO1xuICAgIGxldCByZXBsYWNlciA9IERFRkFVTFRfUkVQTEFDRVI7XG4gICAgbGV0IGZsYWdzID0gWydnJ107XG4gICAgaWYgKF8uaXNTdHJpbmcocnVsZSkpIHtcbiAgICAgIGlmIChydWxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByYWlzZUVycm9yKCdUaGUgdmFsdWUgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgICAgIH1cbiAgICAgIHBhdHRlcm4gPSBgXFxcXGIke18uZXNjYXBlUmVnRXhwKHJ1bGUpfVxcXFxiYDtcbiAgICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChydWxlKSkge1xuICAgICAgaWYgKF8uaGFzKHJ1bGUsICdwYXR0ZXJuJykpIHtcbiAgICAgICAgaWYgKCFfLmlzU3RyaW5nKHJ1bGUucGF0dGVybikgfHwgcnVsZS5wYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJhaXNlRXJyb3IoYFRoZSB2YWx1ZSBvZiAncGF0dGVybicgbXVzdCBiZSBhIHZhbGlkIG5vbi1lbXB0eSBzdHJpbmdgKTtcbiAgICAgICAgfVxuICAgICAgICBwYXR0ZXJuID0gcnVsZS5wYXR0ZXJuO1xuICAgICAgfSBlbHNlIGlmIChfLmhhcyhydWxlLCAndGV4dCcpKSB7XG4gICAgICAgIGlmICghXy5pc1N0cmluZyhydWxlLnRleHQpIHx8IHJ1bGUudGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByYWlzZUVycm9yKGBUaGUgdmFsdWUgb2YgJ3RleHQnIG11c3QgYmUgYSB2YWxpZCBub24tZW1wdHkgc3RyaW5nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcGF0dGVybiA9IGBcXFxcYiR7Xy5lc2NhcGVSZWdFeHAocnVsZS50ZXh0KX1cXFxcYmA7XG4gICAgICB9XG4gICAgICBpZiAoIXBhdHRlcm4pIHtcbiAgICAgICAgcmFpc2VFcnJvcihgTXVzdCBlaXRoZXIgaGF2ZSBhIGZpZWxkIG5hbWVkICdwYXR0ZXJuJyBvciAndGV4dCdgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF8uaGFzKHJ1bGUsICdmbGFncycpKSB7XG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvR3VpZGUvUmVndWxhcl9FeHByZXNzaW9ucyNBZHZhbmNlZF9zZWFyY2hpbmdfd2l0aF9mbGFnc18yXG4gICAgICAgIGZvciAoY29uc3QgZmxhZyBvZiBbJ2knLCAnZycsICdtJywgJ3MnLCAndScsICd5J10pIHtcbiAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhydWxlLmZsYWdzLCBmbGFnKSkge1xuICAgICAgICAgICAgZmxhZ3MucHVzaChmbGFnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmxhZ3MgPSBfLnVuaXEoZmxhZ3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXy5pc1N0cmluZyhydWxlLnJlcGxhY2VyKSkge1xuICAgICAgICByZXBsYWNlciA9IHJ1bGUucmVwbGFjZXI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhaXNlRXJyb3IoJ011c3QgZWl0aGVyIGJlIGEgc3RyaW5nIG9yIGFuIG9iamVjdCcpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXR0ZXJuOiBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzLmpvaW4oJycpKSxcbiAgICAgICAgcmVwbGFjZXIsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJhaXNlRXJyb3IoZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgcnVsZXMgZnJvbSB0aGUgZ2l2ZW4gSlNPTiBmaWxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PHN0cmluZ3xSdWxlPn0gc291cmNlIFRoZSBmdWxsIHBhdGggdG8gdGhlIEpTT04gZmlsZSBjb250YWluaW5nIHNlY3VyZVxuICAgKiB2YWx1ZXMgcmVwbGFjZW1lbnQgcnVsZXMgb3IgdGhlIHJ1bGVzIHRoZW1zZWx2ZXMgcmVwcmVzZW50ZWQgYXMgYW4gYXJyYXlcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBmb3JtYXQgb2YgdGhlIHNvdXJjZSBmaWxlIGlzIGludmFsaWQgb3JcbiAgICogaXQgZG9lcyBub3QgZXhpc3RcbiAgICogQHJldHVybnMge0FycmF5PHN0cmluZz59IFRoZSBsaXN0IG9mIGlzc3VlcyBmb3VuZCB3aGlsZSBwYXJzaW5nIGVhY2ggcnVsZS5cbiAgICogQW4gZW1wdHkgbGlzdCBpcyByZXR1cm5lZCBpZiBubyBydWxlIHBhcnNpbmcgaXNzdWVzIHdlcmUgZm91bmRcbiAgICovXG4gIGFzeW5jIGxvYWRSdWxlcyAoc291cmNlKSB7XG4gICAgbGV0IHJ1bGVzO1xuICAgIGlmIChfLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcnVsZXMgPSBzb3VyY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKHNvdXJjZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtzb3VyY2V9JyBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYWNjZXNzaWJsZWApO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgcnVsZXMgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKHNvdXJjZSwgJ3V0ZjgnKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7c291cmNlfScgbXVzdCBiZSBhIHZhbGlkIEpTT04gZmlsZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgICAgaWYgKCFfLmlzQXJyYXkocnVsZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7c291cmNlfScgbXVzdCBjb250YWluIGEgdmFsaWQgSlNPTiBhcnJheWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlzc3VlcyA9IFtdO1xuICAgIHRoaXMuX3J1bGVzID0gW107XG4gICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLl9ydWxlcy5wdXNoKHRoaXMucGFyc2VSdWxlKHJ1bGUpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaXNzdWVzLnB1c2goZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlzc3VlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyBzZWN1cmUgdmFsdWVzIHJlcGxhY2VtZW50IGluc2lkZSB0aGUgZ2l2ZW4gc3RyaW5nXG4gICAqIGFjY29yZGluZyB0byB0aGUgcHJldmlvdXNseSBsb2FkZWQgcnVsZXMuIE5vIHJlcGxhY2VtZW50IGlzIG1hZGVcbiAgICogaWYgdGhlcmUgYXJlIG5vIHJ1bGVzIG9yIHRoZSBnaXZlbiB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIG1ha2UgcmVwbGFjZW1lbnRzIGluXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzdHJpbmcgd2l0aCByZXBsYWNlbWVudHMgbWFkZVxuICAgKi9cbiAgcHJlcHJvY2VzcyAoc3RyKSB7XG4gICAgaWYgKHRoaXMuX3J1bGVzLmxlbmd0aCA9PT0gMCB8fCAhXy5pc1N0cmluZyhzdHIpKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSBzdHI7XG4gICAgZm9yIChjb25zdCBydWxlIG9mIHRoaXMuX3J1bGVzKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShydWxlLnBhdHRlcm4sIHJ1bGUucmVwbGFjZXIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmNvbnN0IFNFQ1VSRV9WQUxVRVNfUFJFUFJPQ0VTU09SID0gbmV3IFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NvcigpO1xuXG5leHBvcnQgeyBTRUNVUkVfVkFMVUVTX1BSRVBST0NFU1NPUiwgU2VjdXJlVmFsdWVzUHJlcHJvY2Vzc29yIH07XG5leHBvcnQgZGVmYXVsdCBTRUNVUkVfVkFMVUVTX1BSRVBST0NFU1NPUjtcbiJdLCJmaWxlIjoibGliL2xvZy1pbnRlcm5hbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9

@@ -174,2 +174,2 @@ "use strict";

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9tanBlZy5qcyJdLCJuYW1lcyI6WyJNSnBlZ0NvbnN1bWVyIiwiaW5pdE1KcGVnQ29uc3VtZXIiLCJpZ24iLCJFcnJvciIsIlRFU1RfSU1HX0pQRyIsIk1KUEVHX1NFUlZFUl9USU1FT1VUX01TIiwiTUpwZWdTdHJlYW0iLCJXcml0YWJsZSIsImNvbnN0cnVjdG9yIiwibUpwZWdVcmwiLCJlcnJvckhhbmRsZXIiLCJfIiwibm9vcCIsIm9wdGlvbnMiLCJ1cmwiLCJjbGVhciIsImxhc3RDaHVua0Jhc2U2NCIsImlzRW1wdHkiLCJsYXN0Q2h1bmsiLCJpc0J1ZmZlciIsInRvU3RyaW5nIiwibGFzdENodW5rUE5HIiwianBnIiwiZ2V0QnVmZmVyIiwiTUlNRV9QTkciLCJlIiwibGFzdENodW5rUE5HQmFzZTY0IiwicG5nIiwicmVnaXN0ZXJTdGFydFN1Y2Nlc3MiLCJyZWdpc3RlclN0YXJ0RmFpbHVyZSIsInJlc3BvbnNlU3RyZWFtIiwiY29uc3VtZXIiLCJ1cGRhdGVDb3VudCIsInN0YXJ0Iiwic2VydmVyVGltZW91dCIsInN0b3AiLCJzdGFydFByb21pc2UiLCJCIiwicmVzIiwicmVqIiwidGltZW91dCIsIm9uRXJyIiwiZXJyIiwibG9nIiwiZXJyb3IiLCJtZXNzYWdlIiwib25DbG9zZSIsImRlYnVnIiwicmVzcG9uc2VUeXBlIiwiZGF0YSIsIm9uY2UiLCJvbiIsInBpcGUiLCJ1bnBpcGUiLCJkZXN0cm95Iiwid3JpdGUiLCJpbml0TUpwZWdTZXJ2ZXIiLCJwb3J0IiwiaW50TXMiLCJ0aW1lcyIsInNlcnZlciIsImh0dHAiLCJjcmVhdGVTZXJ2ZXIiLCJyZXEiLCJtSnBlZ1JlcUhhbmRsZXIiLCJtSnBlZ1NlcnZlciIsImNyZWF0ZVJlcUhhbmRsZXIiLCJCdWZmZXIiLCJmcm9tIiwiaSIsImRlbGF5IiwiX3dyaXRlIiwiY2xvc2UiLCJsaXN0ZW4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztB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Sy9CLFNBQUwsR0FBaUIrQixJQUFqQjtBQUNBLFNBQUtqQixXQUFMOztBQUVBLFFBQUksS0FBS0osb0JBQVQsRUFBK0I7QUFDN0IsV0FBS0Esb0JBQUw7QUFDQSxXQUFLQSxvQkFBTCxHQUE0QixJQUE1QjtBQUNEO0FBQ0Y7O0FBN0pnQzs7OztBQXlLbkMsU0FBUzRCLGVBQVQsQ0FBMEJDLElBQTFCLEVBQWdDQyxLQUFLLEdBQUcsR0FBeEMsRUFBNkNDLEtBQUssR0FBRyxFQUFyRCxFQUF5RDtBQUN2RCxRQUFNQyxNQUFNLEdBQUdDLGNBQUtDLFlBQUwsQ0FBa0IsZ0JBQWdCQyxHQUFoQixFQUFxQnpCLEdBQXJCLEVBQTBCO0FBQ3pELFVBQU0wQixlQUFlLEdBQUdDLHFCQUFZQyxnQkFBWixDQUE2QkgsR0FBN0IsRUFBa0N6QixHQUFsQyxDQUF4Qjs7QUFDQSxVQUFNaEIsR0FBRyxHQUFHNkMsTUFBTSxDQUFDQyxJQUFQLENBQVloRSxZQUFaLEVBQTBCLFFBQTFCLENBQVo7O0FBR0EsU0FBSyxJQUFJaUUsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR1YsS0FBcEIsRUFBMkJVLENBQUMsRUFBNUIsRUFBZ0M7QUFDOUIsWUFBTWhDLGtCQUFFaUMsS0FBRixDQUFRWixLQUFSLENBQU47O0FBQ0FNLE1BQUFBLGVBQWUsQ0FBQ08sTUFBaEIsQ0FBdUJqRCxHQUF2QixFQUE0QixJQUE1QixFQUFrQ1gsZ0JBQUVDLElBQXBDO0FBQ0Q7O0FBQ0RvRCxJQUFBQSxlQUFlLENBQUNRLEtBQWhCO0FBQ0QsR0FWYyxFQVVaQyxNQVZZLENBVUxoQixJQVZLLENBQWY7O0FBWUEsU0FBT0csTUFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IGh0dHAgZnJvbSAnaHR0cCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBnZXRKaW1wSW1hZ2UsIE1JTUVfUE5HIH0gZnJvbSAnLi9pbWFnZS11dGlsJztcbmltcG9ydCBtSnBlZ1NlcnZlciBmcm9tICdtanBlZy1zZXJ2ZXInO1xuaW1wb3J0IHsgV3JpdGFibGUgfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHsgcmVxdWlyZVBhY2thZ2UgfSBmcm9tICcuL25vZGUnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcblxuXG4vLyBsYXp5IGxvYWQgdGhpcywgYXMgaXQgbWlnaHQgbm90IGJlIGF2YWlsYWJsZVxubGV0IE1KcGVnQ29uc3VtZXIgPSBudWxsO1xuXG4vKipcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBgbWpwZWctY29uc3VtZXJgIG1vZHVsZSBpcyBub3QgaW5zdGFsbGVkIG9yIGNhbm5vdCBiZSBsb2FkZWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5pdE1KcGVnQ29uc3VtZXIgKCkge1xuICBpZiAoIU1KcGVnQ29uc3VtZXIpIHtcbiAgICB0cnkge1xuICAgICAgTUpwZWdDb25zdW1lciA9IGF3YWl0IHJlcXVpcmVQYWNrYWdlKCdtanBlZy1jb25zdW1lcicpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuICBpZiAoIU1KcGVnQ29uc3VtZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21qcGVnLWNvbnN1bWVyIG1vZHVsZSBpcyByZXF1aXJlZCB0byB1c2UgTUpQRUctb3Zlci1IVFRQIGZlYXR1cmVzLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBpbnN0YWxsIGl0IGZpcnN0IChucG0gaSAtZyBtanBlZy1jb25zdW1lcikgYW5kIHJlc3RhcnQgQXBwaXVtLicpO1xuICB9XG59XG5cbmNvbnN0IFRFU1RfSU1HX0pQRyA9ICcvOWovNFFBWVJYaHBaZ0FBU1VrcUFBZ0FBQUFBQUFBQUFBQUFBUC9zQUJGRWRXTnJlUUFCQUFRQUFBQWVBQUQvNFFPQmFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0x3QThQM2h3WVdOclpYUWdZbVZuYVc0OUl1Kzd2eUlnYVdROUlsYzFUVEJOY0VObGFHbEllbkpsVTNwT1ZHTjZhMk01WkNJL1BpQThlRHA0YlhCdFpYUmhJSGh0Ykc1ek9uZzlJbUZrYjJKbE9tNXpPbTFsZEdFdklpQjRPbmh0Y0hSclBTSkJaRzlpWlNCWVRWQWdRMjl5WlNBMUxqWXRZekUwTUNBM09TNHhOakEwTlRFc0lESXdNVGN2TURVdk1EWXRNREU2TURnNk1qRWdJQ0FnSUNBZ0lDSStJRHh5WkdZNlVrUkdJSGh0Ykc1ek9uSmtaajBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOHdNaTh5TWkxeVpHWXRjM2x1ZEdGNExXNXpJeUkrSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUlIaHRiRzV6T25odGNFMU5QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2YlcwdklpQjRiV3h1Y3pwemRGSmxaajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDNOVWVYQmxMMUpsYzI5MWNtTmxVbVZtSXlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0YlhCTlRUcFBjbWxuYVc1aGJFUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZOR1k1T0RjMU9UY3RaR0UyTXkwMFkyTTBMVGt6TkRNdE5HWXlOamd6TUdVd05qazNJaUI0YlhCTlRUcEViMk4xYldWdWRFbEVQU0o0YlhBdVpHbGtPamxETXpJM1FrWTBOMFEzTlRFeFJUaENNVGxET1RWRE1EYzJSREU1TURZNUlpQjRiWEJOVFRwSmJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09qbERNekkzUWtZek4wUTNOVEV4UlRoQ01UbERPVFZETURjMlJERTVNRFk1SWlCNGJYQTZRM0psWVhSdmNsUnZiMnc5SWtGa2IySmxJRkJvYjNSdmMyaHZjQ0JEUXlBeU1ERTRJQ2hOWVdOcGJuUnZjMmdwSWo0Z1BIaHRjRTFOT2tSbGNtbDJaV1JHY205dElITjBVbVZtT21sdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNk5HWTVPRGMxT1RjdFpHRTJNeTAwWTJNMExUa3pORE10TkdZeU5qZ3pNR1V3TmprM0lpQnpkRkpsWmpwa2IyTjFiV1Z1ZEVsRVBTSjRiWEF1Wkdsa09qUm1PVGczTlRrM0xXUmhOak10TkdOak5DMDVNelF6TFRSbU1qWTRNekJsTURZNU55SXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9Qdi91QUE1QlpHOWlaUUJrd0FBQUFBSC8yd0NFQUJBTEN3c01DeEFNREJBWER3MFBGeHNVRUJBVUd4OFhGeGNYRng4ZUZ4b2FHaG9YSGg0akpTY2xJeDR2THpNekx5OUFRRUJBUUVCQVFFQkFRRUJBUUVBQkVROFBFUk1SRlJJU0ZSUVJGQkVVR2hRV0ZoUWFKaG9hSEJvYUpqQWpIaDRlSGlNd0t5NG5KeWN1S3pVMU1EQTFOVUJBUDBCQVFFQkFRRUJBUUVCQVFQL0FBQkVJQUNBQUlBTUJJZ0FDRVFFREVRSC94QUJnQUFFQUF3RUFBQUFBQUFBQUFBQUFBQUFBQkFVSENBRUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBUU1DQWdzQUFBQUFBQUFBQUFBQUFBRUNCQkVERWdZaE1ST0RvN1BUVkFVV05oRUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFQL2FBQXdEQVFBQ0VRTVJBRDhBejhBQWRBQUFBQUFJOCtmRThkRXVUWnR6WlI3Vk1iNk9kVEU1R0pvWWlyclVwL2U4cWQ5d2IzVEdlL2xKMjU1MXN4OEQvOWs9JztcblxuLy8gYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBmb3IgdGhlIGZpcnN0IGltYWdlIGluIHRoZSBzdHJlYW1cbmNvbnN0IE1KUEVHX1NFUlZFUl9USU1FT1VUX01TID0gMTAwMDA7XG5cbi8qKiBDbGFzcyB3aGljaCBzdG9yZXMgdGhlIGxhc3QgYml0IG9mIGRhdGEgc3RyZWFtZWQgaW50byBpdCAqL1xuY2xhc3MgTUpwZWdTdHJlYW0gZXh0ZW5kcyBXcml0YWJsZSB7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBNSnBlZ1N0cmVhbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbUpwZWdVcmwgLSBVUkwgb2YgTUpQRUctb3Zlci1IVFRQIHN0cmVhbVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBbZXJyb3JIYW5kbGVyPW5vb3BdIC0gYWRkaXRpb25hbCBmdW5jdGlvbiB0aGF0IHdpbGwgYmVcbiAgICogY2FsbGVkIGluIHRoZSBjYXNlIG9mIGFueSBlcnJvcnMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gLSBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIFdyaXRhYmxlIGNvbnN0cnVjdG9yXG4gICAqL1xuICBjb25zdHJ1Y3RvciAobUpwZWdVcmwsIGVycm9ySGFuZGxlciA9IF8ubm9vcCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLmVycm9ySGFuZGxlciA9IGVycm9ySGFuZGxlcjtcbiAgICB0aGlzLnVybCA9IG1KcGVnVXJsO1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJhc2U2NC1lbmNvZGVkIHZlcnNpb24gb2YgdGhlIEpQRUdcbiAgICpcbiAgICogQHJldHVybnMgez9zdHJpbmd9IGJhc2U2NC1lbmNvZGVkIEpQRUcgaW1hZ2UgZGF0YVxuICAgKiBvciBgbnVsbGAgaWYgbm8gaW1hZ2UgY2FuIGJlIHBhcnNlZFxuICAgKi9cbiAgZ2V0IGxhc3RDaHVua0Jhc2U2NCAoKSB7XG4gICAgcmV0dXJuICFfLmlzRW1wdHkodGhpcy5sYXN0Q2h1bmspICYmIF8uaXNCdWZmZXIodGhpcy5sYXN0Q2h1bmspXG4gICAgICA/IHRoaXMubGFzdENodW5rLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgUE5HIHZlcnNpb24gb2YgdGhlIEpQRUcgYnVmZmVyXG4gICAqXG4gICAqIEByZXR1cm5zIHs/QnVmZmVyfSBQTkcgaW1hZ2UgZGF0YSBvciBgbnVsbGAgaWYgbm8gUE5HXG4gICAqIGltYWdlIGNhbiBiZSBwYXJzZWRcbiAgICovXG4gIGFzeW5jIGxhc3RDaHVua1BORyAoKSB7XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLmxhc3RDaHVuaykgfHwgIV8uaXNCdWZmZXIodGhpcy5sYXN0Q2h1bmspKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QganBnID0gYXdhaXQgZ2V0SmltcEltYWdlKHRoaXMubGFzdENodW5rKTtcbiAgICAgIHJldHVybiBhd2FpdCBqcGcuZ2V0QnVmZmVyKE1JTUVfUE5HKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBiYXNlNjQtZW5jb2RlZCB2ZXJzaW9uIG9mIHRoZSBQTkdcbiAgICpcbiAgICogQHJldHVybnMgez9zdHJpbmd9IGJhc2U2NC1lbmNvZGVkIFBORyBpbWFnZSBkYXRhXG4gICAqIG9yIGBudWxsYCBpZiBubyBpbWFnZSBjYW4gYmUgcGFyc2VkXG4gICAqL1xuICBhc3luYyBsYXN0Q2h1bmtQTkdCYXNlNjQgKCkge1xuICAgIGNvbnN0IHBuZyA9IGF3YWl0IHRoaXMubGFzdENodW5rUE5HKCk7XG4gICAgcmV0dXJuIHBuZyA/IHBuZy50b1N0cmluZygnYmFzZTY0JykgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IGludGVybmFsIHN0YXRlXG4gICAqL1xuICBjbGVhciAoKSB7XG4gICAgdGhpcy5yZWdpc3RlclN0YXJ0U3VjY2VzcyA9IG51bGw7XG4gICAgdGhpcy5yZWdpc3RlclN0YXJ0RmFpbHVyZSA9IG51bGw7XG4gICAgdGhpcy5yZXNwb25zZVN0cmVhbSA9IG51bGw7XG4gICAgdGhpcy5jb25zdW1lciA9IG51bGw7XG4gICAgdGhpcy5sYXN0Q2h1bmsgPSBudWxsO1xuICAgIHRoaXMudXBkYXRlQ291bnQgPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHJlYWRpbmcgdGhlIE1KcGVnIHN0cmVhbSBhbmQgc3RvcmluZyB0aGUgbGFzdCBpbWFnZVxuICAgKi9cbiAgYXN5bmMgc3RhcnQgKHNlcnZlclRpbWVvdXQgPSBNSlBFR19TRVJWRVJfVElNRU9VVF9NUykge1xuICAgIC8vIGVuc3VyZSB3ZSdyZSBub3Qgc3RhcnRlZCBhbHJlYWR5XG4gICAgdGhpcy5zdG9wKCk7XG5cbiAgICBhd2FpdCBpbml0TUpwZWdDb25zdW1lcigpO1xuXG4gICAgdGhpcy5jb25zdW1lciA9IG5ldyBNSnBlZ0NvbnN1bWVyKCk7XG5cbiAgICAvLyB1c2UgdGhlIGRlZmVycmVkIHBhdHRlcm4gc28gd2UgY2FuIHdhaXQgZm9yIHRoZSBzdGFydCBvZiB0aGUgc3RyZWFtXG4gICAgLy8gYmFzZWQgb24gd2hhdCBjb21lcyBpbiBmcm9tIGFuIGV4dGVybmFsIHBpcGVcbiAgICBjb25zdCBzdGFydFByb21pc2UgPSBuZXcgQigocmVzLCByZWopID0+IHtcbiAgICAgIHRoaXMucmVnaXN0ZXJTdGFydFN1Y2Nlc3MgPSByZXM7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3RhcnRGYWlsdXJlID0gcmVqO1xuICAgIH0pXG4gICAgLy8gc3RhcnQgYSB0aW1lb3V0IHNvIHRoYXQgaWYgdGhlIHNlcnZlciBkb2VzIG5vdCByZXR1cm4gZGF0YSwgd2UgZG9uJ3RcbiAgICAvLyBibG9jayBmb3JldmVyLlxuICAgICAgLnRpbWVvdXQoc2VydmVyVGltZW91dCxcbiAgICAgICAgYFdhaXRlZCAke3NlcnZlclRpbWVvdXR9bXMgYnV0IHRoZSBNSlBFRyBzZXJ2ZXIgbmV2ZXIgc2VudCBhbnkgaW1hZ2VzYCk7XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLnVybDtcbiAgICBjb25zdCBvbkVyciA9IChlcnIpID0+IHtcbiAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgYW4gb3V0ZGF0ZWQgc2NyZWVuc2hvdCBpZiB0aGVyZSB3YXMgYW4gZXJyb3JcbiAgICAgIHRoaXMubGFzdENodW5rID0gbnVsbDtcblxuICAgICAgbG9nLmVycm9yKGBFcnJvciBnZXR0aW5nIE1KcGVnIHNjcmVlbnNob3QgY2h1bms6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB0aGlzLmVycm9ySGFuZGxlcihlcnIpO1xuICAgICAgaWYgKHRoaXMucmVnaXN0ZXJTdGFydEZhaWx1cmUpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlclN0YXJ0RmFpbHVyZShlcnIpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb25DbG9zZSA9ICgpID0+IHtcbiAgICAgIGxvZy5kZWJ1ZyhgVGhlIGNvbm5lY3Rpb24gdG8gTUpQRUcgc2VydmVyIGF0ICR7dXJsfSBoYXMgYmVlbiBjbG9zZWRgKTtcbiAgICAgIHRoaXMubGFzdENodW5rID0gbnVsbDtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucmVzcG9uc2VTdHJlYW0gPSAoYXdhaXQgYXhpb3Moe1xuICAgICAgICB1cmwsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ3N0cmVhbScsXG4gICAgICAgIHRpbWVvdXQ6IHNlcnZlclRpbWVvdXQsXG4gICAgICB9KSkuZGF0YTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gb25FcnIoZSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZVN0cmVhbVxuICAgICAgLm9uY2UoJ2Nsb3NlJywgb25DbG9zZSlcbiAgICAgIC5vbignZXJyb3InLCBvbkVycikgLy8gZW5zdXJlIHdlIGRvIHNvbWV0aGluZyB3aXRoIGVycm9yc1xuICAgICAgLnBpcGUodGhpcy5jb25zdW1lcikgLy8gYWxsb3cgY2h1bmtpbmcgYW5kIHRyYW5zZm9ybWluZyBvZiBqcGVnIGRhdGFcbiAgICAgIC5waXBlKHRoaXMpOyAvLyBzZW5kIHRoZSBhY3R1YWwganBlZ3MgdG8gb3Vyc2VsZlxuXG4gICAgYXdhaXQgc3RhcnRQcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgcmVhZGluZyB0aGUgTUpwZWcgc3RyZWFtLiBFbnN1cmUgd2UgZGlzY29ubmVjdCBhbGwgdGhlIHBpcGVzIGFuZCBzdG9wXG4gICAqIHRoZSBIVFRQIHJlcXVlc3QgaXRzZWxmLiBUaGVuIHJlc2V0IHRoZSBzdGF0ZS5cbiAgICovXG4gIHN0b3AgKCkge1xuICAgIGlmICghdGhpcy5jb25zdW1lcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVzcG9uc2VTdHJlYW0udW5waXBlKHRoaXMuY29uc3VtZXIpO1xuICAgIHRoaXMuY29uc3VtZXIudW5waXBlKHRoaXMpO1xuICAgIHRoaXMucmVzcG9uc2VTdHJlYW0uZGVzdHJveSgpO1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgV3JpdGFibGUgd3JpdGUoKSBtZXRob2QgaW4gb3JkZXIgdG8gc2F2ZSB0aGUgbGFzdCBpbWFnZSBhbmRcbiAgICogbG9nIHRoZSBudW1iZXIgb2YgaW1hZ2VzIHdlIGhhdmUgcmVjZWl2ZWRcbiAgICogQG92ZXJyaWRlXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhIC0gYmluYXJ5IGRhdGEgc3RyZWFtZWQgZnJvbSB0aGUgTUpwZWcgY29uc3VtZXJcbiAgICovXG4gIHdyaXRlIChkYXRhKSB7XG4gICAgdGhpcy5sYXN0Q2h1bmsgPSBkYXRhO1xuICAgIHRoaXMudXBkYXRlQ291bnQrKztcblxuICAgIGlmICh0aGlzLnJlZ2lzdGVyU3RhcnRTdWNjZXNzKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3RhcnRTdWNjZXNzKCk7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3RhcnRTdWNjZXNzID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTdGFydCBhbiBtanBlZyBzZXJ2ZXIgZm9yIHRoZSBwdXJwb3NlIG9mIHRlc3RpbmcsIHdoaWNoIGp1c3Qgc2VuZHMgdGhlIHNhbWVcbiAqIGltYWdlIG92ZXIgYW5kIG92ZXIuIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY2xvc2luZyB0aGUgc2VydmVyLlxuICogQHBhcmFtIHtpbnR9IHBvcnQgLSBwb3J0IHRoZSBzZXJ2ZXIgc2hvdWxkIGxpc3RlbiBvblxuICogQHBhcmFtIHtpbnR9IFtpbnRNc10gLSBob3cgb2Z0ZW4gdGhlIHNlcnZlciBzaG91bGQgcHVzaCBhbiBpbWFnZVxuICogQHBhcmFtIHtpbnR9IFt0aW1lc10gLSBob3cgbWFueSB0aW1lcyB0aGUgc2VydmVyIHNob3VsZCBwdXNoIGFuIGltYWdlIGJlZm9yZVxuICogaXQgY2xvc2VzIHRoZSBjb25uZWN0aW9uXG4gKiBAcmV0dXJucyB7aHR0cC5TZXJ2ZXJ9XG4gKi9cbmZ1bmN0aW9uIGluaXRNSnBlZ1NlcnZlciAocG9ydCwgaW50TXMgPSAzMDAsIHRpbWVzID0gMjApIHtcbiAgY29uc3Qgc2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoYXN5bmMgZnVuY3Rpb24gKHJlcSwgcmVzKSB7XG4gICAgY29uc3QgbUpwZWdSZXFIYW5kbGVyID0gbUpwZWdTZXJ2ZXIuY3JlYXRlUmVxSGFuZGxlcihyZXEsIHJlcyk7XG4gICAgY29uc3QganBnID0gQnVmZmVyLmZyb20oVEVTVF9JTUdfSlBHLCAnYmFzZTY0Jyk7XG5cbiAgICAvLyBqdXN0IHNlbmQgdGhlIHNhbWUganBlZyBvdmVyIGFuZCBvdmVyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aW1lczsgaSsrKSB7XG4gICAgICBhd2FpdCBCLmRlbGF5KGludE1zKTtcbiAgICAgIG1KcGVnUmVxSGFuZGxlci5fd3JpdGUoanBnLCBudWxsLCBfLm5vb3ApO1xuICAgIH1cbiAgICBtSnBlZ1JlcUhhbmRsZXIuY2xvc2UoKTtcbiAgfSkubGlzdGVuKHBvcnQpO1xuXG4gIHJldHVybiBzZXJ2ZXI7XG59XG5cbmV4cG9ydCB7IE1KcGVnU3RyZWFtLCBpbml0TUpwZWdTZXJ2ZXIsIFRFU1RfSU1HX0pQRyB9O1xuIl0sImZpbGUiOiJsaWIvbWpwZWcuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9tanBlZy5qcyJdLCJuYW1lcyI6WyJNSnBlZ0NvbnN1bWVyIiwiaW5pdE1KcGVnQ29uc3VtZXIiLCJpZ24iLCJFcnJvciIsIlRFU1RfSU1HX0pQRyIsIk1KUEVHX1NFUlZFUl9USU1FT1VUX01TIiwiTUpwZWdTdHJlYW0iLCJXcml0YWJsZSIsImNvbnN0cnVjdG9yIiwibUpwZWdVcmwiLCJlcnJvckhhbmRsZXIiLCJfIiwibm9vcCIsIm9wdGlvbnMiLCJ1cmwiLCJjbGVhciIsImxhc3RDaHVua0Jhc2U2NCIsImlzRW1wdHkiLCJsYXN0Q2h1bmsiLCJpc0J1ZmZlciIsInRvU3RyaW5nIiwibGFzdENodW5rUE5HIiwianBnIiwiZ2V0QnVmZmVyIiwiTUlNRV9QTkciLCJlIiwibGFzdENodW5rUE5HQmFzZTY0IiwicG5nIiwicmVnaXN0ZXJTdGFydFN1Y2Nlc3MiLCJyZWdpc3RlclN0YXJ0RmFpbHVyZSIsInJlc3BvbnNlU3RyZWFtIiwiY29uc3VtZXIiLCJ1cGRhdGVDb3VudCIsInN0YXJ0Iiwic2VydmVyVGltZW91dCIsInN0b3AiLCJzdGFydFByb21pc2UiLCJCIiwicmVzIiwicmVqIiwidGltZW91dCIsIm9uRXJyIiwiZXJyIiwibG9nIiwiZXJyb3IiLCJtZXNzYWdlIiwib25DbG9zZSIsImRlYnVnIiwicmVzcG9uc2VUeXBlIiwiZGF0YSIsIm9uY2UiLCJvbiIsInBpcGUiLCJ1bnBpcGUiLCJkZXN0cm95Iiwid3JpdGUiLCJpbml0TUpwZWdTZXJ2ZXIiLCJwb3J0IiwiaW50TXMiLCJ0aW1lcyIsInNlcnZlciIsImh0dHAiLCJjcmVhdGVTZXJ2ZXIiLCJyZXEiLCJtSnBlZ1JlcUhhbmRsZXIiLCJtSnBlZ1NlcnZlciIsImNyZWF0ZVJlcUhhbmRsZXIiLCJCdWZmZXIiLCJmcm9tIiwiaSIsImRlbGF5IiwiX3dyaXRlIiwiY2xvc2UiLCJsaXN0ZW4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztB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QixTQUFMLEdBQWlCK0IsSUFBakI7QUFDQSxTQUFLakIsV0FBTDs7QUFFQSxRQUFJLEtBQUtKLG9CQUFULEVBQStCO0FBQzdCLFdBQUtBLG9CQUFMO0FBQ0EsV0FBS0Esb0JBQUwsR0FBNEIsSUFBNUI7QUFDRDtBQUNGOztBQTdKZ0M7Ozs7QUF5S25DLFNBQVM0QixlQUFULENBQTBCQyxJQUExQixFQUFnQ0MsS0FBSyxHQUFHLEdBQXhDLEVBQTZDQyxLQUFLLEdBQUcsRUFBckQsRUFBeUQ7QUFDdkQsUUFBTUMsTUFBTSxHQUFHQyxjQUFLQyxZQUFMLENBQWtCLGdCQUFnQkMsR0FBaEIsRUFBcUJ6QixHQUFyQixFQUEwQjtBQUN6RCxVQUFNMEIsZUFBZSxHQUFHQyxxQkFBWUMsZ0JBQVosQ0FBNkJILEdBQTdCLEVBQWtDekIsR0FBbEMsQ0FBeEI7O0FBQ0EsVUFBTWhCLEdBQUcsR0FBRzZDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZaEUsWUFBWixFQUEwQixRQUExQixDQUFaOztBQUdBLFNBQUssSUFBSWlFLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdWLEtBQXBCLEVBQTJCVSxDQUFDLEVBQTVCLEVBQWdDO0FBQzlCLFlBQU1oQyxrQkFBRWlDLEtBQUYsQ0FBUVosS0FBUixDQUFOOztBQUNBTSxNQUFBQSxlQUFlLENBQUNPLE1BQWhCLENBQXVCakQsR0FBdkIsRUFBNEIsSUFBNUIsRUFBa0NYLGdCQUFFQyxJQUFwQztBQUNEOztBQUNEb0QsSUFBQUEsZUFBZSxDQUFDUSxLQUFoQjtBQUNELEdBVmMsRUFVWkMsTUFWWSxDQVVMaEIsSUFWSyxDQUFmOztBQVlBLFNBQU9HLE1BQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBodHRwIGZyb20gJ2h0dHAnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZ2V0SmltcEltYWdlLCBNSU1FX1BORyB9IGZyb20gJy4vaW1hZ2UtdXRpbCc7XG5pbXBvcnQgbUpwZWdTZXJ2ZXIgZnJvbSAnbWpwZWctc2VydmVyJztcbmltcG9ydCB7IFdyaXRhYmxlIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IHJlcXVpcmVQYWNrYWdlIH0gZnJvbSAnLi9ub2RlJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5cblxuLy8gbGF6eSBsb2FkIHRoaXMsIGFzIGl0IG1pZ2h0IG5vdCBiZSBhdmFpbGFibGVcbmxldCBNSnBlZ0NvbnN1bWVyID0gbnVsbDtcblxuLyoqXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYG1qcGVnLWNvbnN1bWVyYCBtb2R1bGUgaXMgbm90IGluc3RhbGxlZCBvciBjYW5ub3QgYmUgbG9hZGVkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluaXRNSnBlZ0NvbnN1bWVyICgpIHtcbiAgaWYgKCFNSnBlZ0NvbnN1bWVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIE1KcGVnQ29uc3VtZXIgPSBhd2FpdCByZXF1aXJlUGFja2FnZSgnbWpwZWctY29uc3VtZXInKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cbiAgaWYgKCFNSnBlZ0NvbnN1bWVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtanBlZy1jb25zdW1lciBtb2R1bGUgaXMgcmVxdWlyZWQgdG8gdXNlIE1KUEVHLW92ZXItSFRUUCBmZWF0dXJlcy4gJyArXG4gICAgICAgICAgICAgICAgICAgICdQbGVhc2UgaW5zdGFsbCBpdCBmaXJzdCAobnBtIGkgLWcgbWpwZWctY29uc3VtZXIpIGFuZCByZXN0YXJ0IEFwcGl1bS4nKTtcbiAgfVxufVxuXG5jb25zdCBURVNUX0lNR19KUEcgPSAnLzlqLzRRQVlSWGhwWmdBQVNVa3FBQWdBQUFBQUFBQUFBQUFBQVAvc0FCRkVkV05yZVFBQkFBUUFBQUFlQUFELzRRT0JhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMd0E4UDNod1lXTnJaWFFnWW1WbmFXNDlJdSs3dnlJZ2FXUTlJbGMxVFRCTmNFTmxhR2xJZW5KbFUzcE9WR042YTJNNVpDSS9QaUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pCWkc5aVpTQllUVkFnUTI5eVpTQTFMall0WXpFME1DQTNPUzR4TmpBME5URXNJREl3TVRjdk1EVXZNRFl0TURFNk1EZzZNakVnSUNBZ0lDQWdJQ0krSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0lEeHlaR1k2UkdWelkzSnBjSFJwYjI0Z2NtUm1PbUZpYjNWMFBTSWlJSGh0Ykc1ek9uaHRjRTFOUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdmJXMHZJaUI0Yld4dWN6cHpkRkpsWmowaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wzTlVlWEJsTDFKbGMyOTFjbU5sVW1WbUl5SWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJYQk5UVHBQY21sbmFXNWhiRVJ2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2TkdZNU9EYzFPVGN0WkdFMk15MDBZMk0wTFRrek5ETXROR1l5Tmpnek1HVXdOamszSWlCNGJYQk5UVHBFYjJOMWJXVnVkRWxFUFNKNGJYQXVaR2xrT2psRE16STNRa1kwTjBRM05URXhSVGhDTVRsRE9UVkRNRGMyUkRFNU1EWTVJaUI0YlhCTlRUcEpibk4wWVc1alpVbEVQU0o0YlhBdWFXbGtPamxETXpJM1FrWXpOMFEzTlRFeFJUaENNVGxET1RWRE1EYzJSREU1TURZNUlpQjRiWEE2UTNKbFlYUnZjbFJ2YjJ3OUlrRmtiMkpsSUZCb2IzUnZjMmh2Y0NCRFF5QXlNREU0SUNoTllXTnBiblJ2YzJncElqNGdQSGh0Y0UxTk9rUmxjbWwyWldSR2NtOXRJSE4wVW1WbU9tbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZOR1k1T0RjMU9UY3RaR0UyTXkwMFkyTTBMVGt6TkRNdE5HWXlOamd6TUdVd05qazNJaUJ6ZEZKbFpqcGtiMk4xYldWdWRFbEVQU0o0YlhBdVpHbGtPalJtT1RnM05UazNMV1JoTmpNdE5HTmpOQzA1TXpRekxUUm1Nalk0TXpCbE1EWTVOeUl2UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUHYvdUFBNUJaRzlpWlFCa3dBQUFBQUgvMndDRUFCQUxDd3NNQ3hBTURCQVhEdzBQRnhzVUVCQVVHeDhYRnhjWEZ4OGVGeG9hR2hvWEhoNGpKU2NsSXg0dkx6TXpMeTlBUUVCQVFFQkFRRUJBUUVCQVFFQUJFUThQRVJNUkZSSVNGUlFSRkJFVUdoUVdGaFFhSmhvYUhCb2FKakFqSGg0ZUhpTXdLeTRuSnljdUt6VTFNREExTlVCQVAwQkFRRUJBUUVCQVFFQkFRUC9BQUJFSUFDQUFJQU1CSWdBQ0VRRURFUUgveEFCZ0FBRUFBd0VBQUFBQUFBQUFBQUFBQUFBQUJBVUhDQUVCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQVFNQ0Fnc0FBQUFBQUFBQUFBQUFBQUVDQkJFREVnWWhNUk9EbzdQVFZBVVdOaEVCQUFBQUFBQUFBQUFBQUFBQUFBQUFBUC9hQUF3REFRQUNFUU1SQUQ4QXo4QUFkQUFBQUFBSTgrZkU4ZEV1VFp0elpSN1ZNYjZPZFRFNUdKb1lpcnJVcC9lOHFkOXdiM1RHZS9sSjI1NTFzeDhELzlrPSc7XG5cbi8vIGFtb3VudCBvZiB0aW1lIHRvIHdhaXQgZm9yIHRoZSBmaXJzdCBpbWFnZSBpbiB0aGUgc3RyZWFtXG5jb25zdCBNSlBFR19TRVJWRVJfVElNRU9VVF9NUyA9IDEwMDAwO1xuXG4vKiogQ2xhc3Mgd2hpY2ggc3RvcmVzIHRoZSBsYXN0IGJpdCBvZiBkYXRhIHN0cmVhbWVkIGludG8gaXQgKi9cbmNsYXNzIE1KcGVnU3RyZWFtIGV4dGVuZHMgV3JpdGFibGUge1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gTUpwZWdTdHJlYW1cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1KcGVnVXJsIC0gVVJMIG9mIE1KUEVHLW92ZXItSFRUUCBzdHJlYW1cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gW2Vycm9ySGFuZGxlcj1ub29wXSAtIGFkZGl0aW9uYWwgZnVuY3Rpb24gdGhhdCB3aWxsIGJlXG4gICAqIGNhbGxlZCBpbiB0aGUgY2FzZSBvZiBhbnkgZXJyb3JzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBXcml0YWJsZSBjb25zdHJ1Y3RvclxuICAgKi9cbiAgY29uc3RydWN0b3IgKG1KcGVnVXJsLCBlcnJvckhhbmRsZXIgPSBfLm5vb3AsIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5lcnJvckhhbmRsZXIgPSBlcnJvckhhbmRsZXI7XG4gICAgdGhpcy51cmwgPSBtSnBlZ1VybDtcbiAgICB0aGlzLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBiYXNlNjQtZW5jb2RlZCB2ZXJzaW9uIG9mIHRoZSBKUEVHXG4gICAqXG4gICAqIEByZXR1cm5zIHs/c3RyaW5nfSBiYXNlNjQtZW5jb2RlZCBKUEVHIGltYWdlIGRhdGFcbiAgICogb3IgYG51bGxgIGlmIG5vIGltYWdlIGNhbiBiZSBwYXJzZWRcbiAgICovXG4gIGdldCBsYXN0Q2h1bmtCYXNlNjQgKCkge1xuICAgIHJldHVybiAhXy5pc0VtcHR5KHRoaXMubGFzdENodW5rKSAmJiBfLmlzQnVmZmVyKHRoaXMubGFzdENodW5rKVxuICAgICAgPyB0aGlzLmxhc3RDaHVuay50b1N0cmluZygnYmFzZTY0JylcbiAgICAgIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIFBORyB2ZXJzaW9uIG9mIHRoZSBKUEVHIGJ1ZmZlclxuICAgKlxuICAgKiBAcmV0dXJucyB7P0J1ZmZlcn0gUE5HIGltYWdlIGRhdGEgb3IgYG51bGxgIGlmIG5vIFBOR1xuICAgKiBpbWFnZSBjYW4gYmUgcGFyc2VkXG4gICAqL1xuICBhc3luYyBsYXN0Q2h1bmtQTkcgKCkge1xuICAgIGlmIChfLmlzRW1wdHkodGhpcy5sYXN0Q2h1bmspIHx8ICFfLmlzQnVmZmVyKHRoaXMubGFzdENodW5rKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGpwZyA9IGF3YWl0IGdldEppbXBJbWFnZSh0aGlzLmxhc3RDaHVuayk7XG4gICAgICByZXR1cm4gYXdhaXQganBnLmdldEJ1ZmZlcihNSU1FX1BORyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYmFzZTY0LWVuY29kZWQgdmVyc2lvbiBvZiB0aGUgUE5HXG4gICAqXG4gICAqIEByZXR1cm5zIHs/c3RyaW5nfSBiYXNlNjQtZW5jb2RlZCBQTkcgaW1hZ2UgZGF0YVxuICAgKiBvciBgbnVsbGAgaWYgbm8gaW1hZ2UgY2FuIGJlIHBhcnNlZFxuICAgKi9cbiAgYXN5bmMgbGFzdENodW5rUE5HQmFzZTY0ICgpIHtcbiAgICBjb25zdCBwbmcgPSBhd2FpdCB0aGlzLmxhc3RDaHVua1BORygpO1xuICAgIHJldHVybiBwbmcgPyBwbmcudG9TdHJpbmcoJ2Jhc2U2NCcpIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBpbnRlcm5hbCBzdGF0ZVxuICAgKi9cbiAgY2xlYXIgKCkge1xuICAgIHRoaXMucmVnaXN0ZXJTdGFydFN1Y2Nlc3MgPSBudWxsO1xuICAgIHRoaXMucmVnaXN0ZXJTdGFydEZhaWx1cmUgPSBudWxsO1xuICAgIHRoaXMucmVzcG9uc2VTdHJlYW0gPSBudWxsO1xuICAgIHRoaXMuY29uc3VtZXIgPSBudWxsO1xuICAgIHRoaXMubGFzdENodW5rID0gbnVsbDtcbiAgICB0aGlzLnVwZGF0ZUNvdW50ID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCByZWFkaW5nIHRoZSBNSnBlZyBzdHJlYW0gYW5kIHN0b3JpbmcgdGhlIGxhc3QgaW1hZ2VcbiAgICovXG4gIGFzeW5jIHN0YXJ0IChzZXJ2ZXJUaW1lb3V0ID0gTUpQRUdfU0VSVkVSX1RJTUVPVVRfTVMpIHtcbiAgICAvLyBlbnN1cmUgd2UncmUgbm90IHN0YXJ0ZWQgYWxyZWFkeVxuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgYXdhaXQgaW5pdE1KcGVnQ29uc3VtZXIoKTtcblxuICAgIHRoaXMuY29uc3VtZXIgPSBuZXcgTUpwZWdDb25zdW1lcigpO1xuXG4gICAgLy8gdXNlIHRoZSBkZWZlcnJlZCBwYXR0ZXJuIHNvIHdlIGNhbiB3YWl0IGZvciB0aGUgc3RhcnQgb2YgdGhlIHN0cmVhbVxuICAgIC8vIGJhc2VkIG9uIHdoYXQgY29tZXMgaW4gZnJvbSBhbiBleHRlcm5hbCBwaXBlXG4gICAgY29uc3Qgc3RhcnRQcm9taXNlID0gbmV3IEIoKHJlcywgcmVqKSA9PiB7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3RhcnRTdWNjZXNzID0gcmVzO1xuICAgICAgdGhpcy5yZWdpc3RlclN0YXJ0RmFpbHVyZSA9IHJlajtcbiAgICB9KVxuICAgIC8vIHN0YXJ0IGEgdGltZW91dCBzbyB0aGF0IGlmIHRoZSBzZXJ2ZXIgZG9lcyBub3QgcmV0dXJuIGRhdGEsIHdlIGRvbid0XG4gICAgLy8gYmxvY2sgZm9yZXZlci5cbiAgICAgIC50aW1lb3V0KHNlcnZlclRpbWVvdXQsXG4gICAgICAgIGBXYWl0ZWQgJHtzZXJ2ZXJUaW1lb3V0fW1zIGJ1dCB0aGUgTUpQRUcgc2VydmVyIG5ldmVyIHNlbnQgYW55IGltYWdlc2ApO1xuXG4gICAgY29uc3QgdXJsID0gdGhpcy51cmw7XG4gICAgY29uc3Qgb25FcnIgPSAoZXJyKSA9PiB7XG4gICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IGFuIG91dGRhdGVkIHNjcmVlbnNob3QgaWYgdGhlcmUgd2FzIGFuIGVycm9yXG4gICAgICB0aGlzLmxhc3RDaHVuayA9IG51bGw7XG5cbiAgICAgIGxvZy5lcnJvcihgRXJyb3IgZ2V0dGluZyBNSnBlZyBzY3JlZW5zaG90IGNodW5rOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgdGhpcy5lcnJvckhhbmRsZXIoZXJyKTtcbiAgICAgIGlmICh0aGlzLnJlZ2lzdGVyU3RhcnRGYWlsdXJlKSB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJTdGFydEZhaWx1cmUoZXJyKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG9uQ2xvc2UgPSAoKSA9PiB7XG4gICAgICBsb2cuZGVidWcoYFRoZSBjb25uZWN0aW9uIHRvIE1KUEVHIHNlcnZlciBhdCAke3VybH0gaGFzIGJlZW4gY2xvc2VkYCk7XG4gICAgICB0aGlzLmxhc3RDaHVuayA9IG51bGw7XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnJlc3BvbnNlU3RyZWFtID0gKGF3YWl0IGF4aW9zKHtcbiAgICAgICAgdXJsLFxuICAgICAgICByZXNwb25zZVR5cGU6ICdzdHJlYW0nLFxuICAgICAgICB0aW1lb3V0OiBzZXJ2ZXJUaW1lb3V0LFxuICAgICAgfSkpLmRhdGE7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG9uRXJyKGUpO1xuICAgIH1cblxuICAgIHRoaXMucmVzcG9uc2VTdHJlYW1cbiAgICAgIC5vbmNlKCdjbG9zZScsIG9uQ2xvc2UpXG4gICAgICAub24oJ2Vycm9yJywgb25FcnIpIC8vIGVuc3VyZSB3ZSBkbyBzb21ldGhpbmcgd2l0aCBlcnJvcnNcbiAgICAgIC5waXBlKHRoaXMuY29uc3VtZXIpIC8vIGFsbG93IGNodW5raW5nIGFuZCB0cmFuc2Zvcm1pbmcgb2YganBlZyBkYXRhXG4gICAgICAucGlwZSh0aGlzKTsgLy8gc2VuZCB0aGUgYWN0dWFsIGpwZWdzIHRvIG91cnNlbGZcblxuICAgIGF3YWl0IHN0YXJ0UHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHJlYWRpbmcgdGhlIE1KcGVnIHN0cmVhbS4gRW5zdXJlIHdlIGRpc2Nvbm5lY3QgYWxsIHRoZSBwaXBlcyBhbmQgc3RvcFxuICAgKiB0aGUgSFRUUCByZXF1ZXN0IGl0c2VsZi4gVGhlbiByZXNldCB0aGUgc3RhdGUuXG4gICAqL1xuICBzdG9wICgpIHtcbiAgICBpZiAoIXRoaXMuY29uc3VtZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlc3BvbnNlU3RyZWFtLnVucGlwZSh0aGlzLmNvbnN1bWVyKTtcbiAgICB0aGlzLmNvbnN1bWVyLnVucGlwZSh0aGlzKTtcbiAgICB0aGlzLnJlc3BvbnNlU3RyZWFtLmRlc3Ryb3koKTtcbiAgICB0aGlzLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIFdyaXRhYmxlIHdyaXRlKCkgbWV0aG9kIGluIG9yZGVyIHRvIHNhdmUgdGhlIGxhc3QgaW1hZ2UgYW5kXG4gICAqIGxvZyB0aGUgbnVtYmVyIG9mIGltYWdlcyB3ZSBoYXZlIHJlY2VpdmVkXG4gICAqIEBvdmVycmlkZVxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gZGF0YSAtIGJpbmFyeSBkYXRhIHN0cmVhbWVkIGZyb20gdGhlIE1KcGVnIGNvbnN1bWVyXG4gICAqL1xuICB3cml0ZSAoZGF0YSkge1xuICAgIHRoaXMubGFzdENodW5rID0gZGF0YTtcbiAgICB0aGlzLnVwZGF0ZUNvdW50Kys7XG5cbiAgICBpZiAodGhpcy5yZWdpc3RlclN0YXJ0U3VjY2Vzcykge1xuICAgICAgdGhpcy5yZWdpc3RlclN0YXJ0U3VjY2VzcygpO1xuICAgICAgdGhpcy5yZWdpc3RlclN0YXJ0U3VjY2VzcyA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogU3RhcnQgYW4gbWpwZWcgc2VydmVyIGZvciB0aGUgcHVycG9zZSBvZiB0ZXN0aW5nLCB3aGljaCBqdXN0IHNlbmRzIHRoZSBzYW1lXG4gKiBpbWFnZSBvdmVyIGFuZCBvdmVyLiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNsb3NpbmcgdGhlIHNlcnZlci5cbiAqIEBwYXJhbSB7aW50fSBwb3J0IC0gcG9ydCB0aGUgc2VydmVyIHNob3VsZCBsaXN0ZW4gb25cbiAqIEBwYXJhbSB7aW50fSBbaW50TXNdIC0gaG93IG9mdGVuIHRoZSBzZXJ2ZXIgc2hvdWxkIHB1c2ggYW4gaW1hZ2VcbiAqIEBwYXJhbSB7aW50fSBbdGltZXNdIC0gaG93IG1hbnkgdGltZXMgdGhlIHNlcnZlciBzaG91bGQgcHVzaCBhbiBpbWFnZSBiZWZvcmVcbiAqIGl0IGNsb3NlcyB0aGUgY29ubmVjdGlvblxuICogQHJldHVybnMge2h0dHAuU2VydmVyfVxuICovXG5mdW5jdGlvbiBpbml0TUpwZWdTZXJ2ZXIgKHBvcnQsIGludE1zID0gMzAwLCB0aW1lcyA9IDIwKSB7XG4gIGNvbnN0IHNlcnZlciA9IGh0dHAuY3JlYXRlU2VydmVyKGFzeW5jIGZ1bmN0aW9uIChyZXEsIHJlcykge1xuICAgIGNvbnN0IG1KcGVnUmVxSGFuZGxlciA9IG1KcGVnU2VydmVyLmNyZWF0ZVJlcUhhbmRsZXIocmVxLCByZXMpO1xuICAgIGNvbnN0IGpwZyA9IEJ1ZmZlci5mcm9tKFRFU1RfSU1HX0pQRywgJ2Jhc2U2NCcpO1xuXG4gICAgLy8ganVzdCBzZW5kIHRoZSBzYW1lIGpwZWcgb3ZlciBhbmQgb3ZlclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGltZXM7IGkrKykge1xuICAgICAgYXdhaXQgQi5kZWxheShpbnRNcyk7XG4gICAgICBtSnBlZ1JlcUhhbmRsZXIuX3dyaXRlKGpwZywgbnVsbCwgXy5ub29wKTtcbiAgICB9XG4gICAgbUpwZWdSZXFIYW5kbGVyLmNsb3NlKCk7XG4gIH0pLmxpc3Rlbihwb3J0KTtcblxuICByZXR1cm4gc2VydmVyO1xufVxuXG5leHBvcnQgeyBNSnBlZ1N0cmVhbSwgaW5pdE1KcGVnU2VydmVyLCBURVNUX0lNR19KUEcgfTtcbiJdLCJmaWxlIjoibGliL21qcGVnLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=

@@ -99,2 +99,2 @@ "use strict";

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90aW1pbmcuanMiXSwibmFtZXMiOlsiTlNfUEVSX1MiLCJOU19QRVJfTVMiLCJEdXJhdGlvbiIsImNvbnN0cnVjdG9yIiwibmFub3MiLCJfbmFub3MiLCJhc05hbm9TZWNvbmRzIiwiYXNNaWxsaVNlY29uZHMiLCJhc1NlY29uZHMiLCJ0b1N0cmluZyIsInRvRml4ZWQiLCJUaW1lciIsIl9zdGFydFRpbWUiLCJzdGFydFRpbWUiLCJzdGFydCIsIl8iLCJpc051bGwiLCJFcnJvciIsImlzRnVuY3Rpb24iLCJwcm9jZXNzIiwiaHJ0aW1lIiwiYmlnaW50IiwiZ2V0RHVyYXRpb24iLCJuYW5vRHVyYXRpb24iLCJpc0FycmF5Iiwic2Vjb25kcyIsImVuZFRpbWUiLCJOdW1iZXIiLCJlcnIiLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUdBLE1BQU1BLFFBQVEsR0FBRyxHQUFqQjtBQUNBLE1BQU1DLFNBQVMsR0FBRyxHQUFsQjs7QUFNQSxNQUFNQyxRQUFOLENBQWU7QUFDYkMsRUFBQUEsV0FBVyxDQUFFQyxLQUFGLEVBQVM7QUFDbEIsU0FBS0MsTUFBTCxHQUFjRCxLQUFkO0FBQ0Q7O0FBRVEsTUFBTEEsS0FBSyxHQUFJO0FBQ1gsV0FBTyxLQUFLQyxNQUFaO0FBQ0Q7O0FBT2dCLE1BQWJDLGFBQWEsR0FBSTtBQUNuQixXQUFPLEtBQUtGLEtBQVo7QUFDRDs7QUFPaUIsTUFBZEcsY0FBYyxHQUFJO0FBQ3BCLFdBQU8sS0FBS0gsS0FBTCxHQUFhSCxTQUFwQjtBQUNEOztBQU9ZLE1BQVRPLFNBQVMsR0FBSTtBQUNmLFdBQU8sS0FBS0osS0FBTCxHQUFhSixRQUFwQjtBQUNEOztBQUVEUyxFQUFBQSxRQUFRLEdBQUk7QUFFVixXQUFPLEtBQUtGLGNBQUwsQ0FBb0JHLE9BQXBCLENBQTRCLENBQTVCLENBQVA7QUFDRDs7QUF2Q1k7Ozs7QUEwQ2YsTUFBTUMsS0FBTixDQUFZO0FBSVZSLEVBQUFBLFdBQVcsR0FBSTtBQUNiLFNBQUtTLFVBQUwsR0FBa0IsSUFBbEI7QUFDRDs7QUFFWSxNQUFUQyxTQUFTLEdBQUk7QUFDZixXQUFPLEtBQUtELFVBQVo7QUFDRDs7QUFPREUsRUFBQUEsS0FBSyxHQUFJO0FBQ1AsUUFBSSxDQUFDQyxnQkFBRUMsTUFBRixDQUFTLEtBQUtILFNBQWQsQ0FBTCxFQUErQjtBQUM3QixZQUFNLElBQUlJLEtBQUosQ0FBVSxpQ0FBVixDQUFOO0FBQ0Q7O0FBRUQsU0FBS0wsVUFBTCxHQUFrQkcsZ0JBQUVHLFVBQUYsQ0FBYUMsT0FBTyxDQUFDQyxNQUFSLENBQWVDLE1BQTVCLElBQ2RGLE9BQU8sQ0FBQ0MsTUFBUixDQUFlQyxNQUFmLEVBRGMsR0FFZEYsT0FBTyxDQUFDQyxNQUFSLEVBRko7QUFHQSxXQUFPLElBQVA7QUFDRDs7QUFPREUsRUFBQUEsV0FBVyxHQUFJO0FBQ2IsUUFBSVAsZ0JBQUVDLE1BQUYsQ0FBUyxLQUFLSCxTQUFkLENBQUosRUFBOEI7QUFDNUIsWUFBTSxJQUFJSSxLQUFKLENBQVcsK0NBQVgsQ0FBTjtBQUNEOztBQUVELFFBQUlNLFlBQUo7O0FBQ0EsUUFBSVIsZ0JBQUVTLE9BQUYsQ0FBVSxLQUFLWCxTQUFmLENBQUosRUFBK0I7QUFFN0IsWUFBTSxDQUFDWSxPQUFELEVBQVVyQixLQUFWLElBQW1CZSxPQUFPLENBQUNDLE1BQVIsQ0FBZSxLQUFLUCxTQUFwQixDQUF6QjtBQUNBVSxNQUFBQSxZQUFZLEdBQUdFLE9BQU8sR0FBR3pCLFFBQVYsR0FBcUJJLEtBQXBDO0FBQ0QsS0FKRCxNQUlPLElBQUksT0FBTyxLQUFLUyxTQUFaLEtBQTBCLFFBQTFCLElBQXNDRSxnQkFBRUcsVUFBRixDQUFhQyxPQUFPLENBQUNDLE1BQVIsQ0FBZUMsTUFBNUIsQ0FBMUMsRUFBK0U7QUFFcEYsWUFBTUssT0FBTyxHQUFHUCxPQUFPLENBQUNDLE1BQVIsQ0FBZUMsTUFBZixFQUFoQjtBQUVBRSxNQUFBQSxZQUFZLEdBQUdJLE1BQU0sQ0FBQ0QsT0FBTyxHQUFHLEtBQUtiLFNBQWhCLENBQXJCO0FBQ0QsS0FMTSxNQUtBO0FBQ0wsWUFBTSxJQUFJSSxLQUFKLENBQVcsdUNBQXNDLEtBQUtKLFNBQVUsb0JBQWhFLENBQU47QUFDRDs7QUFFRCxXQUFPLElBQUlYLFFBQUosQ0FBYXFCLFlBQWIsQ0FBUDtBQUNEOztBQUVEZCxFQUFBQSxRQUFRLEdBQUk7QUFDVixRQUFJO0FBQ0YsYUFBTyxLQUFLYSxXQUFMLEdBQW1CYixRQUFuQixFQUFQO0FBQ0QsS0FGRCxDQUVFLE9BQU9tQixHQUFQLEVBQVk7QUFDWixhQUFRLFNBQVFBLEdBQUcsQ0FBQ0MsT0FBUSxHQUE1QjtBQUNEO0FBQ0Y7O0FBN0RTOzs7ZUFrRUdsQixLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuXG5jb25zdCBOU19QRVJfUyA9IDFlOTtcbmNvbnN0IE5TX1BFUl9NUyA9IDFlNjtcblxuXG4vKipcbiAqIENsYXNzIHJlcHJlc2VudGluZyBhIGR1cmF0aW9uLCBlbmNhcHN1bGF0aW5nIHRoZSBudW1iZXIgYW5kIHVuaXRzLlxuICovXG5jbGFzcyBEdXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yIChuYW5vcykge1xuICAgIHRoaXMuX25hbm9zID0gbmFub3M7XG4gIH1cblxuICBnZXQgbmFub3MgKCkge1xuICAgIHJldHVybiB0aGlzLl9uYW5vcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGR1cmF0aW9uIGFzIG5hbm9zZWNvbmRzXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBkdXJhdGlvbiBhcyBuYW5vc2Vjb25kc1xuICAgKi9cbiAgZ2V0IGFzTmFub1NlY29uZHMgKCkge1xuICAgIHJldHVybiB0aGlzLm5hbm9zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZHVyYXRpb24gY29udmVydGVkIGludG8gbWlsbGlzZWNvbmRzXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBkdXJhdGlvbiBhcyBtaWxsaXNlY29uZHNcbiAgICovXG4gIGdldCBhc01pbGxpU2Vjb25kcyAoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFub3MgLyBOU19QRVJfTVM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkdXJhdGlvbiBjb252ZXJ0ZWQgaW50byBzZWNvbmRzXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBkdXJhdGlvbiBmYXMgc2Vjb25kc1xuICAgKi9cbiAgZ2V0IGFzU2Vjb25kcyAoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFub3MgLyBOU19QRVJfUztcbiAgfVxuXG4gIHRvU3RyaW5nICgpIHtcbiAgICAvLyBkZWZhdWx0IHRvIG1pbGxpc2Vjb25kcywgcm91bmRlZFxuICAgIHJldHVybiB0aGlzLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCk7XG4gIH1cbn1cblxuY2xhc3MgVGltZXIge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIHRpbWVyXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gbnVsbDtcbiAgfVxuXG4gIGdldCBzdGFydFRpbWUgKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGFydFRpbWU7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgdGhlIHRpbWVyXG4gICAqXG4gICAqIEByZXR1cm4ge1RpbWVyfSBUaGUgY3VycmVudCBpbnN0YW5jZSwgZm9yIGNoYWluaW5nXG4gICAqL1xuICBzdGFydCAoKSB7XG4gICAgaWYgKCFfLmlzTnVsbCh0aGlzLnN0YXJ0VGltZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGltZXIgaGFzIGFscmVhZHkgYmVlbiBzdGFydGVkLicpO1xuICAgIH1cbiAgICAvLyBvbmNlIE5vZGUgMTAgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCwgdGhpcyBjaGVjayBjYW4gYmUgcmVtb3ZlZFxuICAgIHRoaXMuX3N0YXJ0VGltZSA9IF8uaXNGdW5jdGlvbihwcm9jZXNzLmhydGltZS5iaWdpbnQpXG4gICAgICA/IHByb2Nlc3MuaHJ0aW1lLmJpZ2ludCgpXG4gICAgICA6IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkdXJhdGlvbiBzaW5jZSB0aGUgdGltZXIgd2FzIHN0YXJ0ZWRcbiAgICpcbiAgICogQHJldHVybiB7RHVyYXRpb259IHRoZSBkdXJhdGlvblxuICAgKi9cbiAgZ2V0RHVyYXRpb24gKCkge1xuICAgIGlmIChfLmlzTnVsbCh0aGlzLnN0YXJ0VGltZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGdldCBkdXJhdGlvbi4gVGltZXIgd2FzIG5vdCBzdGFydGVkYCk7XG4gICAgfVxuXG4gICAgbGV0IG5hbm9EdXJhdGlvbjtcbiAgICBpZiAoXy5pc0FycmF5KHRoaXMuc3RhcnRUaW1lKSkge1xuICAgICAgLy8gc3RhcnRUaW1lIHdhcyBjcmVhdGVkIHVzaW5nIHByb2Nlc3MuaHJ0aW1lKClcbiAgICAgIGNvbnN0IFtzZWNvbmRzLCBuYW5vc10gPSBwcm9jZXNzLmhydGltZSh0aGlzLnN0YXJ0VGltZSk7XG4gICAgICBuYW5vRHVyYXRpb24gPSBzZWNvbmRzICogTlNfUEVSX1MgKyBuYW5vcztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnN0YXJ0VGltZSA9PT0gJ2JpZ2ludCcgJiYgXy5pc0Z1bmN0aW9uKHByb2Nlc3MuaHJ0aW1lLmJpZ2ludCkpIHtcbiAgICAgIC8vIHN0YXJ0VGltZSB3YXMgY3JlYXRlZCB1c2luZyBwcm9jZXNzLmhydGltZS5iaWdpbnQoKVxuICAgICAgY29uc3QgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lLmJpZ2ludCgpO1xuICAgICAgLy8gZ2V0IHRoZSBkaWZmZXJlbmNlLCBhbmQgY29udmVydCB0byBudW1iZXJcbiAgICAgIG5hbm9EdXJhdGlvbiA9IE51bWJlcihlbmRUaW1lIC0gdGhpcy5zdGFydFRpbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBnZXQgZHVyYXRpb24uIFN0YXJ0IHRpbWUgJyR7dGhpcy5zdGFydFRpbWV9JyBjYW5ub3QgYmUgcGFyc2VkYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbihuYW5vRHVyYXRpb24pO1xuICB9XG5cbiAgdG9TdHJpbmcgKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREdXJhdGlvbigpLnRvU3RyaW5nKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gYDxlcnI6ICR7ZXJyLm1lc3NhZ2V9PmA7XG4gICAgfVxuICB9XG59XG5cblxuZXhwb3J0IHsgVGltZXIsIER1cmF0aW9uIH07XG5leHBvcnQgZGVmYXVsdCBUaW1lcjtcbiJdLCJmaWxlIjoibGliL3RpbWluZy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90aW1pbmcuanMiXSwibmFtZXMiOlsiTlNfUEVSX1MiLCJOU19QRVJfTVMiLCJEdXJhdGlvbiIsImNvbnN0cnVjdG9yIiwibmFub3MiLCJfbmFub3MiLCJhc05hbm9TZWNvbmRzIiwiYXNNaWxsaVNlY29uZHMiLCJhc1NlY29uZHMiLCJ0b1N0cmluZyIsInRvRml4ZWQiLCJUaW1lciIsIl9zdGFydFRpbWUiLCJzdGFydFRpbWUiLCJzdGFydCIsIl8iLCJpc051bGwiLCJFcnJvciIsImlzRnVuY3Rpb24iLCJwcm9jZXNzIiwiaHJ0aW1lIiwiYmlnaW50IiwiZ2V0RHVyYXRpb24iLCJuYW5vRHVyYXRpb24iLCJpc0FycmF5Iiwic2Vjb25kcyIsImVuZFRpbWUiLCJOdW1iZXIiLCJlcnIiLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUdBLE1BQU1BLFFBQVEsR0FBRyxHQUFqQjtBQUNBLE1BQU1DLFNBQVMsR0FBRyxHQUFsQjs7QUFNQSxNQUFNQyxRQUFOLENBQWU7QUFDYkMsRUFBQUEsV0FBVyxDQUFFQyxLQUFGLEVBQVM7QUFDbEIsU0FBS0MsTUFBTCxHQUFjRCxLQUFkO0FBQ0Q7O0FBRUQsTUFBSUEsS0FBSixHQUFhO0FBQ1gsV0FBTyxLQUFLQyxNQUFaO0FBQ0Q7O0FBT0QsTUFBSUMsYUFBSixHQUFxQjtBQUNuQixXQUFPLEtBQUtGLEtBQVo7QUFDRDs7QUFPRCxNQUFJRyxjQUFKLEdBQXNCO0FBQ3BCLFdBQU8sS0FBS0gsS0FBTCxHQUFhSCxTQUFwQjtBQUNEOztBQU9ELE1BQUlPLFNBQUosR0FBaUI7QUFDZixXQUFPLEtBQUtKLEtBQUwsR0FBYUosUUFBcEI7QUFDRDs7QUFFRFMsRUFBQUEsUUFBUSxHQUFJO0FBRVYsV0FBTyxLQUFLRixjQUFMLENBQW9CRyxPQUFwQixDQUE0QixDQUE1QixDQUFQO0FBQ0Q7O0FBdkNZOzs7O0FBMENmLE1BQU1DLEtBQU4sQ0FBWTtBQUlWUixFQUFBQSxXQUFXLEdBQUk7QUFDYixTQUFLUyxVQUFMLEdBQWtCLElBQWxCO0FBQ0Q7O0FBRUQsTUFBSUMsU0FBSixHQUFpQjtBQUNmLFdBQU8sS0FBS0QsVUFBWjtBQUNEOztBQU9ERSxFQUFBQSxLQUFLLEdBQUk7QUFDUCxRQUFJLENBQUNDLGdCQUFFQyxNQUFGLENBQVMsS0FBS0gsU0FBZCxDQUFMLEVBQStCO0FBQzdCLFlBQU0sSUFBSUksS0FBSixDQUFVLGlDQUFWLENBQU47QUFDRDs7QUFFRCxTQUFLTCxVQUFMLEdBQWtCRyxnQkFBRUcsVUFBRixDQUFhQyxPQUFPLENBQUNDLE1BQVIsQ0FBZUMsTUFBNUIsSUFDZEYsT0FBTyxDQUFDQyxNQUFSLENBQWVDLE1BQWYsRUFEYyxHQUVkRixPQUFPLENBQUNDLE1BQVIsRUFGSjtBQUdBLFdBQU8sSUFBUDtBQUNEOztBQU9ERSxFQUFBQSxXQUFXLEdBQUk7QUFDYixRQUFJUCxnQkFBRUMsTUFBRixDQUFTLEtBQUtILFNBQWQsQ0FBSixFQUE4QjtBQUM1QixZQUFNLElBQUlJLEtBQUosQ0FBVywrQ0FBWCxDQUFOO0FBQ0Q7O0FBRUQsUUFBSU0sWUFBSjs7QUFDQSxRQUFJUixnQkFBRVMsT0FBRixDQUFVLEtBQUtYLFNBQWYsQ0FBSixFQUErQjtBQUU3QixZQUFNLENBQUNZLE9BQUQsRUFBVXJCLEtBQVYsSUFBbUJlLE9BQU8sQ0FBQ0MsTUFBUixDQUFlLEtBQUtQLFNBQXBCLENBQXpCO0FBQ0FVLE1BQUFBLFlBQVksR0FBR0UsT0FBTyxHQUFHekIsUUFBVixHQUFxQkksS0FBcEM7QUFDRCxLQUpELE1BSU8sSUFBSSxPQUFPLEtBQUtTLFNBQVosS0FBMEIsUUFBMUIsSUFBc0NFLGdCQUFFRyxVQUFGLENBQWFDLE9BQU8sQ0FBQ0MsTUFBUixDQUFlQyxNQUE1QixDQUExQyxFQUErRTtBQUVwRixZQUFNSyxPQUFPLEdBQUdQLE9BQU8sQ0FBQ0MsTUFBUixDQUFlQyxNQUFmLEVBQWhCO0FBRUFFLE1BQUFBLFlBQVksR0FBR0ksTUFBTSxDQUFDRCxPQUFPLEdBQUcsS0FBS2IsU0FBaEIsQ0FBckI7QUFDRCxLQUxNLE1BS0E7QUFDTCxZQUFNLElBQUlJLEtBQUosQ0FBVyx1Q0FBc0MsS0FBS0osU0FBVSxvQkFBaEUsQ0FBTjtBQUNEOztBQUVELFdBQU8sSUFBSVgsUUFBSixDQUFhcUIsWUFBYixDQUFQO0FBQ0Q7O0FBRURkLEVBQUFBLFFBQVEsR0FBSTtBQUNWLFFBQUk7QUFDRixhQUFPLEtBQUthLFdBQUwsR0FBbUJiLFFBQW5CLEVBQVA7QUFDRCxLQUZELENBRUUsT0FBT21CLEdBQVAsRUFBWTtBQUNaLGFBQVEsU0FBUUEsR0FBRyxDQUFDQyxPQUFRLEdBQTVCO0FBQ0Q7QUFDRjs7QUE3RFM7OztlQWtFR2xCLEsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5cbmNvbnN0IE5TX1BFUl9TID0gMWU5O1xuY29uc3QgTlNfUEVSX01TID0gMWU2O1xuXG5cbi8qKlxuICogQ2xhc3MgcmVwcmVzZW50aW5nIGEgZHVyYXRpb24sIGVuY2Fwc3VsYXRpbmcgdGhlIG51bWJlciBhbmQgdW5pdHMuXG4gKi9cbmNsYXNzIER1cmF0aW9uIHtcbiAgY29uc3RydWN0b3IgKG5hbm9zKSB7XG4gICAgdGhpcy5fbmFub3MgPSBuYW5vcztcbiAgfVxuXG4gIGdldCBuYW5vcyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbm9zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZHVyYXRpb24gYXMgbmFub3NlY29uZHNcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIGR1cmF0aW9uIGFzIG5hbm9zZWNvbmRzXG4gICAqL1xuICBnZXQgYXNOYW5vU2Vjb25kcyAoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFub3M7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkdXJhdGlvbiBjb252ZXJ0ZWQgaW50byBtaWxsaXNlY29uZHNcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIGR1cmF0aW9uIGFzIG1pbGxpc2Vjb25kc1xuICAgKi9cbiAgZ2V0IGFzTWlsbGlTZWNvbmRzICgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW5vcyAvIE5TX1BFUl9NUztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGR1cmF0aW9uIGNvbnZlcnRlZCBpbnRvIHNlY29uZHNcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIGR1cmF0aW9uIGZhcyBzZWNvbmRzXG4gICAqL1xuICBnZXQgYXNTZWNvbmRzICgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW5vcyAvIE5TX1BFUl9TO1xuICB9XG5cbiAgdG9TdHJpbmcgKCkge1xuICAgIC8vIGRlZmF1bHQgdG8gbWlsbGlzZWNvbmRzLCByb3VuZGVkXG4gICAgcmV0dXJuIHRoaXMuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKTtcbiAgfVxufVxuXG5jbGFzcyBUaW1lciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGltZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBudWxsO1xuICB9XG5cbiAgZ2V0IHN0YXJ0VGltZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0VGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgdGltZXJcbiAgICpcbiAgICogQHJldHVybiB7VGltZXJ9IFRoZSBjdXJyZW50IGluc3RhbmNlLCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIHN0YXJ0ICgpIHtcbiAgICBpZiAoIV8uaXNOdWxsKHRoaXMuc3RhcnRUaW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaW1lciBoYXMgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQuJyk7XG4gICAgfVxuICAgIC8vIG9uY2UgTm9kZSAxMCBpcyBubyBsb25nZXIgc3VwcG9ydGVkLCB0aGlzIGNoZWNrIGNhbiBiZSByZW1vdmVkXG4gICAgdGhpcy5fc3RhcnRUaW1lID0gXy5pc0Z1bmN0aW9uKHByb2Nlc3MuaHJ0aW1lLmJpZ2ludClcbiAgICAgID8gcHJvY2Vzcy5ocnRpbWUuYmlnaW50KClcbiAgICAgIDogcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGR1cmF0aW9uIHNpbmNlIHRoZSB0aW1lciB3YXMgc3RhcnRlZFxuICAgKlxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0gdGhlIGR1cmF0aW9uXG4gICAqL1xuICBnZXREdXJhdGlvbiAoKSB7XG4gICAgaWYgKF8uaXNOdWxsKHRoaXMuc3RhcnRUaW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZ2V0IGR1cmF0aW9uLiBUaW1lciB3YXMgbm90IHN0YXJ0ZWRgKTtcbiAgICB9XG5cbiAgICBsZXQgbmFub0R1cmF0aW9uO1xuICAgIGlmIChfLmlzQXJyYXkodGhpcy5zdGFydFRpbWUpKSB7XG4gICAgICAvLyBzdGFydFRpbWUgd2FzIGNyZWF0ZWQgdXNpbmcgcHJvY2Vzcy5ocnRpbWUoKVxuICAgICAgY29uc3QgW3NlY29uZHMsIG5hbm9zXSA9IHByb2Nlc3MuaHJ0aW1lKHRoaXMuc3RhcnRUaW1lKTtcbiAgICAgIG5hbm9EdXJhdGlvbiA9IHNlY29uZHMgKiBOU19QRVJfUyArIG5hbm9zO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuc3RhcnRUaW1lID09PSAnYmlnaW50JyAmJiBfLmlzRnVuY3Rpb24ocHJvY2Vzcy5ocnRpbWUuYmlnaW50KSkge1xuICAgICAgLy8gc3RhcnRUaW1lIHdhcyBjcmVhdGVkIHVzaW5nIHByb2Nlc3MuaHJ0aW1lLmJpZ2ludCgpXG4gICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUuYmlnaW50KCk7XG4gICAgICAvLyBnZXQgdGhlIGRpZmZlcmVuY2UsIGFuZCBjb252ZXJ0IHRvIG51bWJlclxuICAgICAgbmFub0R1cmF0aW9uID0gTnVtYmVyKGVuZFRpbWUgLSB0aGlzLnN0YXJ0VGltZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGdldCBkdXJhdGlvbi4gU3RhcnQgdGltZSAnJHt0aGlzLnN0YXJ0VGltZX0nIGNhbm5vdCBiZSBwYXJzZWRgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKG5hbm9EdXJhdGlvbik7XG4gIH1cblxuICB0b1N0cmluZyAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmdldER1cmF0aW9uKCkudG9TdHJpbmcoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBgPGVycjogJHtlcnIubWVzc2FnZX0+YDtcbiAgICB9XG4gIH1cbn1cblxuXG5leHBvcnQgeyBUaW1lciwgRHVyYXRpb24gfTtcbmV4cG9ydCBkZWZhdWx0IFRpbWVyO1xuIl0sImZpbGUiOiJsaWIvdGltaW5nLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=

@@ -421,2 +421,2 @@ "use strict";

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi96aXAuanMiXSwibmFtZXMiOlsib3BlblppcCIsIkIiLCJwcm9taXNpZnkiLCJ5YXV6bCIsIm9wZW4iLCJwaXBlbGluZSIsInN0cmVhbSIsIlpJUF9NQUdJQyIsIklGTVQiLCJJRkRJUiIsIklGTE5LIiwiWmlwRXh0cmFjdG9yIiwiY29uc3RydWN0b3IiLCJzb3VyY2VQYXRoIiwib3B0cyIsInppcFBhdGgiLCJjYW5jZWxlZCIsImV4dHJhY3RGaWxlTmFtZSIsImVudHJ5IiwiXyIsImlzQnVmZmVyIiwiZmlsZU5hbWUiLCJ0b1N0cmluZyIsImZpbGVOYW1lc0VuY29kaW5nIiwiZXh0cmFjdCIsImRpciIsInppcGZpbGUiLCJsYXp5RW50cmllcyIsImRlY29kZVN0cmluZ3MiLCJyZXNvbHZlIiwicmVqZWN0Iiwib24iLCJlcnIiLCJyZWFkRW50cnkiLCJzdGFydHNXaXRoIiwiZGVzdERpciIsInBhdGgiLCJkaXJuYW1lIiwiam9pbiIsImZzIiwibWtkaXIiLCJyZWN1cnNpdmUiLCJjYW5vbmljYWxEZXN0RGlyIiwicmVhbHBhdGgiLCJyZWxhdGl2ZURlc3REaXIiLCJyZWxhdGl2ZSIsInNwbGl0Iiwic2VwIiwiaW5jbHVkZXMiLCJFcnJvciIsImV4dHJhY3RFbnRyeSIsImNsb3NlIiwiZGVzdCIsIm1vZGUiLCJleHRlcm5hbEZpbGVBdHRyaWJ1dGVzIiwiaXNTeW1saW5rIiwiaXNEaXIiLCJlbmRzV2l0aCIsInZlcnNpb25NYWRlQnkiLCJwcm9jTW9kZSIsImdldEV4dHJhY3RlZE1vZGUiLCJta2Rpck9wdGlvbnMiLCJyZWFkU3RyZWFtIiwib3BlblJlYWRTdHJlYW0iLCJiaW5kIiwibGluayIsInN5bWxpbmsiLCJjcmVhdGVXcml0ZVN0cmVhbSIsImVudHJ5TW9kZSIsImRlZmF1bHREaXJNb2RlIiwiZGVmYXVsdEZpbGVNb2RlIiwicGFyc2VJbnQiLCJleHRyYWN0QWxsVG8iLCJ6aXBGaWxlUGF0aCIsImlzQWJzb2x1dGUiLCJleHRyYWN0b3IiLCJfZXh0cmFjdEVudHJ5VG8iLCJ6aXBGaWxlIiwiZHN0UGF0aCIsInRlc3QiLCJleGlzdHMiLCJ3cml0ZVN0cmVhbSIsImZsYWdzIiwid3JpdGVTdHJlYW1Qcm9taXNlIiwib25jZSIsInppcFJlYWRTdHJlYW0iLCJ6aXBSZWFkU3RyZWFtUHJvbWlzZSIsInBpcGUiLCJhbGwiLCJyZWFkRW50cmllcyIsIm9uRW50cnkiLCJyZXMiLCJleHRyYWN0RW50cnlUbyIsImVtaXQiLCJ0b0luTWVtb3J5WmlwIiwic3JjUGF0aCIsImlzTWV0ZXJlZCIsImVuY29kZVRvQmFzZTY0IiwibWF4U2l6ZSIsIkdpQiIsImxldmVsIiwicmVzdWx0QnVmZmVycyIsInJlc3VsdEJ1ZmZlcnNTaXplIiwicmVzdWx0V3JpdGVTdHJlYW0iLCJXcml0YWJsZSIsIndyaXRlIiwiYnVmZmVyIiwiZW5jb2RpbmciLCJuZXh0IiwicHVzaCIsImxlbmd0aCIsImFyY2hpdmUiLCJ6bGliIiwic3JjU2l6ZSIsImJhc2U2NEVuY29kZXJTdHJlYW0iLCJCYXNlNjRFbmNvZGUiLCJyZXN1bHRXcml0ZVN0cmVhbVByb21pc2UiLCJlIiwidW5waXBlIiwiYWJvcnQiLCJkZXN0cm95IiwicG9pbnRlciIsImFyY2hpdmVTdHJlYW1Qcm9taXNlIiwibWVzc2FnZSIsInRpbWVyIiwiVGltZXIiLCJzdGFydCIsInN0YXQiLCJpc0RpcmVjdG9yeSIsImRpcmVjdG9yeSIsImZpbGUiLCJuYW1lIiwiYmFzZW5hbWUiLCJmaW5hbGl6ZSIsImxvZyIsImRlYnVnIiwiZ2V0RHVyYXRpb24iLCJhc1NlY29uZHMiLCJ0b0ZpeGVkIiwiQnVmZmVyIiwiY29uY2F0IiwiYXNzZXJ0VmFsaWRaaXAiLCJmaWxlUGF0aCIsInNpemUiLCJmZCIsImFsbG9jIiwicmVhZCIsInNpZ25hdHVyZSIsInRvQXJjaGl2ZSIsInNyYyIsInBhdHRlcm4iLCJjd2QiLCJpZ25vcmUiLCJnbG9iIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLE9BQU8sR0FBR0Msa0JBQUVDLFNBQUYsQ0FBWUMsZUFBTUMsSUFBbEIsQ0FBaEI7O0FBQ0EsTUFBTUMsUUFBUSxHQUFHSixrQkFBRUMsU0FBRixDQUFZSSxnQkFBT0QsUUFBbkIsQ0FBakI7O0FBQ0EsTUFBTUUsU0FBUyxHQUFHLElBQWxCO0FBQ0EsTUFBTUMsSUFBSSxHQUFHLEtBQWI7QUFDQSxNQUFNQyxLQUFLLEdBQUcsS0FBZDtBQUNBLE1BQU1DLEtBQUssR0FBRyxLQUFkOztBQUdBLE1BQU1DLFlBQU4sQ0FBbUI7QUFDakJDLEVBQUFBLFdBQVcsQ0FBRUMsVUFBRixFQUFjQyxJQUFJLEdBQUcsRUFBckIsRUFBeUI7QUFDbEMsU0FBS0MsT0FBTCxHQUFlRixVQUFmO0FBQ0EsU0FBS0MsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0UsUUFBTCxHQUFnQixLQUFoQjtBQUNEOztBQUVEQyxFQUFBQSxlQUFlLENBQUVDLEtBQUYsRUFBUztBQUN0QixXQUFPQyxnQkFBRUMsUUFBRixDQUFXRixLQUFLLENBQUNHLFFBQWpCLElBQTZCSCxLQUFLLENBQUNHLFFBQU4sQ0FBZUMsUUFBZixDQUF3QixLQUFLUixJQUFMLENBQVVTLGlCQUFsQyxDQUE3QixHQUFvRkwsS0FBSyxDQUFDRyxRQUFqRztBQUNEOztBQUVZLFFBQVBHLE9BQU8sR0FBSTtBQUNmLFVBQU07QUFDSkMsTUFBQUEsR0FESTtBQUVKRixNQUFBQTtBQUZJLFFBR0YsS0FBS1QsSUFIVDtBQUlBLFNBQUtZLE9BQUwsR0FBZSxNQUFNMUIsT0FBTyxDQUFDLEtBQUtlLE9BQU4sRUFBZTtBQUN6Q1ksTUFBQUEsV0FBVyxFQUFFLElBRDRCO0FBR3pDQyxNQUFBQSxhQUFhLEVBQUUsQ0FBQ0w7QUFIeUIsS0FBZixDQUE1QjtBQUtBLFNBQUtQLFFBQUwsR0FBZ0IsS0FBaEI7QUFFQSxXQUFPLElBQUlmLGlCQUFKLENBQU0sQ0FBQzRCLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtBQUNoQyxXQUFLSixPQUFMLENBQWFLLEVBQWIsQ0FBZ0IsT0FBaEIsRUFBMEJDLEdBQUQsSUFBUztBQUNoQyxhQUFLaEIsUUFBTCxHQUFnQixJQUFoQjtBQUNBYyxRQUFBQSxNQUFNLENBQUNFLEdBQUQsQ0FBTjtBQUNELE9BSEQ7QUFJQSxXQUFLTixPQUFMLENBQWFPLFNBQWI7QUFFQSxXQUFLUCxPQUFMLENBQWFLLEVBQWIsQ0FBZ0IsT0FBaEIsRUFBeUIsTUFBTTtBQUM3QixZQUFJLENBQUMsS0FBS2YsUUFBVixFQUFvQjtBQUNsQmEsVUFBQUEsT0FBTztBQUNSO0FBQ0YsT0FKRDtBQU1BLFdBQUtILE9BQUwsQ0FBYUssRUFBYixDQUFnQixPQUFoQixFQUF5QixNQUFPYixLQUFQLElBQWlCO0FBQ3hDLFlBQUksS0FBS0YsUUFBVCxFQUFtQjtBQUNqQjtBQUNEOztBQUVELGNBQU1LLFFBQVEsR0FBRyxLQUFLSixlQUFMLENBQXFCQyxLQUFyQixDQUFqQjs7QUFDQSxZQUFJRyxRQUFRLENBQUNhLFVBQVQsQ0FBb0IsV0FBcEIsQ0FBSixFQUFzQztBQUNwQyxlQUFLUixPQUFMLENBQWFPLFNBQWI7QUFDQTtBQUNEOztBQUVELGNBQU1FLE9BQU8sR0FBR0MsY0FBS0MsT0FBTCxDQUFhRCxjQUFLRSxJQUFMLENBQVViLEdBQVYsRUFBZUosUUFBZixDQUFiLENBQWhCOztBQUNBLFlBQUk7QUFDRixnQkFBTWtCLGFBQUdDLEtBQUgsQ0FBU0wsT0FBVCxFQUFrQjtBQUFDTSxZQUFBQSxTQUFTLEVBQUU7QUFBWixXQUFsQixDQUFOO0FBRUEsZ0JBQU1DLGdCQUFnQixHQUFHLE1BQU1ILGFBQUdJLFFBQUgsQ0FBWVIsT0FBWixDQUEvQjs7QUFDQSxnQkFBTVMsZUFBZSxHQUFHUixjQUFLUyxRQUFMLENBQWNwQixHQUFkLEVBQW1CaUIsZ0JBQW5CLENBQXhCOztBQUVBLGNBQUlFLGVBQWUsQ0FBQ0UsS0FBaEIsQ0FBc0JWLGNBQUtXLEdBQTNCLEVBQWdDQyxRQUFoQyxDQUF5QyxJQUF6QyxDQUFKLEVBQW9EO0FBQ2xELGdCQUFJQyxLQUFKLENBQVcsc0JBQXFCUCxnQkFBaUIsaUNBQWdDckIsUUFBUyxFQUExRjtBQUNEOztBQUVELGdCQUFNLEtBQUs2QixZQUFMLENBQWtCaEMsS0FBbEIsQ0FBTjtBQUNBLGVBQUtRLE9BQUwsQ0FBYU8sU0FBYjtBQUNELFNBWkQsQ0FZRSxPQUFPRCxHQUFQLEVBQVk7QUFDWixlQUFLaEIsUUFBTCxHQUFnQixJQUFoQjtBQUNBLGVBQUtVLE9BQUwsQ0FBYXlCLEtBQWI7QUFDQXJCLFVBQUFBLE1BQU0sQ0FBQ0UsR0FBRCxDQUFOO0FBQ0Q7QUFDRixPQTdCRDtBQThCRCxLQTNDTSxDQUFQO0FBNENEOztBQUVpQixRQUFaa0IsWUFBWSxDQUFFaEMsS0FBRixFQUFTO0FBQ3pCLFFBQUksS0FBS0YsUUFBVCxFQUFtQjtBQUNqQjtBQUNEOztBQUVELFVBQU07QUFDSlMsTUFBQUE7QUFESSxRQUVGLEtBQUtYLElBRlQ7QUFJQSxVQUFNTyxRQUFRLEdBQUcsS0FBS0osZUFBTCxDQUFxQkMsS0FBckIsQ0FBakI7O0FBQ0EsVUFBTWtDLElBQUksR0FBR2hCLGNBQUtFLElBQUwsQ0FBVWIsR0FBVixFQUFlSixRQUFmLENBQWI7O0FBR0EsVUFBTWdDLElBQUksR0FBSW5DLEtBQUssQ0FBQ29DLHNCQUFOLElBQWdDLEVBQWpDLEdBQXVDLE1BQXBEO0FBRUEsVUFBTUMsU0FBUyxHQUFHLENBQUNGLElBQUksR0FBRzdDLElBQVIsTUFBa0JFLEtBQXBDO0FBQ0EsVUFBTThDLEtBQUssR0FBRyxDQUFDSCxJQUFJLEdBQUc3QyxJQUFSLE1BQWtCQyxLQUFsQixJQUVUWSxRQUFRLENBQUNvQyxRQUFULENBQWtCLEdBQWxCLENBRlMsSUFLUnZDLEtBQUssQ0FBQ3dDLGFBQU4sSUFBdUIsQ0FBdkIsS0FBNkIsQ0FBN0IsSUFBa0N4QyxLQUFLLENBQUNvQyxzQkFBTixLQUFpQyxFQUx6RTtBQU1BLFVBQU1LLFFBQVEsR0FBRyxLQUFLQyxnQkFBTCxDQUFzQlAsSUFBdEIsRUFBNEJHLEtBQTVCLElBQXFDLEtBQXREO0FBRUEsVUFBTXJCLE9BQU8sR0FBR3FCLEtBQUssR0FBR0osSUFBSCxHQUFVaEIsY0FBS0MsT0FBTCxDQUFhZSxJQUFiLENBQS9CO0FBQ0EsVUFBTVMsWUFBWSxHQUFHO0FBQUVwQixNQUFBQSxTQUFTLEVBQUU7QUFBYixLQUFyQjs7QUFDQSxRQUFJZSxLQUFKLEVBQVc7QUFDVEssTUFBQUEsWUFBWSxDQUFDUixJQUFiLEdBQW9CTSxRQUFwQjtBQUNEOztBQUNELFVBQU1wQixhQUFHQyxLQUFILENBQVNMLE9BQVQsRUFBa0IwQixZQUFsQixDQUFOOztBQUNBLFFBQUlMLEtBQUosRUFBVztBQUNUO0FBQ0Q7O0FBRUQsVUFBTU0sVUFBVSxHQUFHLE1BQU03RCxrQkFBRUMsU0FBRixDQUFZLEtBQUt3QixPQUFMLENBQWFxQyxjQUFiLENBQTRCQyxJQUE1QixDQUFpQyxLQUFLdEMsT0FBdEMsQ0FBWixFQUE0RFIsS0FBNUQsQ0FBekI7O0FBQ0EsUUFBSXFDLFNBQUosRUFBZTtBQUNiLFlBQU1VLElBQUksR0FBRyxNQUFNLHdCQUFVSCxVQUFWLENBQW5CO0FBQ0EsWUFBTXZCLGFBQUcyQixPQUFILENBQVdELElBQVgsRUFBaUJiLElBQWpCLENBQU47QUFDRCxLQUhELE1BR087QUFDTCxZQUFNL0MsUUFBUSxDQUFDeUQsVUFBRCxFQUFhdkIsYUFBRzRCLGlCQUFILENBQXFCZixJQUFyQixFQUEyQjtBQUFFQyxRQUFBQSxJQUFJLEVBQUVNO0FBQVIsT0FBM0IsQ0FBYixDQUFkO0FBQ0Q7QUFDRjs7QUFFREMsRUFBQUEsZ0JBQWdCLENBQUVRLFNBQUYsRUFBYVosS0FBYixFQUFvQjtBQUNsQyxVQUFNO0FBQ0phLE1BQUFBLGNBREk7QUFFSkMsTUFBQUE7QUFGSSxRQUdGLEtBQUt4RCxJQUhUO0FBS0EsUUFBSXVDLElBQUksR0FBR2UsU0FBWDs7QUFFQSxRQUFJZixJQUFJLEtBQUssQ0FBYixFQUFnQjtBQUNkLFVBQUlHLEtBQUosRUFBVztBQUNULFlBQUlhLGNBQUosRUFBb0I7QUFDbEJoQixVQUFBQSxJQUFJLEdBQUdrQixRQUFRLENBQUNGLGNBQUQsRUFBaUIsRUFBakIsQ0FBZjtBQUNEOztBQUVELFlBQUksQ0FBQ2hCLElBQUwsRUFBVztBQUNUQSxVQUFBQSxJQUFJLEdBQUcsS0FBUDtBQUNEO0FBQ0YsT0FSRCxNQVFPO0FBQ0wsWUFBSWlCLGVBQUosRUFBcUI7QUFDbkJqQixVQUFBQSxJQUFJLEdBQUdrQixRQUFRLENBQUNELGVBQUQsRUFBa0IsRUFBbEIsQ0FBZjtBQUNEOztBQUVELFlBQUksQ0FBQ2pCLElBQUwsRUFBVztBQUNUQSxVQUFBQSxJQUFJLEdBQUcsS0FBUDtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxXQUFPQSxJQUFQO0FBQ0Q7O0FBN0lnQjs7QUF1S25CLGVBQWVtQixZQUFmLENBQTZCQyxXQUE3QixFQUEwQ3RDLE9BQTFDLEVBQW1EckIsSUFBSSxHQUFHLEVBQTFELEVBQThEO0FBQzVELE1BQUksQ0FBQ3NCLGNBQUtzQyxVQUFMLENBQWdCdkMsT0FBaEIsQ0FBTCxFQUErQjtBQUM3QixVQUFNLElBQUljLEtBQUosQ0FBVyxnQkFBZWQsT0FBUSw4QkFBbEMsQ0FBTjtBQUNEOztBQUVELFFBQU1JLGFBQUdDLEtBQUgsQ0FBU0wsT0FBVCxFQUFrQjtBQUFDTSxJQUFBQSxTQUFTLEVBQUU7QUFBWixHQUFsQixDQUFOO0FBQ0EsUUFBTWtDLFNBQVMsR0FBRyxJQUFJaEUsWUFBSixDQUFpQjhELFdBQWpCLEVBQThCLEVBQzlDLEdBQUczRCxJQUQyQztBQUU5Q1csSUFBQUEsR0FBRyxFQUFFLE1BQU1jLGFBQUdJLFFBQUgsQ0FBWVIsT0FBWjtBQUZtQyxHQUE5QixDQUFsQjtBQUlBLFFBQU13QyxTQUFTLENBQUNuRCxPQUFWLEVBQU47QUFDRDs7QUFTRCxlQUFlb0QsZUFBZixDQUFnQ0MsT0FBaEMsRUFBeUMzRCxLQUF6QyxFQUFnRGlCLE9BQWhELEVBQXlEO0FBQ3ZELFFBQU0yQyxPQUFPLEdBQUcxQyxjQUFLUCxPQUFMLENBQWFNLE9BQWIsRUFBc0JqQixLQUFLLENBQUNHLFFBQTVCLENBQWhCOztBQUdBLE1BQUksTUFBTTBELElBQU4sQ0FBVzdELEtBQUssQ0FBQ0csUUFBakIsQ0FBSixFQUFnQztBQUM5QixRQUFJLEVBQUMsTUFBTWtCLGFBQUd5QyxNQUFILENBQVVGLE9BQVYsQ0FBUCxDQUFKLEVBQStCO0FBQzdCLFlBQU0sb0JBQU9BLE9BQVAsQ0FBTjtBQUNEOztBQUNEO0FBQ0QsR0FMRCxNQUtPLElBQUksRUFBQyxNQUFNdkMsYUFBR3lDLE1BQUgsQ0FBVTVDLGNBQUtDLE9BQUwsQ0FBYXlDLE9BQWIsQ0FBVixDQUFQLENBQUosRUFBNkM7QUFDbEQsVUFBTSxvQkFBTzFDLGNBQUtDLE9BQUwsQ0FBYXlDLE9BQWIsQ0FBUCxDQUFOO0FBQ0Q7O0FBR0QsUUFBTUcsV0FBVyxHQUFHLDJCQUFrQkgsT0FBbEIsRUFBMkI7QUFBQ0ksSUFBQUEsS0FBSyxFQUFFO0FBQVIsR0FBM0IsQ0FBcEI7QUFDQSxRQUFNQyxrQkFBa0IsR0FBRyxJQUFJbEYsaUJBQUosQ0FBTSxDQUFDNEIsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQ3BEbUQsSUFBQUEsV0FBVyxDQUFDRyxJQUFaLENBQWlCLFFBQWpCLEVBQTJCdkQsT0FBM0I7QUFDQW9ELElBQUFBLFdBQVcsQ0FBQ0csSUFBWixDQUFpQixPQUFqQixFQUEwQnRELE1BQTFCO0FBQ0QsR0FIMEIsQ0FBM0I7QUFPQSxRQUFNdUQsYUFBYSxHQUFHLE1BQU0sSUFBSXBGLGlCQUFKLENBQU0sQ0FBQzRCLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtBQUNyRCtDLElBQUFBLE9BQU8sQ0FBQ2QsY0FBUixDQUF1QjdDLEtBQXZCLEVBQThCLENBQUNjLEdBQUQsRUFBTThCLFVBQU4sS0FBcUI5QixHQUFHLEdBQUdGLE1BQU0sQ0FBQ0UsR0FBRCxDQUFULEdBQWlCSCxPQUFPLENBQUNpQyxVQUFELENBQTlFO0FBQ0QsR0FGMkIsQ0FBNUI7QUFHQSxRQUFNd0Isb0JBQW9CLEdBQUcsSUFBSXJGLGlCQUFKLENBQU0sQ0FBQzRCLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtBQUN0RHVELElBQUFBLGFBQWEsQ0FBQ0QsSUFBZCxDQUFtQixLQUFuQixFQUEwQnZELE9BQTFCO0FBQ0F3RCxJQUFBQSxhQUFhLENBQUNELElBQWQsQ0FBbUIsT0FBbkIsRUFBNEJ0RCxNQUE1QjtBQUNELEdBSDRCLENBQTdCO0FBSUF1RCxFQUFBQSxhQUFhLENBQUNFLElBQWQsQ0FBbUJOLFdBQW5CO0FBR0EsU0FBTyxNQUFNaEYsa0JBQUV1RixHQUFGLENBQU0sQ0FDakJGLG9CQURpQixFQUVqQkgsa0JBRmlCLENBQU4sQ0FBYjtBQUlEOztBQWtCRCxlQUFlTSxXQUFmLENBQTRCaEIsV0FBNUIsRUFBeUNpQixPQUF6QyxFQUFrRDtBQUVoRCxRQUFNaEUsT0FBTyxHQUFHLE1BQU0xQixPQUFPLENBQUN5RSxXQUFELEVBQWM7QUFBQzlDLElBQUFBLFdBQVcsRUFBRTtBQUFkLEdBQWQsQ0FBN0I7QUFDQSxRQUFNMkQsb0JBQW9CLEdBQUcsSUFBSXJGLGlCQUFKLENBQU0sQ0FBQzRCLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtBQUN0REosSUFBQUEsT0FBTyxDQUFDMEQsSUFBUixDQUFhLEtBQWIsRUFBb0J2RCxPQUFwQjtBQUNBSCxJQUFBQSxPQUFPLENBQUMwRCxJQUFSLENBQWEsT0FBYixFQUFzQnRELE1BQXRCO0FBR0FKLElBQUFBLE9BQU8sQ0FBQ0ssRUFBUixDQUFXLE9BQVgsRUFBb0IsTUFBT2IsS0FBUCxJQUFpQjtBQUNuQyxZQUFNeUUsR0FBRyxHQUFHLE1BQU1ELE9BQU8sQ0FBQztBQUN4QnhFLFFBQUFBLEtBRHdCO0FBRXhCMEUsUUFBQUEsY0FBYyxFQUFFLE1BQU96RCxPQUFQLElBQW1CLE1BQU15QyxlQUFlLENBQUNsRCxPQUFELEVBQVVSLEtBQVYsRUFBaUJpQixPQUFqQjtBQUZoQyxPQUFELENBQXpCOztBQUlBLFVBQUl3RCxHQUFHLEtBQUssS0FBWixFQUFtQjtBQUNqQixlQUFPakUsT0FBTyxDQUFDbUUsSUFBUixDQUFhLEtBQWIsQ0FBUDtBQUNEOztBQUNEbkUsTUFBQUEsT0FBTyxDQUFDTyxTQUFSO0FBQ0QsS0FURDtBQVVELEdBZjRCLENBQTdCO0FBZ0JBUCxFQUFBQSxPQUFPLENBQUNPLFNBQVI7QUFHQSxTQUFPLE1BQU1xRCxvQkFBYjtBQUNEOztBQTRCRCxlQUFlUSxhQUFmLENBQThCQyxPQUE5QixFQUF1Q2pGLElBQUksR0FBRyxFQUE5QyxFQUFrRDtBQUNoRCxNQUFJLEVBQUMsTUFBTXlCLGFBQUd5QyxNQUFILENBQVVlLE9BQVYsQ0FBUCxDQUFKLEVBQStCO0FBQzdCLFVBQU0sSUFBSTlDLEtBQUosQ0FBVywyQkFBMEI4QyxPQUFRLEVBQTdDLENBQU47QUFDRDs7QUFFRCxRQUFNO0FBQ0pDLElBQUFBLFNBQVMsR0FBRyxJQURSO0FBRUpDLElBQUFBLGNBQWMsR0FBRyxLQUZiO0FBR0pDLElBQUFBLE9BQU8sR0FBRyxJQUFJQyxTQUhWO0FBSUpDLElBQUFBLEtBQUssR0FBRztBQUpKLE1BS0Z0RixJQUxKO0FBTUEsUUFBTXVGLGFBQWEsR0FBRyxFQUF0QjtBQUNBLE1BQUlDLGlCQUFpQixHQUFHLENBQXhCO0FBRUEsUUFBTUMsaUJBQWlCLEdBQUcsSUFBSWpHLGdCQUFPa0csUUFBWCxDQUFvQjtBQUM1Q0MsSUFBQUEsS0FBSyxFQUFFLENBQUNDLE1BQUQsRUFBU0MsUUFBVCxFQUFtQkMsSUFBbkIsS0FBNEI7QUFDakNQLE1BQUFBLGFBQWEsQ0FBQ1EsSUFBZCxDQUFtQkgsTUFBbkI7QUFDQUosTUFBQUEsaUJBQWlCLElBQUlJLE1BQU0sQ0FBQ0ksTUFBNUI7O0FBQ0EsVUFBSVosT0FBTyxHQUFHLENBQVYsSUFBZUksaUJBQWlCLEdBQUdKLE9BQXZDLEVBQWdEO0FBQzlDSyxRQUFBQSxpQkFBaUIsQ0FBQ1YsSUFBbEIsQ0FBdUIsT0FBdkIsRUFBZ0MsSUFBSTVDLEtBQUosQ0FBVyw0QkFBRCxHQUN2QyxvQ0FBbUMsZ0NBQXFCaUQsT0FBckIsQ0FBOEIsRUFEcEMsQ0FBaEM7QUFFRDs7QUFDRFUsTUFBQUEsSUFBSTtBQUNMO0FBVDJDLEdBQXBCLENBQTFCO0FBYUEsUUFBTUcsT0FBTyxHQUFHLHVCQUFTLEtBQVQsRUFBZ0I7QUFDOUJDLElBQUFBLElBQUksRUFBRTtBQUFDWixNQUFBQTtBQUFEO0FBRHdCLEdBQWhCLENBQWhCO0FBR0EsTUFBSWEsT0FBTyxHQUFHLElBQWQ7QUFDQSxRQUFNQyxtQkFBbUIsR0FBR2pCLGNBQWMsR0FBRyxJQUFJa0IsMEJBQUosRUFBSCxHQUF3QixJQUFsRTtBQUNBLFFBQU1DLHdCQUF3QixHQUFHLElBQUluSCxpQkFBSixDQUFNLENBQUM0QixPQUFELEVBQVVDLE1BQVYsS0FBcUI7QUFDMUR5RSxJQUFBQSxpQkFBaUIsQ0FBQ25CLElBQWxCLENBQXVCLE9BQXZCLEVBQWlDaUMsQ0FBRCxJQUFPO0FBQ3JDLFVBQUlILG1CQUFKLEVBQXlCO0FBQ3ZCSCxRQUFBQSxPQUFPLENBQUNPLE1BQVIsQ0FBZUosbUJBQWY7QUFDQUEsUUFBQUEsbUJBQW1CLENBQUNJLE1BQXBCLENBQTJCZixpQkFBM0I7QUFDRCxPQUhELE1BR087QUFDTFEsUUFBQUEsT0FBTyxDQUFDTyxNQUFSLENBQWVmLGlCQUFmO0FBQ0Q7O0FBQ0RRLE1BQUFBLE9BQU8sQ0FBQ1EsS0FBUjtBQUNBUixNQUFBQSxPQUFPLENBQUNTLE9BQVI7QUFDQTFGLE1BQUFBLE1BQU0sQ0FBQ3VGLENBQUQsQ0FBTjtBQUNELEtBVkQ7QUFXQWQsSUFBQUEsaUJBQWlCLENBQUNuQixJQUFsQixDQUF1QixRQUF2QixFQUFpQyxNQUFNO0FBQ3JDNkIsTUFBQUEsT0FBTyxHQUFHRixPQUFPLENBQUNVLE9BQVIsRUFBVjtBQUNBNUYsTUFBQUEsT0FBTztBQUNSLEtBSEQ7QUFJRCxHQWhCZ0MsQ0FBakM7QUFpQkEsUUFBTTZGLG9CQUFvQixHQUFHLElBQUl6SCxpQkFBSixDQUFNLENBQUM0QixPQUFELEVBQVVDLE1BQVYsS0FBcUI7QUFDdERpRixJQUFBQSxPQUFPLENBQUMzQixJQUFSLENBQWEsUUFBYixFQUF1QnZELE9BQXZCO0FBQ0FrRixJQUFBQSxPQUFPLENBQUMzQixJQUFSLENBQWEsT0FBYixFQUF1QmlDLENBQUQsSUFBT3ZGLE1BQU0sQ0FDakMsSUFBSW1CLEtBQUosQ0FBVyxzQkFBcUI4QyxPQUFRLE1BQUtzQixDQUFDLENBQUNNLE9BQVEsRUFBdkQsQ0FEaUMsQ0FBbkM7QUFFRCxHQUo0QixDQUE3QjtBQUtBLFFBQU1DLEtBQUssR0FBRzVCLFNBQVMsR0FBRyxJQUFJNkIsZUFBSixHQUFZQyxLQUFaLEVBQUgsR0FBeUIsSUFBaEQ7O0FBQ0EsTUFBSSxDQUFDLE1BQU12RixhQUFHd0YsSUFBSCxDQUFRaEMsT0FBUixDQUFQLEVBQXlCaUMsV0FBekIsRUFBSixFQUE0QztBQUMxQ2pCLElBQUFBLE9BQU8sQ0FBQ2tCLFNBQVIsQ0FBa0JsQyxPQUFsQixFQUEyQixLQUEzQjtBQUNELEdBRkQsTUFFTztBQUNMZ0IsSUFBQUEsT0FBTyxDQUFDbUIsSUFBUixDQUFhbkMsT0FBYixFQUFzQjtBQUNwQm9DLE1BQUFBLElBQUksRUFBRS9GLGNBQUtnRyxRQUFMLENBQWNyQyxPQUFkO0FBRGMsS0FBdEI7QUFHRDs7QUFDRCxNQUFJbUIsbUJBQUosRUFBeUI7QUFDdkJILElBQUFBLE9BQU8sQ0FBQ3hCLElBQVIsQ0FBYTJCLG1CQUFiO0FBQ0FBLElBQUFBLG1CQUFtQixDQUFDM0IsSUFBcEIsQ0FBeUJnQixpQkFBekI7QUFDRCxHQUhELE1BR087QUFDTFEsSUFBQUEsT0FBTyxDQUFDeEIsSUFBUixDQUFhZ0IsaUJBQWI7QUFDRDs7QUFDRFEsRUFBQUEsT0FBTyxDQUFDc0IsUUFBUjtBQUdBLFFBQU1wSSxrQkFBRXVGLEdBQUYsQ0FBTSxDQUFDa0Msb0JBQUQsRUFBdUJOLHdCQUF2QixDQUFOLENBQU47O0FBRUEsTUFBSVEsS0FBSixFQUFXO0FBQ1RVLG9CQUFJQyxLQUFKLENBQVcsVUFBU3RDLGNBQWMsR0FBRyxxQkFBSCxHQUEyQixFQUFHLEVBQXRELEdBQ1AsSUFBRzdELGNBQUtnRyxRQUFMLENBQWNyQyxPQUFkLENBQXVCLElBRG5CLElBRVBrQixPQUFPLEdBQUksSUFBRyxnQ0FBcUJBLE9BQXJCLENBQThCLElBQXJDLEdBQTJDLEVBRjNDLElBR1AsTUFBS1csS0FBSyxDQUFDWSxXQUFOLEdBQW9CQyxTQUFwQixDQUE4QkMsT0FBOUIsQ0FBc0MsQ0FBdEMsQ0FBeUMsSUFIdkMsR0FJUCx1QkFBc0J0QyxLQUFNLEdBSi9CO0FBS0Q7O0FBRUQsU0FBT3VDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjdkMsYUFBZCxDQUFQO0FBQ0Q7O0FBUUQsZUFBZXdDLGNBQWYsQ0FBK0JDLFFBQS9CLEVBQXlDO0FBQ3ZDLE1BQUksRUFBQyxNQUFNdkcsYUFBR3lDLE1BQUgsQ0FBVThELFFBQVYsQ0FBUCxDQUFKLEVBQWdDO0FBQzlCLFVBQU0sSUFBSTdGLEtBQUosQ0FBVyxnQkFBZTZGLFFBQVMsa0JBQW5DLENBQU47QUFDRDs7QUFFRCxRQUFNO0FBQUNDLElBQUFBO0FBQUQsTUFBUyxNQUFNeEcsYUFBR3dGLElBQUgsQ0FBUWUsUUFBUixDQUFyQjs7QUFDQSxNQUFJQyxJQUFJLEdBQUcsQ0FBWCxFQUFjO0FBQ1osVUFBTSxJQUFJOUYsS0FBSixDQUFXLGdCQUFlNkYsUUFBUyxvQ0FBbkMsQ0FBTjtBQUNEOztBQUNELFFBQU1FLEVBQUUsR0FBRyxNQUFNekcsYUFBR25DLElBQUgsQ0FBUTBJLFFBQVIsRUFBa0IsR0FBbEIsQ0FBakI7O0FBQ0EsTUFBSTtBQUNGLFVBQU1wQyxNQUFNLEdBQUdpQyxNQUFNLENBQUNNLEtBQVAsQ0FBYTFJLFNBQVMsQ0FBQ3VHLE1BQXZCLENBQWY7QUFDQSxVQUFNdkUsYUFBRzJHLElBQUgsQ0FBUUYsRUFBUixFQUFZdEMsTUFBWixFQUFvQixDQUFwQixFQUF1Qm5HLFNBQVMsQ0FBQ3VHLE1BQWpDLEVBQXlDLENBQXpDLENBQU47QUFDQSxVQUFNcUMsU0FBUyxHQUFHekMsTUFBTSxDQUFDcEYsUUFBUCxDQUFnQixPQUFoQixDQUFsQjs7QUFDQSxRQUFJNkgsU0FBUyxLQUFLNUksU0FBbEIsRUFBNkI7QUFDM0IsWUFBTSxJQUFJMEMsS0FBSixDQUFXLHVCQUFzQmtHLFNBQVUsU0FBUUwsUUFBUyxJQUFsRCxHQUNiLHVEQUFzRHZJLFNBQVUsR0FEN0QsQ0FBTjtBQUVEOztBQUNELFdBQU8sSUFBUDtBQUNELEdBVEQsU0FTVTtBQUNSLFVBQU1nQyxhQUFHWSxLQUFILENBQVM2RixFQUFULENBQU47QUFDRDtBQUNGOztBQXdCRCxlQUFlSSxTQUFmLENBQTBCdEUsT0FBMUIsRUFBbUN1RSxHQUFHLEdBQUcsRUFBekMsRUFBNkN2SSxJQUFJLEdBQUcsRUFBcEQsRUFBd0Q7QUFDdEQsUUFBTTtBQUNKc0YsSUFBQUEsS0FBSyxHQUFHO0FBREosTUFFRnRGLElBRko7QUFHQSxRQUFNO0FBQ0p3SSxJQUFBQSxPQUFPLEdBQUcsTUFETjtBQUVKQyxJQUFBQSxHQUFHLEdBQUduSCxjQUFLQyxPQUFMLENBQWF5QyxPQUFiLENBRkY7QUFHSjBFLElBQUFBLE1BQU0sR0FBRztBQUhMLE1BSUZILEdBSko7QUFLQSxRQUFNdEMsT0FBTyxHQUFHLHVCQUFTLEtBQVQsRUFBZ0I7QUFBRUMsSUFBQUEsSUFBSSxFQUFFO0FBQUVaLE1BQUFBO0FBQUY7QUFBUixHQUFoQixDQUFoQjs7QUFDQSxRQUFNOUYsTUFBTSxHQUFHaUMsYUFBRzRCLGlCQUFILENBQXFCVyxPQUFyQixDQUFmOztBQUNBLFNBQU8sTUFBTSxJQUFJN0UsaUJBQUosQ0FBTSxDQUFDNEIsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQ3RDaUYsSUFBQUEsT0FBTyxDQUNKMEMsSUFESCxDQUNRSCxPQURSLEVBQ2lCO0FBQ2JDLE1BQUFBLEdBRGE7QUFFYkMsTUFBQUE7QUFGYSxLQURqQixFQUtHekgsRUFMSCxDQUtNLE9BTE4sRUFLZUQsTUFMZixFQU1HeUQsSUFOSCxDQU1RakYsTUFOUjtBQU9BQSxJQUFBQSxNQUFNLENBQ0h5QixFQURILENBQ00sT0FETixFQUNnQnNGLENBQUQsSUFBTztBQUNsQk4sTUFBQUEsT0FBTyxDQUFDTyxNQUFSLENBQWVoSCxNQUFmO0FBQ0F5RyxNQUFBQSxPQUFPLENBQUNRLEtBQVI7QUFDQVIsTUFBQUEsT0FBTyxDQUFDUyxPQUFSO0FBQ0ExRixNQUFBQSxNQUFNLENBQUN1RixDQUFELENBQU47QUFDRCxLQU5ILEVBT0d0RixFQVBILENBT00sUUFQTixFQU9nQkYsT0FQaEI7QUFRQWtGLElBQUFBLE9BQU8sQ0FBQ3NCLFFBQVI7QUFDRCxHQWpCWSxDQUFiO0FBa0JEOztlQUljO0FBQUU3RCxFQUFBQSxZQUFGO0FBQWdCaUIsRUFBQUEsV0FBaEI7QUFBNkJLLEVBQUFBLGFBQTdCO0FBQTRDK0MsRUFBQUEsY0FBNUM7QUFBNERPLEVBQUFBO0FBQTVELEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHlhdXpsIGZyb20gJ3lhdXpsJztcbmltcG9ydCBhcmNoaXZlciBmcm9tICdhcmNoaXZlcic7XG5pbXBvcnQgeyBjcmVhdGVXcml0ZVN0cmVhbSB9IGZyb20gJ2ZzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgbWtkaXJwIH0gZnJvbSAnLi4vbGliL21rZGlycCc7XG5pbXBvcnQgc3RyZWFtIGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgZnMgZnJvbSAnLi9mcyc7XG5pbXBvcnQgeyBCYXNlNjRFbmNvZGUgfSBmcm9tICdiYXNlNjQtc3RyZWFtJztcbmltcG9ydCB7IHRvUmVhZGFibGVTaXplU3RyaW5nLCBHaUIgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IFRpbWVyIGZyb20gJy4vdGltaW5nJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IGdldFN0cmVhbSBmcm9tICdnZXQtc3RyZWFtJztcblxuY29uc3Qgb3BlblppcCA9IEIucHJvbWlzaWZ5KHlhdXpsLm9wZW4pO1xuY29uc3QgcGlwZWxpbmUgPSBCLnByb21pc2lmeShzdHJlYW0ucGlwZWxpbmUpO1xuY29uc3QgWklQX01BR0lDID0gJ1BLJztcbmNvbnN0IElGTVQgPSA2MTQ0MDtcbmNvbnN0IElGRElSID0gMTYzODQ7XG5jb25zdCBJRkxOSyA9IDQwOTYwO1xuXG4vLyBUaGlzIGNsYXNzIGlzIG1vc3RseSBjb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF4b2dkZW4vZXh0cmFjdC16aXAvYmxvYi9tYXN0ZXIvaW5kZXguanNcbmNsYXNzIFppcEV4dHJhY3RvciB7XG4gIGNvbnN0cnVjdG9yIChzb3VyY2VQYXRoLCBvcHRzID0ge30pIHtcbiAgICB0aGlzLnppcFBhdGggPSBzb3VyY2VQYXRoO1xuICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgdGhpcy5jYW5jZWxlZCA9IGZhbHNlO1xuICB9XG5cbiAgZXh0cmFjdEZpbGVOYW1lIChlbnRyeSkge1xuICAgIHJldHVybiBfLmlzQnVmZmVyKGVudHJ5LmZpbGVOYW1lKSA/IGVudHJ5LmZpbGVOYW1lLnRvU3RyaW5nKHRoaXMub3B0cy5maWxlTmFtZXNFbmNvZGluZykgOiBlbnRyeS5maWxlTmFtZTtcbiAgfVxuXG4gIGFzeW5jIGV4dHJhY3QgKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRpcixcbiAgICAgIGZpbGVOYW1lc0VuY29kaW5nLFxuICAgIH0gPSB0aGlzLm9wdHM7XG4gICAgdGhpcy56aXBmaWxlID0gYXdhaXQgb3BlblppcCh0aGlzLnppcFBhdGgsIHtcbiAgICAgIGxhenlFbnRyaWVzOiB0cnVlLFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RoZWpvc2h3b2xmZS95YXV6bC9jb21taXQvY2M3NDU1YWM3ODliYTg0OTczMTg0ZTVlYmRlMDU4MWNkYzRjM2IzOSNkaWZmLTA0YzZlOTBmYWFjMjY3NWFhODllMjE3NmQyZWVjN2Q4Ujk1XG4gICAgICBkZWNvZGVTdHJpbmdzOiAhZmlsZU5hbWVzRW5jb2RpbmcsXG4gICAgfSk7XG4gICAgdGhpcy5jYW5jZWxlZCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuemlwZmlsZS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy56aXBmaWxlLnJlYWRFbnRyeSgpO1xuXG4gICAgICB0aGlzLnppcGZpbGUub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuY2FuY2VsZWQpIHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnppcGZpbGUub24oJ2VudHJ5JywgYXN5bmMgKGVudHJ5KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNhbmNlbGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLmV4dHJhY3RGaWxlTmFtZShlbnRyeSk7XG4gICAgICAgIGlmIChmaWxlTmFtZS5zdGFydHNXaXRoKCdfX01BQ09TWC8nKSkge1xuICAgICAgICAgIHRoaXMuemlwZmlsZS5yZWFkRW50cnkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZXN0RGlyID0gcGF0aC5kaXJuYW1lKHBhdGguam9pbihkaXIsIGZpbGVOYW1lKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgZnMubWtkaXIoZGVzdERpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuXG4gICAgICAgICAgY29uc3QgY2Fub25pY2FsRGVzdERpciA9IGF3YWl0IGZzLnJlYWxwYXRoKGRlc3REaXIpO1xuICAgICAgICAgIGNvbnN0IHJlbGF0aXZlRGVzdERpciA9IHBhdGgucmVsYXRpdmUoZGlyLCBjYW5vbmljYWxEZXN0RGlyKTtcblxuICAgICAgICAgIGlmIChyZWxhdGl2ZURlc3REaXIuc3BsaXQocGF0aC5zZXApLmluY2x1ZGVzKCcuLicpKSB7XG4gICAgICAgICAgICBuZXcgRXJyb3IoYE91dCBvZiBib3VuZCBwYXRoIFwiJHtjYW5vbmljYWxEZXN0RGlyfVwiIGZvdW5kIHdoaWxlIHByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lfWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IHRoaXMuZXh0cmFjdEVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB0aGlzLnppcGZpbGUucmVhZEVudHJ5KCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMuY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuemlwZmlsZS5jbG9zZSgpO1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGV4dHJhY3RFbnRyeSAoZW50cnkpIHtcbiAgICBpZiAodGhpcy5jYW5jZWxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIGRpcixcbiAgICB9ID0gdGhpcy5vcHRzO1xuXG4gICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLmV4dHJhY3RGaWxlTmFtZShlbnRyeSk7XG4gICAgY29uc3QgZGVzdCA9IHBhdGguam9pbihkaXIsIGZpbGVOYW1lKTtcblxuICAgIC8vIGNvbnZlcnQgZXh0ZXJuYWwgZmlsZSBhdHRyIGludCBpbnRvIGEgZnMgc3RhdCBtb2RlIGludFxuICAgIGNvbnN0IG1vZGUgPSAoZW50cnkuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyA+PiAxNikgJiAweEZGRkY7XG4gICAgLy8gY2hlY2sgaWYgaXQncyBhIHN5bWxpbmsgb3IgZGlyICh1c2luZyBzdGF0IG1vZGUgY29uc3RhbnRzKVxuICAgIGNvbnN0IGlzU3ltbGluayA9IChtb2RlICYgSUZNVCkgPT09IElGTE5LO1xuICAgIGNvbnN0IGlzRGlyID0gKG1vZGUgJiBJRk1UKSA9PT0gSUZESVJcbiAgICAgIC8vIEZhaWxzYWZlLCBib3Jyb3dlZCBmcm9tIGpzWmlwXG4gICAgICB8fCBmaWxlTmFtZS5lbmRzV2l0aCgnLycpXG4gICAgICAvLyBjaGVjayBmb3Igd2luZG93cyB3ZWlyZCB3YXkgb2Ygc3BlY2lmeWluZyBhIGRpcmVjdG9yeVxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21heG9nZGVuL2V4dHJhY3QtemlwL2lzc3Vlcy8xMyNpc3N1ZWNvbW1lbnQtMTU0NDk0NTY2XG4gICAgICB8fCAoZW50cnkudmVyc2lvbk1hZGVCeSA+PiA4ID09PSAwICYmIGVudHJ5LmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMgPT09IDE2KTtcbiAgICBjb25zdCBwcm9jTW9kZSA9IHRoaXMuZ2V0RXh0cmFjdGVkTW9kZShtb2RlLCBpc0RpcikgJiAwbzc3NztcbiAgICAvLyBhbHdheXMgZW5zdXJlIGZvbGRlcnMgYXJlIGNyZWF0ZWRcbiAgICBjb25zdCBkZXN0RGlyID0gaXNEaXIgPyBkZXN0IDogcGF0aC5kaXJuYW1lKGRlc3QpO1xuICAgIGNvbnN0IG1rZGlyT3B0aW9ucyA9IHsgcmVjdXJzaXZlOiB0cnVlIH07XG4gICAgaWYgKGlzRGlyKSB7XG4gICAgICBta2Rpck9wdGlvbnMubW9kZSA9IHByb2NNb2RlO1xuICAgIH1cbiAgICBhd2FpdCBmcy5ta2RpcihkZXN0RGlyLCBta2Rpck9wdGlvbnMpO1xuICAgIGlmIChpc0Rpcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlYWRTdHJlYW0gPSBhd2FpdCBCLnByb21pc2lmeSh0aGlzLnppcGZpbGUub3BlblJlYWRTdHJlYW0uYmluZCh0aGlzLnppcGZpbGUpKShlbnRyeSk7XG4gICAgaWYgKGlzU3ltbGluaykge1xuICAgICAgY29uc3QgbGluayA9IGF3YWl0IGdldFN0cmVhbShyZWFkU3RyZWFtKTtcbiAgICAgIGF3YWl0IGZzLnN5bWxpbmsobGluaywgZGVzdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHBpcGVsaW5lKHJlYWRTdHJlYW0sIGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGRlc3QsIHsgbW9kZTogcHJvY01vZGUgfSkpO1xuICAgIH1cbiAgfVxuXG4gIGdldEV4dHJhY3RlZE1vZGUgKGVudHJ5TW9kZSwgaXNEaXIpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0RGlyTW9kZSxcbiAgICAgIGRlZmF1bHRGaWxlTW9kZSxcbiAgICB9ID0gdGhpcy5vcHRzO1xuXG4gICAgbGV0IG1vZGUgPSBlbnRyeU1vZGU7XG4gICAgLy8gU2V0IGRlZmF1bHRzLCBpZiBuZWNlc3NhcnlcbiAgICBpZiAobW9kZSA9PT0gMCkge1xuICAgICAgaWYgKGlzRGlyKSB7XG4gICAgICAgIGlmIChkZWZhdWx0RGlyTW9kZSkge1xuICAgICAgICAgIG1vZGUgPSBwYXJzZUludChkZWZhdWx0RGlyTW9kZSwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgbW9kZSA9IDBvNzU1O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZGVmYXVsdEZpbGVNb2RlKSB7XG4gICAgICAgICAgbW9kZSA9IHBhcnNlSW50KGRlZmF1bHRGaWxlTW9kZSwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgbW9kZSA9IDBvNjQ0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGU7XG4gIH1cbn1cblxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEV4dHJhY3RBbGxPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGZpbGVOYW1lc0VuY29kaW5nIFRoZSBlbmNvZGluZyB0byB1c2UgZm9yIGV4dHJhY3RlZCBmaWxlIG5hbWVzLlxuICogRm9yIFpJUCBhcmNoaXZlcyBjcmVhdGVkIG9uIE1hY09TIGl0IGlzIHVzdWFsbHkgZXhwZWN0ZWQgdG8gYmUgYHV0ZjhgLlxuICogQnkgZGVmYXVsdCBpdCBpcyBhdXRvZGV0ZWN0ZWQgYmFzZWQgb24gdGhlIGVudHJ5IG1ldGFkYXRhIGFuZCBpcyBvbmx5IG5lZWRlZCB0byBiZSBzZXQgZXhwbGljaXRseVxuICogaWYgdGhlIHBhcnRpY3VsYXIgYXJjaGl2ZSBkb2VzIG5vdCBjb21wbHkgdG8gdGhlIHN0YW5kYXJkcywgd2hpY2ggbGVhZHMgdG8gY29ycnVwdGVkIGZpbGUgbmFtZXNcbiAqIGFmdGVyIGV4dHJhY3Rpb24uXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGRlZmF1bHREaXJNb2RlIFswbzc1NV0gVGhlIGRlZmF1bHQgcGVybWlzc2lvbnMgZm9yIGV4dHJhY3RlZCBmb2xkZXJzLiBJdCBpcyBvbmx5XG4gKiBhcHBsaWVkIHdoZW4gdGhlIGV4dHJhY3RvciBpcyB1bmFibGUgdG8gcmV0cmlldmUgdGhpcyB2YWx1ZSBmb3IgYSBkaXJlY3RvcnkgZnJvbSB0aGUgYXJjaGl2ZVxuICogbWV0YWRhdGEuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGRlZmF1bHRGaWxlTW9kZSBbMG82NDRdIFRoZSBkZWZhdWx0IHBlcm1pc3Npb25zIGZvciBleHRyYWN0ZWQgZmlsZXMuIEl0IGlzIG9ubHlcbiAqIGFwcGxpZWQgd2hlbiB0aGUgZXh0cmFjdG9yIGlzIHVuYWJsZSB0byByZXRyaWV2ZSB0aGlzIHZhbHVlIGZvciBhIGZpbGUgZnJvbSB0aGUgYXJjaGl2ZVxuICogbWV0YWRhdGEuXG4gKi9cblxuLyoqXG4gKiBFeHRyYWN0IHppcGZpbGUgdG8gYSBkaXJlY3RvcnlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gemlwRmlsZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgc291cmNlIFpJUCBmaWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdERpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXJcbiAqIEBwYXJhbSB7P0V4dHJhY3RBbGxPcHRpb25zfSBvcHRzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RBbGxUbyAoemlwRmlsZVBhdGgsIGRlc3REaXIsIG9wdHMgPSB7fSkge1xuICBpZiAoIXBhdGguaXNBYnNvbHV0ZShkZXN0RGlyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGFyZ2V0IHBhdGggJyR7ZGVzdERpcn0nIGlzIGV4cGVjdGVkIHRvIGJlIGFic29sdXRlYCk7XG4gIH1cblxuICBhd2FpdCBmcy5ta2RpcihkZXN0RGlyLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gIGNvbnN0IGV4dHJhY3RvciA9IG5ldyBaaXBFeHRyYWN0b3IoemlwRmlsZVBhdGgsIHtcbiAgICAuLi5vcHRzLFxuICAgIGRpcjogYXdhaXQgZnMucmVhbHBhdGgoZGVzdERpciksXG4gIH0pO1xuICBhd2FpdCBleHRyYWN0b3IuZXh0cmFjdCgpO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgYSBzaW5nbGUgemlwIGVudHJ5IHRvIGEgZGlyZWN0b3J5XG4gKlxuICogQHBhcmFtIHtTdHJlYW1hYmxlfSB6aXBGaWxlIFRoZSBzb3VyY2UgWklQIHN0cmVhbVxuICogQHBhcmFtIHt5YXV6bC5aaXBFbnRyeX0gZW50cnkgVGhlIGVudHJ5IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdERpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gX2V4dHJhY3RFbnRyeVRvICh6aXBGaWxlLCBlbnRyeSwgZGVzdERpcikge1xuICBjb25zdCBkc3RQYXRoID0gcGF0aC5yZXNvbHZlKGRlc3REaXIsIGVudHJ5LmZpbGVOYW1lKTtcblxuICAvLyBDcmVhdGUgZGVzdCBkaXJlY3RvcnkgaWYgZG9lc24ndCBleGlzdCBhbHJlYWR5XG4gIGlmICgvXFwvJC8udGVzdChlbnRyeS5maWxlTmFtZSkpIHtcbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhkc3RQYXRoKSkge1xuICAgICAgYXdhaXQgbWtkaXJwKGRzdFBhdGgpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAoIWF3YWl0IGZzLmV4aXN0cyhwYXRoLmRpcm5hbWUoZHN0UGF0aCkpKSB7XG4gICAgYXdhaXQgbWtkaXJwKHBhdGguZGlybmFtZShkc3RQYXRoKSk7XG4gIH1cblxuICAvLyBDcmVhdGUgYSB3cml0ZSBzdHJlYW1cbiAgY29uc3Qgd3JpdGVTdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbShkc3RQYXRoLCB7ZmxhZ3M6ICd3J30pO1xuICBjb25zdCB3cml0ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgd3JpdGVTdHJlYW0ub25jZSgnZmluaXNoJywgcmVzb2x2ZSk7XG4gICAgd3JpdGVTdHJlYW0ub25jZSgnZXJyb3InLCByZWplY3QpO1xuICB9KTtcblxuICAvLyBDcmVhdGUgemlwUmVhZFN0cmVhbSBhbmQgcGlwZSBkYXRhIHRvIHRoZSB3cml0ZSBzdHJlYW1cbiAgLy8gKGZvciBzb21lIG9kZCByZWFzb24gQi5wcm9taXNpZnkgZG9lc24ndCB3b3JrIG9uIHppcGZpbGUub3BlblJlYWRTdHJlYW0sIGl0IGNhdXNlcyBhbiBlcnJvciAnY2xvc2VkJylcbiAgY29uc3QgemlwUmVhZFN0cmVhbSA9IGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB6aXBGaWxlLm9wZW5SZWFkU3RyZWFtKGVudHJ5LCAoZXJyLCByZWFkU3RyZWFtKSA9PiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUocmVhZFN0cmVhbSkpO1xuICB9KTtcbiAgY29uc3QgemlwUmVhZFN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgemlwUmVhZFN0cmVhbS5vbmNlKCdlbmQnLCByZXNvbHZlKTtcbiAgICB6aXBSZWFkU3RyZWFtLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgfSk7XG4gIHppcFJlYWRTdHJlYW0ucGlwZSh3cml0ZVN0cmVhbSk7XG5cbiAgLy8gV2FpdCBmb3IgdGhlIHppcFJlYWRTdHJlYW0gYW5kIHdyaXRlU3RyZWFtIHRvIGVuZCBiZWZvcmUgcmV0dXJuaW5nXG4gIHJldHVybiBhd2FpdCBCLmFsbChbXG4gICAgemlwUmVhZFN0cmVhbVByb21pc2UsXG4gICAgd3JpdGVTdHJlYW1Qcm9taXNlLFxuICBdKTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBaaXBFbnRyeVxuICogQHByb3BlcnR5IHt5YXV6bC5aaXBFbnRyeX0gZW50cnkgVGhlIGFjdHVhbCBlbnRyeSBpbnN0YW5jZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gZXh0cmFjdEVudHJ5VG8gQW4gYXN5bmMgZnVuY3Rpb24sIHdoaWNoIGFjY2VwdHMgb25lIHBhcmFtZXRlci5cbiAqIFRoaXMgcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXIgcGF0aCB0byB3aGljaCB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGV4dHJhY3QgdGhlIGVudHJ5LlxuICovXG5cbi8qKlxuICogR2V0IGVudHJpZXMgZm9yIGEgemlwIGZvbGRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB6aXBGaWxlUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBzb3VyY2UgWklQIGZpbGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uRW50cnkgQ2FsbGJhY2sgd2hlbiBlbnRyeSBpcyByZWFkLlxuICogVGhlIGNhbGxiYWNrIGlzIGV4cGVjdGVkIHRvIGFjY2VwdCBvbmUgYXJndW1lbnQgb2YgWmlwRW50cnkgdHlwZS5cbiAqIFRoZSBpdGVyYXRpb24gdGhyb3VnaCB0aGUgc291cmNlIHppcCBmaWxlIHdpbGwgYmkgdGVybWluYXRlZCBhcyBzb29uIGFzXG4gKiB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gZXF1YWxzIHRvIGBmYWxzZWAuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlYWRFbnRyaWVzICh6aXBGaWxlUGF0aCwgb25FbnRyeSkge1xuICAvLyBPcGVuIGEgemlwIGZpbGUgYW5kIHN0YXJ0IHJlYWRpbmcgZW50cmllc1xuICBjb25zdCB6aXBmaWxlID0gYXdhaXQgb3BlblppcCh6aXBGaWxlUGF0aCwge2xhenlFbnRyaWVzOiB0cnVlfSk7XG4gIGNvbnN0IHppcFJlYWRTdHJlYW1Qcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHppcGZpbGUub25jZSgnZW5kJywgcmVzb2x2ZSk7XG4gICAgemlwZmlsZS5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG5cbiAgICAvLyBPbiBlYWNoIGVudHJ5LCBjYWxsICdvbkVudHJ5JyBhbmQgdGhlbiByZWFkIHRoZSBuZXh0IGVudHJ5XG4gICAgemlwZmlsZS5vbignZW50cnknLCBhc3luYyAoZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IG9uRW50cnkoe1xuICAgICAgICBlbnRyeSxcbiAgICAgICAgZXh0cmFjdEVudHJ5VG86IGFzeW5jIChkZXN0RGlyKSA9PiBhd2FpdCBfZXh0cmFjdEVudHJ5VG8oemlwZmlsZSwgZW50cnksIGRlc3REaXIpXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXMgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB6aXBmaWxlLmVtaXQoJ2VuZCcpO1xuICAgICAgfVxuICAgICAgemlwZmlsZS5yZWFkRW50cnkoKTtcbiAgICB9KTtcbiAgfSk7XG4gIHppcGZpbGUucmVhZEVudHJ5KCk7XG5cbiAgLy8gV2FpdCBmb3IgdGhlIGVudHJpZXMgdG8gZmluaXNoIGJlaW5nIGl0ZXJhdGVkIHRocm91Z2hcbiAgcmV0dXJuIGF3YWl0IHppcFJlYWRTdHJlYW1Qcm9taXNlO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFppcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZW5jb2RlVG9CYXNlNjQgW2ZhbHNlXSBXaGV0aGVyIHRvIGVuY29kZVxuICogdGhlIHJlc3VsdGluZyBhcmNoaXZlIHRvIGEgYmFzZTY0LWVuY29kZWQgc3RyaW5nXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzTWV0ZXJlZCBbdHJ1ZV0gV2hldGhlciB0byBsb2cgdGhlIGFjdHVhbFxuICogYXJjaGl2ZXIgcGVyZm9ybWFuY2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYXhTaXplIFsxMDczNzQxODI0XSBUaGUgbWF4aW11bSBzaXplIG9mXG4gKiB0aGUgcmVzdWx0aW5nIGFyY2hpdmUgaW4gYnl0ZXMuIFRoaXMgaXMgc2V0IHRvIDFHQiBieSBkZWZhdWx0LCBiZWNhdXNlXG4gKiBBcHBpdW0gbGltaXRzIHRoZSBtYXhpbXVtIEhUVFAgYm9keSBzaXplIHRvIDFHQi4gQWxzbywgdGhlIE5vZGVKUyBoZWFwXG4gKiBzaXplIG11c3QgYmUgZW5vdWdoIHRvIGtlZXAgdGhlIHJlc3VsdGluZyBvYmplY3QgKHVzdWFsbHkgdGhpcyBzaXplIGlzXG4gKiBsaW1pdGVkIHRvIDEuNCBHQilcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZXZlbCBbOV0gVGhlIGNvbXByZXNzaW9uIGxldmVsLiBUaGUgbWF4aW11bVxuICogbGV2ZWwgaXMgOSAodGhlIGJlc3QgY29tcHJlc3Npb24sIHdvcnN0IHBlcmZvcm1hbmNlKS4gVGhlIG1pbmltdW1cbiAqIGNvbXByZXNzaW9uIGxldmVsIGlzIDAgKG5vIGNvbXByZXNzaW9uKS5cbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGNvbnRlbnRzIG9mIGxvY2FsIGRpcmVjdG9yeSB0byBhbiBpbi1tZW1vcnkgLnppcCBidWZmZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3JjUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBmb2xkZXIgb3IgZmlsZSBiZWluZyB6aXBwZWRcbiAqIEBwYXJhbSB7WmlwT3B0aW9uc30gb3B0cyBaaXBwaW5nIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFppcHBlZCAoYW5kIGVuY29kZWQgaWYgYGVuY29kZVRvQmFzZTY0YCBpcyB0cnV0aHkpXG4gKiBjb250ZW50IG9mIHRoZSBzb3VyY2UgcGF0aCBhcyBtZW1vcnkgYnVmZmVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHJlYWRpbmcgdGhlIHNvdXJjZVxuICogb3IgdGhlIHNvdXJjZSBpcyB0b28gYmlnXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHRvSW5NZW1vcnlaaXAgKHNyY1BhdGgsIG9wdHMgPSB7fSkge1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzcmNQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBmaWxlIG9yIGZvbGRlcjogJHtzcmNQYXRofWApO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlzTWV0ZXJlZCA9IHRydWUsXG4gICAgZW5jb2RlVG9CYXNlNjQgPSBmYWxzZSxcbiAgICBtYXhTaXplID0gMSAqIEdpQixcbiAgICBsZXZlbCA9IDksXG4gIH0gPSBvcHRzO1xuICBjb25zdCByZXN1bHRCdWZmZXJzID0gW107XG4gIGxldCByZXN1bHRCdWZmZXJzU2l6ZSA9IDA7XG4gIC8vIENyZWF0ZSBhIHdyaXRhYmxlIHN0cmVhbSB0aGF0IHppcCBidWZmZXJzIHdpbGwgYmUgc3RyZWFtZWQgdG9cbiAgY29uc3QgcmVzdWx0V3JpdGVTdHJlYW0gPSBuZXcgc3RyZWFtLldyaXRhYmxlKHtcbiAgICB3cml0ZTogKGJ1ZmZlciwgZW5jb2RpbmcsIG5leHQpID0+IHtcbiAgICAgIHJlc3VsdEJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgICAgcmVzdWx0QnVmZmVyc1NpemUgKz0gYnVmZmVyLmxlbmd0aDtcbiAgICAgIGlmIChtYXhTaXplID4gMCAmJiByZXN1bHRCdWZmZXJzU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgcmVzdWx0V3JpdGVTdHJlYW0uZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoYFRoZSBzaXplIG9mIHRoZSByZXN1bHRpbmcgYCArXG4gICAgICAgICAgYGFyY2hpdmUgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuICR7dG9SZWFkYWJsZVNpemVTdHJpbmcobWF4U2l6ZSl9YCkpO1xuICAgICAgfVxuICAgICAgbmV4dCgpO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFppcCAnc3JjRGlyJyBhbmQgc3RyZWFtIGl0IHRvIHRoZSBhYm92ZSB3cml0YWJsZSBzdHJlYW1cbiAgY29uc3QgYXJjaGl2ZSA9IGFyY2hpdmVyKCd6aXAnLCB7XG4gICAgemxpYjoge2xldmVsfVxuICB9KTtcbiAgbGV0IHNyY1NpemUgPSBudWxsO1xuICBjb25zdCBiYXNlNjRFbmNvZGVyU3RyZWFtID0gZW5jb2RlVG9CYXNlNjQgPyBuZXcgQmFzZTY0RW5jb2RlKCkgOiBudWxsO1xuICBjb25zdCByZXN1bHRXcml0ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzdWx0V3JpdGVTdHJlYW0ub25jZSgnZXJyb3InLCAoZSkgPT4ge1xuICAgICAgaWYgKGJhc2U2NEVuY29kZXJTdHJlYW0pIHtcbiAgICAgICAgYXJjaGl2ZS51bnBpcGUoYmFzZTY0RW5jb2RlclN0cmVhbSk7XG4gICAgICAgIGJhc2U2NEVuY29kZXJTdHJlYW0udW5waXBlKHJlc3VsdFdyaXRlU3RyZWFtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFyY2hpdmUudW5waXBlKHJlc3VsdFdyaXRlU3RyZWFtKTtcbiAgICAgIH1cbiAgICAgIGFyY2hpdmUuYWJvcnQoKTtcbiAgICAgIGFyY2hpdmUuZGVzdHJveSgpO1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH0pO1xuICAgIHJlc3VsdFdyaXRlU3RyZWFtLm9uY2UoJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgIHNyY1NpemUgPSBhcmNoaXZlLnBvaW50ZXIoKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG4gIGNvbnN0IGFyY2hpdmVTdHJlYW1Qcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGFyY2hpdmUub25jZSgnZmluaXNoJywgcmVzb2x2ZSk7XG4gICAgYXJjaGl2ZS5vbmNlKCdlcnJvcicsIChlKSA9PiByZWplY3QoXG4gICAgICBuZXcgRXJyb3IoYEZhaWxlZCB0byBhcmNoaXZlICcke3NyY1BhdGh9JzogJHtlLm1lc3NhZ2V9YCkpKTtcbiAgfSk7XG4gIGNvbnN0IHRpbWVyID0gaXNNZXRlcmVkID8gbmV3IFRpbWVyKCkuc3RhcnQoKSA6IG51bGw7XG4gIGlmICgoYXdhaXQgZnMuc3RhdChzcmNQYXRoKSkuaXNEaXJlY3RvcnkoKSkge1xuICAgIGFyY2hpdmUuZGlyZWN0b3J5KHNyY1BhdGgsIGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICBhcmNoaXZlLmZpbGUoc3JjUGF0aCwge1xuICAgICAgbmFtZTogcGF0aC5iYXNlbmFtZShzcmNQYXRoKSxcbiAgICB9KTtcbiAgfVxuICBpZiAoYmFzZTY0RW5jb2RlclN0cmVhbSkge1xuICAgIGFyY2hpdmUucGlwZShiYXNlNjRFbmNvZGVyU3RyZWFtKTtcbiAgICBiYXNlNjRFbmNvZGVyU3RyZWFtLnBpcGUocmVzdWx0V3JpdGVTdHJlYW0pO1xuICB9IGVsc2Uge1xuICAgIGFyY2hpdmUucGlwZShyZXN1bHRXcml0ZVN0cmVhbSk7XG4gIH1cbiAgYXJjaGl2ZS5maW5hbGl6ZSgpO1xuXG4gIC8vIFdhaXQgZm9yIHRoZSBzdHJlYW1zIHRvIGZpbmlzaFxuICBhd2FpdCBCLmFsbChbYXJjaGl2ZVN0cmVhbVByb21pc2UsIHJlc3VsdFdyaXRlU3RyZWFtUHJvbWlzZV0pO1xuXG4gIGlmICh0aW1lcikge1xuICAgIGxvZy5kZWJ1ZyhgWmlwcGVkICR7ZW5jb2RlVG9CYXNlNjQgPyAnYW5kIGJhc2U2NC1lbmNvZGVkICcgOiAnJ31gICtcbiAgICAgIGAnJHtwYXRoLmJhc2VuYW1lKHNyY1BhdGgpfScgYCArXG4gICAgICAoc3JjU2l6ZSA/IGAoJHt0b1JlYWRhYmxlU2l6ZVN0cmluZyhzcmNTaXplKX0pIGAgOiAnJykgK1xuICAgICAgYGluICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc1NlY29uZHMudG9GaXhlZCgzKX1zIGAgK1xuICAgICAgYChjb21wcmVzc2lvbiBsZXZlbDogJHtsZXZlbH0pYCk7XG4gIH1cbiAgLy8gUmV0dXJuIHRoZSBhcnJheSBvZiB6aXAgYnVmZmVycyBjb25jYXRlbmF0ZWQgaW50byBvbmUgYnVmZmVyXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KHJlc3VsdEJ1ZmZlcnMpO1xufVxuXG4vKipcbiAqIFZlcmlmaWVzIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGUgaXMgYSB2YWxpZCBaSVAgYXJjaGl2ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aCAtIEZ1bGwgcGF0aCB0byB0aGUgZmlsZVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhIHZhbGlkIFpJUCBhcmNoaXZlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGFzc2VydFZhbGlkWmlwIChmaWxlUGF0aCkge1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmaWxlIGF0ICcke2ZpbGVQYXRofScgZG9lcyBub3QgZXhpc3RgKTtcbiAgfVxuXG4gIGNvbnN0IHtzaXplfSA9IGF3YWl0IGZzLnN0YXQoZmlsZVBhdGgpO1xuICBpZiAoc2l6ZSA8IDQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmaWxlIGF0ICcke2ZpbGVQYXRofScgaXMgdG9vIHNtYWxsIHRvIGJlIGEgWklQIGFyY2hpdmVgKTtcbiAgfVxuICBjb25zdCBmZCA9IGF3YWl0IGZzLm9wZW4oZmlsZVBhdGgsICdyJyk7XG4gIHRyeSB7XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jKFpJUF9NQUdJQy5sZW5ndGgpO1xuICAgIGF3YWl0IGZzLnJlYWQoZmQsIGJ1ZmZlciwgMCwgWklQX01BR0lDLmxlbmd0aCwgMCk7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gYnVmZmVyLnRvU3RyaW5nKCdhc2NpaScpO1xuICAgIGlmIChzaWduYXR1cmUgIT09IFpJUF9NQUdJQykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZmlsZSBzaWduYXR1cmUgJyR7c2lnbmF0dXJlfScgb2YgJyR7ZmlsZVBhdGh9JyBgICtcbiAgICAgICAgYGlzIG5vdCBlcXVhbCB0byB0aGUgZXhwZWN0ZWQgWklQIGFyY2hpdmUgc2lnbmF0dXJlICcke1pJUF9NQUdJQ30nYCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLmNsb3NlKGZkKTtcbiAgfVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFppcENvbXByZXNzaW9uT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGxldmVsIFs5XSAtIENvbXByZXNzaW9uIGxldmVsIGluIHJhbmdlIDAuLjlcbiAqIChncmVhdGVyIG51bWJlcnMgbWVhbiBiZXR0ZXIgY29tcHJlc3Npb24sIGJ1dCBsb25nZXIgcHJvY2Vzc2luZyB0aW1lKVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gWmlwU291cmNlT3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfSBwYXR0ZXJuIFsnKipcXC8qJ10gLSBHTE9CIHBhdHRlcm4gZm9yIGNvbXByZXNzaW9uXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGN3ZCAtIFRoZSBzb3VyY2Ugcm9vdCBmb2xkZXIgKHRoZSBwYXJlbnQgZm9sZGVyIG9mXG4gKiB0aGUgZGVzdGluYXRpb24gZmlsZSBieSBkZWZhdWx0KVxuICogQHByb3BlcnR5IHs/QXJyYXk8c3RyaW5nPn0gaWdub3JlIC0gVGhlIGxpc3Qgb2YgaWdub3JlZCBwYXR0ZXJuc1xuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcmNoaXZlIGJhc2VkIG9uIHRoZSBnaXZlbiBnbG9iIHBhdHRlcm5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZHN0UGF0aCAtIFRoZSByZXN1bHRpbmcgYXJjaGl2ZSBwYXRoXG4gKiBAcGFyYW0ge1ppcFNvdXJjZU9wdGlvbnN9IHNyYyAtIFNvdXJjZSBvcHRpb25zXG4gKiBAcGFyYW0ge1ppcENvbXByZXNzaW9uT3B0aW9uc30gb3B0cyAtIENvbXByZXNzaW9uIG9wdGlvbnNcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgY3JlYXRpbmcgdGhlIGFyY2hpdmVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gdG9BcmNoaXZlIChkc3RQYXRoLCBzcmMgPSB7fSwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBsZXZlbCA9IDksXG4gIH0gPSBvcHRzO1xuICBjb25zdCB7XG4gICAgcGF0dGVybiA9ICcqKi8qJyxcbiAgICBjd2QgPSBwYXRoLmRpcm5hbWUoZHN0UGF0aCksXG4gICAgaWdub3JlID0gW10sXG4gIH0gPSBzcmM7XG4gIGNvbnN0IGFyY2hpdmUgPSBhcmNoaXZlcignemlwJywgeyB6bGliOiB7IGxldmVsIH19KTtcbiAgY29uc3Qgc3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZHN0UGF0aCk7XG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXJjaGl2ZVxuICAgICAgLmdsb2IocGF0dGVybiwge1xuICAgICAgICBjd2QsXG4gICAgICAgIGlnbm9yZSxcbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgcmVqZWN0KVxuICAgICAgLnBpcGUoc3RyZWFtKTtcbiAgICBzdHJlYW1cbiAgICAgIC5vbignZXJyb3InLCAoZSkgPT4ge1xuICAgICAgICBhcmNoaXZlLnVucGlwZShzdHJlYW0pO1xuICAgICAgICBhcmNoaXZlLmFib3J0KCk7XG4gICAgICAgIGFyY2hpdmUuZGVzdHJveSgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9KVxuICAgICAgLm9uKCdmaW5pc2gnLCByZXNvbHZlKTtcbiAgICBhcmNoaXZlLmZpbmFsaXplKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgeyBleHRyYWN0QWxsVG8sIHJlYWRFbnRyaWVzLCB0b0luTWVtb3J5WmlwLCBfZXh0cmFjdEVudHJ5VG8sXG4gIGFzc2VydFZhbGlkWmlwLCB0b0FyY2hpdmUgfTtcbmV4cG9ydCBkZWZhdWx0IHsgZXh0cmFjdEFsbFRvLCByZWFkRW50cmllcywgdG9Jbk1lbW9yeVppcCwgYXNzZXJ0VmFsaWRaaXAsIHRvQXJjaGl2ZSB9O1xuIl0sImZpbGUiOiJsaWIvemlwLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi96aXAuanMiXSwibmFtZXMiOlsib3BlblppcCIsIkIiLCJwcm9taXNpZnkiLCJ5YXV6bCIsIm9wZW4iLCJwaXBlbGluZSIsInN0cmVhbSIsIlpJUF9NQUdJQyIsIklGTVQiLCJJRkRJUiIsIklGTE5LIiwiWmlwRXh0cmFjdG9yIiwiY29uc3RydWN0b3IiLCJzb3VyY2VQYXRoIiwib3B0cyIsInppcFBhdGgiLCJjYW5jZWxlZCIsImV4dHJhY3RGaWxlTmFtZSIsImVudHJ5IiwiXyIsImlzQnVmZmVyIiwiZmlsZU5hbWUiLCJ0b1N0cmluZyIsImZpbGVOYW1lc0VuY29kaW5nIiwiZXh0cmFjdCIsImRpciIsInppcGZpbGUiLCJsYXp5RW50cmllcyIsImRlY29kZVN0cmluZ3MiLCJyZXNvbHZlIiwicmVqZWN0Iiwib24iLCJlcnIiLCJyZWFkRW50cnkiLCJzdGFydHNXaXRoIiwiZGVzdERpciIsInBhdGgiLCJkaXJuYW1lIiwiam9pbiIsImZzIiwibWtkaXIiLCJyZWN1cnNpdmUiLCJjYW5vbmljYWxEZXN0RGlyIiwicmVhbHBhdGgiLCJyZWxhdGl2ZURlc3REaXIiLCJyZWxhdGl2ZSIsInNwbGl0Iiwic2VwIiwiaW5jbHVkZXMiLCJFcnJvciIsImV4dHJhY3RFbnRyeSIsImNsb3NlIiwiZGVzdCIsIm1vZGUiLCJleHRlcm5hbEZpbGVBdHRyaWJ1dGVzIiwiaXNTeW1saW5rIiwiaXNEaXIiLCJlbmRzV2l0aCIsInZlcnNpb25NYWRlQnkiLCJwcm9jTW9kZSIsImdldEV4dHJhY3RlZE1vZGUiLCJta2Rpck9wdGlvbnMiLCJyZWFkU3RyZWFtIiwib3BlblJlYWRTdHJlYW0iLCJiaW5kIiwibGluayIsInN5bWxpbmsiLCJjcmVhdGVXcml0ZVN0cmVhbSIsImVudHJ5TW9kZSIsImRlZmF1bHREaXJNb2RlIiwiZGVmYXVsdEZpbGVNb2RlIiwicGFyc2VJbnQiLCJleHRyYWN0QWxsVG8iLCJ6aXBGaWxlUGF0aCIsImlzQWJzb2x1dGUiLCJleHRyYWN0b3IiLCJfZXh0cmFjdEVudHJ5VG8iLCJ6aXBGaWxlIiwiZHN0UGF0aCIsInRlc3QiLCJleGlzdHMiLCJ3cml0ZVN0cmVhbSIsImZsYWdzIiwid3JpdGVTdHJlYW1Qcm9taXNlIiwib25jZSIsInppcFJlYWRTdHJlYW0iLCJ6aXBSZWFkU3RyZWFtUHJvbWlzZSIsInBpcGUiLCJhbGwiLCJyZWFkRW50cmllcyIsIm9uRW50cnkiLCJyZXMiLCJleHRyYWN0RW50cnlUbyIsImVtaXQiLCJ0b0luTWVtb3J5WmlwIiwic3JjUGF0aCIsImlzTWV0ZXJlZCIsImVuY29kZVRvQmFzZTY0IiwibWF4U2l6ZSIsIkdpQiIsImxldmVsIiwicmVzdWx0QnVmZmVycyIsInJlc3VsdEJ1ZmZlcnNTaXplIiwicmVzdWx0V3JpdGVTdHJlYW0iLCJXcml0YWJsZSIsIndyaXRlIiwiYnVmZmVyIiwiZW5jb2RpbmciLCJuZXh0IiwicHVzaCIsImxlbmd0aCIsImFyY2hpdmUiLCJ6bGliIiwic3JjU2l6ZSIsImJhc2U2NEVuY29kZXJTdHJlYW0iLCJCYXNlNjRFbmNvZGUiLCJyZXN1bHRXcml0ZVN0cmVhbVByb21pc2UiLCJlIiwidW5waXBlIiwiYWJvcnQiLCJkZXN0cm95IiwicG9pbnRlciIsImFyY2hpdmVTdHJlYW1Qcm9taXNlIiwibWVzc2FnZSIsInRpbWVyIiwiVGltZXIiLCJzdGFydCIsInN0YXQiLCJpc0RpcmVjdG9yeSIsImRpcmVjdG9yeSIsImZpbGUiLCJuYW1lIiwiYmFzZW5hbWUiLCJmaW5hbGl6ZSIsImxvZyIsImRlYnVnIiwiZ2V0RHVyYXRpb24iLCJhc1NlY29uZHMiLCJ0b0ZpeGVkIiwiQnVmZmVyIiwiY29uY2F0IiwiYXNzZXJ0VmFsaWRaaXAiLCJmaWxlUGF0aCIsInNpemUiLCJmZCIsImFsbG9jIiwicmVhZCIsInNpZ25hdHVyZSIsInRvQXJjaGl2ZSIsInNyYyIsInBhdHRlcm4iLCJjd2QiLCJpZ25vcmUiLCJnbG9iIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNB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QUFDQVIsTUFBQUEsT0FBTyxDQUFDUyxPQUFSO0FBQ0ExRixNQUFBQSxNQUFNLENBQUN1RixDQUFELENBQU47QUFDRCxLQU5ILEVBT0d0RixFQVBILENBT00sUUFQTixFQU9nQkYsT0FQaEI7QUFRQWtGLElBQUFBLE9BQU8sQ0FBQ3NCLFFBQVI7QUFDRCxHQWpCWSxDQUFiO0FBa0JEOztlQUljO0FBQUU3RCxFQUFBQSxZQUFGO0FBQWdCaUIsRUFBQUEsV0FBaEI7QUFBNkJLLEVBQUFBLGFBQTdCO0FBQTRDK0MsRUFBQUEsY0FBNUM7QUFBNERPLEVBQUFBO0FBQTVELEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHlhdXpsIGZyb20gJ3lhdXpsJztcbmltcG9ydCBhcmNoaXZlciBmcm9tICdhcmNoaXZlcic7XG5pbXBvcnQgeyBjcmVhdGVXcml0ZVN0cmVhbSB9IGZyb20gJ2ZzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgbWtkaXJwIH0gZnJvbSAnLi4vbGliL21rZGlycCc7XG5pbXBvcnQgc3RyZWFtIGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgZnMgZnJvbSAnLi9mcyc7XG5pbXBvcnQgeyBCYXNlNjRFbmNvZGUgfSBmcm9tICdiYXNlNjQtc3RyZWFtJztcbmltcG9ydCB7IHRvUmVhZGFibGVTaXplU3RyaW5nLCBHaUIgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IFRpbWVyIGZyb20gJy4vdGltaW5nJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IGdldFN0cmVhbSBmcm9tICdnZXQtc3RyZWFtJztcblxuY29uc3Qgb3BlblppcCA9IEIucHJvbWlzaWZ5KHlhdXpsLm9wZW4pO1xuY29uc3QgcGlwZWxpbmUgPSBCLnByb21pc2lmeShzdHJlYW0ucGlwZWxpbmUpO1xuY29uc3QgWklQX01BR0lDID0gJ1BLJztcbmNvbnN0IElGTVQgPSA2MTQ0MDtcbmNvbnN0IElGRElSID0gMTYzODQ7XG5jb25zdCBJRkxOSyA9IDQwOTYwO1xuXG4vLyBUaGlzIGNsYXNzIGlzIG1vc3RseSBjb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF4b2dkZW4vZXh0cmFjdC16aXAvYmxvYi9tYXN0ZXIvaW5kZXguanNcbmNsYXNzIFppcEV4dHJhY3RvciB7XG4gIGNvbnN0cnVjdG9yIChzb3VyY2VQYXRoLCBvcHRzID0ge30pIHtcbiAgICB0aGlzLnppcFBhdGggPSBzb3VyY2VQYXRoO1xuICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgdGhpcy5jYW5jZWxlZCA9IGZhbHNlO1xuICB9XG5cbiAgZXh0cmFjdEZpbGVOYW1lIChlbnRyeSkge1xuICAgIHJldHVybiBfLmlzQnVmZmVyKGVudHJ5LmZpbGVOYW1lKSA/IGVudHJ5LmZpbGVOYW1lLnRvU3RyaW5nKHRoaXMub3B0cy5maWxlTmFtZXNFbmNvZGluZykgOiBlbnRyeS5maWxlTmFtZTtcbiAgfVxuXG4gIGFzeW5jIGV4dHJhY3QgKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRpcixcbiAgICAgIGZpbGVOYW1lc0VuY29kaW5nLFxuICAgIH0gPSB0aGlzLm9wdHM7XG4gICAgdGhpcy56aXBmaWxlID0gYXdhaXQgb3BlblppcCh0aGlzLnppcFBhdGgsIHtcbiAgICAgIGxhenlFbnRyaWVzOiB0cnVlLFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RoZWpvc2h3b2xmZS95YXV6bC9jb21taXQvY2M3NDU1YWM3ODliYTg0OTczMTg0ZTVlYmRlMDU4MWNkYzRjM2IzOSNkaWZmLTA0YzZlOTBmYWFjMjY3NWFhODllMjE3NmQyZWVjN2Q4Ujk1XG4gICAgICBkZWNvZGVTdHJpbmdzOiAhZmlsZU5hbWVzRW5jb2RpbmcsXG4gICAgfSk7XG4gICAgdGhpcy5jYW5jZWxlZCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuemlwZmlsZS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy56aXBmaWxlLnJlYWRFbnRyeSgpO1xuXG4gICAgICB0aGlzLnppcGZpbGUub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuY2FuY2VsZWQpIHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnppcGZpbGUub24oJ2VudHJ5JywgYXN5bmMgKGVudHJ5KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNhbmNlbGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLmV4dHJhY3RGaWxlTmFtZShlbnRyeSk7XG4gICAgICAgIGlmIChmaWxlTmFtZS5zdGFydHNXaXRoKCdfX01BQ09TWC8nKSkge1xuICAgICAgICAgIHRoaXMuemlwZmlsZS5yZWFkRW50cnkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZXN0RGlyID0gcGF0aC5kaXJuYW1lKHBhdGguam9pbihkaXIsIGZpbGVOYW1lKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgZnMubWtkaXIoZGVzdERpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuXG4gICAgICAgICAgY29uc3QgY2Fub25pY2FsRGVzdERpciA9IGF3YWl0IGZzLnJlYWxwYXRoKGRlc3REaXIpO1xuICAgICAgICAgIGNvbnN0IHJlbGF0aXZlRGVzdERpciA9IHBhdGgucmVsYXRpdmUoZGlyLCBjYW5vbmljYWxEZXN0RGlyKTtcblxuICAgICAgICAgIGlmIChyZWxhdGl2ZURlc3REaXIuc3BsaXQocGF0aC5zZXApLmluY2x1ZGVzKCcuLicpKSB7XG4gICAgICAgICAgICBuZXcgRXJyb3IoYE91dCBvZiBib3VuZCBwYXRoIFwiJHtjYW5vbmljYWxEZXN0RGlyfVwiIGZvdW5kIHdoaWxlIHByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lfWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IHRoaXMuZXh0cmFjdEVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB0aGlzLnppcGZpbGUucmVhZEVudHJ5KCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMuY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuemlwZmlsZS5jbG9zZSgpO1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGV4dHJhY3RFbnRyeSAoZW50cnkpIHtcbiAgICBpZiAodGhpcy5jYW5jZWxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIGRpcixcbiAgICB9ID0gdGhpcy5vcHRzO1xuXG4gICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLmV4dHJhY3RGaWxlTmFtZShlbnRyeSk7XG4gICAgY29uc3QgZGVzdCA9IHBhdGguam9pbihkaXIsIGZpbGVOYW1lKTtcblxuICAgIC8vIGNvbnZlcnQgZXh0ZXJuYWwgZmlsZSBhdHRyIGludCBpbnRvIGEgZnMgc3RhdCBtb2RlIGludFxuICAgIGNvbnN0IG1vZGUgPSAoZW50cnkuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyA+PiAxNikgJiAweEZGRkY7XG4gICAgLy8gY2hlY2sgaWYgaXQncyBhIHN5bWxpbmsgb3IgZGlyICh1c2luZyBzdGF0IG1vZGUgY29uc3RhbnRzKVxuICAgIGNvbnN0IGlzU3ltbGluayA9IChtb2RlICYgSUZNVCkgPT09IElGTE5LO1xuICAgIGNvbnN0IGlzRGlyID0gKG1vZGUgJiBJRk1UKSA9PT0gSUZESVJcbiAgICAgIC8vIEZhaWxzYWZlLCBib3Jyb3dlZCBmcm9tIGpzWmlwXG4gICAgICB8fCBmaWxlTmFtZS5lbmRzV2l0aCgnLycpXG4gICAgICAvLyBjaGVjayBmb3Igd2luZG93cyB3ZWlyZCB3YXkgb2Ygc3BlY2lmeWluZyBhIGRpcmVjdG9yeVxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21heG9nZGVuL2V4dHJhY3QtemlwL2lzc3Vlcy8xMyNpc3N1ZWNvbW1lbnQtMTU0NDk0NTY2XG4gICAgICB8fCAoZW50cnkudmVyc2lvbk1hZGVCeSA+PiA4ID09PSAwICYmIGVudHJ5LmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMgPT09IDE2KTtcbiAgICBjb25zdCBwcm9jTW9kZSA9IHRoaXMuZ2V0RXh0cmFjdGVkTW9kZShtb2RlLCBpc0RpcikgJiAwbzc3NztcbiAgICAvLyBhbHdheXMgZW5zdXJlIGZvbGRlcnMgYXJlIGNyZWF0ZWRcbiAgICBjb25zdCBkZXN0RGlyID0gaXNEaXIgPyBkZXN0IDogcGF0aC5kaXJuYW1lKGRlc3QpO1xuICAgIGNvbnN0IG1rZGlyT3B0aW9ucyA9IHsgcmVjdXJzaXZlOiB0cnVlIH07XG4gICAgaWYgKGlzRGlyKSB7XG4gICAgICBta2Rpck9wdGlvbnMubW9kZSA9IHByb2NNb2RlO1xuICAgIH1cbiAgICBhd2FpdCBmcy5ta2RpcihkZXN0RGlyLCBta2Rpck9wdGlvbnMpO1xuICAgIGlmIChpc0Rpcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlYWRTdHJlYW0gPSBhd2FpdCBCLnByb21pc2lmeSh0aGlzLnppcGZpbGUub3BlblJlYWRTdHJlYW0uYmluZCh0aGlzLnppcGZpbGUpKShlbnRyeSk7XG4gICAgaWYgKGlzU3ltbGluaykge1xuICAgICAgY29uc3QgbGluayA9IGF3YWl0IGdldFN0cmVhbShyZWFkU3RyZWFtKTtcbiAgICAgIGF3YWl0IGZzLnN5bWxpbmsobGluaywgZGVzdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHBpcGVsaW5lKHJlYWRTdHJlYW0sIGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGRlc3QsIHsgbW9kZTogcHJvY01vZGUgfSkpO1xuICAgIH1cbiAgfVxuXG4gIGdldEV4dHJhY3RlZE1vZGUgKGVudHJ5TW9kZSwgaXNEaXIpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0RGlyTW9kZSxcbiAgICAgIGRlZmF1bHRGaWxlTW9kZSxcbiAgICB9ID0gdGhpcy5vcHRzO1xuXG4gICAgbGV0IG1vZGUgPSBlbnRyeU1vZGU7XG4gICAgLy8gU2V0IGRlZmF1bHRzLCBpZiBuZWNlc3NhcnlcbiAgICBpZiAobW9kZSA9PT0gMCkge1xuICAgICAgaWYgKGlzRGlyKSB7XG4gICAgICAgIGlmIChkZWZhdWx0RGlyTW9kZSkge1xuICAgICAgICAgIG1vZGUgPSBwYXJzZUludChkZWZhdWx0RGlyTW9kZSwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgbW9kZSA9IDBvNzU1O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZGVmYXVsdEZpbGVNb2RlKSB7XG4gICAgICAgICAgbW9kZSA9IHBhcnNlSW50KGRlZmF1bHRGaWxlTW9kZSwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgbW9kZSA9IDBvNjQ0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGU7XG4gIH1cbn1cblxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEV4dHJhY3RBbGxPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGZpbGVOYW1lc0VuY29kaW5nIFRoZSBlbmNvZGluZyB0byB1c2UgZm9yIGV4dHJhY3RlZCBmaWxlIG5hbWVzLlxuICogRm9yIFpJUCBhcmNoaXZlcyBjcmVhdGVkIG9uIE1hY09TIGl0IGlzIHVzdWFsbHkgZXhwZWN0ZWQgdG8gYmUgYHV0ZjhgLlxuICogQnkgZGVmYXVsdCBpdCBpcyBhdXRvZGV0ZWN0ZWQgYmFzZWQgb24gdGhlIGVudHJ5IG1ldGFkYXRhIGFuZCBpcyBvbmx5IG5lZWRlZCB0byBiZSBzZXQgZXhwbGljaXRseVxuICogaWYgdGhlIHBhcnRpY3VsYXIgYXJjaGl2ZSBkb2VzIG5vdCBjb21wbHkgdG8gdGhlIHN0YW5kYXJkcywgd2hpY2ggbGVhZHMgdG8gY29ycnVwdGVkIGZpbGUgbmFtZXNcbiAqIGFmdGVyIGV4dHJhY3Rpb24uXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGRlZmF1bHREaXJNb2RlIFswbzc1NV0gVGhlIGRlZmF1bHQgcGVybWlzc2lvbnMgZm9yIGV4dHJhY3RlZCBmb2xkZXJzLiBJdCBpcyBvbmx5XG4gKiBhcHBsaWVkIHdoZW4gdGhlIGV4dHJhY3RvciBpcyB1bmFibGUgdG8gcmV0cmlldmUgdGhpcyB2YWx1ZSBmb3IgYSBkaXJlY3RvcnkgZnJvbSB0aGUgYXJjaGl2ZVxuICogbWV0YWRhdGEuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGRlZmF1bHRGaWxlTW9kZSBbMG82NDRdIFRoZSBkZWZhdWx0IHBlcm1pc3Npb25zIGZvciBleHRyYWN0ZWQgZmlsZXMuIEl0IGlzIG9ubHlcbiAqIGFwcGxpZWQgd2hlbiB0aGUgZXh0cmFjdG9yIGlzIHVuYWJsZSB0byByZXRyaWV2ZSB0aGlzIHZhbHVlIGZvciBhIGZpbGUgZnJvbSB0aGUgYXJjaGl2ZVxuICogbWV0YWRhdGEuXG4gKi9cblxuLyoqXG4gKiBFeHRyYWN0IHppcGZpbGUgdG8gYSBkaXJlY3RvcnlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gemlwRmlsZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgc291cmNlIFpJUCBmaWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdERpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXJcbiAqIEBwYXJhbSB7P0V4dHJhY3RBbGxPcHRpb25zfSBvcHRzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RBbGxUbyAoemlwRmlsZVBhdGgsIGRlc3REaXIsIG9wdHMgPSB7fSkge1xuICBpZiAoIXBhdGguaXNBYnNvbHV0ZShkZXN0RGlyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGFyZ2V0IHBhdGggJyR7ZGVzdERpcn0nIGlzIGV4cGVjdGVkIHRvIGJlIGFic29sdXRlYCk7XG4gIH1cblxuICBhd2FpdCBmcy5ta2RpcihkZXN0RGlyLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gIGNvbnN0IGV4dHJhY3RvciA9IG5ldyBaaXBFeHRyYWN0b3IoemlwRmlsZVBhdGgsIHtcbiAgICAuLi5vcHRzLFxuICAgIGRpcjogYXdhaXQgZnMucmVhbHBhdGgoZGVzdERpciksXG4gIH0pO1xuICBhd2FpdCBleHRyYWN0b3IuZXh0cmFjdCgpO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgYSBzaW5nbGUgemlwIGVudHJ5IHRvIGEgZGlyZWN0b3J5XG4gKlxuICogQHBhcmFtIHtTdHJlYW1hYmxlfSB6aXBGaWxlIFRoZSBzb3VyY2UgWklQIHN0cmVhbVxuICogQHBhcmFtIHt5YXV6bC5aaXBFbnRyeX0gZW50cnkgVGhlIGVudHJ5IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdERpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gX2V4dHJhY3RFbnRyeVRvICh6aXBGaWxlLCBlbnRyeSwgZGVzdERpcikge1xuICBjb25zdCBkc3RQYXRoID0gcGF0aC5yZXNvbHZlKGRlc3REaXIsIGVudHJ5LmZpbGVOYW1lKTtcblxuICAvLyBDcmVhdGUgZGVzdCBkaXJlY3RvcnkgaWYgZG9lc24ndCBleGlzdCBhbHJlYWR5XG4gIGlmICgvXFwvJC8udGVzdChlbnRyeS5maWxlTmFtZSkpIHtcbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhkc3RQYXRoKSkge1xuICAgICAgYXdhaXQgbWtkaXJwKGRzdFBhdGgpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAoIWF3YWl0IGZzLmV4aXN0cyhwYXRoLmRpcm5hbWUoZHN0UGF0aCkpKSB7XG4gICAgYXdhaXQgbWtkaXJwKHBhdGguZGlybmFtZShkc3RQYXRoKSk7XG4gIH1cblxuICAvLyBDcmVhdGUgYSB3cml0ZSBzdHJlYW1cbiAgY29uc3Qgd3JpdGVTdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbShkc3RQYXRoLCB7ZmxhZ3M6ICd3J30pO1xuICBjb25zdCB3cml0ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgd3JpdGVTdHJlYW0ub25jZSgnZmluaXNoJywgcmVzb2x2ZSk7XG4gICAgd3JpdGVTdHJlYW0ub25jZSgnZXJyb3InLCByZWplY3QpO1xuICB9KTtcblxuICAvLyBDcmVhdGUgemlwUmVhZFN0cmVhbSBhbmQgcGlwZSBkYXRhIHRvIHRoZSB3cml0ZSBzdHJlYW1cbiAgLy8gKGZvciBzb21lIG9kZCByZWFzb24gQi5wcm9taXNpZnkgZG9lc24ndCB3b3JrIG9uIHppcGZpbGUub3BlblJlYWRTdHJlYW0sIGl0IGNhdXNlcyBhbiBlcnJvciAnY2xvc2VkJylcbiAgY29uc3QgemlwUmVhZFN0cmVhbSA9IGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB6aXBGaWxlLm9wZW5SZWFkU3RyZWFtKGVudHJ5LCAoZXJyLCByZWFkU3RyZWFtKSA9PiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUocmVhZFN0cmVhbSkpO1xuICB9KTtcbiAgY29uc3QgemlwUmVhZFN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgemlwUmVhZFN0cmVhbS5vbmNlKCdlbmQnLCByZXNvbHZlKTtcbiAgICB6aXBSZWFkU3RyZWFtLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgfSk7XG4gIHppcFJlYWRTdHJlYW0ucGlwZSh3cml0ZVN0cmVhbSk7XG5cbiAgLy8gV2FpdCBmb3IgdGhlIHppcFJlYWRTdHJlYW0gYW5kIHdyaXRlU3RyZWFtIHRvIGVuZCBiZWZvcmUgcmV0dXJuaW5nXG4gIHJldHVybiBhd2FpdCBCLmFsbChbXG4gICAgemlwUmVhZFN0cmVhbVByb21pc2UsXG4gICAgd3JpdGVTdHJlYW1Qcm9taXNlLFxuICBdKTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBaaXBFbnRyeVxuICogQHByb3BlcnR5IHt5YXV6bC5aaXBFbnRyeX0gZW50cnkgVGhlIGFjdHVhbCBlbnRyeSBpbnN0YW5jZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gZXh0cmFjdEVudHJ5VG8gQW4gYXN5bmMgZnVuY3Rpb24sIHdoaWNoIGFjY2VwdHMgb25lIHBhcmFtZXRlci5cbiAqIFRoaXMgcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXIgcGF0aCB0byB3aGljaCB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGV4dHJhY3QgdGhlIGVudHJ5LlxuICovXG5cbi8qKlxuICogR2V0IGVudHJpZXMgZm9yIGEgemlwIGZvbGRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB6aXBGaWxlUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBzb3VyY2UgWklQIGZpbGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uRW50cnkgQ2FsbGJhY2sgd2hlbiBlbnRyeSBpcyByZWFkLlxuICogVGhlIGNhbGxiYWNrIGlzIGV4cGVjdGVkIHRvIGFjY2VwdCBvbmUgYXJndW1lbnQgb2YgWmlwRW50cnkgdHlwZS5cbiAqIFRoZSBpdGVyYXRpb24gdGhyb3VnaCB0aGUgc291cmNlIHppcCBmaWxlIHdpbGwgYmkgdGVybWluYXRlZCBhcyBzb29uIGFzXG4gKiB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gZXF1YWxzIHRvIGBmYWxzZWAuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlYWRFbnRyaWVzICh6aXBGaWxlUGF0aCwgb25FbnRyeSkge1xuICAvLyBPcGVuIGEgemlwIGZpbGUgYW5kIHN0YXJ0IHJlYWRpbmcgZW50cmllc1xuICBjb25zdCB6aXBmaWxlID0gYXdhaXQgb3BlblppcCh6aXBGaWxlUGF0aCwge2xhenlFbnRyaWVzOiB0cnVlfSk7XG4gIGNvbnN0IHppcFJlYWRTdHJlYW1Qcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHppcGZpbGUub25jZSgnZW5kJywgcmVzb2x2ZSk7XG4gICAgemlwZmlsZS5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG5cbiAgICAvLyBPbiBlYWNoIGVudHJ5LCBjYWxsICdvbkVudHJ5JyBhbmQgdGhlbiByZWFkIHRoZSBuZXh0IGVudHJ5XG4gICAgemlwZmlsZS5vbignZW50cnknLCBhc3luYyAoZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IG9uRW50cnkoe1xuICAgICAgICBlbnRyeSxcbiAgICAgICAgZXh0cmFjdEVudHJ5VG86IGFzeW5jIChkZXN0RGlyKSA9PiBhd2FpdCBfZXh0cmFjdEVudHJ5VG8oemlwZmlsZSwgZW50cnksIGRlc3REaXIpXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXMgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB6aXBmaWxlLmVtaXQoJ2VuZCcpO1xuICAgICAgfVxuICAgICAgemlwZmlsZS5yZWFkRW50cnkoKTtcbiAgICB9KTtcbiAgfSk7XG4gIHppcGZpbGUucmVhZEVudHJ5KCk7XG5cbiAgLy8gV2FpdCBmb3IgdGhlIGVudHJpZXMgdG8gZmluaXNoIGJlaW5nIGl0ZXJhdGVkIHRocm91Z2hcbiAgcmV0dXJuIGF3YWl0IHppcFJlYWRTdHJlYW1Qcm9taXNlO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFppcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZW5jb2RlVG9CYXNlNjQgW2ZhbHNlXSBXaGV0aGVyIHRvIGVuY29kZVxuICogdGhlIHJlc3VsdGluZyBhcmNoaXZlIHRvIGEgYmFzZTY0LWVuY29kZWQgc3RyaW5nXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzTWV0ZXJlZCBbdHJ1ZV0gV2hldGhlciB0byBsb2cgdGhlIGFjdHVhbFxuICogYXJjaGl2ZXIgcGVyZm9ybWFuY2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYXhTaXplIFsxMDczNzQxODI0XSBUaGUgbWF4aW11bSBzaXplIG9mXG4gKiB0aGUgcmVzdWx0aW5nIGFyY2hpdmUgaW4gYnl0ZXMuIFRoaXMgaXMgc2V0IHRvIDFHQiBieSBkZWZhdWx0LCBiZWNhdXNlXG4gKiBBcHBpdW0gbGltaXRzIHRoZSBtYXhpbXVtIEhUVFAgYm9keSBzaXplIHRvIDFHQi4gQWxzbywgdGhlIE5vZGVKUyBoZWFwXG4gKiBzaXplIG11c3QgYmUgZW5vdWdoIHRvIGtlZXAgdGhlIHJlc3VsdGluZyBvYmplY3QgKHVzdWFsbHkgdGhpcyBzaXplIGlzXG4gKiBsaW1pdGVkIHRvIDEuNCBHQilcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZXZlbCBbOV0gVGhlIGNvbXByZXNzaW9uIGxldmVsLiBUaGUgbWF4aW11bVxuICogbGV2ZWwgaXMgOSAodGhlIGJlc3QgY29tcHJlc3Npb24sIHdvcnN0IHBlcmZvcm1hbmNlKS4gVGhlIG1pbmltdW1cbiAqIGNvbXByZXNzaW9uIGxldmVsIGlzIDAgKG5vIGNvbXByZXNzaW9uKS5cbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGNvbnRlbnRzIG9mIGxvY2FsIGRpcmVjdG9yeSB0byBhbiBpbi1tZW1vcnkgLnppcCBidWZmZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3JjUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBmb2xkZXIgb3IgZmlsZSBiZWluZyB6aXBwZWRcbiAqIEBwYXJhbSB7WmlwT3B0aW9uc30gb3B0cyBaaXBwaW5nIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFppcHBlZCAoYW5kIGVuY29kZWQgaWYgYGVuY29kZVRvQmFzZTY0YCBpcyB0cnV0aHkpXG4gKiBjb250ZW50IG9mIHRoZSBzb3VyY2UgcGF0aCBhcyBtZW1vcnkgYnVmZmVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHJlYWRpbmcgdGhlIHNvdXJjZVxuICogb3IgdGhlIHNvdXJjZSBpcyB0b28gYmlnXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHRvSW5NZW1vcnlaaXAgKHNyY1BhdGgsIG9wdHMgPSB7fSkge1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzcmNQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBmaWxlIG9yIGZvbGRlcjogJHtzcmNQYXRofWApO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlzTWV0ZXJlZCA9IHRydWUsXG4gICAgZW5jb2RlVG9CYXNlNjQgPSBmYWxzZSxcbiAgICBtYXhTaXplID0gMSAqIEdpQixcbiAgICBsZXZlbCA9IDksXG4gIH0gPSBvcHRzO1xuICBjb25zdCByZXN1bHRCdWZmZXJzID0gW107XG4gIGxldCByZXN1bHRCdWZmZXJzU2l6ZSA9IDA7XG4gIC8vIENyZWF0ZSBhIHdyaXRhYmxlIHN0cmVhbSB0aGF0IHppcCBidWZmZXJzIHdpbGwgYmUgc3RyZWFtZWQgdG9cbiAgY29uc3QgcmVzdWx0V3JpdGVTdHJlYW0gPSBuZXcgc3RyZWFtLldyaXRhYmxlKHtcbiAgICB3cml0ZTogKGJ1ZmZlciwgZW5jb2RpbmcsIG5leHQpID0+IHtcbiAgICAgIHJlc3VsdEJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgICAgcmVzdWx0QnVmZmVyc1NpemUgKz0gYnVmZmVyLmxlbmd0aDtcbiAgICAgIGlmIChtYXhTaXplID4gMCAmJiByZXN1bHRCdWZmZXJzU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgcmVzdWx0V3JpdGVTdHJlYW0uZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoYFRoZSBzaXplIG9mIHRoZSByZXN1bHRpbmcgYCArXG4gICAgICAgICAgYGFyY2hpdmUgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuICR7dG9SZWFkYWJsZVNpemVTdHJpbmcobWF4U2l6ZSl9YCkpO1xuICAgICAgfVxuICAgICAgbmV4dCgpO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFppcCAnc3JjRGlyJyBhbmQgc3RyZWFtIGl0IHRvIHRoZSBhYm92ZSB3cml0YWJsZSBzdHJlYW1cbiAgY29uc3QgYXJjaGl2ZSA9IGFyY2hpdmVyKCd6aXAnLCB7XG4gICAgemxpYjoge2xldmVsfVxuICB9KTtcbiAgbGV0IHNyY1NpemUgPSBudWxsO1xuICBjb25zdCBiYXNlNjRFbmNvZGVyU3RyZWFtID0gZW5jb2RlVG9CYXNlNjQgPyBuZXcgQmFzZTY0RW5jb2RlKCkgOiBudWxsO1xuICBjb25zdCByZXN1bHRXcml0ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzdWx0V3JpdGVTdHJlYW0ub25jZSgnZXJyb3InLCAoZSkgPT4ge1xuICAgICAgaWYgKGJhc2U2NEVuY29kZXJTdHJlYW0pIHtcbiAgICAgICAgYXJjaGl2ZS51bnBpcGUoYmFzZTY0RW5jb2RlclN0cmVhbSk7XG4gICAgICAgIGJhc2U2NEVuY29kZXJTdHJlYW0udW5waXBlKHJlc3VsdFdyaXRlU3RyZWFtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFyY2hpdmUudW5waXBlKHJlc3VsdFdyaXRlU3RyZWFtKTtcbiAgICAgIH1cbiAgICAgIGFyY2hpdmUuYWJvcnQoKTtcbiAgICAgIGFyY2hpdmUuZGVzdHJveSgpO1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH0pO1xuICAgIHJlc3VsdFdyaXRlU3RyZWFtLm9uY2UoJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgIHNyY1NpemUgPSBhcmNoaXZlLnBvaW50ZXIoKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG4gIGNvbnN0IGFyY2hpdmVTdHJlYW1Qcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGFyY2hpdmUub25jZSgnZmluaXNoJywgcmVzb2x2ZSk7XG4gICAgYXJjaGl2ZS5vbmNlKCdlcnJvcicsIChlKSA9PiByZWplY3QoXG4gICAgICBuZXcgRXJyb3IoYEZhaWxlZCB0byBhcmNoaXZlICcke3NyY1BhdGh9JzogJHtlLm1lc3NhZ2V9YCkpKTtcbiAgfSk7XG4gIGNvbnN0IHRpbWVyID0gaXNNZXRlcmVkID8gbmV3IFRpbWVyKCkuc3RhcnQoKSA6IG51bGw7XG4gIGlmICgoYXdhaXQgZnMuc3RhdChzcmNQYXRoKSkuaXNEaXJlY3RvcnkoKSkge1xuICAgIGFyY2hpdmUuZGlyZWN0b3J5KHNyY1BhdGgsIGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICBhcmNoaXZlLmZpbGUoc3JjUGF0aCwge1xuICAgICAgbmFtZTogcGF0aC5iYXNlbmFtZShzcmNQYXRoKSxcbiAgICB9KTtcbiAgfVxuICBpZiAoYmFzZTY0RW5jb2RlclN0cmVhbSkge1xuICAgIGFyY2hpdmUucGlwZShiYXNlNjRFbmNvZGVyU3RyZWFtKTtcbiAgICBiYXNlNjRFbmNvZGVyU3RyZWFtLnBpcGUocmVzdWx0V3JpdGVTdHJlYW0pO1xuICB9IGVsc2Uge1xuICAgIGFyY2hpdmUucGlwZShyZXN1bHRXcml0ZVN0cmVhbSk7XG4gIH1cbiAgYXJjaGl2ZS5maW5hbGl6ZSgpO1xuXG4gIC8vIFdhaXQgZm9yIHRoZSBzdHJlYW1zIHRvIGZpbmlzaFxuICBhd2FpdCBCLmFsbChbYXJjaGl2ZVN0cmVhbVByb21pc2UsIHJlc3VsdFdyaXRlU3RyZWFtUHJvbWlzZV0pO1xuXG4gIGlmICh0aW1lcikge1xuICAgIGxvZy5kZWJ1ZyhgWmlwcGVkICR7ZW5jb2RlVG9CYXNlNjQgPyAnYW5kIGJhc2U2NC1lbmNvZGVkICcgOiAnJ31gICtcbiAgICAgIGAnJHtwYXRoLmJhc2VuYW1lKHNyY1BhdGgpfScgYCArXG4gICAgICAoc3JjU2l6ZSA/IGAoJHt0b1JlYWRhYmxlU2l6ZVN0cmluZyhzcmNTaXplKX0pIGAgOiAnJykgK1xuICAgICAgYGluICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc1NlY29uZHMudG9GaXhlZCgzKX1zIGAgK1xuICAgICAgYChjb21wcmVzc2lvbiBsZXZlbDogJHtsZXZlbH0pYCk7XG4gIH1cbiAgLy8gUmV0dXJuIHRoZSBhcnJheSBvZiB6aXAgYnVmZmVycyBjb25jYXRlbmF0ZWQgaW50byBvbmUgYnVmZmVyXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KHJlc3VsdEJ1ZmZlcnMpO1xufVxuXG4vKipcbiAqIFZlcmlmaWVzIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGUgaXMgYSB2YWxpZCBaSVAgYXJjaGl2ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aCAtIEZ1bGwgcGF0aCB0byB0aGUgZmlsZVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhIHZhbGlkIFpJUCBhcmNoaXZlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGFzc2VydFZhbGlkWmlwIChmaWxlUGF0aCkge1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmaWxlIGF0ICcke2ZpbGVQYXRofScgZG9lcyBub3QgZXhpc3RgKTtcbiAgfVxuXG4gIGNvbnN0IHtzaXplfSA9IGF3YWl0IGZzLnN0YXQoZmlsZVBhdGgpO1xuICBpZiAoc2l6ZSA8IDQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmaWxlIGF0ICcke2ZpbGVQYXRofScgaXMgdG9vIHNtYWxsIHRvIGJlIGEgWklQIGFyY2hpdmVgKTtcbiAgfVxuICBjb25zdCBmZCA9IGF3YWl0IGZzLm9wZW4oZmlsZVBhdGgsICdyJyk7XG4gIHRyeSB7XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jKFpJUF9NQUdJQy5sZW5ndGgpO1xuICAgIGF3YWl0IGZzLnJlYWQoZmQsIGJ1ZmZlciwgMCwgWklQX01BR0lDLmxlbmd0aCwgMCk7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gYnVmZmVyLnRvU3RyaW5nKCdhc2NpaScpO1xuICAgIGlmIChzaWduYXR1cmUgIT09IFpJUF9NQUdJQykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZmlsZSBzaWduYXR1cmUgJyR7c2lnbmF0dXJlfScgb2YgJyR7ZmlsZVBhdGh9JyBgICtcbiAgICAgICAgYGlzIG5vdCBlcXVhbCB0byB0aGUgZXhwZWN0ZWQgWklQIGFyY2hpdmUgc2lnbmF0dXJlICcke1pJUF9NQUdJQ30nYCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLmNsb3NlKGZkKTtcbiAgfVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFppcENvbXByZXNzaW9uT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGxldmVsIFs5XSAtIENvbXByZXNzaW9uIGxldmVsIGluIHJhbmdlIDAuLjlcbiAqIChncmVhdGVyIG51bWJlcnMgbWVhbiBiZXR0ZXIgY29tcHJlc3Npb24sIGJ1dCBsb25nZXIgcHJvY2Vzc2luZyB0aW1lKVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gWmlwU291cmNlT3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfSBwYXR0ZXJuIFsnKipcXC8qJ10gLSBHTE9CIHBhdHRlcm4gZm9yIGNvbXByZXNzaW9uXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGN3ZCAtIFRoZSBzb3VyY2Ugcm9vdCBmb2xkZXIgKHRoZSBwYXJlbnQgZm9sZGVyIG9mXG4gKiB0aGUgZGVzdGluYXRpb24gZmlsZSBieSBkZWZhdWx0KVxuICogQHByb3BlcnR5IHs/QXJyYXk8c3RyaW5nPn0gaWdub3JlIC0gVGhlIGxpc3Qgb2YgaWdub3JlZCBwYXR0ZXJuc1xuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcmNoaXZlIGJhc2VkIG9uIHRoZSBnaXZlbiBnbG9iIHBhdHRlcm5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZHN0UGF0aCAtIFRoZSByZXN1bHRpbmcgYXJjaGl2ZSBwYXRoXG4gKiBAcGFyYW0ge1ppcFNvdXJjZU9wdGlvbnN9IHNyYyAtIFNvdXJjZSBvcHRpb25zXG4gKiBAcGFyYW0ge1ppcENvbXByZXNzaW9uT3B0aW9uc30gb3B0cyAtIENvbXByZXNzaW9uIG9wdGlvbnNcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgY3JlYXRpbmcgdGhlIGFyY2hpdmVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gdG9BcmNoaXZlIChkc3RQYXRoLCBzcmMgPSB7fSwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBsZXZlbCA9IDksXG4gIH0gPSBvcHRzO1xuICBjb25zdCB7XG4gICAgcGF0dGVybiA9ICcqKi8qJyxcbiAgICBjd2QgPSBwYXRoLmRpcm5hbWUoZHN0UGF0aCksXG4gICAgaWdub3JlID0gW10sXG4gIH0gPSBzcmM7XG4gIGNvbnN0IGFyY2hpdmUgPSBhcmNoaXZlcignemlwJywgeyB6bGliOiB7IGxldmVsIH19KTtcbiAgY29uc3Qgc3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZHN0UGF0aCk7XG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXJjaGl2ZVxuICAgICAgLmdsb2IocGF0dGVybiwge1xuICAgICAgICBjd2QsXG4gICAgICAgIGlnbm9yZSxcbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgcmVqZWN0KVxuICAgICAgLnBpcGUoc3RyZWFtKTtcbiAgICBzdHJlYW1cbiAgICAgIC5vbignZXJyb3InLCAoZSkgPT4ge1xuICAgICAgICBhcmNoaXZlLnVucGlwZShzdHJlYW0pO1xuICAgICAgICBhcmNoaXZlLmFib3J0KCk7XG4gICAgICAgIGFyY2hpdmUuZGVzdHJveSgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9KVxuICAgICAgLm9uKCdmaW5pc2gnLCByZXNvbHZlKTtcbiAgICBhcmNoaXZlLmZpbmFsaXplKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgeyBleHRyYWN0QWxsVG8sIHJlYWRFbnRyaWVzLCB0b0luTWVtb3J5WmlwLCBfZXh0cmFjdEVudHJ5VG8sXG4gIGFzc2VydFZhbGlkWmlwLCB0b0FyY2hpdmUgfTtcbmV4cG9ydCBkZWZhdWx0IHsgZXh0cmFjdEFsbFRvLCByZWFkRW50cmllcywgdG9Jbk1lbW9yeVppcCwgYXNzZXJ0VmFsaWRaaXAsIHRvQXJjaGl2ZSB9O1xuIl0sImZpbGUiOiJsaWIvemlwLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=

@@ -62,3 +62,30 @@ import _ from 'lodash';

const MATCHING_METHODS = [
'TM_CCOEFF',
'TM_CCOEFF_NORMED',
'TM_CCORR',
'TM_CCORR_NORMED',
'TM_SQDIFF',
'TM_SQDIFF_NORMED',
];
const DEFAULT_MATCHING_METHOD = 'TM_CCOEFF_NORMED';
/**
* Transforms matching method name to the actual
* constant value from OpenCV library
*
* @param {string} name One of supported method names
* (see MATCHING_METHODS array above)
* @returns {number} The method value
* @throws {Error} if an unsupported method name is given
*/
function toMatchingMethod (name) {
if (!MATCHING_METHODS.includes(name)) {
throw new Error(`The matching method '${name}' is unknown. ` +
`Only the following matching methods are supported: ${MATCHING_METHODS}`);
}
return cv[name];
}
/**
* Utility function to get a Jimp image object from buffer or base64 data. Jimp

@@ -188,3 +215,3 @@ * is a great library however it does IO in the constructor so it's not

*
* @returns {cv.Mat} The same image with the rectange on it
* @returns {cv.Mat} The same image with the rectangle on it
*/

@@ -332,2 +359,12 @@ function highlightRegion (mat, region) {

* as an image (useful for debugging purposes)
* @property {string} method [TM_CCOEFF_NORMED] The name of the template matching method.
* Acceptable values are:
* - TM_CCOEFF
* - TM_CCOEFF_NORMED (default)
* - TM_CCORR
* - TM_CCORR_NORMED
* - TM_SQDIFF
* - TM_SQDIFF_NORMED
* Read https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_template_matching/py_template_matching.html
* for more details.
*/

@@ -358,3 +395,6 @@

const {visualize = false} = options;
const {
method = DEFAULT_MATCHING_METHOD,
visualize = false,
} = options;
let [template, reference] = await B.all([

@@ -375,3 +415,3 @@ cv.imdecodeAsync(img1Data),

try {
matched = await reference.matchTemplateAsync(template, cv.TM_CCOEFF_NORMED);
matched = await reference.matchTemplateAsync(template, toMatchingMethod(method));
} catch (e) {

@@ -439,6 +479,16 @@ throw new Error(`The reference image did not match to the template one. Original error: ${e.message}`);

* - only when multiple option is passed
* @property {string} method [TM_CCOEFF_NORMED] The name of the template matching method.
* Acceptable values are:
* - TM_CCOEFF
* - TM_CCOEFF_NORMED (default)
* - TM_CCORR
* - TM_CCORR_NORMED
* - TM_SQDIFF
* - TM_SQDIFF_NORMED
* Read https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_template_matching/py_template_matching.html
* for more details.
*/
/**
* Calculates the occurence position of a partial image in the full
* Calculates the occurrence position of a partial image in the full
* image.

@@ -451,3 +501,3 @@ *

* @returns {OccurrenceResult}
* @throws {Error} If no occurences of the partial image can be found in the full image
* @throws {Error} If no occurrences of the partial image can be found in the full image
*/

@@ -457,6 +507,9 @@ async function getImageOccurrence (fullImgData, partialImgData, options = {}) {

const { visualize = false,
threshold = DEFAULT_MATCH_THRESHOLD,
multiple = false,
matchNeighbourThreshold = MATCH_NEIGHBOUR_THRESHOLD } = options;
const {
visualize = false,
threshold = DEFAULT_MATCH_THRESHOLD,
multiple = false,
matchNeighbourThreshold = MATCH_NEIGHBOUR_THRESHOLD,
method = DEFAULT_MATCHING_METHOD,
} = options;

@@ -471,15 +524,16 @@ const [fullImg, partialImg] = await B.all([

try {
const matched = await fullImg.matchTemplateAsync(partialImg, cv.TM_CCOEFF_NORMED);
const matched = await fullImg.matchTemplateAsync(partialImg, toMatchingMethod(method));
const minMax = await matched.minMaxLocAsync();
if (multiple) {
const nonZeroMatchResults = matched.threshold(threshold, 1, cv.THRESH_BINARY).convertTo(cv.CV_8U).findNonZero();
const nonZeroMatchResults = matched.threshold(threshold, 1, cv.THRESH_BINARY)
.convertTo(cv.CV_8U)
.findNonZero();
const matches = filterNearMatches(nonZeroMatchResults, matchNeighbourThreshold);
for (const element of matches) {
for (const {x, y} of matches) {
results.push({
score: matched.at(element.y, element.x),
score: matched.at(y, x),
rect: {
x: element.x,
y: element.y,
x, y,
width: partialImg.cols,

@@ -491,7 +545,7 @@ height: partialImg.rows

} else if (minMax.maxVal >= threshold) {
const {x, y} = method.includes('SQDIFF') ? minMax.minLoc : minMax.maxLoc;
results.push({
score: minMax.maxVal,
rect: {
x: minMax.maxLoc.x,
y: minMax.maxLoc.y,
x, y,
width: partialImg.cols,

@@ -498,0 +552,0 @@ height: partialImg.rows

@@ -7,3 +7,3 @@ {

],
"version": "2.51.2",
"version": "2.52.0",
"author": "appium",

@@ -10,0 +10,0 @@ "license": "Apache-2.0",

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc