diff --git a/.editorconfig b/.editorconfig new file mode 100755 index 0000000000000000000000000000000000000000..6d7fa7039c286f222ddb1113488bfbb9d0e02223 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,31 @@ +################################################ +# â•”â•╗╔╦╗╦╔╦╗╔â•╗╦â•╗┌─â”┌─â”┌â”┌┌─â”┬┌─┠+# â•‘â•£ â•‘â•‘â•‘ â•‘ â•‘ ║╠╦â•│ │ ││││├┤ ││ ┬ +# o╚â•â•â•â•©â•â•© â•© ╚â•â•╩╚â•└─┘└─┘┘└┘└ ┴└─┘ +# +# > Formatting conventions for your Sails app. +# +# This file (`.editorconfig`) exists to help +# maintain consistent formatting throughout the +# files in your Sails app. +# +# For the sake of convention, the Sails team's +# preferred settings are included here out of the +# box. You can also change this file to fit your +# team's preferences (for example, if all of the +# developers on your team have a strong preference +# for tabs over spaces), +# +# To review what each of these options mean, see: +# http://editorconfig.org/ +# +################################################ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/.eslintignore b/.eslintignore new file mode 100755 index 0000000000000000000000000000000000000000..f190c2ae4fe67160b71567f35aec63cf3f73080f --- /dev/null +++ b/.eslintignore @@ -0,0 +1,3 @@ +assets/dependencies/**/*.js +views/**/*.ejs + diff --git a/.eslintrc b/.eslintrc new file mode 100755 index 0000000000000000000000000000000000000000..b284ab05945499c7b6c1b4508771ab7449a321d0 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,90 @@ +{ + // â•”â•â•—â•”â•╗╦ ╦╔╗╔╔╦╗┬─â”┌─┠+ // â•‘â•£ ╚â•â•—â•‘ â•‘â•‘â•‘â•‘ â•‘ ├┬┘│ + // o╚â•â•╚â•â•â•©â•â•â•©â•╚╠╩ ┴└─└─┘ + // A set of basic code conventions designed to encourage quality and consistency + // across your Sails app's code base. These rules are checked against + // automatically any time you run `npm test`. + // + // > An additional eslintrc override file is included in the `assets/` folder + // > right out of the box. This is specifically to allow for variations in acceptable + // > global variables between front-end JavaScript code designed to run in the browser + // > vs. backend code designed to run in a Node.js/Sails process. + // + // > Note: If you're using mocha, you'll want to add an extra override file to your + // > `test/` folder so that eslint will tolerate mocha-specific globals like `before` + // > and `describe`. + // Designed for ESLint v4. + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + // For more information about any of the rules below, check out the relevant + // reference page on eslint.org. For example, to get details on "no-sequences", + // you would visit `http://eslint.org/docs/rules/no-sequences`. If you're unsure + // or could use some advice, come by https://sailsjs.com/support. + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + "env": { + "node": true + }, + + "parserOptions": { + "ecmaVersion": 2018 + }, + + "globals": { + // If "no-undef" is enabled below, be sure to list all global variables that + // are used in this app's backend code (including the globalIds of models): + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Promise": true, + "sails": true, + "_": true + // …and any others (e.g. `"Organization": true`) + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + }, + + "rules": { + "block-scoped-var": ["error"], + "callback-return": ["error", ["done", "proceed", "next", "onwards", "callback", "cb"]], + "camelcase": ["warn", {"properties":"always"}], + "comma-style": ["warn", "last"], + "curly": ["warn"], + "eqeqeq": ["error", "always"], + "eol-last": ["warn"], + "handle-callback-err": ["error"], + "indent": ["warn", 2, { + "SwitchCase": 1, + "MemberExpression": "off", + "FunctionDeclaration": {"body":1, "parameters":"off"}, + "FunctionExpression": {"body":1, "parameters":"off"}, + "CallExpression": {"arguments":"off"}, + "ArrayExpression": 1, + "ObjectExpression": 1, + "ignoredNodes": ["ConditionalExpression"] + }], + "linebreak-style": ["error", "unix"], + "no-dupe-keys": ["error"], + "no-duplicate-case": ["error"], + "no-extra-semi": ["warn"], + "no-labels": ["error"], + "no-mixed-spaces-and-tabs": [2, "smart-tabs"], + "no-redeclare": ["warn"], + "no-return-assign": ["error", "always"], + "no-sequences": ["error"], + "no-trailing-spaces": ["warn"], + "no-undef": ["off"], + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + // ^^Note: If this "no-undef" rule is enabled (set to `["error"]`), then all model globals + // (e.g. `"Organization": true`) should be included above under "globals". + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "no-unexpected-multiline": ["warn"], + "no-unreachable": ["warn"], + "no-unused-vars": ["warn", {"caughtErrors":"all", "caughtErrorsIgnorePattern": "^unused($|[A-Z].*$)", "argsIgnorePattern": "^unused($|[A-Z].*$)", "varsIgnorePattern": "^unused($|[A-Z].*$)" }], + "no-use-before-define": ["error", {"functions":false}], + "one-var": ["warn", "never"], + "prefer-arrow-callback": ["warn", {"allowNamedFunctions":true}], + "quotes": ["warn", "single", {"avoidEscape":false, "allowTemplateLiterals":true}], + "semi": ["warn", "always"], + "semi-spacing": ["warn", {"before":false, "after":true}], + "semi-style": ["warn", "last"] + } + +} diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000000000000000000000000000000000000..a1ddb80e79e8eacc69c3329b202d58e211583ace --- /dev/null +++ b/.gitignore @@ -0,0 +1,134 @@ +################################################ +# ┌─â”┬┌┬â”╦╔â•╗╔╗╔╔â•╗╦â•â•—â•”â•â•— +# │ ┬│ │ â•‘â•‘ ╦║║║║ ║╠╦â•â•‘â•£ +# o└─┘┴ â”´ ╩╚â•â•â•╚â•╚â•â•╩╚â•╚â•â• +# +# > Files to exclude from your app's repo. +# +# This file (`.gitignore`) is only relevant if +# you are using git. +# +# It exists to signify to git that certain files +# and/or directories should be ignored for the +# purposes of version control. +# +# This keeps tmp files and sensitive credentials +# from being uploaded to your repository. And +# it allows you to configure your app for your +# machine without accidentally committing settings +# which will smash the local settings of other +# developers on your team. +# +# Some reasonable defaults are included below, +# but, of course, you should modify/extend/prune +# to fit your needs! +# +################################################ + + +################################################ +# Local Configuration +# +# Explicitly ignore files which contain: +# +# 1. Sensitive information you'd rather not push to +# your git repository. +# e.g., your personal API keys or passwords. +# +# 2. Developer-specific configuration +# Basically, anything that would be annoying +# to have to change every time you do a +# `git pull` on your laptop. +# e.g. your local development database, or +# the S3 bucket you're using for file uploads +# during development. +# +################################################ + +config/local.js + + +################################################ +# Dependencies +# +# +# When releasing a production app, you _could_ +# hypothetically include your node_modules folder +# in your git repo, but during development, it +# is always best to exclude it, since different +# developers may be working on different kernels, +# where dependencies would need to be recompiled +# anyway. +# +# Most of the time, the node_modules folder can +# be excluded from your code repository, even +# in production, thanks to features like the +# package-lock.json file / NPM shrinkwrap. +# +# But no matter what, since this is a Sails app, +# you should always push up the package-lock.json +# or shrinkwrap file to your repository, to avoid +# accidentally pulling in upgraded dependencies +# and breaking your code. +# +# That said, if you are having trouble with +# dependencies, (particularly when using +# `npm link`) this can be pretty discouraging. +# But rather than just adding the lockfile to +# your .gitignore, try this first: +# ``` +# rm -rf node_modules +# rm package-lock.json +# npm install +# ``` +# +# [?] For more tips/advice, come by and say hi +# over at https://sailsjs.com/support +# +################################################ + +node_modules + + +################################################ +# +# > Do you use bower? +# > re: the bower_components dir, see this: +# > http://addyosmani.com/blog/checking-in-front-end-dependencies/ +# > (credit Addy Osmani, @addyosmani) +# +################################################ + + +################################################ +# Temporary files generated by Sails/Waterline. +################################################ + +.tmp + + +################################################ +# Miscellaneous +# +# Common files generated by text editors, +# operating systems, file systems, dbs, etc. +################################################ + +*~ +*# +.DS_STORE +.netbeans +nbproject +.idea +*.iml +.vscode +.node_history +dump.rdb + +npm-debug.log +lib-cov +*.seed +*.log +*.out +*.pid + diff --git a/.npmrc b/.npmrc new file mode 100755 index 0000000000000000000000000000000000000000..43601ce8db37493e60e5044032288a03b49ef2e7 --- /dev/null +++ b/.npmrc @@ -0,0 +1,11 @@ +###################### +# ╔╗╔╔â•╗╔╦╗┬─â”┌─┠# +# â•‘â•‘â•‘â• â•â•║║║├┬┘│ # +# oâ•╚â•â•© â•© ╩┴└─└─┘ # +###################### + +# Hide NPM log output unless it is related to an error of some kind: +loglevel=error + +# Make "npm audit" an opt-in thing for subsequent installs within this app: +audit=false diff --git a/.sailsrc b/.sailsrc new file mode 100755 index 0000000000000000000000000000000000000000..7d34d79c7a7bc8c7e1083ebc2cbf537603d08586 --- /dev/null +++ b/.sailsrc @@ -0,0 +1,9 @@ +{ + "generators": { + "modules": {} + }, + "_generatedWith": { + "sails": "1.2.3", + "sails-generate": "1.16.13" + } +} diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100755 index 0000000000000000000000000000000000000000..e3b284733824ec063786829525d384bc31327acf --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,23 @@ +/** + * Gruntfile + * + * This Node script is executed when you run `grunt`-- and also when + * you run `sails lift` (provided the grunt hook is installed and + * hasn't been disabled). + * + * WARNING: + * Unless you know what you're doing, you shouldn't change this file. + * Check out the `tasks/` directory instead. + * + * For more information see: + * https://sailsjs.com/anatomy/Gruntfile.js + */ +module.exports = function(grunt) { + + var loadGruntTasks = require('sails-hook-grunt/accessible/load-grunt-tasks'); + + // Load Grunt task configurations (from `tasks/config/`) and Grunt + // task registrations (from `tasks/register/`). + loadGruntTasks(__dirname, grunt); + +}; diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/api/controllers/.gitkeep b/api/controllers/.gitkeep new file mode 100755 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/api/controllers/BlockchainController.js b/api/controllers/BlockchainController.js new file mode 100755 index 0000000000000000000000000000000000000000..770b68ee3fa75059f3e5c6515a62546c9fe308db --- /dev/null +++ b/api/controllers/BlockchainController.js @@ -0,0 +1,115 @@ +/** + * BlockchainController + * + * @description :: Server-side actions for handling incoming requests. + * @help :: See https://sailsjs.com/docs/concepts/actions + */ +const Web3 = require('web3'); +const Tx = require('ethereumjs-tx'); +const url = sails.config.custom.urlRpc; +const web3 = new Web3(url); +const accountAddress = sails.config.custom.accountAddress; +const contractABI = sails.config.custom.contractABI; +const contractAddress = sails.config.custom.contractAddress; +const privateKey = Buffer.from( + sails.config.custom.privateKey, + 'hex', +); +const contract = new web3.eth.Contract(contractABI, contractAddress); + +module.exports = { + + verify : async function (req, res){ + + contract.methods.verify(req.params.ots,req.params.file_hash).call({from: accountAddress}, (err, result) => { + if(err){ + return res.json(err) + } + + return res.json(result); + }); + + }, + + stamp : async function (req, res){ + var _ots = req.body.ots; + var _file_hash = req.body.file_hash; + + // TODO: antes de stampar el hash recibido, verificar si ya fue estampado anteriormente + + web3.eth.getTransactionCount(accountAddress, (err, txCount) => { + + const data = contract.methods.stamp(_ots, _file_hash).encodeABI(); + + // Construir la transaccion + const txObject = { + nonce: web3.utils.toHex(txCount), + to: contractAddress, + gasLimit: web3.utils.toHex(800000), + gasPrice: web3.utils.toHex(web3.utils.toWei('2000', 'gwei')), + data: data + } + + // Firmar la transaccion + const tx = new Tx(txObject); + tx.sign(privateKey); + + const serializeTransaction = tx.serialize(); + const raw = '0x' + serializeTransaction.toString('hex'); + + // Transmitir la transacción + web3.eth.sendSignedTransaction(raw, (err, txHash) => { + if(err){ + return res.json(err); + } + + return res.json(txHash); + }); + }); + }, + + getBlockNumber : async function (req, res){ + var _ots = req.params.ots; + + contract.methods.getBlockNumber(_ots).call((err, result) => { + if(err){ + return res.json(err); + } + + return res.json(result); + }); + }, + + getHash : async function (req, res){ + var _ots = req.params.ots; + + contract.methods.getHash(_ots).call((err, result) => { + if(err){ + return res.json(err); + } + + return res.json(result); + }); + }, + + createAccount : async function (req, res){ + var account_data = web3.eth.accounts.create(); + return res.json(account_data); + }, + + sendTransaction: async function(req, res){ + var _from = req.body.from; + var _to = req.body.to; + var _ether = req.body.ether; + + web3.eth.sendTransaction({ from: _from, to: _to, value: web3.utils.toWei(_ether, 'ether')}, (err, txHash) => { + if(err){ + return res.json(err); + } + + return res.json(txHash); + }); + } + +}; + diff --git a/api/helpers/.gitkeep b/api/helpers/.gitkeep new file mode 100755 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/api/models/.gitkeep b/api/models/.gitkeep new file mode 100755 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/api/models/Blockchain.js b/api/models/Blockchain.js new file mode 100755 index 0000000000000000000000000000000000000000..b9e01c261edfebd72a576173fb3fe111eff6e411 --- /dev/null +++ b/api/models/Blockchain.js @@ -0,0 +1,29 @@ +/** + * Blockchain.js + * + * @description :: A model definition represents a database table/collection. + * @docs :: https://sailsjs.com/docs/concepts/models-and-orm/models + */ + +module.exports = { + + attributes: { + + // â•”â•╗╦â•╗╦╔╦╗╦╔╦╗╦╦ ╦╔â•â•—â•”â•â•— + // â• â•â•╠╦â•â•‘â•‘â•‘â•‘â•‘ â•‘ ║╚╗╔â•â•‘â•£ ╚â•â•— + // â•© ╩╚â•â•©â•© â•©â•© â•© â•© ╚╠╚â•â•╚â•â• + + + // â•”â•╗╔╦╗╔╗ â•”â•╗╔╦╗╔â•â•— + // â•‘â•£ â•‘â•‘â•‘â• â•©â•—â•‘â•£ ║║╚â•â•— + // ╚â•â•â•© ╩╚â•â•╚â•â•â•â•©â•╚â•â• + + + // â•”â•â•—â•”â•â•—â•”â•â•—â•”â•â•—â•”â•╗╦╔â•╗╔╦╗╦╔â•╗╔╗╔╔â•â•— + // â• â•╣╚â•╗╚â•â•—â•‘ â•‘â•‘ â•‘â• â•â•£ â•‘ â•‘â•‘ ║║║║╚â•â•— + // â•© ╩╚â•â•╚â•â•╚â•â•╚â•â•â•©â•© â•© â•© ╩╚â•â•â•╚â•╚â•â• + + }, + +}; + diff --git a/api/policies/.gitkeep b/api/policies/.gitkeep new file mode 100755 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/app.js b/app.js new file mode 100755 index 0000000000000000000000000000000000000000..f2c5f4eba84a69f771c8e71b9798372e3182b9e6 --- /dev/null +++ b/app.js @@ -0,0 +1,54 @@ +/** + * app.js + * + * Use `app.js` to run your app without `sails lift`. + * To start the server, run: `node app.js`. + * + * This is handy in situations where the sails CLI is not relevant or useful, + * such as when you deploy to a server, or a PaaS like Heroku. + * + * For example: + * => `node app.js` + * => `npm start` + * => `forever start app.js` + * => `node debug app.js` + * + * The same command-line arguments and env vars are supported, e.g.: + * `NODE_ENV=production node app.js --port=80 --verbose` + * + * For more information see: + * https://sailsjs.com/anatomy/app.js + */ + + +// Ensure we're in the project directory, so cwd-relative paths work as expected +// no matter where we actually lift from. +// > Note: This is not required in order to lift, but it is a convenient default. +process.chdir(__dirname); + + + +// Attempt to import `sails` dependency, as well as `rc` (for loading `.sailsrc` files). +var sails; +var rc; +try { + sails = require('sails'); + rc = require('sails/accessible/rc'); +} catch (err) { + console.error('Encountered an error when attempting to require(\'sails\'):'); + console.error(err.stack); + console.error('--'); + console.error('To run an app using `node app.js`, you need to have Sails installed'); + console.error('locally (`./node_modules/sails`). To do that, just make sure you\'re'); + console.error('in the same directory as your app and run `npm install`.'); + console.error(); + console.error('If Sails is installed globally (i.e. `npm install -g sails`) you can'); + console.error('also run this app with `sails lift`. Running with `sails lift` will'); + console.error('not run this file (`app.js`), but it will do exactly the same thing.'); + console.error('(It even uses your app directory\'s local Sails install, if possible.)'); + return; +}//-• + + +// Start server +sails.lift(rc('sails')); diff --git a/assets/.eslintrc b/assets/.eslintrc new file mode 100755 index 0000000000000000000000000000000000000000..e096f717afbd4126944ed9ad891cf09bfc643dc2 --- /dev/null +++ b/assets/.eslintrc @@ -0,0 +1,61 @@ +{ + // â•”â•â•—â•”â•╗╦ ╦╔╗╔╔╦╗┬─â”┌─┠┌─â”┬ ┬┌─â”┬─â”┬─â”┬┌┬â”┌─┠+ // â•‘â•£ ╚â•â•—â•‘ â•‘â•‘â•‘â•‘ â•‘ ├┬┘│ │ │└â”┌┘├┤ ├┬┘├┬┘│ ││├┤ + // o╚â•â•╚â•â•â•©â•â•â•©â•╚╠╩ ┴└─└─┘ └─┘ └┘ └─┘┴└─┴└─┴─┴┘└─┘ + // ┌─ ┌─â”┌─â”┬─┠┌┠┬─â”┌─â”┬ ┬┌─â”┌─â”┬─┠┬┌─┠┌─â”┌─â”┌─â”┌─â”┌┬â”┌─┠─┠+ // │ ├┤ │ │├┬┘ ├┴â”├┬┘│ ││││└─â”├┤ ├┬┘ │└─┠├─┤└─â”└─â”├┤ │ └─┠│ + // └─ â”” └─┘┴└─ └─┘┴└─└─┘└┴┘└─┘└─┘┴└─ └┘└─┘ â”´ ┴└─┘└─┘└─┘ â”´ └─┘ ─┘ + // > An .eslintrc configuration override for use in the `assets/` directory. + // + // This extends the top-level .eslintrc file, primarily to change the set of + // supported globals, as well as any other relevant settings. (Since JavaScript + // code in the `assets/` folder is intended for the browser habitat, a different + // set of globals is supported. For example, instead of Node.js/Sails globals + // like `sails` and `process`, you have access to browser globals like `window`.) + // + // (See .eslintrc in the root directory of this Sails app for more context.) + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + "extends": [ + "../.eslintrc" + ], + + "env": { + "browser": true, + "node": false + }, + + "parserOptions": { + "ecmaVersion": 8 + //^ If you are not using a transpiler like Babel, change this to `5`. + }, + + "globals": { + + // Allow any window globals you're relying on here; e.g. + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "SAILS_LOCALS": true, + "io": true, + // "google": true, + // ...etc. + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + // Make sure backend globals aren't indadvertently tolerated in our client-side JS: + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "sails": false, + "_": false + // ...and any other backend globals (e.g. `"Organization": false`) + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + }, + + "rules": { + "no-undef": ["error"] + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + // ^^Note: If you've enabled the "no-undef" rule in the top level .eslintrc file, then + // the globalIds of Sails models should also be blacklisted above under "globals". + // (In this scenario, also note that this override for the "no-undef" rule could + // simply be removed, since it'd be redundant.) + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + } + +} diff --git a/assets/dependencies/.gitkeep b/assets/dependencies/.gitkeep new file mode 100755 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/assets/dependencies/sails.io.js b/assets/dependencies/sails.io.js new file mode 100755 index 0000000000000000000000000000000000000000..6c134c22149f4cff85bfffe213f626cc3fb6b838 --- /dev/null +++ b/assets/dependencies/sails.io.js @@ -0,0 +1,1739 @@ +/* eslint-disable */ + +/** + * To use sails.io.js in an AMD environment (e.g. with require.js), + * replace this file with the sails.io.js file from the root of: + * https://github.com/balderdashy/sails.io.js + * and download a standalone copy of socket.io-client from: + * https://github.com/socketio/socket.io-client + * then follow the instructions at: + * https://github.com/balderdashy/sails.io.js#requirejsamd-usage + */ + +// socket.io-client version 2.0.3 +// https://github.com/socketio/socket.io-client + +!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.io=b():a.io=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(a,b){"object"===("undefined"==typeof a?"undefined":e(a))&&(b=a,a=void 0),b=b||{};var c,d=f(a),g=d.source,k=d.id,l=d.path,m=j[k]&&l in j[k].nsps,n=b.forceNew||b["force new connection"]||!1===b.multiplex||m;return n?(i("ignoring socket cache for %s",g),c=h(g,b)):(j[k]||(i("new io instance for %s",g),j[k]=h(g,b)),c=j[k]),d.query&&!b.query&&(b.query=d.query),c.socket(d.path,b)}var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},f=c(1),g=c(7),h=c(13),i=c(3)("socket.io-client");a.exports=b=d;var j=b.managers={};b.protocol=g.protocol,b.connect=d,b.Manager=c(13),b.Socket=c(39)},function(a,b,c){(function(b){"use strict";function d(a,c){var d=a;c=c||b.location,null==a&&(a=c.protocol+"//"+c.host),"string"==typeof a&&("/"===a.charAt(0)&&(a="/"===a.charAt(1)?c.protocol+a:c.host+a),/^(https?|wss?):\/\//.test(a)||(f("protocol-less url %s",a),a="undefined"!=typeof c?c.protocol+"//"+a:"https://"+a),f("parse %s",a),d=e(a)),d.port||(/^(http|ws)$/.test(d.protocol)?d.port="80":/^(http|ws)s$/.test(d.protocol)&&(d.port="443")),d.path=d.path||"/";var g=d.host.indexOf(":")!==-1,h=g?"["+d.host+"]":d.host;return d.id=d.protocol+"://"+h+":"+d.port,d.href=d.protocol+"://"+h+(c&&c.port===d.port?"":":"+d.port),d}var e=c(2),f=c(3)("socket.io-client:url");a.exports=d}).call(b,function(){return this}())},function(a,b){var c=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,d=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];a.exports=function(a){var b=a,e=a.indexOf("["),f=a.indexOf("]");e!=-1&&f!=-1&&(a=a.substring(0,e)+a.substring(e,f).replace(/:/g,";")+a.substring(f,a.length));for(var g=c.exec(a||""),h={},i=14;i--;)h[d[i]]=g[i]||"";return e!=-1&&f!=-1&&(h.source=b,h.host=h.host.substring(1,h.host.length-1).replace(/;/g,":"),h.authority=h.authority.replace("[","").replace("]","").replace(/;/g,":"),h.ipv6uri=!0),h}},function(a,b,c){(function(d){function e(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type)||"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function f(a){var c=this.useColors;if(a[0]=(c?"%c":"")+this.namespace+(c?" %c":" ")+a[0]+(c?"%c ":" ")+"+"+b.humanize(this.diff),c){var d="color: "+this.color;a.splice(1,0,d,"color: inherit");var e=0,f=0;a[0].replace(/%[a-zA-Z%]/g,function(a){"%%"!==a&&(e++,"%c"===a&&(f=e))}),a.splice(f,0,d)}}function g(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function h(a){try{null==a?b.storage.removeItem("debug"):b.storage.debug=a}catch(c){}}function i(){var a;try{a=b.storage.debug}catch(c){}return!a&&"undefined"!=typeof d&&"env"in d&&(a=d.env.DEBUG),a}function j(){try{return window.localStorage}catch(a){}}b=a.exports=c(5),b.log=g,b.formatArgs=f,b.save=h,b.load=i,b.useColors=e,b.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:j(),b.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],b.formatters.j=function(a){try{return JSON.stringify(a)}catch(b){return"[UnexpectedJSONParseError]: "+b.message}},b.enable(i())}).call(b,c(4))},function(a,b){function c(){throw new Error("setTimeout has not been defined")}function d(){throw new Error("clearTimeout has not been defined")}function e(a){if(k===setTimeout)return setTimeout(a,0);if((k===c||!k)&&setTimeout)return k=setTimeout,setTimeout(a,0);try{return k(a,0)}catch(b){try{return k.call(null,a,0)}catch(b){return k.call(this,a,0)}}}function f(a){if(l===clearTimeout)return clearTimeout(a);if((l===d||!l)&&clearTimeout)return l=clearTimeout,clearTimeout(a);try{return l(a)}catch(b){try{return l.call(null,a)}catch(b){return l.call(this,a)}}}function g(){p&&n&&(p=!1,n.length?o=n.concat(o):q=-1,o.length&&h())}function h(){if(!p){var a=e(g);p=!0;for(var b=o.length;b;){for(n=o,o=[];++q<b;)n&&n[q].run();q=-1,b=o.length}n=null,p=!1,f(a)}}function i(a,b){this.fun=a,this.array=b}function j(){}var k,l,m=a.exports={};!function(){try{k="function"==typeof setTimeout?setTimeout:c}catch(a){k=c}try{l="function"==typeof clearTimeout?clearTimeout:d}catch(a){l=d}}();var n,o=[],p=!1,q=-1;m.nextTick=function(a){var b=new Array(arguments.length-1);if(arguments.length>1)for(var c=1;c<arguments.length;c++)b[c-1]=arguments[c];o.push(new i(a,b)),1!==o.length||p||e(h)},i.prototype.run=function(){this.fun.apply(null,this.array)},m.title="browser",m.browser=!0,m.env={},m.argv=[],m.version="",m.versions={},m.on=j,m.addListener=j,m.once=j,m.off=j,m.removeListener=j,m.removeAllListeners=j,m.emit=j,m.prependListener=j,m.prependOnceListener=j,m.listeners=function(a){return[]},m.binding=function(a){throw new Error("process.binding is not supported")},m.cwd=function(){return"/"},m.chdir=function(a){throw new Error("process.chdir is not supported")},m.umask=function(){return 0}},function(a,b,c){function d(a){var c,d=0;for(c in a)d=(d<<5)-d+a.charCodeAt(c),d|=0;return b.colors[Math.abs(d)%b.colors.length]}function e(a){function c(){if(c.enabled){var a=c,d=+new Date,e=d-(j||d);a.diff=e,a.prev=j,a.curr=d,j=d;for(var f=new Array(arguments.length),g=0;g<f.length;g++)f[g]=arguments[g];f[0]=b.coerce(f[0]),"string"!=typeof f[0]&&f.unshift("%O");var h=0;f[0]=f[0].replace(/%([a-zA-Z%])/g,function(c,d){if("%%"===c)return c;h++;var e=b.formatters[d];if("function"==typeof e){var g=f[h];c=e.call(a,g),f.splice(h,1),h--}return c}),b.formatArgs.call(a,f);var i=c.log||b.log||console.log.bind(console);i.apply(a,f)}}return c.namespace=a,c.enabled=b.enabled(a),c.useColors=b.useColors(),c.color=d(a),"function"==typeof b.init&&b.init(c),c}function f(a){b.save(a),b.names=[],b.skips=[];for(var c=("string"==typeof a?a:"").split(/[\s,]+/),d=c.length,e=0;e<d;e++)c[e]&&(a=c[e].replace(/\*/g,".*?"),"-"===a[0]?b.skips.push(new RegExp("^"+a.substr(1)+"$")):b.names.push(new RegExp("^"+a+"$")))}function g(){b.enable("")}function h(a){var c,d;for(c=0,d=b.skips.length;c<d;c++)if(b.skips[c].test(a))return!1;for(c=0,d=b.names.length;c<d;c++)if(b.names[c].test(a))return!0;return!1}function i(a){return a instanceof Error?a.stack||a.message:a}b=a.exports=e.debug=e["default"]=e,b.coerce=i,b.disable=g,b.enable=f,b.enabled=h,b.humanize=c(6),b.names=[],b.skips=[],b.formatters={};var j},function(a,b){function c(a){if(a=String(a),!(a.length>100)){var b=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(a);if(b){var c=parseFloat(b[1]),d=(b[2]||"ms").toLowerCase();switch(d){case"years":case"year":case"yrs":case"yr":case"y":return c*k;case"days":case"day":case"d":return c*j;case"hours":case"hour":case"hrs":case"hr":case"h":return c*i;case"minutes":case"minute":case"mins":case"min":case"m":return c*h;case"seconds":case"second":case"secs":case"sec":case"s":return c*g;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}}}function d(a){return a>=j?Math.round(a/j)+"d":a>=i?Math.round(a/i)+"h":a>=h?Math.round(a/h)+"m":a>=g?Math.round(a/g)+"s":a+"ms"}function e(a){return f(a,j,"day")||f(a,i,"hour")||f(a,h,"minute")||f(a,g,"second")||a+" ms"}function f(a,b,c){if(!(a<b))return a<1.5*b?Math.floor(a/b)+" "+c:Math.ceil(a/b)+" "+c+"s"}var g=1e3,h=60*g,i=60*h,j=24*i,k=365.25*j;a.exports=function(a,b){b=b||{};var f=typeof a;if("string"===f&&a.length>0)return c(a);if("number"===f&&isNaN(a)===!1)return b["long"]?e(a):d(a);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(a))}},function(a,b,c){function d(){}function e(a){var c=""+a.type;return b.BINARY_EVENT!==a.type&&b.BINARY_ACK!==a.type||(c+=a.attachments+"-"),a.nsp&&"/"!==a.nsp&&(c+=a.nsp+","),null!=a.id&&(c+=a.id),null!=a.data&&(c+=JSON.stringify(a.data)),l("encoded %j as %s",a,c),c}function f(a,b){function c(a){var c=o.deconstructPacket(a),d=e(c.packet),f=c.buffers;f.unshift(d),b(f)}o.removeBlobs(a,c)}function g(){this.reconstructor=null}function h(a){var c=0,d={type:Number(a.charAt(0))};if(null==b.types[d.type])return k();if(b.BINARY_EVENT===d.type||b.BINARY_ACK===d.type){for(var e="";"-"!==a.charAt(++c)&&(e+=a.charAt(c),c!=a.length););if(e!=Number(e)||"-"!==a.charAt(c))throw new Error("Illegal attachments");d.attachments=Number(e)}if("/"===a.charAt(c+1))for(d.nsp="";++c;){var f=a.charAt(c);if(","===f)break;if(d.nsp+=f,c===a.length)break}else d.nsp="/";var g=a.charAt(c+1);if(""!==g&&Number(g)==g){for(d.id="";++c;){var f=a.charAt(c);if(null==f||Number(f)!=f){--c;break}if(d.id+=a.charAt(c),c===a.length)break}d.id=Number(d.id)}return a.charAt(++c)&&(d=i(d,a.substr(c))),l("decoded %s as %j",a,d),d}function i(a,b){try{a.data=JSON.parse(b)}catch(c){return k()}return a}function j(a){this.reconPack=a,this.buffers=[]}function k(){return{type:b.ERROR,data:"parser error"}}var l=c(3)("socket.io-parser"),m=c(8),n=c(9),o=c(11),p=c(12);b.protocol=4,b.types=["CONNECT","DISCONNECT","EVENT","ACK","ERROR","BINARY_EVENT","BINARY_ACK"],b.CONNECT=0,b.DISCONNECT=1,b.EVENT=2,b.ACK=3,b.ERROR=4,b.BINARY_EVENT=5,b.BINARY_ACK=6,b.Encoder=d,b.Decoder=g,d.prototype.encode=function(a,c){if(a.type!==b.EVENT&&a.type!==b.ACK||!n(a.data)||(a.type=a.type===b.EVENT?b.BINARY_EVENT:b.BINARY_ACK),l("encoding packet %j",a),b.BINARY_EVENT===a.type||b.BINARY_ACK===a.type)f(a,c);else{var d=e(a);c([d])}},m(g.prototype),g.prototype.add=function(a){var c;if("string"==typeof a)c=h(a),b.BINARY_EVENT===c.type||b.BINARY_ACK===c.type?(this.reconstructor=new j(c),0===this.reconstructor.reconPack.attachments&&this.emit("decoded",c)):this.emit("decoded",c);else{if(!p(a)&&!a.base64)throw new Error("Unknown type: "+a);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");c=this.reconstructor.takeBinaryData(a),c&&(this.reconstructor=null,this.emit("decoded",c))}},g.prototype.destroy=function(){this.reconstructor&&this.reconstructor.finishedReconstruction()},j.prototype.takeBinaryData=function(a){if(this.buffers.push(a),this.buffers.length===this.reconPack.attachments){var b=o.reconstructPacket(this.reconPack,this.buffers);return this.finishedReconstruction(),b}return null},j.prototype.finishedReconstruction=function(){this.reconPack=null,this.buffers=[]}},function(a,b,c){function d(a){if(a)return e(a)}function e(a){for(var b in d.prototype)a[b]=d.prototype[b];return a}a.exports=d,d.prototype.on=d.prototype.addEventListener=function(a,b){return this._callbacks=this._callbacks||{},(this._callbacks["$"+a]=this._callbacks["$"+a]||[]).push(b),this},d.prototype.once=function(a,b){function c(){this.off(a,c),b.apply(this,arguments)}return c.fn=b,this.on(a,c),this},d.prototype.off=d.prototype.removeListener=d.prototype.removeAllListeners=d.prototype.removeEventListener=function(a,b){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var c=this._callbacks["$"+a];if(!c)return this;if(1==arguments.length)return delete this._callbacks["$"+a],this;for(var d,e=0;e<c.length;e++)if(d=c[e],d===b||d.fn===b){c.splice(e,1);break}return this},d.prototype.emit=function(a){this._callbacks=this._callbacks||{};var b=[].slice.call(arguments,1),c=this._callbacks["$"+a];if(c){c=c.slice(0);for(var d=0,e=c.length;d<e;++d)c[d].apply(this,b)}return this},d.prototype.listeners=function(a){return this._callbacks=this._callbacks||{},this._callbacks["$"+a]||[]},d.prototype.hasListeners=function(a){return!!this.listeners(a).length}},function(a,b,c){(function(b){function d(a){if(!a||"object"!=typeof a)return!1;if(e(a)){for(var c=0,f=a.length;c<f;c++)if(d(a[c]))return!0;return!1}if("function"==typeof b.Buffer&&b.Buffer.isBuffer&&b.Buffer.isBuffer(a)||"function"==typeof b.ArrayBuffer&&a instanceof ArrayBuffer||g&&a instanceof Blob||h&&a instanceof File)return!0;if(a.toJSON&&"function"==typeof a.toJSON&&1===arguments.length)return d(a.toJSON(),!0);for(var i in a)if(Object.prototype.hasOwnProperty.call(a,i)&&d(a[i]))return!0;return!1}var e=c(10),f=Object.prototype.toString,g="function"==typeof b.Blob||"[object BlobConstructor]"===f.call(b.Blob),h="function"==typeof b.File||"[object FileConstructor]"===f.call(b.File);a.exports=d}).call(b,function(){return this}())},function(a,b){var c={}.toString;a.exports=Array.isArray||function(a){return"[object Array]"==c.call(a)}},function(a,b,c){(function(a){function d(a,b){if(!a)return a;if(g(a)){var c={_placeholder:!0,num:b.length};return b.push(a),c}if(f(a)){for(var e=new Array(a.length),h=0;h<a.length;h++)e[h]=d(a[h],b);return e}if("object"==typeof a&&!(a instanceof Date)){var e={};for(var i in a)e[i]=d(a[i],b);return e}return a}function e(a,b){if(!a)return a;if(a&&a._placeholder)return b[a.num];if(f(a))for(var c=0;c<a.length;c++)a[c]=e(a[c],b);else if("object"==typeof a)for(var d in a)a[d]=e(a[d],b);return a}var f=c(10),g=c(12),h=Object.prototype.toString,i="function"==typeof a.Blob||"[object BlobConstructor]"===h.call(a.Blob),j="function"==typeof a.File||"[object FileConstructor]"===h.call(a.File);b.deconstructPacket=function(a){var b=[],c=a.data,e=a;return e.data=d(c,b),e.attachments=b.length,{packet:e,buffers:b}},b.reconstructPacket=function(a,b){return a.data=e(a.data,b),a.attachments=void 0,a},b.removeBlobs=function(a,b){function c(a,h,k){if(!a)return a;if(i&&a instanceof Blob||j&&a instanceof File){d++;var l=new FileReader;l.onload=function(){k?k[h]=this.result:e=this.result,--d||b(e)},l.readAsArrayBuffer(a)}else if(f(a))for(var m=0;m<a.length;m++)c(a[m],m,a);else if("object"==typeof a&&!g(a))for(var n in a)c(a[n],n,a)}var d=0,e=a;c(e),d||b(e)}}).call(b,function(){return this}())},function(a,b){(function(b){function c(a){return b.Buffer&&b.Buffer.isBuffer(a)||b.ArrayBuffer&&a instanceof ArrayBuffer}a.exports=c}).call(b,function(){return this}())},function(a,b,c){"use strict";function d(a,b){if(!(this instanceof d))return new d(a,b);a&&"object"===("undefined"==typeof a?"undefined":e(a))&&(b=a,a=void 0),b=b||{},b.path=b.path||"/socket.io",this.nsps={},this.subs=[],this.opts=b,this.reconnection(b.reconnection!==!1),this.reconnectionAttempts(b.reconnectionAttempts||1/0),this.reconnectionDelay(b.reconnectionDelay||1e3),this.reconnectionDelayMax(b.reconnectionDelayMax||5e3),this.randomizationFactor(b.randomizationFactor||.5),this.backoff=new n({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==b.timeout?2e4:b.timeout),this.readyState="closed",this.uri=a,this.connecting=[],this.lastPing=null,this.encoding=!1,this.packetBuffer=[];var c=b.parser||i;this.encoder=new c.Encoder,this.decoder=new c.Decoder,this.autoConnect=b.autoConnect!==!1,this.autoConnect&&this.open()}var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},f=c(14),g=c(39),h=c(8),i=c(7),j=c(41),k=c(42),l=c(3)("socket.io-client:manager"),m=c(37),n=c(43),o=Object.prototype.hasOwnProperty;a.exports=d,d.prototype.emitAll=function(){this.emit.apply(this,arguments);for(var a in this.nsps)o.call(this.nsps,a)&&this.nsps[a].emit.apply(this.nsps[a],arguments)},d.prototype.updateSocketIds=function(){for(var a in this.nsps)o.call(this.nsps,a)&&(this.nsps[a].id=this.generateId(a))},d.prototype.generateId=function(a){return("/"===a?"":a+"#")+this.engine.id},h(d.prototype),d.prototype.reconnection=function(a){return arguments.length?(this._reconnection=!!a,this):this._reconnection},d.prototype.reconnectionAttempts=function(a){return arguments.length?(this._reconnectionAttempts=a,this):this._reconnectionAttempts},d.prototype.reconnectionDelay=function(a){return arguments.length?(this._reconnectionDelay=a,this.backoff&&this.backoff.setMin(a),this):this._reconnectionDelay},d.prototype.randomizationFactor=function(a){return arguments.length?(this._randomizationFactor=a,this.backoff&&this.backoff.setJitter(a),this):this._randomizationFactor},d.prototype.reconnectionDelayMax=function(a){return arguments.length?(this._reconnectionDelayMax=a,this.backoff&&this.backoff.setMax(a),this):this._reconnectionDelayMax},d.prototype.timeout=function(a){return arguments.length?(this._timeout=a,this):this._timeout},d.prototype.maybeReconnectOnOpen=function(){!this.reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()},d.prototype.open=d.prototype.connect=function(a,b){if(l("readyState %s",this.readyState),~this.readyState.indexOf("open"))return this;l("opening %s",this.uri),this.engine=f(this.uri,this.opts);var c=this.engine,d=this;this.readyState="opening",this.skipReconnect=!1;var e=j(c,"open",function(){d.onopen(),a&&a()}),g=j(c,"error",function(b){if(l("connect_error"),d.cleanup(),d.readyState="closed",d.emitAll("connect_error",b),a){var c=new Error("Connection error");c.data=b,a(c)}else d.maybeReconnectOnOpen()});if(!1!==this._timeout){var h=this._timeout;l("connect attempt will timeout after %d",h);var i=setTimeout(function(){l("connect attempt timed out after %d",h),e.destroy(),c.close(),c.emit("error","timeout"),d.emitAll("connect_timeout",h)},h);this.subs.push({destroy:function(){clearTimeout(i)}})}return this.subs.push(e),this.subs.push(g),this},d.prototype.onopen=function(){l("open"),this.cleanup(),this.readyState="open",this.emit("open");var a=this.engine;this.subs.push(j(a,"data",k(this,"ondata"))),this.subs.push(j(a,"ping",k(this,"onping"))),this.subs.push(j(a,"pong",k(this,"onpong"))),this.subs.push(j(a,"error",k(this,"onerror"))),this.subs.push(j(a,"close",k(this,"onclose"))),this.subs.push(j(this.decoder,"decoded",k(this,"ondecoded")))},d.prototype.onping=function(){this.lastPing=new Date,this.emitAll("ping")},d.prototype.onpong=function(){this.emitAll("pong",new Date-this.lastPing)},d.prototype.ondata=function(a){this.decoder.add(a)},d.prototype.ondecoded=function(a){this.emit("packet",a)},d.prototype.onerror=function(a){l("error",a),this.emitAll("error",a)},d.prototype.socket=function(a,b){function c(){~m(e.connecting,d)||e.connecting.push(d)}var d=this.nsps[a];if(!d){d=new g(this,a,b),this.nsps[a]=d;var e=this;d.on("connecting",c),d.on("connect",function(){d.id=e.generateId(a)}),this.autoConnect&&c()}return d},d.prototype.destroy=function(a){var b=m(this.connecting,a);~b&&this.connecting.splice(b,1),this.connecting.length||this.close()},d.prototype.packet=function(a){l("writing packet %j",a);var b=this;a.query&&0===a.type&&(a.nsp+="?"+a.query),b.encoding?b.packetBuffer.push(a):(b.encoding=!0,this.encoder.encode(a,function(c){for(var d=0;d<c.length;d++)b.engine.write(c[d],a.options);b.encoding=!1,b.processPacketQueue()}))},d.prototype.processPacketQueue=function(){if(this.packetBuffer.length>0&&!this.encoding){var a=this.packetBuffer.shift();this.packet(a)}},d.prototype.cleanup=function(){l("cleanup");for(var a=this.subs.length,b=0;b<a;b++){var c=this.subs.shift();c.destroy()}this.packetBuffer=[],this.encoding=!1,this.lastPing=null,this.decoder.destroy()},d.prototype.close=d.prototype.disconnect=function(){l("disconnect"),this.skipReconnect=!0,this.reconnecting=!1,"opening"===this.readyState&&this.cleanup(),this.backoff.reset(),this.readyState="closed",this.engine&&this.engine.close()},d.prototype.onclose=function(a){l("onclose"),this.cleanup(),this.backoff.reset(),this.readyState="closed",this.emit("close",a),this._reconnection&&!this.skipReconnect&&this.reconnect()},d.prototype.reconnect=function(){if(this.reconnecting||this.skipReconnect)return this;var a=this;if(this.backoff.attempts>=this._reconnectionAttempts)l("reconnect failed"),this.backoff.reset(),this.emitAll("reconnect_failed"),this.reconnecting=!1;else{var b=this.backoff.duration();l("will wait %dms before reconnect attempt",b),this.reconnecting=!0;var c=setTimeout(function(){a.skipReconnect||(l("attempting reconnect"),a.emitAll("reconnect_attempt",a.backoff.attempts),a.emitAll("reconnecting",a.backoff.attempts),a.skipReconnect||a.open(function(b){b?(l("reconnect attempt error"),a.reconnecting=!1,a.reconnect(),a.emitAll("reconnect_error",b.data)):(l("reconnect success"),a.onreconnect())}))},b);this.subs.push({destroy:function(){clearTimeout(c)}})}},d.prototype.onreconnect=function(){var a=this.backoff.attempts;this.reconnecting=!1,this.backoff.reset(),this.updateSocketIds(),this.emitAll("reconnect",a)}},function(a,b,c){a.exports=c(15)},function(a,b,c){a.exports=c(16),a.exports.parser=c(23)},function(a,b,c){(function(b){function d(a,c){if(!(this instanceof d))return new d(a,c);c=c||{},a&&"object"==typeof a&&(c=a,a=null),a?(a=k(a),c.hostname=a.host,c.secure="https"===a.protocol||"wss"===a.protocol,c.port=a.port,a.query&&(c.query=a.query)):c.host&&(c.hostname=k(c.host).host),this.secure=null!=c.secure?c.secure:b.location&&"https:"===location.protocol,c.hostname&&!c.port&&(c.port=this.secure?"443":"80"),this.agent=c.agent||!1,this.hostname=c.hostname||(b.location?location.hostname:"localhost"),this.port=c.port||(b.location&&location.port?location.port:this.secure?443:80),this.query=c.query||{},"string"==typeof this.query&&(this.query=m.decode(this.query)),this.upgrade=!1!==c.upgrade,this.path=(c.path||"/engine.io").replace(/\/$/,"")+"/",this.forceJSONP=!!c.forceJSONP,this.jsonp=!1!==c.jsonp,this.forceBase64=!!c.forceBase64,this.enablesXDR=!!c.enablesXDR,this.timestampParam=c.timestampParam||"t",this.timestampRequests=c.timestampRequests,this.transports=c.transports||["polling","websocket"],this.transportOptions=c.transportOptions||{},this.readyState="",this.writeBuffer=[],this.prevBufferLen=0,this.policyPort=c.policyPort||843,this.rememberUpgrade=c.rememberUpgrade||!1,this.binaryType=null,this.onlyBinaryUpgrades=c.onlyBinaryUpgrades,this.perMessageDeflate=!1!==c.perMessageDeflate&&(c.perMessageDeflate||{}),!0===this.perMessageDeflate&&(this.perMessageDeflate={}),this.perMessageDeflate&&null==this.perMessageDeflate.threshold&&(this.perMessageDeflate.threshold=1024),this.pfx=c.pfx||null,this.key=c.key||null,this.passphrase=c.passphrase||null,this.cert=c.cert||null,this.ca=c.ca||null,this.ciphers=c.ciphers||null,this.rejectUnauthorized=void 0===c.rejectUnauthorized||c.rejectUnauthorized,this.forceNode=!!c.forceNode;var e="object"==typeof b&&b;e.global===e&&(c.extraHeaders&&Object.keys(c.extraHeaders).length>0&&(this.extraHeaders=c.extraHeaders),c.localAddress&&(this.localAddress=c.localAddress)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingIntervalTimer=null,this.pingTimeoutTimer=null,this.open()}function e(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}var f=c(17),g=c(8),h=c(3)("engine.io-client:socket"),i=c(37),j=c(23),k=c(2),l=c(38),m=c(31);a.exports=d,d.priorWebsocketSuccess=!1,g(d.prototype),d.protocol=j.protocol,d.Socket=d,d.Transport=c(22),d.transports=c(17),d.parser=c(23),d.prototype.createTransport=function(a){h('creating transport "%s"',a);var b=e(this.query);b.EIO=j.protocol,b.transport=a;var c=this.transportOptions[a]||{};this.id&&(b.sid=this.id);var d=new f[a]({query:b,socket:this,agent:c.agent||this.agent,hostname:c.hostname||this.hostname,port:c.port||this.port,secure:c.secure||this.secure,path:c.path||this.path,forceJSONP:c.forceJSONP||this.forceJSONP,jsonp:c.jsonp||this.jsonp,forceBase64:c.forceBase64||this.forceBase64,enablesXDR:c.enablesXDR||this.enablesXDR,timestampRequests:c.timestampRequests||this.timestampRequests,timestampParam:c.timestampParam||this.timestampParam,policyPort:c.policyPort||this.policyPort,pfx:c.pfx||this.pfx,key:c.key||this.key,passphrase:c.passphrase||this.passphrase,cert:c.cert||this.cert,ca:c.ca||this.ca,ciphers:c.ciphers||this.ciphers,rejectUnauthorized:c.rejectUnauthorized||this.rejectUnauthorized,perMessageDeflate:c.perMessageDeflate||this.perMessageDeflate,extraHeaders:c.extraHeaders||this.extraHeaders,forceNode:c.forceNode||this.forceNode,localAddress:c.localAddress||this.localAddress,requestTimeout:c.requestTimeout||this.requestTimeout,protocols:c.protocols||void 0});return d},d.prototype.open=function(){var a;if(this.rememberUpgrade&&d.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1)a="websocket";else{if(0===this.transports.length){var b=this;return void setTimeout(function(){b.emit("error","No transports available")},0)}a=this.transports[0]}this.readyState="opening";try{a=this.createTransport(a)}catch(c){return this.transports.shift(),void this.open()}a.open(),this.setTransport(a)},d.prototype.setTransport=function(a){h("setting transport %s",a.name);var b=this;this.transport&&(h("clearing existing transport %s",this.transport.name),this.transport.removeAllListeners()),this.transport=a,a.on("drain",function(){b.onDrain()}).on("packet",function(a){b.onPacket(a)}).on("error",function(a){b.onError(a)}).on("close",function(){b.onClose("transport close")})},d.prototype.probe=function(a){function b(){if(m.onlyBinaryUpgrades){var b=!this.supportsBinary&&m.transport.supportsBinary;l=l||b}l||(h('probe transport "%s" opened',a),k.send([{type:"ping",data:"probe"}]),k.once("packet",function(b){if(!l)if("pong"===b.type&&"probe"===b.data){if(h('probe transport "%s" pong',a),m.upgrading=!0,m.emit("upgrading",k),!k)return;d.priorWebsocketSuccess="websocket"===k.name,h('pausing current transport "%s"',m.transport.name),m.transport.pause(function(){l||"closed"!==m.readyState&&(h("changing transport and sending upgrade packet"),j(),m.setTransport(k),k.send([{type:"upgrade"}]),m.emit("upgrade",k),k=null,m.upgrading=!1,m.flush())})}else{h('probe transport "%s" failed',a);var c=new Error("probe error");c.transport=k.name,m.emit("upgradeError",c)}}))}function c(){l||(l=!0,j(),k.close(),k=null)}function e(b){var d=new Error("probe error: "+b);d.transport=k.name,c(),h('probe transport "%s" failed because of error: %s',a,b),m.emit("upgradeError",d)}function f(){e("transport closed")}function g(){e("socket closed")}function i(a){k&&a.name!==k.name&&(h('"%s" works - aborting "%s"',a.name,k.name),c())}function j(){k.removeListener("open",b),k.removeListener("error",e),k.removeListener("close",f),m.removeListener("close",g),m.removeListener("upgrading",i)}h('probing transport "%s"',a);var k=this.createTransport(a,{probe:1}),l=!1,m=this;d.priorWebsocketSuccess=!1,k.once("open",b),k.once("error",e),k.once("close",f),this.once("close",g),this.once("upgrading",i),k.open()},d.prototype.onOpen=function(){if(h("socket open"),this.readyState="open",d.priorWebsocketSuccess="websocket"===this.transport.name,this.emit("open"),this.flush(),"open"===this.readyState&&this.upgrade&&this.transport.pause){h("starting upgrade probes");for(var a=0,b=this.upgrades.length;a<b;a++)this.probe(this.upgrades[a])}},d.prototype.onPacket=function(a){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState)switch(h('socket receive: type "%s", data "%s"',a.type,a.data),this.emit("packet",a),this.emit("heartbeat"),a.type){case"open":this.onHandshake(l(a.data));break;case"pong":this.setPing(),this.emit("pong");break;case"error":var b=new Error("server error");b.code=a.data,this.onError(b);break;case"message":this.emit("data",a.data),this.emit("message",a.data)}else h('packet received with socket readyState "%s"',this.readyState)},d.prototype.onHandshake=function(a){this.emit("handshake",a),this.id=a.sid,this.transport.query.sid=a.sid,this.upgrades=this.filterUpgrades(a.upgrades),this.pingInterval=a.pingInterval,this.pingTimeout=a.pingTimeout,this.onOpen(),"closed"!==this.readyState&&(this.setPing(),this.removeListener("heartbeat",this.onHeartbeat),this.on("heartbeat",this.onHeartbeat))},d.prototype.onHeartbeat=function(a){clearTimeout(this.pingTimeoutTimer);var b=this;b.pingTimeoutTimer=setTimeout(function(){"closed"!==b.readyState&&b.onClose("ping timeout")},a||b.pingInterval+b.pingTimeout)},d.prototype.setPing=function(){var a=this;clearTimeout(a.pingIntervalTimer),a.pingIntervalTimer=setTimeout(function(){h("writing ping packet - expecting pong within %sms",a.pingTimeout),a.ping(),a.onHeartbeat(a.pingTimeout)},a.pingInterval)},d.prototype.ping=function(){var a=this;this.sendPacket("ping",function(){a.emit("ping")})},d.prototype.onDrain=function(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0===this.writeBuffer.length?this.emit("drain"):this.flush()},d.prototype.flush=function(){"closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length&&(h("flushing %d packets in socket",this.writeBuffer.length),this.transport.send(this.writeBuffer),this.prevBufferLen=this.writeBuffer.length,this.emit("flush"))},d.prototype.write=d.prototype.send=function(a,b,c){return this.sendPacket("message",a,b,c),this},d.prototype.sendPacket=function(a,b,c,d){if("function"==typeof b&&(d=b,b=void 0),"function"==typeof c&&(d=c,c=null),"closing"!==this.readyState&&"closed"!==this.readyState){c=c||{},c.compress=!1!==c.compress;var e={type:a,data:b,options:c};this.emit("packetCreate",e),this.writeBuffer.push(e),d&&this.once("flush",d),this.flush()}},d.prototype.close=function(){function a(){d.onClose("forced close"),h("socket closing - telling transport to close"),d.transport.close()}function b(){d.removeListener("upgrade",b),d.removeListener("upgradeError",b),a()}function c(){d.once("upgrade",b),d.once("upgradeError",b)}if("opening"===this.readyState||"open"===this.readyState){this.readyState="closing";var d=this;this.writeBuffer.length?this.once("drain",function(){this.upgrading?c():a()}):this.upgrading?c():a()}return this},d.prototype.onError=function(a){h("socket error %j",a),d.priorWebsocketSuccess=!1,this.emit("error",a),this.onClose("transport error",a)},d.prototype.onClose=function(a,b){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState){h('socket close with reason: "%s"',a);var c=this;clearTimeout(this.pingIntervalTimer),clearTimeout(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),this.readyState="closed",this.id=null,this.emit("close",a,b),c.writeBuffer=[],c.prevBufferLen=0}},d.prototype.filterUpgrades=function(a){for(var b=[],c=0,d=a.length;c<d;c++)~i(this.transports,a[c])&&b.push(a[c]);return b}}).call(b,function(){return this}())},function(a,b,c){(function(a){function d(b){var c,d=!1,h=!1,i=!1!==b.jsonp;if(a.location){var j="https:"===location.protocol,k=location.port;k||(k=j?443:80),d=b.hostname!==location.hostname||k!==b.port,h=b.secure!==j}if(b.xdomain=d,b.xscheme=h,c=new e(b),"open"in c&&!b.forceJSONP)return new f(b);if(!i)throw new Error("JSONP disabled");return new g(b)}var e=c(18),f=c(20),g=c(34),h=c(35);b.polling=d,b.websocket=h}).call(b,function(){return this}())},function(a,b,c){(function(b){var d=c(19);a.exports=function(a){var c=a.xdomain,e=a.xscheme,f=a.enablesXDR;try{if("undefined"!=typeof XMLHttpRequest&&(!c||d))return new XMLHttpRequest}catch(g){}try{if("undefined"!=typeof XDomainRequest&&!e&&f)return new XDomainRequest}catch(g){}if(!c)try{ +return new(b[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(g){}}}).call(b,function(){return this}())},function(a,b){try{a.exports="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(c){a.exports=!1}},function(a,b,c){(function(b){function d(){}function e(a){if(i.call(this,a),this.requestTimeout=a.requestTimeout,this.extraHeaders=a.extraHeaders,b.location){var c="https:"===location.protocol,d=location.port;d||(d=c?443:80),this.xd=a.hostname!==b.location.hostname||d!==a.port,this.xs=a.secure!==c}}function f(a){this.method=a.method||"GET",this.uri=a.uri,this.xd=!!a.xd,this.xs=!!a.xs,this.async=!1!==a.async,this.data=void 0!==a.data?a.data:null,this.agent=a.agent,this.isBinary=a.isBinary,this.supportsBinary=a.supportsBinary,this.enablesXDR=a.enablesXDR,this.requestTimeout=a.requestTimeout,this.pfx=a.pfx,this.key=a.key,this.passphrase=a.passphrase,this.cert=a.cert,this.ca=a.ca,this.ciphers=a.ciphers,this.rejectUnauthorized=a.rejectUnauthorized,this.extraHeaders=a.extraHeaders,this.create()}function g(){for(var a in f.requests)f.requests.hasOwnProperty(a)&&f.requests[a].abort()}var h=c(18),i=c(21),j=c(8),k=c(32),l=c(3)("engine.io-client:polling-xhr");a.exports=e,a.exports.Request=f,k(e,i),e.prototype.supportsBinary=!0,e.prototype.request=function(a){return a=a||{},a.uri=this.uri(),a.xd=this.xd,a.xs=this.xs,a.agent=this.agent||!1,a.supportsBinary=this.supportsBinary,a.enablesXDR=this.enablesXDR,a.pfx=this.pfx,a.key=this.key,a.passphrase=this.passphrase,a.cert=this.cert,a.ca=this.ca,a.ciphers=this.ciphers,a.rejectUnauthorized=this.rejectUnauthorized,a.requestTimeout=this.requestTimeout,a.extraHeaders=this.extraHeaders,new f(a)},e.prototype.doWrite=function(a,b){var c="string"!=typeof a&&void 0!==a,d=this.request({method:"POST",data:a,isBinary:c}),e=this;d.on("success",b),d.on("error",function(a){e.onError("xhr post error",a)}),this.sendXhr=d},e.prototype.doPoll=function(){l("xhr poll");var a=this.request(),b=this;a.on("data",function(a){b.onData(a)}),a.on("error",function(a){b.onError("xhr poll error",a)}),this.pollXhr=a},j(f.prototype),f.prototype.create=function(){var a={agent:this.agent,xdomain:this.xd,xscheme:this.xs,enablesXDR:this.enablesXDR};a.pfx=this.pfx,a.key=this.key,a.passphrase=this.passphrase,a.cert=this.cert,a.ca=this.ca,a.ciphers=this.ciphers,a.rejectUnauthorized=this.rejectUnauthorized;var c=this.xhr=new h(a),d=this;try{l("xhr open %s: %s",this.method,this.uri),c.open(this.method,this.uri,this.async);try{if(this.extraHeaders){c.setDisableHeaderCheck&&c.setDisableHeaderCheck(!0);for(var e in this.extraHeaders)this.extraHeaders.hasOwnProperty(e)&&c.setRequestHeader(e,this.extraHeaders[e])}}catch(g){}if("POST"===this.method)try{this.isBinary?c.setRequestHeader("Content-type","application/octet-stream"):c.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(g){}try{c.setRequestHeader("Accept","*/*")}catch(g){}"withCredentials"in c&&(c.withCredentials=!0),this.requestTimeout&&(c.timeout=this.requestTimeout),this.hasXDR()?(c.onload=function(){d.onLoad()},c.onerror=function(){d.onError(c.responseText)}):c.onreadystatechange=function(){if(2===c.readyState){var a;try{a=c.getResponseHeader("Content-Type")}catch(b){}"application/octet-stream"===a&&(c.responseType="arraybuffer")}4===c.readyState&&(200===c.status||1223===c.status?d.onLoad():setTimeout(function(){d.onError(c.status)},0))},l("xhr data %s",this.data),c.send(this.data)}catch(g){return void setTimeout(function(){d.onError(g)},0)}b.document&&(this.index=f.requestsCount++,f.requests[this.index]=this)},f.prototype.onSuccess=function(){this.emit("success"),this.cleanup()},f.prototype.onData=function(a){this.emit("data",a),this.onSuccess()},f.prototype.onError=function(a){this.emit("error",a),this.cleanup(!0)},f.prototype.cleanup=function(a){if("undefined"!=typeof this.xhr&&null!==this.xhr){if(this.hasXDR()?this.xhr.onload=this.xhr.onerror=d:this.xhr.onreadystatechange=d,a)try{this.xhr.abort()}catch(c){}b.document&&delete f.requests[this.index],this.xhr=null}},f.prototype.onLoad=function(){var a;try{var b;try{b=this.xhr.getResponseHeader("Content-Type")}catch(c){}a="application/octet-stream"===b?this.xhr.response||this.xhr.responseText:this.xhr.responseText}catch(c){this.onError(c)}null!=a&&this.onData(a)},f.prototype.hasXDR=function(){return"undefined"!=typeof b.XDomainRequest&&!this.xs&&this.enablesXDR},f.prototype.abort=function(){this.cleanup()},f.requestsCount=0,f.requests={},b.document&&(b.attachEvent?b.attachEvent("onunload",g):b.addEventListener&&b.addEventListener("beforeunload",g,!1))}).call(b,function(){return this}())},function(a,b,c){function d(a){var b=a&&a.forceBase64;k&&!b||(this.supportsBinary=!1),e.call(this,a)}var e=c(22),f=c(31),g=c(23),h=c(32),i=c(33),j=c(3)("engine.io-client:polling");a.exports=d;var k=function(){var a=c(18),b=new a({xdomain:!1});return null!=b.responseType}();h(d,e),d.prototype.name="polling",d.prototype.doOpen=function(){this.poll()},d.prototype.pause=function(a){function b(){j("paused"),c.readyState="paused",a()}var c=this;if(this.readyState="pausing",this.polling||!this.writable){var d=0;this.polling&&(j("we are currently polling - waiting to pause"),d++,this.once("pollComplete",function(){j("pre-pause polling complete"),--d||b()})),this.writable||(j("we are currently writing - waiting to pause"),d++,this.once("drain",function(){j("pre-pause writing complete"),--d||b()}))}else b()},d.prototype.poll=function(){j("polling"),this.polling=!0,this.doPoll(),this.emit("poll")},d.prototype.onData=function(a){var b=this;j("polling got data %s",a);var c=function(a,c,d){return"opening"===b.readyState&&b.onOpen(),"close"===a.type?(b.onClose(),!1):void b.onPacket(a)};g.decodePayload(a,this.socket.binaryType,c),"closed"!==this.readyState&&(this.polling=!1,this.emit("pollComplete"),"open"===this.readyState?this.poll():j('ignoring poll - transport state "%s"',this.readyState))},d.prototype.doClose=function(){function a(){j("writing close packet"),b.write([{type:"close"}])}var b=this;"open"===this.readyState?(j("transport open - closing"),a()):(j("transport not open - deferring close"),this.once("open",a))},d.prototype.write=function(a){var b=this;this.writable=!1;var c=function(){b.writable=!0,b.emit("drain")};g.encodePayload(a,this.supportsBinary,function(a){b.doWrite(a,c)})},d.prototype.uri=function(){var a=this.query||{},b=this.secure?"https":"http",c="";!1!==this.timestampRequests&&(a[this.timestampParam]=i()),this.supportsBinary||a.sid||(a.b64=1),a=f.encode(a),this.port&&("https"===b&&443!==Number(this.port)||"http"===b&&80!==Number(this.port))&&(c=":"+this.port),a.length&&(a="?"+a);var d=this.hostname.indexOf(":")!==-1;return b+"://"+(d?"["+this.hostname+"]":this.hostname)+c+this.path+a}},function(a,b,c){function d(a){this.path=a.path,this.hostname=a.hostname,this.port=a.port,this.secure=a.secure,this.query=a.query,this.timestampParam=a.timestampParam,this.timestampRequests=a.timestampRequests,this.readyState="",this.agent=a.agent||!1,this.socket=a.socket,this.enablesXDR=a.enablesXDR,this.pfx=a.pfx,this.key=a.key,this.passphrase=a.passphrase,this.cert=a.cert,this.ca=a.ca,this.ciphers=a.ciphers,this.rejectUnauthorized=a.rejectUnauthorized,this.forceNode=a.forceNode,this.extraHeaders=a.extraHeaders,this.localAddress=a.localAddress}var e=c(23),f=c(8);a.exports=d,f(d.prototype),d.prototype.onError=function(a,b){var c=new Error(a);return c.type="TransportError",c.description=b,this.emit("error",c),this},d.prototype.open=function(){return"closed"!==this.readyState&&""!==this.readyState||(this.readyState="opening",this.doOpen()),this},d.prototype.close=function(){return"opening"!==this.readyState&&"open"!==this.readyState||(this.doClose(),this.onClose()),this},d.prototype.send=function(a){if("open"!==this.readyState)throw new Error("Transport not open");this.write(a)},d.prototype.onOpen=function(){this.readyState="open",this.writable=!0,this.emit("open")},d.prototype.onData=function(a){var b=e.decodePacket(a,this.socket.binaryType);this.onPacket(b)},d.prototype.onPacket=function(a){this.emit("packet",a)},d.prototype.onClose=function(){this.readyState="closed",this.emit("close")}},function(a,b,c){(function(a){function d(a,c){var d="b"+b.packets[a.type]+a.data.data;return c(d)}function e(a,c,d){if(!c)return b.encodeBase64Packet(a,d);var e=a.data,f=new Uint8Array(e),g=new Uint8Array(1+e.byteLength);g[0]=s[a.type];for(var h=0;h<f.length;h++)g[h+1]=f[h];return d(g.buffer)}function f(a,c,d){if(!c)return b.encodeBase64Packet(a,d);var e=new FileReader;return e.onload=function(){a.data=e.result,b.encodePacket(a,c,!0,d)},e.readAsArrayBuffer(a.data)}function g(a,c,d){if(!c)return b.encodeBase64Packet(a,d);if(r)return f(a,c,d);var e=new Uint8Array(1);e[0]=s[a.type];var g=new v([e.buffer,a.data]);return d(g)}function h(a){try{a=o.decode(a,{strict:!1})}catch(b){return!1}return a}function i(a,b,c){for(var d=new Array(a.length),e=n(a.length,c),f=function(a,c,e){b(c,function(b,c){d[a]=c,e(b,d)})},g=0;g<a.length;g++)f(g,a[g],e)}var j,k=c(24),l=c(9),m=c(25),n=c(26),o=c(27);a&&a.ArrayBuffer&&(j=c(29));var p="undefined"!=typeof navigator&&/Android/i.test(navigator.userAgent),q="undefined"!=typeof navigator&&/PhantomJS/i.test(navigator.userAgent),r=p||q;b.protocol=3;var s=b.packets={open:0,close:1,ping:2,pong:3,message:4,upgrade:5,noop:6},t=k(s),u={type:"error",data:"parser error"},v=c(30);b.encodePacket=function(b,c,f,h){"function"==typeof c&&(h=c,c=!1),"function"==typeof f&&(h=f,f=null);var i=void 0===b.data?void 0:b.data.buffer||b.data;if(a.ArrayBuffer&&i instanceof ArrayBuffer)return e(b,c,h);if(v&&i instanceof a.Blob)return g(b,c,h);if(i&&i.base64)return d(b,h);var j=s[b.type];return void 0!==b.data&&(j+=f?o.encode(String(b.data),{strict:!1}):String(b.data)),h(""+j)},b.encodeBase64Packet=function(c,d){var e="b"+b.packets[c.type];if(v&&c.data instanceof a.Blob){var f=new FileReader;return f.onload=function(){var a=f.result.split(",")[1];d(e+a)},f.readAsDataURL(c.data)}var g;try{g=String.fromCharCode.apply(null,new Uint8Array(c.data))}catch(h){for(var i=new Uint8Array(c.data),j=new Array(i.length),k=0;k<i.length;k++)j[k]=i[k];g=String.fromCharCode.apply(null,j)}return e+=a.btoa(g),d(e)},b.decodePacket=function(a,c,d){if(void 0===a)return u;if("string"==typeof a){if("b"===a.charAt(0))return b.decodeBase64Packet(a.substr(1),c);if(d&&(a=h(a),a===!1))return u;var e=a.charAt(0);return Number(e)==e&&t[e]?a.length>1?{type:t[e],data:a.substring(1)}:{type:t[e]}:u}var f=new Uint8Array(a),e=f[0],g=m(a,1);return v&&"blob"===c&&(g=new v([g])),{type:t[e],data:g}},b.decodeBase64Packet=function(a,b){var c=t[a.charAt(0)];if(!j)return{type:c,data:{base64:!0,data:a.substr(1)}};var d=j.decode(a.substr(1));return"blob"===b&&v&&(d=new v([d])),{type:c,data:d}},b.encodePayload=function(a,c,d){function e(a){return a.length+":"+a}function f(a,d){b.encodePacket(a,!!g&&c,!1,function(a){d(null,e(a))})}"function"==typeof c&&(d=c,c=null);var g=l(a);return c&&g?v&&!r?b.encodePayloadAsBlob(a,d):b.encodePayloadAsArrayBuffer(a,d):a.length?void i(a,f,function(a,b){return d(b.join(""))}):d("0:")},b.decodePayload=function(a,c,d){if("string"!=typeof a)return b.decodePayloadAsBinary(a,c,d);"function"==typeof c&&(d=c,c=null);var e;if(""===a)return d(u,0,1);for(var f,g,h="",i=0,j=a.length;i<j;i++){var k=a.charAt(i);if(":"===k){if(""===h||h!=(f=Number(h)))return d(u,0,1);if(g=a.substr(i+1,f),h!=g.length)return d(u,0,1);if(g.length){if(e=b.decodePacket(g,c,!1),u.type===e.type&&u.data===e.data)return d(u,0,1);var l=d(e,i+f,j);if(!1===l)return}i+=f,h=""}else h+=k}return""!==h?d(u,0,1):void 0},b.encodePayloadAsArrayBuffer=function(a,c){function d(a,c){b.encodePacket(a,!0,!0,function(a){return c(null,a)})}return a.length?void i(a,d,function(a,b){var d=b.reduce(function(a,b){var c;return c="string"==typeof b?b.length:b.byteLength,a+c.toString().length+c+2},0),e=new Uint8Array(d),f=0;return b.forEach(function(a){var b="string"==typeof a,c=a;if(b){for(var d=new Uint8Array(a.length),g=0;g<a.length;g++)d[g]=a.charCodeAt(g);c=d.buffer}b?e[f++]=0:e[f++]=1;for(var h=c.byteLength.toString(),g=0;g<h.length;g++)e[f++]=parseInt(h[g]);e[f++]=255;for(var d=new Uint8Array(c),g=0;g<d.length;g++)e[f++]=d[g]}),c(e.buffer)}):c(new ArrayBuffer(0))},b.encodePayloadAsBlob=function(a,c){function d(a,c){b.encodePacket(a,!0,!0,function(a){var b=new Uint8Array(1);if(b[0]=1,"string"==typeof a){for(var d=new Uint8Array(a.length),e=0;e<a.length;e++)d[e]=a.charCodeAt(e);a=d.buffer,b[0]=0}for(var f=a instanceof ArrayBuffer?a.byteLength:a.size,g=f.toString(),h=new Uint8Array(g.length+1),e=0;e<g.length;e++)h[e]=parseInt(g[e]);if(h[g.length]=255,v){var i=new v([b.buffer,h.buffer,a]);c(null,i)}})}i(a,d,function(a,b){return c(new v(b))})},b.decodePayloadAsBinary=function(a,c,d){"function"==typeof c&&(d=c,c=null);for(var e=a,f=[];e.byteLength>0;){for(var g=new Uint8Array(e),h=0===g[0],i="",j=1;255!==g[j];j++){if(i.length>310)return d(u,0,1);i+=g[j]}e=m(e,2+i.length),i=parseInt(i);var k=m(e,0,i);if(h)try{k=String.fromCharCode.apply(null,new Uint8Array(k))}catch(l){var n=new Uint8Array(k);k="";for(var j=0;j<n.length;j++)k+=String.fromCharCode(n[j])}f.push(k),e=m(e,i)}var o=f.length;f.forEach(function(a,e){d(b.decodePacket(a,c,!0),e,o)})}}).call(b,function(){return this}())},function(a,b){a.exports=Object.keys||function(a){var b=[],c=Object.prototype.hasOwnProperty;for(var d in a)c.call(a,d)&&b.push(d);return b}},function(a,b){a.exports=function(a,b,c){var d=a.byteLength;if(b=b||0,c=c||d,a.slice)return a.slice(b,c);if(b<0&&(b+=d),c<0&&(c+=d),c>d&&(c=d),b>=d||b>=c||0===d)return new ArrayBuffer(0);for(var e=new Uint8Array(a),f=new Uint8Array(c-b),g=b,h=0;g<c;g++,h++)f[h]=e[g];return f.buffer}},function(a,b){function c(a,b,c){function e(a,d){if(e.count<=0)throw new Error("after called too many times");--e.count,a?(f=!0,b(a),b=c):0!==e.count||f||b(null,d)}var f=!1;return c=c||d,e.count=a,0===a?b():e}function d(){}a.exports=c},function(a,b,c){var d;(function(a,e){!function(f){function g(a){for(var b,c,d=[],e=0,f=a.length;e<f;)b=a.charCodeAt(e++),b>=55296&&b<=56319&&e<f?(c=a.charCodeAt(e++),56320==(64512&c)?d.push(((1023&b)<<10)+(1023&c)+65536):(d.push(b),e--)):d.push(b);return d}function h(a){for(var b,c=a.length,d=-1,e="";++d<c;)b=a[d],b>65535&&(b-=65536,e+=u(b>>>10&1023|55296),b=56320|1023&b),e+=u(b);return e}function i(a,b){if(a>=55296&&a<=57343){if(b)throw Error("Lone surrogate U+"+a.toString(16).toUpperCase()+" is not a scalar value");return!1}return!0}function j(a,b){return u(a>>b&63|128)}function k(a,b){if(0==(4294967168&a))return u(a);var c="";return 0==(4294965248&a)?c=u(a>>6&31|192):0==(4294901760&a)?(i(a,b)||(a=65533),c=u(a>>12&15|224),c+=j(a,6)):0==(4292870144&a)&&(c=u(a>>18&7|240),c+=j(a,12),c+=j(a,6)),c+=u(63&a|128)}function l(a,b){b=b||{};for(var c,d=!1!==b.strict,e=g(a),f=e.length,h=-1,i="";++h<f;)c=e[h],i+=k(c,d);return i}function m(){if(t>=s)throw Error("Invalid byte index");var a=255&r[t];if(t++,128==(192&a))return 63&a;throw Error("Invalid continuation byte")}function n(a){var b,c,d,e,f;if(t>s)throw Error("Invalid byte index");if(t==s)return!1;if(b=255&r[t],t++,0==(128&b))return b;if(192==(224&b)){if(c=m(),f=(31&b)<<6|c,f>=128)return f;throw Error("Invalid continuation byte")}if(224==(240&b)){if(c=m(),d=m(),f=(15&b)<<12|c<<6|d,f>=2048)return i(f,a)?f:65533;throw Error("Invalid continuation byte")}if(240==(248&b)&&(c=m(),d=m(),e=m(),f=(7&b)<<18|c<<12|d<<6|e,f>=65536&&f<=1114111))return f;throw Error("Invalid UTF-8 detected")}function o(a,b){b=b||{};var c=!1!==b.strict;r=g(a),s=r.length,t=0;for(var d,e=[];(d=n(c))!==!1;)e.push(d);return h(e)}var p="object"==typeof b&&b,q=("object"==typeof a&&a&&a.exports==p&&a,"object"==typeof e&&e);q.global!==q&&q.window!==q||(f=q);var r,s,t,u=String.fromCharCode,v={version:"2.1.2",encode:l,decode:o};d=function(){return v}.call(b,c,b,a),!(void 0!==d&&(a.exports=d))}(this)}).call(b,c(28)(a),function(){return this}())},function(a,b){a.exports=function(a){return a.webpackPolyfill||(a.deprecate=function(){},a.paths=[],a.children=[],a.webpackPolyfill=1),a}},function(a,b){!function(){"use strict";for(var a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",c=new Uint8Array(256),d=0;d<a.length;d++)c[a.charCodeAt(d)]=d;b.encode=function(b){var c,d=new Uint8Array(b),e=d.length,f="";for(c=0;c<e;c+=3)f+=a[d[c]>>2],f+=a[(3&d[c])<<4|d[c+1]>>4],f+=a[(15&d[c+1])<<2|d[c+2]>>6],f+=a[63&d[c+2]];return e%3===2?f=f.substring(0,f.length-1)+"=":e%3===1&&(f=f.substring(0,f.length-2)+"=="),f},b.decode=function(a){var b,d,e,f,g,h=.75*a.length,i=a.length,j=0;"="===a[a.length-1]&&(h--,"="===a[a.length-2]&&h--);var k=new ArrayBuffer(h),l=new Uint8Array(k);for(b=0;b<i;b+=4)d=c[a.charCodeAt(b)],e=c[a.charCodeAt(b+1)],f=c[a.charCodeAt(b+2)],g=c[a.charCodeAt(b+3)],l[j++]=d<<2|e>>4,l[j++]=(15&e)<<4|f>>2,l[j++]=(3&f)<<6|63&g;return k}}()},function(a,b){(function(b){function c(a){for(var b=0;b<a.length;b++){var c=a[b];if(c.buffer instanceof ArrayBuffer){var d=c.buffer;if(c.byteLength!==d.byteLength){var e=new Uint8Array(c.byteLength);e.set(new Uint8Array(d,c.byteOffset,c.byteLength)),d=e.buffer}a[b]=d}}}function d(a,b){b=b||{};var d=new f;c(a);for(var e=0;e<a.length;e++)d.append(a[e]);return b.type?d.getBlob(b.type):d.getBlob()}function e(a,b){return c(a),new Blob(a,b||{})}var f=b.BlobBuilder||b.WebKitBlobBuilder||b.MSBlobBuilder||b.MozBlobBuilder,g=function(){try{var a=new Blob(["hi"]);return 2===a.size}catch(b){return!1}}(),h=g&&function(){try{var a=new Blob([new Uint8Array([1,2])]);return 2===a.size}catch(b){return!1}}(),i=f&&f.prototype.append&&f.prototype.getBlob;a.exports=function(){return g?h?b.Blob:e:i?d:void 0}()}).call(b,function(){return this}())},function(a,b){b.encode=function(a){var b="";for(var c in a)a.hasOwnProperty(c)&&(b.length&&(b+="&"),b+=encodeURIComponent(c)+"="+encodeURIComponent(a[c]));return b},b.decode=function(a){for(var b={},c=a.split("&"),d=0,e=c.length;d<e;d++){var f=c[d].split("=");b[decodeURIComponent(f[0])]=decodeURIComponent(f[1])}return b}},function(a,b){a.exports=function(a,b){var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}},function(a,b){"use strict";function c(a){var b="";do b=g[a%h]+b,a=Math.floor(a/h);while(a>0);return b}function d(a){var b=0;for(k=0;k<a.length;k++)b=b*h+i[a.charAt(k)];return b}function e(){var a=c(+new Date);return a!==f?(j=0,f=a):a+"."+c(j++)}for(var f,g="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),h=64,i={},j=0,k=0;k<h;k++)i[g[k]]=k;e.encode=c,e.decode=d,a.exports=e},function(a,b,c){(function(b){function d(){}function e(a){f.call(this,a),this.query=this.query||{},h||(b.___eio||(b.___eio=[]),h=b.___eio),this.index=h.length;var c=this;h.push(function(a){c.onData(a)}),this.query.j=this.index,b.document&&b.addEventListener&&b.addEventListener("beforeunload",function(){c.script&&(c.script.onerror=d)},!1)}var f=c(21),g=c(32);a.exports=e;var h,i=/\n/g,j=/\\n/g;g(e,f),e.prototype.supportsBinary=!1,e.prototype.doClose=function(){this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),this.form&&(this.form.parentNode.removeChild(this.form),this.form=null,this.iframe=null),f.prototype.doClose.call(this)},e.prototype.doPoll=function(){var a=this,b=document.createElement("script");this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),b.async=!0,b.src=this.uri(),b.onerror=function(b){a.onError("jsonp poll error",b)};var c=document.getElementsByTagName("script")[0];c?c.parentNode.insertBefore(b,c):(document.head||document.body).appendChild(b),this.script=b;var d="undefined"!=typeof navigator&&/gecko/i.test(navigator.userAgent);d&&setTimeout(function(){var a=document.createElement("iframe");document.body.appendChild(a),document.body.removeChild(a)},100)},e.prototype.doWrite=function(a,b){function c(){d(),b()}function d(){if(e.iframe)try{e.form.removeChild(e.iframe)}catch(a){e.onError("jsonp polling iframe removal error",a)}try{var b='<iframe src="javascript:0" name="'+e.iframeId+'">';f=document.createElement(b)}catch(a){f=document.createElement("iframe"),f.name=e.iframeId,f.src="javascript:0"}f.id=e.iframeId,e.form.appendChild(f),e.iframe=f}var e=this;if(!this.form){var f,g=document.createElement("form"),h=document.createElement("textarea"),k=this.iframeId="eio_iframe_"+this.index;g.className="socketio",g.style.position="absolute",g.style.top="-1000px",g.style.left="-1000px",g.target=k,g.method="POST",g.setAttribute("accept-charset","utf-8"),h.name="d",g.appendChild(h),document.body.appendChild(g),this.form=g,this.area=h}this.form.action=this.uri(),d(),a=a.replace(j,"\\\n"),this.area.value=a.replace(i,"\\n");try{this.form.submit()}catch(l){}this.iframe.attachEvent?this.iframe.onreadystatechange=function(){"complete"===e.iframe.readyState&&c()}:this.iframe.onload=c}}).call(b,function(){return this}())},function(a,b,c){(function(b){function d(a){var b=a&&a.forceBase64;b&&(this.supportsBinary=!1),this.perMessageDeflate=a.perMessageDeflate,this.usingBrowserWebSocket=l&&!a.forceNode,this.protocols=a.protocols,this.usingBrowserWebSocket||(n=e),f.call(this,a)}var e,f=c(22),g=c(23),h=c(31),i=c(32),j=c(33),k=c(3)("engine.io-client:websocket"),l=b.WebSocket||b.MozWebSocket;if("undefined"==typeof window)try{e=c(36)}catch(m){}var n=l;n||"undefined"!=typeof window||(n=e),a.exports=d,i(d,f),d.prototype.name="websocket",d.prototype.supportsBinary=!0,d.prototype.doOpen=function(){if(this.check()){var a=this.uri(),b=this.protocols,c={agent:this.agent,perMessageDeflate:this.perMessageDeflate};c.pfx=this.pfx,c.key=this.key,c.passphrase=this.passphrase,c.cert=this.cert,c.ca=this.ca,c.ciphers=this.ciphers,c.rejectUnauthorized=this.rejectUnauthorized,this.extraHeaders&&(c.headers=this.extraHeaders),this.localAddress&&(c.localAddress=this.localAddress);try{this.ws=this.usingBrowserWebSocket?b?new n(a,b):new n(a):new n(a,b,c)}catch(d){return this.emit("error",d)}void 0===this.ws.binaryType&&(this.supportsBinary=!1),this.ws.supports&&this.ws.supports.binary?(this.supportsBinary=!0,this.ws.binaryType="nodebuffer"):this.ws.binaryType="arraybuffer",this.addEventListeners()}},d.prototype.addEventListeners=function(){var a=this;this.ws.onopen=function(){a.onOpen()},this.ws.onclose=function(){a.onClose()},this.ws.onmessage=function(b){a.onData(b.data)},this.ws.onerror=function(b){a.onError("websocket error",b)}},d.prototype.write=function(a){function c(){d.emit("flush"),setTimeout(function(){d.writable=!0,d.emit("drain")},0)}var d=this;this.writable=!1;for(var e=a.length,f=0,h=e;f<h;f++)!function(a){g.encodePacket(a,d.supportsBinary,function(f){if(!d.usingBrowserWebSocket){var g={};if(a.options&&(g.compress=a.options.compress),d.perMessageDeflate){var h="string"==typeof f?b.Buffer.byteLength(f):f.length;h<d.perMessageDeflate.threshold&&(g.compress=!1)}}try{d.usingBrowserWebSocket?d.ws.send(f):d.ws.send(f,g)}catch(i){k("websocket closed before onclose event")}--e||c()})}(a[f])},d.prototype.onClose=function(){f.prototype.onClose.call(this)},d.prototype.doClose=function(){"undefined"!=typeof this.ws&&this.ws.close()},d.prototype.uri=function(){var a=this.query||{},b=this.secure?"wss":"ws",c="";this.port&&("wss"===b&&443!==Number(this.port)||"ws"===b&&80!==Number(this.port))&&(c=":"+this.port),this.timestampRequests&&(a[this.timestampParam]=j()),this.supportsBinary||(a.b64=1),a=h.encode(a),a.length&&(a="?"+a);var d=this.hostname.indexOf(":")!==-1;return b+"://"+(d?"["+this.hostname+"]":this.hostname)+c+this.path+a},d.prototype.check=function(){return!(!n||"__initialize"in n&&this.name===d.prototype.name)}}).call(b,function(){return this}())},function(a,b){},function(a,b){var c=[].indexOf;a.exports=function(a,b){if(c)return a.indexOf(b);for(var d=0;d<a.length;++d)if(a[d]===b)return d;return-1}},function(a,b){(function(b){var c=/^[\],:{}\s]*$/,d=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,e=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,f=/(?:^|:|,)(?:\s*\[)+/g,g=/^\s+/,h=/\s+$/;a.exports=function(a){return"string"==typeof a&&a?(a=a.replace(g,"").replace(h,""),b.JSON&&JSON.parse?JSON.parse(a):c.test(a.replace(d,"@").replace(e,"]").replace(f,""))?new Function("return "+a)():void 0):null}}).call(b,function(){return this}())},function(a,b,c){"use strict";function d(a,b,c){this.io=a,this.nsp=b,this.json=this,this.ids=0,this.acks={},this.receiveBuffer=[],this.sendBuffer=[],this.connected=!1,this.disconnected=!0,c&&c.query&&(this.query=c.query),this.io.autoConnect&&this.open()}var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},f=c(7),g=c(8),h=c(40),i=c(41),j=c(42),k=c(3)("socket.io-client:socket"),l=c(31);a.exports=b=d;var m={connect:1,connect_error:1,connect_timeout:1,connecting:1,disconnect:1,error:1,reconnect:1,reconnect_attempt:1,reconnect_failed:1,reconnect_error:1,reconnecting:1,ping:1,pong:1},n=g.prototype.emit;g(d.prototype),d.prototype.subEvents=function(){if(!this.subs){var a=this.io;this.subs=[i(a,"open",j(this,"onopen")),i(a,"packet",j(this,"onpacket")),i(a,"close",j(this,"onclose"))]}},d.prototype.open=d.prototype.connect=function(){return this.connected?this:(this.subEvents(),this.io.open(),"open"===this.io.readyState&&this.onopen(),this.emit("connecting"),this)},d.prototype.send=function(){var a=h(arguments);return a.unshift("message"),this.emit.apply(this,a),this},d.prototype.emit=function(a){if(m.hasOwnProperty(a))return n.apply(this,arguments),this;var b=h(arguments),c={type:f.EVENT,data:b};return c.options={},c.options.compress=!this.flags||!1!==this.flags.compress,"function"==typeof b[b.length-1]&&(k("emitting packet with ack id %d",this.ids),this.acks[this.ids]=b.pop(),c.id=this.ids++),this.connected?this.packet(c):this.sendBuffer.push(c),delete this.flags,this},d.prototype.packet=function(a){a.nsp=this.nsp,this.io.packet(a)},d.prototype.onopen=function(){if(k("transport is open - connecting"),"/"!==this.nsp)if(this.query){var a="object"===e(this.query)?l.encode(this.query):this.query;k("sending connect packet with query %s",a),this.packet({type:f.CONNECT,query:a})}else this.packet({type:f.CONNECT})},d.prototype.onclose=function(a){k("close (%s)",a),this.connected=!1,this.disconnected=!0,delete this.id,this.emit("disconnect",a)},d.prototype.onpacket=function(a){if(a.nsp===this.nsp)switch(a.type){case f.CONNECT:this.onconnect();break;case f.EVENT:this.onevent(a);break;case f.BINARY_EVENT:this.onevent(a);break;case f.ACK:this.onack(a);break;case f.BINARY_ACK:this.onack(a);break;case f.DISCONNECT:this.ondisconnect();break;case f.ERROR:this.emit("error",a.data)}},d.prototype.onevent=function(a){var b=a.data||[];k("emitting event %j",b),null!=a.id&&(k("attaching ack callback to event"),b.push(this.ack(a.id))),this.connected?n.apply(this,b):this.receiveBuffer.push(b)},d.prototype.ack=function(a){var b=this,c=!1;return function(){if(!c){c=!0;var d=h(arguments);k("sending ack %j",d),b.packet({type:f.ACK,id:a,data:d})}}},d.prototype.onack=function(a){var b=this.acks[a.id];"function"==typeof b?(k("calling ack %s with %j",a.id,a.data),b.apply(this,a.data),delete this.acks[a.id]):k("bad ack %s",a.id)},d.prototype.onconnect=function(){this.connected=!0,this.disconnected=!1,this.emit("connect"),this.emitBuffered()},d.prototype.emitBuffered=function(){var a;for(a=0;a<this.receiveBuffer.length;a++)n.apply(this,this.receiveBuffer[a]);for(this.receiveBuffer=[],a=0;a<this.sendBuffer.length;a++)this.packet(this.sendBuffer[a]);this.sendBuffer=[]},d.prototype.ondisconnect=function(){k("server disconnect (%s)",this.nsp),this.destroy(),this.onclose("io server disconnect")},d.prototype.destroy=function(){if(this.subs){for(var a=0;a<this.subs.length;a++)this.subs[a].destroy();this.subs=null}this.io.destroy(this)},d.prototype.close=d.prototype.disconnect=function(){return this.connected&&(k("performing disconnect (%s)",this.nsp),this.packet({type:f.DISCONNECT})),this.destroy(),this.connected&&this.onclose("io client disconnect"),this},d.prototype.compress=function(a){return this.flags=this.flags||{},this.flags.compress=a,this}},function(a,b){function c(a,b){var c=[];b=b||0;for(var d=b||0;d<a.length;d++)c[d-b]=a[d];return c}a.exports=c},function(a,b){"use strict";function c(a,b,c){return a.on(b,c),{destroy:function(){a.removeListener(b,c)}}}a.exports=c},function(a,b){var c=[].slice;a.exports=function(a,b){if("string"==typeof b&&(b=a[b]),"function"!=typeof b)throw new Error("bind() requires a function");var d=c.call(arguments,2);return function(){return b.apply(a,d.concat(c.call(arguments)))}}},function(a,b){function c(a){a=a||{},this.ms=a.min||100,this.max=a.max||1e4,this.factor=a.factor||2,this.jitter=a.jitter>0&&a.jitter<=1?a.jitter:0,this.attempts=0}a.exports=c,c.prototype.duration=function(){var a=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var b=Math.random(),c=Math.floor(b*this.jitter*a);a=0==(1&Math.floor(10*b))?a-c:a+c}return 0|Math.min(a,this.max)},c.prototype.reset=function(){this.attempts=0},c.prototype.setMin=function(a){this.ms=a},c.prototype.setMax=function(a){this.max=a},c.prototype.setJitter=function(a){this.jitter=a}}])});; + +////////////////////////////////////////////////////////////////////////////////////// + // // + // ███████╗ █████╗ ██╗██╗ ███████╗ ██╗ ██████╗ ██╗███████╗ // + // ██╔â•â•â•â•â•██╔â•â•██╗██║██║ ██╔â•â•â•â•╠██║██╔â•â•â•██╗ ██║██╔â•â•â•â•â• // + // ███████╗███████║██║██║ ███████╗ ██║██║ ██║ ██║███████╗ // + // ╚â•â•â•â•██║██╔â•â•██║██║██║ ╚â•â•â•â•██║ ██║██║ ██║ ██ ██║╚â•â•â•â•██║ // + // ███████║██║ ██║██║███████╗███████║██╗██║╚██████╔â•██╗╚█████╔â•███████║ // + // ╚â•â•â•â•â•â•â•╚â•╠╚â•â•╚â•â•╚â•â•â•â•â•â•â•╚â•â•â•â•â•â•â•╚â•â•╚â•╠╚â•â•â•â•â•╠╚â•╠╚â•â•â•â•╠╚â•â•â•â•â•â•â• // + // // + // ╦╔â•╗╦ ╦╔â•â•—â•”â•â•—â•”â•╗╦â•╗╦╔â•╗╔╦╗ â•”â•╗╦ ╦╔â•╗╔╗╔╔╦╗ â•”â•╗╔╦╗╦╔╠// + // â•‘â• â•╣╚╗╔â•â• â•╣╚â•â•—â•‘ ╠╦â•â•‘â• â•â• â•‘ â•‘ â•‘ â•‘â•‘â•£ â•‘â•‘â•‘ â•‘ ╚â•â•— â•‘â•‘â• â•©â•— // + // ╚â•â•© â•© ╚╠╩ ╩╚â•â•╚â•â•╩╚â•â•©â•© â•© ╚â•â•â•©â•â•╩╚â•â•â•╚╠╩ ╚â•â•â•â•©â•â•© â•© // + // ┌─â”┌─â”┬─┠┌â”┌┌─â”┌┬â”┌─┠┬┌─┠┌─â”┌â”┌┌┬┠┌┬â”┬ ┬┌─┠┌┠┬─â”┌─â”┬ ┬┌─â”┌─â”┬─┠// + // ├┤ │ │├┬┘ ││││ │ ││├┤ │└─┠├─┤│││ ││ │ ├─┤├┤ ├┴â”├┬┘│ ││││└─â”├┤ ├┬┘ // + // â”” └─┘┴└─ ┘└┘└─┘─┴┘└─┘o└┘└─┘ â”´ ┴┘└┘─┴┘ â”´ â”´ ┴└─┘ └─┘┴└─└─┘└┴┘└─┘└─┘┴└─ // + // // +////////////////////////////////////////////////////////////////////////////////////// + +/** + * sails.io.js + * v1.2.1 + * ------------------------------------------------------------------------ + * JavaScript Client (SDK) for communicating with Sails. + * + * Note that this script is completely optional, but it is handy if you're + * using WebSockets from the browser to talk to your Sails server. + * + * For tips and documentation, visit: + * http://sailsjs.com/documentation/reference/web-sockets/socket-client + * ------------------------------------------------------------------------ + * + * This file allows you to send and receive socket.io messages to & from Sails + * by simulating a REST client interface on top of socket.io. It models its API + * after the $.ajax pattern from jQuery you might already be familiar with. + * + * So if you're switching from using AJAX to sockets, instead of: + * `$.post( url, [data], [cb] )` + * + * You would use: + * `socket.post( url, [data], [cb] )` + */ + + +(function() { + + + // ██████╗ ██████╗ ███╗ ██╗███████╗████████╗ █████╗ ███╗ ██╗████████╗███████╗ + // ██╔â•â•â•â•â•██╔â•â•â•██╗████╗ ██║██╔â•â•â•â•â•╚â•â•██╔â•â•â•██╔â•â•██╗████╗ ██║╚â•â•██╔â•â•â•██╔â•â•â•â•â• + // ██║ ██║ ██║██╔██╗ ██║███████╗ ██║ ███████║██╔██╗ ██║ ██║ ███████╗ + // ██║ ██║ ██║██║╚██╗██║╚â•â•â•â•██║ ██║ ██╔â•â•██║██║╚██╗██║ ██║ ╚â•â•â•â•██║ + // ╚██████╗╚██████╔â•██║ ╚████║███████║ ██║ ██║ ██║██║ ╚████║ ██║ ███████║ + // ╚â•â•â•â•â•╠╚â•â•â•â•â•╠╚â•╠╚â•â•â•â•╚â•â•â•â•â•â•╠╚â•╠╚â•╠╚â•â•╚â•╠╚â•â•â•╠╚â•╠╚â•â•â•â•â•â•â• + // + + + /** + * Constant containing the names of all available options + * for individual sockets. + * + * @type {Array} + */ + var SOCKET_OPTIONS = [ + 'useCORSRouteToGetCookie', + 'url', + 'multiplex', + 'transports', + 'query', + 'path', + 'headers', + 'initialConnectionHeaders', + 'reconnection', + 'reconnectionAttempts', + 'reconnectionDelay', + 'reconnectionDelayMax', + 'rejectUnauthorized', + 'randomizationFactor', + 'timeout' + ]; + + + /** + * Constant containing the names of properties on `io.sails` which + * may be configured using HTML attributes on the script tag which + * loaded this file. + * + * @type {Array} + * + * (this is unused if loading from node.js) + */ + var CONFIGURABLE_VIA_HTML_ATTR = [ + 'autoConnect', + 'reconnection', + 'environment', + 'headers', + 'url', + 'transports', + 'path' + ]; + + + + + /** + * Constant containing the names of querystring + * parameters sent when connecting any SailsSocket. + * + * @type {Dictionary} + */ + var CONNECTION_METADATA_PARAMS = { + version: '__sails_io_sdk_version', + platform: '__sails_io_sdk_platform', + language: '__sails_io_sdk_language' + }; + + + /** + * Constant containing metadata about the platform, language, and + * current version of this SDK. + * + * @type {Dictionary} + */ + var SDK_INFO = { + version: '1.2.1', // <-- pulled automatically from package.json, do not change! + language: 'javascript', + platform: (function (){ + if (typeof module === 'object' && typeof module.exports !== 'undefined') { + return 'node'; + } + else { + return 'browser'; + } + })() + }; + + // Build `versionString` (a querystring snippet) by + // combining SDK_INFO and CONNECTION_METADATA_PARAMS. + SDK_INFO.versionString = + CONNECTION_METADATA_PARAMS.version + '=' + SDK_INFO.version + '&' + + CONNECTION_METADATA_PARAMS.platform + '=' + SDK_INFO.platform + '&' + + CONNECTION_METADATA_PARAMS.language + '=' + SDK_INFO.language; + + + + + // █████╗ ██████╗ ███████╗ ██████╗ ██████╗ ██████╗ ██╗ ██╗████████╗███╗ ███╗██╗ + // ██╔â•â•██╗██╔â•â•██╗██╔â•â•â•â•â•██╔â•â•â•██╗██╔â•â•██╗██╔â•â•██╗ ██║ ██║╚â•â•██╔â•â•â•████╗ ████║██║ + // ███████║██████╔â•███████╗██║ ██║██████╔â•██████╔╠███████║ ██║ ██╔████╔██║██║ + // ██╔â•â•██║██╔â•â•██╗╚â•â•â•â•██║██║ ██║██╔â•â•██╗██╔â•â•██╗ ██╔â•â•██║ ██║ ██║╚██╔â•██║██║ + // ██║ ██║██████╔â•███████║╚██████╔â•██║ ██║██████╔╠██║ ██║ ██║ ██║ ╚â•╠██║███████╗ + // ╚â•╠╚â•â•╚â•â•â•â•â•╠╚â•â•â•â•â•â•╠╚â•â•â•â•â•╠╚â•╠╚â•â•╚â•â•â•â•â•╠╚â•╠╚â•╠╚â•╠╚â•╠╚â•â•╚â•â•â•â•â•â•â• + // + // █████╗ ████████╗████████╗██████╗ ██╗██████╗ ██╗ ██╗████████╗███████╗███████╗ + // ██╔â•â•██╗╚â•â•██╔â•â•â•╚â•â•██╔â•â•â•██╔â•â•██╗██║██╔â•â•██╗██║ ██║╚â•â•██╔â•â•â•██╔â•â•â•â•â•██╔â•â•â•â•â• + // ███████║ ██║ ██║ ██████╔â•██║██████╔â•██║ ██║ ██║ █████╗ ███████╗ + // ██╔â•â•██║ ██║ ██║ ██╔â•â•██╗██║██╔â•â•██╗██║ ██║ ██║ ██╔â•â•╠╚â•â•â•â•██║ + // ██║ ██║ ██║ ██║ ██║ ██║██║██████╔â•╚██████╔╠██║ ███████╗███████║ + // ╚â•╠╚â•╠╚â•╠╚â•╠╚â•╠╚â•â•╚â•â•╚â•â•â•â•â•╠╚â•â•â•â•â•╠╚â•╠╚â•â•â•â•â•â•â•╚â•â•â•â•â•â•â• + // + // ███████╗██████╗ ██████╗ ███╗ ███╗ ██╗███████╗ ██████╗██████╗ ██╗██████╗ ████████╗██╗ + // ██╔â•â•â•â•â•██╔â•â•██╗██╔â•â•â•██╗████╗ ████║ ██╔â•██╔â•â•â•â•â•██╔â•â•â•â•â•██╔â•â•██╗██║██╔â•â•██╗╚â•â•██╔â•â•â•╚██╗ + // █████╗ ██████╔â•██║ ██║██╔████╔██║ ██╔╠███████╗██║ ██████╔â•██║██████╔╠██║ ╚██╗ + // ██╔â•â•╠██╔â•â•██╗██║ ██║██║╚██╔â•██║ ╚██╗ ╚â•â•â•â•██║██║ ██╔â•â•██╗██║██╔â•â•â•╠██║ ██╔╠+ // ██║ ██║ ██║╚██████╔â•██║ ╚â•╠██║ ╚██╗███████║╚██████╗██║ ██║██║██║ ██║ ██╔╠+ // ╚â•╠╚â•╠╚â•╠╚â•â•â•â•â•╠╚â•╠╚â•╠╚â•â•╚â•â•â•â•â•â•╠╚â•â•â•â•â•â•╚â•╠╚â•â•╚â•â•╚â•╠╚â•╠╚â•â• + // + // + // If available, grab the DOM element for the script tag which imported this file. + // (skip this if this SDK is being used outside of the DOM, i.e. in a Node process) + // + // This is used below to parse client-side sails.io.js configuration encoded as + // HTML attributes, as well as grabbing hold of the URL from whence the SDK was fetched. + var thisScriptTag = (function() { + if ( + typeof window !== 'object' || + typeof window.document !== 'object' || + typeof window.document.getElementsByTagName !== 'function' + ) { + return null; + } + + // Return the URL of the last script loaded (i.e. this one) + // (this must run before nextTick; see http://stackoverflow.com/a/2976714/486547) + var allScriptsCurrentlyInDOM = window.document.getElementsByTagName('script'); + return allScriptsCurrentlyInDOM[allScriptsCurrentlyInDOM.length - 1]; + })(); + + + // Variables to contain src URL and other script tag config (for use below). + var urlThisScriptWasFetchedFrom = ''; + var scriptTagConfig = {}; + + + if (thisScriptTag) { + // Save the URL that this script was fetched from. + urlThisScriptWasFetchedFrom = thisScriptTag.src; + + // Now parse the most common client-side configuration settings + // from the script tag where they may be encoded as HTML attributes. + // + // Any configuration which may be provided as an HTML attribute may + // also be provided prefixed with `data-`. This is for folks who + // need to support browsers that have issues with nonstandard + // HTML attributes (or if the idea of using nonstandard HTML attributes + // just creeps you out) + // + // If a `data-` prefixed attr is provided, it takes precedence. + // (this is so that if you are already using one of these HTML + // attrs for some reason, you can keep it as-is and override + // it using `data-`. If you are using the `data-` prefixed version + // for some other purpose... well, in that case you'll just have to + // configure programmatically using `io.sails` instead.) + CONFIGURABLE_VIA_HTML_ATTR.forEach(function (configKey){ + + scriptTagConfig[configKey] = (function (){ + + // Support 'data-' prefixed or normal attributes. + // (prefixed versions take precedence if provided) + var htmlAttrVal = thisScriptTag.getAttribute( 'data-'+configKey ); + if (!htmlAttrVal) { + htmlAttrVal = thisScriptTag.getAttribute( configKey ); + } + + // The HTML attribute value should always be a string or `null`. + // We'll try to parse it as JSON and use that, but worst case fall back + // to the default situation of it being a string. + if (typeof htmlAttrVal === 'string') { + try { return JSON.parse(htmlAttrVal); } catch (e) { return htmlAttrVal; } + } + // If `null` was returned from getAttribute(), it means that the HTML attribute + // was not specified, so we treat it as undefined (which will cause the property + // to be removed below) + else if (htmlAttrVal === null) { + return undefined; + } + // Any other contingency shouldn't be possible: + // - if no quotes are used in the HTML attribute, it still comes in as a string. + // - if no RHS is provided for the attribute, it still comes in as "" (empty string) + // (but we still handle this with an explicit error just in case--for debugging and support purposes) + else throw new Error('sails.io.js :: Unexpected/invalid script tag configuration for `'+configKey+'`: `'+htmlAttrVal+'` (a `'+typeof htmlAttrVal+'`). Should be a string.'); + })(); + + if (scriptTagConfig[configKey] === undefined){ + delete scriptTagConfig[configKey]; + } + }); + + + + // Now that they've been parsed, do an extremely lean version of + // logical type validation/coercion of provided values. + ////////////////////////////////////////////////////////////////// + + // `autoConnect` + if (typeof scriptTagConfig.autoConnect !== 'undefined') { + if (scriptTagConfig.autoConnect === '') { + // Special case for empty string. It means `true` (see above). + scriptTagConfig.autoConnect = true; + } + else if (typeof scriptTagConfig.autoConnect !== 'boolean') { + throw new Error('sails.io.js :: Unexpected/invalid configuration for `autoConnect` provided in script tag: `'+scriptTagConfig.autoConnect+'` (a `'+typeof scriptTagConfig.autoConnect+'`). Should be a boolean.'); + } + } + + + // `environment` + if (typeof scriptTagConfig.environment !== 'undefined') { + if (typeof scriptTagConfig.environment !== 'string') { + throw new Error('sails.io.js :: Unexpected/invalid configuration for `environment` provided in script tag: `'+scriptTagConfig.environment+'` (a `'+typeof scriptTagConfig.environment+'`). Should be a string.'); + } + } + + + // `headers` + if (typeof scriptTagConfig.headers !== 'undefined') { + if (typeof scriptTagConfig.headers !== 'object' || Array.isArray(scriptTagConfig.headers)) { + throw new Error('sails.io.js :: Unexpected/invalid configuration for `headers` provided in script tag: `'+scriptTagConfig.headers+'` (a `'+typeof scriptTagConfig.headers+'`). Should be a JSON-compatible dictionary (i.e. `{}`). Don\'t forget those double quotes (""), even on key names! Use single quotes (\'\') to wrap the HTML attribute value; e.g. `headers=\'{"X-Auth": "foo"}\'`'); + } + } + + + // `url` + if (typeof scriptTagConfig.url !== 'undefined') { + if (typeof scriptTagConfig.url !== 'string') { + throw new Error('sails.io.js :: Unexpected/invalid configuration for `url` provided in script tag: `'+scriptTagConfig.url+'` (a `'+typeof scriptTagConfig.url+'`). Should be a string.'); + } + } + + // OTHER `io.sails` options are NOT CURRENTLY SUPPORTED VIA HTML ATTRIBUTES. + } + + + + + // Grab a reference to the global socket.io client (if one is available). + // This is used via closure below to determine which `io` to use when the + // socket.io client instance (`io`) is augmented to become the Sails client + // SDK instance (still `io`). + var _existingGlobalSocketIO = (typeof io !== 'undefined') ? io : undefined; + + + + + ////////////////////////////////////////////////////////////// + ///// + ///// NOW FOR BUNCHES OF: + ///// - PRIVATE FUNCTION DEFINITIONS + ///// - CONSTRUCTORS + ///// - AND METHODS + ///// + ////////////////////////////////////////////////////////////// + // + + + + // ███████╗ █████╗ ██╗██╗ ███████╗ ██╗ ██████╗ ██████╗██╗ ██╗███████╗███╗ ██╗████████╗ + // ██╔â•â•â•â•â•██╔â•â•██╗██║██║ ██╔â•â•â•â•╠██║██╔â•â•â•██╗ ██╔â•â•â•â•â•██║ ██║██╔â•â•â•â•â•████╗ ██║╚â•â•██╔â•â•â• + // ███████╗███████║██║██║ ███████╗█████╗██║██║ ██║█████╗██║ ██║ ██║█████╗ ██╔██╗ ██║ ██║ + // ╚â•â•â•â•██║██╔â•â•██║██║██║ ╚â•â•â•â•██║╚â•â•â•â•â•██║██║ ██║╚â•â•â•â•â•██║ ██║ ██║██╔â•â•╠██║╚██╗██║ ██║ + // ███████║██║ ██║██║███████╗███████║ ██║╚██████╔╠╚██████╗███████╗██║███████╗██║ ╚████║ ██║ + // ╚â•â•â•â•â•â•â•╚â•╠╚â•â•╚â•â•╚â•â•â•â•â•â•â•╚â•â•â•â•â•â•╠╚â•╠╚â•â•â•â•â•╠╚â•â•â•â•â•â•╚â•â•â•â•â•â•â•╚â•â•╚â•â•â•â•â•â•â•╚â•╠╚â•â•â•╠╚â•â• + // + + /** + * SailsIOClient() + * + * Augment the provided Socket.io client object (`io`) with methods for + * talking and listening to one or more Sails backend(s). If no `io` was + * provided (i.e. in a browser setting), then attempt to use the global. + * + * This absorbs implicit `io.sails` configuration, sets a timer for + * automatically connecting a socket (if `io.sails.autoConnect` is enabled) + * and returns the augmented `io`. + * + * Note: + * The automatically-connected socket is exposed as `io.socket`. If this + * socket attempts to bind event listeners or send requests before it is + * connected, it will be queued up and replayed when the connection is + * successfully opened. + * + * @param {SocketIO} io + * @returns {SailsIOClient} [also called `io`] + */ + + function SailsIOClient(_providedSocketIO) { + + // First, determine which `io` we're augmenting. + // + // Prefer the passed-in `io` instance, but fall back to the + // global one if we've got it. + var io; + if (_providedSocketIO) { + io = _providedSocketIO; + } + else { + io = _existingGlobalSocketIO; + } + // (note that for readability, we deliberately do not short circuit or use the tertiary operator above) + + + // If a socket.io client (`io`) is not available, none of this will work. + if (!io) { + // If node: + if (SDK_INFO.platform === 'node') { + throw new Error('No socket.io client available. When requiring `sails.io.js` from Node.js, a socket.io client (`io`) must be passed in; e.g.:\n```\nvar io = require(\'sails.io.js\')( require(\'socket.io-client\') )\n```\n(see https://github.com/balderdashy/sails.io.js/tree/master/test for more examples)'); + } + // Otherwise, this is a web browser: + else { + throw new Error('The Sails socket SDK depends on the socket.io client, but the socket.io global (`io`) was not available when `sails.io.js` loaded. Normally, the socket.io client code is bundled with sails.io.js, so something is a little off. Please check to be sure this version of `sails.io.js` has the minified Socket.io client at the top of the file.'); + } + } + + // If the chosen socket.io client (`io`) has ALREADY BEEN AUGMENTED by this SDK, + // (i.e. if it already has a `.sails` property) then throw an error. + if (io.sails) { + // If node: + if (SDK_INFO.platform === 'node') { + throw new Error('The provided socket.io client (`io`) has already been augmented into a Sails socket SDK instance (it has `io.sails`).'); + } + // Otherwise, this is a web browser: + else { + throw new Error('The socket.io client (`io`) has already been augmented into a Sails socket SDK instance. Usually, this means you are bringing `sails.io.js` onto the page more than once.'); + } + } + + + /** + * A little logger for this library to use internally. + * Basically just a wrapper around `console.log` with + * support for feature-detection. + * + * @api private + * @factory + */ + function LoggerFactory(options) { + options = options || { + prefix: true + }; + + // If `console.log` is not accessible, `log` is a noop. + if ( + typeof console !== 'object' || + typeof console.log !== 'function' || + typeof console.log.bind !== 'function' + ) { + return function noop() {}; + } + + return function log() { + var args = Array.prototype.slice.call(arguments); + + // All logs are disabled when `io.sails.environment = 'production'`. + if (io.sails.environment === 'production') return; + + // Add prefix to log messages (unless disabled) + var PREFIX = ''; + if (options.prefix) { + args.unshift(PREFIX); + } + + // Call wrapped logger + console.log + .bind(console) + .apply(this, args); + }; + }//</LoggerFactory> + + // Create a private logger instance + var consolog = LoggerFactory(); + consolog.noPrefix = LoggerFactory({ + prefix: false + }); + + + + /** + * What is the `requestQueue`? + * + * The request queue is used to simplify app-level connection logic-- + * i.e. so you don't have to wait for the socket to be connected + * to start trying to synchronize data. + * + * @api private + * @param {SailsSocket} socket + */ + + function runRequestQueue (socket) { + var queue = socket.requestQueue; + + if (!queue) return; + for (var i in queue) { + + // Double-check that `queue[i]` will not + // inadvertently discover extra properties attached to the Object + // and/or Array prototype by other libraries/frameworks/tools. + // (e.g. Ember does this. See https://github.com/balderdashy/sails.io.js/pull/5) + var isSafeToDereference = ({}).hasOwnProperty.call(queue, i); + if (isSafeToDereference) { + // Get the arguments that were originally made to the "request" method + var requestArgs = queue[i]; + // Call the request method again in the context of the socket, with the original args + socket.request.apply(socket, requestArgs); + } + } + + // Now empty the queue to remove it as a source of additional complexity. + socket.requestQueue = null; + } + + + + /** + * Send a JSONP request. + * + * @param {Object} opts [optional] + * @param {Function} cb + * @return {XMLHttpRequest} + */ + + function jsonp(opts, cb) { + opts = opts || {}; + + if (typeof window === 'undefined') { + // FUTURE: refactor node usage to live in here + return cb(); + } + + var scriptEl = document.createElement('script'); + window._sailsIoJSConnect = function(response) { + // In rare circumstances our script may have been vaporised. + // Remove it, but only if it still exists + // https://github.com/balderdashy/sails.io.js/issues/92 + if (scriptEl && scriptEl.parentNode) { + scriptEl.parentNode.removeChild(scriptEl); + } + + cb(response); + }; + scriptEl.src = opts.url; + document.getElementsByTagName('head')[0].appendChild(scriptEl); + + } + + + + + // ██╗███████╗ ██████╗ ███╗ ██╗ ██╗ ██╗███████╗██████╗ ███████╗ ██████╗ ██████╗██╗ ██╗███████╗████████╗ + // ██║██╔â•â•â•â•â•██╔â•â•â•██╗████╗ ██║ ██║ ██║██╔â•â•â•â•â•██╔â•â•██╗██╔â•â•â•â•â•██╔â•â•â•██╗██╔â•â•â•â•â•██║ ██╔â•██╔â•â•â•â•â•╚â•â•██╔â•â•â• + // ██║███████╗██║ ██║██╔██╗ ██║█████╗██║ █╗ ██║█████╗ ██████╔â•███████╗██║ ██║██║ █████╔╠█████╗ ██║ + // ██ ██║╚â•â•â•â•██║██║ ██║██║╚██╗██║╚â•â•â•â•â•██║███╗██║██╔â•â•╠██╔â•â•██╗╚â•â•â•â•██║██║ ██║██║ ██╔â•██╗ ██╔â•â•╠██║ + // ╚█████╔â•███████║╚██████╔â•██║ ╚████║ ╚███╔███╔â•███████╗██████╔â•███████║╚██████╔â•╚██████╗██║ ██╗███████╗ ██║ + // ╚â•â•â•â•╠╚â•â•â•â•â•â•╠╚â•â•â•â•â•╠╚â•╠╚â•â•â•╠╚â•â•â•╚â•â•╠╚â•â•â•â•â•â•â•╚â•â•â•â•â•╠╚â•â•â•â•â•â•╠╚â•â•â•â•â•╠╚â•â•â•â•â•â•╚â•╠╚â•â•╚â•â•â•â•â•â•╠╚â•â• + // + // ██████╗ ███████╗███████╗██████╗ ██████╗ ███╗ ██╗███████╗███████╗ ██╗ ██╗██╗ ██╗██████╗ ██╗ + // ██╔â•â•██╗██╔â•â•â•â•â•██╔â•â•â•â•â•██╔â•â•██╗██╔â•â•â•██╗████╗ ██║██╔â•â•â•â•â•██╔â•â•â•â•╠██╔╠██║██║ ██║██╔â•â•██╗╚██╗ + // ██████╔â•█████╗ ███████╗██████╔â•██║ ██║██╔██╗ ██║███████╗█████╗ ██║ ██║██║ █╗ ██║██████╔╠██║ + // ██╔â•â•██╗██╔â•â•╠╚â•â•â•â•██║██╔â•â•â•╠██║ ██║██║╚██╗██║╚â•â•â•â•██║██╔â•â•╠██║ ██ ██║██║███╗██║██╔â•â•██╗ ██║ + // ██║ ██║███████╗███████║██║ ╚██████╔â•██║ ╚████║███████║███████╗ ╚██╗╚█████╔â•╚███╔███╔â•██║ ██║██╔╠+ // ╚â•╠╚â•â•╚â•â•â•â•â•â•â•╚â•â•â•â•â•â•â•╚â•╠╚â•â•â•â•â•╠╚â•╠╚â•â•â•â•╚â•â•â•â•â•â•â•╚â•â•â•â•â•â•╠╚â•╠╚â•â•â•â•╠╚â•â•â•╚â•â•╠╚â•╠╚â•â•╚â•â• + // + + /** + * The JWR (JSON WebSocket Response) received from a Sails server. + * + * @api public + * @param {Object} responseCtx + * => :body + * => :statusCode + * => :headers + * + * @constructor + */ + + function JWR(responseCtx) { + this.body = responseCtx.body; + this.headers = responseCtx.headers || {}; + this.statusCode = (typeof responseCtx.statusCode === 'undefined') ? 200 : responseCtx.statusCode; + // FUTURE: Replace this typeof short-circuit with an assertion (statusCode should always be set) + + if (this.statusCode < 200 || this.statusCode >= 400) { + // Determine the appropriate error message. + var msg; + if (this.statusCode === 0) { + msg = 'The socket request failed.'; + } + else { + msg = 'Server responded with a ' + this.statusCode + ' status code'; + msg += ':\n```\n' + JSON.stringify(this.body, null, 2) + '\n```'; + // (^^Note that we should always be able to rely on socket.io to give us + // non-circular data here, so we don't have to worry about wrapping the + // above in a try...catch) + } + + // Now build and attach Error instance. + this.error = new Error(msg); + } + } + JWR.prototype.toString = function() { + return '[ResponseFromSails]' + ' -- ' + + 'Status: ' + this.statusCode + ' -- ' + + 'Headers: ' + this.headers + ' -- ' + + 'Body: ' + this.body; + }; + JWR.prototype.toPOJO = function() { + return { + body: this.body, + headers: this.headers, + statusCode: this.statusCode + }; + }; + JWR.prototype.pipe = function() { + // FUTURE: look at substack's stuff + return new Error('Client-side streaming support not implemented yet.'); + }; + + + + + // ███████╗███╗ ███╗██╗████████╗███████╗██████╗ ██████╗ ███╗ ███╗ ██╗██╗ + // ██╔â•â•â•â•â•████╗ ████║██║╚â•â•██╔â•â•â•██╔â•â•â•â•â•██╔â•â•██╗██╔â•â•â•██╗████╗ ████║██╔â•╚██╗ + // █████╗ ██╔████╔██║██║ ██║ █████╗ ██████╔â•██║ ██║██╔████╔██║██║ ██║ + // ██╔â•â•╠██║╚██╔â•██║██║ ██║ ██╔â•â•╠██╔â•â•██╗██║ ██║██║╚██╔â•██║██║ ██║ + // ███████╗███████╗██║ ╚â•╠██║██║ ██║ ██║ ██║ ██║╚██████╔â•██║ ╚â•╠██║╚██╗██╔╠+ // ╚â•â•â•â•â•â•â•╚â•â•â•â•â•â•â•╚â•╠╚â•â•╚â•╠╚â•╠╚â•╠╚â•╠╚â•╠╚â•â•â•â•â•╠╚â•╠╚â•╠╚â•â•╚â•â• + // + + /** + * @api private + * @param {SailsSocket} socket [description] + * @param {Object} requestCtx [description] + */ + + function _emitFrom(socket, requestCtx) { + + if (!socket._raw) { + throw new Error('Failed to emit from socket- raw SIO socket is missing.'); + } + + // Since callback is embedded in requestCtx, + // retrieve it and delete the key before continuing. + var cb = requestCtx.cb; + delete requestCtx.cb; + + // Name of the appropriate socket.io listener on the server + // ( === the request method or "verb", e.g. 'get', 'post', 'put', etc. ) + var sailsEndpoint = requestCtx.method; + + socket._raw.emit(sailsEndpoint, requestCtx, function serverResponded(responseCtx) { + + // Send back (emulatedHTTPBody, jsonWebSocketResponse) + if (cb && !requestCtx.calledCb) { + cb(responseCtx.body, new JWR(responseCtx)); + // Set flag indicating that callback was called, to avoid duplicate calls. + requestCtx.calledCb = true; + // Remove the callback from the list. + socket._responseCbs.splice(socket._responseCbs.indexOf(cb), 1); + // Remove the context from the list. + socket._requestCtxs.splice(socket._requestCtxs.indexOf(requestCtx), 1); + } + }); + } + + + + + + + + // ███████╗ █████╗ ██╗██╗ ███████╗███████╗ ██████╗ ██████╗██╗ ██╗███████╗████████╗ + // ██╔â•â•â•â•â•██╔â•â•██╗██║██║ ██╔â•â•â•â•â•██╔â•â•â•â•â•██╔â•â•â•██╗██╔â•â•â•â•â•██║ ██╔â•██╔â•â•â•â•â•╚â•â•██╔â•â•â• + // ███████╗███████║██║██║ ███████╗███████╗██║ ██║██║ █████╔╠█████╗ ██║ + // ╚â•â•â•â•██║██╔â•â•██║██║██║ ╚â•â•â•â•██║╚â•â•â•â•██║██║ ██║██║ ██╔â•██╗ ██╔â•â•╠██║ + // ███████║██║ ██║██║███████╗███████║███████║╚██████╔â•╚██████╗██║ ██╗███████╗ ██║ + // ╚â•â•â•â•â•â•â•╚â•╠╚â•â•╚â•â•╚â•â•â•â•â•â•â•╚â•â•â•â•â•â•â•╚â•â•â•â•â•â•╠╚â•â•â•â•â•╠╚â•â•â•â•â•â•╚â•╠╚â•â•╚â•â•â•â•â•â•╠╚â•â• + // + + /** + * SailsSocket + * + * A wrapper for an underlying Socket instance that communicates directly + * to the Socket.io server running inside of Sails. + * + * If no `socket` option is provied, SailsSocket will function as a mock. It will queue socket + * requests and event handler bindings, replaying them when the raw underlying socket actually + * connects. This is handy when we don't necessarily have the valid configuration to know + * WHICH SERVER to talk to yet, etc. It is also used by `io.socket` for your convenience. + * + * @constructor + * @api private + * + * ---------------------------------------------------------------------- + * Note: This constructor should not be used directly. To obtain a `SailsSocket` + * instance of your very own, run: + * ``` + * var mySocket = io.sails.connect(); + * ``` + * ---------------------------------------------------------------------- + */ + function SailsSocket (opts){ + var self = this; + opts = opts||{}; + + // Initialize private properties + self._isConnecting = false; + self._mightBeAboutToAutoConnect = false; + + // Set up connection options so that they can only be changed when socket is disconnected. + var _opts = {}; + SOCKET_OPTIONS.forEach(function(option) { + // Okay to change global headers while socket is connected + if (option == 'headers') {return;} + Object.defineProperty(self, option, { + get: function() { + if (option == 'url') { + return _opts[option] || (self._raw && self._raw.io && self._raw.io.uri); + } + return _opts[option]; + }, + set: function(value) { + // Don't allow value to be changed while socket is connected + if (self.isConnected() && io.sails.strict !== false && value != _opts[option]) { + throw new Error('Cannot change value of `' + option + '` while socket is connected.'); + } + // If socket is attempting to reconnect, stop it. + if (self._raw && self._raw.io && self._raw.io.reconnecting && !self._raw.io.skipReconnect) { + self._raw.io.skipReconnect = true; + consolog('Stopping reconnect; use .reconnect() to connect socket after changing options.'); + } + _opts[option] = value; + } + }); + }); + + // Absorb opts into SailsSocket instance + // See http://sailsjs.com/documentation/reference/web-sockets/socket-client/sails-socket/properties + // for description of options + SOCKET_OPTIONS.forEach(function(option) { + self[option] = opts[option]; + }); + + // Set up "eventQueue" to hold event handlers which have not been set on the actual raw socket yet. + self.eventQueue = {}; + + // Listen for special `parseError` event sent from sockets hook on the backend + // if an error occurs but a valid callback was not received from the client + // (i.e. so the server had no other way to send back the error information) + self.on('sails:parseError', function (err){ + consolog('Sails encountered an error parsing a socket message sent from this client, and did not have access to a callback function to respond with.'); + consolog('Error details:',err); + }); + + // FUTURE: + // Listen for a special private message on any connected that allows the server + // to set the environment (giving us 100% certainty that we guessed right) + // However, note that the `console.log`s called before and after connection + // are still forced to rely on our existing heuristics (to disable, tack #production + // onto the URL used to fetch this file.) + + }//</SailsSocket> + + + /** + * `SailsSocket.prototype._connect()` + * + * Begin connecting this socket to the server. + * + * @api private + */ + SailsSocket.prototype._connect = function (){ + var self = this; + + self._isConnecting = true; + + // Apply `io.sails` config as defaults + // (now that at least one tick has elapsed) + // See http://sailsjs.com/documentation/reference/web-sockets/socket-client/sails-socket/properties + // for description of options and default values + SOCKET_OPTIONS.forEach(function(option) { + if ('undefined' == typeof self[option]) { + self[option] = io.sails[option]; + } + }); + + // Headers that will be sent with the initial request to /socket.io (Node.js only) + self.extraHeaders = self.initialConnectionHeaders || {}; + + // For browser usage (currently works with "polling" transport only) + self.transportOptions = self.transportOptions || {}; + self.transports.forEach(function(transport) { + self.transportOptions[transport] = self.transportOptions[transport] || {}; + self.transportOptions[transport].extraHeaders = self.initialConnectionHeaders || {}; + }); + + // Log a warning if non-Node.js platform attempts to use `initialConnectionHeaders` for anything other than `polling`. + if (self.initialConnectionHeaders && SDK_INFO.platform !== 'node' && self.transports.indexOf('polling') === -1 || self.transports.length > 1) { + if (typeof console === 'object' && typeof console.warn === 'function') { + console.warn('When running in browser, `initialConnectionHeaders` option is only available for the `polling` transport.'); + } + } + + // Ensure URL has no trailing slash + self.url = self.url ? self.url.replace(/(\/)$/, '') : undefined; + + // Mix the current SDK version into the query string in + // the connection request to the server: + if (typeof self.query === 'string') { + // (If provided as a string, trim leading question mark, + // just in case one was provided.) + self.query = self.query.replace(/^\?/, ''); + self.query += '&' + SDK_INFO.versionString; + } + else if (self.query && typeof self.query === 'object') { + throw new Error('`query` setting does not currently support configuration as a dictionary (`{}`). Instead, it must be specified as a string like `foo=89&bar=hi`'); + } + else if (!self.query) { + self.query = SDK_INFO.versionString; + } + else { + throw new Error('Unexpected data type provided for `query` setting: '+self.query); + } + + // Determine whether this is a cross-origin socket by examining the + // hostname and port on the `window.location` object. If it's cross-origin, + // we'll attempt to get a cookie for the domain so that a Sails session can + // be established. + var isXOrigin = (function (){ + + // If `window` doesn't exist (i.e. being used from Node.js), then + // we won't bother attempting to get a cookie. If you're using sockets + // from Node.js and find you need to share a session between multiple + // socket connections, you'll need to make an HTTP request to the /__getcookie + // endpoint of the Sails server (or any endpoint that returns a set-cookie header) + // and then use the cookie value in the `initialConnectionHeaders` option to + // io.sails.connect() + if (typeof window === 'undefined' || typeof window.location === 'undefined') { + return false; + } + + // If `self.url` (aka "target") is falsy, then we don't need to worry about it. + if (typeof self.url !== 'string') { return false; } + + // Get information about the "target" (`self.url`) + var targetProtocol = (function (){ + try { + targetProtocol = self.url.match(/^([a-z]+:\/\/)/i)[1].toLowerCase(); + } + catch (e) {} + targetProtocol = targetProtocol || 'http://'; + return targetProtocol; + })(); + var isTargetSSL = !!self.url.match('^https'); + var targetPort = (function (){ + try { + return self.url.match(/^[a-z]+:\/\/[^:]*:([0-9]*)/i)[1]; + } + catch (e){} + return isTargetSSL ? '443' : '80'; + })(); + var targetAfterProtocol = self.url.replace(/^([a-z]+:\/\/)/i, ''); + + + // If target protocol is different than the actual protocol, + // then we'll consider this cross-origin. + if (targetProtocol.replace(/[:\/]/g, '') !== window.location.protocol.replace(/[:\/]/g,'')) { + return true; + } + + + // If target hostname is different than actual hostname, we'll consider this cross-origin. + var hasSameHostname = targetAfterProtocol.search(window.location.hostname) === 0; + if (!hasSameHostname) { + return true; + } + + // If no actual port is explicitly set on the `window.location` object, + // we'll assume either 80 or 443. + var isLocationSSL = window.location.protocol.match(/https/i); + var locationPort = (window.location.port+'') || (isLocationSSL ? '443' : '80'); + + // Finally, if ports don't match, we'll consider this cross-origin. + if (targetPort !== locationPort) { + return true; + } + + // Otherwise, it's the same origin. + return false; + + })(); + + + // Prepare to start connecting the socket + (function selfInvoking (cb){ + + // If this is an attempt at a cross-origin or cross-port + // socket connection via a browswe, send a JSONP request + // first to ensure that a valid cookie is available. + // This can be disabled by setting `io.sails.useCORSRouteToGetCookie` + // to false. + // + // Otherwise, skip the stuff below. + // + if (!(self.useCORSRouteToGetCookie && isXOrigin)) { + return cb(); + } + + // Figure out the x-origin CORS route + // (Sails provides a default) + var xOriginCookieURL = self.url; + if (typeof self.useCORSRouteToGetCookie === 'string') { + xOriginCookieURL += self.useCORSRouteToGetCookie; + } + else { + xOriginCookieURL += '/__getcookie'; + } + + // Make the AJAX request (CORS) + jsonp({ + url: xOriginCookieURL, + method: 'GET' + }, cb); + + })(function goAheadAndActuallyConnect() { + + // Now that we're ready to connect, create a raw underlying Socket + // using Socket.io and save it as `_raw` (this will start it connecting) + self._raw = io(self.url, self); + + // If the low-level transport throws an error _while connecting_, then set the _isConnecting flag + // to false (since we're no longer connecting with any chance of success anyway). + // Also, in this case (and in dev mode only) log a helpful message. + self._raw.io.engine.transport.on('error', function(err){ + if (!self._isConnecting) { return; } + + self._isConnecting = false; + + // Track this timestamp for use in reconnection messages + // (only relevant if reconnection is enabled.) + self.connectionErrorTimestamp = (new Date()).getTime(); + + // Development-only message: + consolog('===================================='); + consolog('The socket was unable to connect.'); + consolog('The server may be offline, or the'); + consolog('socket may have failed authorization'); + consolog('based on its origin or other factors.'); + consolog('You may want to check the values of'); + consolog('`sails.config.sockets.onlyAllowOrigins`'); + consolog('or (more rarely) `sails.config.sockets.beforeConnect`'); + consolog('in your app.'); + consolog('More info: https://sailsjs.com/config/sockets'); + consolog('For help: https://sailsjs.com/support'); + consolog(''); + consolog('Technical details:'); + consolog(err); + consolog('===================================='); + }); + + // Replay event bindings from the eager socket + self.replay(); + + + /** + * 'connect' event is triggered when the socket establishes a connection + * successfully. + */ + self.on('connect', function socketConnected() { + self._isConnecting = false; + consolog.noPrefix( + '\n' + + '\n' + + // ' |> ' + '\n' + + // ' \\___/ '+ï¸ + // '\n'+ + ' |> Now connected to '+(self.url ? self.url : 'Sails')+'.' + '\n' + + '\\___/ For help, see: http://bit.ly/2q0QDpf' + '\n' + + ' (using sails.io.js '+io.sails.sdk.platform+' SDK @v'+io.sails.sdk.version+')'+ '\n' + + ' Connected at: '+(new Date())+'\n'+ + '\n'+ + '\n'+ + // '\n'+ + '' + // ' ⚓︎ (development mode)' + // 'e.g. to send a GET request to Sails via WebSockets, run:'+ '\n' + + // '`io.socket.get("/foo", function serverRespondedWith (body, jwr) { console.log(body); })`'+ '\n' + + ); + }); + + self.on('disconnect', function() { + + // Get a timestamp of when the disconnect was detected. + self.connectionLostTimestamp = (new Date()).getTime(); + + // Get a shallow clone of the internal array of response callbacks, in case any of the callbacks mutate it. + var responseCbs = [].concat(self._responseCbs || []); + // Wipe the internal array of response callbacks before executing them, in case a callback happens to add + // a new request to the queue. + self._responseCbs = []; + + // Do the same for the internal request context list. + var requestCtxs = [].concat(self._requestCtxs || []); + self._requestCtxs = []; + + // Loop through the callbacks for all in-progress requests, and call them each with an error indicating the disconnect. + if (responseCbs.length) { + responseCbs.forEach(function(responseCb) { + responseCb(new Error('The socket disconnected before the request completed.'), { + body: null, + statusCode: 0, + headers: {} + }); + }); + } + + // If there is a list of request contexts, indicate that their callbacks have been + // called and then wipe the list. This prevents errors in the edge case of a response + // somehow coming back after the socket reconnects. + if (requestCtxs.length) { + requestCtxs.forEach(function(requestCtx) { + requestCtx.calledCb = true; + }); + } + + consolog('===================================='); + consolog('Socket was disconnected from Sails.'); + consolog('Usually, this is due to one of the following reasons:' + '\n' + + ' -> the server ' + (self.url ? self.url + ' ' : '') + 'was taken down' + '\n' + + ' -> your browser lost internet connectivity'); + consolog('===================================='); + }); + + self.on('reconnecting', function(numAttempts) { + consolog( + '\n'+ + ' Socket is trying to reconnect to '+(self.url ? self.url : 'Sails')+'...\n'+ + '_-|>_- (attempt #' + numAttempts + ')'+'\n'+ + '\n' + ); + }); + + self.on('reconnect', function(transport, numAttempts) { + if (!self._isConnecting) { + self.on('connect', runRequestQueue.bind(self, self)); + } + + var msSinceLastOffline; + var numSecsOffline; + if (self.connectionLostTimestamp){ + msSinceLastOffline = ((new Date()).getTime() - self.connectionLostTimestamp); + numSecsOffline = (msSinceLastOffline / 1000); + } + else if (self.connectionErrorTimestamp) { + msSinceLastOffline = ((new Date()).getTime() - self.connectionErrorTimestamp); + numSecsOffline = (msSinceLastOffline / 1000); + } + else { + msSinceLastOffline = '???'; + numSecsOffline = '???'; + } + + consolog( + '\n'+ + ' |> Socket reconnected successfully after'+'\n'+ + '\\___/ being offline at least ' + numSecsOffline + ' seconds.'+'\n'+ + '\n' + ); + }); + + // 'error' event is triggered if connection can not be established. + // (usually because of a failed authorization, which is in turn + // usually due to a missing or invalid cookie) + self.on('error', function failedToConnect(err) { + self._isConnecting = false; + //////////////////////////////////////////////////////////////////////////////////// + // Note: + // In the future, we could provide a separate event for when a socket cannot connect + // due to a failed `beforeConnect` (aka "authorization" if you're old school). + // this could probably be implemented by emitting a special event from the server. + //////////////////////////////////////////////////////////////////////////////////// + + consolog( + 'Failed to connect socket (possibly due to failed `beforeConnect` on server)', + 'Error:', err + ); + }); + }); + + }; + + /** + * Reconnect the underlying socket. + * + * @api public + */ + SailsSocket.prototype.reconnect = function (){ + if (this._isConnecting) { + throw new Error('Cannot connect- socket is already connecting'); + } + if (this.isConnected()) { + throw new Error('Cannot connect- socket is already connected'); + } + return this._connect(); + }; + + /** + * Disconnect the underlying socket. + * + * @api public + */ + SailsSocket.prototype.disconnect = function (){ + this._isConnecting = false; + if (!this.isConnected()) { + throw new Error('Cannot disconnect- socket is already disconnected'); + } + return this._raw.disconnect(); + }; + + + + /** + * isConnected + * + * @return {Boolean} whether the socket is connected and able to + * communicate w/ the server. + */ + + SailsSocket.prototype.isConnected = function () { + if (!this._raw) { + return false; + } + + return !!this._raw.connected; + }; + + + /** + * isConnecting + * + * @return {Boolean} whether the socket is in the process of connecting + * to the server. + */ + + SailsSocket.prototype.isConnecting = function () { + return this._isConnecting; + }; + + /** + * isConnecting + * + * @return {Boolean} flag that is `true` after a SailsSocket instance is + * initialized but before one tick of the event loop + * has passed (so that it hasn't attempted to connect + * yet, if autoConnect ends up being configured `true`) + */ + SailsSocket.prototype.mightBeAboutToAutoConnect = function() { + return this._mightBeAboutToAutoConnect; + }; + + /** + * [replay description] + * @return {[type]} [description] + */ + SailsSocket.prototype.replay = function (){ + var self = this; + + // Pass events and a reference to the request queue + // off to the self._raw for consumption + for (var evName in self.eventQueue) { + for (var i in self.eventQueue[evName]) { + self._raw.on(evName, self.eventQueue[evName][i]); + } + } + + // Bind a one-time function to run the request queue + // when the self._raw connects. + if ( !self.isConnected() ) { + self._raw.once('connect', runRequestQueue.bind(self, self)); + } + // Or run it immediately if self._raw is already connected + else { + runRequestQueue(self); + } + + return self; + }; + + + /** + * Chainable method to bind an event to the socket. + * + * @param {String} evName [event name] + * @param {Function} fn [event handler function] + * @return {SailsSocket} + */ + SailsSocket.prototype.on = function (evName, fn){ + + // Bind the event to the raw underlying socket if possible. + if (this._raw) { + this._raw.on(evName, fn); + return this; + } + + // Otherwise queue the event binding. + if (!this.eventQueue[evName]) { + this.eventQueue[evName] = [fn]; + } + else { + this.eventQueue[evName].push(fn); + } + + return this; + }; + + /** + * Chainable method to unbind an event from the socket. + * + * @param {String} evName [event name] + * @param {Function} fn [event handler function] + * @return {SailsSocket} + */ + SailsSocket.prototype.off = function (evName, fn){ + + // Bind the event to the raw underlying socket if possible. + if (this._raw) { + this._raw.off(evName, fn); + return this; + } + + // Otherwise queue the event binding. + if (this.eventQueue[evName] && this.eventQueue[evName].indexOf(fn) > -1) { + this.eventQueue[evName].splice(this.eventQueue[evName].indexOf(fn), 1); + } + + return this; + }; + + + /** + * Chainable method to unbind all events from the socket. + * + * @return {SailsSocket} + */ + SailsSocket.prototype.removeAllListeners = function (){ + + // Bind the event to the raw underlying socket if possible. + if (this._raw) { + this._raw.removeAllListeners(); + return this; + } + + // Otherwise queue the event binding. + this.eventQueue = {}; + + return this; + }; + + /** + * Simulate a GET request to sails + * e.g. + * `socket.get('/user/3', Stats.populate)` + * + * @api public + * @param {String} url :: destination URL + * @param {Object} data :: parameters to send with the request [optional] + * @param {Function} cb :: callback function to call when finished [optional] + */ + + SailsSocket.prototype.get = function(url, data, cb) { + + // `data` is optional + if (typeof data === 'function') { + cb = data; + data = {}; + } + + return this.request({ + method: 'get', + params: data, + url: url + }, cb); + }; + + + + /** + * Simulate a POST request to sails + * e.g. + * `socket.post('/event', newMeeting, $spinner.hide)` + * + * @api public + * @param {String} url :: destination URL + * @param {Object} data :: parameters to send with the request [optional] + * @param {Function} cb :: callback function to call when finished [optional] + */ + + SailsSocket.prototype.post = function(url, data, cb) { + + // `data` is optional + if (typeof data === 'function') { + cb = data; + data = {}; + } + + return this.request({ + method: 'post', + data: data, + url: url + }, cb); + }; + + + + /** + * Simulate a PUT request to sails + * e.g. + * `socket.post('/event/3', changedFields, $spinner.hide)` + * + * @api public + * @param {String} url :: destination URL + * @param {Object} data :: parameters to send with the request [optional] + * @param {Function} cb :: callback function to call when finished [optional] + */ + + SailsSocket.prototype.put = function(url, data, cb) { + + // `data` is optional + if (typeof data === 'function') { + cb = data; + data = {}; + } + + return this.request({ + method: 'put', + params: data, + url: url + }, cb); + }; + + + /** + * Simulate a PATCH request to sails + * e.g. + * `socket.patch('/event/3', changedFields, $spinner.hide)` + * + * @api public + * @param {String} url :: destination URL + * @param {Object} data :: parameters to send with the request [optional] + * @param {Function} cb :: callback function to call when finished [optional] + */ + + SailsSocket.prototype.patch = function(url, data, cb) { + + // `data` is optional + if (typeof data === 'function') { + cb = data; + data = {}; + } + + return this.request({ + method: 'patch', + params: data, + url: url + }, cb); + }; + + /** + * Simulate a DELETE request to sails + * e.g. + * `socket.delete('/event', $spinner.hide)` + * + * @api public + * @param {String} url :: destination URL + * @param {Object} data :: parameters to send with the request [optional] + * @param {Function} cb :: callback function to call when finished [optional] + */ + + SailsSocket.prototype['delete'] = function(url, data, cb) { + + // `data` is optional + if (typeof data === 'function') { + cb = data; + data = {}; + } + + return this.request({ + method: 'delete', + params: data, + url: url + }, cb); + }; + + + + /** + * Simulate an HTTP request to sails + * e.g. + * ``` + * socket.request({ + * url:'/user', + * params: {}, + * method: 'POST', + * headers: {} + * }, function (responseBody, JWR) { + * // ... + * }); + * ``` + * + * @api public + * @option {String} url :: destination URL + * @option {Object} params :: parameters to send with the request [optional] + * @option {Object} headers:: headers to send with the request [optional] + * @option {Function} cb :: callback function to call when finished [optional] + * @option {String} method :: HTTP request method [optional] + */ + + SailsSocket.prototype.request = function(options, cb) { + + var usage = + 'Usage:\n'+ + 'socket.request( options, [fnToCallWhenComplete] )\n\n'+ + 'options.url :: e.g. "/foo/bar"'+'\n'+ + 'options.method :: e.g. "get", "post", "put", or "delete", etc.'+'\n'+ + 'options.params :: e.g. { emailAddress: "mike@example.com" }'+'\n'+ + 'options.headers :: e.g. { "x-my-custom-header": "some string" }'; + // Old usage: + // var usage = 'Usage:\n socket.'+(options.method||'request')+'('+ + // ' destinationURL, [dataToSend], [fnToCallWhenComplete] )'; + + + // Validate options and callback + if (typeof cb !== 'undefined' && typeof cb !== 'function') { + throw new Error('Invalid callback function!\n' + usage); + } + if (typeof options !== 'object' || typeof options.url !== 'string') { + throw new Error('Invalid or missing URL!\n' + usage); + } + if (options.method && typeof options.method !== 'string') { + throw new Error('Invalid `method` provided (should be a string like "post" or "put")\n' + usage); + } + if (options.headers && typeof options.headers !== 'object') { + throw new Error('Invalid `headers` provided (should be a dictionary with string values)\n' + usage); + } + if (options.params && typeof options.params !== 'object') { + throw new Error('Invalid `params` provided (should be a dictionary with JSON-serializable values)\n' + usage); + } + if (options.data && typeof options.data !== 'object') { + throw new Error('Invalid `data` provided (should be a dictionary with JSON-serializable values)\n' + usage); + } + + // Accept either `params` or `data` for backwards compatibility (but not both!) + if (options.data && options.params) { + throw new Error('Cannot specify both `params` and `data`! They are aliases of each other.\n' + usage); + } + else if (options.data) { + options.params = options.data; + delete options.data; + } + + + // If this socket is not connected yet, queue up this request + // instead of sending it. + // (so it can be replayed when the socket comes online.) + if ( ! this.isConnected() ) { + + // If no queue array exists for this socket yet, create it. + this.requestQueue = this.requestQueue || []; + this.requestQueue.push([options, cb]); + return; + } + + // Otherwise, our socket is connected, so continue prepping + // the request. + + // Default headers to an empty object + options.headers = options.headers || {}; + + // Build a simulated request object + // (and sanitize/marshal options along the way) + var requestCtx = { + + method: (options.method || 'get').toLowerCase(), + + headers: options.headers, + + data: options.params || options.data || {}, + + // Remove trailing slashes and spaces to make packets smaller. + url: options.url.replace(/^(.+)\/*\s*$/, '$1'), + + cb: cb + }; + + // Get a reference to the callback list, or create a new one. + this._responseCbs = this._responseCbs || []; + + // Get a reference to the request context list, or create a new one. + this._requestCtxs = this._requestCtxs || []; + + // Add this callback to the list. If the socket disconnects, we'll call + // each cb in the list with an error and reset the list. Otherwise the + // cb will be removed from the list when the server responds. + // Also add the request context to the list. It will be removed once + // the response comes back, or if the socket disconnects. + if (cb) { + this._responseCbs.push(cb); + this._requestCtxs.push(requestCtx); + } + + // Merge global headers in, if there are any. + if (this.headers && 'object' === typeof this.headers) { + for (var header in this.headers) { + if (!options.headers.hasOwnProperty(header)) { + options.headers[header] = this.headers[header]; + } + } + } + + // Send the request. + _emitFrom(this, requestCtx); + }; + + + + /** + * Socket.prototype._request + * + * Simulate HTTP over Socket.io. + * + * @api private + * @param {[type]} options [description] + * @param {Function} cb [description] + */ + SailsSocket.prototype._request = function(options, cb) { + throw new Error('`_request()` was a private API deprecated as of v0.11 of the sails.io.js client. Use `.request()` instead.'); + }; + + + + + + + + // ██╗ ██████╗ ███████╗ █████╗ ██╗██╗ ███████╗ + // ██║██╔â•â•â•██╗ ██╔â•â•â•â•â•██╔â•â•██╗██║██║ ██╔â•â•â•â•â• + // ██║██║ ██║ ███████╗███████║██║██║ ███████╗ + // ██║██║ ██║ ╚â•â•â•â•██║██╔â•â•██║██║██║ ╚â•â•â•â•██║ + // ██║╚██████╔â•██╗███████║██║ ██║██║███████╗███████║ + // ╚â•╠╚â•â•â•â•â•╠╚â•â•╚â•â•â•â•â•â•â•╚â•╠╚â•â•╚â•â•╚â•â•â•â•â•â•â•╚â•â•â•â•â•â•â• + // + // Set an `io.sails` object that may be used for configuration before the + // first socket connects (i.e. to allow auto-connect behavior to be + // prevented by setting `io.sails.autoConnect` in an inline script + // directly after the script tag which loaded this file). + + + // ┌─â”┌─â”┌┬┠┬ ┬┌─┠╔╦╗╔â•â•—â•”â•â•—â•”â•╗╦ ╦╦ ╔╦╗╔â•â•— ┌─â”┌─â”┬─┠┬┌─┠┌─â”┌─â”┬┬ ┌─┠+ // └─â”├┤ │ │ │├─┘ â•‘â•‘â•‘â•£ â• â•£ â• â•╣║ â•‘â•‘ â•‘ ╚â•â•— ├┤ │ │├┬┘ ││ │ └─â”├─┤││ └─┠+ // └─┘└─┘ â”´ └─┘┴ â•â•©â•╚â•â•╚ â•© ╩╚â•â•â•©â•â•â•© ╚â•â• â”” └─┘┴└─ ┴└─┘o└─┘┴ ┴┴┴─┘└─┘ + io.sails = { + + // Whether to automatically connect a socket and save it as `io.socket`. + autoConnect: true, + + // Whether to automatically try to reconnect after connection is lost + reconnection: false, + + // The route (path) to hit to get a x-origin (CORS) cookie + // (or true to use the default: '/__getcookie') + useCORSRouteToGetCookie: true, + + // The environment we're running in. + // (logs are not displayed when this is set to 'production') + // + // Defaults to "development" unless this script was fetched from a URL + // that ends in `*.min.js` or '#production', or if the conventional + // `SAILS_LOCALS` global is set with an `_environment` of "production" + // or "staging". (This setting may also be manually overridden.) + environment: ( + urlThisScriptWasFetchedFrom.match(/(\#production|\.min\.js)/g) || + ( + typeof window === 'object' && window && + typeof window.SAILS_LOCALS === 'object' && window.SAILS_LOCALS && + (window.SAILS_LOCALS._environment === 'staging' || window.SAILS_LOCALS._environment === 'production') + ) + )? 'production' : 'development', + + // The version of this sails.io.js client SDK + sdk: SDK_INFO, + + // Transports to use when communicating with the server, in the order they will be tried + transports: ['websocket'] + }; + + + + // ┌─â”─┠┬┌┬â”┌─â”┌â”┌┌┬┠┬┌─┠┌─â”┌─â”┬┬ ┌─┠┌┬â”┌─â”┌─â”┌─â”┬ ┬┬ ┌┬â”┌─┠+ // ├┤ ┌┴┬┘ │ ├┤ │││ ││ ││ │ └─â”├─┤││ └─┠││├┤ ├┤ ├─┤│ ││ │ └─┠+ // └─┘┴ └─ â”´ └─┘┘└┘─┴┘ ┴└─┘o└─┘┴ ┴┴┴─┘└─┘ ─┴┘└─┘└ â”´ ┴└─┘┴─┘┴ └─┘ + // ┬ ┬┬┌┬â”┬ ┬ ┌┬â”┬ ┬┌─┠╦ ╦╔╦╗╔╦╗╦ â•”â•╗╔╦╗╔╦╗╦â•╗╦╔╗ ╦ ╦╔╦╗╔â•â•—â•”â•â•— + // ││││ │ ├─┤ │ ├─┤├┤ â• â•â•£ â•‘ â•‘â•‘â•‘â•‘ â• â•â•£ â•‘ â•‘ ╠╦â•â•‘â• â•©â•—â•‘ â•‘ â•‘ â•‘â•£ ╚â•â•— + // └┴┘┴ â”´ â”´ â”´ â”´ â”´ ┴└─┘ â•© â•© â•© â•© â•©â•©â•â• â•© â•© â•© â•© ╩╚â•╩╚â•â•╚â•â• â•© ╚â•â•╚â•â• + // ┌─â”┬─â”┌─â”┌┬┠┌┬â”┬ ┬┌─┠┌─â”┌─â”┬─â”┬┌─â”┌┬┠┌┬â”┌─â”┌─┠+ // ├┤ ├┬┘│ ││││ │ ├─┤├┤ └─â”│ ├┬┘│├─┘ │ │ ├─┤│ ┬ + // â”” ┴└─└─┘┴ â”´ â”´ â”´ ┴└─┘ └─┘└─┘┴└─┴┴ â”´ â”´ â”´ ┴└─┘ + // + // Now fold in config provided as HTML attributes on the script tag: + // (note that if `io.sails.*` is changed after this script, those changes + // will still take precedence) + CONFIGURABLE_VIA_HTML_ATTR.forEach(function (configKey){ + if (typeof scriptTagConfig[configKey] !== 'undefined') { + io.sails[configKey] = scriptTagConfig[configKey]; + } + }); + ////////////////////////////////////////////////////////////////////////////// + // Note that the new HTML attribute configuration style may eventually + // completely replace the original approach of setting `io.sails` properties, + // since the new strategy is easier to reason about. Also, it would allow us + // to remove the timeout below someday. + ////////////////////////////////////////////////////////////////////////////// + + + + + // ┬┌─┠┌─â”┌─â”┬┬ ┌─┠╔â•â•—â•”â•╗╔╗╔╔╗╔╔â•â•—â•”â•╗╔╦╗ / \ + // ││ │ └─â”├─┤││ └─┠║ â•‘ â•‘â•‘â•‘â•‘â•‘â•‘â•‘â•‘â•£ â•‘ â•‘ / / + // ┴└─┘o└─┘┴ ┴┴┴─┘└─┘o╚â•â•╚â•â•â•╚â•â•╚â•╚â•â•╚â•â• â•© \ / + + /** + * Add `io.sails.connect` function as a wrapper for the built-in `io()` aka `io.connect()` + * method, returning a SailsSocket. This special function respects the configured io.sails + * connection URL, as well as sending other identifying information (most importantly, the + * current version of this SDK). + * + * @param {String} url [optional] + * @param {Object} opts [optional] + * @return {Socket} + */ + io.sails.connect = function(url, opts) { + + // Make URL optional + if ('object' === typeof url) { + opts = url; + url = null; + } + + // Default opts to empty object + opts = opts || {}; + + // If explicit connection url is specified, save it to options + opts.url = url || opts.url || undefined; + + // Instantiate and return a new SailsSocket- and try to connect immediately. + var socket = new SailsSocket(opts); + socket._connect(); + return socket; + }; + + + + + + + // ██╗ ██████╗ ███████╗ ██████╗ ██████╗██╗ ██╗███████╗████████╗ + // ██║██╔â•â•â•██╗ ██╔â•â•â•â•â•██╔â•â•â•██╗██╔â•â•â•â•â•██║ ██╔â•██╔â•â•â•â•â•╚â•â•██╔â•â•â• + // ██║██║ ██║ ███████╗██║ ██║██║ █████╔╠█████╗ ██║ + // ██║██║ ██║ ╚â•â•â•â•██║██║ ██║██║ ██╔â•██╗ ██╔â•â•╠██║ + // ██║╚██████╔â•██╗███████║╚██████╔â•╚██████╗██║ ██╗███████╗ ██║ + // ╚â•╠╚â•â•â•â•â•╠╚â•â•╚â•â•â•â•â•â•╠╚â•â•â•â•â•╠╚â•â•â•â•â•â•╚â•╠╚â•â•╚â•â•â•â•â•â•╠╚â•â• + // + // io.socket + // + // The eager instance of Socket which will automatically try to connect + // using the host that this js file was served from. + // + // This can be disabled or configured by setting properties on `io.sails.*` within the + // first cycle of the event loop. + // + + + // Build `io.socket` so it exists + // (note that this DOES NOT start the connection process) + io.socket = new SailsSocket(); + // + // This socket is not connected yet, and has not even _started_ connecting. + // + // But in the mean time, this eager socket will be queue events bound by the user + // before the first cycle of the event loop (using `.on()`), which will later + // be rebound on the raw underlying socket. + + + // ┌─â”┌─â”┌┬┠┌─â”┬ ┬┌┬â”┌─┠┌─â”┌─â”┌â”┌┌â”┌┌─â”┌─â”┌┬┠┌┬â”┬┌┬â”┌─â”┬─┠+ // └─â”├┤ │ ├─┤│ │ │ │ │───│ │ │││││││├┤ │ │ │ ││││├┤ ├┬┘ + // └─┘└─┘ â”´ â”´ ┴└─┘ â”´ └─┘ └─┘└─┘┘└┘┘└┘└─┘└─┘ â”´ â”´ â”´â”´ ┴└─┘┴└─ + // If configured to do so, start auto-connecting after the first cycle of the event loop + // has completed (to allow time for this behavior to be configured/disabled + // by specifying properties on `io.sails`) + + // Indicate that the autoConnect timer has started. + io.socket._mightBeAboutToAutoConnect = true; + + setTimeout(function() { + + // Indicate that the autoConect timer fired. + io.socket._mightBeAboutToAutoConnect = false; + + // If autoConnect is disabled, delete the eager socket (io.socket) and bail out. + if (io.sails.autoConnect === false || io.sails.autoconnect === false) { + delete io.socket; + return; + } + + // consolog('Eagerly auto-connecting socket to Sails... (requests will be queued in the mean-time)'); + io.socket._connect(); + + + }, 0); // </setTimeout> + + + // Return the `io` object. + return io; + } //</SailsIOClient> + + // + ///////////////////////////////////////////////////////////////////////////////// + ///// </bunches of private function definitions, constructors, and methods> + ///////////////////////////////////////////////////////////////////////////////// + + + + + // ███████╗██╗ ██╗██████╗ ██████╗ ███████╗███████╗ ███████╗██████╗ ██╗ ██╗ + // ██╔â•â•â•â•â•╚██╗██╔â•██╔â•â•██╗██╔â•â•â•██╗██╔â•â•â•â•â•██╔â•â•â•â•╠██╔â•â•â•â•â•██╔â•â•██╗██║ ██╔╠+ // █████╗ ╚███╔╠██████╔â•██║ ██║███████╗█████╗ ███████╗██║ ██║█████╔╠+ // ██╔â•â•╠██╔██╗ ██╔â•â•â•╠██║ ██║╚â•â•â•â•██║██╔â•â•╠╚â•â•â•â•██║██║ ██║██╔â•██╗ + // ███████╗██╔╠██╗██║ ╚██████╔â•███████║███████╗ ███████║██████╔â•██║ ██╗ + // ╚â•â•â•â•â•â•â•╚â•╠╚â•â•╚â•╠╚â•â•â•â•â•╠╚â•â•â•â•â•â•â•╚â•â•â•â•â•â•╠╚â•â•â•â•â•â•â•╚â•â•â•â•â•╠╚â•╠╚â•â• + // + + + // Add CommonJS support to allow this client SDK to be used from Node.js. + if (SDK_INFO.platform === 'node') { + module.exports = SailsIOClient; + } + // Add AMD support, registering this client SDK as an anonymous module. + else if (typeof define === 'function' && define.amd) { + define([], function() { + return SailsIOClient; + }); + } + else { + // Otherwise, try to instantiate the client using the global `io`: + SailsIOClient(); + + // Note: + // If you are modifying this file manually to wrap an existing socket.io client + // (e.g. to prevent pollution of the global namespace), you can replace the global + // `io` with your own `io` instance above. + } + +})(); +; + +/* eslint-enable */ diff --git a/assets/favicon.ico b/assets/favicon.ico new file mode 100755 index 0000000000000000000000000000000000000000..0092ec9cace7b2918865c11aea9c1ab1d84897f5 Binary files /dev/null and b/assets/favicon.ico differ diff --git a/assets/images/.gitkeep b/assets/images/.gitkeep new file mode 100755 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/assets/js/.gitkeep b/assets/js/.gitkeep new file mode 100755 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/assets/styles/importer.less b/assets/styles/importer.less new file mode 100755 index 0000000000000000000000000000000000000000..cfe82039a4c7600176b8c03d43ff06f07072bc70 --- /dev/null +++ b/assets/styles/importer.less @@ -0,0 +1,24 @@ +/** + * importer.less + * + * By default, new Sails projects are configured to compile this file + * from LESS to CSS. Unlike CSS files, LESS files are not compiled and + * included automatically unless they are imported below. + * + * For more information see: + * https://sailsjs.com/anatomy/assets/styles/importer-less + */ + + +// For example: +// +// @import 'variables/colors.less'; +// @import 'mixins/foo.less'; +// @import 'mixins/bar.less'; +// @import 'mixins/baz.less'; +// +// @import 'styleguide.less'; +// @import 'pages/login.less'; +// @import 'pages/signup.less'; +// +// etc. diff --git a/assets/templates/.gitkeep b/assets/templates/.gitkeep new file mode 100755 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/config/blueprints.js b/config/blueprints.js new file mode 100755 index 0000000000000000000000000000000000000000..e8552ef4195d50cf112b03f31a5dfb9a6abc95b8 --- /dev/null +++ b/config/blueprints.js @@ -0,0 +1,41 @@ +/** + * Blueprint API Configuration + * (sails.config.blueprints) + * + * For background on the blueprint API in Sails, check out: + * https://sailsjs.com/docs/reference/blueprint-api + * + * For details and more available options, see: + * https://sailsjs.com/config/blueprints + */ + +module.exports.blueprints = { + + /*************************************************************************** + * * + * Automatically expose implicit routes for every action in your app? * + * * + ***************************************************************************/ + + // actions: false, + + + /*************************************************************************** + * * + * Automatically expose RESTful routes for your models? * + * * + ***************************************************************************/ + + // rest: true, + + + /*************************************************************************** + * * + * Automatically expose CRUD "shortcut" routes to GET requests? * + * (These are enabled by default in development only.) * + * * + ***************************************************************************/ + + // shortcuts: true, + +}; diff --git a/config/bootstrap.js b/config/bootstrap.js new file mode 100755 index 0000000000000000000000000000000000000000..fb1c17f18296160cbcde5427e66b1088212a7184 --- /dev/null +++ b/config/bootstrap.js @@ -0,0 +1,30 @@ +/** + * Seed Function + * (sails.config.bootstrap) + * + * A function that runs just before your Sails app gets lifted. + * > Need more flexibility? You can also create a hook. + * + * For more information on seeding your app with fake data, check out: + * https://sailsjs.com/config/bootstrap + */ + +module.exports.bootstrap = async function() { + + // By convention, this is a good place to set up fake data during development. + // + // For example: + // ``` + // // Set up fake development data (or if we already have some, avast) + // if (await User.count() > 0) { + // return; + // } + // + // await User.createEach([ + // { emailAddress: 'ry@example.com', fullName: 'Ryan Dahl', }, + // { emailAddress: 'rachael@example.com', fullName: 'Rachael Shaw', }, + // // etc. + // ]); + // ``` + +}; diff --git a/config/custom.js b/config/custom.js new file mode 100755 index 0000000000000000000000000000000000000000..ee019946f3cd073b6c8826cce5dd91a164e09b13 --- /dev/null +++ b/config/custom.js @@ -0,0 +1,29 @@ +/** + * Custom configuration + * (sails.config.custom) + * + * One-off settings specific to your application. + * + * For more information on custom configuration, visit: + * https://sailsjs.com/config/custom + */ + +module.exports.custom = { + + /*************************************************************************** + * * + * Any other custom config this Sails app should use during development. * + * * + ***************************************************************************/ + // mailgunDomain: 'transactional-mail.example.com', + // mailgunSecret: 'key-testkeyb183848139913858e8abd9a3', + // stripeSecret: 'sk_test_Zzd814nldl91104qor5911gjald', + // … + urlRpc: 'http://localhost:8545', + accountAddress : '0xDBF0C927F9E92dFE7C31e045e0Ba1067Ee205f73', + contractABI : [{"constant":true,"inputs":[{"name":"ots","type":"string"}],"name":"getHash","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"ots","type":"string"}],"name":"getBlockNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"ots","type":"string"},{"name":"file_hash","type":"string"}],"name":"verify","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"selfDestroy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"ots","type":"string"},{"name":"file_hash","type":"string"}],"name":"stamp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"accountAddress"},{"indexed":true,"name":"hash","type":"string"},{"indexed":true,"name":"ots","type":"string"}],"name":"Stamped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"accountAddress"}],"name":"Deploy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"accountAddress"}],"name":"SelfDestroy","type":"event"}], + contractAddress: '0xBD89a34041190439d43ec391486819eF5CBfBDBe', + privateKey: '6671485e4250881473c639465464148b5a0285461f136b585623333f22f7ca3f', + + +}; diff --git a/config/datastores.js b/config/datastores.js new file mode 100755 index 0000000000000000000000000000000000000000..3853184314ace50fdc4f44c2e35759fe1028680c --- /dev/null +++ b/config/datastores.js @@ -0,0 +1,57 @@ +/** + * Datastores + * (sails.config.datastores) + * + * A set of datastore configurations which tell Sails where to fetch or save + * data when you execute built-in model methods like `.find()` and `.create()`. + * + * > This file is mainly useful for configuring your development database, + * > as well as any additional one-off databases used by individual models. + * > Ready to go live? Head towards `config/env/production.js`. + * + * For more information on configuring datastores, check out: + * https://sailsjs.com/config/datastores + */ + +module.exports.datastores = { + + + /*************************************************************************** + * * + * Your app's default datastore. * + * * + * Sails apps read and write to local disk by default, using a built-in * + * database adapter called `sails-disk`. This feature is purely for * + * convenience during development; since `sails-disk` is not designed for * + * use in a production environment. * + * * + * To use a different db _in development_, follow the directions below. * + * Otherwise, just leave the default datastore as-is, with no `adapter`. * + * * + * (For production configuration, see `config/env/production.js`.) * + * * + ***************************************************************************/ + + default: { + + /*************************************************************************** + * * + * Want to use a different database during development? * + * * + * 1. Choose an adapter: * + * https://sailsjs.com/plugins/databases * + * * + * 2. Install it as a dependency of your Sails app. * + * (For example: npm install sails-mysql --save) * + * * + * 3. Then pass it in, along with a connection URL. * + * (See https://sailsjs.com/config/datastores for help.) * + * * + ***************************************************************************/ + // adapter: 'sails-mysql', + // url: 'mysql://user:password@host:port/database', + + }, + + +}; diff --git a/config/env/production.js b/config/env/production.js new file mode 100755 index 0000000000000000000000000000000000000000..f358bb8d45f9dcd1a573b5e291ca39f72e2f64c9 --- /dev/null +++ b/config/env/production.js @@ -0,0 +1,396 @@ +/** + * Production environment settings + * (sails.config.*) + * + * What you see below is a quick outline of the built-in settings you need + * to configure your Sails app for production. The configuration in this file + * is only used in your production environment, i.e. when you lift your app using: + * + * ``` + * NODE_ENV=production node app + * ``` + * + * > If you're using git as a version control solution for your Sails app, + * > this file WILL BE COMMITTED to your repository by default, unless you add + * > it to your .gitignore file. If your repository will be publicly viewable, + * > don't add private/sensitive data (like API secrets / db passwords) to this file! + * + * For more best practices and tips, see: + * https://sailsjs.com/docs/concepts/deployment + */ + +module.exports = { + + + /************************************************************************** + * * + * Tell Sails what database(s) it should use in production. * + * * + * (https://sailsjs.com/config/datastores) * + * * + **************************************************************************/ + datastores: { + + /*************************************************************************** + * * + * Configure your default production database. * + * * + * 1. Choose an adapter: * + * https://sailsjs.com/plugins/databases * + * * + * 2. Install it as a dependency of your Sails app. * + * (For example: npm install sails-mysql --save) * + * * + * 3. Then set it here (`adapter`), along with a connection URL (`url`) * + * and any other, adapter-specific customizations. * + * (See https://sailsjs.com/config/datastores for help.) * + * * + ***************************************************************************/ + default: { + // adapter: 'sails-mysql', + // url: 'mysql://user:password@host:port/database', + //-------------------------------------------------------------------------- + // /\ To avoid checking it in to version control, you might opt to set + // || sensitive credentials like `url` using an environment variable. + // + // For example: + // ``` + // sails_datastores__default__url=mysql://admin:myc00lpAssw2D@db.example.com:3306/my_prod_db + // ``` + //-------------------------------------------------------------------------- + + /**************************************************************************** + *             * + * More adapter-specific options * + *             * + * > For example, for some hosted PostgreSQL providers (like Heroku), the * + * > extra `ssl: true` option is mandatory and must be provided. * + *             * + * More info:          * + * https://sailsjs.com/config/datastores      * + *             * + ****************************************************************************/ + // ssl: true, + + }, + + }, + + + + models: { + + /*************************************************************************** + * * + * To help avoid accidents, Sails automatically sets the automigration * + * strategy to "safe" when your app lifts in production mode. * + * (This is just here as a reminder.) * + * * + * More info: * + * https://sailsjs.com/docs/concepts/models-and-orm/model-settings#?migrate * + * * + ***************************************************************************/ + migrate: 'safe', + + /*************************************************************************** + * * + * If, in production, this app has access to physical-layer CASCADE * + * constraints (e.g. PostgreSQL or MySQL), then set those up in the * + * database and uncomment this to disable Waterline's `cascadeOnDestroy` * + * polyfill. (Otherwise, if you are using a databse like Mongo, you might * + * choose to keep this enabled.) * + * * + ***************************************************************************/ + // cascadeOnDestroy: false, + + }, + + + + /************************************************************************** + * * + * Always disable "shortcut" blueprint routes. * + * * + * > You'll also want to disable any other blueprint routes if you are not * + * > actually using them (e.g. "actions" and "rest") -- but you can do * + * > that in `config/blueprints.js`, since you'll want to disable them in * + * > all environments (not just in production.) * + * * + ***************************************************************************/ + blueprints: { + shortcuts: false, + }, + + + + /*************************************************************************** + * * + * Configure your security settings for production. * + * * + * IMPORTANT: * + * If web browsers will be communicating with your app, be sure that * + * you have CSRF protection enabled. To do that, set `csrf: true` over * + * in the `config/security.js` file (not here), so that CSRF app can be * + * tested with CSRF protection turned on in development mode too. * + * * + ***************************************************************************/ + security: { + + /*************************************************************************** + * * + * If this app has CORS enabled (see `config/security.js`) with the * + * `allowCredentials` setting enabled, then you should uncomment the * + * `allowOrigins` whitelist below. This sets which "origins" are allowed * + * to send cross-domain (CORS) requests to your Sails app. * + * * + * > Replace "https://example.com" with the URL of your production server. * + * > Be sure to use the right protocol! ("http://" vs. "https://") * + * * + ***************************************************************************/ + cors: { + // allowOrigins: [ + // 'https://example.com', + // ] + }, + + }, + + + + /*************************************************************************** + * * + * Configure how your app handles sessions in production. * + * * + * (https://sailsjs.com/config/session) * + * * + * > If you have disabled the "session" hook, then you can safely remove * + * > this section from your `config/env/production.js` file. * + * * + ***************************************************************************/ + session: { + + /*************************************************************************** + * * + * Production session store configuration. * + * * + * Uncomment the following lines to finish setting up a package called * + * "@sailshq/connect-redis" that will use Redis to handle session data. * + * This makes your app more scalable by allowing you to share sessions * + * across a cluster of multiple Sails/Node.js servers and/or processes. * + * (See http://bit.ly/redis-session-config for more info.) * + * * + * > While @sailshq/connect-redis is a popular choice for Sails apps, many * + * > other compatible packages (like "connect-mongo") are available on NPM. * + * > (For a full list, see https://sailsjs.com/plugins/sessions) * + * * + ***************************************************************************/ + // adapter: '@sailshq/connect-redis', + // url: 'redis://user:password@localhost:6379/databasenumber', + //-------------------------------------------------------------------------- + // /\ OR, to avoid checking it in to version control, you might opt to + // || set sensitive credentials like this using an environment variable. + // + // For example: + // ``` + // sails_session__url=redis://admin:myc00lpAssw2D@bigsquid.redistogo.com:9562/0 + // ``` + // + //-------------------------------------------------------------------------- + + + + /*************************************************************************** + * * + * Production configuration for the session ID cookie. * + * * + * Tell browsers (or other user agents) to ensure that session ID cookies * + * are always transmitted via HTTPS, and that they expire 24 hours after * + * they are set. * + * * + * Note that with `secure: true` set, session cookies will _not_ be * + * transmitted over unsecured (HTTP) connections. Also, for apps behind * + * proxies (like Heroku), the `trustProxy` setting under `http` must be * + * configured in order for `secure: true` to work. * + * * + * > While you might want to increase or decrease the `maxAge` or provide * + * > other options, you should always set `secure: true` in production * + * > if the app is being served over HTTPS. * + * * + * Read more: * + * https://sailsjs.com/config/session#?the-session-id-cookie * + * * + ***************************************************************************/ + cookie: { + // secure: true, + maxAge: 24 * 60 * 60 * 1000, // 24 hours + }, + + }, + + + + /************************************************************************** + * * + * Set up Socket.io for your production environment. * + * * + * (https://sailsjs.com/config/sockets) * + * * + * > If you have disabled the "sockets" hook, then you can safely remove * + * > this section from your `config/env/production.js` file. * + * * + ***************************************************************************/ + sockets: { + + /*************************************************************************** + * * + * Uncomment the `onlyAllowOrigins` whitelist below to configure which * + * "origins" are allowed to open socket connections to your Sails app. * + * * + * > Replace "https://example.com" etc. with the URL(s) of your app. * + * > Be sure to use the right protocol! ("http://" vs. "https://") * + * * + ***************************************************************************/ + // onlyAllowOrigins: [ + // 'https://example.com', + // 'https://staging.example.com', + // ], + + + /*************************************************************************** + * * + * If you are deploying a cluster of multiple servers and/or processes, * + * then uncomment the following lines. This tells Socket.io about a Redis * + * server it can use to help it deliver broadcasted socket messages. * + * * + * > Be sure a compatible version of @sailshq/socket.io-redis is installed! * + * > (See https://sailsjs.com/config/sockets for the latest version info) * + * * + * (https://sailsjs.com/docs/concepts/deployment/scaling) * + * * + ***************************************************************************/ + // adapter: '@sailshq/socket.io-redis', + // url: 'redis://user:password@bigsquid.redistogo.com:9562/databasenumber', + //-------------------------------------------------------------------------- + // /\ OR, to avoid checking it in to version control, you might opt to + // || set sensitive credentials like this using an environment variable. + // + // For example: + // ``` + // sails_sockets__url=redis://admin:myc00lpAssw2D@bigsquid.redistogo.com:9562/0 + // ``` + //-------------------------------------------------------------------------- + + }, + + + + /************************************************************************** + * * + * Set the production log level. * + * * + * (https://sailsjs.com/config/log) * + * * + ***************************************************************************/ + log: { + level: 'debug' + }, + + + + http: { + + /*************************************************************************** + * * + * The number of milliseconds to cache static assets in production. * + * (the "max-age" to include in the "Cache-Control" response header) * + * * + ***************************************************************************/ + cache: 365.25 * 24 * 60 * 60 * 1000, // One year + + /*************************************************************************** + * * + * Proxy settings * + * * + * If your app will be deployed behind a proxy/load balancer - for example, * + * on a PaaS like Heroku - then uncomment the `trustProxy` setting below. * + * This tells Sails/Express how to interpret X-Forwarded headers. * + * * + * This setting is especially important if you are using secure cookies * + * (see the `cookies: secure` setting under `session` above) or if your app * + * relies on knowing the original IP address that a request came from. * + * * + * (https://sailsjs.com/config/http) * + * * + ***************************************************************************/ + // trustProxy: true, + + }, + + + + /************************************************************************** + * * + * Lift the server on port 80. * + * (if deploying behind a proxy, or to a PaaS like Heroku or Deis, you * + * probably don't need to set a port here, because it is oftentimes * + * handled for you automatically. If you are not sure if you need to set * + * this, just try deploying without setting it and see if it works.) * + * * + ***************************************************************************/ + // port: 80, + + + + /************************************************************************** + * * + * Configure an SSL certificate * + * * + * For the safety of your users' data, you should use SSL in production. * + * ...But in many cases, you may not actually want to set it up _here_. * + * * + * Normally, this setting is only relevant when running a single-process * + * deployment, with no proxy/load balancer in the mix. But if, on the * + * other hand, you are using a PaaS like Heroku, you'll want to set up * + * SSL in your load balancer settings (usually somewhere in your hosting * + * provider's dashboard-- not here.) * + * * + * > For more information about configuring SSL in Sails, see: * + * > https://sailsjs.com/config/*#?sailsconfigssl * + * * + **************************************************************************/ + // ssl: undefined, + + + + /************************************************************************** + * * + * Production overrides for any custom settings specific to your app. * + * (for example, production credentials for 3rd party APIs like Stripe) * + * * + * > See config/custom.js for more info on how to configure these options. * + * * + ***************************************************************************/ + custom: { + baseUrl: 'https://example.com', + internalEmailAddress: 'support@example.com', + + // mailgunDomain: 'mg.example.com', + // mailgunSecret: 'key-prod_fake_bd32301385130a0bafe030c', + // stripeSecret: 'sk_prod__fake_Nfgh82401348jaDa3lkZ0d9Hm', + //-------------------------------------------------------------------------- + // /\ OR, to avoid checking them in to version control, you might opt to + // || set sensitive credentials like these using environment variables. + // + // For example: + // ``` + // sails_custom__mailgunDomain=mg.example.com + // sails_custom__mailgunSecret=key-prod_fake_bd32301385130a0bafe030c + // sails_custom__stripeSecret=sk_prod__fake_Nfgh82401348jaDa3lkZ0d9Hm + // ``` + //-------------------------------------------------------------------------- + + }, + + + +}; diff --git a/config/globals.js b/config/globals.js new file mode 100755 index 0000000000000000000000000000000000000000..f63701f9afa9d42448e85476fa0594720b3c5600 --- /dev/null +++ b/config/globals.js @@ -0,0 +1,52 @@ +/** + * Global Variable Configuration + * (sails.config.globals) + * + * Configure which global variables which will be exposed + * automatically by Sails. + * + * For more information on any of these options, check out: + * https://sailsjs.com/config/globals + */ + +module.exports.globals = { + + /**************************************************************************** + * * + * Whether to expose the locally-installed Lodash as a global variable * + * (`_`), making it accessible throughout your app. * + * * + ****************************************************************************/ + + _: require('@sailshq/lodash'), + + /**************************************************************************** + * * + * This app was generated without a dependency on the "async" NPM package. * + * * + * > Don't worry! This is totally unrelated to JavaScript's "async/await". * + * > Your code can (and probably should) use `await` as much as possible. * + * * + ****************************************************************************/ + + async: false, + + /**************************************************************************** + * * + * Whether to expose each of your app's models as global variables. * + * (See the link at the top of this file for more information.) * + * * + ****************************************************************************/ + + models: true, + + /**************************************************************************** + * * + * Whether to expose the Sails app instance as a global variable (`sails`), * + * making it accessible throughout your app. * + * * + ****************************************************************************/ + + sails: true, + +}; diff --git a/config/http.js b/config/http.js new file mode 100755 index 0000000000000000000000000000000000000000..3cf438f1ffcfe76968636bd98a32138238732358 --- /dev/null +++ b/config/http.js @@ -0,0 +1,60 @@ +/** + * HTTP Server Settings + * (sails.config.http) + * + * Configuration for the underlying HTTP server in Sails. + * (for additional recommended settings, see `config/env/production.js`) + * + * For more information on configuration, check out: + * https://sailsjs.com/config/http + */ + +module.exports.http = { + + /**************************************************************************** + * * + * Sails/Express middleware to run for every HTTP request. * + * (Only applies to HTTP requests -- not virtual WebSocket requests.) * + * * + * https://sailsjs.com/documentation/concepts/middleware * + * * + ****************************************************************************/ + + middleware: { + + /*************************************************************************** + * * + * The order in which middleware should be run for HTTP requests. * + * (This Sails app's routes are handled by the "router" middleware below.) * + * * + ***************************************************************************/ + + // order: [ + // 'cookieParser', + // 'session', + // 'bodyParser', + // 'compress', + // 'poweredBy', + // 'router', + // 'www', + // 'favicon', + // ], + + + /*************************************************************************** + * * + * The body parser that will handle incoming multipart HTTP requests. * + * * + * https://sailsjs.com/config/http#?customizing-the-body-parser * + * * + ***************************************************************************/ + + // bodyParser: (function _configureBodyParser(){ + // var skipper = require('skipper'); + // var middlewareFn = skipper({ strict: true }); + // return middlewareFn; + // })(), + + }, + +}; diff --git a/config/i18n.js b/config/i18n.js new file mode 100755 index 0000000000000000000000000000000000000000..0b652d26b59c6591c8dd1b135baa2d7b0284b5dd --- /dev/null +++ b/config/i18n.js @@ -0,0 +1,45 @@ +/** + * Internationalization / Localization Settings + * (sails.config.i18n) + * + * If your app will touch people from all over the world, i18n (or internationalization) + * may be an important part of your international strategy. + * + * For a complete list of options for Sails' built-in i18n support, see: + * https://sailsjs.com/config/i-18-n + * + * For more info on i18n in Sails in general, check out: + * https://sailsjs.com/docs/concepts/internationalization + */ + +module.exports.i18n = { + + /*************************************************************************** + * * + * Which locales are supported? * + * * + ***************************************************************************/ + + locales: ['en', 'es', 'fr', 'de'], + + /**************************************************************************** + * * + * What is the default locale for the site? Note that this setting will be * + * overridden for any request that sends an "Accept-Language" header (i.e. * + * most browsers), but it's still useful if you need to localize the * + * response for requests made by non-browser clients (e.g. cURL). * + * * + ****************************************************************************/ + + // defaultLocale: 'en', + + /**************************************************************************** + * * + * Path (relative to app root) of directory to store locale (translation) * + * files in. * + * * + ****************************************************************************/ + + // localesDirectory: 'config/locales' + +}; diff --git a/config/locales/de.json b/config/locales/de.json new file mode 100755 index 0000000000000000000000000000000000000000..12f23d94a293c00a59b34ecc90f2bbff50240e7c --- /dev/null +++ b/config/locales/de.json @@ -0,0 +1,4 @@ +{ + "Welcome": "Willkommen", + "A brand new app.": "Eine neue App." +} diff --git a/config/locales/en.json b/config/locales/en.json new file mode 100755 index 0000000000000000000000000000000000000000..5989bd9df910cedb19ac0c8be676a49d1b94674d --- /dev/null +++ b/config/locales/en.json @@ -0,0 +1,4 @@ +{ + "Welcome": "Welcome", + "A brand new app.": "A brand new app." +} diff --git a/config/locales/es.json b/config/locales/es.json new file mode 100755 index 0000000000000000000000000000000000000000..bc6edbf0364e41e18d72ac08eba4c89cfde53c10 --- /dev/null +++ b/config/locales/es.json @@ -0,0 +1,4 @@ +{ + "Welcome": "Bienvenido", + "A brand new app.": "Una nueva aplicación." +} diff --git a/config/locales/fr.json b/config/locales/fr.json new file mode 100755 index 0000000000000000000000000000000000000000..b5997400f663919c530d9d7e4146646dd4b3a6e0 --- /dev/null +++ b/config/locales/fr.json @@ -0,0 +1,4 @@ +{ + "Welcome": "Bienvenue", + "A brand new app.": "Une toute nouvelle application." +} diff --git a/config/log.js b/config/log.js new file mode 100755 index 0000000000000000000000000000000000000000..1ecd3f255c4e2613a885d68e31db1866e8b9cd23 --- /dev/null +++ b/config/log.js @@ -0,0 +1,29 @@ +/** + * Built-in Log Configuration + * (sails.config.log) + * + * Configure the log level for your app, as well as the transport + * (Underneath the covers, Sails uses Winston for logging, which + * allows for some pretty neat custom transports/adapters for log messages) + * + * For more information on the Sails logger, check out: + * https://sailsjs.com/docs/concepts/logging + */ + +module.exports.log = { + + /*************************************************************************** + * * + * Valid `level` configs: i.e. the minimum log level to capture with * + * sails.log.*() * + * * + * The order of precedence for log levels from lowest to highest is: * + * silly, verbose, info, debug, warn, error * + * * + * You may also set the level to "silent" to suppress all logs. * + * * + ***************************************************************************/ + + level: 'info' + +}; diff --git a/config/models.js b/config/models.js new file mode 100755 index 0000000000000000000000000000000000000000..7582e5772eb796d7665a59d2a58757b8b6bc6049 --- /dev/null +++ b/config/models.js @@ -0,0 +1,124 @@ +/** + * Default model settings + * (sails.config.models) + * + * Your default, project-wide model settings. Can also be overridden on a + * per-model basis by setting a top-level properties in the model definition. + * + * For details about all available model settings, see: + * https://sailsjs.com/config/models + * + * For more general background on Sails model settings, and how to configure + * them on a project-wide or per-model basis, see: + * https://sailsjs.com/docs/concepts/models-and-orm/model-settings + */ + +module.exports.models = { + + + /*************************************************************************** + * * + * Whether model methods like `.create()` and `.update()` should ignore * + * (and refuse to persist) unrecognized data-- i.e. properties other than * + * those explicitly defined by attributes in the model definition. * + * * + * To ease future maintenance of your code base, it is usually a good idea * + * to set this to `true`. * + * * + * > Note that `schema: false` is not supported by every database. * + * > For example, if you are using a SQL database, then relevant models * + * > are always effectively `schema: true`. And if no `schema` setting is * + * > provided whatsoever, the behavior is left up to the database adapter. * + * > * + * > For more info, see: * + * > https://sailsjs.com/docs/concepts/orm/model-settings#?schema * + * * + ***************************************************************************/ + + // schema: true, + + + /*************************************************************************** + * * + * How and whether Sails will attempt to automatically rebuild the * + * tables/collections/etc. in your schema. * + * * + * > Note that, when running in a production environment, this will be * + * > automatically set to `migrate: 'safe'`, no matter what you configure * + * > here. This is a failsafe to prevent Sails from accidentally running * + * > auto-migrations on your production database. * + * > * + * > For more info, see: * + * > https://sailsjs.com/docs/concepts/orm/model-settings#?migrate * + * * + ***************************************************************************/ + + migrate: 'alter', + + + /*************************************************************************** + * * + * Base attributes that are included in all of your models by default. * + * By convention, this is your primary key attribute (`id`), as well as two * + * other timestamp attributes for tracking when records were last created * + * or updated. * + * * + * > For more info, see: * + * > https://sailsjs.com/docs/concepts/orm/model-settings#?attributes * + * * + ***************************************************************************/ + + attributes: { + createdAt: { type: 'number', autoCreatedAt: true, }, + updatedAt: { type: 'number', autoUpdatedAt: true, }, + id: { type: 'number', autoIncrement: true, }, + //-------------------------------------------------------------------------- + // /\ Using MongoDB? + // || Replace `id` above with this instead: + // + // ``` + // id: { type: 'string', columnName: '_id' }, + // ``` + // + // Plus, don't forget to configure MongoDB as your default datastore: + // https://sailsjs.com/docs/tutorials/using-mongo-db + //-------------------------------------------------------------------------- + }, + + + /****************************************************************************** + * * + * The set of DEKs (data encryption keys) for at-rest encryption. * + * i.e. when encrypting/decrypting data for attributes with `encrypt: true`. * + * * + * > The `default` DEK is used for all new encryptions, but multiple DEKs * + * > can be configured to allow for key rotation. In production, be sure to * + * > manage these keys like you would any other sensitive credential. * + * * + * > For more info, see: * + * > https://sailsjs.com/docs/concepts/orm/model-settings#?dataEncryptionKeys * + * * + ******************************************************************************/ + + dataEncryptionKeys: { + default: 'OOwOUl/GeSxYFnqrfJTvtBFvRt1SJtR6HBmQwnZ2fyA=' + }, + + + /*************************************************************************** + * * + * Whether or not implicit records for associations should be cleaned up * + * automatically using the built-in polyfill. This is especially useful * + * during development with sails-disk. * + * * + * Depending on which databases you're using, you may want to disable this * + * polyfill in your production environment. * + * * + * (For production configuration, see `config/env/production.js`.) * + * * + ***************************************************************************/ + + cascadeOnDestroy: true + + +}; diff --git a/config/policies.js b/config/policies.js new file mode 100755 index 0000000000000000000000000000000000000000..c4d1bb53bbfb8d92ba0ec4d51e21cdcf4849effd --- /dev/null +++ b/config/policies.js @@ -0,0 +1,22 @@ +/** + * Policy Mappings + * (sails.config.policies) + * + * Policies are simple functions which run **before** your actions. + * + * For more information on configuring policies, check out: + * https://sailsjs.com/docs/concepts/policies + */ + +module.exports.policies = { + + /*************************************************************************** + * * + * Default policy for all controllers and actions, unless overridden. * + * (`true` allows public access) * + * * + ***************************************************************************/ + + // '*': true, + +}; diff --git a/config/routes.js b/config/routes.js new file mode 100755 index 0000000000000000000000000000000000000000..e0ed3235421b787f0ee45f9d43e2db818b8784da --- /dev/null +++ b/config/routes.js @@ -0,0 +1,45 @@ +/** + * Route Mappings + * (sails.config.routes) + * + * Your routes tell Sails what to do each time it receives a request. + * + * For more information on configuring custom routes, check out: + * https://sailsjs.com/anatomy/config/routes-js + */ + +module.exports.routes = { + + /*************************************************************************** + * * + * Make the view located at `views/homepage.ejs` your home page. * + * * + * (Alternatively, remove this and add an `index.html` file in your * + * `assets` directory) * + * * + ***************************************************************************/ + + '/': { view: 'pages/homepage' }, + 'GET /blockchain/verify/:ots/:file_hash' : 'BlockchainController.verify', + 'GET /blockchain/get_block_number/:ots' : 'BlockchainController.getBlockNumber', + 'GET /blockchain/get_hash/:ots' : 'BlockchainController.getHash', + 'GET /blockchain/create_account' : 'BlockchainController.createAccount', + + + 'POST /blockchain/send_transaction' : 'BlockchainController.sendTransaction', + 'POST /blockchain/stamp' : 'BlockchainController.stamp', + + + /*************************************************************************** + * * + * More custom routes here... * + * (See https://sailsjs.com/config/routes for examples.) * + * * + * If a request to a URL doesn't match any of the routes in this file, it * + * is matched against "shadow routes" (e.g. blueprint routes). If it does * + * not match any of those, it is matched against static assets. * + * * + ***************************************************************************/ + + +}; diff --git a/config/security.js b/config/security.js new file mode 100755 index 0000000000000000000000000000000000000000..bd5763165d4635a05c10dd081aba5f5c7d209397 --- /dev/null +++ b/config/security.js @@ -0,0 +1,54 @@ +/** + * Security Settings + * (sails.config.security) + * + * These settings affect aspects of your app's security, such + * as how it deals with cross-origin requests (CORS) and which + * routes require a CSRF token to be included with the request. + * + * For an overview of how Sails handles security, see: + * https://sailsjs.com/documentation/concepts/security + * + * For additional options and more information, see: + * https://sailsjs.com/config/security + */ + +module.exports.security = { + + /*************************************************************************** + * * + * CORS is like a more modern version of JSONP-- it allows your application * + * to circumvent browsers' same-origin policy, so that the responses from * + * your Sails app hosted on one domain (e.g. example.com) can be received * + * in the client-side JavaScript code from a page you trust hosted on _some * + * other_ domain (e.g. trustedsite.net). * + * * + * For additional options and more information, see: * + * https://sailsjs.com/docs/concepts/security/cors * + * * + ***************************************************************************/ + + // cors: { + // allRoutes: false, + // allowOrigins: '*', + // allowCredentials: false, + // }, + + + /**************************************************************************** + * * + * By default, Sails' built-in CSRF protection is disabled to facilitate * + * rapid development. But be warned! If your Sails app will be accessed by * + * web browsers, you should _always_ enable CSRF protection before deploying * + * to production. * + * * + * To enable CSRF protection, set this to `true`. * + * * + * For more information, see: * + * https://sailsjs.com/docs/concepts/security/csrf * + * * + ****************************************************************************/ + + // csrf: false + +}; diff --git a/config/session.js b/config/session.js new file mode 100755 index 0000000000000000000000000000000000000000..dcd2a7f0204eee5cb18ddc0e376ea8e074bf853a --- /dev/null +++ b/config/session.js @@ -0,0 +1,39 @@ +/** + * Session Configuration + * (sails.config.session) + * + * Use the settings below to configure session integration in your app. + * (for additional recommended settings, see `config/env/production.js`) + * + * For all available options, see: + * https://sailsjs.com/config/session + */ + +module.exports.session = { + + /*************************************************************************** + * * + * Session secret is automatically generated when your new app is created * + * Replace at your own risk in production-- you will invalidate the cookies * + * of your users, forcing them to log in again. * + * * + ***************************************************************************/ + secret: '348dd23253502618c83fe7b1832a12ce', + + + /*************************************************************************** + * * + * Customize when built-in session support will be skipped. * + * * + * (Useful for performance tuning; particularly to avoid wasting cycles on * + * session management when responding to simple requests for static assets, * + * like images or stylesheets.) * + * * + * https://sailsjs.com/config/session * + * * + ***************************************************************************/ + // isSessionDisabled: function (req){ + // return !!req.path.match(req._sails.LOOKS_LIKE_ASSET_RX); + // }, + +}; diff --git a/config/sockets.js b/config/sockets.js new file mode 100755 index 0000000000000000000000000000000000000000..9f466a04d9d25ec47f06a9eca2383ad3af29b711 --- /dev/null +++ b/config/sockets.js @@ -0,0 +1,82 @@ +/** + * WebSocket Server Settings + * (sails.config.sockets) + * + * Use the settings below to configure realtime functionality in your app. + * (for additional recommended settings, see `config/env/production.js`) + * + * For all available options, see: + * https://sailsjs.com/config/sockets + */ + +module.exports.sockets = { + + /*************************************************************************** + * * + * `transports` * + * * + * The protocols or "transports" that socket clients are permitted to * + * use when connecting and communicating with this Sails application. * + * * + * > Never change this here without also configuring `io.sails.transports` * + * > in your client-side code. If the client and the server are not using * + * > the same array of transports, sockets will not work properly. * + * > * + * > For more info, see: * + * > https://sailsjs.com/docs/reference/web-sockets/socket-client * + * * + ***************************************************************************/ + + // transports: [ 'websocket' ], + + + /*************************************************************************** + * * + * `beforeConnect` * + * * + * This custom beforeConnect function will be run each time BEFORE a new * + * socket is allowed to connect, when the initial socket.io handshake is * + * performed with the server. * + * * + * https://sailsjs.com/config/sockets#?beforeconnect * + * * + ***************************************************************************/ + + // beforeConnect: function(handshake, proceed) { + // + // // `true` allows the socket to connect. + // // (`false` would reject the connection) + // return proceed(undefined, true); + // + // }, + + + /*************************************************************************** + * * + * `afterDisconnect` * + * * + * This custom afterDisconnect function will be run each time a socket * + * disconnects * + * * + ***************************************************************************/ + + // afterDisconnect: function(session, socket, done) { + // + // // By default: do nothing. + // // (but always trigger the callback) + // return done(); + // + // }, + + + /*************************************************************************** + * * + * Whether to expose a 'GET /__getcookie' route that sets an HTTP-only * + * session cookie. * + * * + ***************************************************************************/ + + // grant3rdPartyCookie: true, + + +}; diff --git a/config/views.js b/config/views.js new file mode 100755 index 0000000000000000000000000000000000000000..55d0f9243bafb55378dc2b146696229498f72192 --- /dev/null +++ b/config/views.js @@ -0,0 +1,41 @@ +/** + * View Engine Configuration + * (sails.config.views) + * + * Server-sent views are a secure and effective way to get your app up + * and running. Views are normally served from actions. Below, you can + * configure your templating language/framework of choice and configure + * Sails' layout support. + * + * For details on available options for configuring server-side views, check out: + * https://sailsjs.com/config/views + * + * For more background information on views and partials in Sails, check out: + * https://sailsjs.com/docs/concepts/views + */ + +module.exports.views = { + + /*************************************************************************** + * * + * Extension to use for your views. When calling `res.view()` in an action, * + * you can leave this extension off. For example, calling * + * `res.view('homepage')` will (using default settings) look for a * + * `views/homepage.ejs` file. * + * * + ***************************************************************************/ + + // extension: 'ejs', + + /*************************************************************************** + * * + * The path (relative to the views directory, and without extension) to * + * the default layout file to use, or `false` to disable layouts entirely. * + * * + * Note that layouts only work with the built-in EJS view engine! * + * * + ***************************************************************************/ + + layout: 'layouts/layout' + +}; diff --git a/package-lock.json b/package-lock.json new file mode 100755 index 0000000000000000000000000000000000000000..060258d281725653a18593b892915e2ba8306bb9 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,9549 @@ +{ + "name": "tsa-api-rest", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", + "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", + "dev": true + }, + "@babel/highlight": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.9.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@sailshq/connect-redis": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@sailshq/connect-redis/-/connect-redis-3.2.1.tgz", + "integrity": "sha512-WoirB/kUnHm5ORSMjyqElmdIY+Xq/gwW5HxKr0V8u6p833rMP25JXParG8IBo3Y3R+IUQEmv9JeJs/tE09eh5Q==", + "requires": { + "debug": "^2.2.0", + "redis": "^2.1.0" + } + }, + "@sailshq/lodash": { + "version": "3.10.4", + "resolved": "https://registry.npmjs.org/@sailshq/lodash/-/lodash-3.10.4.tgz", + "integrity": "sha512-YXJqp9gdHcZKAmBY/WnwFpPtNQp2huD/ME2YMurH2YHJvxrVzYsmpKw/pb7yINArRpp8E++fwbQd3ajYXGA45Q==" + }, + "@sailshq/socket.io-redis": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@sailshq/socket.io-redis/-/socket.io-redis-5.2.0.tgz", + "integrity": "sha512-kPxYtZKk2NEwXrDcuIWOmi009UoTb46OxD83Hy1rycoADP7YihMi1YceLxQsecCVhAH2Z/iO4SAqDEkCJLIQuQ==", + "requires": { + "debug": "~2.6.8", + "notepack.io": "~2.1.2", + "redis": "~2.8.0", + "socket.io-adapter": "~1.1.0", + "uid2": "0.0.3" + } + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "12.12.36", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.36.tgz", + "integrity": "sha512-hmmypvyO/uTLFYCYu6Hlb3ydeJ11vXRxg8/WJ0E3wvwmPO0y47VqnfmXFVuWlysO0Zyj+je1Y33rQeuYkZ51GQ==" + }, + "@web3-js/scrypt-shim": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@web3-js/scrypt-shim/-/scrypt-shim-0.1.0.tgz", + "integrity": "sha512-ZtZeWCc/s0nMcdx/+rZwY1EcuRdemOK9ag21ty9UsHkFxsNb/AaoucUz0iPuyGe0Ku+PFuRmWZG7Z7462p9xPw==", + "requires": { + "scryptsy": "^2.1.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@web3-js/websocket": { + "version": "1.0.30", + "resolved": "https://registry.npmjs.org/@web3-js/websocket/-/websocket-1.0.30.tgz", + "integrity": "sha512-fDwrD47MiDrzcJdSeTLF75aCcxVVt8B1N74rA+vh2XCAvFy4tEWJjtnUtj2QG7/zlQ6g9cQ88bZFBxwd9/FmtA==", + "requires": { + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "nan": "^2.14.0", + "typedarray-to-buffer": "^3.1.5", + "yaeti": "^0.0.6" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "dev": true + }, + "acorn-jsx": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", + "dev": true + }, + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, + "ajv": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "anchor": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/anchor/-/anchor-1.4.0.tgz", + "integrity": "sha512-xEu0UWxNa3p5v3MmXN9id5tsMSiniCyzWamf/R3KRkJieSRdXdAWu0Z+tXIpDZbbVLWZSMnD1VEguuYX2s9xag==", + "requires": { + "@sailshq/lodash": "^3.10.2", + "validator": "5.7.0" + } + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + } + } + }, + "array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=" + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "available-typed-arrays": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", + "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", + "requires": { + "array-filter": "^1.0.0" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", + "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, + "binary-search-tree": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/binary-search-tree/-/binary-search-tree-0.2.5.tgz", + "integrity": "sha1-fbs7IQ/coIJFDa0jNMMErzm9x4Q=", + "requires": { + "underscore": "~1.4.4" + } + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bip66": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", + "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" + }, + "bluebird": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.2.1.tgz", + "integrity": "sha1-POzzUEkEwwzj55wXCHfok6EZEP0=" + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.1", + "http-errors": "~1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "~2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "~1.6.15" + }, + "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + } + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, + "buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + } + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "captains-log": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/captains-log/-/captains-log-2.0.3.tgz", + "integrity": "sha512-hKlNLw/4Qz1vPDhAbn3pRexi8fzY7d3SwX/BtI2lMG09UqK1W1mf2pYFslau3ZPWxdcwBBcsLLi9ngs+xhqD2Q==", + "requires": { + "@sailshq/lodash": "^3.10.2", + "chalk": "1.1.3", + "rc": "1.2.8", + "semver": "5.4.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "coffeescript": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.10.0.tgz", + "integrity": "sha1-56qDAZF+9iGzXYo580jc3R234z4=" + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" + }, + "common-js-file-extensions": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/common-js-file-extensions/-/common-js-file-extensions-1.0.2.tgz", + "integrity": "sha1-Hs8ThwARVtpoD1gUmovpvrgEvx4=" + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.1.tgz", + "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=", + "requires": { + "accepts": "~1.3.4", + "bytes": "3.0.0", + "compressible": "~2.0.11", + "debug": "2.6.9", + "on-headers": "~1.0.1", + "safe-buffer": "5.1.1", + "vary": "~1.1.2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "connect": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz", + "integrity": "sha1-+43ee6B2OHfQ7J352sC0tA5yx9o=", + "requires": { + "debug": "2.6.9", + "finalhandler": "1.0.6", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + } + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-parser": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", + "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=", + "requires": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6" + } + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "crc": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", + "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms=" + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "csrf": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/csrf/-/csrf-3.0.6.tgz", + "integrity": "sha1-thEg3c7q/JHnbtUxO7XAsmZ7cQo=", + "requires": { + "rndm": "1.2.0", + "tsscmp": "1.0.5", + "uid-safe": "2.1.4" + }, + "dependencies": { + "uid-safe": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.4.tgz", + "integrity": "sha1-Otbzg2jG1MjHXsF2I/t5qh0HHYE=", + "requires": { + "random-bytes": "~1.0.0" + } + } + } + }, + "csurf": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/csurf/-/csurf-1.9.0.tgz", + "integrity": "sha1-SdLGkl/87Ht95VlZfBU/pTM2QTM=", + "requires": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "csrf": "~3.0.3", + "http-errors": "~1.5.0" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "requires": { + "array-find-index": "^1.0.1" + } + }, + "cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "requires": { + "get-stdin": "^4.0.1", + "meow": "^3.3.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "requires": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "requires": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "requires": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "requires": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "requires": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } + } + } + }, + "deep-equal": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.2.tgz", + "integrity": "sha512-kX0bjV7tdMuhrhzKPEnVwqfQCuf+IEfN+4Xqv4eKd75xGRyn8yzdQ9ujPY6a221rgJKyQC4KBu1PibDTpa6m9w==", + "requires": { + "es-abstract": "^1.17.5", + "es-get-iterator": "^1.1.0", + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.2", + "is-regex": "^1.0.5", + "isarray": "^2.0.5", + "object-is": "^1.0.2", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.2", + "which-boxed-primitive": "^1.0.1", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + } + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "double-ended-queue": { + "version": "2.1.0-0", + "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", + "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=" + }, + "drbg.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", + "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", + "requires": { + "browserify-aes": "^1.0.6", + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "ejs": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz", + "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=" + }, + "elliptic": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", + "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "encrypted-attr": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/encrypted-attr/-/encrypted-attr-1.0.6.tgz", + "integrity": "sha512-12WE8GDkbhKcGmVp6+TyJXCcFj9NF7db33nutjOSBLlMuYY4oCGricgTEUAuRSI1xLeE1nhoDD6jSx20WgFVYg==", + "requires": { + "lodash": "^4.17.4" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "engine.io": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.3.2.tgz", + "integrity": "sha512-AsaA9KG7cWPXWHp5FvHdDWY3AMWeZ8x+2pUVLcn71qE5AtAzgGbxuclOytygskw8XGmiQafTmnI9Bix3uihu2w==", + "requires": { + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~6.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-client": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.2.tgz", + "integrity": "sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ==", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~6.1.0", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-get-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz", + "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==", + "requires": { + "es-abstract": "^1.17.4", + "has-symbols": "^1.0.1", + "is-arguments": "^1.0.4", + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + } + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "eslint": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.2.2", + "js-yaml": "^3.13.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true + }, + "espree": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "dev": true, + "requires": { + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", + "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "eth-ens-namehash": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", + "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=", + "requires": { + "idna-uts46-hx": "^2.3.1", + "js-sha3": "^0.5.7" + }, + "dependencies": { + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" + } + } + }, + "eth-lib": { + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", + "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "nano-json-stream-parser": "^0.1.2", + "servify": "^0.1.12", + "ws": "^3.0.0", + "xhr-request-promise": "^0.1.2" + }, + "dependencies": { + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } + } + }, + "ethereum-bloom-filters": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.7.tgz", + "integrity": "sha512-cDcJJSJ9GMAcURiAWO3DxIEhTL/uWqlQnvgKpuYQzYPrt/izuGU+1ntQmHt0IRq6ADoSYHFnB+aCEFIldjhkMQ==", + "requires": { + "js-sha3": "^0.8.0" + } + }, + "ethereum-common": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", + "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=" + }, + "ethereumjs-common": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.0.tgz", + "integrity": "sha512-SZOjgK1356hIY7MRj3/ma5qtfr/4B5BL+G4rP/XSMYr2z1H5el4RX5GReYCKmQmYI/nSBmRnwrZ17IfHuG0viQ==" + }, + "ethereumjs-tx": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", + "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", + "requires": { + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" + } + }, + "ethereumjs-util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", + "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "ethjs-util": "^0.1.3", + "keccak": "^1.0.2", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1", + "secp256k1": "^3.0.1" + } + }, + "ethers": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.3.tgz", + "integrity": "sha512-YYPogooSknTwvHg3+Mv71gM/3Wcrx+ZpCzarBj3mqs9njjRkrOo2/eufzhHloOCo3JSoNI4TQJJ6yU5ABm3Uog==", + "requires": { + "@types/node": "^10.3.2", + "aes-js": "3.0.0", + "bn.js": "^4.4.0", + "elliptic": "6.3.3", + "hash.js": "1.1.3", + "js-sha3": "0.5.7", + "scrypt-js": "2.0.3", + "setimmediate": "1.0.4", + "uuid": "2.0.1", + "xmlhttprequest": "1.8.0" + }, + "dependencies": { + "@types/node": { + "version": "10.17.20", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.20.tgz", + "integrity": "sha512-XgDgo6W10SeGEAM0k7FosJpvLCynOTYns4Xk3J5HGrA+UI/bKZ30PGMzOP5Lh2zs4259I71FSYLAtjnx3qhObw==" + }, + "elliptic": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", + "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "inherits": "^2.0.1" + } + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" + } + }, + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" + }, + "setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" + }, + "uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" + } + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } + }, + "ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, + "eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=" + }, + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" + }, + "express": { + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", + "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "requires": { + "accepts": "~1.3.4", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.1", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.0", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.2", + "qs": "6.5.1", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.1", + "serve-static": "1.13.1", + "setprototypeof": "1.1.0", + "statuses": "~1.3.1", + "type-is": "~1.6.15", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + } + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + } + } + }, + "express-session": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.15.6.tgz", + "integrity": "sha512-r0nrHTCYtAMrFwZ0kBzZEXa1vtPVrw0dKvGSrKP4dahwBQ1BJpF2/y1Pp4sCD/0kvxV4zZeclyvfmw0B4RMJQA==", + "requires": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "crc": "3.4.4", + "debug": "2.6.9", + "depd": "~1.1.1", + "on-headers": "~1.0.1", + "parseurl": "~1.3.2", + "uid-safe": "~2.1.5", + "utils-merge": "1.0.1" + } + }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", + "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" + }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "requires": { + "pend": "~1.2.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "finalhandler": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", + "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "findup-sync": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", + "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "requires": { + "glob": "~5.0.0" + }, + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "flaverr": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/flaverr/-/flaverr-1.10.0.tgz", + "integrity": "sha512-POaguCzNjWKEKsBkks4YGgNv1LVUqTX4MTudca5ArQAxtBrPswQLAW8la4Hbo0EZy9tpU3a9WwsKdAACqZnE/Q==", + "requires": { + "@sailshq/lodash": "^3.10.2" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "getobject": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", + "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "global": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", + "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", + "requires": { + "min-document": "^2.19.0", + "process": "~0.5.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "grunt": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.4.tgz", + "integrity": "sha512-PYsMOrOC+MsdGEkFVwMaMyc6Ob7pKmq+deg1Sjr+vvMWp35sztfwKE7qoN51V+UEtHsyNuMcGdgMLFkBHvMxHQ==", + "requires": { + "coffeescript": "~1.10.0", + "dateformat": "~1.0.12", + "eventemitter2": "~0.4.13", + "exit": "~0.1.1", + "findup-sync": "~0.3.0", + "glob": "~7.0.0", + "grunt-cli": "~1.2.0", + "grunt-known-options": "~1.1.0", + "grunt-legacy-log": "~2.0.0", + "grunt-legacy-util": "~1.1.1", + "iconv-lite": "~0.4.13", + "js-yaml": "~3.13.0", + "minimatch": "~3.0.2", + "mkdirp": "~0.5.1", + "nopt": "~3.0.6", + "path-is-absolute": "~1.0.0", + "rimraf": "~2.6.2" + }, + "dependencies": { + "grunt-cli": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", + "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", + "requires": { + "findup-sync": "~0.3.0", + "grunt-known-options": "~1.1.0", + "nopt": "~3.0.6", + "resolve": "~1.1.0" + } + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" + } + } + }, + "grunt-known-options": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz", + "integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ==" + }, + "grunt-legacy-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz", + "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==", + "requires": { + "colors": "~1.1.2", + "grunt-legacy-log-utils": "~2.0.0", + "hooker": "~0.2.3", + "lodash": "~4.17.5" + } + }, + "grunt-legacy-log-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz", + "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==", + "requires": { + "chalk": "~2.4.1", + "lodash": "~4.17.10" + } + }, + "grunt-legacy-util": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz", + "integrity": "sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A==", + "requires": { + "async": "~1.5.2", + "exit": "~0.1.1", + "getobject": "~0.1.0", + "hooker": "~0.2.3", + "lodash": "~4.17.10", + "underscore.string": "~3.3.4", + "which": "~1.3.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hooker": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=" + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "http-errors": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.1.tgz", + "integrity": "sha1-eIwNLB3iyBuebowBhDtrl+uSB1A=", + "requires": { + "inherits": "2.0.3", + "setprototypeof": "1.0.2", + "statuses": ">= 1.3.1 < 2" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=" + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "i": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", + "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=" + }, + "i18n-2": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/i18n-2/-/i18n-2-0.7.3.tgz", + "integrity": "sha512-NiC0dd+VAVGq/hWsK19XCTwfx7Xr0KPtldQ11/9DHY8Ic4++bbgRhjCvRD1C/K09V7UZpwgVhQuzPPom9XVrOQ==", + "requires": { + "debug": "^3.1.0", + "sprintf-js": "^1.1.1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "idna-uts46-hx": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", + "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", + "requires": { + "punycode": "2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" + } + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "include-all": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/include-all/-/include-all-4.0.3.tgz", + "integrity": "sha1-ZfBujxGJSxp7XsH8l+azOS98+nU=", + "requires": { + "@sailshq/lodash": "^3.10.2", + "merge-dictionaries": "^0.0.3" + }, + "dependencies": { + "merge-dictionaries": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/merge-dictionaries/-/merge-dictionaries-0.0.3.tgz", + "integrity": "sha1-xN5NWNuyXkwoI6owy44VOQaet1c=", + "requires": { + "@sailshq/lodash": "^3.10.2" + } + } + } + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "requires": { + "repeating": "^2.0.0" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.0.tgz", + "integrity": "sha512-t5mGUXC/xRheCK431ylNiSkGGpBp8bHENBcENTkDT6ppwPzEVxNGZRvgvmOEfbWkFhA7D2GEuE2mmQTr78sl2g==" + }, + "is-boolean-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.1.tgz", + "integrity": "sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==" + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", + "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" + }, + "is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" + }, + "is-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", + "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==" + }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" + }, + "is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==" + }, + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "requires": { + "has": "^1.0.3" + } + }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" + }, + "is-set": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz", + "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typed-array": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.3.tgz", + "integrity": "sha512-BSYUBOK/HJibQ30wWkWold5txYwMUXQct9YHAQJr8fSwvZoiglcqB0pd7vEN23+Tsi9IUEjztdOSzl4qLVYGTQ==", + "requires": { + "available-typed-arrays": "^1.0.0", + "es-abstract": "^1.17.4", + "foreach": "^2.0.5", + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==" + }, + "is-weakset": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz", + "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==" + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "keccak": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", + "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", + "requires": { + "bindings": "^1.2.1", + "inherits": "^2.0.3", + "nan": "^2.2.1", + "safe-buffer": "^5.1.0" + } + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "requires": { + "json-buffer": "3.0.0" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "requires": { + "immediate": "~3.0.5" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "localforage": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.7.3.tgz", + "integrity": "sha512-1TulyYfc4udS7ECSBT2vwJksWbkwwTX8BzeUIiq8Y07Riy7bDAAnxDaPU/tWyOVmQAcWJIEIFP9lPfBGqVoPgQ==", + "requires": { + "lie": "3.1.1" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "lodash.issafeinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.issafeinteger/-/lodash.issafeinteger-4.0.4.tgz", + "integrity": "sha1-sXbVmQ7GSdBr7cvOLwKOeJBJT5A=" + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "machine": { + "version": "15.2.2", + "resolved": "https://registry.npmjs.org/machine/-/machine-15.2.2.tgz", + "integrity": "sha512-gXA/U4bjMyQd2QPw8i+AxzXEDkQBImQVE2P7mmTmXPcfszT+NJc5Me0I1Tn6Fj8zsO5EsmsFxD8Xdia751ik/w==", + "requires": { + "@sailshq/lodash": "^3.10.2", + "anchor": "^1.2.0", + "flaverr": "^1.7.0", + "parley": "^3.8.0", + "rttc": "^10.0.0-3" + } + }, + "machine-as-action": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/machine-as-action/-/machine-as-action-10.3.0.tgz", + "integrity": "sha512-4DN6/e5L7dTCeOmK6VErxcqS1mfvU1vl9FAvqZuR/j+xHQoJUhwLgkW3CJXyPesL9+rvGWR5eBsv4o4s/DtxXQ==", + "requires": { + "@sailshq/lodash": "^3.10.2", + "flaverr": "^1.5.1", + "machine": "^15.2.2", + "rttc": "^10.0.0-4", + "streamifier": "0.1.1" + } + }, + "machinepack-fs": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/machinepack-fs/-/machinepack-fs-12.0.1.tgz", + "integrity": "sha512-5Hao0wOgLwUljQtmWKZDYbXNX29Otav9v5S8hxA43H2UP6KT3xFSE4cwwkBB9jHppgYtMqwGa0Q9TFC07hjFkg==", + "requires": { + "fs-extra": "0.30.0", + "machine": "^15.0.0-12", + "walker": "1.0.7" + } + }, + "machinepack-process": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/machinepack-process/-/machinepack-process-4.0.1.tgz", + "integrity": "sha512-/5dqpWVhNjRC78v4cOKMH2I74u3hbM4pVha0SEh427eddWLSDt41txECZh+HLPPD3h/r35UU0cKszIFxqZYJlA==", + "requires": { + "@sailshq/lodash": "^3.10.2", + "machine": "^15.0.0-23", + "opn": "5.3.0" + } + }, + "machinepack-redis": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/machinepack-redis/-/machinepack-redis-2.0.5.tgz", + "integrity": "sha512-K+5j93jaeFKKhtGc0VDVaW/42luxbVnN/XueLfXdJhFam+dMm+06iNzVC0xexZwx+MRfnpWiMOT2TncC+Vi07g==", + "requires": { + "@sailshq/lodash": "^3.10.2", + "async": "2.0.1", + "flaverr": "^1.9.2", + "machine": "^15.2.2", + "redis": "2.8.0" + }, + "dependencies": { + "async": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz", + "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=", + "requires": { + "lodash": "^4.8.0" + } + } + } + }, + "machinepack-urls": { + "version": "6.0.2-0", + "resolved": "https://registry.npmjs.org/machinepack-urls/-/machinepack-urls-6.0.2-0.tgz", + "integrity": "sha512-777UDtPvgDG2XxekkQnjQi6tHgg3uepbjWZFw82isxyMThhsNdrwzaZd9hkupxcECrThw5OuPEsL963ya+SA3w==", + "requires": { + "@sailshq/lodash": "^3.10.2", + "machine": "^15.0.0-2" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "requires": { + "tmpl": "1.0.x" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "merge-defaults": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/merge-defaults/-/merge-defaults-0.2.2.tgz", + "integrity": "sha512-rKkxPFgGDZfmen0IN8BKRsGEbFU3PdO0RhR1GjOk+BLJF7+LAIhs5bUG3s26FkbB5bfIn9il25KkntRGdqHQ3A==", + "requires": { + "@sailshq/lodash": "^3.10.2" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "merge-dictionaries": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/merge-dictionaries/-/merge-dictionaries-1.0.0.tgz", + "integrity": "sha1-eJbuGrGhVQ0yh6AxG323gEtpGTE=", + "requires": { + "@sailshq/lodash": "^3.10.2" + } + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" + }, + "mime-types": { + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "requires": { + "mime-db": "1.43.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "^0.1.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "mkdirp-promise": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", + "requires": { + "mkdirp": "*" + } + }, + "mock-fs": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.11.0.tgz", + "integrity": "sha512-Yp4o3/ZA15wsXqJTT+R+9w2AYIkD1i80Lds47wDbuUhOvQvm+O2EfjFZSz0pMgZZSPHRhGxgcd2+GL4+jZMtdw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multiparty": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-4.1.3.tgz", + "integrity": "sha1-PEPH/LGJbhdGBDap3Qtu8WaOT5Q=", + "requires": { + "fd-slicer": "~1.0.1" + } + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "nan": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" + }, + "nano-json-stream-parser": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", + "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "ncp": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", + "integrity": "sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ=" + }, + "nedb": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/nedb/-/nedb-1.8.0.tgz", + "integrity": "sha1-DjUCzYLABNU1WkPJ5VV3vXvZHYg=", + "requires": { + "async": "0.2.10", + "binary-search-tree": "0.2.5", + "localforage": "^1.3.0", + "mkdirp": "~0.5.1", + "underscore": "~1.4.4" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" + } + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" + }, + "notepack.io": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/notepack.io/-/notepack.io-2.1.3.tgz", + "integrity": "sha512-AgSt+cP5XMooho1Ppn8NB3FFaVWefV+qZoZncYTUSch2GAEwlYLcIIbT5YVkMlFeNHnfwOvc4HDlbvrB5BRxXA==" + }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + }, + "object-is": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", + "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "oboe": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz", + "integrity": "sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY=", + "requires": { + "http-https": "^1.0.0" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "requires": { + "p-finally": "^1.0.0" + } + }, + "parasails": { + "version": "0.7.11", + "resolved": "https://registry.npmjs.org/parasails/-/parasails-0.7.11.tgz", + "integrity": "sha512-KCy+uA3iZeSOXFnOsaeke98/xRkd4dm2C6PkMb6bKIbp4rpc26ytIvTwTRLOvUeVxkBzMhAStooS9baTWoJ8Zw==" + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parley": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/parley/-/parley-3.8.3.tgz", + "integrity": "sha512-9fSqT4J0jRNh+F/5EAqZvUSq232xjFXZJ3rXgKUXbIUUZ0ZPj6VjW83mI5UpVP8PMGHF3I8xycmvNjs9nQ3O8g==", + "requires": { + "@sailshq/lodash": "^3.10.2", + "bluebird": "3.2.1", + "flaverr": "^1.5.1" + } + }, + "parse-asn1": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", + "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-headers": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", + "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-to-regexp": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.5.3.tgz", + "integrity": "sha1-ciHd1CSDU4vd+f6tlCp5/zFk9Xo=", + "requires": { + "isarray": "0.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkginfo": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", + "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=" + }, + "pluralize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "prompt": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz", + "integrity": "sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w=", + "requires": { + "pkginfo": "0.x.x", + "read": "1.0.x", + "revalidator": "0.1.x", + "utile": "0.2.x", + "winston": "0.8.x" + } + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": ">= 1.3.1 < 2" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + } + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "redis": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz", + "integrity": "sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==", + "requires": { + "double-ended-queue": "^2.1.0-0", + "redis-commands": "^1.2.0", + "redis-parser": "^2.6.0" + } + }, + "redis-commands": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.5.0.tgz", + "integrity": "sha512-6KxamqpZ468MeQC3bkWmCB1fp56XL64D4Kf0zJSwDZbVLLm7KFkoIcHrgRvQ+sk8dnhySs7+yBg94yIkAK7aJg==" + }, + "redis-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz", + "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=" + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "requires": { + "is-finite": "^1.0.0" + } + }, + "reportback": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/reportback/-/reportback-2.0.2.tgz", + "integrity": "sha512-EOF6vRKfXjI7ydRoOdXXeRTK1zgWq7mep8/32patt0FOnBap32eTSw6yCea/o0025PHmVB8crx5OxzZJ+/P34g==", + "requires": { + "captains-log": "^2.0.2", + "switchback": "^2.0.1" + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "resolve": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.16.1.tgz", + "integrity": "sha512-rmAglCSqWWMrrBv/XM6sW0NuRFiKViw/W4d9EbC4pt+49H8JwHy+mcGmALTEg504AUDcLTvb1T2q3E9AnmY+ig==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "revalidator": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", + "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=" + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rlp": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.4.tgz", + "integrity": "sha512-fdq2yYCWpAQBhwkZv+Z8o/Z4sPmYm1CUq6P7n6lVTOdb949CnqA0sndXal5C1NleSVSZm6q5F3iEbauyVln/iw==", + "requires": { + "bn.js": "^4.11.1" + } + }, + "rndm": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rndm/-/rndm-1.2.0.tgz", + "integrity": "sha1-8z/pz7Urv9UgqhgyO8ZdsRCht2w=" + }, + "router": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/router/-/router-1.3.2.tgz", + "integrity": "sha1-v6oWiIpSg9XuQNmZ2nqfoVKWpgw=", + "requires": { + "array-flatten": "2.1.1", + "debug": "2.6.9", + "methods": "~1.1.2", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "setprototypeof": "1.1.0", + "utils-merge": "1.0.1" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", + "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + } + } + }, + "rttc": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rttc/-/rttc-10.0.1.tgz", + "integrity": "sha512-wBsGNVaZ8K1qG0n5jxQ7dnOpvpewyQHGIjbMFYx8D16+51MM+FwkZwDPgH4GtnaTSzrNvrJriXFyvDi7OTZQ0A==", + "requires": { + "@sailshq/lodash": "^3.10.2" + } + }, + "run-async": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", + "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "rxjs": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", + "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sails": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sails/-/sails-1.2.4.tgz", + "integrity": "sha512-wOlmqi6j2ZPEgfNpUddFsFUDXQg+WPsHMptpOdMinvNuM5LjE9wx9MW9LDgGlK2zWO5wo7lIQH6M+/Y03Eko5A==", + "requires": { + "@sailshq/lodash": "^3.10.2", + "async": "2.5.0", + "captains-log": "^2.0.0", + "chalk": "2.3.0", + "commander": "2.11.0", + "common-js-file-extensions": "1.0.2", + "compression": "1.7.1", + "connect": "3.6.5", + "cookie": "0.3.1", + "cookie-parser": "1.4.3", + "cookie-signature": "1.0.6", + "csurf": "1.9.0", + "ejs": "2.5.7", + "express": "4.16.2", + "express-session": "1.15.6", + "flaverr": "^1.10.0", + "glob": "7.1.2", + "i18n-2": "0.7.3", + "include-all": "^4.0.0", + "machine": "^15.2.2", + "machine-as-action": "^10.3.0-0", + "machinepack-process": "^4.0.1", + "machinepack-redis": "^2.0.2", + "merge-defaults": "0.2.2", + "merge-dictionaries": "1.0.0", + "minimist": "1.2.5", + "parley": "^3.3.4", + "parseurl": "1.3.2", + "path-to-regexp": "1.5.3", + "pluralize": "1.2.1", + "prompt": "0.2.14", + "rc": "1.2.8", + "router": "1.3.2", + "rttc": "^10.0.0-0", + "sails-generate": "^1.16.0-0", + "sails-stringfile": "^0.3.3", + "semver": "4.3.6", + "serve-favicon": "2.4.5", + "serve-static": "1.13.1", + "skipper": "^0.9.0-0", + "sort-route-addresses": "^0.0.3", + "uid-safe": "2.1.5", + "vary": "1.1.2", + "whelk": "^6.0.1" + }, + "dependencies": { + "async": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", + "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", + "requires": { + "lodash": "^4.14.0" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "requires": { + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=" + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "requires": { + "has-flag": "^2.0.0" + } + } + } + }, + "sails-disk": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sails-disk/-/sails-disk-1.1.2.tgz", + "integrity": "sha512-zdOUzgKUQizvwtanZ4UMFU19NJA4QgGc9idRrCE6AYbo4UQ4E1PoY2GarRZ/SSonG7FSpfnHKt4O7C5pC+VKxQ==", + "requires": { + "@sailshq/lodash": "^3.10.2", + "async": "2.0.1", + "machinepack-fs": "^12.0.1", + "nedb": "1.8.0" + }, + "dependencies": { + "async": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz", + "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=", + "requires": { + "lodash": "^4.8.0" + } + } + } + }, + "sails-generate": { + "version": "1.16.13", + "resolved": "https://registry.npmjs.org/sails-generate/-/sails-generate-1.16.13.tgz", + "integrity": "sha512-RDeiNuARxwQPuAiYqIKsrZtd5S7GRq1HhErJY8artt/hqhatmph/+vTJgGHrTUxygr7hZR4JAUKiXxM/YNRRpw==", + "requires": { + "@sailshq/lodash": "^3.10.3", + "async": "2.0.1", + "chalk": "1.1.3", + "cross-spawn": "4.0.2", + "flaverr": "^1.0.0", + "fs-extra": "0.30.0", + "machinepack-process": "^4.0.0", + "parasails": "^0.7.1", + "read": "1.0.7", + "reportback": "^2.0.1", + "sails.io.js-dist": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "async": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz", + "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=", + "requires": { + "lodash": "^4.8.0" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "sails-hook-grunt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/sails-hook-grunt/-/sails-hook-grunt-4.0.1.tgz", + "integrity": "sha512-y6oL7XxXl1rpSEeGHTXaZKd18FhZL7IX14gh/e4jOT8Nf8L7jLylC16qdn95g0dTO/FJftyTS4Jbl8hGn6CU4Q==", + "requires": { + "@sailshq/grunt-contrib-uglify": "^3.2.1", + "@sailshq/lodash": "^3.10.2", + "babel-core": "6.26.3", + "babel-polyfill": "6.26.0", + "babel-preset-env": "1.7.0", + "chalk": "1.1.3", + "grunt": "1.0.4", + "grunt-babel": "7.0.0", + "grunt-cli": "1.2.0", + "grunt-contrib-clean": "1.0.0", + "grunt-contrib-concat": "1.0.1", + "grunt-contrib-copy": "1.0.0", + "grunt-contrib-cssmin": "2.2.1", + "grunt-contrib-less": "1.3.0", + "grunt-contrib-watch": "1.1.0", + "grunt-hash": "0.5.0", + "grunt-sails-linker": "^0.10.1", + "grunt-sync": "0.8.1", + "include-all": "^4.0.3" + }, + "dependencies": { + "@sailshq/grunt-contrib-uglify": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@sailshq/grunt-contrib-uglify/-/grunt-contrib-uglify-3.2.1.tgz", + "integrity": "sha512-Ouu+APxizW+2BWCrAKyPrNKZUezt5CWDKOc5J5wMhFiKp4P2hndPhllE0B/y95OBbSyvvTPaIuYIgsL8xl+BNQ==", + "requires": { + "chalk": "1.1.3", + "maxmin": "1.1.0", + "uglify-es": "3.2.1", + "uri-path": "1.0.0" + } + }, + "@sailshq/lodash": { + "version": "3.10.3", + "resolved": "https://registry.npmjs.org/@sailshq/lodash/-/lodash-3.10.3.tgz", + "integrity": "sha512-XTF5BtsTSiSpTnfqrCGS5Q8FvSHWCywA0oRxFAZo8E1a8k1MMFUvk3VlRk3q/SusEYwy7gvVdyt9vvNlTa2VuA==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "requires": { + "acorn": "^3.0.4" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" + } + } + }, + "ajv": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", + "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==" + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + } + } + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "optional": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "optional": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "optional": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "optional": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "optional": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "optional": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "requires": { + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "requires": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "requires": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "requires": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=" + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=" + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=" + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "requires": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "requires": { + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "requires": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "requires": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "requires": { + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "requires": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "requires": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "requires": { + "regenerator-transform": "^0.10.0" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "requires": { + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" + } + } + }, + "babel-preset-env": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", + "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", + "requires": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^3.2.6", + "invariant": "^2.2.2", + "semver": "^5.3.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "requires": { + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "body": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", + "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", + "requires": { + "continuable-cache": "^0.3.1", + "error": "^7.0.0", + "raw-body": "~1.1.0", + "safe-json-parse": "~1.0.1" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "browser-stdout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=" + }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "requires": { + "pako": "~0.2.0" + } + }, + "browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "requires": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=" + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "requires": { + "callsites": "^0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=" + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "caniuse-lite": { + "version": "1.0.30000969", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000969.tgz", + "integrity": "sha512-Kus0yxkoAJgVc0bax7S4gLSlFifCa7MnSZL9p9VuS/HIKEL4seaqh28KIQAAO50cD/rJ5CiJkJFapkdDAlhFxQ==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "optional": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==" + }, + "clean-css": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", + "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", + "requires": { + "source-map": "0.5.x" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "coffeescript": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.10.0.tgz", + "integrity": "sha1-56qDAZF+9iGzXYo580jc3R234z4=" + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "optional": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz", + "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "continuable-cache": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", + "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=" + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "core-js": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.7.tgz", + "integrity": "sha512-ydmsQxDVH7lDpYoirXft8S83ddKKfdsrsmWhtyj7xafXVLbLhKOyfD7kAi2ueFfeP7m9rNavjW59O3hLLzzC5A==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "requires": { + "array-find-index": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "optional": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "requires": { + "get-stdin": "^4.0.1", + "meow": "^3.3.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "optional": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "requires": { + "repeating": "^2.0.0" + } + }, + "diff": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", + "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=" + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "^2.0.2" + } + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "electron-to-chromium": { + "version": "1.3.135", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.135.tgz", + "integrity": "sha512-xXLNstRdVsisPF3pL3H9TVZo2XkMILfqtD6RiWIUmDK2sFX1Bjwqmd8LBp0Kuo2FgKO63JXPoEVGm8WyYdwP0Q==" + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "optional": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", + "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", + "requires": { + "string-template": "~0.2.1", + "xtend": "~4.0.0" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "eslint": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.11.0.tgz", + "integrity": "sha512-UWbhQpaKlm8h5x/VLwm0S1kheMrDj8jPwhnBMjr/Dlo3qqT7MvcN/UfKAR3E1N4lr4YNtOvS4m3hwsrVc/ky7g==", + "requires": { + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.0.1", + "doctrine": "^2.0.0", + "eslint-scope": "^3.7.1", + "espree": "^3.5.2", + "esquery": "^1.0.0", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^9.17.0", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", + "table": "^4.0.1", + "text-table": "~0.2.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "requires": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=" + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "optional": true + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "optional": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, + "file-sync-cmp": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", + "integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs=" + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "findup-sync": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", + "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "requires": { + "glob": "~5.0.0" + }, + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "requires": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "optional": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "optional": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fs-extra": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", + "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "requires": { + "globule": "^1.0.0" + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + }, + "getobject": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", + "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "optional": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" + }, + "globule": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", + "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + }, + "dependencies": { + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "growl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=" + }, + "grunt": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.4.tgz", + "integrity": "sha512-PYsMOrOC+MsdGEkFVwMaMyc6Ob7pKmq+deg1Sjr+vvMWp35sztfwKE7qoN51V+UEtHsyNuMcGdgMLFkBHvMxHQ==", + "requires": { + "coffeescript": "~1.10.0", + "dateformat": "~1.0.12", + "eventemitter2": "~0.4.13", + "exit": "~0.1.1", + "findup-sync": "~0.3.0", + "glob": "~7.0.0", + "grunt-cli": "~1.2.0", + "grunt-known-options": "~1.1.0", + "grunt-legacy-log": "~2.0.0", + "grunt-legacy-util": "~1.1.1", + "iconv-lite": "~0.4.13", + "js-yaml": "~3.13.0", + "minimatch": "~3.0.2", + "mkdirp": "~0.5.1", + "nopt": "~3.0.6", + "path-is-absolute": "~1.0.0", + "rimraf": "~2.6.2" + } + }, + "grunt-babel": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/grunt-babel/-/grunt-babel-7.0.0.tgz", + "integrity": "sha512-AFilvH/iPbnIYhL4Wx36AJQCaVEvK55xh0tujAt1DIM5tuxYxRsgUPEpwijBU147B+as/ssGuY9/6JYfTiAWpw==" + }, + "grunt-cli": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", + "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", + "requires": { + "findup-sync": "~0.3.0", + "grunt-known-options": "~1.1.0", + "nopt": "~3.0.6", + "resolve": "~1.1.0" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" + } + } + }, + "grunt-contrib-clean": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.0.0.tgz", + "integrity": "sha1-ay7ZQRfix//jLuBFeMlv5GJam20=", + "requires": { + "async": "^1.5.2", + "rimraf": "^2.5.1" + } + }, + "grunt-contrib-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-1.0.1.tgz", + "integrity": "sha1-YVCYYwhOhx1+ht5IwBUlntl3Rb0=", + "requires": { + "chalk": "^1.0.0", + "source-map": "^0.5.3" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "grunt-contrib-copy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", + "integrity": "sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM=", + "requires": { + "chalk": "^1.1.1", + "file-sync-cmp": "^0.1.0" + } + }, + "grunt-contrib-cssmin": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/grunt-contrib-cssmin/-/grunt-contrib-cssmin-2.2.1.tgz", + "integrity": "sha512-IXNomhQ5ekVZbDbj/ik5YccoD9khU6LT2fDXqO1+/Txjq8cp0tQKjVS8i8EAbHOrSDkL7/UD6A7b+xj98gqh9w==", + "requires": { + "chalk": "^1.0.0", + "clean-css": "~4.1.1", + "maxmin": "^2.1.0" + }, + "dependencies": { + "gzip-size": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", + "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", + "requires": { + "duplexer": "^0.1.1" + } + }, + "maxmin": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz", + "integrity": "sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY=", + "requires": { + "chalk": "^1.0.0", + "figures": "^1.0.1", + "gzip-size": "^3.0.0", + "pretty-bytes": "^3.0.0" + } + }, + "pretty-bytes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", + "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=", + "requires": { + "number-is-nan": "^1.0.0" + } + } + } + }, + "grunt-contrib-less": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-less/-/grunt-contrib-less-1.3.0.tgz", + "integrity": "sha1-UY73yG3GDhWeZRCKp125OpyP9dQ=", + "requires": { + "async": "^1.5.2", + "chalk": "^1.0.0", + "less": "~2.6.0", + "lodash": "^4.8.2" + } + }, + "grunt-contrib-watch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz", + "integrity": "sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg==", + "requires": { + "async": "^2.6.0", + "gaze": "^1.1.0", + "lodash": "^4.17.10", + "tiny-lr": "^1.1.1" + }, + "dependencies": { + "async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "requires": { + "lodash": "^4.17.11" + } + } + } + }, + "grunt-hash": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/grunt-hash/-/grunt-hash-0.5.0.tgz", + "integrity": "sha1-mHgdeZ90spU4aS9Yxh1QZIwb0p4=" + }, + "grunt-known-options": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz", + "integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ==" + }, + "grunt-legacy-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz", + "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==", + "requires": { + "colors": "~1.1.2", + "grunt-legacy-log-utils": "~2.0.0", + "hooker": "~0.2.3", + "lodash": "~4.17.5" + } + }, + "grunt-legacy-log-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz", + "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==", + "requires": { + "chalk": "~2.4.1", + "lodash": "~4.17.10" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "grunt-legacy-util": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz", + "integrity": "sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A==", + "requires": { + "async": "~1.5.2", + "exit": "~0.1.1", + "getobject": "~0.1.0", + "hooker": "~0.2.3", + "lodash": "~4.17.10", + "underscore.string": "~3.3.4", + "which": "~1.3.0" + } + }, + "grunt-sails-linker": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/grunt-sails-linker/-/grunt-sails-linker-0.10.1.tgz", + "integrity": "sha1-DSz1RzwDuuu2zmwd4eWBY9OsjQY=" + }, + "grunt-sync": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/grunt-sync/-/grunt-sync-0.8.1.tgz", + "integrity": "sha512-xoOOgip7LcrwSUbyu27IbWZefjL7M0UNN5V7b0U90REZf1IpDytPWVLNh5dbb/IJUQng3UFyHCUCWPwPDMzipw==", + "requires": { + "fs-extra": "6.0.1", + "glob": "7.0.5", + "md5-file": "2.0.3" + }, + "dependencies": { + "glob": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.5.tgz", + "integrity": "sha1-tCAqaQmbu00pKnwblbZoK2fr3JU=", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "gzip-size": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz", + "integrity": "sha1-Zs+LEBBHInuVus5uodoMF37Vwi8=", + "requires": { + "browserify-zlib": "^0.1.4", + "concat-stream": "^1.4.1" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "optional": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "optional": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } + }, + "hooker": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=" + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" + }, + "http-parser-js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", + "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==" + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "optional": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + }, + "image-size": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.4.0.tgz", + "integrity": "sha1-1LTh9hlS5MvBzqmmsMkV/stwdRA=", + "optional": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "include-all": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/include-all/-/include-all-4.0.3.tgz", + "integrity": "sha1-ZfBujxGJSxp7XsH8l+azOS98+nU=", + "requires": { + "@sailshq/lodash": "^3.10.2", + "merge-dictionaries": "^0.0.3" + } + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "requires": { + "repeating": "^2.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "optional": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "optional": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "optional": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "optional": true + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=" + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "less": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/less/-/less-2.6.1.tgz", + "integrity": "sha1-ZY4B7JrDFJlZxrbfvPvAoXCv2no=", + "requires": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.4.0", + "mime": "^1.2.11", + "mkdirp": "^0.5.0", + "promise": "^7.1.1", + "request": "^2.51.0", + "source-map": "^0.5.3" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "optional": true + } + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "livereload-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", + "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==" + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "requires": { + "lodash._basecopy": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=" + }, + "lodash._basecreate": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", + "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=" + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=" + }, + "lodash.create": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", + "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", + "requires": { + "lodash._baseassign": "^3.0.0", + "lodash._basecreate": "^3.0.0", + "lodash._isiterateecall": "^3.0.0" + } + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "requires": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + }, + "maxmin": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.1.0.tgz", + "integrity": "sha1-cTZehKmd2Piz99X94vANHn9zvmE=", + "requires": { + "chalk": "^1.0.0", + "figures": "^1.0.1", + "gzip-size": "^1.0.0", + "pretty-bytes": "^1.0.0" + } + }, + "md5-file": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-2.0.3.tgz", + "integrity": "sha1-SgULUuQLVHfQmUO/n9fx/4oonNE=" + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "merge-dictionaries": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/merge-dictionaries/-/merge-dictionaries-0.0.3.tgz", + "integrity": "sha1-xN5NWNuyXkwoI6owy44VOQaet1c=", + "requires": { + "@sailshq/lodash": "^3.10.2" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "optional": true + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "optional": true + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "optional": true, + "requires": { + "mime-db": "1.40.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "mocha": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.0.2.tgz", + "integrity": "sha1-Y6l/Phj00+ZZ1HphdnfQiYdFV/A=", + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.9.0", + "debug": "2.2.0", + "diff": "1.4.0", + "escape-string-regexp": "1.0.5", + "glob": "7.0.5", + "growl": "1.9.2", + "json3": "3.3.2", + "lodash.create": "3.1.1", + "mkdirp": "0.5.1", + "supports-color": "3.1.2" + }, + "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } + }, + "glob": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.5.tgz", + "integrity": "sha1-tCAqaQmbu00pKnwblbZoK2fr3JU=", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + }, + "supports-color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", + "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "optional": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "pretty-bytes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", + "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", + "requires": { + "get-stdin": "^4.0.1", + "meow": "^3.1.0" + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "optional": true, + "requires": { + "asap": "~2.0.3" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "optional": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", + "optional": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "raw-body": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", + "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", + "requires": { + "bytes": "1", + "string_decoder": "0.10" + }, + "dependencies": { + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "requires": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + } + } + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "optional": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "requires": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + } + }, + "resolve": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", + "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=" + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "requires": { + "is-promise": "^2.1.0" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "requires": { + "rx-lite": "*" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-json-parse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", + "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "requires": { + "is-fullwidth-code-point": "^2.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "requires": { + "source-map": "^0.5.6" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==" + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "optional": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "table": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", + "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", + "requires": { + "ajv": "^6.0.1", + "ajv-keywords": "^3.0.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "tiny-lr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", + "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", + "requires": { + "body": "^5.1.0", + "debug": "^3.1.0", + "faye-websocket": "~0.10.0", + "livereload-js": "^2.3.0", + "object-assign": "^4.1.0", + "qs": "^6.4.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "optional": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "optional": true + } + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "optional": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "uglify-es": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.2.1.tgz", + "integrity": "sha512-c+Fy4VuGvPmT7mj7vEPjRR/iNFuXuOAkufhCtCvTGX0Hr4gCM9YwCnLgHkxr1ngqSODQaDObU3g8SF8uE/tY1w==", + "requires": { + "commander": "~2.12.1", + "source-map": "~0.6.1" + } + }, + "underscore.string": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", + "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", + "requires": { + "sprintf-js": "^1.0.3", + "util-deprecate": "^1.0.2" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, + "uri-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", + "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "optional": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "optional": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "websocket-driver": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", + "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "requires": { + "http-parser-js": ">=0.4.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "requires": { + "mkdirp": "^0.5.1" + } + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + } + } + }, + "sails-hook-orm": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/sails-hook-orm/-/sails-hook-orm-2.1.1.tgz", + "integrity": "sha512-O6BqlAOpsomXDo6aJyZtmWNn2NwKvONZEFEy5tMhuP682HRxZ40p4iWLz0mkLzAfonpcCr91YoXCXqlWzLkpEA==", + "requires": { + "@sailshq/lodash": "^3.10.2", + "async": "2.0.1", + "chalk": "1.1.3", + "flaverr": "^1.8.0", + "parley": "^3.3.2", + "prompt": "0.2.14", + "sails-disk": "^1.0.0-0", + "waterline": "^0.13.5-0", + "waterline-utils": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "async": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz", + "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=", + "requires": { + "lodash": "^4.8.0" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "sails-hook-sockets": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sails-hook-sockets/-/sails-hook-sockets-2.0.0.tgz", + "integrity": "sha512-Y/HG2iYD8n2ljUYdtKrcu756SAhs0qI9SX9pfO6oWOHbS/OWQYh7I0iMGmbMX+qo67OVDnLdwMP4brIHt9kuLg==", + "requires": { + "@sailshq/lodash": "^3.10.2", + "async": "2.0.1", + "flaverr": "^1.0.0", + "machinepack-redis": "^2.0.3", + "machinepack-urls": "^6.0.2-0", + "proxy-addr": "1.1.5", + "semver": "4.3.6", + "socket.io": "2.2.0", + "uid2": "0.0.3" + }, + "dependencies": { + "async": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz", + "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=", + "requires": { + "lodash": "^4.8.0" + } + }, + "ipaddr.js": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz", + "integrity": "sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA=" + }, + "proxy-addr": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz", + "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=", + "requires": { + "forwarded": "~0.1.0", + "ipaddr.js": "1.4.0" + } + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=" + } + } + }, + "sails-stringfile": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/sails-stringfile/-/sails-stringfile-0.3.3.tgz", + "integrity": "sha512-m61lSEURCpKf2T7Df9lkG2eWBPGFKrhJZi8OF3TMQe7HGWyUpYdwKhV6rFsky1gY6g4ecvTZTAqwHXOE1AtaCA==", + "requires": { + "@sailshq/lodash": "^3.10.2", + "colors": "*" + } + }, + "sails.io.js-dist": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sails.io.js-dist/-/sails.io.js-dist-1.2.1.tgz", + "integrity": "sha512-fBMdntawlqd5N/1xL9Vu6l+J5zvy86jLUf0nFDal5McUeZzUy7PpNqq+Vx/F9KgItAyFJ7RoO3YltO9dD0Q5OQ==" + }, + "scrypt-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz", + "integrity": "sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q=" + }, + "scryptsy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-2.1.0.tgz", + "integrity": "sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w==" + }, + "secp256k1": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.8.0.tgz", + "integrity": "sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==", + "requires": { + "bindings": "^1.5.0", + "bip66": "^1.1.5", + "bn.js": "^4.11.8", + "create-hash": "^1.2.0", + "drbg.js": "^1.0.1", + "elliptic": "^6.5.2", + "nan": "^2.14.0", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + } + } + }, + "seek-bzip": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", + "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "requires": { + "commander": "~2.8.1" + }, + "dependencies": { + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "requires": { + "graceful-readlink": ">= 1.0.0" + } + } + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "send": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", + "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.1", + "destroy": "~1.0.4", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.3.1" + }, + "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "dependencies": { + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + } + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + } + } + }, + "serve-favicon": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.4.5.tgz", + "integrity": "sha512-s7F8h2NrslMkG50KxvlGdj+ApSwaLex0vexuJ9iFf3GLTIp1ph/l1qZvRe9T9TJEYZgmq72ZwJ2VYiAEtChknw==", + "requires": { + "etag": "~1.8.1", + "fresh": "0.5.2", + "ms": "2.0.0", + "parseurl": "~1.3.2", + "safe-buffer": "5.1.1" + } + }, + "serve-static": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", + "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "requires": { + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.1" + } + }, + "servify": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", + "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", + "requires": { + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.2.tgz", + "integrity": "sha1-gaVSFB7BBLiOic44MQOtXGZWTQg=" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "side-channel": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz", + "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==", + "requires": { + "es-abstract": "^1.17.0-next.1", + "object-inspect": "^1.7.0" + } + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "simple-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", + "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" + }, + "simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "requires": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "skipper": { + "version": "0.9.0-4", + "resolved": "https://registry.npmjs.org/skipper/-/skipper-0.9.0-4.tgz", + "integrity": "sha512-7q4pC2mkaVC/YphYn7bFzlcsPTdr/h6qZqtX1rtO5gkPmmBO3+z/7D7BgpLSG3C6Ji/PXm4Wk2GwXyXWIXwZ2w==", + "requires": { + "@sailshq/lodash": "^3.10.3", + "async": "2.0.1", + "body-parser": "1.18.2", + "debug": "3.1.0", + "multiparty": "4.1.3", + "semver": "4.3.6", + "skipper-disk": "~0.5.6", + "string_decoder": "0.10.31", + "uuid": "3.0.1" + }, + "dependencies": { + "async": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz", + "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=", + "requires": { + "lodash": "^4.8.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=" + } + } + }, + "skipper-disk": { + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/skipper-disk/-/skipper-disk-0.5.12.tgz", + "integrity": "sha512-yyLOWT1WKY2h9NaUuG77XyhMti6vltRqp3ofN2ZTYoG3/V/SRLH1CjtZQ2Az6oqgMrfN8SZ83k3ptaOvB31YmQ==", + "requires": { + "@sailshq/lodash": "^3.10.2", + "debug": "3.1.0", + "fs-extra": "0.30.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "socket.io": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.2.0.tgz", + "integrity": "sha512-wxXrIuZ8AILcn+f1B4ez4hJTPG24iNgxBBDaJfT6MsyOhVYiTXWexGoPkd87ktJG8kQEcL/NBvRi64+9k4Kc0w==", + "requires": { + "debug": "~4.1.0", + "engine.io": "~3.3.1", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.2.0", + "socket.io-parser": "~3.3.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "socket.io-adapter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" + }, + "socket.io-client": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", + "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.3.1", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "socket.io-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", + "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "sort-route-addresses": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/sort-route-addresses/-/sort-route-addresses-0.0.3.tgz", + "integrity": "sha512-FK9GJty+MN4X5ml665lcgJe5y0zjF2wgnNVWS1yVnPFuCODCtMJx8B1rFN5NRwDaCbDGjc45OKkusqrx2GFL4g==", + "requires": { + "@sailshq/lodash": "^3.10.2" + } + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + }, + "streamifier": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/streamifier/-/streamifier-0.1.1.tgz", + "integrity": "sha1-l+mNj6TRBdYqJpHR3AfoINuN/E8=" + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimleft": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" + } + }, + "string.prototype.trimright": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "requires": { + "is-natural-number": "^4.0.1" + } + }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "swarm-js": { + "version": "0.1.39", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.39.tgz", + "integrity": "sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg==", + "requires": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "decompress": "^4.0.0", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^7.1.0", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request-promise": "^0.1.2" + }, + "dependencies": { + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "requires": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "^1.0.1" + } + } + } + }, + "switchback": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/switchback/-/switchback-2.0.5.tgz", + "integrity": "sha512-w9gnsTxR5geOKt45QUryhDP9KTLcOAqje9usR2VQ2ng8DfhaF+mkIcArxioMP/p6Z/ecKE58i2/B0DDlMJK1jw==", + "requires": { + "@sailshq/lodash": "^3.10.3" + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" + }, + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", + "dev": true + }, + "tsscmp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.5.tgz", + "integrity": "sha1-fcSjOvcVgatDN9qR2FylQn69mpc=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "requires": { + "random-bytes": "~1.0.0" + } + }, + "uid2": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz", + "integrity": "sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I=" + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, + "unbzip2-stream": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.2.tgz", + "integrity": "sha512-pZMVAofMrrHX6Ik39hCk470kulCbmZ2SWfQLPmTWqfJV/oUm0gn1CblvHdUu4+54Je6Jq34x8kY6XjTy6dMkOg==", + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "underscore": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", + "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=" + }, + "underscore.string": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", + "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", + "requires": { + "sprintf-js": "^1.0.3", + "util-deprecate": "^1.0.2" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } + }, + "url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" + }, + "utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utile": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz", + "integrity": "sha1-kwyI6ZCY1iIINMNWy9mncFItkNc=", + "requires": { + "async": "~0.2.9", + "deep-equal": "*", + "i": "0.3.x", + "mkdirp": "0.x.x", + "ncp": "0.4.x", + "rimraf": "2.x.x" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" + } + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", + "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=" + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validator": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-5.7.0.tgz", + "integrity": "sha1-eoelgUa2laxIYHEUHAxJ1n2gXlw=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "requires": { + "makeerror": "1.0.x" + } + }, + "waterline": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/waterline/-/waterline-0.13.6.tgz", + "integrity": "sha512-FnJqjGzhwX2vnk2GPa4SsME28zqDdf8PZzXjbkiBpb5flE4AOl/rgxB8OuG7wXBRKKQtG0hqvJIsJwdoWFdXJw==", + "requires": { + "@sailshq/lodash": "^3.10.2", + "anchor": "^1.2.0", + "async": "2.0.1", + "encrypted-attr": "1.0.6", + "flaverr": "^1.8.3", + "lodash.issafeinteger": "4.0.4", + "parley": "^3.3.2", + "rttc": "^10.0.0-1", + "waterline-schema": "^1.0.0-20", + "waterline-utils": "^1.3.7" + }, + "dependencies": { + "async": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz", + "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=", + "requires": { + "lodash": "^4.8.0" + } + } + } + }, + "waterline-schema": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/waterline-schema/-/waterline-schema-1.0.0.tgz", + "integrity": "sha512-dSz/CvOLYMULKieB91+ZSv415+AVgrLhlSWbhpVHfpczIbKyj+zorsB5AG+ukGw1z0CPs6F1ib8MicBNjtwv6g==", + "requires": { + "@sailshq/lodash": "^3.10.2", + "flaverr": "^1.8.1", + "rttc": "^10.0.0-1" + } + }, + "waterline-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/waterline-utils/-/waterline-utils-1.4.2.tgz", + "integrity": "sha512-WsS1yRw8xT6O7iIK8oAcYr3/vhMYiTHdA/vQnU/JsGbcad2Xi4p8bie8/F+BoEyN7SEpBZ8nFT9OdszDAt7Ugg==", + "requires": { + "@sailshq/lodash": "^3.10.2", + "async": "2.0.1", + "flaverr": "^1.1.1", + "fs-extra": "0.30.0", + "qs": "6.4.0" + }, + "dependencies": { + "async": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz", + "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=", + "requires": { + "lodash": "^4.8.0" + } + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" + } + } + }, + "web3": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.2.6.tgz", + "integrity": "sha512-tpu9fLIComgxGrFsD8LUtA4s4aCZk7px8UfcdEy6kS2uDi/ZfR07KJqpXZMij7Jvlq+cQrTAhsPSiBVvoMaivA==", + "requires": { + "@types/node": "^12.6.1", + "web3-bzz": "1.2.6", + "web3-core": "1.2.6", + "web3-eth": "1.2.6", + "web3-eth-personal": "1.2.6", + "web3-net": "1.2.6", + "web3-shh": "1.2.6", + "web3-utils": "1.2.6" + } + }, + "web3-bzz": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.2.6.tgz", + "integrity": "sha512-9NiHLlxdI1XeFtbPJAmi2jnnIHVF+GNy517wvOS72P7ZfuJTPwZaSNXfT01vWgPPE9R96/uAHDWHOg+T4WaDQQ==", + "requires": { + "@types/node": "^10.12.18", + "got": "9.6.0", + "swarm-js": "0.1.39", + "underscore": "1.9.1" + }, + "dependencies": { + "@types/node": { + "version": "10.17.20", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.20.tgz", + "integrity": "sha512-XgDgo6W10SeGEAM0k7FosJpvLCynOTYns4Xk3J5HGrA+UI/bKZ30PGMzOP5Lh2zs4259I71FSYLAtjnx3qhObw==" + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + } + } + }, + "web3-core": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.2.6.tgz", + "integrity": "sha512-y/QNBFtr5cIR8vxebnotbjWJpOnO8LDYEAzZjeRRUJh2ijmhjoYk7dSNx9ExgC0UCfNFRoNCa9dGRu/GAxwRlw==", + "requires": { + "@types/bn.js": "^4.11.4", + "@types/node": "^12.6.1", + "web3-core-helpers": "1.2.6", + "web3-core-method": "1.2.6", + "web3-core-requestmanager": "1.2.6", + "web3-utils": "1.2.6" + } + }, + "web3-core-helpers": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.2.6.tgz", + "integrity": "sha512-gYKWmC2HmO7RcDzpo4L1K8EIoy5L8iubNDuTC6q69UxczwqKF/Io0kbK/1Z10Av++NlzOSiuyGp2gc4t4UOsDw==", + "requires": { + "underscore": "1.9.1", + "web3-eth-iban": "1.2.6", + "web3-utils": "1.2.6" + }, + "dependencies": { + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + } + } + }, + "web3-core-method": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.2.6.tgz", + "integrity": "sha512-r2dzyPEonqkBg7Mugq5dknhV5PGaZTHBZlS/C+aMxNyQs3T3eaAsCTqlQDitwNUh/sUcYPEGF0Vo7ahYK4k91g==", + "requires": { + "underscore": "1.9.1", + "web3-core-helpers": "1.2.6", + "web3-core-promievent": "1.2.6", + "web3-core-subscriptions": "1.2.6", + "web3-utils": "1.2.6" + }, + "dependencies": { + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + } + } + }, + "web3-core-promievent": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.2.6.tgz", + "integrity": "sha512-km72kJef/qtQNiSjDJJVHIZvoVOm6ytW3FCYnOcCs7RIkviAb5JYlPiye0o4pJOLzCXYID7DK7Q9bhY8qWb1lw==", + "requires": { + "any-promise": "1.3.0", + "eventemitter3": "3.1.2" + } + }, + "web3-core-requestmanager": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.2.6.tgz", + "integrity": "sha512-QU2cbsj9Dm0r6om40oSwk8Oqbp3wTa08tXuMpSmeOTkGZ3EMHJ1/4LiJ8shwg1AvPMrKVU0Nri6+uBNCdReZ+g==", + "requires": { + "underscore": "1.9.1", + "web3-core-helpers": "1.2.6", + "web3-providers-http": "1.2.6", + "web3-providers-ipc": "1.2.6", + "web3-providers-ws": "1.2.6" + }, + "dependencies": { + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + } + } + }, + "web3-core-subscriptions": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.2.6.tgz", + "integrity": "sha512-M0PzRrP2Ct13x3wPulFtc5kENH4UtnPxO9YxkfQlX2WRKENWjt4Rfq+BCVGYEk3rTutDfWrjfzjmqMRvXqEY5Q==", + "requires": { + "eventemitter3": "3.1.2", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.6" + }, + "dependencies": { + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + } + } + }, + "web3-eth": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.2.6.tgz", + "integrity": "sha512-ROWlDPzh4QX6tlGGGlAK6X4kA2n0/cNj/4kb0nNVWkRouGmYO0R8k6s47YxYHvGiXt0s0++FUUv5vAbWovtUQw==", + "requires": { + "underscore": "1.9.1", + "web3-core": "1.2.6", + "web3-core-helpers": "1.2.6", + "web3-core-method": "1.2.6", + "web3-core-subscriptions": "1.2.6", + "web3-eth-abi": "1.2.6", + "web3-eth-accounts": "1.2.6", + "web3-eth-contract": "1.2.6", + "web3-eth-ens": "1.2.6", + "web3-eth-iban": "1.2.6", + "web3-eth-personal": "1.2.6", + "web3-net": "1.2.6", + "web3-utils": "1.2.6" + }, + "dependencies": { + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + } + } + }, + "web3-eth-abi": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.2.6.tgz", + "integrity": "sha512-w9GAyyikn8nSifSDZxAvU9fxtQSX+W2xQWMmrtTXmBGCaE4/ywKOSPAO78gq8AoU4Wq5yqVGKZLLbfpt7/sHlA==", + "requires": { + "ethers": "4.0.0-beta.3", + "underscore": "1.9.1", + "web3-utils": "1.2.6" + }, + "dependencies": { + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + } + } + }, + "web3-eth-accounts": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.2.6.tgz", + "integrity": "sha512-cDVtonHRgzqi/ZHOOf8kfCQWFEipcfQNAMzXIaKZwc0UUD9mgSI5oJrN45a89Ze+E6Lz9m77cDG5Ax9zscSkcw==", + "requires": { + "@web3-js/scrypt-shim": "^0.1.0", + "any-promise": "1.3.0", + "crypto-browserify": "3.12.0", + "eth-lib": "^0.2.8", + "ethereumjs-common": "^1.3.2", + "ethereumjs-tx": "^2.1.1", + "underscore": "1.9.1", + "uuid": "3.3.2", + "web3-core": "1.2.6", + "web3-core-helpers": "1.2.6", + "web3-core-method": "1.2.6", + "web3-utils": "1.2.6" + }, + "dependencies": { + "eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "ethereumjs-tx": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", + "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", + "requires": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "ethereumjs-util": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.0.tgz", + "integrity": "sha512-vb0XN9J2QGdZGIEKG2vXM+kUdEivUfU6Wmi5y0cg+LRhDYKnXIZ/Lz7XjFbHRR9VIKq2lVGLzGBkA++y2nOdOQ==", + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "ethjs-util": "0.1.6", + "keccak": "^2.0.0", + "rlp": "^2.2.3", + "secp256k1": "^3.0.1" + } + }, + "keccak": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-2.1.0.tgz", + "integrity": "sha512-m1wbJRTo+gWbctZWay9i26v5fFnYkOn7D5PCxJ3fZUGUEb49dE1Pm4BREUYCt/aoO6di7jeoGmhvqN9Nzylm3Q==", + "requires": { + "bindings": "^1.5.0", + "inherits": "^2.0.4", + "nan": "^2.14.0", + "safe-buffer": "^5.2.0" + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + } + } + }, + "web3-eth-contract": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.2.6.tgz", + "integrity": "sha512-ak4xbHIhWgsbdPCkSN+HnQc1SH4c856y7Ly+S57J/DQVzhFZemK5HvWdpwadJrQTcHET3ZeId1vq3kmW7UYodw==", + "requires": { + "@types/bn.js": "^4.11.4", + "underscore": "1.9.1", + "web3-core": "1.2.6", + "web3-core-helpers": "1.2.6", + "web3-core-method": "1.2.6", + "web3-core-promievent": "1.2.6", + "web3-core-subscriptions": "1.2.6", + "web3-eth-abi": "1.2.6", + "web3-utils": "1.2.6" + }, + "dependencies": { + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + } + } + }, + "web3-eth-ens": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.2.6.tgz", + "integrity": "sha512-8UEqt6fqR/dji/jBGPFAyBs16OJjwi0t2dPWXPyGXmty/fH+osnXwWXE4HRUyj4xuafiM5P1YkXMsPhKEadjiw==", + "requires": { + "eth-ens-namehash": "2.0.8", + "underscore": "1.9.1", + "web3-core": "1.2.6", + "web3-core-helpers": "1.2.6", + "web3-core-promievent": "1.2.6", + "web3-eth-abi": "1.2.6", + "web3-eth-contract": "1.2.6", + "web3-utils": "1.2.6" + }, + "dependencies": { + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + } + } + }, + "web3-eth-iban": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.2.6.tgz", + "integrity": "sha512-TPMc3BW9Iso7H+9w+ytbqHK9wgOmtocyCD3PaAe5Eie50KQ/j7ThA60dGJnxItVo6yyRv5pZAYxPVob9x/fJlg==", + "requires": { + "bn.js": "4.11.8", + "web3-utils": "1.2.6" + } + }, + "web3-eth-personal": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.2.6.tgz", + "integrity": "sha512-T2NUkh1plY8d7wePXSoHnaiKOd8dLNFaQfgBl9JHU6S7IJrG9jnYD9bVxLEgRUfHs9gKf9tQpDf7AcPFdq/A8g==", + "requires": { + "@types/node": "^12.6.1", + "web3-core": "1.2.6", + "web3-core-helpers": "1.2.6", + "web3-core-method": "1.2.6", + "web3-net": "1.2.6", + "web3-utils": "1.2.6" + } + }, + "web3-net": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.2.6.tgz", + "integrity": "sha512-hsNHAPddrhgjWLmbESW0KxJi2GnthPcow0Sqpnf4oB6+/+ZnQHU9OsIyHb83bnC1OmunrK2vf9Ye2mLPdFIu3A==", + "requires": { + "web3-core": "1.2.6", + "web3-core-method": "1.2.6", + "web3-utils": "1.2.6" + } + }, + "web3-providers-http": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.2.6.tgz", + "integrity": "sha512-2+SaFCspb5f82QKuHB3nEPQOF9iSWxRf7c18fHtmnLNVkfG9SwLN1zh67bYn3tZGUdOI3gj8aX4Uhfpwx9Ezpw==", + "requires": { + "web3-core-helpers": "1.2.6", + "xhr2-cookies": "1.1.0" + } + }, + "web3-providers-ipc": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.2.6.tgz", + "integrity": "sha512-b0Es+/GTZyk5FG3SgUDW+2/mBwJAXWt5LuppODptiOas8bB2khLjG6+Gm1K4uwOb+1NJGPt5mZZ8Wi7vibtQ+A==", + "requires": { + "oboe": "2.1.4", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.6" + }, + "dependencies": { + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + } + } + }, + "web3-providers-ws": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.2.6.tgz", + "integrity": "sha512-20waSYX+gb5M5yKhug5FIwxBBvkKzlJH7sK6XEgdOx6BZ9YYamLmvg9wcRVtnSZO8hV/3cWenO/tRtTrHVvIgQ==", + "requires": { + "@web3-js/websocket": "^1.0.29", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.6" + }, + "dependencies": { + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + } + } + }, + "web3-shh": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.2.6.tgz", + "integrity": "sha512-rouWyOOM6YMbLQd65grpj8BBezQfgNeRRX+cGyW4xsn6Xgu+B73Zvr6OtA/ftJwwa9bqHGpnLrrLMeWyy4YLUw==", + "requires": { + "web3-core": "1.2.6", + "web3-core-method": "1.2.6", + "web3-core-subscriptions": "1.2.6", + "web3-net": "1.2.6" + } + }, + "web3-utils": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.6.tgz", + "integrity": "sha512-8/HnqG/l7dGmKMgEL9JeKPTtjScxOePTzopv5aaKFExPfaBrYRkgoMqhoowCiAl/s16QaTn4DoIF1QC4YsT7Mg==", + "requires": { + "bn.js": "4.11.8", + "eth-lib": "0.2.7", + "ethereum-bloom-filters": "^1.0.6", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "underscore": "1.9.1", + "utf8": "3.0.0" + }, + "dependencies": { + "eth-lib": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", + "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + } + } + }, + "whelk": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/whelk/-/whelk-6.0.1.tgz", + "integrity": "sha512-C6jGmpclsvSYm3rNhCkrdIdGhL9Oh6A9jnSmTN4lfEbH+ENQvjP9qZ5UV9WWolfoumpIzTBVupk1qiVeLL7yYQ==", + "requires": { + "@sailshq/lodash": "^3.10.2", + "chalk": "1.1.3", + "commander": "2.8.1", + "flaverr": "^1.7.0", + "machine": "^15.2.2", + "rttc": "^10.0.0-0", + "yargs": "3.4.5" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.1.tgz", + "integrity": "sha512-7BT4TwISdDGBgaemWU0N0OU7FeAEJ9Oo2P1PHRm/FCWoEi2VLWC9b6xvxAA3C/NMpxg3HXVgi0sMmGbNUbNepQ==", + "requires": { + "is-bigint": "^1.0.0", + "is-boolean-object": "^1.0.0", + "is-number-object": "^1.0.3", + "is-string": "^1.0.4", + "is-symbol": "^1.0.2" + } + }, + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, + "which-typed-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.2.tgz", + "integrity": "sha512-KT6okrd1tE6JdZAy3o2VhMoYPh3+J6EMZLyrxBQsZflI1QCZIxMrIYLkosd8Twf+YfknVIHmYQPgJt238p8dnQ==", + "requires": { + "available-typed-arrays": "^1.0.2", + "es-abstract": "^1.17.5", + "foreach": "^2.0.5", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.1", + "is-typed-array": "^1.1.3" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + }, + "winston": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", + "integrity": "sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=", + "requires": { + "async": "0.2.x", + "colors": "0.6.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "pkginfo": "0.3.x", + "stack-trace": "0.0.x" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" + }, + "colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=" + }, + "pkginfo": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", + "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=" + } + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "ws": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", + "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xhr": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", + "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", + "requires": { + "global": "~4.3.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "requires": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "xhr-request-promise": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "requires": { + "xhr-request": "^1.1.0" + } + }, + "xhr2-cookies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", + "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", + "requires": { + "cookiejar": "^2.1.1" + } + }, + "xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yargs": { + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.4.5.tgz", + "integrity": "sha1-s5IXO3iSeS9nKWpgE8LXbRUxXrE=", + "requires": { + "camelcase": "^1.0.2", + "decamelize": "^1.0.0", + "window-size": "0.1.0", + "wordwrap": "0.0.2" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + } + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + }, + "dependencies": { + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "requires": { + "pend": "~1.2.0" + } + } + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + } +} diff --git a/package.json b/package.json new file mode 100755 index 0000000000000000000000000000000000000000..4aed262b515fa0faf47d568b3d34c5a15006e793 --- /dev/null +++ b/package.json @@ -0,0 +1,38 @@ +{ + "name": "tsa-api-rest", + "private": true, + "version": "0.0.0", + "description": "a Sails application", + "keywords": [], + "dependencies": { + "@sailshq/connect-redis": "^3.2.1", + "@sailshq/lodash": "^3.10.3", + "@sailshq/socket.io-redis": "^5.2.0", + "ethereumjs-tx": "^1.3.7", + "grunt": "1.0.4", + "sails": "^1.2.3", + "sails-hook-grunt": "^4.0.0", + "sails-hook-orm": "^2.1.1", + "sails-hook-sockets": "^2.0.0", + "web3": "^1.2.6" + }, + "devDependencies": { + "eslint": "5.16.0" + }, + "scripts": { + "start": "NODE_ENV=production node app.js", + "test": "npm run lint && npm run custom-tests && echo 'Done.'", + "lint": "./node_modules/eslint/bin/eslint.js . --max-warnings=0 --report-unused-disable-directives && echo '✔ Your .js files look good.'", + "custom-tests": "echo \"(No other custom tests yet.)\" && echo" + }, + "main": "app.js", + "repository": { + "type": "git", + "url": "git://github.com/root/tsa-api-rest.git" + }, + "author": "root", + "license": "", + "engines": { + "node": "^10.16" + } +} diff --git a/tasks/config/babel.js b/tasks/config/babel.js new file mode 100755 index 0000000000000000000000000000000000000000..c9720a1bdfd77e4577a491d8f948a31d3c1b5d59 --- /dev/null +++ b/tasks/config/babel.js @@ -0,0 +1,54 @@ +/** + * `tasks/config/babel` + * + * --------------------------------------------------------------- + * + * Transpile >=ES6 code for broader browser compatibility. + * + * For more information, see: + * https://sailsjs.com/anatomy/tasks/config/babel.js + * + */ +module.exports = function(grunt) { + + grunt.config.set('babel', { + dist: { + options: { + presets: [require('sails-hook-grunt/accessible/babel-preset-env')] + }, + files: [ + { + expand: true, + cwd: '.tmp/public', + src: ['js/**/*.js'], + dest: '.tmp/public' + } + ] + } + }); + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + // This Grunt plugin is part of the default asset pipeline in Sails, + // so it's already been automatically loaded for you at this point. + // + // Of course, you can always remove this Grunt plugin altogether by + // deleting this file. But check this out: you can also use your + // _own_ custom version of this Grunt plugin. + // + // Here's how: + // + // 1. Install it as a local dependency of your Sails app: + // ``` + // $ npm install grunt-babel --save-dev --save-exact + // ``` + // + // + // 2. Then uncomment the following code: + // + // ``` + // // Load Grunt plugin from the node_modules/ folder. + // grunt.loadNpmTasks('grunt-babel'); + // ``` + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +}; diff --git a/tasks/config/clean.js b/tasks/config/clean.js new file mode 100755 index 0000000000000000000000000000000000000000..a267b8dfd0bc2823b0f83da6d179793e47301ec5 --- /dev/null +++ b/tasks/config/clean.js @@ -0,0 +1,52 @@ +/** + * `tasks/config/clean` + * + * --------------------------------------------------------------- + * + * Remove generated files and folders. + * + * For more information, see: + * https://sailsjs.com/anatomy/tasks/config/clean.js + * + */ +module.exports = function(grunt) { + + grunt.config.set('clean', { + dev: ['.tmp/public/**'], + build: ['www'], + afterBuildProd: [ + 'www/concat', + 'www/min', + 'www/hash', + 'www/js', + 'www/styles', + 'www/templates', + 'www/dependencies' + ] + }); + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + // This Grunt plugin is part of the default asset pipeline in Sails, + // so it's already been automatically loaded for you at this point. + // + // Of course, you can always remove this Grunt plugin altogether by + // deleting this file. But check this out: you can also use your + // _own_ custom version of this Grunt plugin. + // + // Here's how: + // + // 1. Install it as a local dependency of your Sails app: + // ``` + // $ npm install grunt-contrib-clean --save-dev --save-exact + // ``` + // + // + // 2. Then uncomment the following code: + // + // ``` + // // Load Grunt plugin from the node_modules/ folder. + // grunt.loadNpmTasks('grunt-contrib-clean'); + // ``` + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +}; diff --git a/tasks/config/concat.js b/tasks/config/concat.js new file mode 100755 index 0000000000000000000000000000000000000000..4a3530ceb402ba0342bd552cc2bd6df29fdac0f6 --- /dev/null +++ b/tasks/config/concat.js @@ -0,0 +1,50 @@ +/** + * `tasks/config/concat` + * + * --------------------------------------------------------------- + * + * An intermediate step to generate monolithic files that can + * then be passed in to `uglify` and/or `cssmin` for minification. + * + * For more information, see: + * https://sailsjs.com/anatomy/tasks/config/concat.js + * + */ +module.exports = function(grunt) { + + grunt.config.set('concat', { + js: { + src: require('../pipeline').jsFilesToInject, + dest: '.tmp/public/concat/production.js' + }, + css: { + src: require('../pipeline').cssFilesToInject, + dest: '.tmp/public/concat/production.css' + } + }); + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + // This Grunt plugin is part of the default asset pipeline in Sails, + // so it's already been automatically loaded for you at this point. + // + // Of course, you can always remove this Grunt plugin altogether by + // deleting this file. But check this out: you can also use your + // _own_ custom version of this Grunt plugin. + // + // Here's how: + // + // 1. Install it as a local dependency of your Sails app: + // ``` + // $ npm install grunt-contrib-concat --save-dev --save-exact + // ``` + // + // + // 2. Then uncomment the following code: + // + // ``` + // // Load Grunt plugin from the node_modules/ folder. + // grunt.loadNpmTasks('grunt-contrib-concat'); + // ``` + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +}; diff --git a/tasks/config/copy.js b/tasks/config/copy.js new file mode 100755 index 0000000000000000000000000000000000000000..f06c50b7db094fc6e0fe30f30707bf55e91bb398 --- /dev/null +++ b/tasks/config/copy.js @@ -0,0 +1,65 @@ +/** + * `tasks/config/copy` + * + * --------------------------------------------------------------- + * + * Copy files and/or folders. + * + * For more information, see: + * https://sailsjs.com/anatomy/tasks/config/copy.js + * + */ +module.exports = function(grunt) { + + grunt.config.set('copy', { + dev: { + files: [{ + expand: true, + cwd: './assets', + src: ['**/*.!(coffee|less)'], + dest: '.tmp/public' + }] + }, + build: { + files: [{ + expand: true, + cwd: '.tmp/public', + src: ['**/*'], + dest: 'www' + }] + }, + beforeLinkBuildProd: { + files: [{ + expand: true, + cwd: '.tmp/public/hash', + src: ['**/*'], + dest: '.tmp/public/dist' + }] + }, + }); + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + // This Grunt plugin is part of the default asset pipeline in Sails, + // so it's already been automatically loaded for you at this point. + // + // Of course, you can always remove this Grunt plugin altogether by + // deleting this file. But check this out: you can also use your + // _own_ custom version of this Grunt plugin. + // + // Here's how: + // + // 1. Install it as a local dependency of your Sails app: + // ``` + // $ npm install grunt-contrib-copy --save-dev --save-exact + // ``` + // + // + // 2. Then uncomment the following code: + // + // ``` + // // Load Grunt plugin from the node_modules/ folder. + // grunt.loadNpmTasks('grunt-contrib-copy'); + // ``` + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +}; diff --git a/tasks/config/cssmin.js b/tasks/config/cssmin.js new file mode 100755 index 0000000000000000000000000000000000000000..e3f3edf5b398b749860838da73f72b92657430a7 --- /dev/null +++ b/tasks/config/cssmin.js @@ -0,0 +1,47 @@ +/** + * `tasks/config/cssmin` + * + * --------------------------------------------------------------- + * + * Together with the `concat` task, this is the final step that minifies + * all CSS files from `assets/styles/` (and potentially your LESS importer + * file from `assets/styles/importer.less`) + * + * For more information, see: + * https://sailsjs.com/anatomy/tasks/config/cssmin.js + * + */ +module.exports = function(grunt) { + + grunt.config.set('cssmin', { + dist: { + src: ['.tmp/public/concat/production.css'], + dest: '.tmp/public/min/production.min.css' + } + }); + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + // This Grunt plugin is part of the default asset pipeline in Sails, + // so it's already been automatically loaded for you at this point. + // + // Of course, you can always remove this Grunt plugin altogether by + // deleting this file. But check this out: you can also use your + // _own_ custom version of this Grunt plugin. + // + // Here's how: + // + // 1. Install it as a local dependency of your Sails app: + // ``` + // $ npm install grunt-contrib-cssmin --save-dev --save-exact + // ``` + // + // + // 2. Then uncomment the following code: + // + // ``` + // // Load Grunt plugin from the node_modules/ folder. + // grunt.loadNpmTasks('grunt-contrib-cssmin'); + // ``` + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +}; diff --git a/tasks/config/hash.js b/tasks/config/hash.js new file mode 100755 index 0000000000000000000000000000000000000000..41435ac855cc9385e790a32a700edf1b94620ed6 --- /dev/null +++ b/tasks/config/hash.js @@ -0,0 +1,62 @@ +/** + * `tasks/config/hash` + * + * --------------------------------------------------------------- + * + * Implement cache-busting for minified CSS and JavaScript files. + * + * For more information, see: + * https://sailsjs.com/anatomy/tasks/config/hash.js + * + */ +module.exports = function(grunt) { + + grunt.config.set('hash', { + options: { + mapping: '', + srcBasePath: '', + destBasePath: '', + flatten: false, + hashLength: 8, + hashFunction: function(source, encoding){ + if (!source || !encoding) { + throw new Error('Consistency violation: Cannot compute unique hash for production .css/.js cache-busting suffix, because `source` and/or `encoding` are falsey-- but they should be truthy strings! Here they are, respectively:\nsource: '+require('util').inspect(source, {depth:null})+'\nencoding: '+require('util').inspect(encoding, {depth:null})); + } + return require('crypto').createHash('sha1').update(source, encoding).digest('hex'); + } + }, + js: { + src: '.tmp/public/min/*.js', + dest: '.tmp/public/hash/' + }, + css: { + src: '.tmp/public/min/*.css', + dest: '.tmp/public/hash/' + } + }); + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + // This Grunt plugin is part of the default asset pipeline in Sails, + // so it's already been automatically loaded for you at this point. + // + // Of course, you can always remove this Grunt plugin altogether by + // deleting this file. But check this out: you can also use your + // _own_ custom version of this Grunt plugin. + // + // Here's how: + // + // 1. Install it as a local dependency of your Sails app: + // ``` + // $ npm install grunt-hash --save-dev --save-exact + // ``` + // + // + // 2. Then uncomment the following code: + // + // ``` + // // Load Grunt plugin from the node_modules/ folder. + // grunt.loadNpmTasks('grunt-hash'); + // ``` + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +}; diff --git a/tasks/config/less.js b/tasks/config/less.js new file mode 100755 index 0000000000000000000000000000000000000000..06e3a0806a49cadf1eda96957db83aa8f9a939e4 --- /dev/null +++ b/tasks/config/less.js @@ -0,0 +1,50 @@ +/** + * `tasks/config/less` + * + * --------------------------------------------------------------- + * + * Compile your LESS files into a CSS stylesheet. + * + * For more information, see: + * https://sailsjs.com/anatomy/tasks/config/less.js + * + */ +module.exports = function(grunt) { + + grunt.config.set('less', { + dev: { + files: [{ + expand: true, + cwd: 'assets/styles/', + src: ['importer.less'], + dest: '.tmp/public/styles/', + ext: '.css' + }] + } + }); + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + // This Grunt plugin is part of the default asset pipeline in Sails, + // so it's already been automatically loaded for you at this point. + // + // Of course, you can always remove this Grunt plugin altogether by + // deleting this file. But check this out: you can also use your + // _own_ custom version of this Grunt plugin. + // + // Here's how: + // + // 1. Install it as a local dependency of your Sails app: + // ``` + // $ npm install grunt-contrib-less --save-dev --save-exact + // ``` + // + // + // 2. Then uncomment the following code: + // + // ``` + // // Load Grunt plugin from the node_modules/ folder. + // grunt.loadNpmTasks('grunt-contrib-less'); + // ``` + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +}; diff --git a/tasks/config/sails-linker.js b/tasks/config/sails-linker.js new file mode 100755 index 0000000000000000000000000000000000000000..c197efbfc0ac2803ecc09926f7f3a36bd7438e7e --- /dev/null +++ b/tasks/config/sails-linker.js @@ -0,0 +1,184 @@ +/** + * `tasks/config/sails-linker` + * + * --------------------------------------------------------------- + * + * Automatically inject <script> tags and <link> tags into the specified + * specified HTML and/or EJS files. The specified delimiters (`startTag` + * and `endTag`) determine the insertion points. + * + * For more information, see: + * https://sailsjs.com/anatomy/tasks/config/sails-linker.js + * + */ +module.exports = function(grunt) { + + grunt.config.set('sails-linker', { + + + // ╦╔â•╗╦ ╦╔â•â•—â•”â•â•—â•”â•╗╦â•╗╦╔â•╗╔╦╗ + // â•‘â• â•╣╚╗╔â•â• â•╣╚â•â•—â•‘ ╠╦â•â•‘â• â•â• â•‘ + // ╚â•â•© â•© ╚╠╩ ╩╚â•â•╚â•â•╩╚â•â•©â•© â•© + // ┌─ ┌─â”┬ ┬┌─â”┌â”┌┌┬┠┌─â”┬┌┬â”┌─┠┬┌─â”┬ ┬┌─â”┌─â”┌─â”┬─â”┬┌─â”┌┬┠─┠+ // │─── │ │ │├┤ │││ │───└─â”│ ││├┤ │├─┤└â”┌┘├─┤└─â”│ ├┬┘│├─┘ │ ───│ + // └─ └─┘┴─┘┴└─┘┘└┘ â”´ └─┘┴─┴┘└─┘ └┘┴ â”´ └┘ â”´ ┴└─┘└─┘┴└─┴┴ â”´ ─┘ + devJs: { + options: { + startTag: '<!--SCRIPTS-->', + endTag: '<!--SCRIPTS END-->', + fileTmpl: '<script src="%s"></script>', + appRoot: '.tmp/public' + }, + files: { + '.tmp/public/**/*.html': require('../pipeline').jsFilesToInject, + 'views/**/*.html': require('../pipeline').jsFilesToInject, + 'views/**/*.ejs': require('../pipeline').jsFilesToInject + } + }, + + devJsBuild: { + options: { + startTag: '<!--SCRIPTS-->', + endTag: '<!--SCRIPTS END-->', + fileTmpl: '<script src="%s"></script>', + appRoot: '.tmp/public', + // relative: true + // ^^ Uncomment this if compiling assets for use in PhoneGap, CDN, etc. + // (but be note that this can break custom font URLs) + }, + files: { + '.tmp/public/**/*.html': require('../pipeline').jsFilesToInject, + 'views/**/*.html': require('../pipeline').jsFilesToInject, + 'views/**/*.ejs': require('../pipeline').jsFilesToInject + } + }, + + prodJs: { + options: { + startTag: '<!--SCRIPTS-->', + endTag: '<!--SCRIPTS END-->', + fileTmpl: '<script src="%s"></script>', + appRoot: '.tmp/public' + }, + files: { + '.tmp/public/**/*.html': ['.tmp/public/min/production.min.js'], + 'views/**/*.html': ['.tmp/public/min/production.min.js'], + 'views/**/*.ejs': ['.tmp/public/min/production.min.js'] + } + }, + + prodJsBuild: { + options: { + startTag: '<!--SCRIPTS-->', + endTag: '<!--SCRIPTS END-->', + fileTmpl: '<script src="%s"></script>', + appRoot: '.tmp/public', + // relative: true + // ^^ Uncomment this if compiling assets for use in PhoneGap, CDN, etc. + // (but be note that this can break custom font URLs) + }, + files: { + '.tmp/public/**/*.html': ['.tmp/public/dist/*.js'], + 'views/**/*.html': ['.tmp/public/dist/*.js'], + 'views/**/*.ejs': ['.tmp/public/dist/*.js'] + } + }, + + + // â•”â•╗╔╦╗╦ ╦╦ â•”â•â•—â•”â•╗╦ ╦╔â•â•—â•”â•╗╔╦╗╔â•â•— + // ╚â•â•— â•‘ ╚╦â•â•‘ â•‘â•£ ╚â•â•—â• â•╣║╣ â•‘â•£ â•‘ ╚â•â•— + // ╚â•â• â•© â•© â•©â•â•╚â•â•╚â•â•â•© ╩╚â•â•╚â•â• â•© ╚â•â• + // ┌─ ┬┌â”┌┌─â”┬ ┬ ┬┌┬â”┬┌â”┌┌─┠╔â•â•—â•”â•â•—â•”â•â•— ┬ ┌─â”┌─â”┌┬â”┌─â”┬┬ ┌─â”┌┬┠╦ â•”â•â•—â•”â•â•—â•”â•â•— ─┠+ // │─── │││││ │ │ │ │││││││ ┬ â•‘ ╚â•╗╚â•â•— ┌┼─ │ │ ││││├─┘││ ├┤ ││ â•‘ â•‘â•£ ╚â•╗╚â•â•— ───│ + // └─ ┴┘└┘└─┘┴─┘└─┘─┴┘┴┘└┘└─┘ ╚â•â•╚â•â•╚â•╠└┘ └─┘└─┘┴ â”´â”´ ┴┴─┘└─┘─┴┘ â•©â•â•╚â•â•╚â•â•╚â•╠─┘ + devStyles: { + options: { + startTag: '<!--STYLES-->', + endTag: '<!--STYLES END-->', + fileTmpl: '<link rel="stylesheet" href="%s">', + appRoot: '.tmp/public' + }, + + files: { + '.tmp/public/**/*.html': require('../pipeline').cssFilesToInject, + 'views/**/*.html': require('../pipeline').cssFilesToInject, + 'views/**/*.ejs': require('../pipeline').cssFilesToInject + } + }, + + devStylesBuild: { + options: { + startTag: '<!--STYLES-->', + endTag: '<!--STYLES END-->', + fileTmpl: '<link rel="stylesheet" href="%s">', + appRoot: '.tmp/public', + // relative: true + // ^^ Uncomment this if compiling assets for use in PhoneGap, CDN, etc. + // (but be note that this can break custom font URLs) + }, + + files: { + '.tmp/public/**/*.html': require('../pipeline').cssFilesToInject, + 'views/**/*.html': require('../pipeline').cssFilesToInject, + 'views/**/*.ejs': require('../pipeline').cssFilesToInject + } + }, + + prodStyles: { + options: { + startTag: '<!--STYLES-->', + endTag: '<!--STYLES END-->', + fileTmpl: '<link rel="stylesheet" href="%s">', + appRoot: '.tmp/public' + }, + files: { + '.tmp/public/index.html': ['.tmp/public/min/production.min.css'], + 'views/**/*.html': ['.tmp/public/min/production.min.css'], + 'views/**/*.ejs': ['.tmp/public/min/production.min.css'] + } + }, + + prodStylesBuild: { + options: { + startTag: '<!--STYLES-->', + endTag: '<!--STYLES END-->', + fileTmpl: '<link rel="stylesheet" href="%s">', + appRoot: '.tmp/public', + // relative: true + // ^^ Uncomment this if compiling assets for use in PhoneGap, CDN, etc. + // (but be note that this can break custom font URLs) + }, + files: { + '.tmp/public/index.html': ['.tmp/public/dist/*.css'], + 'views/**/*.html': ['.tmp/public/dist/*.css'], + 'views/**/*.ejs': ['.tmp/public/dist/*.css'] + } + }, + + });//</ grunt.config.set() > + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + // This Grunt plugin is part of the default asset pipeline in Sails, + // so it's already been automatically loaded for you at this point. + // + // Of course, you can always remove this Grunt plugin altogether by + // deleting this file. But check this out: you can also use your + // _own_ custom version of this Grunt plugin. + // + // Here's how: + // + // 1. Install it as a local dependency of your Sails app: + // ``` + // $ npm install grunt-sails-linker --save-dev --save-exact + // ``` + // + // + // 2. Then uncomment the following code: + // + // ``` + // // Load Grunt plugin from the node_modules/ folder. + // grunt.loadNpmTasks('grunt-sails-linker'); + // ``` + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +}; diff --git a/tasks/config/sync.js b/tasks/config/sync.js new file mode 100755 index 0000000000000000000000000000000000000000..23ff3b87c2f73be3bc5b3a0ed4d0ec0a99a748f9 --- /dev/null +++ b/tasks/config/sync.js @@ -0,0 +1,49 @@ +/** + * `tasks/config/sync` + * + * --------------------------------------------------------------- + * + * Synchronize files from the `assets` folder to `.tmp/public`, + * smashing anything that's already there. + * + * For more information, see: + * https://sailsjs.com/anatomy/tasks/config/sync.js + * + */ +module.exports = function(grunt) { + + grunt.config.set('sync', { + dev: { + files: [{ + cwd: './assets', + src: ['**/*.!(coffee|less)'], + dest: '.tmp/public' + }] + } + }); + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + // This Grunt plugin is part of the default asset pipeline in Sails, + // so it's already been automatically loaded for you at this point. + // + // Of course, you can always remove this Grunt plugin altogether by + // deleting this file. But check this out: you can also use your + // _own_ custom version of this Grunt plugin. + // + // Here's how: + // + // 1. Install it as a local dependency of your Sails app: + // ``` + // $ npm install grunt-sync --save-dev --save-exact + // ``` + // + // + // 2. Then uncomment the following code: + // + // ``` + // // Load Grunt plugin from the node_modules/ folder. + // grunt.loadNpmTasks('grunt-sync'); + // ``` + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +}; diff --git a/tasks/config/uglify.js b/tasks/config/uglify.js new file mode 100755 index 0000000000000000000000000000000000000000..34f591c7a0a79a91ee6c859b1dc512846e318291 --- /dev/null +++ b/tasks/config/uglify.js @@ -0,0 +1,64 @@ +/** + * `tasks/config/uglify` + * + * --------------------------------------------------------------- + * + * Minify client-side JavaScript files using UglifyES. + * + * For more information, see: + * https://sailsjs.com/anatomy/tasks/config/uglify.js + * + */ +module.exports = function(grunt) { + + grunt.config.set('uglify', { + dist: { + src: ['.tmp/public/concat/production.js'], + dest: '.tmp/public/min/production.min.js' + }, + options: { + mangle: { + reserved: [ + 'AsyncFunction', + 'SailsSocket', + 'Promise', + 'File', + 'FileList', + 'FormData', + 'Location', + 'RttcRefPlaceholder', + ], + keep_fnames: true//eslint-disable-line + }, + compress: { + keep_fnames: true//eslint-disable-line + } + } + }); + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + // This Grunt plugin is part of the default asset pipeline in Sails, + // so it's already been automatically loaded for you at this point. + // + // Of course, you can always remove this Grunt plugin altogether by + // deleting this file. But check this out: you can also use your + // _own_ custom version of this Grunt plugin. + // + // Here's how: + // + // 1. Install it as a local dependency of your Sails app: + // ``` + // $ npm install grunt-contrib-uglify --save-dev --save-exact + // ``` + // + // + // 2. Then uncomment the following code: + // + // ``` + // // Load Grunt plugin from the node_modules/ folder. + // grunt.loadNpmTasks('grunt-contrib-uglify'); + // ``` + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +}; + diff --git a/tasks/config/watch.js b/tasks/config/watch.js new file mode 100755 index 0000000000000000000000000000000000000000..611e297705347b92d0423b60d4a235b4949e0fe9 --- /dev/null +++ b/tasks/config/watch.js @@ -0,0 +1,56 @@ +/** + * `tasks/config/watch` + * + * --------------------------------------------------------------- + * + * Run predefined tasks whenever certain files are added, changed or deleted. + * + * For more information, see: + * https://sailsjs.com/anatomy/tasks/config/watch.js + * + */ +module.exports = function(grunt) { + + grunt.config.set('watch', { + assets: { + + // Assets to watch: + files: [ + 'assets/**/*', + 'tasks/pipeline.js', + '!**/node_modules/**' + ], + + // When assets are changed: + tasks: [ + 'syncAssets', + 'linkAssets' + ] + } + }); + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + // This Grunt plugin is part of the default asset pipeline in Sails, + // so it's already been automatically loaded for you at this point. + // + // Of course, you can always remove this Grunt plugin altogether by + // deleting this file. But check this out: you can also use your + // _own_ custom version of this Grunt plugin. + // + // Here's how: + // + // 1. Install it as a local dependency of your Sails app: + // ``` + // $ npm install grunt-contrib-watch --save-dev --save-exact + // ``` + // + // + // 2. Then uncomment the following code: + // + // ``` + // // Load Grunt plugin from the node_modules/ folder. + // grunt.loadNpmTasks('grunt-contrib-watch'); + // ``` + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +}; diff --git a/tasks/pipeline.js b/tasks/pipeline.js new file mode 100755 index 0000000000000000000000000000000000000000..65047d7f09b76217ab2ce511b74f175d67c5b4e1 --- /dev/null +++ b/tasks/pipeline.js @@ -0,0 +1,147 @@ +/** + * tasks/pipeline.js + * + * The order in which your CSS, JavaScript, and client-side template files + * injected as <script> or <link> tags. + * + * > If you are not relying on automatic asset linking, then you can safely ignore this file. + * + * For more information see: + * https://sailsjs.com/anatomy/tasks/pipeline.js + */ + + + +// ██████╗ ██╗ █████╗ ██╗███╗ ██╗ ██████╗███████╗███████╗ +// ██╔â•â•██╗██║ ██╔â•â•██╗██║████╗ ██║ ██╔â•â•â•â•â•██╔â•â•â•â•â•██╔â•â•â•â•â• +// ██████╔â•██║ ███████║██║██╔██╗ ██║ ██║ ███████╗███████╗ +// ██╔â•â•â•╠██║ ██╔â•â•██║██║██║╚██╗██║ ██║ ╚â•â•â•â•██║╚â•â•â•â•██║ +// ██║ ███████╗██║ ██║██║██║ ╚████║ ██╗╚██████╗███████║███████║ +// ╚â•╠╚â•â•â•â•â•â•â•╚â•╠╚â•â•╚â•â•╚â•╠╚â•â•â•╠╚â•╠╚â•â•â•â•â•â•╚â•â•â•â•â•â•â•╚â•â•â•â•â•â•â• +// +// ███████╗██╗██╗ ███████╗███████╗ +// ██╔â•â•â•â•â•██║██║ ██╔â•â•â•â•â•██╔â•â•â•â•â• +// █████╗ ██║██║ █████╗ ███████╗ +// ██╔â•â•╠██║██║ ██╔â•â•╠╚â•â•â•â•██║ +// ██║ ██║███████╗███████╗███████║ +// ╚â•╠╚â•â•╚â•â•â•â•â•â•â•╚â•â•â•â•â•â•â•╚â•â•â•â•â•â•â• +// +// CSS files to inject as <link> tags, in order. +// +// > Note: if you're using built-in LESS support with default settings, +// > you'll want to change `assets/styles/importer.less` instead. +// +var cssFilesToInject = [ + + // Bring in `.css` files for themes and style guides (e.g. Bootstrap, Foundation) + 'dependencies/**/*.css', + + // All of the rest of your custom `.css` files will be injected here, + // in no particular order. To customize the ordering, add additional + // items here, _above_ this one. + 'styles/**/*.css' +]; + + +// ██████╗██╗ ██╗███████╗███╗ ██╗████████╗ ███████╗██╗██████╗ ███████╗ +// ██╔â•â•â•â•â•██║ ██║██╔â•â•â•â•â•████╗ ██║╚â•â•██╔â•â•╠██╔â•â•â•â•â•██║██╔â•â•██╗██╔â•â•â•â•â• +// ██║ ██║ ██║█████╗ ██╔██╗ ██║ ██║█████╗███████╗██║██║ ██║█████╗ +// ██║ ██║ ██║██╔â•â•╠██║╚██╗██║ ██║╚â•â•â•â•â•╚â•â•â•â•██║██║██║ ██║██╔â•â•â• +// ╚██████╗███████╗██║███████╗██║ ╚████║ ██║ ███████║██║██████╔â•███████╗ +// ╚â•â•â•â•â•â•╚â•â•â•â•â•â•â•╚â•â•╚â•â•â•â•â•â•â•╚â•╠╚â•â•â•╠╚â•╠╚â•â•â•â•â•â•â•╚â•â•╚â•â•â•â•â•╠╚â•â•â•â•â•â•â• +// +// ██╗███████╗ ███████╗██╗██╗ ███████╗███████╗ +// ██║██╔â•â•â•â•╠██╔â•â•â•â•â•██║██║ ██╔â•â•â•â•â•██╔â•â•â•â•â• +// ██║███████╗ █████╗ ██║██║ █████╗ ███████╗ +// ██ ██║╚â•â•â•â•██║ ██╔â•â•╠██║██║ ██╔â•â•╠╚â•â•â•â•██║ +// ██╗╚█████╔â•███████║ ██║ ██║███████╗███████╗███████║ +// ╚â•╠╚â•â•â•â•╠╚â•â•â•â•â•â•╠╚â•╠╚â•â•╚â•â•â•â•â•â•â•╚â•â•â•â•â•â•â•╚â•â•â•â•â•â•â• +// +// Client-side javascript files to inject as <script> tags, in order. +// +var jsFilesToInject = [ + + // Load `sails.io` before everything else. + 'dependencies/sails.io.js', + + // Bring in `.js` files for any other client-side JavaScript dependencies. + // (e.g. Lodash, Vue.js, jQuery, Bootstrap, Ember, Angular, etc.) + // > Be sure to list dependencies that depend on each other in the right order! + 'dependencies/**/*.js', + + // All of the rest of your custom client-side js files will be injected here, + // in no particular order. To customize the ordering, add additional items + // here, _above_ this one. + 'js/**/*.js' +]; + + +// ██████╗██╗ ██╗███████╗███╗ ██╗████████╗ ███████╗██╗██████╗ ███████╗ +// ██╔â•â•â•â•â•██║ ██║██╔â•â•â•â•â•████╗ ██║╚â•â•██╔â•â•╠██╔â•â•â•â•â•██║██╔â•â•██╗██╔â•â•â•â•â• +// ██║ ██║ ██║█████╗ ██╔██╗ ██║ ██║█████╗███████╗██║██║ ██║█████╗ +// ██║ ██║ ██║██╔â•â•╠██║╚██╗██║ ██║╚â•â•â•â•â•╚â•â•â•â•██║██║██║ ██║██╔â•â•â• +// ╚██████╗███████╗██║███████╗██║ ╚████║ ██║ ███████║██║██████╔â•███████╗ +// ╚â•â•â•â•â•â•╚â•â•â•â•â•â•â•╚â•â•╚â•â•â•â•â•â•â•╚â•╠╚â•â•â•╠╚â•╠╚â•â•â•â•â•â•â•╚â•â•╚â•â•â•â•â•╠╚â•â•â•â•â•â•â• +// +// ████████╗███████╗███╗ ███╗██████╗ ██╗ █████╗ ████████╗███████╗███████╗ +// ╚â•â•██╔â•â•â•██╔â•â•â•â•â•████╗ ████║██╔â•â•██╗██║ ██╔â•â•██╗╚â•â•██╔â•â•â•██╔â•â•â•â•â•██╔â•â•â•â•â• +// ██║ █████╗ ██╔████╔██║██████╔â•██║ ███████║ ██║ █████╗ ███████╗ +// ██║ ██╔â•â•╠██║╚██╔â•██║██╔â•â•â•╠██║ ██╔â•â•██║ ██║ ██╔â•â•╠╚â•â•â•â•██║ +// ██║ ███████╗██║ ╚â•╠██║██║ ███████╗██║ ██║ ██║ ███████╗███████║ +// ╚â•╠╚â•â•â•â•â•â•â•╚â•╠╚â•â•╚â•╠╚â•â•â•â•â•â•â•╚â•╠╚â•╠╚â•╠╚â•â•â•â•â•â•â•╚â•â•â•â•â•â•â• +// +// Client-side HTML templates to precompile and inject as a single <script> tag. +// (The ordering of this array shouldn't matter.) +// +// > By default, Sails uses JST (~=lodash/underscore) templates and precompiles +// > them into functions for you. If you want to use handlebars, pug, dust, etc., +// > with the asset linker, no problem-- you'll just want to make sure the precompiled +// > templates get spit out to the same file. For information on customizing and +// > installing your own Grunt tasks or using a different build pipeline, be sure +// > to check out: +// > https://sailsjs.com/docs/concepts/assets/task-automation +// +var templateFilesToInject = [ + 'templates/**/*.html' +]; + + + +// ███╗ ███╗██╗███████╗ ██████╗ ███████╗███████╗████████╗██╗ ██╗██████╗ +// ████╗ ████║██║██╔â•â•â•â•â•██╔â•â•â•â•╠██╔â•â•â•â•â•██╔â•â•â•â•â•╚â•â•██╔â•â•â•██║ ██║██╔â•â•██╗ +// ██╔████╔██║██║███████╗██║ ███████╗█████╗ ██║ ██║ ██║██████╔╠+// ██║╚██╔â•██║██║╚â•â•â•â•██║██║ ╚â•â•â•â•██║██╔â•â•╠██║ ██║ ██║██╔â•â•â•â• +// ██║ ╚â•╠██║██║███████║╚██████╗██╗ ███████║███████╗ ██║ ╚██████╔â•██║ +// ╚â•╠╚â•â•╚â•â•╚â•â•â•â•â•â•╠╚â•â•â•â•â•â•╚â•╠╚â•â•â•â•â•â•â•╚â•â•â•â•â•â•╠╚â•╠╚â•â•â•â•â•╠╚â•â• +// +// The following code exists to parse the arrays of glob expressions above, and +// then expose them via `module.exports`. **You should not need to change any of +// the code below, unless you are modifying the default asset pipeline.** + +// Default path for public folder (see documentation on sailsjs.com for more information) +var tmpPath = '.tmp/public/'; + +// Prefix relative paths to source files so they point to the proper locations +// (i.e. where the other Grunt tasks spit them out, or in some cases, where +// they reside in the first place) +module.exports.cssFilesToInject = cssFilesToInject.map((cssPath)=>{ + // If we're ignoring the file, make sure the ! is at the beginning of the path + if (cssPath[0] === '!') { + return require('path').join('!' + tmpPath, cssPath.substr(1)); + } + return require('path').join(tmpPath, cssPath); +}); +module.exports.jsFilesToInject = jsFilesToInject.map((jsPath)=>{ + // If we're ignoring the file, make sure the ! is at the beginning of the path + if (jsPath[0] === '!') { + return require('path').join('!' + tmpPath, jsPath.substr(1)); + } + return require('path').join(tmpPath, jsPath); +}); +module.exports.templateFilesToInject = templateFilesToInject.map((tplPath)=>{ + // If we're ignoring the file, make sure the ! is at the beginning of the path + if (tplPath[0] === '!') { + return require('path').join('!assets/', tplPath.substr(1)); + } + return require('path').join('assets/', tplPath); +}); diff --git a/tasks/register/build.js b/tasks/register/build.js new file mode 100755 index 0000000000000000000000000000000000000000..684b10ddd2917031f2ea21a85ea71f04cef20b0d --- /dev/null +++ b/tasks/register/build.js @@ -0,0 +1,22 @@ +/** + * `tasks/register/build.js` + * + * --------------------------------------------------------------- + * + * This Grunt tasklist will be executed if you run `sails www` or + * `grunt build` in a development environment. + * + * For more information see: + * https://sailsjs.com/anatomy/tasks/register/build.js + * + */ +module.exports = function(grunt) { + grunt.registerTask('build', [ + // 'polyfill:dev', //« uncomment to ALSO transpile during development (for broader browser compat.) + 'compileAssets', + // 'babel', //« uncomment to ALSO transpile during development (for broader browser compat.) + 'linkAssetsBuild', + 'clean:build', + 'copy:build' + ]); +}; diff --git a/tasks/register/buildProd.js b/tasks/register/buildProd.js new file mode 100755 index 0000000000000000000000000000000000000000..67fdb8964c07a3aacd9d00346838c475a81bd676 --- /dev/null +++ b/tasks/register/buildProd.js @@ -0,0 +1,30 @@ +/** + * `tasks/register/buildProd.js` + * + * --------------------------------------------------------------- + * + * This Grunt tasklist will be executed instead of `build` if you + * run `sails www` in a production environment, e.g.: + * `NODE_ENV=production sails www` + * + * For more information see: + * https://sailsjs.com/anatomy/tasks/register/build-prod.js + * + */ +module.exports = function(grunt) { + grunt.registerTask('buildProd', [ + 'polyfill:prod', //« Remove this to skip transpilation in production (not recommended) + 'compileAssets', + 'babel', //« Remove this to skip transpilation in production (not recommended) + 'concat', + 'uglify', + 'cssmin', + 'hash',//« Cache-busting + 'copy:beforeLinkBuildProd',//« For prettier URLs after cache-busting + 'linkAssetsBuildProd', + 'clean:build', + 'copy:build', + 'clean:afterBuildProd' + ]); +}; + diff --git a/tasks/register/compileAssets.js b/tasks/register/compileAssets.js new file mode 100755 index 0000000000000000000000000000000000000000..c53a02a81919aede692938b99643330149fa41c8 --- /dev/null +++ b/tasks/register/compileAssets.js @@ -0,0 +1,16 @@ +/** + * `tasks/register/compileAssets.js` + * + * --------------------------------------------------------------- + * + * For more information see: + * https://sailsjs.com/anatomy/tasks/register/compile-assets.js + * + */ +module.exports = function(grunt) { + grunt.registerTask('compileAssets', [ + 'clean:dev', + 'less:dev', + 'copy:dev', + ]); +}; diff --git a/tasks/register/default.js b/tasks/register/default.js new file mode 100755 index 0000000000000000000000000000000000000000..e76605c9c714019f771714ea45e2e1ab6fda2a8b --- /dev/null +++ b/tasks/register/default.js @@ -0,0 +1,27 @@ +/** + * `tasks/register/default.js` + * + * --------------------------------------------------------------- + * + * This is the default Grunt tasklist that will be executed if you + * run `grunt` in the top level directory of your app. It is also + * called automatically when you start Sails in development mode using + * `sails lift` or `node app` in a development environment. + * + * For more information see: + * https://sailsjs.com/anatomy/tasks/register/default.js + * + */ +module.exports = function (grunt) { + + + grunt.registerTask('default', [ + // 'polyfill:dev', //« uncomment to ALSO transpile during development (for broader browser compat.) + 'compileAssets', + // 'babel', //« uncomment to ALSO transpile during development (for broader browser compat.) + 'linkAssets', + 'watch' + ]); + + +}; diff --git a/tasks/register/linkAssets.js b/tasks/register/linkAssets.js new file mode 100755 index 0000000000000000000000000000000000000000..b0ac855c6670999f8f463792ac5d91ff0e67d2f6 --- /dev/null +++ b/tasks/register/linkAssets.js @@ -0,0 +1,15 @@ +/** + * `tasks/register/linkAssets.js` + * + * --------------------------------------------------------------- + * + * For more information see: + * https://sailsjs.com/anatomy/tasks/register/link-assets.js + * + */ +module.exports = function(grunt) { + grunt.registerTask('linkAssets', [ + 'sails-linker:devJs', + 'sails-linker:devStyles', + ]); +}; diff --git a/tasks/register/linkAssetsBuild.js b/tasks/register/linkAssetsBuild.js new file mode 100755 index 0000000000000000000000000000000000000000..3a05cc1243ee75d9b443bf9dac2fcf1442bf8f05 --- /dev/null +++ b/tasks/register/linkAssetsBuild.js @@ -0,0 +1,15 @@ +/** + * `tasks/register/linkAssetsBuild.js` + * + * --------------------------------------------------------------- + * + * For more information see: + * https://sailsjs.com/anatomy/tasks/register/link-assets-build.js + * + */ +module.exports = function(grunt) { + grunt.registerTask('linkAssetsBuild', [ + 'sails-linker:devJsBuild', + 'sails-linker:devStylesBuild', + ]); +}; diff --git a/tasks/register/linkAssetsBuildProd.js b/tasks/register/linkAssetsBuildProd.js new file mode 100755 index 0000000000000000000000000000000000000000..ac477be5b412764f237889173268fd0838f89955 --- /dev/null +++ b/tasks/register/linkAssetsBuildProd.js @@ -0,0 +1,15 @@ +/** + * `tasks/register/linkAssetsBuildProd.js` + * + * --------------------------------------------------------------- + * + * For more information see: + * https://sailsjs.com/anatomy/tasks/register/link-assets-build-prod.js + * + */ +module.exports = function(grunt) { + grunt.registerTask('linkAssetsBuildProd', [ + 'sails-linker:prodJsBuild', + 'sails-linker:prodStylesBuild', + ]); +}; diff --git a/tasks/register/polyfill.js b/tasks/register/polyfill.js new file mode 100755 index 0000000000000000000000000000000000000000..a77d82c458f6540e86113b7d47078a7ada398b5e --- /dev/null +++ b/tasks/register/polyfill.js @@ -0,0 +1,28 @@ +/** + * `tasks/register/polyfill.js` + * + * --------------------------------------------------------------- + * + * For more information see: + * https://sailsjs.com/anatomy/tasks/register/polyfill.js + * + */ +module.exports = function(grunt) { + grunt.registerTask('polyfill:prod', 'Add the polyfill file to the top of the list of files to concatenate', ()=>{ + grunt.config.set('concat.js.src', [require('sails-hook-grunt/accessible/babel-polyfill')].concat(grunt.config.get('concat.js.src'))); + }); + grunt.registerTask('polyfill:dev', 'Add the polyfill file to the top of the list of files to copy and link', ()=>{ + grunt.config.set('copy.dev.files', grunt.config.get('copy.dev.files').concat({ + expand: true, + cwd: require('path').dirname(require('sails-hook-grunt/accessible/babel-polyfill')), + src: require('path').basename(require('sails-hook-grunt/accessible/babel-polyfill')), + dest: '.tmp/public/polyfill' + })); + var devLinkFiles = grunt.config.get('sails-linker.devJs.files'); + grunt.config.set('sails-linker.devJs.files', Object.keys(devLinkFiles).reduce((linkerConfigSoFar, glob)=>{ + linkerConfigSoFar[glob] = ['.tmp/public/polyfill/polyfill.min.js'].concat(devLinkFiles[glob]); + return linkerConfigSoFar; + }, {})); + }); +}; + diff --git a/tasks/register/prod.js b/tasks/register/prod.js new file mode 100755 index 0000000000000000000000000000000000000000..8188d25a97ee532529a067a81663c35a17437bd3 --- /dev/null +++ b/tasks/register/prod.js @@ -0,0 +1,26 @@ +/** + * `tasks/register/prod.js` + * + * --------------------------------------------------------------- + * + * This Grunt tasklist will be executed instead of `default` when + * your Sails app is lifted in a production environment (e.g. using + * `NODE_ENV=production node app`). + * + * For more information see: + * https://sailsjs.com/anatomy/tasks/register/prod.js + * + */ +module.exports = function(grunt) { + grunt.registerTask('prod', [ + 'polyfill:prod', //« Remove this to skip transpilation in production (not recommended) + 'compileAssets', + 'babel', //« Remove this to skip transpilation in production (not recommended) + 'concat', + 'uglify', + 'cssmin', + 'sails-linker:prodJs', + 'sails-linker:prodStyles', + ]); +}; + diff --git a/tasks/register/syncAssets.js b/tasks/register/syncAssets.js new file mode 100755 index 0000000000000000000000000000000000000000..3e0d0c97c85ba561c67bd2e8ef98a7db3b98412b --- /dev/null +++ b/tasks/register/syncAssets.js @@ -0,0 +1,15 @@ +/** + * `tasks/register/syncAssets.js` + * + * --------------------------------------------------------------- + * + * For more information see: + * https://sailsjs.com/anatomy/tasks/register/sync-assets.js + * + */ +module.exports = function(grunt) { + grunt.registerTask('syncAssets', [ + 'less:dev', + 'sync:dev', + ]); +}; diff --git a/views/.eslintrc b/views/.eslintrc new file mode 100755 index 0000000000000000000000000000000000000000..ad4c06efcdb106fe107326e2c54fc26d3bb368b6 --- /dev/null +++ b/views/.eslintrc @@ -0,0 +1,21 @@ +{ + // â•”â•â•—â•”â•╗╦ ╦╔╗╔╔╦╗┬─â”┌─┠┌─â”┬ ┬┌─â”┬─â”┬─â”┬┌┬â”┌─┠+ // â•‘â•£ ╚â•â•—â•‘ â•‘â•‘â•‘â•‘ â•‘ ├┬┘│ │ │└â”┌┘├┤ ├┬┘├┬┘│ ││├┤ + // o╚â•â•╚â•â•â•©â•â•â•©â•╚╠╩ ┴└─└─┘ └─┘ └┘ └─┘┴└─┴└─┴─┴┘└─┘ + // ┌─ ┌─â”┌─â”┬─┠┬┌â”┌┬ ┬┌â”┌┌─┠┌─â”┌─â”┬─â”┬┌─â”┌┬┠┌┬â”┌─â”┌─â”┌─┠─┠+ // │ ├┤ │ │├┬┘ │││││ ││││├┤ └─â”│ ├┬┘│├─┘ │ │ ├─┤│ ┬└─┠│ + // └─ â”” └─┘┴└─ ┴┘└┘┴─┘┴┘└┘└─┘ └─┘└─┘┴└─┴┴ â”´ â”´ â”´ ┴└─┘└─┘ ─┘ + // > An .eslintrc configuration override for use in the `views/` directory. + // + // (This works just like assets/.eslintrc, with one minor addition) + // + // For more information see: + // https://sailsjs.com/anatomy/views/.eslintrc + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "extends": [ + "../assets/.eslintrc" + ], + "rules": { + "eol-last": [0] + } +} diff --git a/views/404.ejs b/views/404.ejs new file mode 100755 index 0000000000000000000000000000000000000000..1ff825e06f8f5a98193c988ec2d5447d5a84fdbb --- /dev/null +++ b/views/404.ejs @@ -0,0 +1,64 @@ +<% /* + + + 444444444 000000000 444444444 + 4::::::::4 00:::::::::00 4::::::::4 + 4:::::::::4 00:::::::::::::00 4:::::::::4 + 4::::44::::4 0:::::::000:::::::0 4::::44::::4 + 4::::4 4::::4 0::::::0 0::::::0 4::::4 4::::4 + 4::::4 4::::4 0:::::0 0:::::0 4::::4 4::::4 + 4::::4 4::::4 0:::::0 0:::::0 4::::4 4::::4 +4::::444444::::4440:::::0 000 0:::::04::::444444::::444 +4::::::::::::::::40:::::0 000 0:::::04::::::::::::::::4 +4444444444:::::4440:::::0 0:::::04444444444:::::444 + 4::::4 0:::::0 0:::::0 4::::4 + 4::::4 0::::::0 0::::::0 4::::4 + 4::::4 0:::::::000:::::::0 4::::4 + 44::::::44 00:::::::::::::00 44::::::44 + 4::::::::4 00:::::::::00 4::::::::4 + 4444444444 000000000 4444444444 + + + + This is the default "404: Not Found" page (`res.notFound()`) + For more information, see: + • https://sailsjs.com/docs/reference/response-res/res-not-found + • https://sailsjs.com/docs/concepts/extending-sails/custom-responses + +*/ %> +<link href="https://fonts.googleapis.com/css?family=Lato:300,400" rel="stylesheet"> +<style> + /* Styles included inline since you'll probably be deleting this page anyway */ + html,body{text-align:left;font-size:1em}html,body,img,form,textarea,input,fieldset,div,p,div,ul,li,ol,dl,dt,dd,h1,h2,h3,h4,h5,h6,pre,code{margin:0;padding:0}ul,li{list-style:none}img{display:block}a img{border:0}a{text-decoration:none;font-weight:normal;font-family:inherit}*:active,*:focus{outline:0;-moz-outline-style:none}h1,h2,h3,h4,h5,h6,h7{font-weight:normal;font-size:1em}.clearfix:after{clear:both;content:".";display:block;font-size:0;height:0;line-height:0;visibility:hidden}.fourohfour .ocean{background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABGEAAAAjCAYAAAA0TxdGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEMkQ3Rjk3MENCRUYxMUUyODkxNEY3RDI5MzEzRDZERSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEMkQ3Rjk3MUNCRUYxMUUyODkxNEY3RDI5MzEzRDZERSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkRBNTIwNkZGQ0JFRTExRTI4OTE0RjdEMjkzMTNENkRFIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkRBNTIwNzAwQ0JFRTExRTI4OTE0RjdEMjkzMTNENkRFIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+TuSndwAAEQ1JREFUeNrsnQlw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') #0c8da0 no-repeat center 302px;height:335px;position:relative;}.fourohfour .ocean img{margin-right:auto;margin-left:auto} .fourohfour .waves{display:block;padding-top:25px;margin-right:auto;margin-left:auto}.fourohfour .main{display:block;margin-top:90px} .fourohfour .logo{margin-top: 60px;} .fourohfour .logo a { width: 110px;display: block;margin-left:auto;margin-right:auto}.fourohfour .logo a img {width: 100%;}.fourohfour .fishy-container{width:95%;position:absolute;bottom:-65px;left:0px} .fourohfour .fishy{display:block;padding-top:27px;width: 100%;max-width:496px}.fourohfour .help{padding-top:35px;font-size: 17px;}.fourohfour h1{font-family:"Lato",Arial,sans-serif;font-weight:400;font-size:28px;color:#001c20;text-align:center}.fourohfour h2{font-family:"Lato",Arial,sans-serif;font-weight:300;font-size:19px;color:#001c20;text-align:center}.fourohfour p{font-family:"Lato",Arial,sans-serif;font-size:1.25em;color:#001c20;text-align:center}.fourohfour a{color:#118798}.fourohfour a:hover{color:#b1eef7} +</style> + +<div class="fourohfour"> + <div class="ocean"> + <div class="fishy-container"> + <img alt="fish" class="fishy" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfAAAAFxCAYAAACMQPqbAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAA8fJJREFUeNrsnQdcU9cXxyGJ7D1liiAKMgQVEByAgiAoS1CmoAwRJ+LedbRata3VLttarbPLhdb1r7XDWq211Vq1Vmu1tdY66171/u+5uYkhhJ0FnOPn94lGeHl5eXnfd849Q4cQotNYtf32E21XS6oQqlSqIVT9+b/NGsG+K12N+VxDoVAobZMOAlzpMqHqSJVOVVSFCqi6UAkQ4CgUCoVCgGtWFlSRHM5FtVQ/Kj0EOAqFQqEQ4OqXPlW3OoJbVn2biyeOXzgUCoVCgGsLwFtT5dQT3LIKQ4CjUCgUCgGueoHHHKoEcMvKHgGOQqFQKAS46iSkilEyvIt4hroAAY5CoVAoBLjypUsVpwJ4S+SJAEehUCgUAlz56qpCeBfxenEEOAqFQqEQ4EqUu4rhLZEzAhyFQqFQCHDlqAVVtpoA3gsBjkKhUCgEuHLkqyZ4F/GWq3oIcBQKhUIhwBueuJauRoCD2iDAUSgUCoUAb5js1AxvUE8EOAqFQqEQ4A1ToAYAnsc9fwQ4CoVCoRDg9VSUBgAOskWAo1AoFAoBXn8lagjg/ghwFAqFQiHA669UDQG8NwIchUKhUAjw+itZQwDPRICjUCgUCgFef8VrCOAgwzpMR3PhE9LieNSgP/97d/5/CHAUCoVCgDcrgHfXIMAdalGj3p4qqxbbitN0gxj8wqFQKBQCXCHAVWF0u14aBHj7avbLpB4JdnE6zdzq9SVBQ2tC5zMKAd6cAG6iQYB3qWKfrBvQm70NXugIghwNz2sUArypA5wDU1OZ6LEK9gU6ww1uwDYT8AKHEEfD8xuFAG8uAPfTEMAHyO2HFdWgBm6zkMoAL24IcTQ8x1EI8OYAcAM+JUztLVVl9sGwlslqtZELXtgQ4mh4nqMQ4E0e4BygYRrywoW8TCxJidv0w4saQhwNz3UUAry5ABy88FwNAByS6LopeZvBeFFDiKPhuY5CgDcLgHOIt9EAwFXh+XfDCxpCHA3PdxQCvNkAnEO8qwbLyhDgCHA0NAQ4qnkAnIegXal8qEJ4Z7UoGUXy57rwCWCeVI5UptDpTMH2oPtZRCMHeDBezBDgaHjOoxDgWgdwXivdnQ8EaQjoCqCUiyqaqhOVG5Uxf40A/v+NEeD+Cm5K9GUENz1mCmTE/1/QFC5myrwooqEhwFEI8Ib1QjdT0/CRLA71Hkq4SdCEUviwk+x6lscV8t9N4VGMDlQ2jelipq6bATQ0BDgKAV4zwNtqqFYbJdN4hqqdoqWHxgRvVW4TDQ0BjkKAVwS4G8JTq8QmnzV2gNdlu2hoCHAUArzuANdTQntRlPLVRxsvZNqyXTQ0BDgKAS7OHEdgaqdaadvFDQGOhgBHIcC1B+B9EZRaq+jmcoFEQ0OAoxDgdQc4hs+1V1kIcDQ0BDgKAV4VwJMRlNqr5nJxRENDgKMQ4HUHuDGvSUZgIsAR4GgIcBQCvJGVkVlgKF0rNbi5XBjR0BDgKAR4/Ru5mPNGItoEsDwNjSDVFg1sDhdENDQEOAoB3vBWqlATHqsF4Mrk5W2wPxnNGOAxzeFiiIaGAEchwJU3zMRLAyH1Qt6BzF122EcjHniiDHVGeKOhIcBRCPA6jRPl3m8QD2OrElKpVIEwSEXRF0yT3i/P0C/U0Ovnw7JGU78AoqEhwFEI8HoCXCez+JkUAxRA3p4qSYlgiuMhcouavmAaXAN35q/fgsqJ32TEqCkyAVEHz8Z08aPnj5BKj6oFlS7CGw0BjkKAaxjgcjA15lPLunHvtCaYDeLgD6fy43PGhXX5ginxxqGusq5mn8x4qD+IQ12Z6/Rwc2Pb2C589PwRUZlSmVMJEN5oCHAUAlyLAF4FzERUpjyL3YbDzUR2HbshRrfTRQPwhrC5qB7HwZqDHaILoVS9qBKo0qjS+Q1Nrowg678fVXcqbzhujfXCxwFuT+VNZVydF46GhgBHIcC1AOCqNrqPVhoAeCJe2up20QNgcw/ci8qJSh/hjYYARyHAmzHAOcT7qBngvnhpq/sFj6+DA8QtYD0cwY2GAEchwBHgpmpMZoO2si3w0lb/Cx4HuQDhjYamBJO9RtdfRrXNT0GAI8BVAXF7NUAc1r5d8YqhPI8FDQ1NowA3oGpDFUEVIB8ZQ4AjwNXtiSeosHSrLV4tEN5oaE0A4Lo8mbQb1QtUM6lCAOgIbgS4pkHuxsutlNWlrW91ZWNodQc4GhqaRqFvQjWQ6i2qRVR9dFIHm9W2RwMCHAGuDpAbcJgHyZRspfCSrXT+d4Bzf762PQQmfFFlUcVDq1IofcNvOwIcDa0JwdudahjVKqo1VDm6kfGuIn19dp1HcCPA0RDgCG80NO0CtyVVJ6pJVFuptlCVCTqGRgkCQgQIcAQ4GgIcAY6Gpl3g1qdypUrnXne5TsbQbTpJ2cuErT2fE3QIsgd4ywsBjgBHQ3gjwNHQNAvwLlQLqDYxz3tg4XZB525fC1s67Rd6tu8K694IcAQ4GgIcAY6Gpj3gbk81nGo5h3e5bkLmHqGT699CK5s/hO7tRkLZmCJ4I8CbAMB50w0EOJpSIY6GhqZScFtTxVLNkYAbJAgIOSa0bXldaG7xL4U3ZJ8bVQVvBDgCHA1NqRaUGSWkEuCRQENTCG4rqkCqAqrVEnDrxqXtFdo7XBW6ul8QmZndElrbHqbPO1cHbwQ4AhwNTdkA70F1lmo0lSEeETQ0HcmkP2OepLZeAm6djKJtAv/Ox0XGJg8F3h2OiMzMrwudXDeITEyXUEDrIsAR4GhozNQRKufgJlyXqIaCV45HH62ZA9yTagzV+7w8rFy3T+rnQlv7GyJzyzuCgJDdFOJXhW28c+njIpGBQWZN8EaAI8DRmjnAlQ11CutVMgCX6CCVD34CaM0Q3C48XP4S1YfM606nXrdP4CmRgeF/Qgfn89QDXy0yMv5T6NYGep2LKJg3UBUjwBHgaGjqBvgxBQAHPaAahp8CWjMBN0zz86UqlU1S041O+kJobXuTwvep0LP9XupxvykyNDortLLxhF+jz0PS2kSqcQhwBDhaEzAKPjuq6doOcLqPBlRPqgC4RCup9PBTRWui4NajcqOKpnpRutYt9boN/hMZm9wXBHV7Q9jS8Q3qhR+mILaV/DoH+BtUkQhwBDha44d3b6q/AXyNAOBBNcBbot1UxvjpojUxeMP0sA4VwA1ed2z/fdzrJtTTvqIbnThBZG65kv57F1WF7wFPXDtCFYAAR4CjNV5wQznWCzLQm9oIAF5US4BL1sVxCA1aU4G3gCqGr3VvkmaY+3U6ITI0/I/B26X1Sd2EzBzqgW+hnvg6+lylSBR9Tki1nCodAY4AR2uc8Lal2isHvDR1wLuBAH+zDgCXQNwMP3G0Rg5vGD4CHdPerFDXDRnmFNwQNhe077CJwjtZZGS0jz73MnjaijZFn4fa7wVUvRDgCHC0xgfvYKo/FMCuQyMA+ME6ApzwGxWsF0drjOC25d3UFj6r6x66TeAfdJx63U8YvE1M7whCIubqhsdGUJB/Dwlq1W0SQupUX1O1RIAjwNEaF7xzqB5WAboGrRmrGuB0/0RU9+sBcNB6Kl08A9AaCbgNqZyoBlN9IPW64wd+JrRzuMbADSFza9s/dGNS8gU+gWH03yep8mraNAfzISp/BDgCHK1xgFuXal41gPuzoa+hBoD71BPeEk3BMwGtEcBbn691L5FODhP3MP9JZGT0RApvtzbf6wzITxa6ukM2+Rmq+Npsnv6cE9USzEJHgKM1DngbUX1YA9w+V9brqTB8PqiBAH9K1QfPCDQthjc0ZRlBtULaTa1f+v+ELZ2uSMANoXNBhyAAe0/6fCJ97jeqsNq+BP1ZX6r3OcgR4AhwNC2Gt30t143fbgTv5aUGAhx0hcoRzww0LQO3GVUPqmlUn0gnh3UMO0q97sdSeJuZ39LtEfMCJLXRv2dwz7t9XV6Kr4Gf49noCHAEOJqWAq8NH/pRG7CVNYL3s08JAAd9htPM0LQE3FAa5kGVRfWudK07MWu30NHlshTcEDK3tf9NN25ALnjp9N9DqX6CjPK6viT9HTOqrVQ+CHAEOJp2wq4j1T91gFpiI3hPy3mXtdVUu6iOUt2sJ8RH4FmCpkFw6/K1bh+qubJNWQRdIr+DyWEV4O3qvlcnLb8LTBuj/55J9Q2VdX1emv5eMNWLmMSGAEfTTtCFUf1bR6C1b8Tv14UqneoNSMar5fu9Q9UazxY0DQEcxn4mUb1OtZHBO3XwDqFbmwuy4BYZGj4WePkvg4x03V79AN6vU22Hdqj1fWkO7t1UAgQ4AhxNu2DWk+peLSF2kWoReN9aPY4zs9iIyorKnJfXiJgHo/j9Q7Z9KNW7VHdreP878YxB08D5HEY1sULIPDJ+v8jc4m4FeJuY3hB0DIMpY9bQUY3qYypojypqyMvT3zflJWeGCHAEOFrjg/e3VEmNZoZ2ZrEBh7cpDztWCXC542FBNYPqajXHIgXPHDQ1ncdwE9qb6uVnA0gKtwm8/H6FyWEV4G1u+bNu16hQPvrTnOpz3j2tQb0MOJQh+3wtroEjwNEaF7yPNccyKvqeTanmUz1ScEzOY5c2NDXcgLamyqFaJ/W6+6R+LhlAom9kQvQMDSXNWT7U7dnXjAO3JR88UqqMXeFQjqBaTNUaAY4AR9M8oCJqgDd4oIXNPfOavn8vqi+wwQuamsCty2d2d+NNWSSJalsFHYKPSlqh2tq7EFMLG+hn/khoYzdWEl2i/9eGh7qzlLVLHMpQB34A18AR4Giah1LHGhLWYC3YCo+U9HjBBLbJVI9ljtEtnFqGpgKAW1Ll8gEkm6TlYS2d/gJw29g7kw6BEcTEHOBteFlo5xDJgC8GbUdeqx2jzF3iUDahOkplgQBHgKNpDkaevDGJInBD/XdPPEpVHrsuVJdljtd8PCpoSgI31HYH80S1tc/KwyIOioyN70OovHNINOnYOZroGRpB2Hw/hMplIBtFdRbKvVQAb5Afz2b3RoAjwNE0AyA7qnNVwPvNhg4maSbHsBWvJZeUlaEXjtZQeDtTJfKZ3eKQef88KA87D163m0d70qdvHmnTtpMkYe0t2Znd9O8DqE5TtVX2rslAOYZqGZUVAhwBjqZ+8BhQ7VcAbvAo++IRqtOxNJOZi45eOFp9wa1H5Ug1hmqLNFGtZ9+voTzM0MSMRMekk959com9oweA+xFVcUXA6o2i+hGyxFWxizJQ9uWJcToIcAQ4mnqBo8tHY8rDeyuVLR6heh1TIw7x21Tm2riP228/0aNqTdWDKoEqiiqACvMbtAPggVTQo/xjNoQEZnb7BJ4UGRg8bdOuA8nMLiMhoQnE3MoO4H0VMsFlwKpLwT2HPn4JJWMq2j9IqNPlUIb6b7hRsEGAI8DR1AubMjlwP6DCD0U5EP+KaqyWQbsdVTxVAVVRFQKg44AWzYDblieqvSFNVEvI3CO0d7xqbGZB+iXlk7T0McTHL5wYGJsS3r+8tQy8hRTe79DHTQBWFYHbkPdPEPDXhE5sr2IrVQQ4mnoh04PqiQy8f6UKwCOjtOMLjV+2a7rcjsLYhnvaQ6qBtiJ1pxLiJ6k2eHfkIfMN0kS1sF6HoI85eN2FxbNI79g84tE2SLLevQW6oMnA24jCezN9BIALVbB/0PDIhDdA0pMpT4vgSWwtEeAIcDT1wAXGgv4tA+8N0KAEj4zSj3NryFDXELgdqeLqCG15JVLp4yepUnBbU4VTLZImqg0o2C70aHcO1rr7JuaRwfnTSEhoEnFu1V4C7+eh7loG3uYU3l/Rx9kqDJnrycIbYMxf253qMK6BI8DR1AeWcg5u6CZWgkdEpcdarR44Ba41VZ8GgltWyRB+x09S6VAEEDpRDaJaL01Ui+2/T2hlc8vNw5sUD59L+qeOJH4BUcTazgXAfY8qQ3YzMAKUJ6uNVOG+CiQhc/6aOjIA1+F14PYIcAQ4muqBMpTDGyZtheARaRpGISuiCqUqVCK8JeqDR1jpUOzFy8M+ZIlqEDIP7HJM38T0SXTsQDJi9ALSOyaPtPcNJyZmVgDvP6k6y8G7HYU39D5PU9duy8Kb/xs6vC2hCkGAI8DRVAvvVrxG+XMIoyv5gmRP5c9bPUbysCDMHG5HZaahiySs27Wi6iSzXz2oOlO5szGMTQPeLakyVABuWWF+hHLOSTOqFKql0pB5Su5OoXOrS/aOrdhad17+NNK1Wxpp6x1G9AyNAd7fUjnIgTSYwvsMfeylzt1XAPAgqtd4KB0BjgBHUyHAoTzsVSqREi5EdhyM4ElkU0Hf5Xm8TzPMJV7GPYxZVMOpBnKot2draaoL9bXiIxahAcYQqslUL8rsF1w4F1JNoyqmSqWK4EA3aITw9qshq1xZyqeyxG9Rg85PuJktolotDZlHxO0XmVncD+oSRcaOf4X0TxtFOgf3Ja3bQHMWA4D3aioDOYjGUnhDa9SO6n4LCgAOyWvf8RGlCHAEOJqK4B1Dla8EQErAXcSByMpddLKGUhWJlc3F/k2fzxwqGbzwIa9vBQ/EhY9E1FXChdGARwDAux5HtUrq3cjvV5bsfkkHQnxCNYUqju+X1nvmFKYCqp5qALes+uE3qV7npyWPRs2WnnMZRdsE3h1+MbO0eZqeOZoMH7WAxMQOJh069iZOLt4A7v9EBgYTKwNUL5vqBISu1bTvujUAHHSMyg0BjgBHUx3A7Rv0JRbDuzXvyfzJM/gBIPO36faJ/0IQ1OmowLvdGaFH6/NCd7c/hG3bnBP4+53U7RF5UCcla5cMMDdxjzifyqHeEBfvF2TGduee9ocV9is991PdqKj9gkD/n4VenmfpPl1g8mp7VhAYeFy3V+x+nYH52+X2C7z1WCoLpdxcqA7esWqGt0Ru+G2q0/lpxGu7n43+TMzaI7RzuObpFUDGlC0mg/Onkx7h6cTXvyexsXOFSWJ3KOziFcB7LBV0PbNX43sQyJSMVYA3fw7mgS+l6okAR4CjaeeFyFRm3e4jsWdbVK7br+8+YTv330Smxg/ohYXUoKdCB7srguCQH3UGFgI0N/Ps29lsTbp+++XEa2ffk+5XdmG5bs/wb4VuzhdFhtSLqWm/jAyeCN1c/9QNj/pWBuLgwc9kHbG0D966VDEagjcoBb8QtT4/oZf5SKr3pfDu3vtbfXOLh1ExA8n4SUtJatpoEhrWn3j79hBPEjMyviiysPKXgyR0V1tIHz9TWXe1qt+DUKZpiyKA+/Fe6H4IcAQ4mvZdhCAxbRSHpBjciYl7hW4uFyUQ9O3gTyZPnUI+2biRnDhxgvx16RK5efMm+f38eXLg22/JO+++S4bk5xN7h5ZiaJqb3hMEBR+V8Xxfpoqvx349iwbkFJTr9oo8ILSzvgGvYWxmShKTk8jLr7xC9n3xBTl79iy5fv06ufzPP+TUqVPk0x07yMznZpHQbl2lMBfa2dzQ7dV7v8x+zePeva4WATxUg/CWyAm/GDV63mH8JvAjacjcy++0jb0TGVI4lYwqXUhi+gwhIV2SSLv2XYm+kQn9XlgcF/gHucsBsgU9N1fSx49kB5Wo8b3osWTQqgFuTnUQx4kiwNG06yIEoTPfZ+t2Q8t1Bg0pF3TscJx6tk/0DA1IVk42+eGHH0ht7cmTJwzyXbqGiYHZsuVV3X6pn3FYrqRKrjHBTZxZDr2i50jXuAdm7hC2cTsP27SjNwnzFywg165dq/V+/frrr6RkxHBiZGoi3i/PNud0BuTt4Pu1lCfqGWsBvN20AN6gOPyCVHl+uvEEyiXyIXPfDqGkbMISkl84i4RHZJBOneOJR9tg0sLAkN48ttynG5fWSg6O0F3tU+7hCjX0fmoCuGQNHFupIsDRtOQipMfh/aIUkhlZnwpdnS4B4ELCQslPP/1EGmLrN2wgjs5ORGRs9Eg3IuqAjNfbj7VsrBreAdxjZ/ulm5iwV2Rlfhv2q6h4KLlx40a99wkiBn3i48QQt7b6V7ffgP/xfYLoQ7Qms9QpNA2ocrQE4CAL/KJU+s605smQ5bIhc0MLq4fxCXlkwuTXSNrAsaRb9zTiHxhNXNz8WGc1Yeu2n/DkSV0ZMFrT8/AAfZyh4Zt4+M4JZCGswAOHNfD+CHAEOJp2XIx8efhYPMpwQNouoa3lvy0M9Mn0mTOYJ60M+/vyZRId05uIDPSfCkLCjvCL3kaqhCr2qx0vTdso7loV/ZXIxOiRmaUF+ejjj4my7I033ySGJsZEZGryQDcmaR9vtPEWqyXXHMC7ahG8QdgEqOK5KZkgtkk2ZG7b0pnVdo8eu5jExhWQrt1SiY9/JLFzaE1EhkZPBB1D19Cfb0vVQgaKLhTex+ljoQbfj1DaOrUK7/vZvrLWrrEIcAQ4muYvRPClHSqBpE56+g6hrdVNCC+D16xse/ToEcnJHcSS3AQhXSUQf4fVZlfcLw+qqTz5rVw3LuZL6r0/trazJYcOHVL6fn2+bx+BbdMbhIe6MYkSiENEIkQD8DZRU613XZQJCXX4fSk2pkriSy2bFIXMi4bNIRGRWSQ0LIUlq5lbtSQiM/P7upHxq3mDIVl4+/Duaikafl96PAlPvwaAG1FtxiQ2BDiadlyQ+onXo4eW62TnbRM62l0Fb7R82zaiKvvvv//EEKeeuG5E7284xAGW3nyfLGRvKnRTkv8Hme8m5mbk6/37q9/20//IvYf3yL93b5Frt66TK/9eJf/cvEKu0sfrt6+TW/dukwePHpCnT59W+l24MWAQNze9r5ucuZtDfCYvfROoEeAhWgZviVo28+8KdPQrkSZ48pC5gbnlw7i+OWTilNdJZvYE0q37QDaMBJLVjEwtiNDa9qZuQuY6lrgpk1tBARfGG7T00IL31oJXedTkgYMOwT4jwBHgaJr7wupyL/dVcVZ3frnQy+M3WA9e9f77dQLyk/+eMGjeunub3LzzLxMA9M79u+TR48dVeuKRvXqKPV7x2vNmXtttxZOCVolrznO2C+2sbsJ+rV67psp9ePzkCfmXvu7lG//USgD12xTmcDMha3s//5wYGBsRob39NZ2Mgm10Pz7mdb0maoK3rpatfWMYXex1h0lzMWRC5tZ2jiS/aDrzvPslFFN4DyCdg/qSNu1CiL6RMRE6t/pLJ20IRJjS2bn9DIR9eWtUfy15jwIejRPVAHAR74U+AgGOAEfTHLxteALOx6yWOqLbQYDk2HFltQb3w8cPqVd7o0ZYghd898HdSl7vpb//ZoltQns7Csuh23jLSchMf016U+EtvqmAsjRFBlu8ff9OrcGtCOT3HtyrsM1Xly5liW0CH99f+AV7BYsOqMEL533Oi7RUA5rh90SfJzQul8ky3w0h87begWTs+JdJycj5pFfUIAbvgI4xxM0jkLQwMCCCdr6n6Xm9nLf4tZOB4GB6fp2EbmZa9l51JaNDFcGb77sp1QSqYgQ4AhxNM19WA14qtYGFiTPSd4rMTO53Cg6qVcIagLgu3q5EEMaW98g3b9kihmVAx+O8hvYFtl9Qfx4T9TWslbu6tWJ15orC5RAWry+8ZXXjzs0KNxj901LFIf7eiV/w6MAE1ndd9QDvrMUAB5k1o+8JeN45PGS+RdLLvIWp+YOIXslk0tQ3SO7gaaR7j3Q2jMS3Q0/i6NJOPMPbyOixwNv/CPXAdwqtbUYLPdoZigGoN4kKQtC2WgZvoVyYvCqAG3APvB8CHAGOppkvrBNf22UNUSB0DuveR48erVW4HEDcEFjee3i/wjZTUvvTC57hY52knF08ZL1VZ1DeNqGNxb8A97Xr1imE99Vb15QCb4mu0e3BdsEu/vUXsbG3I0I7u+vc8/qAeWKqB3islgO8fTP5jgTyJErpIBKBf+efTS2tn2bmjCXjJy0jKf1HMq87rFsqae8XTqyhLaqR0RMG8ApijYP2Ub1K/72LykTL3qtAEjqvBcBBn1ClIsAR4Gjq/7KKeEgQvN2tuin9PhMZGjytTegc1pmv3LyiFFjKhq2hsQpbd/Zse07S/U0Q2vkHuPB1DglWGAGABDVlwlsRxJe99po4OhAa/h2/iE+UDYWqCODpWg7wnk38+2HOe+PPl653pw7eIXR2+8vFzZPN7YYSsZjYIQzekGnu5dOdmFrYEJGF1W3d+IHb6c8ek4O3RF9rpLta7TzwugB8LtViBDgCHE39X9ZW0uYT2YXlQg/XC5B5fbWGTmaQ7HWlgZ63vB4+eijd/pCCfHHIuu/A/+nkDNomsjC7Bxe9TZs3V9oXSJBTBbwlgnV9SaKdp1c7IrKyusWnma1iJUSqBXi+lgM8qwl/N2z4uNlng0hi++8DMAd2DicTJi8jRcPmkojITAbvkC6JpK13V2JoYkaELZ3+0emfC0tSM4QOzisVwBuAPkuL1/orDDCpBuDQ5CWDzwTXRYAjwNHU+2WNYWt60NUsLWU3eN8zZs2s0fuuTbJafRLIJFngp0+fJtA4RtjO+4yge8hhuOABPOUT36AETJXwlggy1MHeW7mSXXx1u/c6KOOF66oQ4EWNQGZN7DsBIWRbqmE8L0QcMg8J/17f1PRJfEIuW+/OzJ7ISsQA3p2C4kmbdsFEz9CYCN3b/a6TXrSWnxtdROYWaYqH6egnavEx0K3J++b/D1noRVTjqfQR4AhwNPV+UYexhJzsonKBX9vT0LAFhpFUZ1AOpipQQsmZxGLj+kCr1cdCeys2oGTR4sWVQudXbl5VC8BBjx4/Ig8ePBBnyjs4/MPnnC/iHeKEKoC3oJEA3L2JfSeCeCdCMbzTC7cJ23j9ZmFtRwYXTCHjJi4lCUklDNziTPPepJV7B8g0fyrwDzrO8yOGU3lCgiifJrZNDt4fwvPafihqAXDQTKqRPKENAY4AR1PThaq1tN/5oCHlInOTe9BQpfqktf+Yp6xqUIKtWv2+9IKnb2TIysxkrSHlYvXR1X/FywrTZkwXe+HJ6Xt4GD1VtpuWkiE+pBEAPKSJfB+gQU+mbH0366pm2/J6K3dvMnrsIjJqzCIS1TuXwzuNzfB2cG4rbosa1usQ/Z21HN5tn0FOz4/qNAXYNKoxVFGNAd51AHgJ1WpcA0eAo6nvYqXPLzTrWN13TMR+gBKM2azO6lMuVuc151s3pJnfEoB3D+8hl3X+VOU3ElUl28E4UnGpW+DPvH3mHEnHKhUAPLsRADy+Ae+vBZUHVXeqZN60Bm5a8vh7T+B94J1U/H1w5d3+PpHCO7zPNyIT0wedQ3qyQSQFRc+xKWIAbygTa+8bTqxsXYjI1PSBbnTil7y8DL5TbWQA15WeK7/Tx26N8TJRS4CHUX2BAEeAo6kH3ias17gkOSd3cLmwlcMlGMX5uIpOaZKsc/WFq8X7AaVbAMsp06ZW2Je7FKTqhrekCQ2swgd27iRbUvY+T3jSVQHAkxoBwAfV430ZcTAPrsPrJCp9vV3c8xtGgI6TDiKB9W6/Tif0jIyfwno3tEQdmFEmDZmHde1PvHy6EVMLWyK0srml249FYlbytqqtZbqX9eV9zf2aIrxlfqYzFSTqWSLAEeBoqoW3kDdt+YTVV+cUlAuCAn4CSGYPyqnW+4a+4eoCJWSWEw5KRW1TIZytCYCD7j+8z6ayQZa8TmruDg7wIFV44Vo4hawq6dXy/UBrWP86grvCzQKVpRK/Dx2oFkjKKHVSh+yAdqdmltYkd8gkUjbhVdK331ApvLuEJZO2XqHiTHMH5390+ud9Sn9vDffeXZ7BWy+P6pRWdVdTHcChictsqlYIcAQ4mmoB3pXqbUnTFkGAzwlJmHrFe+9V221N3SFreM1e0VFs3z7bu7dCy1ZNwVtcVnadTStjYfRurCYckp0Gyfa2ViLAPRsJwO1q8V4Mqfoqo4UrJPgpwfOGHvuvS6eIxQ3YK7S0vuXg7E5GjllAtZBERedK4R0U0o94tJVkmrc9r5NetIVPzivgcwQEHN7jqL7Tqu5qqgV4H6p3qAwR4AhwNNXB25O3JmU134IunX6UzYw9e/ZslQAHr1PdoIQSsfh+fdm+yXaFu33vjkYBztbC799jM8MFXt5n+JS0F1TR1IVDrzEAvE0N78OCKkMrOsCJ+9jn85724vXubtEHRcbGj3z8Q8j4SUtJwdDZ0vVuUMfOcaSVe4C4p7lfpxP8pm0uT2B05T3DIdt8MdX/6N8bfWldHQAOM8F/wTVwBDia6uBtx9f5yqFkTLd3z/1Q8y2Bt5WtTbXh85tqSF6TF5SrsR7kdP+gLlyVNeh1FQxj6RjUmYgsLO7yMaOQfRxOZaQCiKc0AoAHVbP/ViqYqJZZT6/bR9o2WLLe7RN4UqRv8LRndCpb787IGi8FN6hDYDRxdPYiIkPD/wQhERBxeZdqNJ/lbclBJqLn6SqqD7Wyu5pqAQ46DMsFCHAEOJpywa3LxwIOE9enDi3XTU3dDfO0AYxxQ+LJyNmjSXhkRLUA10TGN6y5R/WOZgD//fffZda/r2oc4Ddu3ySDhwwRl5NF9f2Kw2AJmxGtfID7NgKA96pi381UOA7Vvo7w7kT1khTeaUM+Fbq4XYT17PTM0eL67sRhFeDt4x8p7mlubPJQNzLuCz6FbFDF9W59I3oebOfdyGrsByDUa6Gj7WVktYG3zM85US2jikSAI8DRlAtwuHAF8xKXrVDvLXSy/wfA49q+NTl74yyZOH8SKRxaVE32+eMGA+/8pQvkwt9/1DmRTbIGLhtCr+lm4rc/z5GL//ylUoD/c+MKeXHhQvHyg6XFbZ2Bhdv5Wmq2CgBuQFWg5QBPVrDfxuApa8LrV/A96F1hvTt+4GeQQQ7zu4uHzyWjSxeT6N55UnBDmZi3bw9iZmlHROaWd3X7pO6kv/cmVQpVSxl4W9JzYH9d2qKaW9nq6BsZi5oQwL2pFopL5hDgCHA0ZQLcivc638LWvYMCjjHoGOiTnSd3MSAmZieT5+bMrhLg9x7Wv2Tr97/Ok4FZGUTP0IA1Y8nIyWLP1bYrW1CXkEoAr+rnfzxxlPToGcF+3tTCnEyYOpH8ff2yyiC+uXyLNH9A4ON/int2L7HMZuVDPErLAZ4tt78iNYT+42px/kN5X26F+d3de39LPepH7p5+ZOz4V0hR8RwSHpH5rEysWypp174rMTI1J0Jb+xs6yTk7+Ocax1qsPoOXM/3sf6SPw+ryWdLtCoxMLXSaEMCtqcqpWiPAEeBoyoO3JVWydNJYavIekZHBYwBO6ZIy8vCJeHhI20Av8s6776qkfCw3f3ClHtD5QwtrDXCYSV4bgAOoO3cJrvRaLy19WWUA//7HI+w12oRCJy6D/3T7pX3GE9rG8dnRukoEuI2WA7wQSsRk9jda3TcNcuc+NCoKoxoj25xF4NvxBAXJ0+Au0WTilNdIVs6kCiHz0K4ppE27EHGmuXOrSzppQ2Cc7XSqHuwzfQaudrzGO63OX8ucsbql4xY3JYCDIOs+CAGOAEdTHsDDecJNuU5OfrnQ1ekSAMfN352cv3VenNH98DZxcHciH3z4YZUAh/Xe+gAOQtkwFlQeqpC9XRsvHADu5dOe/c63Bw9WC/Cdn+0iigZG+HbwVxnAz5w7w16j7+QkYmRpSoSuLhd5f3Q45qHKbq+qJig2REZ8Pzup8aZBoOC8N+aNit56tt6d/6nQpfWfLQwMSZ++g9gkseSUERXgDdPE3DwCWaa5sI33WZ30ImiTO5bKXw5awfRzP0MfezXVS0cdAQ4Z+O/xlqoIcAQ4mpKS14aL52kPLRdEhh6SQK38p+28Hel/ZO+Fz0lLN0eyZevWKgFe36YpXx/aTxRPYdIjh374rlZr4B5tPdnPf/Hll9UC/K0VyxW+DoTSVQXw8xcvsNfoNzWF9B4VxxPaYr+mxxy8tklslrRyAW6m5b3RIUrgzMGq1psGufM+ukLIvG86rHf/a2RqRrIGjSNjx71CYuPyK8C7c3Bf4uQKN4v6TwV+nY9y+A9hndUqAEsvluoc/bmOTR3edQA4DDEZTjUdAY4AR1MOwKFhy2vMI8zO2yayMr8NgEktHUjuPrrLQHj0ylGy8ddNxNzGokKjFGVloP9y7rRCqMKY0F9/P1MrgDu7ulQCuKL92bRts8LXcvdsozKAX7p6iQM8mfSbnkLs2zgSYUv7q7ysDLpzhSi7O5uWZ6S3453S1PmaJnJhc6jLfoPlfAC8I+L2i0xMH1rbOZDi4fPIiFELSM9e2RXgHdgphtg5tIYysSeCLqxM7A2+bu4uSVbj8B5EBSH4Nk350lFbeMsBvIyqmI8XRYAjwNEaAG8jqqks45YlrnVgrVKNLEzI0b/Fa8lX719l8JYAvDoPvCGQ690nthJU4xL61noGtyIPXBHA//znInHzcK/0WuOnTFAZwC/S15QAvO/UJBI/MVHshUfGfMMhPp7KXtkfL4VWby0F+GANvKYpP+chM7xQtjmLoFPYUZGB4VOYJFY67mWSXziL9AhPrwBv/4BexNLaEcrEHulGxn/Np/PFUznL5jDQz5UCSu97CiG7pn75qAfAQYuoBiHAEeBoDYN3C95gYhWEznUyM3eITI0fAlhmrJxFnjx9Qp7SP59d2CsFuK2LPfno448Vt1ClfxoCuWMnfyJ+gR2kQIXe5j+dOl5ngB85cqTGiMCuz3cTR1dn6Wv1TUogf1z+U+UAT6DeNwC837Rk4tjehXrhdldlmruEKXvICfQd55O7ipq71l+6CT0O2lON4se8XCejaJvQs/1ZCgwS0CmcjJ+0jKRnVmzOwmq8/SKIibk1EZmZ39XtnbyBJ7yFyiWrQXe1l5pKdzUVAnwG1WK+Ho4AR4Cj1RPg0HFtFsu8zcmHXucnATKO7VzIH7f+YAA8c/OMFN4gpzYu5N0VK6rsgd7gUPO1vxlcd+/bw/5e29+DlqkSgNe2Dhxqzbft2k6+Ovi1ypu5wGvJApxpcjJ7ziwh7WfbEZO/67rozXeWnTxfwJuZgNJ5L+8UPl0rhqoHVWcqHyo33rlMVAPE9Zs7xFdduDrSumRSF3quL5Imq/XP2wFDRkT6BiQqZiBri5qQVFIJ3l7tuxIDYzMisrS6ohs3YB73um3k4KRHP8vVVB80le5qKgQ49EP/DNfAEeBo9Ye3gKqLdLJSZsYOkYkR875X7FvF4Pfov0ek/Oy2CgBv28mbzHv+eZWE0Bsi8MD9AsTe+y+//KLRrnAKs9AvnBWH0GUADl64vacjMWrT5l/H0mlHvaYt+Lx462cL6lsmRdWPqhv0/qZykJ36xWutezZHeH905U5Jv7fXL+cZ/5vFw0jS9oosrG7rGxmTARmjyZiyl0lM7OAK4IYGLZ7tgglkowutbX/VjR/Yj9/06lUMmesb0892J31cQiVoTpeRegAcvO4OVJ+IjxsCHAGOVh+AO/Cyl61s7Zt7322DvciVe1cY/E5eO1UB3qAe/SPIsOElWglwSR347+fPa3x/5AVLAS0M9Z9531x9ysQDWOzyhp10Lp35Q+/XVr2vZICBBx/BoQ6Z3+4q7nimVXr33N+jY15/f6Xb+NlfGAwetcekYOw+49iUYy1MTB+bWdqQgqGzSMmIF0hkz6wK8IYGLW4eAZBpTuy8fX+c+tmB4SvPX8nm0RCIZsRvv/04fsGePalmNtYnPAIDl26/8ximwdlSCZsTvGt7LZeBczTV/Jr6oSPAEeBoVQM8jK+7btXJSv9U4n1vOPhBld43aMDYDNZzvCq7oqHe49oO8L1ffU4sHK0rARxC6uYtLYlJQMcrjmOmHw2Y/fKO+d+fnKRCqEFpWQIPzzdpeM/77ufJvZa+t7rVuNmH4NiCLCJi/hQZGDx1cG5NRpUuIoMLZpLuPSomq4WGpRBnV28Gb5+e0Z9/9M/tkkrbv/OoaN6n26dYtLS71KewYCWFuez/wzJIErRvhSUOBHglgMfydqouCHAEOFrd4W3Ks3DFdd+d/Vnmebsu3uTa/etVet+g0tfHEXuHllUC/PqtGxoH+JWrV3lSnfYA/O2V7xDvSN9KAAeF5/ciLUyM/3MYPu4nj4lz96eu+vgNTDqrv7bdejz0uQPHpnZd9ObHTqUzGLgdR009ZuLX8SpAua13R1I24VWFyWohoUmsTKwFhXx0Tt5aha9B4T1+1crZZrY2/2RNm7a0FvsESxstEeBSOLfna+ACBDgCHK3uAIe676Us83xQ7jaRpfldAN/6b8XeN2Sfb/ttu0KAL9q5mEHyjz//1JpRovIAv3nzptKS6pSlYSOHk9CMbgoBnjRLPAbVMjrmD5eyWUe6v7T8g803HhQjjOuuDy7fKpn21ZHpAbNf/lTidbccWnbcsJX7bYB3cGgMmySWlDy8EryDQ/oSSxsnomdk9GjAuEmKb6LuPC4qXLRgkZmN9ZWSV16ta75CqGwL2WYMcNBvvC86Arw6/r3466VGLQS4SgCeyJLXsorKBT1CDgM8Wge2kXrf5/49pxDeoPd/XMNgs3bdOoUAh7ncmgDkrbu3iadXO7Zvl//5R+sAHtq9K4kfl0DSF+UohHj7Xn7EwMXlDniMkMw24+sfpm+8dg8hXkcVbd6z0HPy8185j515BOBtl1N8St/G9gHAOzYuhw0kke+sBurYuQ8xtbAhBiam94YufGVhVZ532vixb4LnPXXdBzPruY89EeBMW6h6I8AR4E3W6Pu3oepKlULVl6onVScqDyqTeoBbl88mnibted7S+hpAb/med6QQ3nN+T5UAB9m5OZD8wgKFAH/w6IHGAG5tZ8sA/ttvv/H2r9oBcBieYm5lSfKXF5NRH5UpBDj0SGfJbLlDT8Gabd/l696FBCyEcu0EeQOQAEhvfvZJPG+b/tlnWpiaPYFM84GZY8jIMQtJr6hBleDdISCKTRMzsbK6MXHVuucUvsbdB0XRudlrrRwd/lz4v30TG7i/Xk0p+7weALehmkmVhwBHgDdFcBtRRVMV1aABVMFUpnWAeD9x45aict34mC8AGlbOtuSv25cY9P6+e7laeIOSRqUQV7dWzMOVN01B8+qNq9KmLJJObNrigX954Et6jG0YvKf+bxZJfSG9EsChvMzYyoyYBgddhmx0/+de2vXqid/LEM41a+6h41N6vPz2BjhuEnhbRve7IDI0fGpqYUVvNmeSomFzSXhERuUGLf4RRN/IhFi0bHlpwc7PFScP3ntQFBQXW27v7nZm+Y8/j1HGZDSFg1WaD8CtqGZTpSLAEeBNDd4uVINqAW9ZFVJFUBnX4H0/a5s6aEi50LPVeQDec6vmSAF84K9vawT4sGUjGCj3ffGFQi/82q3raofkydOnpABf8d57WpWFPmn6ZBKU0oUMXzeGTNkzk5SsHa3QCw8Z0JXoWVs+BAC5jZ99aNqX38+AhCyEtGLBEgN43qEL3/iEwvtHCbzNgrr+zcq/HFzJ8FELyKC8KaR7j4Fy8E4jXj70eBsaEVvXVmdfP3h0bOXXeFy0+catYq8uwV+5+rT/cc3ZP0cocf/dmjHAoRZ8BVUMAhwB3pTg3YqqoI7wllUulWsVABdR+Ur7P2ek7xAZGT7RNzYkv1w9zWB3//EDsunM5mrhvfrnNaT0kwnEwNSIFJcMq2Id/I7aIbn+g/VSgBcOLWrwdDRlyjfAn+S9WkCGrR5FJu+ezrxwSFyrVFI2rT/bf9v0vNMAIshGX/3HtZEIa8WZ5jP3/zit47wl5ZL1bocRk48Zt/O5AfB29/QnY8peIqkDSit53dCgpa1XFwId2Jzbef205uxFhWBed+Hi8Fa+7X9oFxL89eZrd5Wdj9C1GQNch48UHYEAR4A3pfXuhsBbItiGhwKAW/KpSRvEQ0sCjwEsUkamkf+ePmGwO1VF6ZhEn5zeSOZ+tYCM3zaF+PbyZ+u6N27cqATwx0+eqB2SicniNWRTGwvi5t5aGt7/V0NZ8RJ9c/gAsXaxIxO2T2UAn7RrOpm29zky+K2iymH0acnE1NaCmIV0uQxA6rLg9U0QHkZgV9aoHV/Og5p5yNpnmeZFY382cHa9A/AO7BRBSse9QvomFFeCd1jX/sTDszOr8W4bFPzNxn9uKQTzuydOjLZ3d/s1qE/s9m23HqoiCtK3mQMcppGtQ4AjwJsCvAVUaUqAt0RDqCzlAG7Hpydt0snNKxfaW99g68W/PguD7/x9V7UAf+PIcgafceWTSc4rgxkwFy1erPF68Iv//MX2xTPUi4QP7sX+vmPnTrYf9x7e0yjAC4cNJdElfcjYzRM4wKexYwg3QYrC6MFpYUTfzvYBQAlqwkfv/GoeArui8jfuWuQ3a/FuScicZZpb2z4EKEf07M88794xgyvBu0tYMr2568Dg3Sk6Zue2fx8NVRQ2X7j3s4nWTo5/9MzMWq/C95HajAEO9d89qD5GgCPAmwLA2ysR3hL1kwufd6Jaz/pAJ8Z9DpBz9WtNbj+8Le6gdu9KtfD+4NSHZObncxl8wJsEiDu1d2UzuO/cuVMJ4Pcf3lcbJN96ZzmDdtbCXBbeh2WBHhHh0kQ2TfVDP/vHb8TawZYdqxEbSisAHDRgQVZlL3yKeMCJXU7RKSgpy1i35VWEtlhvn700Bo5H2ykvfCHNNE/JOtPC1PQJhMMTkgrJiNELK83wFtd4JxAXN18G7/ABGR9WVSY2/cMPZ5jZ2lxOGVv6lorfT3pTgHcDPHBop/oSz0hHgCPAGzXAB6oA4CA7DnCYf1zC1r4hfO7jeQYg8fLGJVLgHrn8Q7UAf/ngUil4Ju2cTkZ9NI6kzc5gsJkzd66C0aKw/qz6tqp/Xb1ETC3MibNvKzLts1ls/4L7h7L9+mTjRrYvMKlMEwAvmzSOdMsOJ5N3z2DwZmvgu2ZIj2Px+yMVZqPrGRsQ867hfwGger66Ym1zXweH9e5lJ8+XJa348C0JuFmmeVRflmluYGxCMnPGkaHD5inMNO8UFE8cXdpBd7X/4otK3qsK3sNfXTKfwvvKkOfnv6SG95XSzAGeSDWHqjUCHAHemOFtpyJ4g8I4wAOoljCAD8rZJjIzud/C0ID8eu2MtPOaor7nEq09sV4KHdCU/80kw9aMJFP2zCCtAlqztfDff/+9EsTvqcELf3HxQgbrQa8MIVPpfkGCGHjhhubGpK23F3nw4AHzwq+o2Qs/fvpnYuNsx7zvsVsmPgP47hkVboRg3Vse4u16+BBDN7fbMKGs8/OvlkNnseYM8NdOXRgLNzKS9W6eaX4ZvGk2kKRoFskbMl1BpvkAEtAxhtg7eLDuahmTpr9WFbyzZkx7FeA9bsWqOWp6X32bOcAhhL6aygQBjgBvzADvqEKAJ3OAJ7KZ3xA+79n1WwBeZHoUAzfYn7f/rNb7fvGblyoAHASlUGVbJ5EhbxRRz0a/ygEn12+rrqTs9LlfiYGJEWkf6Sdem98ymYz5ZDz7e1RxDAP7xMmT1HYzIau+SQmkz5i+ZOpns8jwdaOlAIebH9njmLF4UCWAR4+MIy2MDP9zGDnhGISLB3+8c7EGAZqrSXhDDkDQC8s2SwaSOIyccsy4vf91cZlYK1Iycr7CnuaQae4fEE1s7F3pOWJyv8ruancfFPUpyl8JQ0nmbdupzoTBns0c4FALfoJKhABHgDdmgPdWIcAH8ezzMeLweUG50M35IgsvH9wkhey3lw5WWzYmD2/Q6I/HkeHrRzNAdRnYjcHyxYULFWakq2oNGtqTmtiYUY97PJmyeyZrlAKQnPDpNFZvDWF1PUMDsud//1Nrn/a33n2buHX0YMcGktUk8AZN5WH+6sLoiTPE5WQ2/TPOgtcZvWzlag3AEwZwuFL5aDLTPHDOK9Ke5g7Dxh83dPNgPc1be/ixaWLJ/UcqgHcq8e3Qk1hYOxJjS8tb41esma24Qcv9otCkhE22ri7nlh08XCYJ16up9j6wmQMc9CNVIAIcAd6YAT5AhQCHiWMhVK+wwSWZGTtEhvr/6ZsYSjuvPf7vMdlyZmuVAF+wf7FCgENoGIAEjxN3TCP2bRyJvpEh2bV7t1pC6dNmzWCQ6z9zANsfgPeYjeNZaB+iAwD04vdGsnp1mJ525swZ1iVO1evyXx/aT2yd7MnwNWPItM+eozc5Y6TwhkQ2+eMIx05RNrqxlSkxCxaXk0EYHZqWqAEs+VS9qOwk5yf9exd1g3vdXzeHD9++7wWfGQv/J4G3ff7oE/r2jvcA3r4dupLRYxeT+L5FCsvEfPwjiZmlHTGzsb0ye9P2aYoyzbfevD3UL7zHXud27Y6vPnN+pOx6u5oA3rqZA7wF1SvVtVNFgCPAGwPAc1QI8CJ63NKltd/dg78H6CUNTSFPibhO+sKtP6qE95qf1ymEN1sHpx4uQKlk3Wi27lyyejSDDqyHHzp0qBLElZlItmbDWgZv8PzFJVn8ZmLrJGm2NzyCt5syfQD72XbtvcmfFy+qNCJw/JfjxKOtJxn4fBbbr7Itkyp436WbJig8loqy0f1iA4mBs/NdxzHT2IzwRT+enrDl5kNVgWUAlT+Vofz5SZ+LUCe8P7pyp6Rg0+6FspnmdtlFv+hZWj8CeHcJi2eed3RMnsIysfZ+EcTE3JpYOjhefOWLb8crfI2/r5S07uB7uG1Q0IGPLl0v0VCEwbgpwLsBAIdJZON5PTgCHAHeaAGep+IQOgwu2aqTU1AubOVwCWD26Q87pGD95q8DVQJ88bevVAlw0MgPxLCUrDtnvjiIZVDDUBFJP/KKEL/dYEhu+OQD5ul79fBhSWvQ2Qy8blaitXO62AvnwBz90Ti2Xz3yekohfu7cOfLoySOlJ7WdPHuKtPFqS6KHx7LXhP0qWTO6AsBh/xQdx4J3h1VeBx8VS0QG+k8dRoz7CaaTDSvfO1/J08kGUXWjcqju/IS1WnWCDcrE2k2d/4WkNapNSvaZFibiMrHomCzWGjVSQZlYSJdE0t43nBiZWhA7t9Zn3z3+q8JBMO+e/Hm0o6fHqYCevXarqEFLbRTbVLzvBnrg86jSq1oHR4AjwJstwOeduFCcuXHPcJZ9DuHzjCwWPtczMiB/3/lbnH3+3xOy+cwWhfDecPIDMn3v7GoBLgmjs3Xn7VPZc+B9AsSNTE3IuytWVA6nP7hH/qknJOcteIElzHkEt2XZ3JAQJg1RU4hDGdmET6dWgKbk5gLKuQDiDk6OrIc7eOLKarO6b/8XpJV7a9KzqDd7LfD8JZEAafic7mdVxxE880ptVaeniNfBU9PPekyc+03Sig+Xg3faQHBkcGg713YuNbT8VAfUNvz973AoE5P1vK1ik85DmZiegSFJ7l9CiornkB7hlcvEgoL7EW/fHsTA2JSY2th89fbRU9E8qlDhNV75+svx1k6OF8IHDvwQwugagjfcOJk2JYB7+4bXS4YmFu+09Q477uXTo3d9t9EUhABv3ADPUgXAnzt2rsRv7pLn2OQxCJ93C2Hh88gBUdLweXXZ569+91q18JaAqmStGFAla8DDFJdIZS8eTEyszMRr1Gmp5O/Llysltl2/XftObSd+PUm6hfdg2/OPDWSeLITtJREA5m1/LPa2p7F9quj5jvl4PFuPZpnp9AYAPPgJkyaSO3fvklt3bzVoTOhzz88mJuZmLONc/PrPSZPpZAU3O9Udx8SZ/Su1VYWbLfNu3S9BIlvXRW9+/MHlW3UFOEy96k3lR2VRn/OT/l4nVUMNpq71eXPNe60nzPlWAm/zrj3/gpC5obEZyRo0gQzOn6GwTKxj5zji7dOdwMhQ3tlLT2bf9alctt953Gnsu+8MMbez/Stp5Ki3NZhV35/KvDFfr5QJcHfPzt/RR8I1EQGOANdmUFvymm89ueeTVQHwqd//MtJq+OTX6HHbqDNocLmwlSMLn6//4gMpSA9dOqQQ3h+d/ljada0mya7zwnq4pFFJyfujiKO3C4OuhbUVmTJtKrn8zz8VQP7o8SPyLwXoFQWJZbBOfezkT2RwQT7zuqG7GrQkBUCD5y3v4ULmuWSfxm6eWAmgoz4sYyF3iBCY2pqz/YKe6W8tX05u3blFbty+WedQfodOgcS8pSXJXpQnvXmABjfyr12d9y1R9pK8Sl64awc3YuTp+S8AzWfmwj2rLlytqqFLDjQG4eHujlTuVCbKOG/5tlQGtSXHfxsX8/r7K6UNWkZNPWbSofMVgLephQ0ZUjCDZGZPrARumCYW0DGWtGvfjZ4fhvTGzGAl/R1hFdAJop/3b9D9i76mAZUTX/OP4MdtsIrBncFvooSN3eFQIsCLZOAt0R4qSwQ4AlybwO1OlS43bCRCAnL6GKUKgI/c9/04Yc7wDeLyscxPIXwO0Pr9xnk+t/s/srWK5i3Lf3inVvCW98IZxNc+W+uFTPCIIVEsExxe28DYiPRN6EfefOst8v3331dowfr4yWNy4c8LLIt90pTJxMnFWTpdDJrFDF0xQtz8ZNf0CnXVIAijg+cr3af/zar0M+KfG81+f+ymicQvOkC6fStbG5I3eDDZvGULuXDxAhuHKr9Gfv7SBfL51/vI6HFjiItbK+bJB8Z3JmWbJ0mT+kZ+MLbSa1a39l1TOVmX9K5EZGZ2T5hd8qle7sg18cvXeVMI2HCZURmpeq40fw2VNWiByIK0TGzE5GNGbbxuArxt7F3I0JK5VU4T8w+MJm29w8TwNjJeBiMqqwBOLP2Mz9HHTrV4n45UXlQhPBs/gcN3SB3eVyG0SeWRD7iZsmlKEUMlAbwT1XUFACf8+SgEOAJc0+CGASXh1UAWoG6iikYus47+Njxq+XqY+/0BrH8LwrseYiD0ac3KxsD+vnu5yvD5C18vrDXAJYM55KFVtmWiFKoQwg4d2I1lqUugKRGsldvY21V6nnnIHT1YYpzkRoF5+2sqA3L89imVy7OoR64IpiAYLALbK3x7GPHp6cdC1fKvDVC3tLEmVnY2FZ6HSIBf70BSvHKENGTO3v8axa8FzW5qFcmgPycP8JjSePaaOv1zdtLPcg1VR6oW6j6XKYQSlQ3vFw6fmBz0/NKtrmWzvmfTxKDG28WNTRNzbuVFho+cTxKThysoE0slfh16EU+vLtAalXh37bGBzbpXCBu9QVTQLKSNEo5BCw55uHGyprLlnrwjv6GC54xVfUPVBAAOHvbhKuBNmmNIHQGuffDWraVnDRPIPJQN8FFfHBnnMn72C/SYfayTk18ubON2HkAwe/kcqcd79MpRhfBeJ9c2tbZSFDqGNeqJO5+FtiG8PmBuJutVDk1WTKzNpWAEL93K2YZ1VYNM7hHrntVMQ2KafMhc+hofjq06yW7rpCohDh46W5emAAYvuu/4RNKhT0dWzw5tWKU3GBYmpKWnE/O2EyalVFjLrm6/JDcKtT6GdD/k18EliWy6EdEH6Ge5jnfUM9UAwNsoM1kta/3WJVDbDsNaWI13wZif9e0d7wO8Pb06kZGjXyRxCmq8Q8NSWI23R9tgNsu7W1r6JxCargLe46gO023a6aCpDN71APj8WsC7WYXUEeDaB/CgOgBX6Z3YCnZ8PcV1wty9xoVj9+nkDSqH3ucAggO/HpACfNfvu+udvKYwlA7r0jJNSyqsP39Uxjxi2TD3M3DNUhhihnVu2bpuRYJwPYSuq82Urwbikm2Ubhov3geZ/YPwP0h+uQAar0DWuKIQfcUIxKQ6H8PMl3IrJbLB+r8goONxev5/xAfS2GkA4AKegNUgeK/4/fKojLVblraZ/PzX0hrvQcNO6lvbsFGgAR0jKbwXkt6xlUeBhoQmsRpvd5jlbWDwNGZI0Sq6zQJY05aDjC4911+m2kP/bobY1SqAp9UB3s0mpI4A1y54m/N17rpAt0BZ8J59/PeSvqs2LrQbPe2IzcgpR00GJP0E8AYQXL9/XVyP/fC2Qnh/8utG8tYPb5Ol371O5n41v84AgtKu6sAG/wdlXRByBmDCerREkIQG3m3pxgnVQlsK3jWjK3j31QmgWxNwxaVo4gYwrKsb3U/IbAeNol4+rJ/X+PvsPY5hr1efm6DCFSWVwujmDpZE6OF+nveyn0nloonzmoeJ8+sL7zUXr48YuHrTMiiJk8DbNiP/dAsz88cA77DuCWTEqAWkV1RO5TKxkAR2MXfzCIQ17yfJY8Yt59sNkwOMHj3X19PH9bLZ6GhaAXD3ata9SXMOqSPAlQNeAypHqnZU/lQBVD5UbjyDXLeW2+mqys5qNSn9411zPKbO32U7cupRm9ETjxp18rsCAA+JCZV637/e+LXa4SUSvfb9m/WDeBWeuLIEXnNdISleQ59YIeFOufs0mm1fvtd5XQQ3C/IA9wzzIkJ7u2v0/N/EJ8q5a+oCzkPphfUBeNr7G1/zpJ63JGxuk5x5toWJyRNIQovqnUmGDX+BRERmKRwFChfwVq39xRPFps56TaZETl8GLqb0PN9NH1+uKqENTaMAP9wAeDfpkDoCvP7QtqIK4WvRNcFxMA93t6ESVbPNTE3BG0rHOi54fa3dKPC+Jx+1yB5wGrp5AcCXbHhVCvCv/vy6VgAHLTm0rF7hdEW10MoQeMjQ5ay+kATAgqcPGePFq0c2aF/g98E7h+01BNzS8aK7plcCeAhkopsYP2Td9KAlbmaxlyYv4rysrNZZ2VC7Dk1oKjZoSf6dNWgxNCL9EotIYRUNWgI7xbILt4ubL9E3Nn6UO+eFl2V6treUWe+24+vd4xGzWgnw+UqAd5MNqSPA6w7ullR9GgBL6J4WRmUst12RJr3vhNWbF7iMn/2lzajJ1PsuPabvYHtfkox18Owh6fCSzWc21xrgH/3yCZnx+Zx6AQlC5bUKXddGa8QZ3coApew6O+wjrIED0GvaV/h/qCeHnx+/fWql0aDKUPLsARUAHjUilmei5+1kJYGQia5hg6YwVEm1KRPr9/b6t2UbtFhExPwpMjBgXdNSB4xS2KAFysQ6BPZmF2xnt/ZE38Tkwcilb74gM97USQYqbXimeS4iVisBnqZEeDfJkDoCvPbgNqKKVCI086m6ULXg2xdoAtwvnLo4dNw3P5X6zH55k+3IqT/ajJlw1KRHyF+y5U/X7l1jAL94+2Kt4S3RyweXNtjjrc26tkKPe/0YlogGtd3KhmVNWeFiqfd1M1+umMgWPzlJnIkenfQlB3hEVWVTGvLGFYJ82cnzZfFvrV3hWjbrsATeZsHd/ob1bmMzS5I1aCLJyqncoCWsWyrxC4gi3n7hxMGlLTEwM7878rW3JPCOl21DSrfVkdd4xyJeNQPvGgDe0HXvmnSYvwYCvLEAnEPSlSqUKo4qhT924+HtFlXAG35nkIogCu1QXfnrZKsb4NOOnB7ZfenKtxxKZ34LiWtWQwt+bmFi/J8E3u4+baTtU49cPlJngL9zdIVS4ATr4+BFj/54PAMzJKJJw9h8DCh4wpBABtCHn1crtLVABe8UKywlE4T2OMwBnkSlVQlaFKpWvGlJwpabD/PfPff3aJhhLgtvE/+OVwHeFtb2zOsekF5WuUysa3/i699TDG/XtsTQ3Oxu6bsrZ/OmKI4VgaIXTXUWuqwhXrUW4IdVCG/ZkHoaAlzLAc5rq71qscY8hIe3DWTg3UlNMAVvvKe6AT7p0InRbaYt2Gk7inrfpeOOGvp5XYOLvqRByaRFU6Tr3zt/31VngK87saHZgVRTGrmhtOI6+LQkcSlZh44nOMBzqSy19UJvOGSMtVnRuDLjgtJNVHtN88d8qe/R7h9Jd7XCobNJSuqoyqNAQ2EUaCS7KNs7eRA9Y6Pb4XkFPV//5Q+9yjDRy6D6hW6zLaJVawE+Xw3wltV8BLiWApyHvuPrOkqTe+ThagZqrjpfr2z/sdJur773tv3o6d+LE9cGngZo27d1JBZOVgzg5Qe2MXjfeXSnzvAGfXDqQ4SrmjROQUc2Y2szImzb7jcO8JFUTlp5lYf9yiwu5U1nynUGFGwXOrqwsLmDUxtSXDKPJCQOqwTvYBgF6hfBLsS2Dq0lyz5QXpagAN6l9PkfqBwQq1oL8DQ1w7tRh9SbNMCpLDSZ2a3t6r9h+/NOZbP2Q+jcprTsqIGby219E0MSOSyatDDUZxfDX/4+zQD+283f6gVwSGRDuKpHkMEvD3Ann1ZE6Oryl07mUAD4JE2WklUDb3eqsTxbvlwndfAOob0jC5u7efiRkhEvKOyuJh4FKr4A29i3gr7mf4pMTaCLGiwBPaLaT0W3o3eK6lOqvXSb5ohUrQW4qte9m1xIXVUA1+WeL5Ra2VI5cbnyR6iZtuEy4RnYyoa3GVUOglqxpv/w64iQl95eyeA9avJR89R+ZwHYnfuHkO75kdIENvC8wb69dLBeAIfZ4AhX9SllzsAKAPfu6UeEdrbXOcDnULXXInDrUrWimswjBOU6KYN2CW3sbwC823kHk+GjFpCY2CFV1niDrO1cicjQkEJa35Z72tmK+uPT/09FnGo1wA9rEN6NMqSuDIDr84YlIby8KoOqsB5QGcK95WTeCzyYr1sD8E15Alpt90mvlvXZzVYJqze/2Gri3M8hdA5r3/pO9ndtWtmRpJmpJDApiF3wPHzaMHhDElt5FdPHatLqn9c2C3CO3TiR5L9RTDLm55CkqakkZlQ8m6Ymq8iCKPY89EVPm5NJCt4qZr+nzP3IWDyoAsCD0sKIyNz8Lgf4IqpALYG3gMqR31QweOsmZu0RWtncAnj7BfQgI0a9SKJ651ZZ483gbQtjZ/WPi4xN7GSAEVAFwDcjTrUW4PO1BN6NKqReX4CLOFz71RPW9VEBn8LVh98stOEhcl0F+9cLIV29Aue/ts521NQfbEZNOmqW0Pt3uMD1KokRd/Dq5sUueGNmjWUAv/7ger3gXdfxoo1BMB0t/YVs0rOoN/GNDiAO7ZwqDDCpj2AYCwxo6ZQYTOJKE9iNwNR61onnvVFYAeDhhVFEZGT4BCbLUUi+SRWmRWHzRbzNa7lu/MDPROaWdwHeQSExDN7yrVFla7xBljZOAOUfJZ63DDCCqgD4dsSp9sBbDuATtQzgjSKkXleAgxfsq8KSqvrWU4PX3p2qLW9lipCuRpkb98xymzRvL/O+x5Qd1bO3fgAgGrAgi130HbzF87TX7lzPAP7L9dP1BnhD6sC1QTDZrO+4JOIfG0isXW0bBOq6yMTKjLSP8CNxYxPYTUNt93foyhEVAN57TJy4mUt6/nYKytVUkVoA705U86Sed0zKPpGZ+X2YEta1eyIZPnIBieyZJQdvXuMtgbe1AwD5oKI1bfqciL7n6woAjg1btBfg7loIcK0PqdcF4LCmnYQAbNyCgSW+c175hGWej5541Cwuio0LTZiaIr3om9qJR3Ue+vU7BvBv/vqmXvCGASez9s1rVMCGKWLZL+WRkLQwYtvaXm3Ark5QCuYZ6sVC8xO2T63+hmP9mAoAj5uYKG7mkpS5h3u7fbQA3guk8I5K+EpkYvIQ5nNH9hpIho2AvuaZcnO8+xPfDr2kF1SLauDN18CHUB2hOsCP4b/0Z6cgTrUa4Nq0Bt5oQuq1BbgRD18jBBuxoOva4O1fTJM0bbEpLWXet1N7V5KzdDC74PeZkCAFx8WbFxu0/v3eT+83muztrEW5pGO/oApzxmsruOFxbO9CPLt6MU89OC2UhA/pSXoVx5A+pf1I34nJJGlaKhnwfKZCpc5OJwmTU0jM6HgSWRRNuuaEk05JwcQ7wpe0CnQnNm52BKoD4LUMzYzYa8D+KmoNC61aK4wVnZosBnhM0j4OzWQNgVufypdqqRTekfH7RUbGj2EoSUxcLhlaMq9SX3PJHO8K8DY0PCIyMbWoAt5xvD0qT2jTN8QBJY0G4EVaDHCtDKnXFuB9EYCNX2O/PjoWBpZQ7/uw2PuOZt43QCRhRn92wY8YGiUF08MnD8mNBzfqHT5fsH+xVoO7eOUI0jWTQsHBqkZIQ2Mbe08H4tPLn4RldmdgTp+fTYpWlKh0epp0+Mn7I0nOK4MZ6HvkRbL197bdvNmNAjRwkbynCZ9OVdiNTbdnn/0cnKkagLeI9WEXr8FvYfDuEXuAgvgJDCVJSCwiRcVzSPce6QrneEsuoGaW9kRkbnFc0CnMrQp4h1D9RoHhjuhslAC31HKAa11IvTYAb43waxrKLf98esvSGYfYuNCxzPu+70Q9R9kWnMHpYeyC7+TqUqfxofJa9dNqrYT25F0zSPL0NOLW0aNaYNu62RPfqA4sWS1tbgYpem+4WkBdV8FnlzJzAGslW7ppAguxKwR496hvOcAzNADwblSvSz3vbtEHAd76Riakf9pIkl84q9JQEtagxVcW3rZEaGv/h25iVhzdhqECePtxeAciNhstwEEfNhKIa0VIvTYAj0P4NX5NPPjzGOi6Jqn7Nkvscw4u7OkLsknK3GdTrDokdGIX/JScNAbwA399W2d4f3z6EzLnyxe0q8xr00RWxmVmb6EQ2NYudqRDn44kdkxfkrusQCthXVslzUp9FkKflsz7oYdL+qHnqBHcLVnIPrP4JQm8BWG9DokMDJ8aGpuTjKwyhRPFOss0aJHC287hsk7/XOjU5kwllIMETBU7Qx+7ITIbPcCLGgnAlRVSn6hKgAt4ljdCsJEr45Pds8WZ5+Kua/ouDnchJAyDQKQJT5MSiW+fDuyCP+fVeQzgO87trDPAX/r2Va3KIu+cHMJKteQTw1oFtCbhg3uSzEWDGjWw5ZX6fHoFLxzC/4KgsB85RAerCd62VEMkZWIM3sE9jgC8jc2sSHbuJJI7eFq1DVqewbvl3zr986bRbXRQAAhn3ts8BnHZJABu2YgA3tCQuqT2fQ9/30oHONR7D0AAqk2FfJiKUjvIPX/yz+LotzcssRs17QjreT4w8QxALG1eBslYnCO90EeXxhLPHuIa8A27PiBPnj6pM7xfObRMK8A9fM0YEhDXibQwNHgGbgpt9yBPElUSSwa/UdSkoC2rgS9mVQC4oZkxEQQE/cRBOkTF4IbuauZURVQbpPAO6n6EXsifmphbkbz8aSR70GQFDVr6VAXvmXwNXd7ztqWf60/YYa1xwrsKgDemMHpDQuppCrz5KFWE0KGrWYQaIQbjNXvzKWDxzQjeA6lawklNH835v5Wy7UFb9870mrl4K/O+x0w4atCm1S0rFxu2Zip7oY8oiSIuAW4Mdt/8fIDceniryvKwj09vrPDc2hPryfz9i7RiIldgfOcK4G7p6UQiC6JJ3hsFTRbaskpflFNxoImVKRF06HScw7RQxQC3ohpKtVbS21wQEHIMGrSYW9mSgqLnSEbWBDl4p5EOHWOqgvcsuo0QKiM5OJjTz/Y7+jgYUdnkAF7UCAFel5B6dT3fJ6qqDhz6lkfylqfKhnVH3ifdUEHzGGuqHlSDmyi4oSlOAEQ7ZE9sfuMUpYzXiFq+/lWHsTMPQNc1y0Hpv7A17lkDyJC3hla40HcrCCc27nYMemcv/0Yu3b2kEOAA65n75pJFB14hLx1cQp7/+kXNT+Iqn0zCMroTPWMxuKE7WmDfzmTg/Kxnc8ObiTJfqthOFcrcZABerEJ423PPe53U8+4QDB4ysbJxJEOHzSXpmeMrdVfzD4iuYs07bzpr/ZpZbCwHBiP6GX9JH8cgJpskwC0bKcBrG1Kvqd691iH1+rRSbcFhG8YbuwxWIqyrUwvevjWOt1Vt7OCGnvEd4H1Vd4LT//eob+c7qPsu/erHMp/ZL2+0HTn1R5sx448a+njeMLWzYNnKsslOoJCcMGJsbcoAeO3uNXLu33MKAb7i2MpnjU/+N5OUbZnI6o8BolP/N0u9jVf2zCR9xvQjJjZm4mQ0V1sSURBFCt8d1qygXQHgr+RW+FzNHayIwMf/FIfqMBXB24Eqn+oDKbx9O56UzPIeNvx5MiC9TK5BSyrxk2nQIoW3jd01Cu/n6DaCFYTNjfhUsUmIyCYL8MYaRq9NSH1+Hbz5KG81TSMDGFtSOchMHnPiXjtMJDNQ8qQx2J43vyHIa0TQzuNRDGfo4V7bLwK/eelc1yjEc8fOlfR8c+0yp7JZByDz3Co/76TIQP9p3LgEMly+Y9fkBBKUFcKSuwCE9x/fJ6eu/6IQ4G8cWS4F6KgPyyrAY/j60QobjKhCMDjEvo0j218X/1asRhrqpZsruCXKWpJX4bO1dW9JBO39flEZwMVhc/C8PxK/xlApvB2c3Vlr1LSBpRUbtEB3Nf+eiuB9XSc550VeeqYvBwQ9Du/ZiMcmD/CiRg5wRSH1+sw6n9jU54EL+I1DZ95wRptC7QU8ShHMR6gKGvKF4Dcugdx7r/H1pxw+NYp635vsRk87YjNm3FGjQN+r0Mlr/PYplaZWxYyLJyHZ4hpwfSNDloH+4z8/Kk5Uk+lvDjcC8gCZuGOaSsE9akMZ8erhw/a1dScPthzQ3KEtq5xXB1f4bB29XVUH8MxiC7bNzOL1z+AdyOHtQUaMfrEyvOW6q4nhbSeGd0ruCrqdfiwRrjK8t9LH+YjGZgFwHQ3PBld2SL0hs86rDKk3BYArmkVuwaeVBXMvPVXJa/eKQJ3BJ6WF8uiAPZVQVV8Oum07ftPST9FNC2SeZ27c8xx439YjJh8xG1p0WGRk8KRncTQDbN9pSRUu8r1G92YhdICiM2/icujv72rssDZ28wS1ARzC5b1HxLH1bWjEMmBeJgJbgQYtG1Lhs3X2dVMNwDOLbdiauuyaN/e8Xdy8yejSxSS5/8gK8O4Smlyhu5qkwxrMANfpn/cRS7LLLHZh2ewI7+YO8LeaCMCV5c1HNQeAS0UvAs/0LDEMQvot+QxzTw5bWbXnSWUBHJBB/O9+/P/hd9x5GBwS7Iy04cvC+9Xb86WLVv3e3+RnMWxCqSC7ZKtOdmG5oKPfz1BGVbZ5EilcMazCBV6cgd6LdBnUlQE8pGuoeIjJxQMKAT7ny/lk5r45YrB+Ju6/XbJGDI+RH4xVSQg9/82hBHq2w9S0xKkpCOpqlPtavuoBLm7SUvDM834GbzcPX4XwZt3V5OANvc05vLfRbUDGeTvZdW+6PSE9JzfRx9cQiY0P4DVZHUutUHIJcs0K4M3KMov9qd5mvadzB20TWZjd7ZQUwmAo3+hDnIEeQbrkigGeOTibAfyLP76sooTsE/b39Sc/IC9+85LKW592z40klk42bNgHrnHXrLzXCysD3C/gRK0AnlmsJ+v9VpOwVvBszfsZvFt7+JHSspcrwTsoJKHSxYgNJrG0vqmTnAMe/GSqLgrgvZY+voEDSZqe910LgDelMLpKEuQQ4E0T3iK+jsjWJHUjux4EMBe+W0LGbZ1cCd7QgS04uwv1wMUh9LLp4xnAP7uwt+aRoac3krnUI1cFvAvfKSEuvq1IcGoYKXh7GMK5IQCvqoxMPCXMnIfD3am685GfjlSm7Fx69rO6fM0b6rw/lMLbuwN0QiNtvTuT0nGV4d05uG+li5CljQMMJrmm2zd9FuvPnlnsIwcAhDcCHMPoVSsNAd50AQ5riKXsApuTXy50cbhk08qOlXwVvFs5fB5e3JMEZXYhQeldGMDnviJuo7rr990KgS3/3NLvXlf6eE8YIuIZ2o5kLs7VCiiC51+4ooTdSEgE/y5eNbJxADygswTgBXI3euFUk6he4yVgH3GtpBpD1YZKwH/ekiesrZM2aWnne0YC77Hjl1SCt3xrVDG8nYjI1PSqbmRcNt2GJ5UJet4IcBWG0a83MU9+PobQmzbAO7EBEllDy3UyBu6A0rFICkSAY9oLGRUu7n0m9CNBWV1IcFYosXSxYQB/Y81bDOA7f99VCdZrfl5X6bmFB15WGrxHfzSOeIf7kujhsRqFNTS5yXwpl6TOyyCJM/tXuumBISHJswewtqWw5jx01QjtAfgbhXJZ6C5EEBQq6YWezs8RmM09lmo51ccSb1onq4hFbfi/oRXqEipv3qSloELCGod3e79QUjbh1Urwlm+NKoW3sckNQXCPXtzzF6HnjQBXcRgdsrg7NRGIH8Y18KYP8Hh28aUXY0F4l+8AyjlLhoizz+VA1L0wgnnffvEB0tajazavZQD/9LcdlWD91g/vkAXfLCbvHF1BVhxbpdTe55BVDv3L817TTMvTwW8WkQELski/6cmVjpNkNCeU38EIT21ei5fvsNeyrRMRBHc7wsE7ircmfV4K7Zz8ct3oXvsFfu1/ETrYXRHa2d4Qenmd0UnJ2sV/ZgqP6DyDd/sAFjb38Q9TCO8AudaoICtbZ4D3TUHHsHhF6+wIbwS4CsPoUbwU63Ajz0R3R4A3fYDnSrwpgZ/naYDyiPVjmORrvwHewdmhRN/kWe/wTZ9tZgAvP7utEsCXHX5d+Ylqu2eQHnmRJLa0r2aytl8vIClzBjKPesD8TJL58iAyaFl+haEgCTNSSP95A1mf8Vy4wWhEALdpbU8EoZHf8bD3m1RL2fmRXVSum5C4V2hve03f2JCNU4Uyvc6JIcTIwoSIzE3v6/Yb8JkU9HIJax069iDjJy2Tg3ca6fB/9s4DLKoz6+MMQ5QOQ+9l6L333nuTIl1FRBRQQRG7xhRN78VUUy2JKWLKxnQ33fS+iV+STdndJOtmUzfN873nvfcO05kKM3DJcx4IDDOXmfH+7mn/f1K5wsnH1cMfrGxtfyTw7qSDcjy8eYBrDvBWA2auIjPuq7fO6zWyeQTwAeYEvWJSGOr/dzqYdnQTlReVPrFn9+VRgAemimWsNo+/+LhKgBvabWzNoTHI7syF3iuXzwrsVu4fpr1shV3qq/poNo6f+81MllUe4KiFLsgve5G8Jx6QLpULSgtfsLKz/d3RwxlW3jKsIJaDK3tCd/f/WHQOHJOHd1JqoQK8lemaY7h7BYGVtc0PljFJDfK65jy8eYBrGKcMAMABOR9us9dX5wE+NwG+agrgAZ8jlCce2U5Lv9xJvXRdJYV36uJ0Cm1HTxHUTjQyTmRvPa8S4Be/eLnB4N17+TKS8VWZXDkaoW5KPW39Ae4MgtLaE9zgGYV3edFzVjYL/0B4r7ptRPk8wuH1VGPeMoMpv1smpVFjkpT0Uti4+RoFeMclliqceDy88eJw4fdCV/dCZStqrEjL/Ty8eYBr6J2tby9cPrM/bW59bx7gcx/gK7gSqTAi+FMG4NskAh81WxqoaAsCXOTnSqG95Kp+2HJ8B/36xXdfUglw7H/rraj2+E5oPnsxtJ3fxa99GaOXLzfEhsp1gurmpxh4r5wULGp63Mre9je0GZXPvOUDd/CF3p7fEnhTS9BUJfDOzkVTEkV4e/uGIbx/JpGv4iTPKaxdycN7/sFbS4CnGAiGpUru96Q59b15gM99gLfTbAt74Cmx7yKU81cU0yEsPKEXD5dReMeyg2tJdalUMAVLxtIAVzaFft6JC/SUQ90BjdtbKGR42M7MGtkCW2sQNHU9xgysLTkm9HL7N9qudl+8dNrXq3lnG1g52f+C8E7LLIeJLdfIaJtnoymJnKMYho9/BML7NxI1Kk7y6Cr2EC+PygN8hsvoh1XYl5pyX3yfTlro6n5oDjGPAV5G4i6abZXmv4BQjq1MlKyNoWgLro0tdLABO5EDrH9wE3RdxjhYLbS3UQvws585Xy9Vta5Ll5jk7vRcBTiuu+Hrb9HW/xC9oEuMeR//v3JNzdRF1WM71bQ5+ujvn2VjA8tWbFeEt5yjGIZfYDTC+08SHWrg/SQPbx7gWgJ8r4GAqCqjnTDxMnoKD/D5AfA0yR54e8ujeAKOKIqmK2M4cY7Zd1AGM7i2aNdimel0G0c7CcCPf/a4AsAlGug6BGqm84CdCTOT5VKrb81gZWP9B2bfgkWNj2PfO7ooTuZ1yV9SBEN3rFWpQY/vE3sXRzjL2hrEoUmso1izgqMYhn9QLMIbrKytV6k4udux8N7Mo44HuJYATzHmQJjUY5wy4XL6AA/wuQ9wMdWWRoAvWTppJXL80SfGj1Fbw+hgFNcCk4Jh06Pb6foUd8K3FdnD6397nQL8SSVSqvInePz98WNbYNNftquFN/6ch+sM2YletUxq/a0FUAffoqd/Uhjg+w8cSkNDG+nXpqi/FGKK41R6ruOKWf/Vg5Ban0XAvAA8vcWQnFqtcIIJFCcw8La13aFiz9uJvO9eIp838ZjjAa4DwA1VRj81zWOI2FK7yZfUeYDPTYDbkuiVTKKHBH5+lvVCaheKAHcP9aIAx2nr5TcqrhxxAH/2ixMKMqqykqe7ZMChdl3snvU8XGcouq9YKpWBt4DQw+0/gsqSv+JrXruxUeG1we9hT3zDg5sVfpa/tBjCMiJh6NZ1NKrXNlCgi9x8IE6q9y0OS6HwFnr6HCHvO2sl0+YI7xfJ53U84niA6wFwQ5XRUzR4LJMvqfMA1xyKdqwLE2a3QSRcTRziqHF9Hw6zcX1wv/gAiKtNovBOaUiHiUe3SQbbaGxhVo5eePtFCvAXvnpRBuD3fHhEFuBPEICzNqKr71qjVqhl8A6+7z1TgUI0U69pMwj9vP8p9PX42ivMF7bJWb2uu2cDhGVF0vdE6apKmZ+NT24BR09naNneLgE4Ru0oAb6NNTUkQXvQsIgMBt6BIR9ZdKzsZi8gpf283cn9v0o+r+LxxgNcT4CnGDCL1fTxTLqkzgNcOQDRecmGdWlC3ehqEiMkziGBJcIe1ujBSZmylImU0S+i4h29fZPCcPGnnFALnnxH79uooJmNymyuQR5w4rUTFOAn//mqDMAPfnBYqfEIDqdhNq4K4OsfnODBOoOBcq8SrfvxehC6u3yHr3sDgbn064L/j71tT7E3hGZEgL2rEwzeOiIBuzgtDOLLk2TgzUVedzF9Lzm5ejLw9gv6yqJjALPvIXpxyxqgsPB+g3we5NHGA9wAADdUGf20Fo9nFiV1HuCyAHRmNcUvZN2Z7mUz2vvZOMIaQUyQyDZBgKMVZAN7nJMWvcsnLeOjPqArZX3FNCuu3yFr0lE2WgV+CYHw6IlHKcDf/PotWYC/f0in4bWRQ2M8WGcwpCVgy9ZUUtDicCLOK9BhwiMbIaowln4/uiAOVu4bghXXrgbfyAC6cuYh9qIl9ai8WFh18xpYf2QTjNwxpgDxgLhgeh9CL5+vLRaveIg1Pxmj1qDkopacxH1YeHfxWJtfANf0Q0eATxhLmnQuldTnL8AZT2TMsm8m8SDXS7Zo73pEUF76V8ucnJMWzd2PsvKSCPerSawmUSTvrjSLABewDlLjnLGJoLnhCTzhrr5zLT3Ry5t1lKypgNDccDj6xCQF+LvfvisD8LvfO6A9wJ/YxUN1hkPaca6gv4RCNjwnir4ei7a3gYO7Ex1Ga965GDYe2zoF5VvWQf2GRZDRnAOLtrRJvr/pke2w6eFtCgDv3NNLqzmCoqrn2H8LeGF7OXrRC8VBkeRxP+ThzWffRgC4eIbL6NKZ+GkTF30ZmL8AZ3yJy9iTEGOr2Ns3aVmQ+7LQx+trR0+XM8n16RBXngTWTvZ/CsPD/k/Q0PI4e/JCmcpr2dJ6lEmAHMuYnYOVJG6iAK8o/isOs2H2LV1m5aJoqAyiK+LgLtaN7G+n/yYD8Lt0ADg+Fg/VmQ00XeFe04z2bArw+MokwPUx/BqH0JZetYK9wDobRm4fVVomx8DMW7IGeM9GhZ9HF8aDMCj4c4kFaffAIUFV5YVWtjb/R6KFRxoPcCMA3MJA6mmnVQmkqIjjZqKbTkvq8wvgnYOOJOpJ3MZl3IL6+ieFXh7/tnN1pNKfCCPuZLbxoa1QOVoD1o52Z4ShoZ8KmtofY09iCPKzSVTQobfZBThqT+dTByry91gWZL/i4OZET9ry5XOarQ0WQ9KiVLj14H4K8E/++4neAEcJVx6qMxtNZ7dKXtOYsngZoxpbkQMM3iKrfT7+4BaVAN84uVVG8GV4vyzs28/tAQLqPywWL3uYXiTW1z5p5eT0nWVyGjqexdM5Ev6DB7jhAW6ocvbAHCifK20PzB+AY7bcOVhH4k6JDWd+1itWtta/R5fGwdgDG1UCauz+CUhpTKcnMcu4+Pct2vsfkionYn/cb9aycTmACwpzX8I1MdzbVuZ3nb0sj+6IX3b95RTgX/7wpd4AxwsdHqozG9zFWSMBOQ4lcvB29naBNXePKX2d1h0aV4D3KPmeghjPYcUs3DvCDyyz804KaqqfJvD+WVBY9ixrW4q2tv481niAGwHghiqjH9bgsUrNzblsfpXQmbL5tTR7xkw1K/mNs6wXnsEpXfnp6o0Pb6VOVWgxiS5aOGGNGW3/TavAO9IPrETOPwiKyp5nIX4vOwmeP0sAP4tEIvV/xuyouuJZHFJafddapf1vKvLSnglbdm+lAP/3L6f1BjheLPBQnUkntSFGQnV7E10R5OAt8nWF0XvH1cwqnE2H1WiGvX8d/Rq/p1BReWirAsBzOgpA6O/9TwLvnwRl1SfY9/4hOtxpKjMh/MdcA7ihyugwTRnd1PveCsNs86sH3jnoReI8rmxumZf+qqOH8xkUOZE14dgJy64foCdGefhhpoMrWWvv2QBVo/WwwM4GhGGhn1i0LnuEPZldy66gJc5CD9yHxMX0ODo6HsGTedueLpnjr97UABnd2VQf3dnXBfoGl1OA//TbT3oDfMPkZh6sMyWhelWfTGukhryudNXLUwTr75vQcOjwbKXglv53IA/w9t3dVO1NUFH7LNtCuo5ECd2E4D94gBsP4DNRRj9uRvCmzmXzB+CMIEsbibtphlpb9bSNk8OfCGL5MrD0YJC6aL+omxqDBKWEMie10qq/shCfZHfIU5TJTBpxEn0hiT3MKlnfpJXI6aesrjyZY84bKKTZd0RxND3hV9ZVUYD/ceYPHuBmEP03roJF5yi+P0Myw2Ghgy0dPjOUh/vW47uU9sod3ETAbmYcIDHAo4wH+AwA3FBl9ONzpe89P9bIGIGWBBJr2ez4fip2Ehr495oNDQpCJS3nt2sEb+loOa8D0lqy4CxbmzOW8QnvUV1yBuJXsGYjtjOYiU/QdTjUww7x/8Le3ZF6guNxlo9VSzTScUKdTiwnJQL3Ie0JzgPctAJbODKqa1KBLmTYLkE7UEPBe/NfdtJMXhnAg1PCQVBSietkt5JYROVU+Q8e4MYFuCEzZPFc6HvPF4Djnvc1bLmPBWv7I0J/r392XNAjc9Iaunud1vCWmexeUUwnf4V+vv+0aJGU1PfREuPMAbyNDuhhiyA98S2EdFpbJlVe4/TR/ZMCGWGP4jjwC/CXAPz4Z8f5HrgJxopblGfdUxroTP975U1DeoMb98C5ITf5KXQuUuszwTI1403yPjtMYh2VHuY/eIAbH+ADBgLgxFzoe899gDNT2ZdwAi1osSj09/kHN+yDWuAFfcUwcMtqqvWNJ0p9AE7VsNZWgVuQJwhdRN8LatuekNoZr50hgOfQzL97YFJQV/U0/p1BaSFT7mSdWfRvL15ZTsv/do4OEoBLG5roBHB+Ct0Ift/9shr2SqJhezOIfFwhoTIF1hxYr7N/+7qDG1SumElHyfIKsIyK/ohK93YO7uIBPmMAm+kolYuUWT4ekQGVzMy+7z13Ac6sigWSOJ8VnJgUVJc9a2Vv82tOdz4M3z0K3ZcuhfiqJLBiS8m4dpPanAmlayr1hnjN5gYITBaDlb3dr4KymhNSmXiL0U92zCrbNsZedNmklYPdr1he5QAekhMBNo62dGebG3z63+//owB/+R8v6yWlyu+BG9io5NIlGr3fGne1gG+UP/Re3gdn2S6ElrPbNe9zkwtXnELXBNxc1I8vAmGI+DOpNhE/wGbeABex2e0+LYB2nL39xAyD/bABy+gTRgSt0fvecxngqA2+lOqZ48BaS9NxKwfb/7We26G463rfRshsy5Gs4Cy0t4bo0lgKYX1BHlUSC1Y21n8I8otfZE92d5NopqYoxgP4AnYnl5m0j4v8EP8ujzAvCnCEd1ZHLv27qybq6d/8zfffUoC/IyWnekiJmcm05VfeB9ww62G3DctIpE4XmKHjBaidiwMEhEaDT2A45HQV0JmO6bLuNXeOaQVvDHQsE/r6/It9T19PhZH4D3ME+IABgXiaBXrrDByzoYbZjAXvFPY4Txuz7z1XAS4kEcmajzxosWTppNDH/RsslcuvyEj//8CtQ+AfFzglhOHjAvn9RXpDPKkxjRluy8h9jT3hYd+wyaiDbcz0+/X08Xr6Jy0zUt4Uujl/z/1tfdcNQN8NA/T4MDv/4O8fUoD/33efqLQT1SS2EGDwANa3372aripq8x5r2NkG9u5OEBWXAVW1fRCdUAjeAeEQV5ZMFdVU9bqHb1unNbwxCpYUgzA4+O9se+hSPgM3K4CL2MzztJFLvfvYsrupltGNFQNy9qQnDVXyny8A9yDRT+HdtXLSMi/zJBo6YLbB2V1y8pNNu9tgybX9EvU1zCDL11SDNclSEXRn2VhDTHm83hBPW5yFoCQQz3uNPendQaLRyFl4rWRojy2nCwO8/oktA3Sqarugkx4bnvifevkpCvB//fQvCcCP/O0+nXqpPIR1j+U3rlQqe6su6kj27RnuBzEJudDVMwG5eW0Ql1gK0fEMxCNzYxUuVjc/ukNneC+9fAXYuzoDuzKJAi5r+B642QC8dRb8rk9pIWE602V0Y+iSK7vg2Kdv33s+ARw1ma+k4MLs29X5+9qJJsnJiwOXwk73xT2w7gijXtV/0yB4RfhKsnHvKD+o3FCrF8SzunNR9OWMZW7Ry1KCL2VGhLgDK7BxO/NcLJu0crL/OTw3iirO4eoRHhcqyu0/fBsF+A+//SizC64LwIcPjvIw1iFUCQepjyYITguH6LhMWLnqXMgvaKcAT06tpv/4EeIevmJIqEylvW7uNVp7YL1O8F5x3SrwDPUBYWDQF+yq5I0kMqkKIP9hygA3BY/r02zmLzKhMrqhLT5F0xyzLlUPSUtivgCc9cVeOSkozXsRvY4nHt4myb6nOyni4BDuM68/ugnSF2dL9qWdvF2gaFWZXhBPb8+mEBfkl7woNQCUaTSxF0Z57iZqvLK45S90+nywjDwPmyTHFJoTDjvO30kB/ueZP2UAvvPpc7QG+LojG3kg66Cqpv37qQmSGrMgNCIJRtZdBCVlvRTeGGkZ9ZITQHR8EYF4MOR2F0rU14b2r9Ua3h3n9YBXmC8IPTz+bdHW9zA7gb6WdfUT8Hg2WYCnzELWbWyQi0xwOjxFw9dCm5L6Xunfnw8AdyIxyvV+hcF+X8SWJkjggprmmpUlm2A5ycLRkWzR2W1g42RHIW7jaAfZPXl6QTy1JQPOsrP9XVDR8AwL8avYnrW1geFtxQrY3IbZkqAo70X8G6rGamHk0JjkeGKr4qG9p0OySvbwJ49IAL77mfN12AXnxVy0ie4rl+kE7/z+cvALioS1Y5dAXf2gBN7yAMeISSgCFw9f6LpwCc3EtQF389bFEJggxmHMM8KI8FMWi6mBz4Ps+lg8j2WTBvhAlOnuOOtbWj9son1vTS4+9kVpt+o2bwCOILwQJ88tejofsrK1/qPrkiUSuCy+sEurE2Xzue2w9t5xWHnrELgHe1GI49BXSnOGXhCPr04CKyeHnwUNXY+xEL+YLf0LDAhwHOYL4zJwQX3tU1Y2C/9Ma86kql7cultySzrEJSZIAP70589IAH7uiQu0H2Q7znuCaxpdly/RCd7l6xrAw8ufZt6d3Rtl4C1dQpdEPIF4ciEssLeG9Q9s0qj/3XfFAIRlRtL3vDA48HNBbesT7Hv1AVZbgYe3aQN8IMpMhEl0HHZrNeG+t74XV6eVqMXNC4DXUHlHtNMszn3xLHZgiw7ukGya6/tqG2hegmtXYdmRkr54bGWiXhAPJfcldHP9zqJ1+cOsHelyWo40bBZuw2ZKRy16lk9apsa/Y+NkC71XLZeSVs0CWwd7OHPmDAX4yX++KgH4nr9erFMffOQQ3weffse7V6f3TfWmZnDx8oZVQ+fDytXnEWAvloF3Tm4rxMQXKwDc0z8EnL1cILogDkbuUL86tmhLG+Dgp9DV5b90WG1KGhhjJ4kIvu9t0gA3F3jLg1DbsvppE+9761pSV7qKNx8Avo7CEMvn0aEfByWHSEFlTC/gosHJmsPr6Q41B3H0D9dZ7GVLA/hEB4AwKPhz9sR4G4lqI/TBc5mVupXU4ETo6/F1UKqYHkNuP2NsYmW9AL776TsK8A/+/YEE4Bc+f6lOAOclVY0D79qtLeDi7wN9/TtgdMNlUFjUpZB9JyRXyJ4M4gpAHJkCts720LmnFwqXlEL12nqV8K4ZbQCcG7GMRqW1vmPse/MIiQ0kikiIeRSbNMBLzRDe0pmnNnvk+8yg761tSX2vqtvOdYDbSaxCEVSeLv+pXFcrgQpO+eq7DoYZPPbRq9bXSSAeWRwNtVt0y+xRn9zBQwSWyelvsSdK3KmNNSC8BbS33jm4UjLYh6I29ra/pXVkStTZnLxF8N6n71OAf/nDlxKAX/LiFbq5WGGf9cA6HtYGhrdvjBg6utfDxJZroLK6XwHeKWk1iiea+Hz6Ps1pz5dAOqkqVSm868aaYIGD3R+WeQUvS3nco7tdOwl/HsEmD/AUM9P1VhWHNcxsW82k761p1eS4utvMdYCH0f43BXjPMez39l2/UgKV1r0degNceuWsaXuLZEI9piJe4vilbeT3F8MCe9s/BZWNT7P9RSxRulN/b8OBPJotpT8g2Y13c6a+4Ahw39gAmHziGAX4f3/9rwTgV7x8jc6mGBsf5nXRDQfvZogsTITq2mWwaet10NI2qgDvjMxGhZNMTHwR2Dg4QmRRLIh83aB6DZN5L7mkHxbv6lIYVrN2cviDdRk7yjqNraGiSPyHOQBcZCDREHPLxk+bUd9br5jrAM9lJ7onBY21TyJYNxzdLOl/125rNBjAqf702a3QQE6sC2xtKMjjasgJdnO9bmpti1Kx3/g9O+F7kHUUczZwJp7IqrMdtehdPikUB3yOx429TnyuzrvkfIkv+P0fPUABfs2r1+vlbIVe6zy4tdM1VwbvjPYiyMyuovDu69+pAO/snGaIjiuSOcngDriLpy8EJAUzPvDLi+j7NK0xEwZvHIFVN6+RwLthYzPYujj+aZkj0Si4jc26z+JXxMwG4IfnELzlV6lEJlRG17fvzQNcBcBbWGGJScuC7Fcc3B2nQHLvBoPCW7qkjnvVOJmOkdiUApXj2gm+4O0xC8YTLevwdJSVgQ03cC/cmt2Rn2T2wpc+LKiqecYyK+V1BPiixc2SSfRHP/0LBfi+12/SC+AorTp091p+2vxyXeG9CIqH6iA8Khk2br4GRtZdDPkFHQpDa3EJJQonGn9xLLgEeED1BHNRWTpSyUyUB/p95ezn8VtKbTrkdRVCeGY0WHm4fyeoqH9WSuq3zah6/TzAjaGwBnM4TqrpN7eaYd+bB7gSgA9RH2wEeGLU+5H5MVI656uNAnAZgRYCcJRgTVmcDiVrKjT+3ZzlBRTgmb05YOPkcEZQ3sCdSEdIeBsY4i4kekhcJ5FY7ex8hJzYzwSJgyUAf+7L5yjAb35zv97+0hOPbIdVd47MW3j3XLVMZ3hXbWwFb38xjI1fAeObroKy8iUK2Xei/NAaiYiYbLBxtqfQlrzPlhRQgAuKSl6wWNz5iGVOzknLlOS3BeWVJ+ja5VTm3UbfJ/yHuQBcNEf63prAc2CWy+gDUbMohTvXAb6TzR4mhWGBnxUOlEgg0n3FUqMCXBri6AiV1pFBwJyvNhuv2dwI+QNFUj7dmZDcnA5Cd7f/WHSsPMb+LY0G7YVP7YfjNPHV3MCflStjdPLLb79QgL/5zZsU4Le9c4feAGd8wufnVPqSa5brDO+6rR3g4usNw2suoKXz+sbVCvBOTa9VOMmgkclCOzvIkhMcSm5KZwDe2HlcaiVsUqrffR5bobHhUWtWAD88D+A93brZvrna955PAL+Y3aeeFPp7/auenAQ5gCw6t83oAKemJW1ZtM/o5CWSQDmXZNilayuhcmMdnTrH7Dx/ZRFk9GTJwBsjvSsLPMN9wDIpjZtK32W06d/OwT7OclQYGvB3PLl//OXHFOCf/PdTCvC73z9oEIBjoDztfII3agfoDO9tHeARGgC9yzZTeHMmJTJDa1mKQ2vY93YQuUFsRYKitW1xLFjZ2f7O7nQ/wEIbPerPZttPgTxizQ7gpfMM3tIldfEMPg+z1veeTwC/nssqhO6i7xbv6ZJ4HqNgia5T4tpGCkqlEoi7id0VAK1JZHTngJW97a8WLb2Psi2BNiMBvIUpow9MWqbHv4UAf+DxBynAT/9yWmdLUV5mdQ21atVNNIj8zrbFEJoVB9W1Sym80aREXqxF2dAahpd/KPgnBim9b9z9F3q4/0fKw9ubXb20Yd3rLHnEmh3Aj89TgCvrR5+ai33v+QTwuziAWznZ/9J75XLJAJsEjj3ZtNectTSXBvaf8wYKoXBVCc2My9dXQ9VEvV4Ax7J5cksa42IW46sTxMPyIkEYHnmKLW9eQCKIapsbFuDFEp306tITeLzj28eZSfQ//5Csku14ardBIb7x4W2w6s65C290sqvfsUg3eG9tg9TmQkhOLaLwXjd2KRQWdSoZWitVONGERKaBi7+7yvevZ5g3CIPFn0uke/kPcwd46TyGt7K+9MBc7HvPJ4AfkQDczvb35TcwO+Cr71qjNUCxlI2Az11RAEVDpVA2WqUV2HG/OrEhhUI8KD1Ehyw8GxY62v0paGg/zq6VdZNYaGCAx1ORDiyp9nYds7Kx/jMlI01hEv2cZ/cYFODMWt92GL1n7rmW4bBkw85mneFdvKoR/IMiYHzT1bBx89VQUblMydBapVKxFhxaKxlRPTzp6OkMlvEJ77FGJJv59TCzB/hxHt6SmJC6qDk9l/re8wngD0gATsCJhh3cBLouWbBSsPZk0awdM/ay0Uqo3tSgVCI1vZu5fXR5HIV4RFGU1o8VVRYHwpCQT9kTLvqbBxjY7MSbmXRnJVY93P6z0NaGZt/48cJXL1KAX/DcJQYHOMbZz5wPlz93FYweGp8T8F552zA07W7TGd41m7rA0cUN1oxeTLPvxkXDGg2toViLraOzwtCafOCApWVu4cvsBWEfD3CzBriYh7ZK2IoMdHFjEn3v+QTwSWmA91yxjIKiZnO9wQCuLLKW5NChNCzB47AatxZGoysTQnMjGKGX2kStqwDUO7yeTg3fz04I2xsQ4LgX3ioZZAsP/gSft8+/+ZwC/N1v36UAv+ylq4wCcIxdz5wLt765Hy566lIYust8pVfxYrHl/HYd2y6tUL+jF2ycHGHp8m0U3j1Ltmg8tObq6QexFeqNdUrXMDvggtpFT5LX+2b2vcQD3HwBvtfIIBxgs9lSNrs9bCaratIZ88Rc6HvPV4CfiSHZb/FwmVHhrRGISTbunxRIM6Ck5lStfjc0NwqEYRH/x2bhuObjZ0CAC9h1MvqcWWYzgi6PPfcYBfgXP3xhEDW26WL7U7vhuldvgLvfPQi7Hz0PVpshwLW1qZXWN0d4u4v9oKqml8J71dAeyMtnh9byuaG1Fpppy59oAsTx4B3pz2bxqh8nuzef+nlbdC4/xqoV5vIAN2uAn4qaWbEUab3uk2YwoS7Ss6Q+YGrwng8A38eV0YWerv85y2YhJDWl0rI3QlR6gC17aR4Ty5jA72WSTBpvg5mvoSGO9+sZ7g0LHWwgtT1Dc/h3ZoOVrc0fFs1LHyF/1z0kNlLHss7BODpBrD/EE9n7PSpoqHoKAb5x5yYK8B9++4EC/MY3btYZzpv+sl3j217w/CVw4L2DcPtbd8K2yV3zQmWtbnsXhOclQlxCLoH3tTC64XIoKpZ1GMvJa4W4xFIlYi05rK1t0vRSvQ2pIHRx+Z4VbNnL2oHyADdPgKcYadJarOUA3XEzgbi2JfV9pgjv+QBwtBK9m2qhVxQ/h+DjHMOmCyxx2zjagYOHE7gEuIFXhC9duwkviIL42iRIaUung2WZvboDHn/X2VcEdq4OGt9HZg9zkraMT35XqsKwn83GB9hJcoS5l04nZMYA5gp64bO055iVrfXvkTFRkkG2o6cm9RJzwYnzkcNjGt9+x1Pn0Gz8yN/ug5tf2w9bHtxh2kIt1/ZrLLlbv6OZALtJqu+9GDIXl4KHdwCs33gFlUqtrFquOLSWUqm0dG4ncgKPEG/I6s6d9vEjCqJB6O//Ffv+2cbLpJo1wCeMOASmi4TrKTOAuKbPm8n1vecTwAdYKchJQVnR81bWC8/Ig9rRwxncgjzAPdgTvAmkMdzI1y7+bjQcvURg7+YI1g62KmG/wMYa3EO9ICw/EhIbk7WDOAGyncgBXAPd1UI8vTsL4uuSCPBdmMd1sP+fZULSu4K6licsugdYCVSJT/Ol7N+OZVFfVi7VWkOAI/jXUtvIJcsmhd4e3+Lj/fC/HyjAn/niWTjw/iH9DE3uZYbUtj2h+e+cd+ICuJ1cOFA519duNUmQL79xpdpdb1wla9zVAp0X9cKOB8+Ga164Dva/eTutMhx47zCsvmIcrO3sYXDoPGZorWlIydBanVJ4O7q4Q8OWFvCJ8oeytVXTAhx3wy2jY//GvmfW8Sg1a4AbQ3lNZIIXFYayJZWvHJw2p773/FRi8/X4GkGU1pwFK28dotaW6FGtfrVpB2x6dDu97fqjm2DsgY0wcnAUBm5ZDT1X9EHz7sVQsqocEmtTwSfan4Kcg/pCe2vwifGD2OoEkPbZVj6clg0L7WzAN84f0rrkyunkd4PSQ2lFwDcqAAbOWQXn37oXtly6FaLTYxkzCjeX7yzj498X1BKYy8ph4t9+CYlhEtkkHDQAuDOrfX3Yoqd/Uhgd9jE+xmsfviaRVMVsWF9DE1zlw+dx4tFtWv3uRS9cBne9d4CC/BY2I++/aRUdGpvVdbFbVK+LLdrdBi3ndcDZx86F29++U7JPLx1XP3s9nGVjAy3tIxTeHV0bFeCdmdWkeJKJKwDvgDBIqk2jzw+uhmlSAcCLVsv0nNfY98ow+9rbsa+/NY9WswK4MXrQhpqMP27ig23qSuoDpgzv+QDwe1iQ0T3w2LIECUDW3LMeRg6NkaxpEHquXAadl/VST+/WvZ3UJ5yLtgs66fc7Lu2hvc3eq/tomRSzrQFyIYAn72EC9XVHxmHdfeOwcv8wdF2yBEqHKiEwUSwBOpbiIwqjVcI8pYXRpQ7JCqdZOfbqsQKAa1wj562Bt//xNvzy+y8g/fHnmT/hqx/+AY+8/igs27IC7F0cWZjHvi+oodPFkyzED7KTxhey60L5VGlLEd4L2J9tJXEf9QnPzTqJx3XZDZfTx/zs+88ocHDlSy8ZVXJBhM/diptXwdj9m7QbciOBk/AHPzhMj+Wmk7fA0L610Lqng742Mw3zQVwXO6dVqb1sG3k/XfD4xVTBjoP1He/eBde+ug8uffFK2ufHQb28ziKwd3aFkbGLYOnyHUrsQZUMrRF4h0ang1e4D0w8sg3G7pugJXRNAG4rsgdBeR1nknMnW7W5gh1ou4L1ESjkEWsWAAcTBbh0Nm5qE+t7p6kaHDZ1eM+7NbL01myadbdd0GV0+dT67YvoDnDVeC0k1qdQa1A0NcHjcAl0h8TGFIWSeXh+lExpvm24HU6dPgVn8L8zZ+C/v/4X/vXT1/DVj1/R+MeP/4B///Jv+Om3n+ht8OcvffIKbL5iGzh5uFATFMvkpHcsmjseo7vdzHNxkD1Jb2Az7Xg6yc5k6KvYk/fd9MKne8WkoK7sGTyWwrIiCnB8DITQ3ucu1m/a/ImzYegAsya24pZVJCNfq9O0OoIcS/p4TPtfux1G92+AJgLOjkt6aFY8EwDHCweFrPucxTB6+zgcYi8y7v3bfXD9azfCbjkRnImHt8H4JONRv+KmYYivSAMP3yAIi0qHpNRyyM5rhtyCVohLLqXAphFPIqEAopMYN7HW3R3095ddvQLEGWHTvjerNtbR37No63tYzsRkUup9MslWsMINrvjHf5gDwMUGho0pZuMDKobxTLrvPZ8AflQa4NHFsRQUM6F/Lh/Vm+rp5Hs6ycDDCyPB2skOnHxEkNycSofhEOAIdTxOWyd7uP+lB+D0/07DB//+AJ76/Gl44OMHlZZeucCfP/n3p+D1r9+Av3//OXz7y7fw0qmXYc3udbDQ3u6M0MfnX5aZ2a9ZtC95WKpfPskOv42yUGdO4D39k4JFLceFkWGnrGyt6eAfVgJ+//N3eqHw4MdHDbILvvGhrVOiJ/uHaTUEFdm0BjmJS168XFJaP/DuIdh5ZDe07+mm61xYLTEWvLFyI/Nab2uEhl0tsP3+XZLXBof+VKnXrb1ng9z3dsP4sW3QcnYXZC3Oh4CEEHD2cgeRuze4evqDh58YPP1DwCswFGwcHaF0uBLEaWH0wrRpWyvE1yQpEYVpgpotTVA6UgPZvUUQXZoIVnZ2vwoKK58X5Je/YJlV9IplVuErlmnZb1imZb1hmZz+lsXi5Q+x748h3kp0XgJ8wkjQMaXeuMn3uOc7wA9JAO5g9z+cJNd9xUf/kBZ0wewbh9KwV46rZNgvtyFQ9w3xhec/fUGieqZr3P/RA/A0Af9H//kI/vnjv+Avrz4GqYXpuIL2uzBE/JmgvPZZBuQszPHr7gGScTc8KQwN+gx3hLlKgH9YIP384RcfMoNsnz8L1712g0F2vkcOjSqYfmB7Q9f7w5L0LW/dBkc+uo/26q985moY2rcGms9tp60SvFAwmLvYtSvkhtSaaeXl0qeukLwO6nbmh+8e1Wxm4PhO2mpYck0/dF++lInLltJ2Dj5u7pICiMiLBr/YQPCNCYDIolgQZ4aDf0IQeIT4gKOXCywgF2BWCxdqHMKAwC/ZC2AsrydRy1n+Yz4B/LQRs9AUE9odN5tse766kdEsXOjldnqBnQ006GQqYSiA5yv0vlPbMiQlc3FsGBz78GG4/+MHZGDMlWExjmAQMEmyu7fvgPNPXEgy0Cvg4AeHpG53nwzMn//qBVp2f+vzt6F0URkz/Obu9p1lVu6rKOYhqKp8Vhjo+xW3Qte7Zik8/+GL8ONvP8Knpz+lt7/hwE0U4G998zbcSiBpMCMTJeYfmDUjuHS9393P7KF95sMf3sPYoL5zEM6dPB+WXd5PsvJuAl/9euV4jHXbp95LWLbvvLAX9r9xG/P8k9cIqwIqL1wOjmrRbtgFq+9cq/Q4sFRfNV6ndDvCwcEWQn1cID3CC4oT/KEmNQiaMsXQkhMCi/NCobMgDDryw+jXrbkhsChLDLXpgZAV6UUhLsgtfZH99zNItxP4j/kEcGNm4dzg2F4THWrjAW4iAN/E9nwnhRGMLGhGRw714K7eXD+j8K4Yr1Up6EJPtq5OcMvJ/RL43vr27bRMjdKi2Dfl+rzKArPOq09ep/B9HJbCQan95L6472E5HvvY+x66cepkb2/7K34WubnCzfffAqd/Pk1B/dufv8E/fvwnAfY7tKyfX1pIv//5D1+Q4zGcLzgOEyqTIsUMFzN0fVXdLn7hMiYrZy987njzLjj32B5YfuUAHVDEwbcVWvTLMYtv3MUMrWFmj/DGkjk3qIaf1c0IjN0/ofHxb318l9LnhwucsygcKJUBd4C7M3Rmh8HqyjgYqY3XOoZr4sDG1hqEXr7fsBWsy2kWzn/MN4AD2xM2JoRaTWTArZUHuOkBHHW9b6V74NUVzzJ2nn4yZWxUYkPltdzlBZDbX0itRPMHiqiWecFgscGC63PLB9f3vujRS2i2iCVXhLYqGCGQEZ4ICrw9lrKxB7zr6fPg5jf302EpvABAeO/560WS38WvuYuAZ784QSHuFebL7MKLnOG2o7fD//74H4lf4ePvPqb73pi5c+Av66mgt8WBOQx8jO0GshVVloVP7VYPUsDilLXeOuvkObri5avJczO1ynXwvcNw5YmrYdOhrdB7eR90XroEll63AvpvXCXZMpC5sLhjhGbwrXva6ZT56G0b4I6375Lc393vHYBznt2rWonu0e3Tri9K4E1uN3J4vcrnpvvyZVC/owXsXBxlAF5A3uMjNcrhvLo6DpaXRUFvcQR0F4ZDF8nCuwrCoacoApaWREJ/eTS9TWSAK2bhZywaex5jtzkaeNyaLMBPm3mfWGwCJfVT5lhKn+sAj2KHtOhgFmfOEZgaTOVUZ1sTHUPk7wotG9poBm1on22FsjLJ5O/5273wyCePwksfv0JP9uvPGYcffv0B/vXTv2jf/QG58j0X2+7aQW//yvuv0Cz8of97CM5VAyptA1fx1BmD9FzVR6fVcQXQYM5nBOZY6bhXqiWBoir7XrmRrn6NH9wEA9etpqXx5nMX02wXy+Z9Vw3AuQ/vgTvfuUvmObrhjZupcpy6x514RPMhvbEHJlRalLac1wn129vANdBToX+dG+srA+3ByhhozQmBimQ/KIzz1iiCvJzofVlmFLzKZuEDvNSqyQL8+BzoE4vYUrYpWJDyADcRgFuwLkv7GYetZcc4iKORiF98IESVxEBUaSyE5UdBSE44hGSHU8lUXPvCwK+ZCAFxRiiIM8Oo4lpEUTREFsdATGU8xFUnQEJDMiQtSoXk1jRIXZxO970xw1enrpa6OANsne1h/QObjApu6dj3+o1w73tHIDIlGl7/vzfgk/9+Asc/O0775/vfvk2mj46lYMzqsd9962v7KcB37N1JAf78V89TURVDHdf4sS3T951vXkWHEIfuXmvQ5wShi2X2G16/Ce5mqxvycYSdRbj3b0cUfobPz/l/vXD6v5FdF9PMH32Hyt57w84WKFpVTYVflA2gZUZ5S5XD46E43kdjcHMR4e/CDLOFRZ+SqLXxAi/zSUp1toa9Bma5pC7mAW5aAHcgsYxx72ImrS1z0l/TVBPdUIE74B5h3hCYLKYXCb7xAVR9rWBZiUFhhGVXLNOqMg258MQlMLx3LTz39+cokK54+RrJbjJ+LQ8nLAkzQ2Hng3uwFwSEBFGAf3j6Q7j65LWGO3Yc1Lp7rWbT39etoL1rfabVp8vOL3z+UrjqlWtpVo0zBHe+ezddU8PP+P94IYQzCpoK2qBwjS5ys4pqby2Q2pKldoI8PdJLAnAsiWsLb4wEsRsDcG+/r1mAo7iPB49ckwR46xyb2E6ZRT31fTzATQvgGCEkNkt2n5f1TlqJnH6iO9ckA27Y1gzDB0Zh9P5xOmC0gWRKKJ+K0qko+dm3byVdQWq/qJuqszXsaIaazY00KsdqoXy0GgoGSmhkdudQaVSquNbBTJknN6dBYlMqiLPD6IS3tGHK2sOGhRBCjTvhK5Mp3XzfdrjyxWuUggd7xJhNcvBGqdIdj54j6T/n9hTS4/76+6/h25+/Jdn5rQY9dlUlY+XSpUO0X42vibFAbqjYeGyLdlKzj+1U/JtvH6ET5yVD1dOugCWHeUoAjn1uXQCeFu7B3J+zyw/sv5tbSLTzO+EmCXCLGV67mondadEs9sXFPMBNC+D+EoB3909aZiS9iSBy8hLBmkNjMqpY2G/FMi0OKOkybV6+vlp1ybw9g5buOYCHZoYbHBZrpIae1A1+oTkIZpRYJsfPF5GMU3pYbvuTu2UAgpl9/w2r6HFPPjNJZVwP6mlqomzfGYfEtN3FxqEyFGzBPro2BikzEZv/skPr38ELSWUWpfXbW2GBvWzZvCzRH1LDZPvgaRFTGXhztlgngGdFsvdpY8tZ106ycryo1pdK4iwevyYF8MNRc1MAZTb64nt5gJsOwM8iUcNpewvqKp62srH+8yzbhTSr4aDXcUmv/mprm+shuy9PcVWsOxuiy+NkzE4wSlZWGBwYCFqc6sYyurrb4f64fLlcevUJ7werDwgP/MyB0S3IE5o6m2kZ/enPnzHYJLqyCxCNs/Fbh0gm3kMlTZvPW0wvwrYc32HSWbm614973qX/vrrtLRCeFyeBtLvInk6PI6SrUwNVArwhI0gngOdGe03dp6Pzz4Ki6uek1PuuJZFHwpFHsMkAvDVq5lXMZsrsY2IW/jYe4CYC8ABJ9t2zfFIY4PsPhGf1+jpaJsdeqr7gRm1pXBWTH1jD/0+oTwZbEdP/TmlNp//PldGXXLl81kDBWXNKx41v3KwAEwSh9NpTYV8pPf6ff/sZ3v72HTj/rxcY9Lg0GWZT6cV9zXJYdG4bNRBBOdNl1w/QdshsPce6XETg8cr/Xe0XL4XaLR0SoMaJ3WFlZQwF9PKyaEgOcZftgUsBvDYtUDeAxzAAz472BhdnO7pSZhkR95FF+4pjrLgLDoZ2Uvcy/sMUAG4xS33jmZrcHuD3wucnwLOpQUfXwKSgpek4ghP9vtFIAweC9BJnWV9Nd8cVyuVdmZDckk5L9DZOtoxHeNfUz9FlDI/D0P1v7Ww5L1UAOCqXTSu6cnCUAvz5d1+gZiqG0ERXyEDv1MPWk2SrLee3U2tPzMhR2hTNa7A0j5PdM/X8bnp0h14GL1OiMWugeqIV3IK8KVAjA9xgqIYRaFlSHAnpoe6QEOgiA3CELgfwqhR/vQCOam2rqmJJRs48vtDV/TtBVctTUi5m6HDXyBuemATAJ2Zx8GumhttO88Ns8wvgndTbunvFpGVW8hsIzvK1VSq9m6eLmi0NULq2koq/KO11d2TSCwQrArnIghioGKuFoqFSmdt4hnvTXrihdpr10Q3HiWrsgWuyw8wF9u5XbxiGX//4lTpsGfq40OBDX51yHDqs29ZEo/k8RnQFd7i7yffx/jUVU5mpvjcjaLNV6m/AifxRqBxbRC4EXWGhjTVUpwVLwNyeFwqpYjdIDnaFxCBXGYAXxE3tgZcn+ekF8K7CcMl9dRaEgweKxtjY/GGZmPGWVEn9ZvbfGT+lPrsAF83iCtbJGRr+mimIn+IBbhoAXzcl5BL4KQK8ZqJBBzexBgpilD5VKonalQ2+sQGMlGViMJStqaLw4H4/c0mO5Lauge7g7O2ictXL1KN5ZxvYOtpTqdUHPjpq8PvXp4wuvzeO4ivS/tzYI8evscTee81yWHN4DLYa8EJKn4uyKTGbtbDi5hGILU+hEPUL8oL+smgJSOvSAim4uUgKlgV4cYKf5LbFCT4698Cx0tItBXAMzMbzYnyYbNzH/1+sUtskq9a2mhVPsuPRPCsAn223r9MzIL06kxAX8QCffYCPSwAeGvA5ArZyvFZjcONtUVZVlSALDqihuAvVEvd1hZJV5dC4S7E0n9M3ZWRi7+oIrgHusP7oJrMEOGaYDu5O8NYnb8PJf75m+N7x4zsN5hiGA2044CZr+dkETee0Ug1zzkUMM3MUiJlu+M84sVuq970WGra2grOPO1g72EN2epiMDGpJvK8MvJUBvCI5gBFxIaELvDEyIz3B2dGWZvAouyovyYpg9yLvYyt7h18ts0telsrG0Za2nK6b8Q5mswHw2eqFz3RfPGUG/o5SHuCzD/A1EoBHsoYmBLroz60O3GWjlTLQVQbuyOJoOMtmISyws4a8JUXQcm67yiE3LnNP785iYe9Gda7NEeB0J7y7AHZctAs++/4zOPfEXoPfvzppVd2sP/tl3MO4qGNhLr02iLv+aGu69t4NBm5z7JYL5nsbH9rCqqytghj06iYQ9gz0hp7SKAkwl5GvsyM8FeDNhTTAa0iGzmXLugI8NcwdfNwdJf9fkxpARWHks/EUdoVNKA7/1KK172Hyb+0BEneTGCPhyyN6VgBeagLmIMdnIIMdiJrn0qrzAeDd1Bcce+BpcW8jPFPa0ghIM6FgVQmUj1VTwGKUjVXR72X2ZqsENwIYpVOtHWwpiOMqEqFtT6fKnno5uU/8HW64LTgjlP7eQnsbetI213WnkQNj4ObpAd//+gM1WDH0/a+7b9ygAOcAOd1+P1ZPpMvuCHjcMV+2b4AO8CkTx+GG77SD9246VIcXCXhsDVtawMnLBRba2UJmcgiVQOVA2ZIdIul3Kwv5DLwpS0x/b0VFtM4ATwxxg1AfZ4XvN2YGwyABtzTIW3NDwcXZHkVffhSU1p9gM/HDJFJ4RKuFt4gFnTEyPVOw6pyJkvpeHuBzG+BFdG+1e2BSUFPxDMIzvCBSa9MRLKEnNaWAnasDBbBvtD+07+2mE86qYFA8XCbz+1ypHdXf8DPqWo/et9Fss/Coglj44MsP4cC7h0y2D67MChSn1DVpn9DsnABfviWCGXvnZUvo64dWn3ismgjIoFANiuuMPThBbVKp29oNmHUn0PeDF8m6uwsjZErmZQl+KsGtCuBtuSH099FdTFeAxwS5QmyQi9KfobY6PgY3Dc9l41RQxtr6jCC/4gUW4nW84ItagO8zIixEJlBKnykQnuIBPncBHkRiO4q4WPQum7RycfoBs2d1JiPyK2Eoh+rs68JYb3o4w6KdbbDkmn6ZITX5SXW0JZWGd2BKMNU+T2tnyu94Xx0X9cCqO9dQ6UxzBHjXxUvgnKvOgxe+fNEofXZjAJwLzKq13kLY1khXDxHq8hWXms0NULmhDqrHG6BheyssvqAbll03AIO3oxDOWlh95zp2snwq6iYWkfeTiGbdWQlBMlk3Wn6qK5mrAjgOnuHqlz4yqhihviJIDnVXf7tYb2jLCZXJxt1c7MEyPf81FuAdJGx4VCuF98AMlJ1TTATg3N8mNrNSOg9wEwC4FYk+Kj5BIG6Zkfgmk4VHTZ91d2aBR5gXhS32uUtXVcLgbSPQfK7qDK5qol5mxQzL5/4JgWArsmc00lmg03W24SoKE1PX8lYXIUlh8NHpjw2uyIbmJsYEOIX4Rd16i/jUbm6C4LQwSKrNhqzOIihYUQHl6xrIRRyW6tskUbO5BarGF0Hl+kYoHamGwOQQppIT4Am9xZFT7mG0JB0CRahHHuKmNcBtyUUienvjfS3OC9UZ4AGeTpAZ4aFebpX8HB8/L8pL8pj+5Pcss4pfYQHexA+yKYW3uilqQ5edB0wI4qeNKJByigf43NVCz5dYivYsOSb0cP0OT55JzWkqyuXZ4BPrL5E8Ta5Lg+ED66D36j71Ouhj1TI+45hp+0T7UXhn9uTIZOR4v1GFsRKYzKZimD7RtK0Vnn3vBOz568UGv++hu9YZHeLqLsami/rtzSDycwMv/3CIiif/4OOkgvx/bGoxJGSXQkJeCSQUkCgsBnFSPFjb24E1yboLEwJgRCrrxiGxSinhlYwwd60BjpPjWDrH+1ukow46hqerA+RFe6m9TUa47PHhhLy3myMIcsteZAFey3uIK+17n5xheOwzIYgDq9suMoNeOA9wEwG4E4nl9KSCeugNtU9a2dn+juXGwNRgSFqUAilt6RBTEQ+uQR4ScIfnRMHqO9dSbWplq2HSUSTV76bwJiD3CPUCd7EXlAyXQ87yAsnPklvSJINsA/uHGZjcOTJLK0x6rnw9thM27N0Id71z0OQn0ZUFyq3qBvAmyO4uBgeRGwPsaU4G4VHZYO/EgDbIWwQrKmKkPLvjaE+5SEWGO10kSAm5uLvYS6bF69MDdQa4E7kQKIidxrEsVLFC4EDe04LCqudZgFfzyFYA+N5ZmuQ+bmIQN3Q2boz99wEe4KYBcIxQEpfRUnr3iklBWdHzVjYL/1Dm3R2YJIbl+wYpUKfTSsfeZ+6KAgV4uwS4Q0hmOLUepUIuvVMZuE+MHwjdRN9bOdn/XL+5WQITvFCYSblPQ0XFcA08+I7hBV1wQMzoAL9uhW7Z97Y2OMvaBkIjMtSeBCJj8kHk5kveV9bg4GALDZkhMj1jXA+rSFaulpYdqVkPPE5KShVXvwYrY/WSUcWwJyBODXGDnChP1atmSibj8fcEZY3PsAAv45EtA+/WWZzknk17zpnIxo0BcH4P3IQAvoBEGuukdJROpVeVniAQ/YUDt42zPbTt6aLKXDhZPF15tWJDjQyYGXhng6O3M6Q2ZVCbS04MZqqsnkMfyzIz43XLtKS3AhOD6SAbBxQUEzE3iG98aCtcPXmtEQBu/Ay8Xas+eBM7nb4IfKKDwMc/Uu0JwN0rmEDeGhaQyIryUZjabsoMVgtRhKcmAI8OEEkAHuTtRDN6fIzSRF+d4J0dxYi4cPePmbaycrqyY7GxtQZBVeuTLMDzeWxL4C3WUz1sYg5D/LQB/j5j2KnyUqomA3D8YAbaWkncxpTTCcQba57kAF45WsOA4/DYtCXz4pFyGYMSrueN/W4cTkP/Zu62qOTG3SYwRQxWjo6/WCxe8ZBFd+9DViKnnzou7JGBCmbim/6yzawgPnr1BoP3wYcPGLcHvnI/2nQ2qQB1k9zXU1G0sgIcRO4q/+Ej2BfY2FKgin1dZARQcEitoyAMSjSQOM2N1gzg4X5TAI8OcqWPgxcLumbfSSTz9nSxV3ic9DB3yI9hQI6flR0LtqUEde2PswDP5dEtAfjJKNMQRzGl9TJleuq6ZL1iIx0LD3CTAjgDceyHl5C4mK6W9XQ/ROB9BgFeO9E4bckcNdGVOZDhxLqNsx20nttBZTmlp9I50HPrY5aJKe/QExyW8otyXgpKEtNeuwzESVaOCl1mA/Aj47D1iGErB6vuNG723XFpjxp4Kw+UXV1obwdhUZkK/+j9g+Jgoa09BakbuZBrzQ2TK5dHQmWy5mXtXA0z8AAvRwnAUQIVH2ugIkZngEf4iyDAw1Hl42WGuyutDnCmKqwiGwI8g0e3haEHrAxRUk8xYYiDluI2xqoq7OUBbooAZyDuQk1OEOBLlk1auTp/T1XVqpLUupBh1o0Qlod3cnMa2Ls4Qv8Ng9Bzleyket6KKdh7R/uBlZ3drxZty9gT3ErGozzI78u6iSalkBm9f9yozlkGhfiBcYN6aRsT3ituGaKl8OmALRPbmkCcEQE+AVEy/9iDQ5PBxt6Jwsve3hYqU4NkwI2KaHU6DJRpCnAcXOMAXprop7eIix+Bd7iPs0aPLdOLD3BBp7I/WXgf5ZXYdO57z0RJ3VTL6fIgH1BTdRAb8W9I4QFuugC3JtHFZcHCMMalzD3Ek/arcTANgV01UUc10amZSXeWUnW26Io4cA/2hDWHxmQyb6qnvq5KctvUxRlM9h2X9D553PtJ3MrGpEV726MOvu6/rLhptVLY4DS2OTiX6WqjOZNKbFy07u3UDt4kytfUgZOrp2TqPDQiHewcmQEyG1sbyI/zg6HqqT43So42ZQXrDFJNeuApJOzsbSQAr88IYq0/w3R+XBdnO0gIctEa4FFYyndw/IWFN0qpxvN9b6O6Zulr4WkOEJeG+V72wmXCyFP1ZmElOn8BzkC8iDVemBQU57yEcMX+naYKbZiJByQFQ0h6OGw4ugk6LumVK7XXT+2Ed2WAyI+c6O1J9t3S9wh5zOtJrCWxmT3ZTQqqy58NzY78U13ZmGbjj+8yW9EXbQLFbXQHtLTimeL3ll43oDW8G9BC1dkBwqKyICwyExyc3SkwrQm4M6J8YFW17IBaS46YSo7qClFN18hwUhzft3gsC8hnFG+h+uk5uu+ASw+waRNhJGsXurj9l31Po0d4NN/3Nvl1LHOC+FxyU+MBrifAE1iQHrVY0n3MytnxZyquUho7PcA7MsHRyxnSW7PoBLYyPXTpve+E+mQ2+058ny0volPTKhLXkDjCqMQNTFoW5Lyc0Zp9BofYVMEJZTlR9MVcyuo6ZfKP7dAR1GunjZW3jVA5VO0AvgiiihLAxcMPnF29mYzbzgayY3xlwV1tGHCrEkpRmoETgHPZN65w9RQx/t11Ou6AZ0Z6gLervU4AD/Z0AqGX7zfshfGVJML5vveMhb492308uCUXRCIe4KYPcC+J1SjCMyP5TU4yVaX3N8mogzNDwYpkOvWbFtHMe9G5bQrwLlxVIlNmx8l0Kwd7zL6Pkce7kcR1bPkc4f2gxEu5t2/SsjD75fy+4jPyQ23yMXRgHS0zmz/Ipa01meAcutRl0brGYuoNrl32jVPnnM64K3ktixL8ZUvllbHQnG04cOP0uTKRFGURLyXigseGGup4TOjjrauJiYuTnU4A93N3AKF/8Jdsi+gCEmK+7z3jU9z6lNQneICbT/Y93wGOe+FJkj5079JjQh+PbxDiqMYmPayGX4flR1Lvb3tXJzqshiVeZRaiJWvLZaAfkhPOZN/JaW+zsMYT270W3f2TgoqKE5bZma9ZxsV8IAwJ/kzo7fmNlbPjT+QC4UxeTyGoy8Sn9sbXwXpyIWH6pXVFH2xlMX5sq0FArSy0K50vguqJJvCNCQRbO1soINn2kpIoheE0tNcsMgC0uaE1TcHNRYiPswTgvh6OtHyPq2q6HlOglxOchYIwrg6QqGUfHFfPhKGRn5D3930ktpEI4PveZqdwNjDLx89n3zzANQA4A/GFJHpIHKASqy3Nj1k5O/xEXce8RBBVFgtekb4ShTZxWhisu3cc+m5YqXRSvWy0Sgbeqe0ZFPpWItGPFu0DCO+DrJDMYYuujoeVqcBJR2J1suZ93zvXUA/tmZVj3W3Q2PjwNiPBex0M7B+Bhh2tFMyqo5lG9UQzBKVFgLuzA1QnBsHqijgZcC8piYTatECDQJsOq0V60l62thlvIqt8xgE83F+k9wqZq7Md7aUzg3nWICZA1/R4MHO3jE99l16gMi0iL77vPWuhT0nd1NfM+OybB7gE4g4kdtG+HUK8sf4Jbq1MOrK7C2jZWpWXNMJbvvSOOug0+84teIUVj9nDDa1ZdLY9Oh3AOd9xlPvUZogLBVDWPzhhQEW33XKfDQ/v9Uc3GxTY8tG6p0sNtFugblsblK9rBK9wf4j0c4O2rFAYro6X8ebuyA/TuTQtH6gzjkNqKWLtwJ0idoUEdnUsO8pbxgc8I8JTcoGh0zGRWGhjDWWJ/pAb7UUzarxfJwdbiPYTTXtseDFhmVWE7/V7SCwmIeL73rMujCLWY7jt+DyC9ylzgzcPcAbgAhK+JM7mzE4sOnofFoYGfiYN0trNqsVdStdWKqiyxdYk0N8Tent9Q/e9OwcvJ9HO9r0nuQzc1tYGvFwdZU7EU8E8NvqXV6yp0UnYBFfQxh6YkMrMd89Kdq0qNj26A0YOrTcYqJVF9xXLVcC7Beq3d0B6WyF4eoigJM4f+kujZRzC+kqjmDK5gfrbeTFeGg2nKZs2jwtyoWXyqpRAWFkZQxXepN8vZUnMDnhHvm42oqlhzGQ93jfKsXYVhkN+DJOVY1kdgZ4QqLqsjvAXVCx6mq00VZCwm2cAnzDRsnAr3xc3f91zHuDqPjoHI6i4C5M9HLXo6XrIysXpBwpR6wVUkAWFXHC3u3ysilqHlqypgNz+AqUDb9aOtmBlY/2noKblSXaop4+9ULiR6bkvmyQ//wMBPlQVB0uLI0kG5EcVvFTB3DcmCDouXMaCaa0WU9pTE+xr7x2HDZNb5PbKd89oYL8ej2Hk4JhBQa0slt+4imTXzZJMu3ZrKzSe3Q3Fg/XgS7LtlFAv6MgNUxhKa88LNVi2ze10p4fqBu6YABcQ+4jIhYSYVgIkpXzynpF+j+DOOX5f191zLMH7ezjJtAsweosjyM99QORkRyEdSC4ikuQd0QJZEZf2gWPsDngsCct52P82VUDpU1IvneN98b3mCG8e4IoQ92X3s+lal6Cm8lkrm4V/IjxjqxM02g/H8IzwYUrnMfEfshPmF9GJXEaL/QLOEc3KSfQTnniXkBOk9AlzaUkUlCYFgL+ns2THVzoichOg65IBAijMXEeVTGtrsnZF4s61NPsdvW+CgTrJhrc+bnigb33ibJgg973+wU0wcni9UUCtGKOwcv86aNzVQQC+mHzugZJVDRAcEwyp4V7Qkh1K176kV8C6CsKhJjXAYNBGvfBMWibXfqIbh9nCfEUQE+QGi3NDJQYlXGCWXJHkL3lPWNtaU/EWfVzIvNwcIDnUg963PMQ557TieF/aG7e3s5FRa8OvhW6e/2FbRDjn4cbvfpuk1rg+JfXDcxDeJ80V3jzAlUMcQXsDA9n+Scvc9FdRKx1BipPo8qVy+YgsiWZK564u31ss7n+ILZk3sfftyIq33ItldaGnz7ecfjVmey3ZYqqXPSx10qRqXtkhkBzmBSJn2excnBYFTdu7YfD2cRbmYyzQ1+nVQ1599zoYJtkxZusIdwQvToePP7QNNj68HSYe2U4z+E1/2SEJ/B7+DG+Htx+9fyOsuWcDDB0YhUGDw3kd+3dKxxgb62H4wEYYuHkM6jZ3QFZnCYSGoCuXH3QXRRAQxssIrnQXhtOd6aJ479nPtsVukEp+L8DTEdIivKC3KEIBojigVpMaSDNzaR9wzI7xvYO30XWdzY5AGR8fJ9gbM4NghZQJi3RgWyEz0puqz+HgGu5/W2P5PKf0JbaCtZaqHc5PgA+YwaS1viX103No6lzMA3xuAdyanUy/k5NapRBnM3EHDydIbExWuiseX8cIttDSeXnj02z2fR6JSKmBuSE69U5+JgwK+wxPvsnkpCl9Ii1O8KGSmJhRyWdD2PeszxBDUqgnuLs40JO3o6cbZLWXQfuFK2HFLQjyDSzM1ukNc2P2pjUDtCpgT4F7+OBGWHbtENRubIWk2mwIjwyA7EgfaMsJlXhjSwOwPT8Uqg2YadPedrQXNfnQLdt2p/vcuMJVnhygNAPG/e5KknFLD71haV2yQoY+4OSCBH9XJ9GYCA96P3kxsraheHHTVxalFOQI+NwYX+pzbhmb/B77fr+FRCPd8JifABfNg7KxeI4MuJWaM7x5gKuGuIiF+GGJa1h11TNCN5FkOt1W5AARRdGQ0pYOae1oExosGTqzzMh6nT2ZXUf1oHHnnLlfOxIdnJ0pOem9jyfNWHLyVndyxex8UVYw9JCMDE/SI3IZektuGOTF+kG4vxu4EKh7hvpDTGka5HSXQdVYM7Sc2wNLrh6AwdvMAdyqYb36rjFaFu+6tB9qJ1ogo7UAwpPDISbIkw6gdeSEw2BFrMwQGvaMsYe7KDvYoD1trkSOk+S6rIAh6BHcoT7OEB3oCq25oTJ+4Vzga14S56tcutR3agc8KsBVrwn0SHIx4ORoq/LneMGD960M5FjJsPX1+4Z9z19GIoq2i+avCtthMyofi+dpNj5g7vDmAa4e4h5sJnGlZDq9e+kxy4zUN4Uuou9VrX1Zxidwcql3sLallnLZfRFbop+0zCl5GU++YX4irU62CCIcVMIpYRQTkT+hItTRyrIo3h8SxJ4Q4CkCR0c7quXtExUEUYWJkN6SB0UrqqFmvAUWnd0FHRf3EcgPwsCta+RK8evkMnllX+sLaab8PUhi+Y1roPeqVbB4Tx/Ub+kgx1gDKQ25EJIWCUFBXpBIYF0WHwCLM8NgRQnJVKvI3yyz7hVLnbhac0J07gWrX//yItm99oIrEk9tAu0EkkUHeDpBTowP7SvLv34IcuzHo/WoujUzLLVzAM+L9aG/267jBDr2v1HLfNq/P8ab7cnLHrObi8MZKYBHzHOAD5hZGblVz2z8LR7ePMBNC+AMcC1J5JM4h8R+ieRpz/JJQW3tU5bpyW8Kw0M+EQb6fikM9PtSKvO+g3U7E8rdnxXVh2YvCgS17U/gyTfAy0kvqJQk+EBtWgCFFmabqoaQsJzckR9OwBYMudF+FO4hPi7g6eJI+58LbGzA2sEOHDxcwCvCH4JIdhuRHwfxlamQ1pwHOT2lULC8EkoGa6B8uA6qRpvIBUAzAW2rXLRIfd0GtRtbyG0boXiwGgr6KiCnu4TcXy4kVmdAZEE8+MWKwdXPHVyd7UHsJYJkclyFMX5QR46zIy+crnYNI6jloDHMlnG7CsKgKTMYKpL9DA7sKWh76NTX5ibJMdsO8XGiQ2nN2SEy0+TSg2mopY6vJ/fYaWqye08pG9G6dMaFDHvXuvyNOJiWItfKUbpqxl5QZIV70JkNnN7HWODq9j373r+ERJDCe58vo8/Vkjq3+/4qiU94ePMANx2AT4HXiUQriStI3MUO6tw3JcoiCTRxuJuW31XvnDuzU+nUD9zK1vYPT1cHg0MHB5mw7Imld+ylY1ZK93uVgF26FLqUZIQdJPtryg6FqtRgKCRZfGakDySGeEFskAeE+blS6GNWj4E77Bjebo7g5+YEAR7OEEwgHOHrBrEB7pBEYJwe5gV5Ub5QHOsHlUmB0JAuhlZy/5hlLiuJkuwdj6g5Nqwq4N+AGSZCCrNTQw6eKZTHWWjrmmljiRyBHx3gQi/QShL9YXmZYrVkmK6DRag0H1F30eCIq4rUhcyavGbMBLouFzFp4cr738rEZ+SPIYMOvfmCMIRKqOK/gR0W/IeFmU5sa1tSb1WSzV9mwmX1OQVvHuCaA1zAyq66ksggsYLNym+Tg/e1bNncepr72sMBXOju+R9HB1ujgUg+itgSPAIDDTgQ7ggQHJLSBKSSqFER1Wwo+9k0Fw84YIaQxmPCTBQH+RDUhjIJ0URkBXvaukKblsjDmBK5v4cjXVdrzw9T2tvG5xorJqWJvmqPCe9P1QUCJ3mKvWu6vUAeRxcN9HA/ETjY22r0/Cg7Fn93R7DMKHiV/Xewhse32ZXRdSmpq9N832Vi/fFTrDysBQ/w+QhwRRMUdxKB7LBOIokUdlgtjIStBvcxwoi7EICHhH+KK2r5sd4zBnFNSvKYydWkBUADyXax345AbcsNoQInCFhcv8Jy/RI1gdaW2KdHCVL0qUZg4UUDKpvhBURlij8FWNEs/Z2YUaKBCE6Pp4r1gHYoVhrcaKYdL/aARdkh9IJEIdsmgMWhNHxeNZ4OVwHwVCkbUW83B1qhwA0FXZ4HDxd7aoqiyXqcsmNxc7YDQUPXcbb61Mbj22zL6NqU1Kfbd8cp9WAW5LOpq37Y3AxKeIAbE+CGuQio43rqlmm5r+FJOJGckE0F4HM5uCxb1362PLSDvBwhwt+VXJAE0wqCqr1pvAiS7m3rC/BksZvUBLoLfRy8WNLlOcEdbk363/i8KTsWG2fnX9js+1JaoeI/zLmMrklJfa8W2XyplMvZyRnOukvnKrh5gM8uwOMkZfSmnr+gBKXY25lmgZnhHnSnmIet4YBNB9DCdNvRlulpc+VxAu3IAFeSSQfRrFfVjjRWHMqmKZHrCnBpH/CCOGYCHasb2t5/Cqt/rsl7TtmxxJGLB6F/8BcswMfnowPZHCyjqyup6+J1PiHndLbXiFn5qbnY6+YBbloAdyOxkeufW6bkvHGWjfUZ6ZWhFApzd8iN9qSlXh7Gmguq0AxbT2Bzymg4PR4T6AI+7g4QS/6/IVN1po19bRyyqzTg+poqgEf6iaQ00MX08XURpwkmF444ga4JwJVNxKPdqGVixtvse7lvvumfawDxuaJatldPr/PjSkrZHMxPGuAiY998yLh5gJsGwCPYIbhJi5a+R6xs7X7HEzFOoyeq0cZGMPHZuayQSg7tYXuoXbfSpTSOPWEfOojmSde+5BXdpJXdsL9vjJ1zCk0VA3U4JEc10G2s6SyCrhKqOACHbmP0PUaeQ9xxL1CVrYuVr7IJyhqfZQHeyiNbAeD75qGvtiYldWVa66Vstr6PBf5xFWX94yz4J+bqcBoPcPk/xoQ/yIn4T2mNc/RfjlTjv8ytKCHQcQgL95TnMqixAoEXLggXCmsCtRQDwJqDViq5P+wje5MsO9TXhRrJ4LDZkIqJfCyb40CfsfbOZfauVVyYODna0feKq8ieZv4o6KPtfWeT9w7eB7qLyb+/8HnOl1ory1cxge5gb/MzuQ8hj2qVAG/lwT133L94gPMAVwbwd/FEivrmSaEe1FIU/ZdxOt2DfB3tL9Ko3IvlVoQ6ZqXT7fSaakaNLQPsWSNA8CJFn+lwdcDG/Wwsi/u4O1JjjkXZYqWqdsz0ODOIhpP4ZUm+M/qcKL+Ac6PvD3zPhPiK6DF26zDAFsVqqat7f3EXisouJBKCXPA4HucxPW/K6KYk48oHD3CTAfiteCLlVo/QPAJ3oFEjG12mrFiYo/MT2jYmBWmnAob9YASiBO4km82fYcBjlSBPAmhPeiwZ4e4MpEMMC2lZvXE3SCKfI/xE4OVmT9sU6PSF3tq4+z6sZi8doYivQ3GCz6z186ebQM+J9tZ5gA2fC/T31vX5DfOmWuzbeETzZXQdo5WHMA/wuQDwLuoLLmcWMUy9wSMpROLJSRszc1Tdwtui9KmvmwPNnpL0hByV+kTQE5hiFo9gReBz0OcCM+PsCNnvYTC3ZX4XLxbwfmimS0LfQTKtYI0XAmImu0atcRdnOwgkkEHHLNzNxgujYRWCMlgux+cas2wUjzGFigQ+p8r+1tjAKRey+oxgnTzAsS2B8MaLQl2fcy9XKuWayyN6Rsrop+dYJs+X0XmAzxmAu2MfHG1Fy5L8oDU3ROl6EpZ4GbMKX8C1MydWShPD3t6GnlAjfJ1paXMmoDlbkcpeHODAH2bWfh6OtFLhTTJKbEFUpATSnWhVg2ccsLEsjgNoKKxiTFlWXdsJqv7+IC8nSVWmh/U4L9JygC2JFYIJkOt/axPkPfc/ch8LeETPSBn9ODuwdXqOlM95APMAnxsAZyF+IlzOlQxhjhkhOlYpkzhFyKNUZ1mSPy23Y4aOWRV3cndAqLvYQ6i3E8SSrFSb0vusQ1rMQBrL33Ek40TrTPS8diYXLXjhEkQuYDIivekuNpa6VRm4SNuKYoaNw2c1qaYHbHl4q2sr4JAjvsbOjnYwQP5uXRTYAtmLgGg/kU6vTzxTBXiMR/OMltFL2Wntk2Y+ic73vnmAzzmAj6CkpTpzEpQfRVlSVcNWq6pjKezbSFZZnhwAKWGe4OfpSIF3FqubjZ9tbW1IxmpLS/AhBIRR/iIKyUQC+CQjl7mZYErdSawgCZa8EdCYDbqTixBbOxvaInAnzwcKpmRHM6DGixU0BBmqVq/XPsxe3FCXsqzgGZkWNxS4M8Ldp30OuaqL2MeZUWAjf6e2j4UVG9RS1/W1FDMXAOt5NM9oGf2k1MrVPr7vzQcPcNMBuMcCa+vfNZ0eR4UvdOVCXXKE2rAasxDMTtHsAsvFtelBUBjvB8mhnnRlysPVAdBMBcU8pFfZzmJ3jO0I7DHrxX4yTsSj7jZmwriHrCzwZxhe5H4RwHihgLCwZisDWCFAOKN1aJA3uXAQu0N2lDeUJvnTwbLOgnA6XKZMS1xVKRxvjxBD5zXsBZtydq2sF52jhb94vFT/Oy+GUWBDK1VtHjOddR/D1zhKxwwc3wvkPuJ5NGsFcUOoj0mrjE3wfW8e4DzATQfik9HkBK2TyxhrH4old+yLopSnps5imLmjIAmCEH8Xs/yWnBBqOlKThqYjgVCaSMCY4Ef777kEHJgV50T70K/zY33J4/vRqCCZP96+LiOYArk1N5RCeUlxJL1/fJzV1ZrBWb4Ejlk1GqSgRClWI9BVzVz32nEbQKXOuZrwc3eUABxX33SxEEWRGu4+cCjSj1yUadtesbW1+ZL8voDHslYA32sACB5XYul5mu978wDnAT77AG91V1NG19U6tJ7ADgfjugn8cHCLsQ2N1xqixgzMpBHuWCnAnjb2qrHCgBclJQm+c0I1jmqy62iigqXzSH8RLGDBi5UMfK7w4ksX9TWskmB7IS7YDRYSiGMFJtjLSaNjifSlFwCX80jWGuApBoJhqRJJ0pN835sHOA/w2QX4QhLfZJHsbCaggmV4BCRahuIeMUKzoyCMZrk48IUZM2byCPzByhiaBa9W0n/GTJ/7GQZOfyOMMWPGCwa8r16S2WO5Hx+DsRQNglrM7pP9dXLpMvksmwTuvOOKnT577jhpH+DpSNsQgZ5OkswZBxZxFgBXD7VaTYtk1Ndyo70k8wJYcQn3Z0rzOPiImwxq18dcaPk8j0fyrJXRD6uQIjXlvvi+uWzryQOcBzgH8fNDfUS0xMqbmJipkYqeVqXJJNsOJxBFaKNUagL5XkmcL1SlBEgAHid2owDGyoo2xxjmJ6K9b7yYkr8Ia8sJAX92Ot3VyQ5ilCi0oe4Ayf4/4svns1pGBzUZ7YSJl9FTePDyAJ/LAPdbYG39W5K8iUkMb2JiysDWW7CG/D5uA+A+O5azcc2rINYHWrLEkn12NFXhAI5bBvg93GHX5phxGBHL51h9waFG+WFBnE8oTfCnmwC4sYDZdgLdUHABf/J7C5hthiEexbNeRlc3EJZiRLtOQ5TTB3j48gCfkwBnId5P4ls3crLFk3qyeKoPioNPKEWazwN9xgfP0DgmM8JD44lxjfrJJCNGNzDsaeOEP5a4sc2wQomQT3lyoATg2OoY1tKBLCeaKZ8nh7hJDT9603YGtkvk/cxxU4FbPSTgRtGWA3zp3GTK6KemObmL2FI7X1LnAc4DfBYgvtaVWdWR9CZDUQddiYEJD3TjZNc4dIbPryG12rGnHertTF5PWwm0Uc8cs2FVPuNcoHANvhcwO16pg4BLZAA1H4F8Fe51uIKH63jSLmwd+eFUM5087ioevSZXRtekHM2X1HmA8wCfBYD/HzcEVkEyrxBfF6ld6oXg5+4AMeSEnCxWbjPK+4ZrAesYzqrU3WC+4vJ9Yx83xjjEwYFRkSuK94XO/DAY1GDfHcV5cNfbmTW2CWYFXDq1FHDBwTcsn6u7DVYZMsh7qD4tSHJBgYOJgV7Of5DHzuLxa1Jl9H0anuj5kjoPcB7gMwzwrQXx/jIncjyhYh8U3bRw3YxTV0NhFNTHjg+SBTqnG47qXphNItTn82AcOqJxdqWYWacZyQUNVe0CPR3p64IXXaiwlxjiTk1pcCJ/aJr9fBwo6ymMgJqUQMgK92BeRwJVrhpTEOdLb9dA7k/z8rkXzb6ly+fKAi/+pC8IyxL86AZBEXkvksfO5/FrUmX001qc7PmSOg9wHuAzCHBXAuifOwrC1bpn1aUHQXKYB5Ug5XTQHdiVI9Q/V2UGwpTePSjQCmK95iioPSW+4sZyRUtiM2x/dwewt7OhwiiY6cYEukJ5sj/NkqfTaefU8rpY+1I8boUsXkqBrS03lP5OaaLm+/ER/urL51yoahc4Otj+jGuOPHoNBnBDlba1lSblS+o8wHmAzxDEr0MYoNIWupCpkxflzDoaMoMhM8oL/AnAHVjTC2u214rOXQlB6r2zMVuX+IbHmG7GjiDCikIO5y3OZtTGti9FKVOcReAumHDVC5/b+GA3qEwJoKpz0/Wy6QUYu8ONO/EVcopyyobkUKaWey1RCx8fQ5fp8+laCUpbAOR9Qx77CI9dgwJcPMNldOlM3JSV2/iSOg/wOQPwCBJn0kgWySmroarakuKIaZXU8Oc4WYwGIChvijab3uQEjlDHTMyGgACHk8IIjLDkm6SB1zZ6fXMe4Qh4zHLxpJ9vwAwes2ccyKNwjmLK3ZkcoEPdDDpQpnbYjFzo4IyB2NuJwJpZ7cLAC6pQPxfyN/tQKdNe8lqosy2VBjbjNx7C6LWreQ7kL0Lw73ZkrWP9PJwYAxOSrWv6nGZHKU6fK/cf91Cne97GY9fgED9pIOBpU3o+bia66XxJnQe4eQOchfhDyjInVC/D9R8G5pppng+zxh+4glSdGkgz9VBfEYUSt/eLGSUOXCHYY3H/VwfJT5yOR+AjeOQDLwKwpE3/n/X1xtsbO3NWVf7GigQaeqCMqAcBNZbBUVoUrTp9cFCQ/Lww3pfKjqJCnSbZNdWXr4qlcEdt+umALV9ZkD9OvHjhyueoP4/336iFgUmEv0ij8rmy1wB3wBdYL/wveWwbHrkmW0YfmAPlc965jAf4nAR4KYIVd3jVWY3iQBMakWjq4iUdOAmNk84oqYluZehyheDCCwcsveIwFp2gJp89XewhyNORym1ihoqDc0km6imOWTRWFxDQuLqFQiQuTlN/D7qw4YBZIMmyccgMJ8MbMoJp3xqn/1dXa3phxFQ78PnD16EsSXftdpwCV7jQIBc4HMBxiBEfs0yL/jeKw0xXPs9R8riMeQpdIbuex61Jl9EPa3CyL+Wdy3iA8wCfHYi/ht7Pmp6wMeNDiU2EkD6mJZzBCJZ+O6i3tpiW43FvGW1AgwkUvckJHjN4NMiwI9m7rR3TFxaRDBbh+P/tnWlwG1e2323LFLEvDTTQ2HcSBEAQQHPfF1HctFELte+LKYmybMuyZVnyIluSxx4/e2Y84/F4t6yxZFu2LNuSZybJq8kkqTfzXr1lknp5laokX/IpH6YqVXmVelOVMOdcXtAg2AAaYAMkpUbVv0AC3ff2gr6/e84991xccxwD6nDdcUwPiuBHoGLgFwbZoRCyacUzlP4eOwqY0Ab3wzKwLC+UiePC6C3AhDcIYwRzei1xnHKFkfpO2MZvNwKgLdOdURsZp8ZxZ4Q0nheeXzHXSHj5UulyuWdGgaeVXj0MA+RwaiHmpRddnkj3udC4O65QRpeZrZdxu6Td6NMF3M1LfdxbXrlMBvhdDfDt2JCWMtaM1jmm28TsXggssVZlMct8IgSxs4Au451kwZIggT0uRTqYdJElSBH6LbXW6QYAP66AFXYxJDIaOwFuTp9TOOe5hm6LgWJoKTdDOVgeuraxfKwHXcoTZOnSEDkOPB48rqMlLF061zMBnZfuIBmuwGDCvjIH52UvMYpubfSCIIQxhgGPa1cR499Bmvu8I88CORhvIGR9u2cC534rY3bZu9F/s4zgLa9cJgP8rgP4g6D/XudmJIEEggjHdLcX6Sq+G4XWN0Z1YywBZkPDhCloVfcv0gpp2UF6GC+AljcCvJ2Of+O9K2bpUAMIOwI4PU1om2aBdckzrO/1MmaXhRv9N/K4twxwGeBLF+JTGIlctqVFkw4S4Y5R0hjhjGCfHIndFZDGuAB0PaNljtY0utDXwrniWul9Syzf+jyQBr4f/8Z7Q3KiZ007y+kWr7GQ/TxgSWd2CDLT7uJMAiHrG+McYN8/yquOlR3gUlrIfnncWwa4DPClCXAVLnCSKDCWKbXQBY9rdiPwcMwXXfEIeHTHz4zHxgpmFiuH0GuQzgeOx4JuZZwrj1Hf6O4ea3TPADq+fNYaFxr/rpmZg02s8PS67GLL89r0xH2O8QTZ5aZT7gpFnmNQIsYSQL3bZMRWBOBHJALgk/K4twxwGeBLF+JnrCbNkly4BEGJmcEQ9qMATxx3x6xiCFN0+SJYM4UdAXRZ43v2d7g9jmnj/muaPATGw7yLAHmgwX5X5mLPtcIZBuIhwN2coejxbxLMp1MVHb3vs5I1wf8J9ICM2IoA3FgGCMrj3jLAZYAvMYBrQP+T95uJBdWZZ2qZrOUBbqHx58yUt+nx7556J53/LS7/eZLmTs90n4udG0+t700yXisG8PskzFPuL+O495/kcW8Z4DLAFwbxrVqtchohnm7kMVvZvbxIyXJcqrQlD7gzYTq7/nd3qKj85zh9Lpf7PJ88M5Hn/14e+644wI9IGMxWLnjz9Dj/JI97ywCXAV46xPcrVIp/zs5rjlDorJOt8qW5wIqNRIEXswJaLR3/VqoVJBAPo+XF1oU504t1nydo5PnI1MnTr/2n/zIAagc1gEIgB8gIWiljtywANy5xN/eRrOVJpZi//jd3E2OWHPNkgC9piK8mc4PN2mmepiP9fu6wmeS1ltcEX3yR9bVFWNtC7nMdXYymzm0i1vd2ket/x7ymktznmHTHGgj+ASC9vYA2gVZTwNeDvCATqEpGcskAl9KNLqn6tx3+DdzbzaANoHWgkWd+/duN3eN7v1nouLcM2nsc4OV8obUBYqkF0gQaBIWXCMB79Xr1tHMm4IhkHot6GDI2PgcEMswXB9o1pS1hivs0wLtBr5p1n480egjAcZqfmPrTgW+Y7U70GuZuZlqhUv3LQ2+9+7AIgOcTNvDdoDjIDdKDZHe8OIAfWWrwTraP/eenbv2qF+5hiipOO21Eg7uPPR9t6P9fxZa79vgTT9AyakFB+lvBtlYDmg2elEEsA1wMqB8AGUAe6jLsAa3Papi2gQKVfsCx8QMpaEPI0WOsPfruhx0rVcp/xmxje/rD0x1RO8nYhUFPuAhHgga6zYXDzHKhCJgeGbTSLW0a5UgcQnMJlvbsoiFgNXs5/eya7pnCaXJTAHAxyWUwZz7mzsf9MPd72GEQVT/miI/29l9bILxzCa23ftr4oyv+nl9XnD7XOpCLgqzz2d/824klGB0uZn3uYl3qs+PeWW0wtnNaEEPbO6UMYhngQrBmaK8Preoh0NYCDdAEyFbGBxl/tDZq6SfwYabHtTHfcYVa2m4Nptxz5kbj1KymGisZ/1SoFCRfOMK8KcgKzgVG8CzFaWlLGtixmaVOW6EztJDlTQm0rXqytCsZ61Yqp/12PQk8w3zyxLOiU88uliLm2EJ03BxXLYt6zdPVdIU5m0k77YcOQhSs8uzFZ3AlNq3Z/D8u//5vd5UJ4EIaA/EgO2jFPQBsJe18oxW7CrRF6Lp0j+/9qyU67i1mnfG3ip3vLYNWBni+h2YFdcvUgFpw7IZa0oUal43UCseesRN7hhI9xA+CLNRt1EIhPVFqI/j4518dMRq1f8bEKtlLimLQE8K8NWwji4pgcBJa5jEvQ+YcZ7t3iXUOFmRH2CoDXWC6F3Z08PpkxhoULf/MGuO4AEvaSsZ3J1jKuKob3oP+ejtJ50rTmE431nLkfuK9FHOsmK0PVx9L/x6wU4dzxwcanNOOmQjzmfXgoXy9VjVtgm3xGMYeOfVCBeGdra3UQsfnVHmXAFsF8oPa6LCCqGux8/lXXl9C63GXEhmdL0p93nxvGbQywDMfGi0NqGmkcBQD6200ICdJx2HUEj7EVdRlmKR1bJO44VvPBUPX6sBiwwQnmGoTs3UJpRLd2VNDlsv02Axk1TDMkY1rgSf9JkErMg10BBeOn98L09TwHPFcsROD1nXTAqzrTCsbVxPTa78f00aAIsTraczCUNJFpomlc9LjvcpePhST2RTMo07XDe+NO3NmsDs4GJle0+SdrvexAG7Fn2va2n/avGHjDxcR3kIaoM/ximXmErdSC3usxPNei4GBpYwplyErmnEB05tyudS3FDMNStZdBPAc1jVas1FQbyF3c5Y7fIBa1zim/KDED7KCuud7RbjmSxG63+pwjIgGs9kMOvWfMxtyTHuKi3MILZOJn+GY6nqw8hprrNOcSUumKeGSoJi2MxfQ05HROIaOUMckMssV6gTU0Rk3OKYTJZa1BLBOAzsEwMYx5cxxbBzbRk9IxGOa7oP6N7T44B6FBSGLS7amrXNMnYpgF5Oz3U0DGjuhE0JWoQPoY6duT1+tYMeu3kuA35MxtKSnHqcojTAfKdNvWKzwmY4t1alr9Jo5qDdtUwnnN0qBj4aDMgNsby2Dce9iXeovFTuPWdZdBHDqfuZoIMyqIhuWYRqcZsmMcJS4983RsWuprext1J0fyOXKh0b45zxAKLtBR6scF+7A8dOcC32MxkgDj0tyJsAa5MAyRAud0Wum/TY9NPIz1niuiGr8HK1IjHQnYAcoIhwXG+6z1jQcTztAGi1qPM4FucAFEq1E3AyAUzeto2PWmVY2jl/77Hq4HjZyH7DjdDzPym8YkLgZLG6XZQbEQSdDPsdFWETN/VYppjHVruCKY3Du2FEZqHeQzgO61XGcHOp5RQSk9BQyCerq3lJhkG+i7vX7lwi4jRS84yV0SNroWLhCIAo9rS3LZNybCM7FRz2MLXR4ENtCRYZL/TelJCKRtcgAlwCKJmopDxYJxq3UAg6Wc0wNyr6PNmxjZWi0hujDUHD8HRphN4D3/+ZdQjTpJHnHcfGPQit3ofWO63l3RHFBDAMZU1UolcSCDIJ1iVBP5YF6JtzRDY3R2Wi5twJIEaYIVbTgEbAI+24qhJAQ+NOfp7fD/XB/AucwtaLTgA6YS5q+Veg8EghrFzPtAVjj9ajKihTH6H/0YoRgGxyq2ALXGtcSz7fQC3pD0Apf1+yd7qrjZocu0mUO8zPTxzaKWD40Pfc7FWRFLZKC08aqlYr/A/uESnw29XSMt6lMv38h9S9WBDvtyHjpc1msW7yBtmWiOyCLsRBJY++Gq7RzUlXC9XHQdjozpmectsPpKYU4RWzOfjJo7yKA48NJG4X2El1SA9RSrarAA60v4WEW497HBtFQ7PFUKao/bA2Ly8KGS4fioiG4ZGjB9bJBCP0dPSFipbcCaHwAdZNBTSw+jHDG8Vx0G8c8DLFKpQZoJUSO2T/jAq9zGUlktgWALDStCz/DKXs+u3G6rQ6HLLzTu/pqiAVd6HqiN2QjdI5WAeSFxtjxGqbr2U/vD96vQvcUOw94P7I7QNjByTVtDOp4TOKhI7TEOui0sXJBfLSSCWNoLohYkdb2ehr3YlrA/PCKutGb+jf+t+f/8j8cyjiHDRS+DRTOK4vs3OFvoVmgc4fteh+Fur3UDpkM6CUC8Iwx4/4S3c+b6cOiruBDHZJ4bHCCuidLti6gMQ66rLr/V6yrGd3s61u8ZIlQXBpU7HKeOKaKljqOsQ4mXdPJkIWMwSJI0AWPFqpWo5q2mrRkfnONw0AisOPeGddzigKzUmBO0lShCMg6p3E6YNNPO1jttFGnnl6prJ4HaRQCERPkuOD4k0HL9KqEiwSV4XkLjSlnC63vAwBsXOYUk7DgtS40Vxwz62HdeB2xDDHpU9vqrGSfEFzjOfAWsLwz8p3/FrSiTM/HCjq/ubdMEG+sELjri+yMYAIbi0QJXirmRq/nB//31DtXz4o4v9U0/kZZgmGGFnhrjo7QGDVcPGLLlgG9iACn7igPhfZCAlzClU7fSB9qKRujPqk6H2AZfoZu6oWMPw+lnGS8dndfbVFAzwQ7uo7RYsclQRHuLWFuOuwxTTssM4DXalVzLFsM1lKplDPTmsCy5UwaMm8Z57CjsAPgE1D6e/QA4D4slI1ARq+AkOUsBGhMV4qdjBonQ4L6+htc5Lh39NQQD4XYazBFYbsbLHG8fqONLsHAs3zBcpnu886oYyZ9anfh9Kl+u4Hs007z4PfEcq9yhtnZViqq/wTbOyv0vGCyki6px8QrcNwbijwmTxmytFXEjZ7sWDMFxx8pYihkG/WS6kocfmGo0ZXLqzFCv2dzDTvIgF4EgNNkBskS3eOZalmMyFRqVUjZECWzx4QW8oJGOYLuX7Q6MahMivnc6L7FJSwRyOj+zTemK0ZkUY7VERLQhYFUE51BKB+B5yFzlbti9ulWAD5avDGveboWrHZ02Xs5w7QLLHw7qyPARXFmHUklm5YPQBYCEGMCk3o/O91Uy023R3Ctcuf0MI/rk/uIxwCnaWH9CFw8nmLPAQPR8Fqg12IjgbWbRH0XDjTj8lrfce/81cdwPfSC635DhwU7L9hxw/HuXEMY6IGgCWLWLcKz45cysLMCx1tMp2OoHMdQITf6W1kxPXY6li021ii8gGucjitYW8BQw2nBjAzwRQI4dZM3SeR2rlnE6NM1EjZCg1LCO/1Sq1XfZTbgGNjVIfEKZWilI9TRNbwXQIhW99QCoL5UNQlwRyscOy9oVa9pck8PilzOUzDNaZ01L8BdNNGKUq0knQTsLPUV6BgkAjNWO3okCg0nmA1k3PvCIj4/UlniPRUKWouKjLjHds1cBoCvqsR87xzBuTVFDGlGJBhyaRbZZlplgFcQ4LSHtUmiB7dtkaePrJIQ4KlyHCM00PVhl/FfhMaCyaImZcqy1hefAfu6Fi+xchF6CHe0to+N1i85OGOmMux4IKDRE4CZzsbbfMTiXZ10FgRnKcq3Khnen2qana3ebyHHiF6CQmWiJwKHIBoKrPvtZknn4OZirvNNg0ylmFZprOAxV1P38loRcSxRqZPPAGD/aznnexc49+ZKDWlQ17rY6YkNMqArAHAa7CWly9m/yABXiHiQxQrHf1RlALgSAJ6CRpvPFACCB4DzAHAeGn7JBQDnAeA8AJwHgPMAcB4AzgPAeQA4D0BaUgKA8wBwHgDOA8B5ADgPAOcB4DwAHM7HLvk1AoDz2fcl8/4AwHm4fzwAnBwjALxgmQBwHgDOA8Bzlo0CgGPZgUV6bu6nw0VSPDfeRTwHluZv31DguY5KNX0VIOsD1ZRBAZAiz/lqRLZ126QY/y9yiGWzDOjKAFzqhA+d9y3yi0J8WMIEFQEpE1So1aoQwiDdcDcHWb6jziopiBDUG1q9/LbuIIE0gnBqiQFaCk2OxAjgsTOyqd0PcHfzgwlHydcN70M+yLosBLK8Uq3kj0On5zh0Mgp1JBIBM9nHx+nzlo0yG9S4rb3CzwtHg5KkWNHMed8SeFEXs5Fa5vmSSqXzu2tKhLeqTPBOyw1akXFeD9JFlVpFDnfikCK7wE6RjQbyivkNbKEdQXmVsgoBfFUZppAkFzsjEx0fS0qYdW09nWuqW8hxQeOsqHMZZ63tbgms7cGkg8AaIXZwsI5AZSFQPApQRKscrUu0fCc6g1C+nx9t9PADDU6+K2bnW8Mcnwxa+JjXzNe6Gd5nM/BezsC7rHreDpYkWp0ozqzjnfBZWj67gQ85GT4K+9X7Wb6pluPbI+gdcPLDvJtf1+Ij3oGdPTWk/sNDEXI8xZ4DwhWvxU44/o3teOxuvl+Exd4T4/ICNu41ERijtneHSF3oEShUrlqj5FmjBsq38W21Fj6zA5epBJSvgW2hfEOZn48q6n0bkarjXg5vlcTT5tJZIgdyLFA0SqeKOsTOnAG4WssB7ki8t7Znw76GjY+cb596+2ob9SoMF9GeDdKh0QdKhLaVBqZtKMJbGc+cZisDujIAf4D2QMclhjj+2Lgl8ODq6dxPKc9tDQ34cxfbaFUrFf5WaMCxIV+IdY3W5u6+Wn5yuHi4oTW+f1WYAH9Dqw86AC6+BYAc9ph4h0XPmwE0Wq2Kh2OdhRW6gFUqJa+Hz01gJXImDW8DQKNFivKCdekTUPp7u1lL9kGIGXVqAqnM8nNJoVLwOqgTOwM1AP7GGivf3+Aix70DII/Wt9hrgB4I7BDs7qsh12+00cX3CVzfRrCYc7vRzbPH1hl1kHIR5IXumR86LrhPO/W0YEehOYe7PgIdvJWK6gRsv1LiZ0FBvUlSrgHQU47gsAq52xnaiWkTCH7dRjs3jTThiV7IKKFubtFgTrWvqevbfCix9qEnWrY+ebF7z4uvDx764c/Hjv7sw00n3vnl9seu3Nj3+CdfHTnzxZ2TT3353WNpXfzdHw6KAGh3qd4Eatk7aLu28bXi1n3wCHUUZEBXNgp9BU0LuqEMIA9Wei54DpA3lykD1ThtyBrow24UCpSBBrnaZdUVDeyBBju/vsVLrMligI2g3ttfSyxahHQyZOHd1hlAo0VYBUDRambgiACucRj4KFjTaGUmESZ+Kl95xdN6ktQCjXkYvs5p5AM2Pe9gtQT4K5W5AW/Qq3kXHD96BFYlXADnADlvPP+ClvpYPX8ALHUcaljX7CHXujnPODjKBp0RrBuv4wnaKSh0D9sA3LhPCK5x5uft0JkTqsMz46qvXUhAG010Yqc5wUck/L2vpdaW5r676EW9Ehaau6KdzrnelhUEV5+emQJA1hYC9uCOY6mtZy52H3zlzVEA9DYA9P5Tv/zy0Onrt46e/vSb40/euH0iE9TZehJA/uTn3049+fnthy7/1d+tpa7sdtrWBNM5zUvswJhpLEB/kR26NdQbmff+y4BenHngD9AfxhqJIbeVTlFxL+YShLSj4qlAOsl0qsNVtIdfv/HpZ3q2PbRneOue8f51a7o6B1uCTfnc4ps7/MTCFGNZHlodIRb1WJOHb63jiEsbLWUEHFq7aAGHwApEOCbT0PQtL6VB3wCQx2EItPAtAFEhSx4/Y+D8fXYjwNPGr2328rvA8j4yVBjq6Hrf2ObnV8UdfJOANY7XMF3Pfnp/8H4VgjgCH+9HtvelPSw87s7oyXi4VeRwkZF2HpPUwpayI55ezrc+e67v3f6i7QVDPRcp6n4nQ4Tlcp+LHQ8voTNnox2vUha7GaLQFj20IwN6cTOx3U977+VItbiF9iJdUi8VWsI4OZux3OmmcsH8B3/9D7tPfnDl7NlPfjlHZ65eefKJ99995PFfvHns1M9+dOiJn7yy++zrl7aef/n8hrMvnBo78+ShVY8f39L96K7+1swxarQwxwEyHVEb7wVYG6GxVyiVvIXR8EEAdb0XYWcuCGr8HiGFVmdLDcujex+tQgzm6oxY+a4IR6Liu6kQPkLu//Tn6e1wP9wfy0FA4bgvlo8Be+iilroDgeUliPuZ4T1WHbkeVVlQX6lQEIiGYJs+gPOWzgAZSsgXMzA1FodrHQbr3Mt31XHz3OjDvIdst7HNVxDgMTp+noJrMM9CF7DE690MdkSS6LnJCMzSZCwn2iFgJW6XKBitv1zL+d4tr2Ld5xLJKiJ4T03b7ig1mtaWaHy00nF0RSnXRwb00smFrqVBFOWwWCfo2I1vsVYxEpiakW4g26gFvWBr5vQXX5944urVeQBHPfvptbMv3Pj07KUvPxPURdCFzz89e+7aL5967P33Tx35yRtTe15+9cjOCxf37Tp/bvvuM6c37zgxuXbzvu1DQyO93UJwQ3Bi0Fx72MJ3AlS7KIzLMV1NrLB+BD2BPACsNQ14v1kysKO3IQIgdAPUdTPBYd+P64MMOrTS9XA9bGRcHAPnjueZUocW/Ob2AO+y6EkZQSdDPt8DHSox54sWuNWkEfwezx2nsQ3UO/itI82tJx7dP3jgqVPjD7313hoalLSlDM/eKO0IxOjvXlOO5EV3Iby1iwDvtPTU3c9Qb2KMwnaolN/Ixd/94cBTN7/bRce/vdmucRm0d8lqZDTQIVCmyPXMZPz19Md5/1J5YKm1rqUWiYfGC8Tpj76DWiyr6VjjOjoujh2eba/87X/cdeK9j+ZA+/z1TwiUZ0H9xadnLt24/sTFzz459eL1q48++/H7J5567xfHHv7pG5P7X37l0I4XLx/YdeHFvfsuPLdz//mnJvY+8cj4tuOH12zav2No7cS6gdXD3V0dqZoWtG7R0iWgBgt4sSG9ILhHZ+BOrPcQmze4rBihCx6HE6iLeo7bHT0YEY+J74P6N7T4iPUtBPKhlHs2uG9yOErm0feJOC+MQSABcNBxwaj4dR21TYcObuo99dypteffeHnHCx++fQR/A+nfxeNXrp598Xe/37+A2IxhGp/RRBt6H/U6Ke9F8NJAvioJAF4W93mybWw2yG3L6Qtduy+8tgqD3I69+eGmk+9f3/X4JzcPn/nyu+M/+Ot/2LOAYT0cR0+99Pu/q9l65mJtvGkoTOs3y5b0PbIeOO2px8owVp6dY7eNJhBQL9dGAxpsV52HIQFSGFAmFFyFbnGcOoWuXY/NQILM9DoVH3QY+SRY0ELwQlcugg1hjZbscoV1SVZ72Eos9iYJoI5ADwDQMcI+0zrHuIF6uG9oGQ8lXSTaPJ3wBu9VelsMmsPPxhrdeY99/Zquzq0P7RsZPfnYlkd+/NqBF69deRg6bk/N8bhAJ+7Cp5+cPnvlg0cfeefdR/e//saJ0zdubTtz684G2knsotYWTzuQdTRmxUUDsPQUUvfLdnLOoUEVDeDiqNfBQw2TGtqmpWj0eYoaE1HaYa+lUev+PS+83rvruVcHUDufeaUv/Xem9l368er9L70xdOCVN0cO/8Uv1jz043fXT77x/vjxt65swYC2kx9c341BbRh1jgFt2ZHn+XTu23994tW//8edOYYnx+iQYDM9djc1iKoyOiAKOqae3YnQygC/BwCe9VCYaYOyvsxBYWvpj9KzXCwIaOAfNOjVyZ29NampsfoUNPSzAmintnYFU61hG1p+KaVKkbKz2lTMy/BNQTJOjNna0kJgpwDYKYBXqjvKpQAK5ZAQfFIZ76WUlf1ZSsRnRQms9RR0ZMj1aYTrlAPWqYx3YcE1j7qZFMA7BdZ1Cu4fvvNOVsfHvUwK70F/vT013urj8X7h9421HLmfeC/FHKtOp0oZ9erZ3wN0ClK74Pcx0OBMOSy6mTpBWD6Ztofj+TMZ4LQygivqcVPQDpGFdpAQ8uHzt/9NC4J46q2PJx5+99qORz74dPejVz7fi9HlAOPDGGFOIsdv3D6BAjA/IgbK6e1h3xNYBpb12NUvD2LZYH3vxGlmCP8jP3pn/YGXfzoCx9BEx7pN1KASFauALvg84/f4eZUM8HsI4FkBFAyd4jBWZphvp67qdtorNixFqwOzag2m3LPQxsYaG/qmGmvKAA25AhppFzTaCQBDU5CdBxSw/giYygjsu1LdMS7VUWdNgZWeagyYU3mhnUdgnae8Vn1KqZyBtVKpTPnt+lTcw6Q0GiX5zKBDGMdTBwfrRB1byGkk+3VE7Kmo15yqho4ClmUzaVN+Tp+KuoypZNZx+OBzXMluMfOky69ZANoWcfx73nh4jnaHKOu4V4h0/btlgN+DABcAuo66+PolTBxRKHq2j7oWXYudGQoeoBVgOTUcGYom9/SHkx1Re5IxqJMrFYokWtoA7SQAOgkN9KzAwku21LDJzjprsqfeluyVJYmgA5SEjlCyOTT3ehcjgHnSy+mTNDJ8jvYNhJNTa+LJ/gZ7wWPpiFiT8Lsg+7lYXTLsMIiqn9Grk2KmlcmvssJ7xRKCd8586dkAz+MyzyWzDPBlAPCKHOT38ynTSSVGKwDzzHH03gyoayplqcMDpNHr1QmnVY9ZtRIG+DvqYRIA7URGw5xo9JsTrTWWRFeEwwY+UaLSgEgIQCOR4/Ps74XKTAiUm5BQyTz/J0X+nxQ41kSOz4igg5SAjlKC95vwXqTvR+Z7TuE+DfBu0KsSFOCJkUZP4sSaeGJds0fMdUywjIb8JiIuY0IA1oL11rsZ7Pw1SJ2hTX4VBXB9AfCFMiRmm1A55odnAryAyzzfMWplgMsAz2WdK+lYdqPEWaLETp8ZpsFAdTTBQTlWHdOCGmxmbQMfMDcAqBugISYCS7sBoN0A0G6ABn2xlRDxeULEtokleh55BTBvaAmxs/dGrBrhnuq0KgRqQ53b1AAAb9jeExJVZ8xrIvt5LLpC9aQBTv53wG8J9vPJKF1U93loCcqaDfAMl3mpZfpxPFwGrQxwMe72qoxMQQNlmPMq1gU/RMfV6+mcSHMp89PhATIqVIpYg9cUh4Z3VgCKOAAjDo24rCWmnpgt3h62xpsC5jn3LJ9qncY43Ou4Uq2IHx2JxQ8PRUTXpVAq4gadSnRdqAT8npQqBdaplnG6KO7z0BKWPstl7pKgTJcMWhngpU730FGIJuk4+uZFgHrmsqJDdM53gk45cdAUltVZ8NZrtcoYWN0xaHRjYKnF2sOWGDTaMWi8ZS0DdUW4GHS2yP3LpyQI7jfR9u5QDKzw2KqEQ1QdTosuVgX7xT1MwXoyBVY71ufPDlKSX2UHuE4k9IJU2Z+l/3ZIBOyggMWsoMfpl6h8lAl0n6zSdE8CPE+UuzYjU1o7db9vXUSwZ7rlx3749//Yv+eV17ZMvnx5/NBz50YPnHlkYM/Uwa6Jneua1w63Jvrijgg03rKWibqiXKQ5xEYAnIKCzllkpUKB0eGRnnpnBAAe2dDqFVV2MsiS/QDIOcsXEnQaIiq1EvfVyVitKMC5DKgtRFUgo0RlZctXpnI1MoxlgJcr2v3+DLCHadapfjrNbFslQf7sv/rt4cevfXbq/BdfzNEzX958jP792NOffjr11NWPDz/xwbt7H3/75zse+9lPJk7+6NXxE69cWnP04jNDh8+fHjjw+PHuXZN72rbuHm/asK4nMdqXjPUn3XXQ8NeCwgLK9fms+uL2MFiH4eGUKzza6A6PNbnD61q8YQBOeLzNF97c4Z+jic5AeGtXkLxnf4fbb2j1kf3XNHnCY1DeMO8Kr046wwMNdlqfI4zHvXakrWHjplXJiV3rG3ce2dW679GHug4/fap38sLTq4+/dGH04ddeXo+aevnFMTz/I/T8dx/b247nv35td6LQuZVbAPJwU9AcBoDOE8towgDTsJszhAHg4V29NaLuB0qtVoYNOpVgufnks+rDshVecfd5QAI5M8q0Z3wezPF3toISHUex8tGOhwxlGeCVe9GEDDoaAR+kc9Tb6Dj7Wimt91f/+E87Tn128+TTX9589Jmvviqbzn9xY+rc5zeOnfvss8mnr1079PS1Tw4+ffXjPU9f/XDXuSsfbD/30Xtbz3/0zpZnP3p3y3NX3tty4eP3Qe9seuGjtzfM0YdvrX/+3TfGUBfef3PtvO+vvDP+wi/f3zJHn3w48eL1j7ejLn7+ye5LN67vuXTz84OXbt44dOnrm5OXv/nq2OVvv5566c63j1y+8+2jl77+aurFLz8//Pz1q7ufufL+xNl3frb+9I9fGT558Vzv5JMn2nfu25Qc6YkjzELLQW21lhAAdI5qnMYQgDQElnjooeFoaBIktjyvTR+qgn3jHmZeuc1BltTH+03zvgMrPARWeEhO7lJR93km0PxUmf8Lfe/P2taQ1SnwCuwnBqj+IuDrF7mNP895BKjrX4ayDPCl86JueQUdy7bRXNEROt2tnVryIzSH8EQ+gD//l//u4OnPb5589uuvpdWtrx/B9+e+/ubkhW++PfnCt9+evHj79slLd+6cvPzdnZMv/eq78uu7Oydeuv3N5KVbXx669NUXey9+8emOi59e3fzClXfXX3jvZ0PP/fwv+p95/cXOc5fPNJ85c6Th8aObIic3twbBIvVnKJD1/+znR0di/kOrI/49/bX+7d1B/6Z2v39ts8cPFr2/r97m75Vegay/A2L264nZ/ADQOUoGzH5qDfs3dwTIOeFxiymvqcZC9vNYdLPlAbj93VFudpvOiHVenSivVYf7OmUrvGLR52mY+aj8Rbyn/34wq1xl1jZSy5fj7+xj9BX4LP03I0NZBviyfdH57MqMFIsYyOZ9+W/+WLPr5Vd7j//kJ0On33177IkP3hs/8/FHG5+6emXi6evXtj19/fqO8zdu7AHtfebLm4dRAOYjAObJZ27dOvrcN98eAz2c1oXbd068cPv2wxfv3Hn40nffPfzSb3594qVf/+rhOfrVd5NE3905SnTn9iGweg9dvv3NYaJvbu0H7b186+bOy7e+2H7xy8+2XPz82saL16+Ov3jtozGwqEcuXHln9YX33ux//u0f9wGEO5/50aXWcz84x5997mTizOkDkccnx0Mnt7T5AEoekJfKU0DerG3z/e8V2HdOeVNjcc/hoYhnb3+tZ2tX0DPe6vOM8C5Pf4PdA4DzgjLfheTN8XfmZ948f8/5vzFg9gJAZwXA9YL17QWQetojdnIO422+fMczR3qdymvQqTxgaXvaw1bB428OsViXJ0PepNfkUaoUHqhXJSO2rPB+kFrKCxWXZ265dxlJLYP5HgL4XRf6LzxtTAWNqas7xrmgwS1K/XG7a6zJ7ZroDLj2DYRdx0brXQAByYTlHRmKug6sqnOBheva2RNyTnQGXeNtfqjX4xpMuuA4HK6OiM3VUmt1NfhZV73P7Aq7GFctyGczuNycPqd8doOrhm4bh/0SAdbVDOVgeb1xBykf69nQ6nNhvTt6QuQ48HjwuI6Oxko+t8mRmHP/qrALrHYo3+saSjldfUVe/2LVEmJdANBZAXhdjEHtwkVrbKyOHNeu3hrR5QWdRlcVWNIdddac23RFuDl1puW26LBei4zZsgIcAeuRQJo8dVglqqMSctJOTUFAyZqWAb5MAM767QY7NLaiBBakY0tnwA4Qs4OFaYdGX0iOAv/bj4/V2wGCdgC/fXtPyA5Qtg+l3HaAp73ez9oBvnYbq7WbjRo7WHp2tUZpV6kVdg28G3Vqu4XR2B1mrd1j1dsDsG2Nw2CvBdU5jfaIy2iPuRmies/3imco/X0UVAfb435YBpblhTJdFp3dDuWbDWq7Tgv1q7F+JXk36NUOltE4nBadw2832hMBi70zarMP8277pna/HUBPzgvPL881sgtdk4ODdXboqNg3tvnwWtv74nbR96aQ2motdoDnHAXg3sNvwAGWuP3Q6oh9cjia3t5RsLw6K+5rTwXMebdrCprn1QtWuB06jrh/lYzasgHcSudUC8lN5RJ4z9YDeep4gI4xu7P2d2fJVeD/7H3zHU+u8xAjqwxwGeB3BcCh8ayuUlRzHRErBw2toMDK5ta3eLndfbXc0ZEYB6ApSmBpcvtX1XHbu0PcmmYv1xW1c1GviXOwOg6sPw6AyFUrFZwW3q2MhvNadRyAmAOwcnEvwyV9Ji61BJWAc4BOAQfg54I2A+fC89F/fz4AfQ46GZzHpufAsuf64g64jj4O4M5B54c7Nlov6vpBB4ADqJPrh/dhMOnIea8KqbPOOu88kn4zB78Dok3tAVLnYEJ8HUY4Z7yX+bbpEKgX5WS1nDylrKzuc6cEYkTUVS1RXZWSXga4DPC7AeAGaHwt0MjO0UCD3bKh1WvZ219rmRqrt0Cjni1r9jtuB6CxgDVtGW30WFvrOEvQYbSABW0Fy9UCHQULWM8WsGotIbvBEvMwloTPZEkVId5vsjT6zZamACg4X80h1tIcZGf+h20aUbA97legbGuGhL6zFCvoeFgavCYLAN7i4/QWi1Ft0cB1qFYoLAad2mJntRboyFh64w7LeJvPsruvxgIWu9C1nifoSFn2wL3Z3OG3gJVu6fv+3lnzvFu7Y9y8c2qBa4aubFRHxE7K39Dqm/ebyKVal9FSBfti2fm2E7oHDfAbWKmoZuWVysoCcA2d7rVQqSpcX6WklJkgA3zZAhxXHEP3eVONhYUGlgUIsOuaPSxAmwWrj4WGPKfwe4A1u607xA6l3GwyaGFtrI7ValUsNOasUqlgrSYtC6BmwUplAWZsKoegYWcBtizAl22FY2mrtbBgsZk7I1a2K8qZAQzk+LJkzhArVj1QVneUY7siHNbBtoctbCvUBxBjAfosAD/ncZYos9DfYL2zUTfD+m16M2tUs0qVwgxiobPDBp0M2x2zsxvb/SxAmp0cjuW9F6jjo/XsvoEwu7kjwALQyb3MdQ3wemceI563TqdCiLJOi56Ut7O3Ruh6C5bXDtcR9jWn4Nrl2xbvrdA1ssA5oydIRq7kADfRBC4LkSWf+1ygTkaCOishtMAfkJkgA3w5A1wNwDANpZymbd1BE1h1Jmi8BXVstN4EgDCtb/WZwLI2uax6M8DahA23Qqkw28xac63TaAKL00xBZcqQGaBhAlCYWmpYMwDaBPA0AZxNPTHS2JuWgDI7BNhpMAPkzR1hKzleALwZOhl4HunzEzrPXBK7nSnuYUxBu8HEwn2pVipMGo3SBNfWFPeZTcO827Sjp8YEVnrO+wQy4zsA3bx3IGze1O43DSWdc84R70P2MbksOryXJriXpsNDEVJHMdePMahNDlaXdxu830LXJgK/G3lOeFmSt1hEyFrge12R9eJ4OJunDmuGLGVQoXJZOv1NHgOXAb58AY4uyypFtXF7Tw0DDf48HR+rZwDYzNpmL5MKWRgACgNAYWA/RqtRMh6rnom5GQYa4HkCK5YB4DFg3TJgRTNg9TLQgN81wvPB82oPWxmwKpnmIMsA2AWvxUKVBEVcRsbFahmNWsmsVCgY6HQxUY+JWZ1yMTt6QsxDw1HBe5gp3AasamZdi5ccd3Y9EQ9D7i1qojNI9lmVcIi+JrUuhqmCfbsL3Gv8bQidp06rMspzwiUFuIrCaqGqXqR6yyFDZgS6DHAZ4MsZ4IqeuMsIDfWswOoybmoPGJtqOSPLaIwIeFyZTK1WGr2c3hj3MsaU32SEBndW0CAbwao2AqyNYLEawaI2QkN9TwrAbgSwk2sBHRgjWOxzrpVUqvcwRo9VR+4LWMxGC9yrRIA1ApyN0OkyQudrzn3N1hR8v7u31jjGe4xtNZaZ+xhkyb1G9dQ7yHbroTyx594B9x4AbkzBOefbrq3WMnse0OkxDjY4jXv6ao198FuEuh+U0SsZwI3Uhb4QGYu0vLUS1Fkuaegx3icDXAb43QBw7aHVEcOBVXWGoZRHH3AweoCBHlcjq1ZW652sVh91M3oAtgEaW5QeGlwDWJsGaIQNAGsDNMhSSJ/xnv13oe9yyZDnM0OZNa/+riinB6tX31rD6gHqeryWeWTIei+4LVjoBrtZa6hWKgxarcrgtRkMfXGHYUd3yDA5EjMAjPNqP/wGxlt9BoNebcCgRp/dgJ/rwbo3FLiWc2Q2avQOVmfIcb3JNp11Vn1LkNWva/LqocOox3qOjdYbPJwBf3srZPRKFn3OSCB1EfUZJKpTahlohHzRiUpkyQBfygBfaTJqdDiFB6XVKHVBu0GX9Jl0KapGv1kHlqQO4KPrjnI6aIBlSSToAMF1tZDr2xgwz17zhSoBCtoMcD9VOgC6zmbW6joiNt3WrqAOgKkDYOZUS9hGfgsqtVL30HBUBx28os4p7GZ0YIXrumPCv5UR3qXb2RPSHR+rn61ze3eNzmrSYr0rZfRKBnAltcAXqgdF1KWQqK5ySJvtMpcBLgN82QMcE2eANGaDWlvnMmrBytZC468FC1sLQNECsLUAbC00urIqpJ6YTQvWqba11qJtCprJ/ZBCYadRa4L7DDDXAsy1rXBvJzoD2sOrI1oA6BytTnm06JlBbe8Jaafgs/64XfQ5dESsZN9UwDz7WV/cpt3Q6tUeHKybUxfWnwrObF+lqNauVJB6FbIVLgnAddTyXIh0Beq4n6YlNSxRqegx3icDXAb4XSMMXlupUKjB0lZDA68GWGjaai3qriingQZXDdIsgtR5Pi9Vhcqu9PnlOracAitdDfdG0xxkNdC50sD9Kl2wP3TWNEa9WqNUKTQeTq/pidk1m9v8msnhmAagqtnUHtBgxw61OuUmn401uYu6F4xBrXawOvVgwqEGq199dCSmhnJQpLxjozHNqgaXBqx8DYBbwzEaTYOH0SS8jMbF6jQAco2cmW3B0edSAFBRoA7dEgU3Tg9bmXGsMsBlgN9VAK8K2o2qjjqrCqw+FTS6spaJAOgqALoKgK4CKJcuv0lV4zCoNIByk1GjaoDPBuodqhHercK8+Kh6v1kFwFVt6QwUdYwhp1FVBfvv6AmR/dOaGqtXTXQEVC5OT8o36dWqqMs479gi8Fm1UqGUI9JLBriCQmyheiBPxjX9EhUGqq3IOl4Z4GXS/weVTWGV4nxpgAAAAABJRU5ErkJggg=="> + </div> + </div> + + <div class="main"> + <h1> + Something's fishy here. + </h1> + <h2> + <% if (typeof error!== 'undefined') { %> + <%= error %> + <% } else { %> + The page you were trying to reach doesn't exist. + <% } %> + </h2> + <p class="help"> + <a href="https://sailsjs.com/support">Why</a> might this be happening? + </p> + </div> + + <div class="logo"> + <a href="https://sailsjs.com"> + <img alt="sails.js logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAADiCAYAAACSqLnmAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QkI3ODQ0NUY3QzgyMTFFMjg4NzhGMDM0ODYzMDcwMTQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QkI3ODQ0NUU3QzgyMTFFMjg4NzhGMDM0ODYzMDcwMTQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE4MjJBOTE4MTlBREJFRDI0IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE4MjJBOTE4MTlBREJFRDI0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+E7tfWwAAKJlJREFUeNrsnQeU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"> + </a> + </div> +</div> + diff --git a/views/500.ejs b/views/500.ejs new file mode 100755 index 0000000000000000000000000000000000000000..74523f55e7bbbb087c99a88f51568198361f6028 --- /dev/null +++ b/views/500.ejs @@ -0,0 +1,63 @@ +<% /* + + +555555555555555555 000000000 000000000 +5::::::::::::::::5 00:::::::::00 00:::::::::00 +5::::::::::::::::5 00:::::::::::::00 00:::::::::::::00 +5:::::555555555555 0:::::::000:::::::00:::::::000:::::::0 +5:::::5 0::::::0 0::::::00::::::0 0::::::0 +5:::::5 0:::::0 0:::::00:::::0 0:::::0 +5:::::5555555555 0:::::0 0:::::00:::::0 0:::::0 +5:::::::::::::::5 0:::::0 000 0:::::00:::::0 000 0:::::0 +555555555555:::::5 0:::::0 000 0:::::00:::::0 000 0:::::0 + 5:::::50:::::0 0:::::00:::::0 0:::::0 + 5:::::50:::::0 0:::::00:::::0 0:::::0 +5555555 5:::::50::::::0 0::::::00::::::0 0::::::0 +5::::::55555::::::50:::::::000:::::::00:::::::000:::::::0 + 55:::::::::::::55 00:::::::::::::00 00:::::::::::::00 + 55:::::::::55 00:::::::::00 00:::::::::00 + 555555555 000000000 000000000 + + + + This is the default "500: Server Error" page (`res.serverError()`) + For more information, see: + • https://sailsjs.com/docs/reference/response-res/res-server-error + • https://sailsjs.com/docs/concepts/extending-sails/custom-responses + +*/ %> +<link href="https://fonts.googleapis.com/css?family=Lato:300,400" rel="stylesheet"> +<style> +/* Styles included inline since you'll probably be deleting this page anyway */ +html,body{text-align:left;font-size:1em}html,body,img,form,textarea,input,fieldset,div,p,div,ul,li,ol,dl,dt,dd,h1,h2,h3,h4,h5,h6,pre,code{margin:0;padding:0}ul,li{list-style:none}img{display:block}a img{border:0}a{text-decoration:none;font-weight:normal;font-family:inherit}*:active,*:focus{outline:0;-moz-outline-style:none}.clearfix:after{clear:both;content:".";display:block;font-size:0;height:0;line-height:0;visibility:hidden}.fivehundred .ocean{background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABGEAAAAjCAYAAAA0TxdGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEMkQ3Rjk3MENCRUYxMUUyODkxNEY3RDI5MzEzRDZERSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEMkQ3Rjk3MUNCRUYxMUUyODkxNEY3RDI5MzEzRDZERSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkRBNTIwNkZGQ0JFRTExRTI4OTE0RjdEMjkzMTNENkRFIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkRBNTIwNzAwQ0JFRTExRTI4OTE0RjdEMjkzMTNENkRFIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+TuSndwAAEQ1JREFUeNrsnQlw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') #0c8da0 no-repeat center 282px;height:315px;position:relative;}.fivehundred .ocean img{margin-right:auto;margin-left:auto;}.fivehundred .main{display:block;margin-top:90px}.fivehundred .logo{margin-top: 60px;}.fivehundred .logo a { width: 110px;display: block;margin-left:auto;margin-right:auto}.fivehundred .logo a img {width: 100%;}.fivehundred .help, .fivehundred .error{padding-top:2em}.fivehundred h1{font-family:"Lato", "Open Sans",Arial,sans-serif;font-weight:400;font-size:28px;color:#001c20;text-align:center}.fivehundred h2{font-family:"Lato", "Open Sans",Arial,sans-serif;font-weight:300;font-size:19px;color:#001c20;text-align:center}.fivehundred p{font-family:"Lato", "Open Sans",Arial,sans-serif;font-size:1.25em;color:#001c20;text-align:center}.fivehundred a{color:#14acc2}.fivehundred a:hover{color:#0c8da0}.fivehundred .whale-container{width:95%;position:absolute;bottom:-65px;left:0px} .fivehundred .whale{display:block;padding-top:27px;width: 100%;max-width:586px}.fivehundred .error-details {display: block;width: 75%; max-width: 1000px;margin-left: auto; margin-right: auto;background:#001c20;color:#fff;margin-top:50px;border-radius: 4px;border: 1px solid #000;padding: 15px;}.fivehundred .pre .code {display:block;width:100%;padding:0;margin:0;overflow:auto;} +</style> +<div class="fivehundred"> + <div class="ocean"> + <div class="whale-container"> + <img alt="whale" class="whale" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkoAAAFXCAYAAABdg2FBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowNTE5QTU4RUNDMDkxMUUyODkxNEY3RDI5MzEzRDZERSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDowNTE5QTU4RkNDMDkxMUUyODkxNEY3RDI5MzEzRDZERSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjA1MTlBNThDQ0MwOTExRTI4OTE0RjdEMjkzMTNENkRFIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjA1MTlBNThEQ0MwOTExRTI4OTE0RjdEMjkzMTNENkRFIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+WDHViwAAejZJREFUeNrsnQec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"/> + </div> + </div> + <div class="main"> + <h1> + Internal Server Error + </h1> + <h2> + Something isn't right here. + </h2> + <% if (typeof error !== 'undefined') { %> + <div class="error-details"> + <pre><code><%- error %></code></pre> + </div> + <% } else { %> + <p class="error"> + A team of highly trained sea bass is working on this as we speak.<br/> + If the problem persists, please <a href="https://sailsjs.com/contact">contact the system administrator</a> and inform them of the time that the error occured, and anything you might have done that may have caused the error. + </p> + <% } %> + + </div> + + <div class="logo"> + <a href="https://sailsjs.com"><img alt="sails.js logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAADiCAYAAACSqLnmAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QkI3ODQ0NUY3QzgyMTFFMjg4NzhGMDM0ODYzMDcwMTQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QkI3ODQ0NUU3QzgyMTFFMjg4NzhGMDM0ODYzMDcwMTQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE4MjJBOTE4MTlBREJFRDI0IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE4MjJBOTE4MTlBREJFRDI0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+E7tfWwAAKJlJREFUeNrsnQeU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"></a> + </div> +</div> diff --git a/views/layouts/layout.ejs b/views/layouts/layout.ejs new file mode 100755 index 0000000000000000000000000000000000000000..9588d2b66136ff48451ab1f8a36c7b4bbad5d7e4 --- /dev/null +++ b/views/layouts/layout.ejs @@ -0,0 +1,112 @@ +<!DOCTYPE html> +<html> + <head> + <title>New Sails App</title> + + <!-- Viewport mobile tag for sensible mobile support --> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + + <%/* If you want to discourage search engines from indexing this site, uncomment the following line: */%> + <%/* <meta name="robots" content="noindex"> */%> + + + <!-- + Stylesheets and Preprocessors + ============================== + + You can always bring in CSS files manually with `<link>` tags, or asynchronously + using a solution like AMD (RequireJS). Or, if you like, you can take advantage + of Sails' conventional asset pipeline (boilerplate Gruntfile). + + By default, stylesheets from your `assets/styles` folder are included + here automatically (between STYLES and STYLES END). Both CSS (.css) and LESS (.less) + are supported. In production, your styles will be minified and concatenated into + a single file. + + To customize any part of the built-in behavior, just edit `tasks/pipeline.js`. + For example, here are a few things you could do: + + + Change the order of your CSS files + + Import stylesheets from other directories + + Use a different or additional preprocessor, like SASS, SCSS or Stylus + --> + + <!--STYLES--> + <link rel="stylesheet" href="/styles/importer.css"> + <!--STYLES END--> + </head> + + <body> + <%- body %> + + + + <!-- + Client-side Templates + ======================== + + HTML templates are important prerequisites of modern, rich client applications. + To work their magic, frameworks like React, Vue.js, Angular, Ember, and Backbone + require that you load these templates client-side. + + By default, your Gruntfile is configured to automatically load and precompile + client-side JST templates in your `assets/templates` folder, then + include them here automatically (between TEMPLATES and TEMPLATES END). + + To customize this behavior to fit your needs, just edit `tasks/pipeline.js`. + For example, here are a few things you could do: + + + Import templates from other directories + + Use a different view engine (handlebars, dust, pug/jade, etc.) + + Internationalize your client-side templates using a server-side + stringfile before they're served. + --> + + <!--TEMPLATES--> + <!--TEMPLATES END--> + + + <!-- + Server-side View Locals + ======================== + + Sometimes, it's convenient to get access to your server-side view locals from + client-side JavaScript. This can improve page load times, remove the need for + extra AJAX requests, and make your client-side code easier to understand and + to maintain. Sails provides a simple mechanism for accessing dynamic view + locals: the "exposeLocalsToBrowser()" view partial. + + For more information on using this built-in feature, see: + https://sailsjs.com/docs/concepts/views/locals#?escaping-untrusted-data-using-exposelocalstobrowser + + --> + + + <!-- + + Client-side Javascript + ======================== + + You can always bring in JS files manually with `script` tags, or asynchronously + on the client using a solution like AMD (RequireJS). Or, if you like, you can + take advantage of Sails' conventional asset pipeline (boilerplate Gruntfile). + + By default, files in your `assets/js` folder are included here + automatically (between SCRIPTS and SCRIPTS END). Both JavaScript (.js) and + CoffeeScript (.coffee) are supported. In production, your scripts will be minified + and concatenated into a single file. + + To customize any part of the built-in behavior, just edit `tasks/pipeline.js`. + For example, here are a few things you could do: + + + Change the order of your scripts + + Import scripts from other directories + + Use a different preprocessor, like TypeScript + + --> + + <!--SCRIPTS--> + <script src="/dependencies/sails.io.js"></script> + <!--SCRIPTS END--> + </body> +</html> diff --git a/views/pages/homepage.ejs b/views/pages/homepage.ejs new file mode 100755 index 0000000000000000000000000000000000000000..68c9fa7e2ce16d255e8d35fdb99b557d2d8f1387 --- /dev/null +++ b/views/pages/homepage.ejs @@ -0,0 +1,78 @@ +<!-- +This is your default homepage. +For more information, see: +• https://sailsjs.com/documentation/concepts/views +• https://sailsjs.com/documentation/concepts/routes +--> +<link href="https://fonts.googleapis.com/css?family=Lato:300,400" rel="stylesheet"> +<style> + /* Styles included inline since you'll probably be deleting this page anyway */ + html,body{text-align:left;font-size:1em}html,body,img,form,textarea,input,fieldset,div,p,div,ul,li,ol,dl,dt,dd,h1,h2,h3,h4,h5,h6,pre,code{margin:0;padding:0}ul,li{list-style:none}img{display:block}a img{border:0}a{text-decoration:none;font-weight:normal;font-family:inherit}*:active,*:focus{outline:0;-moz-outline-style:none}h1,h2,h3,h4,h5,h6{font-weight:normal}div.clear{clear:both}.clearfix:after{clear:both;content:".";display:block;font-size:0;height:0;line-height:0;visibility:hidden}body{font-family:"Lato",Arial,sans-serif;font-weight:300;}.top-bar {width: 100%; background-color: #e4f0f1; padding: 15px 0;}.top-bar .container img {float: left;}.top-bar .container ul {float: right; padding-top: 0px;}.top-bar .container li {float: left; width: 125px; text-align: center; font-size: 15px; color:#000; font-weight: 600;}.top-bar .container a li:hover {color: #118798; -webkit-transition:color 200ms; -moz-transition:color 200ms; -o-transition:color 200ms;transition:color 200ms;}.container{width: 80%; max-width: 1200px; margin: auto;}div.header {-webkit-transition: 6s; -moz-transition: 6s; -o-transition: 6s;transition: 6s; background: rgba(4, 36, 41, 0.89) url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMwAAADWCAMAAACqsZ09AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCMEZEOEZFNzU0NjUxMUUzQjM5MUNDMkQ1OUM3QjFFNSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCMEZEOEZFODU0NjUxMUUzQjM5MUNDMkQ1OUM3QjFFNSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkEwMjI2NzMyNTQ2NTExRTNCMzkxQ0MyRDU5QzdCMUU1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkIwRkQ4RkU2NTQ2NTExRTNCMzkxQ0MyRDU5QzdCMUU1Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+4o9nxwAAAMNQTFRFDmRxDmRx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') no-repeat 42% bottom; padding: 100px 0 65px;}.header h1#main-title{color: #fff; font-weight: 300; font-size: 2.5em;}.header h3{color: #b1eef7; font-style: italic; font-weight: 300; padding-top: 5px;}.header h3 code{font-style: normal!important; background-color: rgba(255,255,255,0.5); font-weight: 300; color:#0e6471; margin: 0px 5px;}div.main.container{padding: 50px 0 10px;}h1 {color: #118798; font-weight: 300;}code {font-size: inherit; font-family: 'Consolas', 'Monaco', monospace; padding:4px 5px 1px; background-color: #f3f5f7}a{color: #118798; font-weight: 300; text-decoration: underline;}a:hover {color: #0e6471; -webkit-transition:color 200ms; -moz-transition:color 200ms; -o-transition:color 200ms;transition:color 200ms;}p{line-height: 1.5em;}blockquote{background-color: #e4f0f1; padding: 25px; line-height: 1.5em; margin: 15px 0;}blockquote span{font-weight: 600; padding-right: 5px;}ul.getting-started{padding: 0px 75px 0px 0; width: 70%; float: left; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;}ul.getting-started li{padding: 15px 0;}ul.getting-started li.first{padding-top: 0px;}ul.getting-started li h3 {padding-bottom: 10px; font-size: 25px; font-weight: 300;}.sprite{background:url('data:image/png;base64,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') no-repeat; position: absolute; left: 0; top:0;}.getting-started .sprite{margin-left:10px;padding-left:60px;height:42px;width:0; float: left;}.getting-started .one{background-position:0 0}.getting-started .two{background-position:0 -42px}.getting-started .three{background-position:0 -83px}div.step p { font-size: 15px; }div.step {position: relative; padding-left: 70px; opacity: 0.9;}div.step:hover{ opacity: 1;}div.links {float: left; width: 30%; max-width: 325px; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; background-color: #f3f5f7; border: 1px solid #ebebeb; padding: 25px 45px 35px;}div.links h3 {color: #727272; text-align: center; font-size: 28px; font-weight: 300;}div.links h4 {color: #727272; font-size: 17px; font-weight: 600; padding: 15px 0 10px;}div.links .link-list a {text-decoration: none; font-weight: 400;}div.links .link-list a li {padding: 0px 0px 5px 10px;}div.default-page{min-width: 1200px;}.pocket{display:none;} +</style> +<script type="text/javascript"> +setTimeout(function sunrise () { + document.getElementsByClassName('header')[0].style.backgroundColor = '#118798'; +}, 0); +</script> + +<div class="default-page"> + <div class="header"> + <h1 id="main-title" class="container"><%= __('A brand new app.') %></h1> + <h3 class="container">You're looking at: <code><%= view.pathFromApp + '.' +view.ext %></code></h3> + </div> + <div class="main container clearfix"> + <ul class="getting-started"> + <li class="clearfix first"> + <div class="step"> + <div class="sprite one"></div> + <h3>Get your bearings</h3> + <p> + If you're new to Sails, get started <a href="https://sailsjs.com/get-started">here</a>. + <br/> + <small>(You'll learn about the framework and explore the files that were generated in this new app.)</small> + </p> + </div> + </li> + <li class="clearfix"> + <div class="step"> + <div class="sprite two"></div> + <h3>Lift your app</h3> + <p> + Looks like you already ran <code>sails lift</code> to start up your app server. Nice work! + <br/> + <small>(Remember to re-lift after making backend code changes.)</small> + </p> + </div> + </li> + <li class="clearfix"> + <div class="step"> + <div class="sprite three"></div> + <h3>Dive in</h3> + <p> + Blueprints are just the beginning. You'll probably also want to learn how to customize your app's <a href="https://sailsjs.com/documentation/concepts/routes">routes</a>, build custom <a target="_blank" href="https://sailsjs.com/documentation/concepts/actions-and-controllers">actions</a>, set up <a href="https://sailsjs.com/documentation/concepts/policies">security policies</a>, configure your <a href="https://sailsjs.com/documentation/reference/configuration/sails-config-datastores">data sources</a>, and deploy to <a href="http://sailsjs.com/documentation/concepts/deployment">production</a>. + <br/> + <small>(For more help getting started, check out the links on this page.)</small> + </p> + </div> + </li> + </ul> + <div class="links"> + <ul class="link-list"> + + <h4>Documentation</h4> + <li><a target="_blank" href="https://sailsjs.com/whats-that">About the framework</a></li> + <li><a target="_blank" href="https://sailsjs.com/documentation/anatomy">App structure</a></li> + <li><a target="_blank" href="https://sailsjs.com/documentation/concepts/extending-sails/adapters/available-adapters">Supported databases</a></li> + <li><a target="_blank" href="https://sailsjs.com/documentation/concepts/upgrading">Version notes</a></li> + + <h4>More resources</h4> + <li><a target="_blank" href="https://sailsjs.com/enterprise">Professional / enterprise</a></li> + <li><a target="_blank" href="https://sailsjs.com/support">Community support options</a></li> + <li><a target="_blank" href="https://sailsjs.com/documentation/contributing">Contribute</a></li> + <li><a target="_blank" href="https://sailsjs.com/resources">Logos/artwork</a></li> + <li><a target="_blank" href="https://twitter.com/sailsjs">News</a></li> + + </ul> + </div> + </div> +</div>