Socket
Socket
Sign inDemoInstall

appium-support

Package Overview
Dependencies
Maintainers
6
Versions
145
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

appium-support - npm Package Compare versions

Comparing version 2.28.0 to 2.29.0

8

build/lib/fs.js

@@ -97,2 +97,8 @@ "use strict";

const syncFunctions = ['createReadStream', 'createWriteStream'];
for (const s of syncFunctions) {
fs[s] = _fs2.default[s];
}
const constants = ['F_OK', 'R_OK', 'W_OK', 'X_OK', 'constants'];

@@ -108,2 +114,2 @@

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9mcy5qcyJdLCJuYW1lcyI6WyJtZDUiLCJCIiwicHJvbWlzaWZ5IiwibWQ1ZmlsZSIsImZzIiwiaGFzQWNjZXNzIiwicGF0aCIsImFjY2VzcyIsIl9mcyIsIlJfT0siLCJlcnIiLCJleGlzdHMiLCJyaW1yYWYiLCJta2RpciIsImRpck5hbWUiLCJfbWtkaXIiLCJjb2RlIiwiY29weUZpbGUiLCJzb3VyY2UiLCJkZXN0aW5hdGlvbiIsIm90aGVyQXJncyIsIkVycm9yIiwibmNwIiwiZmlsZVBhdGgiLCJtdiIsIndoaWNoIiwiZ2xvYiIsImhhc2giLCJhbGdvcml0aG0iLCJyZXNvbHZlIiwicmVqZWN0IiwiZmlsZUhhc2giLCJjcnlwdG8iLCJjcmVhdGVIYXNoIiwicmVhZFN0cmVhbSIsImNyZWF0ZVJlYWRTdHJlYW0iLCJvbiIsImUiLCJtZXNzYWdlIiwiY2h1bmsiLCJ1cGRhdGUiLCJkaWdlc3QiLCJzaW1wbGVzIiwicyIsImNvbnN0YW50cyIsImMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsR0FBRyxHQUFHQyxrQkFBRUMsU0FBRixDQUFZQyxnQkFBWixDQUFaOztBQUVBLElBQUlDLEVBQUUsR0FBRztBQUNQLFFBQU1DLFNBQU4sQ0FBaUJDLElBQWpCLEVBQXVCO0FBQ3JCLFFBQUk7QUFDRixZQUFNLEtBQUtDLE1BQUwsQ0FBWUQsSUFBWixFQUFrQkUsYUFBSUMsSUFBdEIsQ0FBTjtBQUNELEtBRkQsQ0FFRSxPQUFPQyxHQUFQLEVBQVk7QUFDWixhQUFPLEtBQVA7QUFDRDs7QUFDRCxXQUFPLElBQVA7QUFDRCxHQVJNOztBQVNQQyxFQUFBQSxNQUFNLENBQUVMLElBQUYsRUFBUTtBQUFFLFdBQU8sS0FBS0QsU0FBTCxDQUFlQyxJQUFmLENBQVA7QUFBOEIsR0FUdkM7O0FBVVBNLEVBQUFBLE1BQU0sRUFBRVgsa0JBQUVDLFNBQUYs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RUFDZ0IsV0FEaEIsQ0FBbEI7O0FBR0EsS0FBSyxNQUFNQyxDQUFYLElBQWdCRCxTQUFoQixFQUEyQjtBQUN6QnhDLEVBQUFBLEVBQUUsQ0FBQ3lDLENBQUQsQ0FBRixHQUFRckMsYUFBSXFDLENBQUosQ0FBUjtBQUNEOztlQUdjekMsRSIsInNvdXJjZXNDb250ZW50IjpbIi8vIGpzaGludCBpZ25vcmU6IHN0YXJ0XG5pbXBvcnQgX2ZzIGZyb20gJ2ZzJztcbmltcG9ydCByaW1yYWYgZnJvbSAncmltcmFmJztcbmltcG9ydCBtZDVmaWxlIGZyb20gJ21kNS1maWxlJztcbmltcG9ydCBuY3AgZnJvbSAnbmNwJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBtdiBmcm9tICdtdic7XG5pbXBvcnQgd2hpY2ggZnJvbSAnd2hpY2gnO1xuaW1wb3J0IGdsb2IgZnJvbSAnZ2xvYic7XG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5cblxuY29uc3QgbWQ1ID0gQi5wcm9taXNpZnkobWQ1ZmlsZSk7XG5cbmxldCBmcyA9IHtcbiAgYXN5bmMgaGFzQWNjZXNzIChwYXRoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYWNjZXNzKHBhdGgsIF9mcy5SX09LKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGV4aXN0cyAocGF0aCkgeyByZXR1cm4gdGhpcy5oYXNBY2Nlc3MocGF0aCk7IH0sXG4gIHJpbXJhZjogQi5wcm9taXNpZnkocmltcmFmKSxcbiAgYXN5bmMgbWtkaXIgKGRpck5hbWUpIHtcbiAgICBsZXQgX21rZGlyID0gQi5wcm9taXNpZnkoX2ZzLm1rZGlyKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgX21rZGlyKGRpck5hbWUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciAmJiBlcnIuY29kZSAhPT0gJ0VFWElTVCcpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgYXN5bmMgY29weUZpbGUgKHNvdXJjZSwgZGVzdGluYXRpb24sIC4uLm90aGVyQXJncykge1xuICAgIGlmICghYXdhaXQgdGhpcy5oYXNBY2Nlc3Moc291cmNlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZmlsZSBhdCAnJHtzb3VyY2V9JyBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYWNjZXNzaWJsZWApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgKEIucHJvbWlzaWZ5KG5jcCkpKHNvdXJjZSwgZGVzdGluYXRpb24sIC4uLm90aGVyQXJncyk7XG4gIH0sXG4gIGFzeW5jIG1kNSAoZmlsZVBhdGgpIHtcbiAgICByZXR1cm4gYXdhaXQgbWQ1KGZpbGVQYXRoKTtcbiAgfSxcbiAgbXY6IEIucHJvbWlzaWZ5KG12KSxcbiAgd2hpY2g6IEIucHJvbWlzaWZ5KHdoaWNoKSxcbiAgZ2xvYjogQi5wcm9taXNpZnkoZ2xvYiksXG4gIGFzeW5jIGhhc2ggKGZpbGVQYXRoLCBhbGdvcml0aG0gPSAnc2hhMScpIHtcbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgZmlsZUhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChhbGdvcml0aG0pO1xuICAgICAgY29uc3QgcmVhZFN0cmVhbSA9IF9mcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoKTtcbiAgICAgIHJlYWRTdHJlYW0ub24oJ2Vycm9yJywgKGUpID0+IHJlamVjdChcbiAgICAgICAgbmV3IEVycm9yKGBDYW5ub3QgY2FsY3VsYXRlICR7YWxnb3JpdGhtfSBoYXNoIGZvciAnJHtmaWxlUGF0aH0nLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCkpKTtcbiAgICAgIHJlYWRTdHJlYW0ub24oJ2RhdGEnLCAoY2h1bmspID0+IGZpbGVIYXNoLnVwZGF0ZShjaHVuaykpO1xuICAgICAgcmVhZFN0cmVhbS5vbignZW5kJywgKCkgPT4gcmVzb2x2ZShmaWxlSGFzaC5kaWdlc3QoJ2hleCcpKSk7XG4gICAgfSk7XG4gIH0sXG59O1xuXG4vLyBhZGQgdGhlIHN1cHBvcnRlZCBgZnNgIGZ1bmN0aW9uc1xuY29uc3Qgc2ltcGxlcyA9IFtcbiAgJ29wZW4nLCAnY2xvc2UnLCAnYWNjZXNzJywgJ3JlYWRGaWxlJywgJ3dyaXRlRmlsZScsICd3cml0ZScsICdyZWFkJyxcbiAgJ3JlYWRsaW5rJywgJ2NobW9kJywgJ3VubGluaycsICdyZWFkZGlyJywgJ3N0YXQnLCAncmVuYW1lJywgJ2xzdGF0Jyxcbl07XG5mb3IgKGNvbnN0IHMgb2Ygc2ltcGxlcykge1xuICBmc1tzXSA9IEIucHJvbWlzaWZ5KF9mc1tzXSk7XG59XG5cbi8vIGFkZCB0aGUgY29uc3RhbnRzIGZyb20gYGZzYFxuY29uc3QgY29uc3RhbnRzID0gW1xuICAnRl9PSycsICdSX09LJywgJ1dfT0snLCAnWF9PSycsICdjb25zdGFudHMnLFxuXTtcbmZvciAoY29uc3QgYyBvZiBjb25zdGFudHMpIHtcbiAgZnNbY10gPSBfZnNbY107XG59XG5cbmV4cG9ydCB7IGZzIH07XG5leHBvcnQgZGVmYXVsdCBmcztcbiJdLCJmaWxlIjoibGliL2ZzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9mcy5qcyJdLCJuYW1lcyI6WyJtZDUiLCJCIiwicHJvbWlzaWZ5IiwibWQ1ZmlsZSIsImZzIiwiaGFzQWNjZXNzIiwicGF0aCIsImFjY2VzcyIsIl9mcyIsIlJfT0siLCJlcnIiLCJleGlzdHMiLCJyaW1yYWYiLCJta2RpciIsImRpck5hbWUiLCJfbWtkaXIiLCJjb2RlIiwiY29weUZpbGUiLCJzb3VyY2UiLCJkZXN0aW5hdGlvbiIsIm90aGVyQXJncyIsIkVycm9yIiwibmNwIiwiZmlsZVBhdGgiLCJtdiIsIndoaWNoIiwiZ2xvYiIsImhhc2giLCJhbGdvcml0aG0iLCJyZXNvbHZlIiwicmVqZWN0IiwiZmlsZUhhc2giLCJjcnlwdG8iLCJjcmVhdGVIYXNoIiwicmVhZFN0cmVhbSIsImNyZWF0ZVJlYWRTdHJlYW0iLCJvbiIsImUiLCJtZXNzYWdlIiwiY2h1bmsiLCJ1cGRhdGUiLCJkaWdlc3QiLCJzaW1wbGVzIiwicyIsInN5bmNGdW5jdGlvbnMiLCJjb25zdGFudHMiLCJjIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLEdBQUcsR0FBR0Msa0JBQUVDLFNBQUYsQ0FBWUMsZ0JBQVosQ0FBWjs7QUFFQSxJQUFJQyxFQUFFLEdBQUc7QUFDUCxRQUFNQyxTQUFOLENBQWlCQyxJQUFqQixFQUF1QjtBQUNyQixRQUFJO0FBQ0YsWUFBTSxLQUFLQyxNQUFMLENBQVlELElBQVosRUFBa0JFLGFBQUlDLElBQXRCLENBQU47QUFDRCxLQUZELENBRUUsT0FBT0MsR0FBUCxFQUFZO0FBQ1osYUFBTyxLQUFQO0FBQ0Q7O0FBQ0QsV0FBTyxJQUFQO0FBQ0QsR0FSTTs7QUFTUEMsRUFBQUEsTUFBTSxDQUFFTCxJQUFGLEVBQVE7QUFBRSxXQUFPLEtBQUtELFNBQUwsQ0FBZUMsSUFBZixDQUFQO0FBQThCLEdBVHZDOztBQVVQTSxFQUFBQSxNQUFNLEVBQUVYLGtCQUFFQyxTQUFGLENBQVlVLGVBQVosQ0FWRDs7QUFXUCxRQUFNQyxLQUFOLENBQWFDLE9BQWIsRUFBc0I7QUFDcEIsUUFBSUMsTUFBTSxHQUFHZCxrQkFBRUMsU0FBRixDQUFZTSxhQUFJSyxLQUFoQixDQUFiOztBQUNBLFFBQUk7QUFDRixZQUFNRSxNQUFNLENBQUNELE9BQUQsQ0FBWjtBQUNELEtBRkQsQ0FFRSxPQUFPSixHQUFQLEVBQVk7QUFDWixVQUFJQSxHQUFHLElBQUlBLEdBQUcsQ0FBQ00sSUFBSixLQUFhLFFBQXhCLEVBQWtDO0FBQ2hDLGNBQU1OLEdBQU47QUFDRDtBQUNGO0FBQ0YsR0FwQk07O0FBcUJQLFFBQU1PLFFBQU4sQ0FBZ0JDLE1BQWhCLEVBQXdCQyxXQUF4QixFQUFxQyxHQUFHQyxTQUF4QyxFQUFtRDtBQUNqRCxRQUFJLEVBQUMsTUFBTSxLQUFLZixTQUFMLENBQWVhLE1BQWYsQ0FBUCxDQUFKLEVBQW1DO0FBQ2pDLFlBQU0sSUFBSUcsS0FBSixDQUFXLGdCQUFlSCxNQUFPLHVDQUFqQyxDQUFOO0FBQ0Q7O0FBQ0QsV0FBTyxNQUFPakIsa0JBQUVDLFNBQUYsQ0FBWW9CLFlBQVosQ0FBRCxDQUFtQkosTUFBbkIsRUFBMkJDLFdBQTNCLEVBQXdDLEdBQUdDLFNBQTNDLENBQWI7QUFDRCxHQTFCTTs7QUEyQlAsUUFBTXBCLEdBQU4sQ0FBV3VCLFFBQVgsRUFBcUI7QUFDbkIsV0FBTyxNQUFNdkIsR0FBRyxDQUFDdUIsUUFBRCxDQUFoQjtBQUNELEdBN0JNOztBQThCUEMsRUFBQUEsRUFBRSxFQUFFdkIsa0JBQUVDLFNBQUYsQ0FBWXNCLFdBQVosQ0E5Qkc7QUErQlBDLEVBQUFBLEtBQUssRUFBRXhCLGtCQUFFQyxTQUFGLENBQVl1QixjQUFaLENBL0JBO0FBZ0NQQyxFQUFBQSxJQUFJLEVBQUV6QixrQkFBRUMsU0FBRixDQUFZd0IsYUFBWixDQWhDQzs7QUFpQ1AsUUFBTUMsSUFBTixDQUFZSixRQUFaLEVBQXNCSyxTQUFTLEdBQUcsTUFBbEMsRUFBMEM7QUFDeEMsV0FBTyxNQUFNLElBQUkzQixpQkFBSixDQUFNLENBQUM0QixPQUFELEVBQVVDLE1BQVYsS0FBcUI7QUFDdEMsWUFBTUMsUUFBUSxHQUFHQyxnQkFBT0MsVUFBUCxDQUFrQkwsU0FBbEIsQ0FBakI7O0FBQ0EsWUFBTU0sVUFBVSxHQUFHMUIsYUFBSTJCLGdCQUFKLENBQXFCWixRQUFyQixDQUFuQjs7QUFDQVcsTUFBQUEsVUFBVSxDQUFDRSxFQUFYLENBQWMsT0FBZCxFQUF3QkMsQ0FBRCxJQUFPUCxNQUFNLENBQ2xDLElBQUlULEtBQUosQ0FBVyxvQkFBbUJPLFNBQVUsY0FBYUwsUUFBUyxzQkFBcUJjLENBQUMsQ0FBQ0MsT0FBUSxFQUE3RixDQURrQyxDQUFwQztBQUVBSixNQUFBQSxVQUFVLENBQUNFLEVBQVgsQ0FBYyxNQUFkLEVBQXVCRyxLQUFELElBQVdSLFFBQVEsQ0FBQ1MsTUFBVCxDQUFnQkQsS0FBaEIsQ0FBakM7QUFDQUwsTUFBQUEsVUFBVSxDQUFDRSxFQUFYLENBQWMsS0FBZCxFQUFxQixNQUFNUCxPQUFPLENBQUNFLFFBQVEsQ0FBQ1UsTUFBVCxDQUFnQixLQUFoQixDQUFELENBQWxDO0FBQ0QsS0FQWSxDQUFiO0FBUUQ7O0FBMUNNLENBQVQ7O0FBOENBLE1BQU1DLE9BQU8sR0FBRyxDQUNkLE1BRGMsRUFDTixPQURNLEVBQ0csUUFESCxFQUNhLFVBRGIsRUFDeUIsV0FEekIsRUFDc0MsT0FEdEMsRUFDK0MsTUFEL0MsRUFFZCxVQUZjLEVBRUYsT0FGRSxFQUVPLFFBRlAsRUFFaUIsU0FGakIsRUFFNEIsTUFGNUIsRUFFb0MsUUFGcEMsRUFFOEMsT0FGOUMsQ0FBaEI7O0FBSUEsS0FBSyxNQUFNQyxDQUFYLElBQWdCRCxPQUFoQixFQUF5QjtBQUN2QnRDLEVBQUFBLEVBQUUsQ0FBQ3VDLENBQUQsQ0FBRixHQUFRMUMsa0JBQUVDLFNBQUYsQ0FBWU0sYUFBSW1DLENBQUosQ0FBWixDQUFSO0FBQ0Q7O0FBRUQsTUFBTUMsYUFBYSxHQUFHLENBQ3BCLGtCQURvQixFQUVwQixtQkFGb0IsQ0FBdEI7O0FBSUEsS0FBSyxNQUFNRCxDQUFYLElBQWdCQyxhQUFoQixFQUErQjtBQUM3QnhDLEVBQUFBLEVBQUUsQ0FBQ3VDLENBQUQsQ0FBRixHQUFRbkMsYUFBSW1DLENBQUosQ0FBUjtBQUNEOztBQUdELE1BQU1FLFNBQVMsR0FBRyxDQUNoQixNQURnQixFQUNSLE1BRFEsRUFDQSxNQURBLEVBQ1EsTUFEUixFQUNnQixXQURoQixDQUFsQjs7QUFHQSxLQUFLLE1BQU1DLENBQVgsSUFBZ0JELFNBQWhCLEVBQTJCO0FBQ3pCekMsRUFBQUEsRUFBRSxDQUFDMEMsQ0FBRCxDQUFGLEdBQVF0QyxhQUFJc0MsQ0FBSixDQUFSO0FBQ0Q7O2VBR2MxQyxFIiwic291cmNlc0NvbnRlbnQiOlsiLy8ganNoaW50IGlnbm9yZTogc3RhcnRcbmltcG9ydCBfZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHJpbXJhZiBmcm9tICdyaW1yYWYnO1xuaW1wb3J0IG1kNWZpbGUgZnJvbSAnbWQ1LWZpbGUnO1xuaW1wb3J0IG5jcCBmcm9tICduY3AnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IG12IGZyb20gJ212JztcbmltcG9ydCB3aGljaCBmcm9tICd3aGljaCc7XG5pbXBvcnQgZ2xvYiBmcm9tICdnbG9iJztcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcblxuXG5jb25zdCBtZDUgPSBCLnByb21pc2lmeShtZDVmaWxlKTtcblxubGV0IGZzID0ge1xuICBhc3luYyBoYXNBY2Nlc3MgKHBhdGgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hY2Nlc3MocGF0aCwgX2ZzLlJfT0spO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgZXhpc3RzIChwYXRoKSB7IHJldHVybiB0aGlzLmhhc0FjY2VzcyhwYXRoKTsgfSxcbiAgcmltcmFmOiBCLnByb21pc2lmeShyaW1yYWYpLFxuICBhc3luYyBta2RpciAoZGlyTmFtZSkge1xuICAgIGxldCBfbWtkaXIgPSBCLnByb21pc2lmeShfZnMubWtkaXIpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBfbWtkaXIoZGlyTmFtZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlICE9PSAnRUVYSVNUJykge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBhc3luYyBjb3B5RmlsZSAoc291cmNlLCBkZXN0aW5hdGlvbiwgLi4ub3RoZXJBcmdzKSB7XG4gICAgaWYgKCFhd2FpdCB0aGlzLmhhc0FjY2Vzcyhzb3VyY2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmaWxlIGF0ICcke3NvdXJjZX0nIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCAoQi5wcm9taXNpZnkobmNwKSkoc291cmNlLCBkZXN0aW5hdGlvbiwgLi4ub3RoZXJBcmdzKTtcbiAgfSxcbiAgYXN5bmMgbWQ1IChmaWxlUGF0aCkge1xuICAgIHJldHVybiBhd2FpdCBtZDUoZmlsZVBhdGgpO1xuICB9LFxuICBtdjogQi5wcm9taXNpZnkobXYpLFxuICB3aGljaDogQi5wcm9taXNpZnkod2hpY2gpLFxuICBnbG9iOiBCLnByb21pc2lmeShnbG9iKSxcbiAgYXN5bmMgaGFzaCAoZmlsZVBhdGgsIGFsZ29yaXRobSA9ICdzaGExJykge1xuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBmaWxlSGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKGFsZ29yaXRobSk7XG4gICAgICBjb25zdCByZWFkU3RyZWFtID0gX2ZzLmNyZWF0ZVJlYWRTdHJlYW0oZmlsZVBhdGgpO1xuICAgICAgcmVhZFN0cmVhbS5vbignZXJyb3InLCAoZSkgPT4gcmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoYENhbm5vdCBjYWxjdWxhdGUgJHthbGdvcml0aG19IGhhc2ggZm9yICcke2ZpbGVQYXRofScuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKSkpO1xuICAgICAgcmVhZFN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4gZmlsZUhhc2gudXBkYXRlKGNodW5rKSk7XG4gICAgICByZWFkU3RyZWFtLm9uKCdlbmQnLCAoKSA9PiByZXNvbHZlKGZpbGVIYXNoLmRpZ2VzdCgnaGV4JykpKTtcbiAgICB9KTtcbiAgfSxcbn07XG5cbi8vIGFkZCB0aGUgc3VwcG9ydGVkIGBmc2AgZnVuY3Rpb25zXG5jb25zdCBzaW1wbGVzID0gW1xuICAnb3BlbicsICdjbG9zZScsICdhY2Nlc3MnLCAncmVhZEZpbGUnLCAnd3JpdGVGaWxlJywgJ3dyaXRlJywgJ3JlYWQnLFxuICAncmVhZGxpbmsnLCAnY2htb2QnLCAndW5saW5rJywgJ3JlYWRkaXInLCAnc3RhdCcsICdyZW5hbWUnLCAnbHN0YXQnLFxuXTtcbmZvciAoY29uc3QgcyBvZiBzaW1wbGVzKSB7XG4gIGZzW3NdID0gQi5wcm9taXNpZnkoX2ZzW3NdKTtcbn1cblxuY29uc3Qgc3luY0Z1bmN0aW9ucyA9IFtcbiAgJ2NyZWF0ZVJlYWRTdHJlYW0nLFxuICAnY3JlYXRlV3JpdGVTdHJlYW0nLFxuXTtcbmZvciAoY29uc3QgcyBvZiBzeW5jRnVuY3Rpb25zKSB7XG4gIGZzW3NdID0gX2ZzW3NdO1xufVxuXG4vLyBhZGQgdGhlIGNvbnN0YW50cyBmcm9tIGBmc2BcbmNvbnN0IGNvbnN0YW50cyA9IFtcbiAgJ0ZfT0snLCAnUl9PSycsICdXX09LJywgJ1hfT0snLCAnY29uc3RhbnRzJyxcbl07XG5mb3IgKGNvbnN0IGMgb2YgY29uc3RhbnRzKSB7XG4gIGZzW2NdID0gX2ZzW2NdO1xufVxuXG5leHBvcnQgeyBmcyB9O1xuZXhwb3J0IGRlZmF1bHQgZnM7XG4iXSwiZmlsZSI6ImxpYi9mcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9

4

build/lib/image-util.js

@@ -284,3 +284,3 @@ "use strict";

} catch (e) {
throw new Error(`Cannot find any occurences of the partial image in the full image. ` + `Original error: ${e}`);
throw new Error(`Cannot find any occurrences of the partial image in the full image. ` + `Original error: ${e}`);
}

@@ -377,2 +377,2 @@

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9pbWFnZS11dGlsLmpzIl0sIm5hbWVzIjpbIk1JTUVfSlBFRyIsIk1JTUVfUE5HIiwiTUlNRV9CTVAiLCJKaW1wIiwiY3YiLCJCWVRFU19JTl9QSVhFTF9CTE9DSyIsIlNDQU5MSU5FX0ZJTFRFUl9NRVRIT0QiLCJERUZBVUxUX01BVENIX1RIUkVTSE9MRCIsIkFWQUlMQUJMRV9ERVRFQ1RPUlMiLCJBVkFJTEFCTEVfTUFUQ0hJTkdfRlVOQ1RJT05TIiwiZ2V0SmltcEltYWdlIiwiZGF0YSIsIkIiLCJyZXNvbHZlIiwicmVqZWN0IiwiXyIsImlzU3RyaW5nIiwiaXNCdWZmZXIiLCJFcnJvciIsIkJ1ZmZlciIsImZyb20iLCJlcnIiLCJpbWdPYmoiLCJfZ2V0QnVmZmVyIiwiZ2V0QnVmZmVyIiwiYmluZCIsInByb21pc2lmeSIsImNvbnRleHQiLCJpbml0T3BlbkNWIiwicmVxdWlyZSIsImlnbiIsImRldGVjdEFuZENvbXB1dGUiLCJpbWciLCJkZXRlY3RvciIsImtleVBvaW50cyIsImRldGVjdEFzeW5jIiwiZGVzY3JpcHRvciIsImNvbXB1dGVBc3luYyIsImNhbGN1bGF0ZU1hdGNoZWRSZWN0IiwibWF0Y2hlZFBvaW50cyIsImxlbmd0aCIsIngiLCJ5Iiwid2lkdGgiLCJoZWlnaHQiLCJwb2ludHNTb3J0ZWRCeURpc3RhbmNlIiwibWFwIiwicG9pbnQiLCJNYXRoIiwic3FydCIsInNvcnQiLCJwYWlyMSIsInBhaXIyIiwicGFpciIsImZpcnN0UG9pbnQiLCJoZWFkIiwibGFzdFBvaW50IiwibGFzdCIsInRvcExlZnRQb2ludCIsImJvdHRvbVJpZ2h0UG9pbnQiLCJoaWdobGlnaHRSZWdpb24iLCJtYXQiLCJyZWdpb24iLCJjb2xvciIsIlZlYyIsInRoaWNrbmVzcyIsImRyYXdSZWN0YW5nbGUiLCJSZWN0IiwiTElORV84IiwiZ2V0SW1hZ2VzTWF0Y2hlcyIsImltZzFEYXRhIiwiaW1nMkRhdGEiLCJvcHRpb25zIiwiZGV0ZWN0b3JOYW1lIiwidmlzdWFsaXplIiwiZ29vZE1hdGNoZXNGYWN0b3IiLCJtYXRjaEZ1bmMiLCJpbmNsdWRlcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJpbWcxIiwiaW1nMiIsImFsbCIsImltZGVjb2RlQXN5bmMiLCJyZXN1bHQxIiwicmVzdWx0MiIsIm1hdGNoZXMiLCJlIiwidG90YWxDb3VudCIsImlzRnVuY3Rpb24iLCJkaXN0YW5jZXMiLCJtYXRjaCIsImRpc3RhbmNlIiwibWluRGlzdGFuY2UiLCJtaW4iLCJtYXhEaXN0YW5jZSIsIm1heCIsImZpbHRlciIsIm1hdGNoMSIsIm1hdGNoMiIsInNsaWNlIiwicG9pbnRzMSIsInF1ZXJ5SWR4IiwicmVjdDEiLCJwb2ludHMyIiwidHJhaW5JZHgiLCJyZWN0MiIsInJlc3VsdCIsImNvdW50IiwidmlzdWFsaXphdGlvbiIsImRyYXdNYXRjaGVzIiwiY29scyIsImltZW5jb2RlQXN5bmMiLCJnZXRJbWFnZXNTaW1pbGFyaXR5IiwidGVtcGxhdGUiLCJyZWZlcmVuY2UiLCJyb3dzIiwiY29udmVydFRvQXN5bmMiLCJDVl84VUMzIiwibWF0Y2hlZCIsIm1hdGNoVGVtcGxhdGVBc3luYyIsIlRNX0NDT0VGRl9OT1JNRUQiLCJtaW5NYXgiLCJtaW5NYXhMb2NBc3luYyIsInNjb3JlIiwibWF4VmFsIiwicmVzdWx0TWF0IiwiTWF0IiwiY29weVRvQXN5bmMiLCJnZXRSZWdpb24iLCJtYXNrIiwiYWJzZGlmZiIsImN2dENvbG9yQXN5bmMiLCJDT0xPUl9CR1IyR1JBWSIsImNvbnRvdXJzIiwidGhyZXNob2xkQXN5bmMiLCJUSFJFU0hfQklOQVJZIiwiVEhSRVNIX09UU1UiLCJmaW5kQ29udG91cnNBc3luYyIsIlJFVFJfRVhURVJOQUwiLCJDSEFJTl9BUFBST1hfU0lNUExFIiwiY29udG91ciIsImJvdW5kaW5nUmVjdCIsImdldEltYWdlT2NjdXJyZW5jZSIsImZ1bGxJbWdEYXRhIiwicGFydGlhbEltZ0RhdGEiLCJ0aHJlc2hvbGQiLCJmdWxsSW1nIiwicGFydGlhbEltZyIsInJlY3QiLCJtYXhMb2MiLCJjcm9wQmFzZTY0SW1hZ2UiLCJiYXNlNjRJbWFnZSIsImltYWdlIiwiYmFzZTY0VG9JbWFnZSIsImNyb3BJbWFnZSIsImltYWdlVG9CYXNlNjQiLCJpbWFnZUJ1ZmZlciIsIlBORyIsImZpbHRlclR5cGUiLCJwYXJzZSIsImNodW5rcyIsInBhY2siLCJvbiIsImNodW5rIiwicHVzaCIsImNvbmNhdCIsInRvU3RyaW5nIiwiaW1hZ2VSZWN0IiwiaW50ZXJSZWN0IiwiZ2V0UmVjdEludGVyc2VjdGlvbiIsImZpcnN0VmVydGljYWxQaXhlbCIsInRvcCIsImxhc3RWZXJ0aWNhbFBpeGVsIiwiZmlyc3RIb3Jpem9udGFsUGl4ZWwiLCJsZWZ0IiwibGFzdEhvcml6b250YWxQaXhlbCIsImNyb3BwZWRBcnJheSIsImZpcnN0Qnl0ZUlkeEluUGl4ZWxCbG9jayIsImJ5dGVJZHgiLCJpbWFnZVNpemUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNO0FBQUVBLEVBQUFBLFNBQUY7QUFBYUMsRUFBQUEsUUFBYjtBQUF1QkMsRUFBQUE7QUFBdkIsSUFBb0NDLGFBQTFDOzs7O0FBQ0EsSUFBSUMsRUFBRSxHQUFHLElBQVQ7QUF3QkEsTUFBTUMsb0JBQW9CLEdBQUcsQ0FBN0I7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxDQUEvQjtBQUNBLE1BQU1DLHVCQUF1QixHQUFHLEdBQWhDO0FBRUEsTUFBTUMsbUJBQW1CLEdBQUcsQ0FDMUIsT0FEMEIsRUFFMUIsT0FGMEIsRUFHMUIsT0FIMEIsRUFJMUIsTUFKMEIsRUFLMUIsTUFMMEIsRUFNMUIsTUFOMEIsRUFPMUIsTUFQMEIsRUFRMUIsTUFSMEIsRUFTMUIsS0FUMEIsQ0FBNUI7QUFZQSxNQUFNQyw0QkFBNEIsR0FBRyxDQUNuQyxZQURtQyxFQUVuQyxZQUZtQyxFQUduQyxjQUhtQyxFQUluQyxtQkFKbUMsRUFLbkMsc0JBTG1DLEVBTW5DLGVBTm1DLENBQXJD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LENBQUN4SSxNQUFWLElBQXFCZ0ksR0FBRyxHQUFHdkIsSUFBSSxDQUFDekcsTUFBaEMsR0FBMEN5RyxJQUFJLENBQUN6RyxNQUEvQyxHQUF5RHdJLFNBQVMsQ0FBQ3hJLE1BQVYsR0FBbUJnSSxHQUEzRjtBQUNBLFNBQU87QUFBQ0csSUFBQUEsSUFBRDtBQUFPSCxJQUFBQSxHQUFQO0FBQVlqSSxJQUFBQSxLQUFaO0FBQW1CQyxJQUFBQTtBQUFuQixHQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEppbXAgZnJvbSAnamltcCc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0IHsgUE5HIH0gZnJvbSAncG5nanMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgaGFzVmFsdWUgfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCB7IE1JTUVfSlBFRywgTUlNRV9QTkcsIE1JTUVfQk1QIH0gPSBKaW1wO1xubGV0IGN2ID0gbnVsbDtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBSZWdpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gVGhlIG9mZnNldCBmcm9tIHRoZSBsZWZ0IHNpZGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3AgLSBUaGUgb2Zmc2V0IGZyb20gdGhlIHRvcFxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUG9pbnRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBSZWN0XG4gKiBAcHJvcGVydHkge251bWJlcn0geCAtIFRoZSB0b3AgbGVmdCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkge251bWJlcn0geSAtIFRoZSBib3R0b20gcmlnaHQgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodFxuICovXG5cbmNvbnN0IEJZVEVTX0lOX1BJWEVMX0JMT0NLID0gNDtcbmNvbnN0IFNDQU5MSU5FX0ZJTFRFUl9NRVRIT0QgPSA0O1xuY29uc3QgREVGQVVMVF9NQVRDSF9USFJFU0hPTEQgPSAwLjU7XG5cbmNvbnN0IEFWQUlMQUJMRV9ERVRFQ1RPUlMgPSBbXG4gICdBS0FaRScsXG4gICdBR0FTVCcsXG4gICdCUklTSycsXG4gICdGQVNUJyxcbiAgJ0dGVFQnLFxuICAnS0FaRScsXG4gICdNU0VSJyxcbiAgJ1NJRlQnLFxuICAnT1JCJyxcbl07XG5cbmNvbnN0IEFWQUlMQUJMRV9NQVRDSElOR19GVU5DVElPTlMgPSBbXG4gICdGbGFubkJhc2VkJyxcbiAgJ0JydXRlRm9yY2UnLFxuICAnQnJ1dGVGb3JjZUwxJyxcbiAgJ0JydXRlRm9yY2VIYW1taW5nJyxcbiAgJ0JydXRlRm9yY2VIYW1taW5nTHV0JyxcbiAgJ0JydXRlRm9yY2VTTDInLFxuXTtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGdldCBhIEppbXAgaW1hZ2Ugb2JqZWN0IGZyb20gYnVmZmVyIG9yIGJhc2U2NCBkYXRhLiBKaW1wXG4gKiBpcyBhIGdyZWF0IGxpYnJhcnkgaG93ZXZlciBpdCBkb2VzIElPIGluIHRoZSBjb25zdHJ1Y3RvciBzbyBpdCdzIG5vdFxuICogY29udmVuaWVudCBmb3Igb3VyIGFzeW5jL2F3YWl0IG1vZGVsLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfHN0cmluZ30gZGF0YSAtIGJpbmFyeSBpbWFnZSBidWZmZXIgb3IgYmFzZTY0LWVuY29kZWQgaW1hZ2VcbiAqIHN0cmluZ1xuICogQHJldHVybnMge0ppbXB9IC0gdGhlIGppbXAgaW1hZ2Ugb2JqZWN0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEppbXBJbWFnZSAoZGF0YSkge1xuICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGlmICghXy5pc1N0cmluZyhkYXRhKSAmJiAhXy5pc0J1ZmZlcihkYXRhKSkge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ011c3QgaW5pdGlhbGl6ZSBqaW1wIG9iamVjdCB3aXRoIHN0cmluZyBvciBidWZmZXInKSk7XG4gICAgfVxuICAgIC8vIGlmIGRhdGEgaXMgYSBzdHJpbmcsIGFzc3VtZSBpdCBpcyBhIGJhc2U2NC1lbmNvZGVkIGltYWdlXG4gICAgaWYgKF8uaXNTdHJpbmcoZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCAnYmFzZTY0Jyk7XG4gICAgfVxuICAgIG5ldyBKaW1wKGRhdGEsIChlcnIsIGltZ09iaikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgICBpZiAoIWltZ09iaikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignQ291bGQgbm90IGNyZWF0ZSBqaW1wIGltYWdlIGZyb20gdGhhdCBkYXRhJykpO1xuICAgICAgfVxuICAgICAgaW1nT2JqLl9nZXRCdWZmZXIgPSBpbWdPYmouZ2V0QnVmZmVyLmJpbmQoaW1nT2JqKTtcbiAgICAgIGltZ09iai5nZXRCdWZmZXIgPSBCLnByb21pc2lmeShpbWdPYmouX2dldEJ1ZmZlciwge2NvbnRleHQ6IGltZ09ian0pO1xuICAgICAgcmVzb2x2ZShpbWdPYmopO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgb3BlbmN2NG5vZGVqcyBtb2R1bGUgaXMgbm90IGluc3RhbGxlZCBvciBjYW5ub3QgYmUgbG9hZGVkXG4gKi9cbmZ1bmN0aW9uIGluaXRPcGVuQ1YgKCkge1xuICBpZiAoIWN2KSB7XG4gICAgdHJ5IHtcbiAgICAgIGN2ID0gcmVxdWlyZSgnb3BlbmN2NG5vZGVqcycpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuICBpZiAoIWN2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdvcGVuY3Y0bm9kZWpzIG1vZHVsZSBpcyByZXF1aXJlZCB0byB1c2UgT3BlbkNWIGZlYXR1cmVzLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBpbnN0YWxsIGl0IGZpcnN0IChucG0gaSAtZyBvcGVuY3Y0bm9kZWpzKSBhbmQgcmVzdGFydCBBcHBpdW0uICcgK1xuICAgICAgICAgICAgICAgICAgICAnUmVhZCBodHRwczovL2dpdGh1Yi5jb20vanVzdGFkdWRld2hvaGFja3Mvb3BlbmN2NG5vZGVqcyNob3ctdG8taW5zdGFsbCBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoaXMgdG9waWMuJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNYXRjaENvbXB1dGF0aW9uUmVzdWx0XG4gKiBAcHJvcGVydHkge2N2LkRlc2NyaXB0b3JNYXRjaH0gZGVzY2lwdG9yIC0gT3BlbkNWIG1hdGNoIGRlc2NyaXB0b3JcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8Y3YuS2V5UG9pbnQ+fSBrZXlQb2ludHMgLSBUaGUgYXJyYXkgb2Yga2V5IHBvaW50c1xuICovXG5cbi8qKlxuICogQ2FsY3VsYXRlcyBhbiBPcGVuQ1YgbWF0Y2ggZGVzY3JpcHRvciBvZiBhbiBpbWFnZSwgd2hpY2ggY2FuIGJlIHVzZWRcbiAqIGZvciBicnV0ZS1mb3JjZSBtYXRjaGluZy5cbiAqIFJlYWQgaHR0cHM6Ly9kb2NzLm9wZW5jdi5vcmcvMy4wLWJldGEvZG9jL3B5X3R1dG9yaWFscy9weV9mZWF0dXJlMmQvcHlfbWF0Y2hlci9weV9tYXRjaGVyLmh0bWxcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHtjdi5NYXR9IGltZyBJbWFnZSBkYXRhXG4gKiBAcGFyYW0ge2N2LkZlYXR1cmVEZXRlY3Rvcn0gZGV0ZWN0b3IgT3BlbkNWIGZlYXR1cmUgZGV0ZWN0b3IgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJucyB7TWF0Y2hDb21wdXRhdGlvblJlc3VsdH1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0QW5kQ29tcHV0ZSAoaW1nLCBkZXRlY3Rvcikge1xuICBjb25zdCBrZXlQb2ludHMgPSBhd2FpdCBkZXRlY3Rvci5kZXRlY3RBc3luYyhpbWcpO1xuICBjb25zdCBkZXNjcmlwdG9yID0gYXdhaXQgZGV0ZWN0b3IuY29tcHV0ZUFzeW5jKGltZywga2V5UG9pbnRzKTtcbiAgcmV0dXJuIHtcbiAgICBrZXlQb2ludHMsXG4gICAgZGVzY3JpcHRvclxuICB9O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZWQgdGhlIGJvdW5kaW5nIHJlY3QgY29vcmRpbmF0ZXMgZm9yIHRoZSBhcnJheSBvZiBtYXRjaGluZyBwb2ludHNcbiAqXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gbWF0Y2hlZFBvaW50cyBBcnJheSBvZiBtYXRjaGluZyBwb2ludHNcbiAqIEByZXR1cm5zIHtSZWN0fSBUaGUgbWF0Y2hpbmcgYm91bmRpbmcgcmVjdCBvciBhIHplcm8gcmVjdCBpZiBubyBtYXRjaFxuICogY2FuIGJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiBjYWxjdWxhdGVNYXRjaGVkUmVjdCAobWF0Y2hlZFBvaW50cykge1xuICBpZiAobWF0Y2hlZFBvaW50cy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwLFxuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcG9pbnRzU29ydGVkQnlEaXN0YW5jZSA9IG1hdGNoZWRQb2ludHNcbiAgICAubWFwKHBvaW50ID0+IFtNYXRoLnNxcnQocG9pbnQueCAqIHBvaW50LnggKyBwb2ludC55ICogcG9pbnQueSksIHBvaW50XSlcbiAgICAuc29ydCgocGFpcjEsIHBhaXIyKSA9PiBwYWlyMVswXSA+PSBwYWlyMlswXSlcbiAgICAubWFwKHBhaXIgPT4gcGFpclsxXSk7XG4gIGNvbnN0IGZpcnN0UG9pbnQgPSBfLmhlYWQocG9pbnRzU29ydGVkQnlEaXN0YW5jZSk7XG4gIGNvbnN0IGxhc3RQb2ludCA9IF8ubGFzdChwb2ludHNTb3J0ZWRCeURpc3RhbmNlKTtcbiAgY29uc3QgdG9wTGVmdFBvaW50ID0ge1xuICAgIHg6IGZpcnN0UG9pbnQueCA8PSBsYXN0UG9pbnQueCA/IGZpcnN0UG9pbnQueCA6IGxhc3RQb2ludC54LFxuICAgIHk6IGZpcnN0UG9pbnQueSA8PSBsYXN0UG9pbnQueSA/IGZpcnN0UG9pbnQueSA6IGxhc3RQb2ludC55LFxuICB9O1xuICBjb25zdCBib3R0b21SaWdodFBvaW50ID0ge1xuICAgIHg6IGZpcnN0UG9pbnQueCA+PSBsYXN0UG9pbnQueCA/IGZpcnN0UG9pbnQueCA6IGxhc3RQb2ludC54LFxuICAgIHk6IGZpcnN0UG9pbnQueSA+PSBsYXN0UG9pbnQueSA/IGZpcnN0UG9pbnQueSA6IGxhc3RQb2ludC55LFxuICB9O1xuICByZXR1cm4ge1xuICAgIHg6IHRvcExlZnRQb2ludC54LFxuICAgIHk6IHRvcExlZnRQb2ludC55LFxuICAgIHdpZHRoOiBib3R0b21SaWdodFBvaW50LnggLSB0b3BMZWZ0UG9pbnQueCxcbiAgICBoZWlnaHQ6IGJvdHRvbVJpZ2h0UG9pbnQueSAtIHRvcExlZnRQb2ludC55XG4gIH07XG59XG5cbi8qKlxuICogRHJhd3MgYSByZWN0YW5uZ2xlIG9uIHRoZSBnaXZlbiBpbWFnZSBtYXRyaXhcbiAqXG4gKiBAcGFyYW0ge2N2Lk1hdH0gbWF0IFRoZSBzb3VyY2UgaW1hZ2VcbiAqIEBwYXJhbSB7UmVjdH0gcmVnaW9uIFRoZSByZWdpb24gdG8gaGlnaGxpZ2h0XG4gKlxuICogQHJldHVybnMge2N2Lk1hdH0gVGhlIHNhbWUgaW1hZ2Ugd2l0aCB0aGUgcmVjdGFuZ2Ugb24gaXRcbiAqL1xuZnVuY3Rpb24gaGlnaGxpZ2h0UmVnaW9uIChtYXQsIHJlZ2lvbikge1xuICBpZiAocmVnaW9uLndpZHRoIDw9IDAgfHwgcmVnaW9uLmhlaWdodCA8PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gaGlnaGxpZ2h0IGluIHJlZFxuICBjb25zdCBjb2xvciA9IG5ldyBjdi5WZWMoMCwgMCwgMjU1KTtcbiAgY29uc3QgdGhpY2tuZXNzID0gMjtcbiAgbWF0LmRyYXdSZWN0YW5nbGUobmV3IGN2LlJlY3QocmVnaW9uLngsIHJlZ2lvbi55LCByZWdpb24ud2lkdGgsIHJlZ2lvbi5oZWlnaHQpLCBjb2xvciwgdGhpY2tuZXNzLCBjdi5MSU5FXzgpO1xuICByZXR1cm4gbWF0O1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE1hdGNoaW5nT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBkZXRlY3Rvck5hbWUgWydPUkInXSBPbmUgb2YgcG9zc2libGUgT3BlbkNWIGZlYXR1cmUgZGV0ZWN0b3IgbmFtZXNcbiAqIGZyb20gYEFWQUlMQUJMRV9ERVRFQ1RPUlNgIGFycmF5LlxuICogU29tZSBvZiB0aGVzZSBtZXRob2RzIChGQVNULCBBR0FTVCwgR0ZUVCwgRkFTVCwgU0lGVCBhbmQgTVNFUikgYXJlIG5vdCBhdmFpbGFibGVcbiAqIGluIHRoZSBkZWZhdWx0IE9wZW5DViBpbnN0YWxsYXRpb24gYW5kIGhhdmUgdG8gYmUgZW5hYmxlZCBtYW51YWxseSBiZWZvcmVcbiAqIGxpYnJhcnkgY29tcGlsYXRpb24uXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG1hdGNoRnVuYyBbJ0JydXRlRm9yY2UnXSBUaGUgbmFtZSBvZiB0aGUgbWF0Y2hpbmcgZnVuY3Rpb24uXG4gKiBTaG91bGQgYmUgb25lIG9mIGBBVkFJTEFCTEVfTUFUQ0hJTkdfRlVOQ1RJT05TYCBhcnJheS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxGdW5jdGlvbn0gZ29vZE1hdGNoZXNGYWN0b3IgVGhlIG1heGltdW0gY291bnQgb2YgXCJnb29kXCIgbWF0Y2hlc1xuICogKGUuIGcuIHdpdGggbWluaW1hbCBkaXN0YW5jZXMpIG9yIGEgZnVuY3Rpb24sIHdoaWNoIGFjY2VwdHMgMyBhcmd1bWVudHM6IHRoZSBjdXJyZW50IGRpc3RhbmNlLFxuICogbWluaW1hbCBkaXN0YW5jZSwgbWF4aW11bSBkaXN0YW5jZSBhbmQgcmV0dXJucyB0cnVlIG9yIGZhbHNlIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSB0aGUgbWF0Y2guXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSB2aXN1YWxpemUgW2ZhbHNlXSBXaGV0aGVyIHRvIHJldHVybiB0aGUgcmVzdWx0aW5nIHZpc2FsaXphdGlvblxuICogYXMgYW4gaW1hZ2UgKHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzKVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTWF0Y2hpbmdSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb3VudCBUaGUgY291bnQgb2YgbWF0Y2hlZCBlZGdlcyBvbiBib3RoIGltYWdlcy5cbiAqIFRoZSBtb3JlIG1hdGNoaW5nIGVkZ2VzIHRoZXJlIGFyZSBubyBib3RoIGltYWdlcyB0aGUgbW9yZSBzaW1pbGFyIHRoZXkgYXJlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvdGFsQ291bnQgVGhlIHRvdGFsIGNvdW50IG9mIG1hdGNoZWQgZWRnZXMgb24gYm90aCBpbWFnZXMuXG4gKiBJdCBpcyBlcXVhbCB0byBgY291bnRgIGlmIGBnb29kTWF0Y2hlc0ZhY3RvcmAgZG9lcyBub3QgbGltaXQgdGhlIG1hdGNoZXMsXG4gKiBvdGhlcndpc2UgaXQgY29udGFpbnMgdGhlIHRvdGFsIGNvdW50IG9mIG1hdGNoZXMgYmVmb3JlIGBnb29kTWF0Y2hlc0ZhY3RvcmAgaXNcbiAqIGFwcGxpZWQuXG4gKiBAcHJvcGVydHkgez9CdWZmZXJ9IHZpc3VhbGl6YXRpb24gVGhlIHZpc3VhbGl6YXRpb24gb2YgdGhlIG1hdGNoaW5nIHJlc3VsdFxuICogcmVwcmVzZW50ZWQgYXMgUE5HIGltYWdlIGJ1ZmZlci4gVGhpcyB2aXN1YWxpemF0aW9uIGxvb2tzIGxpa2VcbiAqIGh0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzMxMTI1NTIxLzI5NzAyNzMxLWM3OWUzMTQyLTg5NzItMTFlNy05NDdlLWRiMTA5ZDQxNTQ2OS5qcGdcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8UG9pbnQ+fSBwb2ludHMxIFRoZSBhcnJheSBvZiBtYXRjaGluZyBwb2ludHMgb24gdGhlIGZpcnN0IGltYWdlXG4gKiBAcHJvcGVydHkge1JlY3R9IHJlY3QxIFRoZSBib3VuZGluZyByZWN0IGZvciB0aGUgYG1hdGNoZWRQb2ludHMxYCBzZXQgb3IgYSB6ZXJvIHJlY3RcbiAqIGlmIG5vdCBlbm91Z2ggbWF0Y2hpbmcgcG9pbnRzIGFyZSBmb3VuZFxuICogQHByb3BlcnR5IHtBcnJheTxQb2ludD59IHBvaW50czIgVGhlIGFycmF5IG9mIG1hdGNoaW5nIHBvaW50cyBvbiB0aGUgc2Vjb25kIGltYWdlXG4gKiBAcHJvcGVydHkge1JlY3R9IHJlY3QyIFRoZSBib3VuZGluZyByZWN0IGZvciB0aGUgYG1hdGNoZWRQb2ludHMyYCBzZXQgb3IgYSB6ZXJvIHJlY3RcbiAqIGlmIG5vdCBlbm91Z2ggbWF0Y2hpbmcgcG9pbnRzIGFyZSBmb3VuZFxuICovXG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgY291bnQgb2YgY29tbW9uIGVkZ2VzIGJldHdlZW4gdHdvIGltYWdlcy5cbiAqIFRoZSBpbWFnZXMgbWlnaHQgYmUgcm90YXRlZCBvciByZXNpemVkIHJlbGF0aXZlbHkgdG8gZWFjaCBvdGhlci5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gaW1nMURhdGEgVGhlIGRhdGEgb2YgdGhlIGZpcnN0IGltYWdlIHBhY2tlZCBpbnRvIGEgTm9kZUpTIGJ1ZmZlclxuICogQHBhcmFtIHtCdWZmZXJ9IGltZzJEYXRhIFRoZSBkYXRhIG9mIHRoZSBzZWNvbmQgaW1hZ2UgcGFja2VkIGludG8gYSBOb2RlSlMgYnVmZmVyXG4gKiBAcGFyYW0gez9NYXRjaGluZ09wdGlvbnN9IG9wdGlvbnMgW3t9XSBTZXQgb2YgbWF0Y2hpbmcgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtNYXRjaGluZ1Jlc3VsdH0gTWFjaGluZyByZXN1bHRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBgZGV0ZWN0b3JOYW1lYCB2YWx1ZSBpcyB1bmtub3duLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRJbWFnZXNNYXRjaGVzIChpbWcxRGF0YSwgaW1nMkRhdGEsIG9wdGlvbnMgPSB7fSkge1xuICBpbml0T3BlbkNWKCk7XG5cbiAgY29uc3Qge2RldGVjdG9yTmFtZSA9ICdPUkInLCB2aXN1YWxpemUgPSBmYWxzZSxcbiAgICAgICAgIGdvb2RNYXRjaGVzRmFjdG9yLCBtYXRjaEZ1bmMgPSAnQnJ1dGVGb3JjZSd9ID0gb3B0aW9ucztcbiAgaWYgKCFfLmluY2x1ZGVzKEFWQUlMQUJMRV9ERVRFQ1RPUlMsIGRldGVjdG9yTmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2RldGVjdG9yTmFtZX0nIGRldGVjdG9yIGlzIHVua25vd24uIGAgK1xuICAgICAgICAgICAgICAgICAgICBgT25seSAke0pTT04uc3RyaW5naWZ5KEFWQUlMQUJMRV9ERVRFQ1RPUlMpfSBkZXRlY3RvcnMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICBpZiAoIV8uaW5jbHVkZXMoQVZBSUxBQkxFX01BVENISU5HX0ZVTkNUSU9OUywgbWF0Y2hGdW5jKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJyR7bWF0Y2hGdW5jfScgbWF0Y2hpbmcgZnVuY3Rpb24gaXMgdW5rbm93bi4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBPbmx5ICR7SlNPTi5zdHJpbmdpZnkoQVZBSUxBQkxFX01BVENISU5HX0ZVTkNUSU9OUyl9IG1hdGNoaW5nIGZ1bmN0aW9ucyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG5cbiAgY29uc3QgZGV0ZWN0b3IgPSBuZXcgY3ZbYCR7ZGV0ZWN0b3JOYW1lfURldGVjdG9yYF0oKTtcbiAgY29uc3QgW2ltZzEsIGltZzJdID0gYXdhaXQgQi5hbGwoW1xuICAgIGN2LmltZGVjb2RlQXN5bmMoaW1nMURhdGEpLFxuICAgIGN2LmltZGVjb2RlQXN5bmMoaW1nMkRhdGEpXG4gIF0pO1xuICBjb25zdCBbcmVzdWx0MSwgcmVzdWx0Ml0gPSBhd2FpdCBCLmFsbChbXG4gICAgZGV0ZWN0QW5kQ29tcHV0ZShpbWcxLCBkZXRlY3RvciksXG4gICAgZGV0ZWN0QW5kQ29tcHV0ZShpbWcyLCBkZXRlY3RvcilcbiAgXSk7XG4gIGxldCBtYXRjaGVzID0gW107XG4gIHRyeSB7XG4gICAgbWF0Y2hlcyA9IGF3YWl0IGN2W2BtYXRjaCR7bWF0Y2hGdW5jfUFzeW5jYF0ocmVzdWx0MS5kZXNjcmlwdG9yLCByZXN1bHQyLmRlc2NyaXB0b3IpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBhbnkgbWF0Y2hlcyBiZXR3ZWVuIHRoZSBnaXZlbiBpbWFnZXMuIFRyeSBhbm90aGVyIGRldGVjdGlvbiBhbGdvcml0aG0uIGAgK1xuICAgICAgICAgICAgICAgICAgICBgIE9yaWdpbmFsIGVycm9yOiAke2V9YCk7XG4gIH1cbiAgY29uc3QgdG90YWxDb3VudCA9IG1hdGNoZXMubGVuZ3RoO1xuICBpZiAoaGFzVmFsdWUoZ29vZE1hdGNoZXNGYWN0b3IpKSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihnb29kTWF0Y2hlc0ZhY3RvcikpIHtcbiAgICAgIGNvbnN0IGRpc3RhbmNlcyA9IG1hdGNoZXMubWFwKG1hdGNoID0+IG1hdGNoLmRpc3RhbmNlKTtcbiAgICAgIGNvbnN0IG1pbkRpc3RhbmNlID0gXy5taW4oZGlzdGFuY2VzKTtcbiAgICAgIGNvbnN0IG1heERpc3RhbmNlID0gXy5tYXgoZGlzdGFuY2VzKTtcbiAgICAgIG1hdGNoZXMgPSBtYXRjaGVzXG4gICAgICAgIC5maWx0ZXIobWF0Y2ggPT4gZ29vZE1hdGNoZXNGYWN0b3IobWF0Y2guZGlzdGFuY2UsIG1pbkRpc3RhbmNlLCBtYXhEaXN0YW5jZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiBnb29kTWF0Y2hlc0ZhY3Rvcikge1xuICAgICAgICBtYXRjaGVzID0gbWF0Y2hlc1xuICAgICAgICAgIC5zb3J0KChtYXRjaDEsIG1hdGNoMikgPT4gbWF0Y2gxLmRpc3RhbmNlIC0gbWF0Y2gyLmRpc3RhbmNlKVxuICAgICAgICAgIC5zbGljZSgwLCBnb29kTWF0Y2hlc0ZhY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcG9pbnRzMSA9IG1hdGNoZXMubWFwKG1hdGNoID0+IHJlc3VsdDEua2V5UG9pbnRzW21hdGNoLnF1ZXJ5SWR4XS5wb2ludCk7XG4gIGNvbnN0IHJlY3QxID0gY2FsY3VsYXRlTWF0Y2hlZFJlY3QocG9pbnRzMSk7XG4gIGNvbnN0IHBvaW50czIgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiByZXN1bHQyLmtleVBvaW50c1ttYXRjaC50cmFpbklkeF0ucG9pbnQpO1xuICBjb25zdCByZWN0MiA9IGNhbGN1bGF0ZU1hdGNoZWRSZWN0KHBvaW50czIpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBwb2ludHMxLFxuICAgIHJlY3QxLFxuICAgIHBvaW50czIsXG4gICAgcmVjdDIsXG4gICAgdG90YWxDb3VudCxcbiAgICBjb3VudDogbWF0Y2hlcy5sZW5ndGgsXG4gIH07XG4gIGlmICh2aXN1YWxpemUpIHtcbiAgICBjb25zdCB2aXN1YWxpemF0aW9uID0gY3YuZHJhd01hdGNoZXMoaW1nMSwgaW1nMiwgcmVzdWx0MS5rZXlQb2ludHMsIHJlc3VsdDIua2V5UG9pbnRzLCBtYXRjaGVzKTtcbiAgICBoaWdobGlnaHRSZWdpb24odmlzdWFsaXphdGlvbiwgcmVjdDEpO1xuICAgIGhpZ2hsaWdodFJlZ2lvbih2aXN1YWxpemF0aW9uLCB7XG4gICAgICB4OiBpbWcxLmNvbHMgKyByZWN0Mi54LFxuICAgICAgeTogcmVjdDIueSxcbiAgICAgIHdpZHRoOiByZWN0Mi53aWR0aCxcbiAgICAgIGhlaWdodDogcmVjdDIuaGVpZ2h0XG4gICAgfSk7XG4gICAgcmVzdWx0LnZpc3VhbGl6YXRpb24gPSBhd2FpdCBjdi5pbWVuY29kZUFzeW5jKCcucG5nJywgdmlzdWFsaXphdGlvbik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTaW1pbGFyaXR5T3B0aW9uc1xuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gdmlzdWFsaXplIFtmYWxzZV0gV2hldGhlciB0byByZXR1cm4gdGhlIHJlc3VsdGluZyB2aXNhbGl6YXRpb25cbiAqIGFzIGFuIGltYWdlICh1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcylcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNpbWlsYXJpdHlSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzY29yZSBUaGUgc2ltaWxhcml0eSBzY29yZSBhcyBhIGZsb2F0IG51bWJlciBpbiByYW5nZSBbMC4wLCAxLjBdLlxuICogMS4wIGlzIHRoZSBoaWdoZXN0IHNjb3JlIChtZWFucyBib3RoIGltYWdlcyBhcmUgdG90YWxseSBlcXVhbCkuXG4gKiBAcHJvcGVydHkgez9CdWZmZXJ9IHZpc3VhbGl6YXRpb24gVGhlIHZpc3VhbGl6YXRpb24gb2YgdGhlIG1hdGNoaW5nIHJlc3VsdFxuICogcmVwcmVzZW50ZWQgYXMgUE5HIGltYWdlIGJ1ZmZlci4gVGhpcyBpbWFnZSBpbmNsdWRlcyBib3RoIGlucHV0IHBpY3R1cmVzIHdoZXJlXG4gKiBkaWZmZXJlbmNlIHJlZ2lvbnMgYXJlIGhpZ2hsaWdodGVkIHdpdGggcmVjdGFuZ2xlcy5cbiAqL1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHNpbWlsYXJpdHkgc2NvcmUgYmV0d2VlbiB0d28gaW1hZ2VzLlxuICogSXQgaXMgZXhwZWN0ZWQsIHRoYXQgYm90aCBpbWFnZXMgaGF2ZSB0aGUgc2FtZSByZXNvbHV0aW9uLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBpbWcxRGF0YSBUaGUgZGF0YSBvZiB0aGUgZmlyc3QgaW1hZ2UgcGFja2VkIGludG8gYSBOb2RlSlMgYnVmZmVyXG4gKiBAcGFyYW0ge0J1ZmZlcn0gaW1nMkRhdGEgVGhlIGRhdGEgb2YgdGhlIHNlY29uZCBpbWFnZSBwYWNrZWQgaW50byBhIE5vZGVKUyBidWZmZXJcbiAqIEBwYXJhbSB7P1NpbWlsYXJpdHlPcHRpb25zfSBvcHRpb25zIFt7fV0gU2V0IG9mIHNpbWlsYXJpdHkgY2FsY3VsYXRpb24gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtTaW1pbGFyaXR5UmVzdWx0fSBUaGUgY2FsY3VsYXRpb24gcmVzdWx0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGdpdmVuIGltYWdlcyBoYXZlIGRpZmZlcmVudCByZXNvbHV0aW9uLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRJbWFnZXNTaW1pbGFyaXR5IChpbWcxRGF0YSwgaW1nMkRhdGEsIG9wdGlvbnMgPSB7fSkge1xuICBpbml0T3BlbkNWKCk7XG5cbiAgY29uc3Qge3Zpc3VhbGl6ZSA9IGZhbHNlfSA9IG9wdGlvbnM7XG4gIGxldCBbdGVtcGxhdGUsIHJlZmVyZW5jZV0gPSBhd2FpdCBCLmFsbChbXG4gICAgY3YuaW1kZWNvZGVBc3luYyhpbWcxRGF0YSksXG4gICAgY3YuaW1kZWNvZGVBc3luYyhpbWcyRGF0YSlcbiAgXSk7XG4gIGlmICh0ZW1wbGF0ZS5yb3dzICE9PSByZWZlcmVuY2Uucm93cyB8fCB0ZW1wbGF0ZS5jb2xzICE9PSByZWZlcmVuY2UuY29scykge1xuICAgIHRocm93IG5ldyBFcnJvcignQm90aCBpbWFnZXMgYXJlIGV4cGVjdGVkIHRvIGhhdmUgdGhlIHNhbWUgc2l6ZSBpbiBvcmRlciB0byAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2NhbGN1bGF0ZSB0aGUgc2ltaWxhcml0eSBzY29yZS4nKTtcbiAgfVxuICBbdGVtcGxhdGUsIHJlZmVyZW5jZV0gPSBhd2FpdCBCLmFsbChbXG4gICAgdGVtcGxhdGUuY29udmVydFRvQXN5bmMoY3YuQ1ZfOFVDMyksXG4gICAgcmVmZXJlbmNlLmNvbnZlcnRUb0FzeW5jKGN2LkNWXzhVQzMpXG4gIF0pO1xuXG4gIGNvbnN0IG1hdGNoZWQgPSBhd2FpdCByZWZlcmVuY2UubWF0Y2hUZW1wbGF0ZUFzeW5jKHRlbXBsYXRlLCBjdi5UTV9DQ09FRkZfTk9STUVEKTtcbiAgY29uc3QgbWluTWF4ID0gYXdhaXQgbWF0Y2hlZC5taW5NYXhMb2NBc3luYygpO1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgc2NvcmU6IG1pbk1heC5tYXhWYWxcbiAgfTtcbiAgaWYgKHZpc3VhbGl6ZSkge1xuICAgIGNvbnN0IHJlc3VsdE1hdCA9IG5ldyBjdi5NYXQodGVtcGxhdGUucm93cywgdGVtcGxhdGUuY29scyAqIDIsIGN2LkNWXzhVQzMpO1xuICAgIGF3YWl0IEIuYWxsKFtcbiAgICAgIHJlZmVyZW5jZS5jb3B5VG9Bc3luYyhcbiAgICAgICAgcmVzdWx0TWF0LmdldFJlZ2lvbihuZXcgY3YuUmVjdCgwLCAwLCByZWZlcmVuY2UuY29scywgcmVmZXJlbmNlLnJvd3MpKSksXG4gICAgICB0ZW1wbGF0ZS5jb3B5VG9Bc3luYyhcbiAgICAgICAgcmVzdWx0TWF0LmdldFJlZ2lvbihuZXcgY3YuUmVjdChyZWZlcmVuY2UuY29scywgMCwgdGVtcGxhdGUuY29scywgdGVtcGxhdGUucm93cykpKVxuICAgIF0pO1xuICAgIGxldCBtYXNrID0gcmVmZXJlbmNlLmFic2RpZmYodGVtcGxhdGUpO1xuICAgIG1hc2sgPSBhd2FpdCBtYXNrLmN2dENvbG9yQXN5bmMoY3YuQ09MT1JfQkdSMkdSQVkpO1xuICAgIGxldCBjb250b3VycyA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBtYXNrID0gYXdhaXQgbWFzay50aHJlc2hvbGRBc3luYygxMjgsIDI1NSwgY3YuVEhSRVNIX0JJTkFSWSB8IGN2LlRIUkVTSF9PVFNVKTtcbiAgICAgIGNvbnRvdXJzID0gYXdhaXQgbWFzay5maW5kQ29udG91cnNBc3luYyhjdi5SRVRSX0VYVEVSTkFMLCBjdi5DSEFJTl9BUFBST1hfU0lNUExFKTtcbiAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgIC8vIE5vIGNvbnRvdXJzIGNhbiBiZSBmb3VuZCwgd2hpY2ggbWVhbnMsIG1vc3QgbGlrZWx5LCB0aGF0IGltYWdlcyBhcmUgZXF1YWxcbiAgICB9XG4gICAgZm9yIChjb25zdCBjb250b3VyIG9mIGNvbnRvdXJzKSB7XG4gICAgICBjb25zdCBib3VuZGluZ1JlY3QgPSBjb250b3VyLmJvdW5kaW5nUmVjdCgpO1xuICAgICAgaGlnaGxpZ2h0UmVnaW9uKHJlc3VsdE1hdCwgYm91bmRpbmdSZWN0KTtcbiAgICAgIGhpZ2hsaWdodFJlZ2lvbihyZXN1bHRNYXQsIHtcbiAgICAgICAgeDogcmVmZXJlbmNlLmNvbHMgKyBib3VuZGluZ1JlY3QueCxcbiAgICAgICAgeTogYm91bmRpbmdSZWN0LnksXG4gICAgICAgIHdpZHRoOiBib3VuZGluZ1JlY3Qud2lkdGgsXG4gICAgICAgIGhlaWdodDogYm91bmRpbmdSZWN0LmhlaWdodFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJlc3VsdC52aXN1YWxpemF0aW9uID0gYXdhaXQgY3YuaW1lbmNvZGVBc3luYygnLnBuZycsIHJlc3VsdE1hdCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBPY2N1cnJlbmNlT3B0aW9uc1xuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gdmlzdWFsaXplIFtmYWxzZV0gV2hldGhlciB0byByZXR1cm4gdGhlIHJlc3VsdGluZyB2aXNhbGl6YXRpb25cbiAqIGFzIGFuIGltYWdlICh1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcylcbiAqIEBwcm9wZXJ0eSB7P2Zsb2F0fSB0aHJlc2hvbGQgWzAuNV0gQXQgd2hhdCBub3JtYWxpemVkIHRocmVzaG9sZCB0byByZWplY3RcbiAqIGEgbWF0Y2hcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE9jY3VycmVuY2VSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7UmVjdH0gcmVjdCBUaGUgcmVnaW9uIG9mIHRoZSBwYXJ0aWFsIGltYWdlIG9jY3VyZW5jZVxuICogb24gdGhlIGZ1bGwgaW1hZ2VcbiAqIEBwcm9wZXJ0eSB7P0J1ZmZlcn0gdmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiBvZiB0aGUgbWF0Y2hpbmcgcmVzdWx0XG4gKiByZXByZXNlbnRlZCBhcyBQTkcgaW1hZ2UgYnVmZmVyLiBPbiB0aGlzIGltYWdlIHRoZSBtYXRjaGluZ1xuICogcmVnaW9uIGlzIGhpZ2hsaWdodGVkIHdpdGggYSByZWN0YW5nbGUuXG4gKi9cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBvY2N1cmVuY2UgcG9zaXRpb24gb2YgYSBwYXJ0aWFsIGltYWdlIGluIHRoZSBmdWxsXG4gKiBpbWFnZS5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gZnVsbEltZ0RhdGEgVGhlIGRhdGEgb2YgdGhlIGZ1bGwgaW1hZ2UgcGFja2VkIGludG8gYSBOb2RlSlMgYnVmZmVyXG4gKiBAcGFyYW0ge0J1ZmZlcn0gcGFydGlhbEltZ0RhdGEgVGhlIGRhdGEgb2YgdGhlIHBhcnRpYWwgaW1hZ2UgcGFja2VkIGludG8gYSBOb2RlSlMgYnVmZmVyXG4gKiBAcGFyYW0gez9PY2N1cnJlbmNlT3B0aW9uc30gb3B0aW9ucyBbe31dIFNldCBvZiBvY2N1cnJlbmNlIGNhbGN1bGF0aW9uIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7T2NjdXJyZW5jZVJlc3VsdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBubyBvY2N1cmVuY2VzIG9mIHRoZSBwYXJ0aWFsIGltYWdlIGNhbiBiZSBmb3VuZCBpbiB0aGUgZnVsbCBpbWFnZVxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRJbWFnZU9jY3VycmVuY2UgKGZ1bGxJbWdEYXRhLCBwYXJ0aWFsSW1nRGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gIGluaXRPcGVuQ1YoKTtcblxuICBjb25zdCB7dmlzdWFsaXplID0gZmFsc2UsIHRocmVzaG9sZCA9IERFRkFVTFRfTUFUQ0hfVEhSRVNIT0xEfSA9IG9wdGlvbnM7XG4gIGNvbnN0IFtmdWxsSW1nLCBwYXJ0aWFsSW1nXSA9IGF3YWl0IEIuYWxsKFtcbiAgICBjdi5pbWRlY29kZUFzeW5jKGZ1bGxJbWdEYXRhKSxcbiAgICBjdi5pbWRlY29kZUFzeW5jKHBhcnRpYWxJbWdEYXRhKVxuICBdKTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIHRyeSB7XG4gICAgY29uc3QgbWF0Y2hlZCA9IGF3YWl0IGZ1bGxJbWcubWF0Y2hUZW1wbGF0ZUFzeW5jKHBhcnRpYWxJbWcsIGN2LlRNX0NDT0VGRl9OT1JNRUQpO1xuICAgIGNvbnN0IG1pbk1heCA9IGF3YWl0IG1hdGNoZWQubWluTWF4TG9jQXN5bmMoKTtcbiAgICBpZiAobWluTWF4Lm1heFZhbCA8IHRocmVzaG9sZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBhbnkgb2NjdXJyZW5jZXMgb2YgdGhlIHBhcnRpYWwgaW1hZ2UgaW4gdGhlIGZ1bGwgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYGltYWdlIGFib3ZlIHRoZSB0aHJlc2hvbGQgb2YgJHt0aHJlc2hvbGR9LiBIaWdoZXN0IG1hdGNoIHZhbHVlIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGBmb3VuZCB3YXMgJHttaW5NYXgubWF4VmFsfWApO1xuICAgIH1cbiAgICByZXN1bHQucmVjdCA9IHtcbiAgICAgIHg6IG1pbk1heC5tYXhMb2MueCxcbiAgICAgIHk6IG1pbk1heC5tYXhMb2MueSxcbiAgICAgIHdpZHRoOiBwYXJ0aWFsSW1nLmNvbHMsXG4gICAgICBoZWlnaHQ6IHBhcnRpYWxJbWcucm93c1xuICAgIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIGFueSBvY2N1cmVuY2VzIG9mIHRoZSBwYXJ0aWFsIGltYWdlIGluIHRoZSBmdWxsIGltYWdlLiBgICtcbiAgICAgICAgICAgICAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2V9YCk7XG4gIH1cbiAgaWYgKHZpc3VhbGl6ZSkge1xuICAgIGhpZ2hsaWdodFJlZ2lvbihmdWxsSW1nLCByZXN1bHQucmVjdCk7XG4gICAgcmVzdWx0LnZpc3VhbGl6YXRpb24gPSBhd2FpdCBjdi5pbWVuY29kZUFzeW5jKCcucG5nJywgZnVsbEltZyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDcm9wIHRoZSBpbWFnZSBieSBnaXZlbiByZWN0YW5nbGUgKHVzZSBiYXNlNjQgc3RyaW5nIGFzIGlucHV0IGFuZCBvdXRwdXQpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NEltYWdlIFRoZSBzdHJpbmcgd2l0aCBiYXNlNjQgZW5jb2RlZCBpbWFnZVxuICogQHBhcmFtIHtSZWdpb259IHJlY3QgVGhlIHNlbGVjdGVkIHJlZ2lvbiBvZiBpbWFnZVxuICogQHJldHVybiB7c3RyaW5nfSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgY3JvcHBlZCBpbWFnZVxuICovXG5hc3luYyBmdW5jdGlvbiBjcm9wQmFzZTY0SW1hZ2UgKGJhc2U2NEltYWdlLCByZWN0KSB7XG4gIGNvbnN0IGltYWdlID0gYXdhaXQgYmFzZTY0VG9JbWFnZShiYXNlNjRJbWFnZSk7XG4gIGNyb3BJbWFnZShpbWFnZSwgcmVjdCk7XG4gIHJldHVybiBhd2FpdCBpbWFnZVRvQmFzZTY0KGltYWdlKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwbmdqcyBpbWFnZSBmcm9tIGdpdmVuIGJhc2U2NCBpbWFnZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjRJbWFnZSBUaGUgc3RyaW5nIHdpdGggYmFzZTY0IGVuY29kZWQgaW1hZ2VcbiAqIEByZXR1cm4ge1BOR30gVGhlIGltYWdlIG9iamVjdFxuICovXG5hc3luYyBmdW5jdGlvbiBiYXNlNjRUb0ltYWdlIChiYXNlNjRJbWFnZSkge1xuICBjb25zdCBpbWFnZUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGJhc2U2NEltYWdlLCAnYmFzZTY0Jyk7XG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgaW1hZ2UgPSBuZXcgUE5HKHtmaWx0ZXJUeXBlOiBTQ0FOTElORV9GSUxURVJfTUVUSE9EfSk7XG4gICAgaW1hZ2UucGFyc2UoaW1hZ2VCdWZmZXIsIChlcnIsIGltYWdlKSA9PiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tY2FsbGJhY2tzXG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoaW1hZ2UpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBiYXNlNjQgc3RyaW5nIGZvciBnaXZlbiBpbWFnZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge1BOR30gaW1hZ2UgVGhlIGltYWdlIG9iamVjdFxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5nIHdpdGggYmFzZTY0IGVuY29kZWQgaW1hZ2VcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW1hZ2VUb0Jhc2U2NCAoaW1hZ2UpIHtcbiAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICBpbWFnZS5wYWNrKClcbiAgICAub24oJ2RhdGEnLCAoY2h1bmspID0+IGNodW5rcy5wdXNoKGNodW5rKSkub24oJ2VuZCcsICgpID0+IHtcbiAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChjaHVua3MpLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgfSlcbiAgICAub24oJ2Vycm9yJywgKGVycikgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLWNhbGxiYWNrc1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENyb3AgdGhlIGltYWdlIGJ5IGdpdmVuIHJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB7UE5HfSBpbWFnZSBUaGUgaW1hZ2UgdG8gbXV0YXRlIGJ5IGNyb3BwaW5nXG4gKiBAcGFyYW0ge1JlZ2lvbn0gcmVjdCBUaGUgc2VsZWN0ZWQgcmVnaW9uIG9mIGltYWdlXG4gKi9cbmZ1bmN0aW9uIGNyb3BJbWFnZSAoaW1hZ2UsIHJlY3QpIHtcbiAgY29uc3QgaW1hZ2VSZWN0ID0ge3dpZHRoOiBpbWFnZS53aWR0aCwgaGVpZ2h0OiBpbWFnZS5oZWlnaHR9O1xuICBjb25zdCBpbnRlclJlY3QgPSBnZXRSZWN0SW50ZXJzZWN0aW9uKHJlY3QsIGltYWdlUmVjdCk7XG4gIGlmIChpbnRlclJlY3Qud2lkdGggPCByZWN0LndpZHRoIHx8IGludGVyUmVjdC5oZWlnaHQgPCByZWN0LmhlaWdodCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNyb3AgJHtKU09OLnN0cmluZ2lmeShyZWN0KX0gZnJvbSAke0pTT04uc3RyaW5naWZ5KGltYWdlUmVjdCl9IGJlY2F1c2UgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZW0gd2FzIG5vdCB0aGUgc2l6ZSBvZiB0aGUgcmVjdGApO1xuICB9XG5cbiAgY29uc3QgZmlyc3RWZXJ0aWNhbFBpeGVsID0gaW50ZXJSZWN0LnRvcDtcbiAgY29uc3QgbGFzdFZlcnRpY2FsUGl4ZWwgPSBpbnRlclJlY3QudG9wICsgaW50ZXJSZWN0LmhlaWdodDtcblxuICBjb25zdCBmaXJzdEhvcml6b250YWxQaXhlbCA9IGludGVyUmVjdC5sZWZ0O1xuICBjb25zdCBsYXN0SG9yaXpvbnRhbFBpeGVsID0gaW50ZXJSZWN0LmxlZnQgKyBpbnRlclJlY3Qud2lkdGg7XG5cbiAgY29uc3QgY3JvcHBlZEFycmF5ID0gW107XG4gIGZvciAobGV0IHkgPSBmaXJzdFZlcnRpY2FsUGl4ZWw7IHkgPCBsYXN0VmVydGljYWxQaXhlbDsgeSsrKSB7XG4gICAgZm9yIChsZXQgeCA9IGZpcnN0SG9yaXpvbnRhbFBpeGVsOyB4IDwgbGFzdEhvcml6b250YWxQaXhlbDsgeCsrKSB7XG4gICAgICBjb25zdCBmaXJzdEJ5dGVJZHhJblBpeGVsQmxvY2sgPSAoaW1hZ2VSZWN0LndpZHRoICogeSArIHgpIDw8IDI7XG4gICAgICBmb3IgKGxldCBieXRlSWR4ID0gMDsgYnl0ZUlkeCA8IEJZVEVTX0lOX1BJWEVMX0JMT0NLOyBieXRlSWR4KyspIHtcbiAgICAgICAgY3JvcHBlZEFycmF5LnB1c2goaW1hZ2UuZGF0YVtmaXJzdEJ5dGVJZHhJblBpeGVsQmxvY2sgKyBieXRlSWR4XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaW1hZ2UuZGF0YSA9IEJ1ZmZlci5mcm9tKGNyb3BwZWRBcnJheSk7XG4gIGltYWdlLndpZHRoID0gaW50ZXJSZWN0LndpZHRoO1xuICBpbWFnZS5oZWlnaHQgPSBpbnRlclJlY3QuaGVpZ2h0O1xuICByZXR1cm4gaW1hZ2U7XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RJbnRlcnNlY3Rpb24gKHJlY3QsIGltYWdlU2l6ZSkge1xuICBjb25zdCBsZWZ0ID0gcmVjdC5sZWZ0ID49IGltYWdlU2l6ZS53aWR0aCA/IGltYWdlU2l6ZS53aWR0aCA6IHJlY3QubGVmdDtcbiAgY29uc3QgdG9wID0gcmVjdC50b3AgPj0gaW1hZ2VTaXplLmhlaWdodCA/IGltYWdlU2l6ZS5oZWlnaHQgOiByZWN0LnRvcDtcbiAgY29uc3Qgd2lkdGggPSBpbWFnZVNpemUud2lkdGggPj0gKGxlZnQgKyByZWN0LndpZHRoKSA/IHJlY3Qud2lkdGggOiAoaW1hZ2VTaXplLndpZHRoIC0gbGVmdCk7XG4gIGNvbnN0IGhlaWdodCA9IGltYWdlU2l6ZS5oZWlnaHQgPj0gKHRvcCArIHJlY3QuaGVpZ2h0KSA/IHJlY3QuaGVpZ2h0IDogKGltYWdlU2l6ZS5oZWlnaHQgLSB0b3ApO1xuICByZXR1cm4ge2xlZnQsIHRvcCwgd2lkdGgsIGhlaWdodH07XG59XG5cbmV4cG9ydCB7XG4gIGNyb3BCYXNlNjRJbWFnZSwgYmFzZTY0VG9JbWFnZSwgaW1hZ2VUb0Jhc2U2NCwgY3JvcEltYWdlLCBnZXRJbWFnZXNNYXRjaGVzLFxuICBnZXRJbWFnZXNTaW1pbGFyaXR5LCBnZXRJbWFnZU9jY3VycmVuY2UsIGdldEppbXBJbWFnZSwgTUlNRV9KUEVHLCBNSU1FX1BORyxcbiAgTUlNRV9CTVAsXG59O1xuIl0sImZpbGUiOiJsaWIvaW1hZ2UtdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9pbWFnZS11dGlsLmpzIl0sIm5hbWVzIjpbIk1JTUVfSlBFRyIsIk1JTUVfUE5HIiwiTUlNRV9CTVAiLCJKaW1wIiwiY3YiLCJCWVRFU19JTl9QSVhFTF9CTE9DSyIsIlNDQU5MSU5FX0ZJTFRFUl9NRVRIT0QiLCJERUZBVUxUX01BVENIX1RIUkVTSE9MRCIsIkFWQUlMQUJMRV9ERVRFQ1RPUlMiLCJBVkFJTEFCTEVfTUFUQ0hJTkdfRlVOQ1RJT05TIiwiZ2V0SmltcEltYWdlIiwiZGF0YSIsIkIiLCJyZXNvbHZlIiwicmVqZWN0IiwiXyIsImlzU3RyaW5nIiwiaXNCdWZmZXIiLCJFcnJvciIsIkJ1ZmZlciIsImZyb20iLCJlcnIiLCJpbWdPYmoiLCJfZ2V0QnVmZmVyIiwiZ2V0QnVmZmVyIiwiYmluZCIsInByb21pc2lmeSIsImNvbnRleHQiLCJpbml0T3BlbkNWIiwicmVxdWlyZSIsImlnbiIsImRldGVjdEFuZENvbXB1dGUiLCJpbWciLCJkZXRlY3RvciIsImtleVBvaW50cyIsImRldGVjdEFzeW5jIiwiZGVzY3JpcHRvciIsImNvbXB1dGVBc3luYyIsImNhbGN1bGF0ZU1hdGNoZWRSZWN0IiwibWF0Y2hlZFBvaW50cyIsImxlbmd0aCIsIngiLCJ5Iiwid2lkdGgiLCJoZWlnaHQiLCJwb2ludHNTb3J0ZWRCeURpc3RhbmNlIiwibWFwIiwicG9pbnQiLCJNYXRoIiwic3FydCIsInNvcnQiLCJwYWlyMSIsInBhaXIyIiwicGFpciIsImZpcnN0UG9pbnQiLCJoZWFkIiwibGFzdFBvaW50IiwibGFzdCIsInRvcExlZnRQb2ludCIsImJvdHRvbVJpZ2h0UG9pbnQiLCJoaWdobGlnaHRSZWdpb24iLCJtYXQiLCJyZWdpb24iLCJjb2xvciIsIlZlYyIsInRoaWNrbmVzcyIsImRyYXdSZWN0YW5nbGUiLCJSZWN0IiwiTElORV84IiwiZ2V0SW1hZ2VzTWF0Y2hlcyIsImltZzFEYXRhIiwiaW1nMkRhdGEiLCJvcHRpb25zIiwiZGV0ZWN0b3JOYW1lIiwidmlzdWFsaXplIiwiZ29vZE1hdGNoZXNGYWN0b3IiLCJtYXRjaEZ1bmMiLCJpbmNsdWRlcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJpbWcxIiwiaW1nMiIsImFsbCIsImltZGVjb2RlQXN5bmMiLCJyZXN1bHQxIiwicmVzdWx0MiIsIm1hdGNoZXMiLCJlIiwidG90YWxDb3VudCIsImlzRnVuY3Rpb24iLCJkaXN0YW5jZXMiLCJtYXRjaCIsImRpc3RhbmNlIiwibWluRGlzdGFuY2UiLCJtaW4iLCJtYXhEaXN0YW5jZSIsIm1heCIsImZpbHRlciIsIm1hdGNoMSIsIm1hdGNoMiIsInNsaWNlIiwicG9pbnRzMSIsInF1ZXJ5SWR4IiwicmVjdDEiLCJwb2ludHMyIiwidHJhaW5JZHgiLCJyZWN0MiIsInJlc3VsdCIsImNvdW50IiwidmlzdWFsaXphdGlvbiIsImRyYXdNYXRjaGVzIiwiY29scyIsImltZW5jb2RlQXN5bmMiLCJnZXRJbWFnZXNTaW1pbGFyaXR5IiwidGVtcGxhdGUiLCJyZWZlcmVuY2UiLCJyb3dzIiwiY29udmVydFRvQXN5bmMiLCJDVl84VUMzIiwibWF0Y2hlZCIsIm1hdGNoVGVtcGxhdGVBc3luYyIsIlRNX0NDT0VGRl9OT1JNRUQiLCJtaW5NYXgiLCJtaW5NYXhMb2NBc3luYyIsInNjb3JlIiwibWF4VmFsIiwicmVzdWx0TWF0IiwiTWF0IiwiY29weVRvQXN5bmMiLCJnZXRSZWdpb24iLCJtYXNrIiwiYWJzZGlmZiIsImN2dENvbG9yQXN5bmMiLCJDT0xPUl9CR1IyR1JBWSIsImNvbnRvdXJzIiwidGhyZXNob2xkQXN5bmMiLCJUSFJFU0hfQklOQVJZIiwiVEhSRVNIX09UU1UiLCJmaW5kQ29udG91cnNBc3luYyIsIlJFVFJfRVhURVJOQUwiLCJDSEFJTl9BUFBST1hfU0lNUExFIiwiY29udG91ciIsImJvdW5kaW5nUmVjdCIsImdldEltYWdlT2NjdXJyZW5jZSIsImZ1bGxJbWdEYXRhIiwicGFydGlhbEltZ0RhdGEiLCJ0aHJlc2hvbGQiLCJmdWxsSW1nIiwicGFydGlhbEltZyIsInJlY3QiLCJtYXhMb2MiLCJjcm9wQmFzZTY0SW1hZ2UiLCJiYXNlNjRJbWFnZSIsImltYWdlIiwiYmFzZTY0VG9JbWFnZSIsImNyb3BJbWFnZSIsImltYWdlVG9CYXNlNjQiLCJpbWFnZUJ1ZmZlciIsIlBORyIsImZpbHRlclR5cGUiLCJwYXJzZSIsImNodW5rcyIsInBhY2siLCJvbiIsImNodW5rIiwicHVzaCIsImNvbmNhdCIsInRvU3RyaW5nIiwiaW1hZ2VSZWN0IiwiaW50ZXJSZWN0IiwiZ2V0UmVjdEludGVyc2VjdGlvbiIsImZpcnN0VmVydGljYWxQaXhlbCIsInRvcCIsImxhc3RWZXJ0aWNhbFBpeGVsIiwiZmlyc3RIb3Jpem9udGFsUGl4ZWwiLCJsZWZ0IiwibGFzdEhvcml6b250YWxQaXhlbCIsImNyb3BwZWRBcnJheSIsImZpcnN0Qnl0ZUlkeEluUGl4ZWxCbG9jayIsImJ5dGVJZHgiLCJpbWFnZVNpemUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNO0FBQUVBLEVBQUFBLFNBQUY7QUFBYUMsRUFBQUEsUUFBYjtBQUF1QkMsRUFBQUE7QUFBdkIsSUFBb0NDLGFBQTFDOzs7O0FBQ0EsSUFBSUMsRUFBRSxHQUFHLElBQVQ7QUF3QkEsTUFBTUMsb0JBQW9CLEdBQUcsQ0FBN0I7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxDQUEvQjtBQUNBLE1BQU1DLHVCQUF1QixHQUFHLEdBQWhDO0FBRUEsTUFBTUMsbUJBQW1CLEdBQUcsQ0FDMUIsT0FEMEIsRUFFMUIsT0FGMEIsRUFHMUIsT0FIMEIsRUFJMUIsTUFKMEIsRUFLMUIsTUFMMEIsRUFNMUIsTUFOMEIsRUFPMUIsTUFQMEIsRUFRMUIsTUFSMEIsRUFTMUIsS0FUMEIsQ0FBNUI7QUFZQSxNQUFNQyw0QkFBNEIsR0FBRyxDQUNuQyxZQURtQyxFQUVuQyxZQUZtQyxFQUduQyxjQUhtQyxFQUluQyxtQkFKbUMsRUFLbkMsc0JBTG1DLEVBTW5DLGVBTm1DLENBQXJD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LENBQUN4SSxNQUFWLElBQXFCZ0ksR0FBRyxHQUFHdkIsSUFBSSxDQUFDekcsTUFBaEMsR0FBMEN5RyxJQUFJLENBQUN6RyxNQUEvQyxHQUF5RHdJLFNBQVMsQ0FBQ3hJLE1BQVYsR0FBbUJnSSxHQUEzRjtBQUNBLFNBQU87QUFBQ0csSUFBQUEsSUFBRDtBQUFPSCxJQUFBQSxHQUFQO0FBQVlqSSxJQUFBQSxLQUFaO0FBQW1CQyxJQUFBQTtBQUFuQixHQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEppbXAgZnJvbSAnamltcCc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0IHsgUE5HIH0gZnJvbSAncG5nanMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgaGFzVmFsdWUgfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCB7IE1JTUVfSlBFRywgTUlNRV9QTkcsIE1JTUVfQk1QIH0gPSBKaW1wO1xubGV0IGN2ID0gbnVsbDtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBSZWdpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gVGhlIG9mZnNldCBmcm9tIHRoZSBsZWZ0IHNpZGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3AgLSBUaGUgb2Zmc2V0IGZyb20gdGhlIHRvcFxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUG9pbnRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBSZWN0XG4gKiBAcHJvcGVydHkge251bWJlcn0geCAtIFRoZSB0b3AgbGVmdCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkge251bWJlcn0geSAtIFRoZSBib3R0b20gcmlnaHQgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodFxuICovXG5cbmNvbnN0IEJZVEVTX0lOX1BJWEVMX0JMT0NLID0gNDtcbmNvbnN0IFNDQU5MSU5FX0ZJTFRFUl9NRVRIT0QgPSA0O1xuY29uc3QgREVGQVVMVF9NQVRDSF9USFJFU0hPTEQgPSAwLjU7XG5cbmNvbnN0IEFWQUlMQUJMRV9ERVRFQ1RPUlMgPSBbXG4gICdBS0FaRScsXG4gICdBR0FTVCcsXG4gICdCUklTSycsXG4gICdGQVNUJyxcbiAgJ0dGVFQnLFxuICAnS0FaRScsXG4gICdNU0VSJyxcbiAgJ1NJRlQnLFxuICAnT1JCJyxcbl07XG5cbmNvbnN0IEFWQUlMQUJMRV9NQVRDSElOR19GVU5DVElPTlMgPSBbXG4gICdGbGFubkJhc2VkJyxcbiAgJ0JydXRlRm9yY2UnLFxuICAnQnJ1dGVGb3JjZUwxJyxcbiAgJ0JydXRlRm9yY2VIYW1taW5nJyxcbiAgJ0JydXRlRm9yY2VIYW1taW5nTHV0JyxcbiAgJ0JydXRlRm9yY2VTTDInLFxuXTtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGdldCBhIEppbXAgaW1hZ2Ugb2JqZWN0IGZyb20gYnVmZmVyIG9yIGJhc2U2NCBkYXRhLiBKaW1wXG4gKiBpcyBhIGdyZWF0IGxpYnJhcnkgaG93ZXZlciBpdCBkb2VzIElPIGluIHRoZSBjb25zdHJ1Y3RvciBzbyBpdCdzIG5vdFxuICogY29udmVuaWVudCBmb3Igb3VyIGFzeW5jL2F3YWl0IG1vZGVsLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfHN0cmluZ30gZGF0YSAtIGJpbmFyeSBpbWFnZSBidWZmZXIgb3IgYmFzZTY0LWVuY29kZWQgaW1hZ2VcbiAqIHN0cmluZ1xuICogQHJldHVybnMge0ppbXB9IC0gdGhlIGppbXAgaW1hZ2Ugb2JqZWN0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEppbXBJbWFnZSAoZGF0YSkge1xuICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGlmICghXy5pc1N0cmluZyhkYXRhKSAmJiAhXy5pc0J1ZmZlcihkYXRhKSkge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ011c3QgaW5pdGlhbGl6ZSBqaW1wIG9iamVjdCB3aXRoIHN0cmluZyBvciBidWZmZXInKSk7XG4gICAgfVxuICAgIC8vIGlmIGRhdGEgaXMgYSBzdHJpbmcsIGFzc3VtZSBpdCBpcyBhIGJhc2U2NC1lbmNvZGVkIGltYWdlXG4gICAgaWYgKF8uaXNTdHJpbmcoZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCAnYmFzZTY0Jyk7XG4gICAgfVxuICAgIG5ldyBKaW1wKGRhdGEsIChlcnIsIGltZ09iaikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgICBpZiAoIWltZ09iaikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignQ291bGQgbm90IGNyZWF0ZSBqaW1wIGltYWdlIGZyb20gdGhhdCBkYXRhJykpO1xuICAgICAgfVxuICAgICAgaW1nT2JqLl9nZXRCdWZmZXIgPSBpbWdPYmouZ2V0QnVmZmVyLmJpbmQoaW1nT2JqKTtcbiAgICAgIGltZ09iai5nZXRCdWZmZXIgPSBCLnByb21pc2lmeShpbWdPYmouX2dldEJ1ZmZlciwge2NvbnRleHQ6IGltZ09ian0pO1xuICAgICAgcmVzb2x2ZShpbWdPYmopO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgb3BlbmN2NG5vZGVqcyBtb2R1bGUgaXMgbm90IGluc3RhbGxlZCBvciBjYW5ub3QgYmUgbG9hZGVkXG4gKi9cbmZ1bmN0aW9uIGluaXRPcGVuQ1YgKCkge1xuICBpZiAoIWN2KSB7XG4gICAgdHJ5IHtcbiAgICAgIGN2ID0gcmVxdWlyZSgnb3BlbmN2NG5vZGVqcycpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuICBpZiAoIWN2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdvcGVuY3Y0bm9kZWpzIG1vZHVsZSBpcyByZXF1aXJlZCB0byB1c2UgT3BlbkNWIGZlYXR1cmVzLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBpbnN0YWxsIGl0IGZpcnN0IChucG0gaSAtZyBvcGVuY3Y0bm9kZWpzKSBhbmQgcmVzdGFydCBBcHBpdW0uICcgK1xuICAgICAgICAgICAgICAgICAgICAnUmVhZCBodHRwczovL2dpdGh1Yi5jb20vanVzdGFkdWRld2hvaGFja3Mvb3BlbmN2NG5vZGVqcyNob3ctdG8taW5zdGFsbCBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoaXMgdG9waWMuJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNYXRjaENvbXB1dGF0aW9uUmVzdWx0XG4gKiBAcHJvcGVydHkge2N2LkRlc2NyaXB0b3JNYXRjaH0gZGVzY2lwdG9yIC0gT3BlbkNWIG1hdGNoIGRlc2NyaXB0b3JcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8Y3YuS2V5UG9pbnQ+fSBrZXlQb2ludHMgLSBUaGUgYXJyYXkgb2Yga2V5IHBvaW50c1xuICovXG5cbi8qKlxuICogQ2FsY3VsYXRlcyBhbiBPcGVuQ1YgbWF0Y2ggZGVzY3JpcHRvciBvZiBhbiBpbWFnZSwgd2hpY2ggY2FuIGJlIHVzZWRcbiAqIGZvciBicnV0ZS1mb3JjZSBtYXRjaGluZy5cbiAqIFJlYWQgaHR0cHM6Ly9kb2NzLm9wZW5jdi5vcmcvMy4wLWJldGEvZG9jL3B5X3R1dG9yaWFscy9weV9mZWF0dXJlMmQvcHlfbWF0Y2hlci9weV9tYXRjaGVyLmh0bWxcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHtjdi5NYXR9IGltZyBJbWFnZSBkYXRhXG4gKiBAcGFyYW0ge2N2LkZlYXR1cmVEZXRlY3Rvcn0gZGV0ZWN0b3IgT3BlbkNWIGZlYXR1cmUgZGV0ZWN0b3IgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJucyB7TWF0Y2hDb21wdXRhdGlvblJlc3VsdH1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0QW5kQ29tcHV0ZSAoaW1nLCBkZXRlY3Rvcikge1xuICBjb25zdCBrZXlQb2ludHMgPSBhd2FpdCBkZXRlY3Rvci5kZXRlY3RBc3luYyhpbWcpO1xuICBjb25zdCBkZXNjcmlwdG9yID0gYXdhaXQgZGV0ZWN0b3IuY29tcHV0ZUFzeW5jKGltZywga2V5UG9pbnRzKTtcbiAgcmV0dXJuIHtcbiAgICBrZXlQb2ludHMsXG4gICAgZGVzY3JpcHRvclxuICB9O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZWQgdGhlIGJvdW5kaW5nIHJlY3QgY29vcmRpbmF0ZXMgZm9yIHRoZSBhcnJheSBvZiBtYXRjaGluZyBwb2ludHNcbiAqXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gbWF0Y2hlZFBvaW50cyBBcnJheSBvZiBtYXRjaGluZyBwb2ludHNcbiAqIEByZXR1cm5zIHtSZWN0fSBUaGUgbWF0Y2hpbmcgYm91bmRpbmcgcmVjdCBvciBhIHplcm8gcmVjdCBpZiBubyBtYXRjaFxuICogY2FuIGJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiBjYWxjdWxhdGVNYXRjaGVkUmVjdCAobWF0Y2hlZFBvaW50cykge1xuICBpZiAobWF0Y2hlZFBvaW50cy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwLFxuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcG9pbnRzU29ydGVkQnlEaXN0YW5jZSA9IG1hdGNoZWRQb2ludHNcbiAgICAubWFwKHBvaW50ID0+IFtNYXRoLnNxcnQocG9pbnQueCAqIHBvaW50LnggKyBwb2ludC55ICogcG9pbnQueSksIHBvaW50XSlcbiAgICAuc29ydCgocGFpcjEsIHBhaXIyKSA9PiBwYWlyMVswXSA+PSBwYWlyMlswXSlcbiAgICAubWFwKHBhaXIgPT4gcGFpclsxXSk7XG4gIGNvbnN0IGZpcnN0UG9pbnQgPSBfLmhlYWQocG9pbnRzU29ydGVkQnlEaXN0YW5jZSk7XG4gIGNvbnN0IGxhc3RQb2ludCA9IF8ubGFzdChwb2ludHNTb3J0ZWRCeURpc3RhbmNlKTtcbiAgY29uc3QgdG9wTGVmdFBvaW50ID0ge1xuICAgIHg6IGZpcnN0UG9pbnQueCA8PSBsYXN0UG9pbnQueCA/IGZpcnN0UG9pbnQueCA6IGxhc3RQb2ludC54LFxuICAgIHk6IGZpcnN0UG9pbnQueSA8PSBsYXN0UG9pbnQueSA/IGZpcnN0UG9pbnQueSA6IGxhc3RQb2ludC55LFxuICB9O1xuICBjb25zdCBib3R0b21SaWdodFBvaW50ID0ge1xuICAgIHg6IGZpcnN0UG9pbnQueCA+PSBsYXN0UG9pbnQueCA/IGZpcnN0UG9pbnQueCA6IGxhc3RQb2ludC54LFxuICAgIHk6IGZpcnN0UG9pbnQueSA+PSBsYXN0UG9pbnQueSA/IGZpcnN0UG9pbnQueSA6IGxhc3RQb2ludC55LFxuICB9O1xuICByZXR1cm4ge1xuICAgIHg6IHRvcExlZnRQb2ludC54LFxuICAgIHk6IHRvcExlZnRQb2ludC55LFxuICAgIHdpZHRoOiBib3R0b21SaWdodFBvaW50LnggLSB0b3BMZWZ0UG9pbnQueCxcbiAgICBoZWlnaHQ6IGJvdHRvbVJpZ2h0UG9pbnQueSAtIHRvcExlZnRQb2ludC55XG4gIH07XG59XG5cbi8qKlxuICogRHJhd3MgYSByZWN0YW5uZ2xlIG9uIHRoZSBnaXZlbiBpbWFnZSBtYXRyaXhcbiAqXG4gKiBAcGFyYW0ge2N2Lk1hdH0gbWF0IFRoZSBzb3VyY2UgaW1hZ2VcbiAqIEBwYXJhbSB7UmVjdH0gcmVnaW9uIFRoZSByZWdpb24gdG8gaGlnaGxpZ2h0XG4gKlxuICogQHJldHVybnMge2N2Lk1hdH0gVGhlIHNhbWUgaW1hZ2Ugd2l0aCB0aGUgcmVjdGFuZ2Ugb24gaXRcbiAqL1xuZnVuY3Rpb24gaGlnaGxpZ2h0UmVnaW9uIChtYXQsIHJlZ2lvbikge1xuICBpZiAocmVnaW9uLndpZHRoIDw9IDAgfHwgcmVnaW9uLmhlaWdodCA8PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gaGlnaGxpZ2h0IGluIHJlZFxuICBjb25zdCBjb2xvciA9IG5ldyBjdi5WZWMoMCwgMCwgMjU1KTtcbiAgY29uc3QgdGhpY2tuZXNzID0gMjtcbiAgbWF0LmRyYXdSZWN0YW5nbGUobmV3IGN2LlJlY3QocmVnaW9uLngsIHJlZ2lvbi55LCByZWdpb24ud2lkdGgsIHJlZ2lvbi5oZWlnaHQpLCBjb2xvciwgdGhpY2tuZXNzLCBjdi5MSU5FXzgpO1xuICByZXR1cm4gbWF0O1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE1hdGNoaW5nT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBkZXRlY3Rvck5hbWUgWydPUkInXSBPbmUgb2YgcG9zc2libGUgT3BlbkNWIGZlYXR1cmUgZGV0ZWN0b3IgbmFtZXNcbiAqIGZyb20gYEFWQUlMQUJMRV9ERVRFQ1RPUlNgIGFycmF5LlxuICogU29tZSBvZiB0aGVzZSBtZXRob2RzIChGQVNULCBBR0FTVCwgR0ZUVCwgRkFTVCwgU0lGVCBhbmQgTVNFUikgYXJlIG5vdCBhdmFpbGFibGVcbiAqIGluIHRoZSBkZWZhdWx0IE9wZW5DViBpbnN0YWxsYXRpb24gYW5kIGhhdmUgdG8gYmUgZW5hYmxlZCBtYW51YWxseSBiZWZvcmVcbiAqIGxpYnJhcnkgY29tcGlsYXRpb24uXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG1hdGNoRnVuYyBbJ0JydXRlRm9yY2UnXSBUaGUgbmFtZSBvZiB0aGUgbWF0Y2hpbmcgZnVuY3Rpb24uXG4gKiBTaG91bGQgYmUgb25lIG9mIGBBVkFJTEFCTEVfTUFUQ0hJTkdfRlVOQ1RJT05TYCBhcnJheS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxGdW5jdGlvbn0gZ29vZE1hdGNoZXNGYWN0b3IgVGhlIG1heGltdW0gY291bnQgb2YgXCJnb29kXCIgbWF0Y2hlc1xuICogKGUuIGcuIHdpdGggbWluaW1hbCBkaXN0YW5jZXMpIG9yIGEgZnVuY3Rpb24sIHdoaWNoIGFjY2VwdHMgMyBhcmd1bWVudHM6IHRoZSBjdXJyZW50IGRpc3RhbmNlLFxuICogbWluaW1hbCBkaXN0YW5jZSwgbWF4aW11bSBkaXN0YW5jZSBhbmQgcmV0dXJucyB0cnVlIG9yIGZhbHNlIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSB0aGUgbWF0Y2guXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSB2aXN1YWxpemUgW2ZhbHNlXSBXaGV0aGVyIHRvIHJldHVybiB0aGUgcmVzdWx0aW5nIHZpc2FsaXphdGlvblxuICogYXMgYW4gaW1hZ2UgKHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzKVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTWF0Y2hpbmdSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb3VudCBUaGUgY291bnQgb2YgbWF0Y2hlZCBlZGdlcyBvbiBib3RoIGltYWdlcy5cbiAqIFRoZSBtb3JlIG1hdGNoaW5nIGVkZ2VzIHRoZXJlIGFyZSBubyBib3RoIGltYWdlcyB0aGUgbW9yZSBzaW1pbGFyIHRoZXkgYXJlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvdGFsQ291bnQgVGhlIHRvdGFsIGNvdW50IG9mIG1hdGNoZWQgZWRnZXMgb24gYm90aCBpbWFnZXMuXG4gKiBJdCBpcyBlcXVhbCB0byBgY291bnRgIGlmIGBnb29kTWF0Y2hlc0ZhY3RvcmAgZG9lcyBub3QgbGltaXQgdGhlIG1hdGNoZXMsXG4gKiBvdGhlcndpc2UgaXQgY29udGFpbnMgdGhlIHRvdGFsIGNvdW50IG9mIG1hdGNoZXMgYmVmb3JlIGBnb29kTWF0Y2hlc0ZhY3RvcmAgaXNcbiAqIGFwcGxpZWQuXG4gKiBAcHJvcGVydHkgez9CdWZmZXJ9IHZpc3VhbGl6YXRpb24gVGhlIHZpc3VhbGl6YXRpb24gb2YgdGhlIG1hdGNoaW5nIHJlc3VsdFxuICogcmVwcmVzZW50ZWQgYXMgUE5HIGltYWdlIGJ1ZmZlci4gVGhpcyB2aXN1YWxpemF0aW9uIGxvb2tzIGxpa2VcbiAqIGh0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzMxMTI1NTIxLzI5NzAyNzMxLWM3OWUzMTQyLTg5NzItMTFlNy05NDdlLWRiMTA5ZDQxNTQ2OS5qcGdcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8UG9pbnQ+fSBwb2ludHMxIFRoZSBhcnJheSBvZiBtYXRjaGluZyBwb2ludHMgb24gdGhlIGZpcnN0IGltYWdlXG4gKiBAcHJvcGVydHkge1JlY3R9IHJlY3QxIFRoZSBib3VuZGluZyByZWN0IGZvciB0aGUgYG1hdGNoZWRQb2ludHMxYCBzZXQgb3IgYSB6ZXJvIHJlY3RcbiAqIGlmIG5vdCBlbm91Z2ggbWF0Y2hpbmcgcG9pbnRzIGFyZSBmb3VuZFxuICogQHByb3BlcnR5IHtBcnJheTxQb2ludD59IHBvaW50czIgVGhlIGFycmF5IG9mIG1hdGNoaW5nIHBvaW50cyBvbiB0aGUgc2Vjb25kIGltYWdlXG4gKiBAcHJvcGVydHkge1JlY3R9IHJlY3QyIFRoZSBib3VuZGluZyByZWN0IGZvciB0aGUgYG1hdGNoZWRQb2ludHMyYCBzZXQgb3IgYSB6ZXJvIHJlY3RcbiAqIGlmIG5vdCBlbm91Z2ggbWF0Y2hpbmcgcG9pbnRzIGFyZSBmb3VuZFxuICovXG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgY291bnQgb2YgY29tbW9uIGVkZ2VzIGJldHdlZW4gdHdvIGltYWdlcy5cbiAqIFRoZSBpbWFnZXMgbWlnaHQgYmUgcm90YXRlZCBvciByZXNpemVkIHJlbGF0aXZlbHkgdG8gZWFjaCBvdGhlci5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gaW1nMURhdGEgVGhlIGRhdGEgb2YgdGhlIGZpcnN0IGltYWdlIHBhY2tlZCBpbnRvIGEgTm9kZUpTIGJ1ZmZlclxuICogQHBhcmFtIHtCdWZmZXJ9IGltZzJEYXRhIFRoZSBkYXRhIG9mIHRoZSBzZWNvbmQgaW1hZ2UgcGFja2VkIGludG8gYSBOb2RlSlMgYnVmZmVyXG4gKiBAcGFyYW0gez9NYXRjaGluZ09wdGlvbnN9IG9wdGlvbnMgW3t9XSBTZXQgb2YgbWF0Y2hpbmcgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtNYXRjaGluZ1Jlc3VsdH0gTWFjaGluZyByZXN1bHRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBgZGV0ZWN0b3JOYW1lYCB2YWx1ZSBpcyB1bmtub3duLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRJbWFnZXNNYXRjaGVzIChpbWcxRGF0YSwgaW1nMkRhdGEsIG9wdGlvbnMgPSB7fSkge1xuICBpbml0T3BlbkNWKCk7XG5cbiAgY29uc3Qge2RldGVjdG9yTmFtZSA9ICdPUkInLCB2aXN1YWxpemUgPSBmYWxzZSxcbiAgICAgICAgIGdvb2RNYXRjaGVzRmFjdG9yLCBtYXRjaEZ1bmMgPSAnQnJ1dGVGb3JjZSd9ID0gb3B0aW9ucztcbiAgaWYgKCFfLmluY2x1ZGVzKEFWQUlMQUJMRV9ERVRFQ1RPUlMsIGRldGVjdG9yTmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2RldGVjdG9yTmFtZX0nIGRldGVjdG9yIGlzIHVua25vd24uIGAgK1xuICAgICAgICAgICAgICAgICAgICBgT25seSAke0pTT04uc3RyaW5naWZ5KEFWQUlMQUJMRV9ERVRFQ1RPUlMpfSBkZXRlY3RvcnMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICBpZiAoIV8uaW5jbHVkZXMoQVZBSUxBQkxFX01BVENISU5HX0ZVTkNUSU9OUywgbWF0Y2hGdW5jKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJyR7bWF0Y2hGdW5jfScgbWF0Y2hpbmcgZnVuY3Rpb24gaXMgdW5rbm93bi4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBPbmx5ICR7SlNPTi5zdHJpbmdpZnkoQVZBSUxBQkxFX01BVENISU5HX0ZVTkNUSU9OUyl9IG1hdGNoaW5nIGZ1bmN0aW9ucyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG5cbiAgY29uc3QgZGV0ZWN0b3IgPSBuZXcgY3ZbYCR7ZGV0ZWN0b3JOYW1lfURldGVjdG9yYF0oKTtcbiAgY29uc3QgW2ltZzEsIGltZzJdID0gYXdhaXQgQi5hbGwoW1xuICAgIGN2LmltZGVjb2RlQXN5bmMoaW1nMURhdGEpLFxuICAgIGN2LmltZGVjb2RlQXN5bmMoaW1nMkRhdGEpXG4gIF0pO1xuICBjb25zdCBbcmVzdWx0MSwgcmVzdWx0Ml0gPSBhd2FpdCBCLmFsbChbXG4gICAgZGV0ZWN0QW5kQ29tcHV0ZShpbWcxLCBkZXRlY3RvciksXG4gICAgZGV0ZWN0QW5kQ29tcHV0ZShpbWcyLCBkZXRlY3RvcilcbiAgXSk7XG4gIGxldCBtYXRjaGVzID0gW107XG4gIHRyeSB7XG4gICAgbWF0Y2hlcyA9IGF3YWl0IGN2W2BtYXRjaCR7bWF0Y2hGdW5jfUFzeW5jYF0ocmVzdWx0MS5kZXNjcmlwdG9yLCByZXN1bHQyLmRlc2NyaXB0b3IpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBhbnkgbWF0Y2hlcyBiZXR3ZWVuIHRoZSBnaXZlbiBpbWFnZXMuIFRyeSBhbm90aGVyIGRldGVjdGlvbiBhbGdvcml0aG0uIGAgK1xuICAgICAgICAgICAgICAgICAgICBgIE9yaWdpbmFsIGVycm9yOiAke2V9YCk7XG4gIH1cbiAgY29uc3QgdG90YWxDb3VudCA9IG1hdGNoZXMubGVuZ3RoO1xuICBpZiAoaGFzVmFsdWUoZ29vZE1hdGNoZXNGYWN0b3IpKSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihnb29kTWF0Y2hlc0ZhY3RvcikpIHtcbiAgICAgIGNvbnN0IGRpc3RhbmNlcyA9IG1hdGNoZXMubWFwKG1hdGNoID0+IG1hdGNoLmRpc3RhbmNlKTtcbiAgICAgIGNvbnN0IG1pbkRpc3RhbmNlID0gXy5taW4oZGlzdGFuY2VzKTtcbiAgICAgIGNvbnN0IG1heERpc3RhbmNlID0gXy5tYXgoZGlzdGFuY2VzKTtcbiAgICAgIG1hdGNoZXMgPSBtYXRjaGVzXG4gICAgICAgIC5maWx0ZXIobWF0Y2ggPT4gZ29vZE1hdGNoZXNGYWN0b3IobWF0Y2guZGlzdGFuY2UsIG1pbkRpc3RhbmNlLCBtYXhEaXN0YW5jZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiBnb29kTWF0Y2hlc0ZhY3Rvcikge1xuICAgICAgICBtYXRjaGVzID0gbWF0Y2hlc1xuICAgICAgICAgIC5zb3J0KChtYXRjaDEsIG1hdGNoMikgPT4gbWF0Y2gxLmRpc3RhbmNlIC0gbWF0Y2gyLmRpc3RhbmNlKVxuICAgICAgICAgIC5zbGljZSgwLCBnb29kTWF0Y2hlc0ZhY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcG9pbnRzMSA9IG1hdGNoZXMubWFwKG1hdGNoID0+IHJlc3VsdDEua2V5UG9pbnRzW21hdGNoLnF1ZXJ5SWR4XS5wb2ludCk7XG4gIGNvbnN0IHJlY3QxID0gY2FsY3VsYXRlTWF0Y2hlZFJlY3QocG9pbnRzMSk7XG4gIGNvbnN0IHBvaW50czIgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiByZXN1bHQyLmtleVBvaW50c1ttYXRjaC50cmFpbklkeF0ucG9pbnQpO1xuICBjb25zdCByZWN0MiA9IGNhbGN1bGF0ZU1hdGNoZWRSZWN0KHBvaW50czIpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBwb2ludHMxLFxuICAgIHJlY3QxLFxuICAgIHBvaW50czIsXG4gICAgcmVjdDIsXG4gICAgdG90YWxDb3VudCxcbiAgICBjb3VudDogbWF0Y2hlcy5sZW5ndGgsXG4gIH07XG4gIGlmICh2aXN1YWxpemUpIHtcbiAgICBjb25zdCB2aXN1YWxpemF0aW9uID0gY3YuZHJhd01hdGNoZXMoaW1nMSwgaW1nMiwgcmVzdWx0MS5rZXlQb2ludHMsIHJlc3VsdDIua2V5UG9pbnRzLCBtYXRjaGVzKTtcbiAgICBoaWdobGlnaHRSZWdpb24odmlzdWFsaXphdGlvbiwgcmVjdDEpO1xuICAgIGhpZ2hsaWdodFJlZ2lvbih2aXN1YWxpemF0aW9uLCB7XG4gICAgICB4OiBpbWcxLmNvbHMgKyByZWN0Mi54LFxuICAgICAgeTogcmVjdDIueSxcbiAgICAgIHdpZHRoOiByZWN0Mi53aWR0aCxcbiAgICAgIGhlaWdodDogcmVjdDIuaGVpZ2h0XG4gICAgfSk7XG4gICAgcmVzdWx0LnZpc3VhbGl6YXRpb24gPSBhd2FpdCBjdi5pbWVuY29kZUFzeW5jKCcucG5nJywgdmlzdWFsaXphdGlvbik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTaW1pbGFyaXR5T3B0aW9uc1xuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gdmlzdWFsaXplIFtmYWxzZV0gV2hldGhlciB0byByZXR1cm4gdGhlIHJlc3VsdGluZyB2aXNhbGl6YXRpb25cbiAqIGFzIGFuIGltYWdlICh1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcylcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNpbWlsYXJpdHlSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzY29yZSBUaGUgc2ltaWxhcml0eSBzY29yZSBhcyBhIGZsb2F0IG51bWJlciBpbiByYW5nZSBbMC4wLCAxLjBdLlxuICogMS4wIGlzIHRoZSBoaWdoZXN0IHNjb3JlIChtZWFucyBib3RoIGltYWdlcyBhcmUgdG90YWxseSBlcXVhbCkuXG4gKiBAcHJvcGVydHkgez9CdWZmZXJ9IHZpc3VhbGl6YXRpb24gVGhlIHZpc3VhbGl6YXRpb24gb2YgdGhlIG1hdGNoaW5nIHJlc3VsdFxuICogcmVwcmVzZW50ZWQgYXMgUE5HIGltYWdlIGJ1ZmZlci4gVGhpcyBpbWFnZSBpbmNsdWRlcyBib3RoIGlucHV0IHBpY3R1cmVzIHdoZXJlXG4gKiBkaWZmZXJlbmNlIHJlZ2lvbnMgYXJlIGhpZ2hsaWdodGVkIHdpdGggcmVjdGFuZ2xlcy5cbiAqL1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHNpbWlsYXJpdHkgc2NvcmUgYmV0d2VlbiB0d28gaW1hZ2VzLlxuICogSXQgaXMgZXhwZWN0ZWQsIHRoYXQgYm90aCBpbWFnZXMgaGF2ZSB0aGUgc2FtZSByZXNvbHV0aW9uLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBpbWcxRGF0YSBUaGUgZGF0YSBvZiB0aGUgZmlyc3QgaW1hZ2UgcGFja2VkIGludG8gYSBOb2RlSlMgYnVmZmVyXG4gKiBAcGFyYW0ge0J1ZmZlcn0gaW1nMkRhdGEgVGhlIGRhdGEgb2YgdGhlIHNlY29uZCBpbWFnZSBwYWNrZWQgaW50byBhIE5vZGVKUyBidWZmZXJcbiAqIEBwYXJhbSB7P1NpbWlsYXJpdHlPcHRpb25zfSBvcHRpb25zIFt7fV0gU2V0IG9mIHNpbWlsYXJpdHkgY2FsY3VsYXRpb24gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtTaW1pbGFyaXR5UmVzdWx0fSBUaGUgY2FsY3VsYXRpb24gcmVzdWx0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGdpdmVuIGltYWdlcyBoYXZlIGRpZmZlcmVudCByZXNvbHV0aW9uLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRJbWFnZXNTaW1pbGFyaXR5IChpbWcxRGF0YSwgaW1nMkRhdGEsIG9wdGlvbnMgPSB7fSkge1xuICBpbml0T3BlbkNWKCk7XG5cbiAgY29uc3Qge3Zpc3VhbGl6ZSA9IGZhbHNlfSA9IG9wdGlvbnM7XG4gIGxldCBbdGVtcGxhdGUsIHJlZmVyZW5jZV0gPSBhd2FpdCBCLmFsbChbXG4gICAgY3YuaW1kZWNvZGVBc3luYyhpbWcxRGF0YSksXG4gICAgY3YuaW1kZWNvZGVBc3luYyhpbWcyRGF0YSlcbiAgXSk7XG4gIGlmICh0ZW1wbGF0ZS5yb3dzICE9PSByZWZlcmVuY2Uucm93cyB8fCB0ZW1wbGF0ZS5jb2xzICE9PSByZWZlcmVuY2UuY29scykge1xuICAgIHRocm93IG5ldyBFcnJvcignQm90aCBpbWFnZXMgYXJlIGV4cGVjdGVkIHRvIGhhdmUgdGhlIHNhbWUgc2l6ZSBpbiBvcmRlciB0byAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2NhbGN1bGF0ZSB0aGUgc2ltaWxhcml0eSBzY29yZS4nKTtcbiAgfVxuICBbdGVtcGxhdGUsIHJlZmVyZW5jZV0gPSBhd2FpdCBCLmFsbChbXG4gICAgdGVtcGxhdGUuY29udmVydFRvQXN5bmMoY3YuQ1ZfOFVDMyksXG4gICAgcmVmZXJlbmNlLmNvbnZlcnRUb0FzeW5jKGN2LkNWXzhVQzMpXG4gIF0pO1xuXG4gIGNvbnN0IG1hdGNoZWQgPSBhd2FpdCByZWZlcmVuY2UubWF0Y2hUZW1wbGF0ZUFzeW5jKHRlbXBsYXRlLCBjdi5UTV9DQ09FRkZfTk9STUVEKTtcbiAgY29uc3QgbWluTWF4ID0gYXdhaXQgbWF0Y2hlZC5taW5NYXhMb2NBc3luYygpO1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgc2NvcmU6IG1pbk1heC5tYXhWYWxcbiAgfTtcbiAgaWYgKHZpc3VhbGl6ZSkge1xuICAgIGNvbnN0IHJlc3VsdE1hdCA9IG5ldyBjdi5NYXQodGVtcGxhdGUucm93cywgdGVtcGxhdGUuY29scyAqIDIsIGN2LkNWXzhVQzMpO1xuICAgIGF3YWl0IEIuYWxsKFtcbiAgICAgIHJlZmVyZW5jZS5jb3B5VG9Bc3luYyhcbiAgICAgICAgcmVzdWx0TWF0LmdldFJlZ2lvbihuZXcgY3YuUmVjdCgwLCAwLCByZWZlcmVuY2UuY29scywgcmVmZXJlbmNlLnJvd3MpKSksXG4gICAgICB0ZW1wbGF0ZS5jb3B5VG9Bc3luYyhcbiAgICAgICAgcmVzdWx0TWF0LmdldFJlZ2lvbihuZXcgY3YuUmVjdChyZWZlcmVuY2UuY29scywgMCwgdGVtcGxhdGUuY29scywgdGVtcGxhdGUucm93cykpKVxuICAgIF0pO1xuICAgIGxldCBtYXNrID0gcmVmZXJlbmNlLmFic2RpZmYodGVtcGxhdGUpO1xuICAgIG1hc2sgPSBhd2FpdCBtYXNrLmN2dENvbG9yQXN5bmMoY3YuQ09MT1JfQkdSMkdSQVkpO1xuICAgIGxldCBjb250b3VycyA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBtYXNrID0gYXdhaXQgbWFzay50aHJlc2hvbGRBc3luYygxMjgsIDI1NSwgY3YuVEhSRVNIX0JJTkFSWSB8IGN2LlRIUkVTSF9PVFNVKTtcbiAgICAgIGNvbnRvdXJzID0gYXdhaXQgbWFzay5maW5kQ29udG91cnNBc3luYyhjdi5SRVRSX0VYVEVSTkFMLCBjdi5DSEFJTl9BUFBST1hfU0lNUExFKTtcbiAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgIC8vIE5vIGNvbnRvdXJzIGNhbiBiZSBmb3VuZCwgd2hpY2ggbWVhbnMsIG1vc3QgbGlrZWx5LCB0aGF0IGltYWdlcyBhcmUgZXF1YWxcbiAgICB9XG4gICAgZm9yIChjb25zdCBjb250b3VyIG9mIGNvbnRvdXJzKSB7XG4gICAgICBjb25zdCBib3VuZGluZ1JlY3QgPSBjb250b3VyLmJvdW5kaW5nUmVjdCgpO1xuICAgICAgaGlnaGxpZ2h0UmVnaW9uKHJlc3VsdE1hdCwgYm91bmRpbmdSZWN0KTtcbiAgICAgIGhpZ2hsaWdodFJlZ2lvbihyZXN1bHRNYXQsIHtcbiAgICAgICAgeDogcmVmZXJlbmNlLmNvbHMgKyBib3VuZGluZ1JlY3QueCxcbiAgICAgICAgeTogYm91bmRpbmdSZWN0LnksXG4gICAgICAgIHdpZHRoOiBib3VuZGluZ1JlY3Qud2lkdGgsXG4gICAgICAgIGhlaWdodDogYm91bmRpbmdSZWN0LmhlaWdodFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJlc3VsdC52aXN1YWxpemF0aW9uID0gYXdhaXQgY3YuaW1lbmNvZGVBc3luYygnLnBuZycsIHJlc3VsdE1hdCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBPY2N1cnJlbmNlT3B0aW9uc1xuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gdmlzdWFsaXplIFtmYWxzZV0gV2hldGhlciB0byByZXR1cm4gdGhlIHJlc3VsdGluZyB2aXNhbGl6YXRpb25cbiAqIGFzIGFuIGltYWdlICh1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcylcbiAqIEBwcm9wZXJ0eSB7P2Zsb2F0fSB0aHJlc2hvbGQgWzAuNV0gQXQgd2hhdCBub3JtYWxpemVkIHRocmVzaG9sZCB0byByZWplY3RcbiAqIGEgbWF0Y2hcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE9jY3VycmVuY2VSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7UmVjdH0gcmVjdCBUaGUgcmVnaW9uIG9mIHRoZSBwYXJ0aWFsIGltYWdlIG9jY3VyZW5jZVxuICogb24gdGhlIGZ1bGwgaW1hZ2VcbiAqIEBwcm9wZXJ0eSB7P0J1ZmZlcn0gdmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiBvZiB0aGUgbWF0Y2hpbmcgcmVzdWx0XG4gKiByZXByZXNlbnRlZCBhcyBQTkcgaW1hZ2UgYnVmZmVyLiBPbiB0aGlzIGltYWdlIHRoZSBtYXRjaGluZ1xuICogcmVnaW9uIGlzIGhpZ2hsaWdodGVkIHdpdGggYSByZWN0YW5nbGUuXG4gKi9cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBvY2N1cmVuY2UgcG9zaXRpb24gb2YgYSBwYXJ0aWFsIGltYWdlIGluIHRoZSBmdWxsXG4gKiBpbWFnZS5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gZnVsbEltZ0RhdGEgVGhlIGRhdGEgb2YgdGhlIGZ1bGwgaW1hZ2UgcGFja2VkIGludG8gYSBOb2RlSlMgYnVmZmVyXG4gKiBAcGFyYW0ge0J1ZmZlcn0gcGFydGlhbEltZ0RhdGEgVGhlIGRhdGEgb2YgdGhlIHBhcnRpYWwgaW1hZ2UgcGFja2VkIGludG8gYSBOb2RlSlMgYnVmZmVyXG4gKiBAcGFyYW0gez9PY2N1cnJlbmNlT3B0aW9uc30gb3B0aW9ucyBbe31dIFNldCBvZiBvY2N1cnJlbmNlIGNhbGN1bGF0aW9uIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7T2NjdXJyZW5jZVJlc3VsdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBubyBvY2N1cmVuY2VzIG9mIHRoZSBwYXJ0aWFsIGltYWdlIGNhbiBiZSBmb3VuZCBpbiB0aGUgZnVsbCBpbWFnZVxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRJbWFnZU9jY3VycmVuY2UgKGZ1bGxJbWdEYXRhLCBwYXJ0aWFsSW1nRGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gIGluaXRPcGVuQ1YoKTtcblxuICBjb25zdCB7dmlzdWFsaXplID0gZmFsc2UsIHRocmVzaG9sZCA9IERFRkFVTFRfTUFUQ0hfVEhSRVNIT0xEfSA9IG9wdGlvbnM7XG4gIGNvbnN0IFtmdWxsSW1nLCBwYXJ0aWFsSW1nXSA9IGF3YWl0IEIuYWxsKFtcbiAgICBjdi5pbWRlY29kZUFzeW5jKGZ1bGxJbWdEYXRhKSxcbiAgICBjdi5pbWRlY29kZUFzeW5jKHBhcnRpYWxJbWdEYXRhKVxuICBdKTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIHRyeSB7XG4gICAgY29uc3QgbWF0Y2hlZCA9IGF3YWl0IGZ1bGxJbWcubWF0Y2hUZW1wbGF0ZUFzeW5jKHBhcnRpYWxJbWcsIGN2LlRNX0NDT0VGRl9OT1JNRUQpO1xuICAgIGNvbnN0IG1pbk1heCA9IGF3YWl0IG1hdGNoZWQubWluTWF4TG9jQXN5bmMoKTtcbiAgICBpZiAobWluTWF4Lm1heFZhbCA8IHRocmVzaG9sZCkge1xuICAgICAgLy8gQmVsb3cgZXJyb3IgbWVzc2FnZSwgYENhbm5vdCBmaW5kIGFueSBvY2N1cnJlbmNlc2AgaXMgcmVmZXJlbmNlZCBpbiBmaW5kIGJ5IGltYWdlXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIGFueSBvY2N1cnJlbmNlcyBvZiB0aGUgcGFydGlhbCBpbWFnZSBpbiB0aGUgZnVsbCBgICtcbiAgICAgICAgICAgICAgICAgICAgICBgaW1hZ2UgYWJvdmUgdGhlIHRocmVzaG9sZCBvZiAke3RocmVzaG9sZH0uIEhpZ2hlc3QgbWF0Y2ggdmFsdWUgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYGZvdW5kIHdhcyAke21pbk1heC5tYXhWYWx9YCk7XG4gICAgfVxuICAgIHJlc3VsdC5yZWN0ID0ge1xuICAgICAgeDogbWluTWF4Lm1heExvYy54LFxuICAgICAgeTogbWluTWF4Lm1heExvYy55LFxuICAgICAgd2lkdGg6IHBhcnRpYWxJbWcuY29scyxcbiAgICAgIGhlaWdodDogcGFydGlhbEltZy5yb3dzXG4gICAgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIEJlbG93IGVycm9yIG1lc3NhZ2UsIGBDYW5ub3QgZmluZCBhbnkgb2NjdXJyZW5jZXNgIGlzIHJlZmVyZW5jZWQgaW4gZmluZCBieSBpbWFnZVxuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgYW55IG9jY3VycmVuY2VzIG9mIHRoZSBwYXJ0aWFsIGltYWdlIGluIHRoZSBmdWxsIGltYWdlLiBgICtcbiAgICAgICAgICAgICAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2V9YCk7XG4gIH1cbiAgaWYgKHZpc3VhbGl6ZSkge1xuICAgIGhpZ2hsaWdodFJlZ2lvbihmdWxsSW1nLCByZXN1bHQucmVjdCk7XG4gICAgcmVzdWx0LnZpc3VhbGl6YXRpb24gPSBhd2FpdCBjdi5pbWVuY29kZUFzeW5jKCcucG5nJywgZnVsbEltZyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDcm9wIHRoZSBpbWFnZSBieSBnaXZlbiByZWN0YW5nbGUgKHVzZSBiYXNlNjQgc3RyaW5nIGFzIGlucHV0IGFuZCBvdXRwdXQpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NEltYWdlIFRoZSBzdHJpbmcgd2l0aCBiYXNlNjQgZW5jb2RlZCBpbWFnZVxuICogQHBhcmFtIHtSZWdpb259IHJlY3QgVGhlIHNlbGVjdGVkIHJlZ2lvbiBvZiBpbWFnZVxuICogQHJldHVybiB7c3RyaW5nfSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgY3JvcHBlZCBpbWFnZVxuICovXG5hc3luYyBmdW5jdGlvbiBjcm9wQmFzZTY0SW1hZ2UgKGJhc2U2NEltYWdlLCByZWN0KSB7XG4gIGNvbnN0IGltYWdlID0gYXdhaXQgYmFzZTY0VG9JbWFnZShiYXNlNjRJbWFnZSk7XG4gIGNyb3BJbWFnZShpbWFnZSwgcmVjdCk7XG4gIHJldHVybiBhd2FpdCBpbWFnZVRvQmFzZTY0KGltYWdlKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwbmdqcyBpbWFnZSBmcm9tIGdpdmVuIGJhc2U2NCBpbWFnZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjRJbWFnZSBUaGUgc3RyaW5nIHdpdGggYmFzZTY0IGVuY29kZWQgaW1hZ2VcbiAqIEByZXR1cm4ge1BOR30gVGhlIGltYWdlIG9iamVjdFxuICovXG5hc3luYyBmdW5jdGlvbiBiYXNlNjRUb0ltYWdlIChiYXNlNjRJbWFnZSkge1xuICBjb25zdCBpbWFnZUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGJhc2U2NEltYWdlLCAnYmFzZTY0Jyk7XG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgaW1hZ2UgPSBuZXcgUE5HKHtmaWx0ZXJUeXBlOiBTQ0FOTElORV9GSUxURVJfTUVUSE9EfSk7XG4gICAgaW1hZ2UucGFyc2UoaW1hZ2VCdWZmZXIsIChlcnIsIGltYWdlKSA9PiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tY2FsbGJhY2tzXG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoaW1hZ2UpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBiYXNlNjQgc3RyaW5nIGZvciBnaXZlbiBpbWFnZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge1BOR30gaW1hZ2UgVGhlIGltYWdlIG9iamVjdFxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5nIHdpdGggYmFzZTY0IGVuY29kZWQgaW1hZ2VcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW1hZ2VUb0Jhc2U2NCAoaW1hZ2UpIHtcbiAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICBpbWFnZS5wYWNrKClcbiAgICAub24oJ2RhdGEnLCAoY2h1bmspID0+IGNodW5rcy5wdXNoKGNodW5rKSkub24oJ2VuZCcsICgpID0+IHtcbiAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChjaHVua3MpLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgfSlcbiAgICAub24oJ2Vycm9yJywgKGVycikgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLWNhbGxiYWNrc1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENyb3AgdGhlIGltYWdlIGJ5IGdpdmVuIHJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB7UE5HfSBpbWFnZSBUaGUgaW1hZ2UgdG8gbXV0YXRlIGJ5IGNyb3BwaW5nXG4gKiBAcGFyYW0ge1JlZ2lvbn0gcmVjdCBUaGUgc2VsZWN0ZWQgcmVnaW9uIG9mIGltYWdlXG4gKi9cbmZ1bmN0aW9uIGNyb3BJbWFnZSAoaW1hZ2UsIHJlY3QpIHtcbiAgY29uc3QgaW1hZ2VSZWN0ID0ge3dpZHRoOiBpbWFnZS53aWR0aCwgaGVpZ2h0OiBpbWFnZS5oZWlnaHR9O1xuICBjb25zdCBpbnRlclJlY3QgPSBnZXRSZWN0SW50ZXJzZWN0aW9uKHJlY3QsIGltYWdlUmVjdCk7XG4gIGlmIChpbnRlclJlY3Qud2lkdGggPCByZWN0LndpZHRoIHx8IGludGVyUmVjdC5oZWlnaHQgPCByZWN0LmhlaWdodCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNyb3AgJHtKU09OLnN0cmluZ2lmeShyZWN0KX0gZnJvbSAke0pTT04uc3RyaW5naWZ5KGltYWdlUmVjdCl9IGJlY2F1c2UgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZW0gd2FzIG5vdCB0aGUgc2l6ZSBvZiB0aGUgcmVjdGApO1xuICB9XG5cbiAgY29uc3QgZmlyc3RWZXJ0aWNhbFBpeGVsID0gaW50ZXJSZWN0LnRvcDtcbiAgY29uc3QgbGFzdFZlcnRpY2FsUGl4ZWwgPSBpbnRlclJlY3QudG9wICsgaW50ZXJSZWN0LmhlaWdodDtcblxuICBjb25zdCBmaXJzdEhvcml6b250YWxQaXhlbCA9IGludGVyUmVjdC5sZWZ0O1xuICBjb25zdCBsYXN0SG9yaXpvbnRhbFBpeGVsID0gaW50ZXJSZWN0LmxlZnQgKyBpbnRlclJlY3Qud2lkdGg7XG5cbiAgY29uc3QgY3JvcHBlZEFycmF5ID0gW107XG4gIGZvciAobGV0IHkgPSBmaXJzdFZlcnRpY2FsUGl4ZWw7IHkgPCBsYXN0VmVydGljYWxQaXhlbDsgeSsrKSB7XG4gICAgZm9yIChsZXQgeCA9IGZpcnN0SG9yaXpvbnRhbFBpeGVsOyB4IDwgbGFzdEhvcml6b250YWxQaXhlbDsgeCsrKSB7XG4gICAgICBjb25zdCBmaXJzdEJ5dGVJZHhJblBpeGVsQmxvY2sgPSAoaW1hZ2VSZWN0LndpZHRoICogeSArIHgpIDw8IDI7XG4gICAgICBmb3IgKGxldCBieXRlSWR4ID0gMDsgYnl0ZUlkeCA8IEJZVEVTX0lOX1BJWEVMX0JMT0NLOyBieXRlSWR4KyspIHtcbiAgICAgICAgY3JvcHBlZEFycmF5LnB1c2goaW1hZ2UuZGF0YVtmaXJzdEJ5dGVJZHhJblBpeGVsQmxvY2sgKyBieXRlSWR4XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaW1hZ2UuZGF0YSA9IEJ1ZmZlci5mcm9tKGNyb3BwZWRBcnJheSk7XG4gIGltYWdlLndpZHRoID0gaW50ZXJSZWN0LndpZHRoO1xuICBpbWFnZS5oZWlnaHQgPSBpbnRlclJlY3QuaGVpZ2h0O1xuICByZXR1cm4gaW1hZ2U7XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RJbnRlcnNlY3Rpb24gKHJlY3QsIGltYWdlU2l6ZSkge1xuICBjb25zdCBsZWZ0ID0gcmVjdC5sZWZ0ID49IGltYWdlU2l6ZS53aWR0aCA/IGltYWdlU2l6ZS53aWR0aCA6IHJlY3QubGVmdDtcbiAgY29uc3QgdG9wID0gcmVjdC50b3AgPj0gaW1hZ2VTaXplLmhlaWdodCA/IGltYWdlU2l6ZS5oZWlnaHQgOiByZWN0LnRvcDtcbiAgY29uc3Qgd2lkdGggPSBpbWFnZVNpemUud2lkdGggPj0gKGxlZnQgKyByZWN0LndpZHRoKSA/IHJlY3Qud2lkdGggOiAoaW1hZ2VTaXplLndpZHRoIC0gbGVmdCk7XG4gIGNvbnN0IGhlaWdodCA9IGltYWdlU2l6ZS5oZWlnaHQgPj0gKHRvcCArIHJlY3QuaGVpZ2h0KSA/IHJlY3QuaGVpZ2h0IDogKGltYWdlU2l6ZS5oZWlnaHQgLSB0b3ApO1xuICByZXR1cm4ge2xlZnQsIHRvcCwgd2lkdGgsIGhlaWdodH07XG59XG5cbmV4cG9ydCB7XG4gIGNyb3BCYXNlNjRJbWFnZSwgYmFzZTY0VG9JbWFnZSwgaW1hZ2VUb0Jhc2U2NCwgY3JvcEltYWdlLCBnZXRJbWFnZXNNYXRjaGVzLFxuICBnZXRJbWFnZXNTaW1pbGFyaXR5LCBnZXRJbWFnZU9jY3VycmVuY2UsIGdldEppbXBJbWFnZSwgTUlNRV9KUEVHLCBNSU1FX1BORyxcbiAgTUlNRV9CTVAsXG59O1xuIl0sImZpbGUiOiJsaWIvaW1hZ2UtdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9

@@ -69,2 +69,10 @@ // jshint ignore: start

const syncFunctions = [
'createReadStream',
'createWriteStream',
];
for (const s of syncFunctions) {
fs[s] = _fs[s];
}
// add the constants from `fs`

@@ -71,0 +79,0 @@ const constants = [

@@ -432,2 +432,3 @@ import _ from 'lodash';

if (minMax.maxVal < threshold) {
// Below error message, `Cannot find any occurrences` is referenced in find by image
throw new Error(`Cannot find any occurrences of the partial image in the full ` +

@@ -444,3 +445,4 @@ `image above the threshold of ${threshold}. Highest match value ` +

} catch (e) {
throw new Error(`Cannot find any occurences of the partial image in the full image. ` +
// Below error message, `Cannot find any occurrences` is referenced in find by image
throw new Error(`Cannot find any occurrences of the partial image in the full image. ` +
`Original error: ${e}`);

@@ -447,0 +449,0 @@ }

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

],
"version": "2.28.0",
"version": "2.29.0",
"author": "appium",

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

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc