UNPKG

@meteor-community/meteor-desktop

Version:
119 lines (110 loc) 14.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _runtime = _interopRequireDefault(require("regenerator-runtime/runtime")); var _fs = _interopRequireDefault(require("fs")); var _del = _interopRequireDefault(require("del")); var _shelljs = _interopRequireDefault(require("shelljs")); var _path = _interopRequireDefault(require("path")); var _log = _interopRequireDefault(require("./log")); var _skeletonDependencies = _interopRequireDefault(require("./skeletonDependencies")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } // eslint-disable-next-line no-unused-vars const { join } = _path.default; _shelljs.default.config.fatal = true; /** * Represents the .desktop dir scaffold. */ class ElectronAppScaffold { /** * @param {MeteorDesktop} $ - context * @constructor */ constructor($) { this.log = new _log.default('electronAppScaffold'); this.$ = $; this.packageJson = { name: 'MyMeteorApp', main: this.$.env.isProductionBuild() ? 'app.asar/index.js' : 'app/index.js', dependencies: Object.assign({}, _skeletonDependencies.default) }; if (!this.$.env.isProductionBuild() || this.$.env.options.prodDebug) { this.packageJson.dependencies['electron-debug'] = '1.5.0'; } } /** * Just a public getter from the default package.json object. * @returns {Object} */ getDefaultPackageJson() { return Object.assign({}, this.packageJson); } /** * Clear the electron app. Removes everything except the node_modules which would be a waste * to delete. Later `npm prune` will keep it clear. */ clear() { if (!this.$.utils.exists(this.$.env.paths.electronApp.root)) { this.log.verbose(`creating ${this.$.env.paths.electronApp.rootName}`); _shelljs.default.mkdir(this.$.env.paths.electronApp.root); } return (0, _del.default)([`${this.$.env.paths.electronApp.root}${_path.default.sep}*`, `!${this.$.env.paths.electronApp.nodeModules}`], { force: true }); } /** * Just copies the Skeleton App into the electron app. */ copySkeletonApp() { this.log.verbose('copying skeleton app'); try { _shelljs.default.cp('-rf', join(this.$.env.paths.meteorDesktop.skeleton, '*'), this.$.env.paths.electronApp.appRoot + _path.default.sep); } catch (e) { this.log.error('error while copying skeleton app:', e); process.exit(1); } } /** * After clearing the electron app path, copies a fresh skeleton. */ async make() { try { this.log.verbose(`clearing ${this.$.env.paths.electronApp.rootName}`); await this.clear(); } catch (e) { this.log.error(`error while removing ${this.$.env.paths.electronApp.root}: `, e); process.exit(1); } this.createAppRoot(); this.copySkeletonApp(); // TODO: hey, wait, .gitignore is not needed - right? /* this.log.debug('creating .gitignore'); fs.writeFileSync(this.$.env.paths.electronApp.gitIgnore, [ 'node_modules' ].join('\n')); */ this.log.verbose('writing package.json'); _fs.default.writeFileSync(this.$.env.paths.electronApp.packageJson, JSON.stringify(this.packageJson, null, 2)); } /** * Creates the app directory in the electron app. */ createAppRoot() { try { this.log.verbose(`creating ${this.$.env.paths.electronApp.appRoot}`); _fs.default.mkdirSync(this.$.env.paths.electronApp.appRoot); } catch (e) { if (e.code !== 'EEXIST') { this.log.error(`error while creating dir: ${this.$.env.paths.electronApp.appRoot}: `, e); process.exit(1); } } } } exports.default = ElectronAppScaffold; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcnVudGltZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2ZzIiwiX2RlbCIsIl9zaGVsbGpzIiwiX3BhdGgiLCJfbG9nIiwiX3NrZWxldG9uRGVwZW5kZW5jaWVzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwiam9pbiIsInBhdGgiLCJzaGVsbCIsImNvbmZpZyIsImZhdGFsIiwiRWxlY3Ryb25BcHBTY2FmZm9sZCIsImNvbnN0cnVjdG9yIiwiJCIsImxvZyIsIkxvZyIsInBhY2thZ2VKc29uIiwibmFtZSIsIm1haW4iLCJlbnYiLCJpc1Byb2R1Y3Rpb25CdWlsZCIsImRlcGVuZGVuY2llcyIsIk9iamVjdCIsImFzc2lnbiIsIm9wdGlvbnMiLCJwcm9kRGVidWciLCJnZXREZWZhdWx0UGFja2FnZUpzb24iLCJjbGVhciIsInV0aWxzIiwiZXhpc3RzIiwicGF0aHMiLCJlbGVjdHJvbkFwcCIsInJvb3QiLCJ2ZXJib3NlIiwicm9vdE5hbWUiLCJta2RpciIsImRlbCIsInNlcCIsIm5vZGVNb2R1bGVzIiwiZm9yY2UiLCJjb3B5U2tlbGV0b25BcHAiLCJjcCIsIm1ldGVvckRlc2t0b3AiLCJza2VsZXRvbiIsImFwcFJvb3QiLCJlcnJvciIsInByb2Nlc3MiLCJleGl0IiwibWFrZSIsImNyZWF0ZUFwcFJvb3QiLCJmcyIsIndyaXRlRmlsZVN5bmMiLCJKU09OIiwic3RyaW5naWZ5IiwibWtkaXJTeW5jIiwiY29kZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi9saWIvZWxlY3Ryb25BcHBTY2FmZm9sZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbmltcG9ydCByZWdlbmVyYXRvclJ1bnRpbWUgZnJvbSAncmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgZGVsIGZyb20gJ2RlbCc7XG5pbXBvcnQgc2hlbGwgZnJvbSAnc2hlbGxqcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IExvZyBmcm9tICcuL2xvZyc7XG5pbXBvcnQgZGVwZW5kZW5jaWVzIGZyb20gJy4vc2tlbGV0b25EZXBlbmRlbmNpZXMnO1xuXG5jb25zdCB7IGpvaW4gfSA9IHBhdGg7XG5zaGVsbC5jb25maWcuZmF0YWwgPSB0cnVlO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIC5kZXNrdG9wIGRpciBzY2FmZm9sZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWxlY3Ryb25BcHBTY2FmZm9sZCB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtNZXRlb3JEZXNrdG9wfSAkIC0gY29udGV4dFxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCQpIHtcbiAgICAgICAgdGhpcy5sb2cgPSBuZXcgTG9nKCdlbGVjdHJvbkFwcFNjYWZmb2xkJyk7XG4gICAgICAgIHRoaXMuJCA9ICQ7XG5cbiAgICAgICAgdGhpcy5wYWNrYWdlSnNvbiA9IHtcbiAgICAgICAgICAgIG5hbWU6ICdNeU1ldGVvckFwcCcsXG4gICAgICAgICAgICBtYWluOiAodGhpcy4kLmVudi5pc1Byb2R1Y3Rpb25CdWlsZCgpKSA/XG4gICAgICAgICAgICAgICAgJ2FwcC5hc2FyL2luZGV4LmpzJyA6ICdhcHAvaW5kZXguanMnLFxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiBPYmplY3QuYXNzaWduKHt9LCBkZXBlbmRlbmNpZXMpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKCF0aGlzLiQuZW52LmlzUHJvZHVjdGlvbkJ1aWxkKCkgfHwgdGhpcy4kLmVudi5vcHRpb25zLnByb2REZWJ1Zykge1xuICAgICAgICAgICAgdGhpcy5wYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXNbJ2VsZWN0cm9uLWRlYnVnJ10gPSAnMS41LjAnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSnVzdCBhIHB1YmxpYyBnZXR0ZXIgZnJvbSB0aGUgZGVmYXVsdCBwYWNrYWdlLmpzb24gb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgICovXG4gICAgZ2V0RGVmYXVsdFBhY2thZ2VKc29uKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wYWNrYWdlSnNvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgdGhlIGVsZWN0cm9uIGFwcC4gUmVtb3ZlcyBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgbm9kZV9tb2R1bGVzIHdoaWNoIHdvdWxkIGJlIGEgd2FzdGVcbiAgICAgKiB0byBkZWxldGUuIExhdGVyIGBucG0gcHJ1bmVgIHdpbGwga2VlcCBpdCBjbGVhci5cbiAgICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLiQudXRpbHMuZXhpc3RzKHRoaXMuJC5lbnYucGF0aHMuZWxlY3Ryb25BcHAucm9vdCkpIHtcbiAgICAgICAgICAgIHRoaXMubG9nLnZlcmJvc2UoYGNyZWF0aW5nICR7dGhpcy4kLmVudi5wYXRocy5lbGVjdHJvbkFwcC5yb290TmFtZX1gKTtcbiAgICAgICAgICAgIHNoZWxsLm1rZGlyKHRoaXMuJC5lbnYucGF0aHMuZWxlY3Ryb25BcHAucm9vdCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVsKFtcbiAgICAgICAgICAgIGAke3RoaXMuJC5lbnYucGF0aHMuZWxlY3Ryb25BcHAucm9vdH0ke3BhdGguc2VwfSpgLFxuICAgICAgICAgICAgYCEke3RoaXMuJC5lbnYucGF0aHMuZWxlY3Ryb25BcHAubm9kZU1vZHVsZXN9YFxuICAgICAgICBdLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEp1c3QgY29waWVzIHRoZSBTa2VsZXRvbiBBcHAgaW50byB0aGUgZWxlY3Ryb24gYXBwLlxuICAgICAqL1xuICAgIGNvcHlTa2VsZXRvbkFwcCgpIHtcbiAgICAgICAgdGhpcy5sb2cudmVyYm9zZSgnY29weWluZyBza2VsZXRvbiBhcHAnKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHNoZWxsLmNwKFxuICAgICAgICAgICAgICAgICctcmYnLFxuICAgICAgICAgICAgICAgIGpvaW4odGhpcy4kLmVudi5wYXRocy5tZXRlb3JEZXNrdG9wLnNrZWxldG9uLCAnKicpLFxuICAgICAgICAgICAgICAgIHRoaXMuJC5lbnYucGF0aHMuZWxlY3Ryb25BcHAuYXBwUm9vdCArIHBhdGguc2VwXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLmxvZy5lcnJvcignZXJyb3Igd2hpbGUgY29weWluZyBza2VsZXRvbiBhcHA6JywgZSk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZnRlciBjbGVhcmluZyB0aGUgZWxlY3Ryb24gYXBwIHBhdGgsIGNvcGllcyBhIGZyZXNoIHNrZWxldG9uLlxuICAgICAqL1xuICAgIGFzeW5jIG1ha2UoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmxvZy52ZXJib3NlKGBjbGVhcmluZyAke3RoaXMuJC5lbnYucGF0aHMuZWxlY3Ryb25BcHAucm9vdE5hbWV9YCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNsZWFyKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMubG9nLmVycm9yKFxuICAgICAgICAgICAgICAgIGBlcnJvciB3aGlsZSByZW1vdmluZyAke3RoaXMuJC5lbnYucGF0aHMuZWxlY3Ryb25BcHAucm9vdH06IGAsIGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNyZWF0ZUFwcFJvb3QoKTtcblxuICAgICAgICB0aGlzLmNvcHlTa2VsZXRvbkFwcCgpO1xuXG4gICAgICAgIC8vIFRPRE86IGhleSwgd2FpdCwgLmdpdGlnbm9yZSBpcyBub3QgbmVlZGVkIC0gcmlnaHQ/XG4gICAgICAgIC8qXG4gICAgICAgIHRoaXMubG9nLmRlYnVnKCdjcmVhdGluZyAuZ2l0aWdub3JlJyk7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy4kLmVudi5wYXRocy5lbGVjdHJvbkFwcC5naXRJZ25vcmUsIFtcbiAgICAgICAgICAgICdub2RlX21vZHVsZXMnXG4gICAgICAgIF0uam9pbignXFxuJykpO1xuICAgICAgICAqL1xuICAgICAgICB0aGlzLmxvZy52ZXJib3NlKCd3cml0aW5nIHBhY2thZ2UuanNvbicpO1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgdGhpcy4kLmVudi5wYXRocy5lbGVjdHJvbkFwcC5wYWNrYWdlSnNvbiwgSlNPTi5zdHJpbmdpZnkodGhpcy5wYWNrYWdlSnNvbiwgbnVsbCwgMilcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBhcHAgZGlyZWN0b3J5IGluIHRoZSBlbGVjdHJvbiBhcHAuXG4gICAgICovXG4gICAgY3JlYXRlQXBwUm9vdCgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMubG9nLnZlcmJvc2UoYGNyZWF0aW5nICR7dGhpcy4kLmVudi5wYXRocy5lbGVjdHJvbkFwcC5hcHBSb290fWApO1xuICAgICAgICAgICAgZnMubWtkaXJTeW5jKHRoaXMuJC5lbnYucGF0aHMuZWxlY3Ryb25BcHAuYXBwUm9vdCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlLmNvZGUgIT09ICdFRVhJU1QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2cuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBlcnJvciB3aGlsZSBjcmVhdGluZyBkaXI6ICR7dGhpcy4kLmVudi5wYXRocy5lbGVjdHJvbkFwcC5hcHBSb290fTogYCwgZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxHQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxJQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxRQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxLQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBSyxJQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxxQkFBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQWtELFNBQUFELHVCQUFBUSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBUmxEOztBQVVBLE1BQU07RUFBRUc7QUFBSyxDQUFDLEdBQUdDLGFBQUk7QUFDckJDLGdCQUFLLENBQUNDLE1BQU0sQ0FBQ0MsS0FBSyxHQUFHLElBQUk7O0FBRXpCO0FBQ0E7QUFDQTtBQUNlLE1BQU1DLG1CQUFtQixDQUFDO0VBQ3JDO0FBQ0o7QUFDQTtBQUNBO0VBQ0lDLFdBQVdBLENBQUNDLENBQUMsRUFBRTtJQUNYLElBQUksQ0FBQ0MsR0FBRyxHQUFHLElBQUlDLFlBQUcsQ0FBQyxxQkFBcUIsQ0FBQztJQUN6QyxJQUFJLENBQUNGLENBQUMsR0FBR0EsQ0FBQztJQUVWLElBQUksQ0FBQ0csV0FBVyxHQUFHO01BQ2ZDLElBQUksRUFBRSxhQUFhO01BQ25CQyxJQUFJLEVBQUcsSUFBSSxDQUFDTCxDQUFDLENBQUNNLEdBQUcsQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQyxHQUNqQyxtQkFBbUIsR0FBRyxjQUFjO01BQ3hDQyxZQUFZLEVBQUVDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFRiw2QkFBWTtJQUNoRCxDQUFDO0lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQ1IsQ0FBQyxDQUFDTSxHQUFHLENBQUNDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUNQLENBQUMsQ0FBQ00sR0FBRyxDQUFDSyxPQUFPLENBQUNDLFNBQVMsRUFBRTtNQUNqRSxJQUFJLENBQUNULFdBQVcsQ0FBQ0ssWUFBWSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsT0FBTztJQUM3RDtFQUNKOztFQUVBO0FBQ0o7QUFDQTtBQUNBO0VBQ0lLLHFCQUFxQkEsQ0FBQSxFQUFHO0lBQ3BCLE9BQU9KLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQ1AsV0FBVyxDQUFDO0VBQzlDOztFQUVBO0FBQ0o7QUFDQTtBQUNBO0VBQ0lXLEtBQUtBLENBQUEsRUFBRztJQUNKLElBQUksQ0FBQyxJQUFJLENBQUNkLENBQUMsQ0FBQ2UsS0FBSyxDQUFDQyxNQUFNLENBQUMsSUFBSSxDQUFDaEIsQ0FBQyxDQUFDTSxHQUFHLENBQUNXLEtBQUssQ0FBQ0MsV0FBVyxDQUFDQyxJQUFJLENBQUMsRUFBRTtNQUN6RCxJQUFJLENBQUNsQixHQUFHLENBQUNtQixPQUFPLENBQUMsWUFBWSxJQUFJLENBQUNwQixDQUFDLENBQUNNLEdBQUcsQ0FBQ1csS0FBSyxDQUFDQyxXQUFXLENBQUNHLFFBQVEsRUFBRSxDQUFDO01BQ3JFMUIsZ0JBQUssQ0FBQzJCLEtBQUssQ0FBQyxJQUFJLENBQUN0QixDQUFDLENBQUNNLEdBQUcsQ0FBQ1csS0FBSyxDQUFDQyxXQUFXLENBQUNDLElBQUksQ0FBQztJQUNsRDtJQUVBLE9BQU8sSUFBQUksWUFBRyxFQUFDLENBQ1AsR0FBRyxJQUFJLENBQUN2QixDQUFDLENBQUNNLEdBQUcsQ0FBQ1csS0FBSyxDQUFDQyxXQUFXLENBQUNDLElBQUksR0FBR3pCLGFBQUksQ0FBQzhCLEdBQUcsR0FBRyxFQUNsRCxJQUFJLElBQUksQ0FBQ3hCLENBQUMsQ0FBQ00sR0FBRyxDQUFDVyxLQUFLLENBQUNDLFdBQVcsQ0FBQ08sV0FBVyxFQUFFLENBQ2pELEVBQUU7TUFBRUMsS0FBSyxFQUFFO0lBQUssQ0FBQyxDQUFDO0VBQ3ZCOztFQUVBO0FBQ0o7QUFDQTtFQUNJQyxlQUFlQSxDQUFBLEVBQUc7SUFDZCxJQUFJLENBQUMxQixHQUFHLENBQUNtQixPQUFPLENBQUMsc0JBQXNCLENBQUM7SUFDeEMsSUFBSTtNQUNBekIsZ0JBQUssQ0FBQ2lDLEVBQUUsQ0FDSixLQUFLLEVBQ0xuQyxJQUFJLENBQUMsSUFBSSxDQUFDTyxDQUFDLENBQUNNLEdBQUcsQ0FBQ1csS0FBSyxDQUFDWSxhQUFhLENBQUNDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFDbEQsSUFBSSxDQUFDOUIsQ0FBQyxDQUFDTSxHQUFHLENBQUNXLEtBQUssQ0FBQ0MsV0FBVyxDQUFDYSxPQUFPLEdBQUdyQyxhQUFJLENBQUM4QixHQUNoRCxDQUFDO0lBQ0wsQ0FBQyxDQUFDLE9BQU9sQyxDQUFDLEVBQUU7TUFDUixJQUFJLENBQUNXLEdBQUcsQ0FBQytCLEtBQUssQ0FBQyxtQ0FBbUMsRUFBRTFDLENBQUMsQ0FBQztNQUN0RDJDLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuQjtFQUNKOztFQUVBO0FBQ0o7QUFDQTtFQUNJLE1BQU1DLElBQUlBLENBQUEsRUFBRztJQUNULElBQUk7TUFDQSxJQUFJLENBQUNsQyxHQUFHLENBQUNtQixPQUFPLENBQUMsWUFBWSxJQUFJLENBQUNwQixDQUFDLENBQUNNLEdBQUcsQ0FBQ1csS0FBSyxDQUFDQyxXQUFXLENBQUNHLFFBQVEsRUFBRSxDQUFDO01BQ3JFLE1BQU0sSUFBSSxDQUFDUCxLQUFLLENBQUMsQ0FBQztJQUN0QixDQUFDLENBQUMsT0FBT3hCLENBQUMsRUFBRTtNQUNSLElBQUksQ0FBQ1csR0FBRyxDQUFDK0IsS0FBSyxDQUNWLHdCQUF3QixJQUFJLENBQUNoQyxDQUFDLENBQUNNLEdBQUcsQ0FBQ1csS0FBSyxDQUFDQyxXQUFXLENBQUNDLElBQUksSUFBSSxFQUFFN0IsQ0FDbkUsQ0FBQztNQUNEMkMsT0FBTyxDQUFDQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25CO0lBRUEsSUFBSSxDQUFDRSxhQUFhLENBQUMsQ0FBQztJQUVwQixJQUFJLENBQUNULGVBQWUsQ0FBQyxDQUFDOztJQUV0QjtJQUNBO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNRLElBQUksQ0FBQzFCLEdBQUcsQ0FBQ21CLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztJQUN4Q2lCLFdBQUUsQ0FBQ0MsYUFBYSxDQUNaLElBQUksQ0FBQ3RDLENBQUMsQ0FBQ00sR0FBRyxDQUFDVyxLQUFLLENBQUNDLFdBQVcsQ0FBQ2YsV0FBVyxFQUFFb0MsSUFBSSxDQUFDQyxTQUFTLENBQUMsSUFBSSxDQUFDckMsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQ3RGLENBQUM7RUFDTDs7RUFFQTtBQUNKO0FBQ0E7RUFDSWlDLGFBQWFBLENBQUEsRUFBRztJQUNaLElBQUk7TUFDQSxJQUFJLENBQUNuQyxHQUFHLENBQUNtQixPQUFPLENBQUMsWUFBWSxJQUFJLENBQUNwQixDQUFDLENBQUNNLEdBQUcsQ0FBQ1csS0FBSyxDQUFDQyxXQUFXLENBQUNhLE9BQU8sRUFBRSxDQUFDO01BQ3BFTSxXQUFFLENBQUNJLFNBQVMsQ0FBQyxJQUFJLENBQUN6QyxDQUFDLENBQUNNLEdBQUcsQ0FBQ1csS0FBSyxDQUFDQyxXQUFXLENBQUNhLE9BQU8sQ0FBQztJQUN0RCxDQUFDLENBQUMsT0FBT3pDLENBQUMsRUFBRTtNQUNSLElBQUlBLENBQUMsQ0FBQ29ELElBQUksS0FBSyxRQUFRLEVBQUU7UUFDckIsSUFBSSxDQUFDekMsR0FBRyxDQUFDK0IsS0FBSyxDQUNWLDZCQUE2QixJQUFJLENBQUNoQyxDQUFDLENBQUNNLEdBQUcsQ0FBQ1csS0FBSyxDQUFDQyxXQUFXLENBQUNhLE9BQU8sSUFBSSxFQUFFekMsQ0FDM0UsQ0FBQztRQUNEMkMsT0FBTyxDQUFDQyxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ25CO0lBQ0o7RUFDSjtBQUNKO0FBQUNTLE9BQUEsQ0FBQW5ELE9BQUEsR0FBQU0sbUJBQUEiLCJpZ25vcmVMaXN0IjpbXX0=