Repository: illinois/queue
Pull request #108 (2018-04-20 00:47:44)

Reorganize all directories
A continuation of #72, but done without much work in flight so that we don't have to worry about rebasing other stuff on top of this.


Patch:
diff --git a/.gitignore b/.gitignore
index 1b73c77..e9beec9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,7 +31,8 @@ node_modules
 jspm_packages
 
 # Next.js build directory
-.next/
+build
+.next
 
 # Optional npm cache directory
 .npm
@@ -39,8 +40,8 @@ jspm_packages
 # Optional REPL history
 .node_repl_history
 
-# Dev database
-dev.sqlite
+# Dev databases
+*.sqlite
 
 # Machine-specific dotenv
 .env
diff --git a/.sequelizerc b/.sequelizerc
new file mode 100644
index 0000000..741ed93
--- /dev/null
+++ b/.sequelizerc
@@ -0,0 +1,7 @@
+const path = require('path');
+
+module.exports = {
+  'config': path.resolve('src', 'config', 'config.json'),
+  'models-path': path.resolve('src', 'models'),
+  'migrations-path': path.resolve('src', 'migrations'),
+}
diff --git a/.travis.yml b/.travis.yml
index 4a11d3f..a6c2538 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -13,7 +13,7 @@ before_install:
   - mysql -e 'CREATE USER 'queue'@'localhost'; GRANT ALL PRIVILEGES ON *.* TO 'queue'@'localhost'; CREATE DATABASE queue; CREATE DATABASE queue_test;'
 script:
   - npm run build
-  - ./tools/diff_databases.sh
+  - ./scripts/diff_databases.sh
   - DATABASE_URL=mysql://queue@localhost/queue_test npm run test-sequential
   - npm run lint-js
   - npm run prettier-diff
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 81ba923..b9b96e7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,8 @@ with the current date and the next changes should go under a **[Next]** header.
 
 ## [Next]
 
+* Reorganize directory structure. ([@nwalters512](https://github.com/nwalters512) in [#108](https://github.com/illinois/queue/pull/108))
+
 ## 19 April 2018
 
 * Show dev workshop ad on homepage. ([@nwalters512](https://github.com/nwalters512) in [#107](https://github.com/illinois/queue/pull/107))
diff --git a/package-lock.json b/package-lock.json
index ae9b7db..21c9922 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -93,7 +93,7 @@
     "@fortawesome/react-fontawesome": {
       "version": "0.0.17",
       "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.0.17.tgz",
-      "integrity": "sha1-aavRNVIxhwRPUzytxUWPgp1Dlh8=",
+      "integrity": "sha512-LpTGKuSVSMGzoKLph+d6l6rupPw17D1zX/dQYkryGdat9I76kwQwMYcn7ZviDDT6rTBlrdftB/1GIRvMSyPFuA==",
       "requires": {
         "humps": "2.0.1"
       }
@@ -101,7 +101,7 @@
     "@types/body-parser": {
       "version": "1.16.8",
       "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.16.8.tgz",
-      "integrity": "sha1-aH7DQUBiSjvsKxqOqSaEeK6PO+M=",
+      "integrity": "sha512-BdN2PXxOFnTXFcyONPW6t0fHjz2fvRZHVMFpaS0wYr+Y8fWEaNOs4V8LEu/fpzQlMx+ahdndgTaGTwPC+J/EeA==",
       "requires": {
         "@types/express": "4.0.39",
         "@types/node": "9.3.0"
@@ -115,7 +115,7 @@
     "@types/express": {
       "version": "4.0.39",
       "resolved": "https://registry.npmjs.org/@types/express/-/express-4.0.39.tgz",
-      "integrity": "sha1-FEHyHVKzO+jU+oqGXBWmqRzQ+gk=",
+      "integrity": "sha512-dBUam7jEjyuEofigUXCtublUHknRZvcRgITlGsTbFgPvnTwtQUt2NgLakbsf+PsGo/Nupqr3IXCYsOpBpofyrA==",
       "requires": {
         "@types/body-parser": "1.16.8",
         "@types/express-serve-static-core": "4.11.1",
@@ -125,7 +125,7 @@
     "@types/express-serve-static-core": {
       "version": "4.11.1",
       "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.11.1.tgz",
-      "integrity": "sha1-9vchI4LVmxnWlmd7yqSKNygPXUU=",
+      "integrity": "sha512-EehCl3tpuqiM8RUb+0255M8PhhSwTtLfmO7zBBdv0ay/VTd/zmrqDfQdZFsa5z/PVMbH2yCMZPXsnrImpATyIw==",
       "requires": {
         "@types/events": "1.1.0",
         "@types/node": "9.3.0"
@@ -134,12 +134,12 @@
     "@types/geojson": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz",
-      "integrity": "sha1-PgKXJyjGkkjCrwjWCkjLuGgP/98="
+      "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w=="
     },
     "@types/mime": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz",
-      "integrity": "sha1-WnMG42fFObn2VDSZ3o3VGfrDeos="
+      "integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA=="
     },
     "@types/node": {
       "version": "9.3.0",
@@ -149,7 +149,7 @@
     "@types/serve-static": {
       "version": "1.13.1",
       "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.1.tgz",
-      "integrity": "sha1-HSgB+mNdJ0zZfU7AfiayG0QSdJI=",
+      "integrity": "sha512-jDMH+3BQPtvqZVIcsH700Dfi8Q3MIcEx16g/VdxjoqiGR/NntekB10xdBpirMKnPe9z2C5cBmL0vte0YttOr3Q==",
       "requires": {
         "@types/express-serve-static-core": "4.11.1",
         "@types/mime": "2.0.0"
@@ -219,7 +219,7 @@
     "@zeit/source-map-support": {
       "version": "0.6.2",
       "resolved": "https://registry.npmjs.org/@zeit/source-map-support/-/source-map-support-0.6.2.tgz",
-      "integrity": "sha1-Dv1HjySmBnJpSBZeU6jv6J4kA28=",
+      "integrity": "sha512-hSGbAEUxKhrE6DAWe5cPVdlRxtpjOnNdeMI5kNIHOvJxYrWUrIdIDeTbM7hpoz0R/SSWYFxKjPJRSLs74ffVIQ==",
       "requires": {
         "source-map": "0.6.1"
       },
@@ -227,7 +227,7 @@
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
         }
       }
     },
@@ -240,7 +240,7 @@
     "abbrev": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
-      "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg="
+      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
     },
     "accepts": {
       "version": "1.3.5",
@@ -289,7 +289,7 @@
     "acorn-globals": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz",
-      "integrity": "sha1-q3FgJdvhfFTT74HTLs4rLZn+JTg=",
+      "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==",
       "dev": true,
       "requires": {
         "acorn": "5.5.3"
@@ -424,12 +424,12 @@
     "aproba": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
-      "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo="
+      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
     },
     "argparse": {
       "version": "1.0.10",
       "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
-      "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
       "requires": {
         "sprintf-js": "1.0.3"
       }
@@ -451,7 +451,7 @@
     "arr-flatten": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
-      "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE="
+      "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
     },
     "arr-union": {
       "version": "3.1.0",
@@ -469,6 +469,12 @@
       "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
       "dev": true
     },
+    "array-filter": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
+      "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
+      "dev": true
+    },
     "array-flatten": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
@@ -484,6 +490,18 @@
         "es-abstract": "1.10.0"
       }
     },
+    "array-map": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
+      "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
+      "dev": true
+    },
+    "array-reduce": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
+      "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
+      "dev": true
+    },
     "array-union": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
@@ -505,7 +523,7 @@
     "arraybuffer.slice": {
       "version": "0.0.7",
       "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
-      "integrity": "sha1-O7xCdd1YTMGxCAm4nU6LY6aednU="
+      "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog=="
     },
     "arrify": {
       "version": "1.0.1",
@@ -561,13 +579,13 @@
     "astral-regex": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
-      "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=",
+      "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
       "dev": true
     },
     "async": {
       "version": "2.6.0",
       "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
-      "integrity": "sha1-YaKau2/MAm/qd+VtHG7FOnlZUfQ=",
+      "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
       "requires": {
         "lodash": "4.17.4"
       }
@@ -580,7 +598,7 @@
     "async-limiter": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
-      "integrity": "sha1-ePrtjD0HSrgfIrTphdeehzj3IPg="
+      "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
     },
     "asynckit": {
       "version": "0.4.0",
@@ -686,7 +704,7 @@
     "babel-generator": {
       "version": "6.26.1",
       "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
-      "integrity": "sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA=",
+      "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
       "requires": {
         "babel-messages": "6.23.0",
         "babel-runtime": "6.26.0",
@@ -846,7 +864,7 @@
     "babel-loader": {
       "version": "7.1.2",
       "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.2.tgz",
-      "integrity": "sha1-9svhInEPGqKvTYgcbVtUNYyiQSY=",
+      "integrity": "sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==",
       "requires": {
         "find-cache-dir": "1.0.0",
         "loader-utils": "1.1.0",
@@ -1264,7 +1282,7 @@
     "babel-preset-env": {
       "version": "1.6.1",
       "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz",
-      "integrity": "sha1-oYtWTMm5r99KrleuPBsNmRiOb0g=",
+      "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==",
       "dev": true,
       "requires": {
         "babel-plugin-check-es2015-constants": "6.22.0",
@@ -1405,7 +1423,7 @@
     "babylon": {
       "version": "6.18.0",
       "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
-      "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM="
+      "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
     },
     "backo2": {
       "version": "1.0.2",
@@ -1420,7 +1438,7 @@
     "base": {
       "version": "0.11.2",
       "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
-      "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=",
+      "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
       "requires": {
         "cache-base": "1.0.1",
         "class-utils": "0.3.6",
@@ -1477,7 +1495,7 @@
     "big.js": {
       "version": "3.2.0",
       "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
-      "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4="
+      "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q=="
     },
     "binary-extensions": {
       "version": "1.11.0",
@@ -1492,12 +1510,12 @@
     "bluebird": {
       "version": "3.5.1",
       "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
-      "integrity": "sha1-2VUfnemPH82h5oPRfukaBgLuLrk="
+      "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
     },
     "bn.js": {
       "version": "4.11.8",
       "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
-      "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8="
+      "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
     },
     "body-parser": {
       "version": "1.18.2",
@@ -1559,7 +1577,7 @@
     "boxen": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
-      "integrity": "sha1-VcbDmouljZxhrSLNh3Uy3rZlogs=",
+      "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
       "requires": {
         "ansi-align": "2.0.0",
         "camelcase": "4.1.0",
@@ -1748,7 +1766,7 @@
     "browserify-zlib": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
-      "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=",
+      "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
       "requires": {
         "pako": "1.0.6"
       }
@@ -1841,7 +1859,7 @@
     "cache-base": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
-      "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=",
+      "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
       "requires": {
         "collection-visit": "1.0.0",
         "component-emitter": "1.2.1",
@@ -2060,7 +2078,7 @@
     "cipher-base": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
-      "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=",
+      "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
       "requires": {
         "inherits": "2.0.3",
         "safe-buffer": "5.1.1"
@@ -2069,19 +2087,19 @@
     "circular-json": {
       "version": "0.3.3",
       "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
-      "integrity": "sha1-gVyZ6oT2gJUp0vRXkb34JxE1LWY=",
+      "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
       "dev": true
     },
     "circular-json-es6": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/circular-json-es6/-/circular-json-es6-2.0.2.tgz",
-      "integrity": "sha1-5PSgk+SftLaroRVzZXRhEqeL00Q=",
+      "integrity": "sha512-ODYONMMNb3p658Zv+Pp+/XPa5s6q7afhz3Tzyvo+VRh9WIrJ64J76ZC4GQxnlye/NesTn09jvOiuE8+xxfpwhQ==",
       "dev": true
     },
     "clap": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
-      "integrity": "sha1-TzZ0WzIAhJJVf0ZBLWbVDLmbzlE=",
+      "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
       "requires": {
         "chalk": "1.1.3"
       }
@@ -2089,7 +2107,7 @@
     "class-utils": {
       "version": "0.3.6",
       "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
-      "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=",
+      "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
       "requires": {
         "arr-union": "3.1.0",
         "define-property": "0.2.5",
@@ -2254,7 +2272,7 @@
     "color-convert": {
       "version": "1.9.1",
       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
-      "integrity": "sha1-wSYRB66y8pTr/+ye2eytUppgl+0=",
+      "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
       "requires": {
         "color-name": "1.1.3"
       }
@@ -2330,7 +2348,7 @@
     "commander": {
       "version": "2.13.0",
       "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz",
-      "integrity": "sha1-aWS8pnaF33wfFDDFhPB9dZeIW5w="
+      "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA=="
     },
     "commondir": {
       "version": "1.0.1",
@@ -2414,7 +2432,7 @@
     "content-type": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
-      "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js="
+      "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
     },
     "content-type-parser": {
       "version": "1.0.2",
@@ -2446,7 +2464,7 @@
     "copy-concurrently": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
-      "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=",
+      "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
       "requires": {
         "aproba": "1.2.0",
         "fs-write-stream-atomic": "1.0.10",
@@ -2492,6 +2510,128 @@
         }
       }
     },
+    "cpx": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/cpx/-/cpx-1.5.0.tgz",
+      "integrity": "sha1-GFvgGFEdhycN7czCkxceN2VauI8=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "6.26.0",
+        "chokidar": "1.7.0",
+        "duplexer": "0.1.1",
+        "glob": "7.1.2",
+        "glob2base": "0.0.12",
+        "minimatch": "3.0.4",
+        "mkdirp": "0.5.1",
+        "resolve": "1.5.0",
+        "safe-buffer": "5.1.1",
+        "shell-quote": "1.6.1",
+        "subarg": "1.0.0"
+      },
+      "dependencies": {
+        "anymatch": {
+          "version": "1.3.2",
+          "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+          "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
+          "dev": true,
+          "requires": {
+            "micromatch": "2.3.11",
+            "normalize-path": "2.1.1"
+          }
+        },
+        "arr-diff": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+          "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+          "dev": true,
+          "requires": {
+            "arr-flatten": "1.1.0"
+          }
+        },
+        "array-unique": {
+          "version": "0.2.1",
+          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+          "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+          "dev": true
+        },
+        "braces": {
+          "version": "1.8.5",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+          "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+          "dev": true,
+          "requires": {
+            "expand-range": "1.8.2",
+            "preserve": "0.2.0",
+            "repeat-element": "1.1.2"
+          }
+        },
+        "chokidar": {
+          "version": "1.7.0",
+          "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+          "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+          "dev": true,
+          "requires": {
+            "anymatch": "1.3.2",
+            "async-each": "1.0.1",
+            "fsevents": "1.1.3",
+            "glob-parent": "2.0.0",
+            "inherits": "2.0.3",
+            "is-binary-path": "1.0.1",
+            "is-glob": "2.0.1",
+            "path-is-absolute": "1.0.1",
+            "readdirp": "2.1.0"
+          }
+        },
+        "expand-brackets": {
+          "version": "0.1.5",
+          "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+          "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+          "dev": true,
+          "requires": {
+            "is-posix-bracket": "0.1.1"
+          }
+        },
+        "extglob": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+          "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "1.0.0"
+          }
+        },
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "1.1.6"
+          }
+        },
+        "micromatch": {
+          "version": "2.3.11",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+          "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+          "dev": true,
+          "requires": {
+            "arr-diff": "2.0.0",
+            "array-unique": "0.2.1",
+            "braces": "1.8.5",
+            "expand-brackets": "0.1.5",
+            "extglob": "0.3.2",
+            "filename-regex": "2.0.1",
+            "is-extglob": "1.0.0",
+            "is-glob": "2.0.1",
+            "kind-of": "3.2.2",
+            "normalize-path": "2.1.1",
+            "object.omit": "2.0.1",
+            "parse-glob": "3.0.4",
+            "regex-cache": "0.4.4"
+          }
+        }
+      }
+    },
     "crc": {
       "version": "3.4.4",
       "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz",
@@ -2560,7 +2700,7 @@
         "boom": {
           "version": "5.2.0",
           "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
-          "integrity": "sha1-XdnabuOl8wIHdDYpDLcX0/SlTgI=",
+          "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
           "dev": true,
           "requires": {
             "hoek": "4.2.1"
@@ -2571,7 +2711,7 @@
     "crypto-browserify": {
       "version": "3.12.0",
       "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
-      "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=",
+      "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
       "requires": {
         "browserify-cipher": "1.0.0",
         "browserify-sign": "4.0.4",
@@ -2851,7 +2991,7 @@
     "denque": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/denque/-/denque-1.2.3.tgz",
-      "integrity": "sha1-mMUMjdjN+uMYzFhZzI7j2g+bDMI="
+      "integrity": "sha512-BOjyD1zPf7gqgXlXBCnCsz84cbRNfqpQNvWOUiw3Onu9s7a2afW2LyHzctoie/2KELfUoZkNHTnW02C3hCU20w=="
     },
     "depd": {
       "version": "1.1.2",
@@ -2921,7 +3061,7 @@
     "doctrine": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-      "integrity": "sha1-XNAfwQFiG0LEzX9dGmYkNxbT850=",
+      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
       "dev": true,
       "requires": {
         "esutils": "2.0.2"
@@ -2930,7 +3070,7 @@
     "dom-helpers": {
       "version": "3.3.1",
       "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.3.1.tgz",
-      "integrity": "sha1-/BpOFf/fYN3eA6SAqcD+zoId1KY="
+      "integrity": "sha512-2Sm+JaYn74OiTM2wHvxJOo3roiq/h25Yi69Fqk269cNUwIXsCvATB6CRSFC9Am/20G2b28hGv/+7NiWydIrPvg=="
     },
     "dom-serializer": {
       "version": "0.1.0",
@@ -2958,7 +3098,7 @@
     "domain-browser": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
-      "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto="
+      "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="
     },
     "domelementtype": {
       "version": "1.3.0",
@@ -2969,7 +3109,7 @@
     "domexception": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
-      "integrity": "sha1-k3RCZEymoxJh7zbj7Gd/6AVYLJA=",
+      "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
       "dev": true,
       "requires": {
         "webidl-conversions": "4.0.2"
@@ -3076,7 +3216,7 @@
     "emoji-regex": {
       "version": "6.5.1",
       "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz",
-      "integrity": "sha1-m66pKbFVVlwR6kHGYm6qZc75ksI=",
+      "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==",
       "dev": true
     },
     "emojis-list": {
@@ -3108,7 +3248,7 @@
     "end-of-stream": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
-      "integrity": "sha1-7SljTRm6ukY7bOa4CjchPqtx7EM=",
+      "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
       "requires": {
         "once": "1.4.0"
       }
@@ -3187,7 +3327,7 @@
     "engine.io-parser": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz",
-      "integrity": "sha1-TA9M/3mq7su9z96maoI8YIVAkZY=",
+      "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==",
       "requires": {
         "after": "0.8.2",
         "arraybuffer.slice": "0.0.7",
@@ -3216,12 +3356,12 @@
     "env-variable": {
       "version": "0.0.4",
       "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.4.tgz",
-      "integrity": "sha1-DWKAz1B9hCQr7+NaUSta5L53xU4="
+      "integrity": "sha512-+jpGxSWG4vr6gVxUHOc4p+ilPnql7NzZxOZBxNldsKGjCF+97df3CbuX7XMaDa5oAVkKQj4rKp38rYdC4VcpDg=="
     },
     "enzyme": {
       "version": "3.3.0",
       "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.3.0.tgz",
-      "integrity": "sha1-CXGr0Wfy1L8/W9UIIp4cS23FBHk=",
+      "integrity": "sha512-l8csyPyLmtxskTz6pX9W8eDOyH1ckEtDttXk/vlFWCjv00SkjTjtoUrogqp4yEvMyneU9dUJoOLnqFoiHb8IHA==",
       "dev": true,
       "requires": {
         "cheerio": "1.0.0-rc.2",
@@ -3245,7 +3385,7 @@
     "enzyme-adapter-react-16": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.1.tgz",
-      "integrity": "sha1-qPQni0fggvvKFPW/se5Q7mUHF7Q=",
+      "integrity": "sha512-kC8pAtU2Jk3OJ0EG8Y2813dg9Ol0TXi7UNxHzHiWs30Jo/hj7alc//G1YpKUsPP1oKl9X+Lkx+WlGJpPYA+nvw==",
       "dev": true,
       "requires": {
         "enzyme-adapter-utils": "1.3.0",
@@ -3260,7 +3400,7 @@
     "enzyme-adapter-utils": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.3.0.tgz",
-      "integrity": "sha1-1shXVoJsJXqFRNNizHpn6X6mmMc=",
+      "integrity": "sha512-vVXSt6uDv230DIv+ebCG66T1Pm36Kv+m74L1TrF4kaE7e1V7Q/LcxO0QRkajk5cA6R3uu9wJf5h13wOTezTbjA==",
       "dev": true,
       "requires": {
         "lodash": "4.17.4",
@@ -3271,7 +3411,7 @@
     "enzyme-matchers": {
       "version": "4.2.0",
       "resolved": "https://registry.npmjs.org/enzyme-matchers/-/enzyme-matchers-4.2.0.tgz",
-      "integrity": "sha1-ODM4gyWNqQ5UFLWsB9OIrst1In8=",
+      "integrity": "sha512-5Gf/mAVYx6KPAUuxuDhAGt/gu9ndPd6duFcVnH2rbEad2clgTpHZL4Df49FHFukrjEEubX9rhfeAKx0/sbfVkQ==",
       "dev": true,
       "requires": {
         "circular-json-es6": "2.0.2",
@@ -3581,7 +3721,7 @@
     "eslint-config-airbnb": {
       "version": "16.1.0",
       "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-16.1.0.tgz",
-      "integrity": "sha1-JUa/sCzJ/pIoS/FyPM8uh7xFykY=",
+      "integrity": "sha512-zLyOhVWhzB/jwbz7IPSbkUuj7X2ox4PHXTcZkEmDqTvd0baJmJyuxlFPDlZOE/Y5bC+HQRaEkT3FoHo9wIdRiw==",
       "dev": true,
       "requires": {
         "eslint-config-airbnb-base": "12.1.0"
@@ -3590,7 +3730,7 @@
     "eslint-config-airbnb-base": {
       "version": "12.1.0",
       "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz",
-      "integrity": "sha1-OGRB5UoSzNlXsKklZKS6/r10eUQ=",
+      "integrity": "sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA==",
       "dev": true,
       "requires": {
         "eslint-restricted-globals": "0.1.1"
@@ -3599,7 +3739,7 @@
     "eslint-config-prettier": {
       "version": "2.9.0",
       "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz",
-      "integrity": "sha1-Xs1lF01IbCLf84n+A2/r9QLUaKM=",
+      "integrity": "sha512-ag8YEyBXsm3nmOv1Hz991VtNNDMRa+MNy8cY47Pl4bw6iuzqKbJajXdqUpiw13STdLLrznxgm1hj9NhxeOYq0A==",
       "dev": true,
       "requires": {
         "get-stdin": "5.0.1"
@@ -3608,7 +3748,7 @@
     "eslint-import-resolver-node": {
       "version": "0.3.2",
       "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz",
-      "integrity": "sha1-WPFfuDm40FdsqYBBNHaqskcttmo=",
+      "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==",
       "dev": true,
       "requires": {
         "debug": "2.6.9",
@@ -3749,7 +3889,7 @@
     "eslint-visitor-keys": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
-      "integrity": "sha1-PzGA+y4pEBdxastMnW1bXDSmqB0=",
+      "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
       "dev": true
     },
     "espree": {
@@ -3847,7 +3987,7 @@
     "evp_bytestokey": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
-      "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=",
+      "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
       "requires": {
         "md5.js": "1.3.4",
         "safe-buffer": "5.1.1"
@@ -3856,7 +3996,7 @@
     "exec-sh": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.1.tgz",
-      "integrity": "sha1-FjuYpuiea2W0fCoo0hW8H2OYnDg=",
+      "integrity": "sha512-aLt95pexaugVtQerpmE51+4QfWrNc304uez7jvj6fWnN8GeEHpttB8F36n8N7uVhUMbH/1enbxQ9HImZ4w/9qg==",
       "dev": true,
       "requires": {
         "merge": "1.2.0"
@@ -4111,7 +4251,7 @@
     "express-session": {
       "version": "1.15.6",
       "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.15.6.tgz",
-      "integrity": "sha1-R7QWDIj0KrcP6KUI4xy/92dXqwo=",
+      "integrity": "sha512-r0nrHTCYtAMrFwZ0kBzZEXa1vtPVrw0dKvGSrKP4dahwBQ1BJpF2/y1Pp4sCD/0kvxV4zZeclyvfmw0B4RMJQA==",
       "requires": {
         "cookie": "0.3.1",
         "cookie-signature": "1.0.6",
@@ -4151,7 +4291,7 @@
     "express-validator": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/express-validator/-/express-validator-4.3.0.tgz",
-      "integrity": "sha1-YCGKV3jFnV53i4muTgC3b4UQ73g=",
+      "integrity": "sha512-EYU+JJ2EoLpcw+GKwbB1K8UGb/w1A70Wf3gD/zE9QScQxeSt8qad93lxGtsLwZFoiYM0EByVoSzHJnskp+eVHQ==",
       "requires": {
         "@types/express": "4.0.39",
         "lodash": "4.17.4",
@@ -4161,7 +4301,7 @@
         "validator": {
           "version": "8.2.0",
           "resolved": "https://registry.npmjs.org/validator/-/validator-8.2.0.tgz",
-          "integrity": "sha1-PBI3KQ43CSNVNE/veMIxJJ2rd7k="
+          "integrity": "sha512-Yw5wW34fSv5spzTXNkokD6S6/Oq92d8q/t14TqsS3fAiA1RYnxSFSIZ+CY3n6PGGRCq5HhJTSepQvFUS2QUDxA=="
         }
       }
     },
@@ -4237,7 +4377,7 @@
     "extract-text-webpack-plugin": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz",
-      "integrity": "sha1-XwQ+qgL5dQqSWLeMCm4NwUCPsvc=",
+      "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==",
       "requires": {
         "async": "2.6.0",
         "loader-utils": "1.1.0",
@@ -4309,7 +4449,7 @@
     "fecha": {
       "version": "2.3.3",
       "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz",
-      "integrity": "sha1-lI50FX3xoy/RsSw6PDzctuydls0="
+      "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg=="
     },
     "figures": {
       "version": "2.0.0",
@@ -4406,6 +4546,12 @@
         }
       }
     },
+    "find-index": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz",
+      "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=",
+      "dev": true
+    },
     "find-up": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
@@ -5366,12 +5512,12 @@
     "function-bind": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0="
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
     },
     "function.prototype.name": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.0.tgz",
-      "integrity": "sha1-i9djzAr4YKhZzF1JOE10uTLNIyc=",
+      "integrity": "sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg==",
       "dev": true,
       "requires": {
         "define-properties": "1.1.2",
@@ -5428,7 +5574,7 @@
     "glob": {
       "version": "7.1.2",
       "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
-      "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=",
+      "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
       "requires": {
         "fs.realpath": "1.0.0",
         "inflight": "1.0.6",
@@ -5460,7 +5606,16 @@
     "glob-promise": {
       "version": "3.3.0",
       "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.3.0.tgz",
-      "integrity": "sha1-0es2JcTm3Lublu6uRCXVo7E1/tI="
+      "integrity": "sha512-X5VIEO/yy5NH3p9ORhlNodakQo/cK4I0lCtARNeAkWueJiToew5Xs9DiukVKsW5dgpjnnQgou9Rbj3HUkM6OUw=="
+    },
+    "glob2base": {
+      "version": "0.0.12",
+      "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz",
+      "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=",
+      "dev": true,
+      "requires": {
+        "find-index": "0.1.1"
+      }
     },
     "global": {
       "version": "4.3.2",
@@ -5482,7 +5637,7 @@
     "globals": {
       "version": "9.18.0",
       "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
-      "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo="
+      "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ=="
     },
     "globby": {
       "version": "5.0.0",
@@ -5657,7 +5812,7 @@
     "hash.js": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
-      "integrity": "sha1-NA3tvmKQGHFRweodd3o0SJNd+EY=",
+      "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
       "requires": {
         "inherits": "2.0.3",
         "minimalistic-assert": "1.0.0"
@@ -5666,7 +5821,7 @@
     "hawk": {
       "version": "6.0.2",
       "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
-      "integrity": "sha1-r02RTrBl+bXOTZ0RwcshJu7MMDg=",
+      "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
       "dev": true,
       "requires": {
         "boom": "4.3.1",
@@ -5688,7 +5843,7 @@
     "hoek": {
       "version": "4.2.1",
       "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
-      "integrity": "sha1-ljRQKqEsRF3Vp8VzS1cruHOKrLs=",
+      "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
       "dev": true
     },
     "hoist-non-react-statics": {
@@ -5718,7 +5873,7 @@
     "html-encoding-sniffer": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
-      "integrity": "sha1-5w2EuU2lOqN14R/jo1G+ZkLKRvg=",
+      "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
       "dev": true,
       "requires": {
         "whatwg-encoding": "1.0.3"
@@ -5910,7 +6065,7 @@
     "iconv-lite": {
       "version": "0.4.19",
       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
-      "integrity": "sha1-90aPYBNfXl2tM5nAqBvpoWA6CCs="
+      "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
     },
     "icss-replace-symbols": {
       "version": "1.1.0",
@@ -5928,7 +6083,7 @@
         "ansi-styles": {
           "version": "3.2.1",
           "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-          "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
           "requires": {
             "color-convert": "1.9.1"
           }
@@ -5936,7 +6091,7 @@
         "chalk": {
           "version": "2.3.2",
           "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
-          "integrity": "sha1-JQ3JawdJG/1gHmSNZt319gx6XGU=",
+          "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
           "requires": {
             "ansi-styles": "3.2.1",
             "escape-string-regexp": "1.0.5",
@@ -5961,12 +6116,12 @@
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
         },
         "supports-color": {
           "version": "5.3.0",
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
-          "integrity": "sha1-WySsFduA+pJ89SJ6SjP9PEx2dsA=",
+          "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
           "requires": {
             "has-flag": "3.0.0"
           }
@@ -5986,7 +6141,7 @@
     "ignore": {
       "version": "3.3.7",
       "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
-      "integrity": "sha1-YSKJv7PCIOGGpYEYYY1b6MG6sCE=",
+      "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==",
       "dev": true
     },
     "ignore-by-default": {
@@ -6008,7 +6163,7 @@
     "import-local": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz",
-      "integrity": "sha1-Xk/9wD9P5sAJxnKb6yljHC+CJ7w=",
+      "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==",
       "dev": true,
       "requires": {
         "pkg-dir": "2.0.0",
@@ -6063,12 +6218,12 @@
     "ini": {
       "version": "1.3.5",
       "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
-      "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc="
+      "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
     },
     "inquirer": {
       "version": "3.3.0",
       "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
-      "integrity": "sha1-ndLyrXZdyrH/BEO0kUQqILoifck=",
+      "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
       "dev": true,
       "requires": {
         "ansi-escapes": "3.1.0",
@@ -6202,7 +6357,7 @@
     "is-buffer": {
       "version": "1.1.6",
       "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-      "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4="
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
     },
     "is-builtin-module": {
       "version": "1.0.0",
@@ -6221,7 +6376,7 @@
     "is-ci": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz",
-      "integrity": "sha1-JH5BYueGDOu9rzC3dNawrH3P56U=",
+      "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==",
       "dev": true,
       "requires": {
         "ci-info": "1.1.3"
@@ -6397,7 +6552,7 @@
     "is-plain-object": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
-      "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=",
+      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
       "requires": {
         "isobject": "3.0.1"
       }
@@ -6631,7 +6786,7 @@
     "istanbul-lib-source-maps": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz",
-      "integrity": "sha1-IPtUsU4Us/tu22rKNXH9IUPbROY=",
+      "integrity": "sha512-fDa0hwU/5sDXwAklXgAoCJCOsFsBplVQ6WBldz5UwaqOzmDhUK4nfuR7/G//G2lERlblUNJB8P6e8cXq3a7MlA==",
       "dev": true,
       "requires": {
         "debug": "3.1.0",
@@ -6986,7 +7141,7 @@
     "jest-enzyme": {
       "version": "4.2.0",
       "resolved": "https://registry.npmjs.org/jest-enzyme/-/jest-enzyme-4.2.0.tgz",
-      "integrity": "sha1-0oRQa22H4HK/bSeGWElwu0LqWWk=",
+      "integrity": "sha512-nna99NnU6sDbWqVX0153c81RUuxI/spTgw4Xobh049NcKihu0OAtAawbuSzZUnlCqdZOoXlKMudfjUPm0sCTsg==",
       "dev": true,
       "requires": {
         "enzyme-matchers": "4.2.0",
@@ -7742,7 +7897,7 @@
     "js-base64": {
       "version": "2.4.3",
       "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz",
-      "integrity": "sha1-LlRewrDylX9BNWUQIFIU6Y+tZYI="
+      "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw=="
     },
     "js-string-escape": {
       "version": "1.0.1",
@@ -7812,7 +7967,7 @@
     "json-loader": {
       "version": "0.5.7",
       "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz",
-      "integrity": "sha1-3KFKcCNf+C8KyaOr62DTN6NlGF0="
+      "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w=="
     },
     "json-parse-better-errors": {
       "version": "1.0.2",
@@ -7823,7 +7978,7 @@
     "json-patch": {
       "version": "0.7.0",
       "resolved": "https://registry.npmjs.org/json-patch/-/json-patch-0.7.0.tgz",
-      "integrity": "sha1-JZiVjqZ/o2YNro7mhNNUB7N/S5g="
+      "integrity": "sha512-9zaGTzsV6Hal5HVMC8kb4niXYQOOcq3tUp0P/GTw6HHZFPVwtCU2+mXE9q59MelL9uknALWnoKrUxnDpUX728g=="
     },
     "json-schema": {
       "version": "0.2.3",
@@ -8120,7 +8275,7 @@
     "long": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
-      "integrity": "sha1-mntxz7fTYaGU6lVSQckvdGjVvyg="
+      "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
     },
     "longest": {
       "version": "1.0.1",
@@ -8143,7 +8298,7 @@
     "lru-cache": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
-      "integrity": "sha1-Yi4y6CSItJJ5EUpPns9F581rulU=",
+      "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
       "requires": {
         "pseudomap": "1.0.2",
         "yallist": "2.1.2"
@@ -8303,7 +8458,7 @@
     "miller-rabin": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
-      "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=",
+      "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
       "requires": {
         "bn.js": "4.11.8",
         "brorand": "1.1.0"
@@ -8353,7 +8508,7 @@
     "minimatch": {
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-      "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
+      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
       "requires": {
         "brace-expansion": "1.1.11"
       }
@@ -8502,7 +8657,7 @@
     "mz": {
       "version": "2.7.0",
       "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
-      "integrity": "sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=",
+      "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
       "requires": {
         "any-promise": "1.3.0",
         "object-assign": "4.1.1",
@@ -8790,7 +8945,7 @@
     "next-redux-wrapper": {
       "version": "1.3.5",
       "resolved": "https://registry.npmjs.org/next-redux-wrapper/-/next-redux-wrapper-1.3.5.tgz",
-      "integrity": "sha1-zyTU5L2spsvxjnMwDn+xlCiUbwM=",
+      "integrity": "sha512-VZFl/CIIujxCGDlBM99W8pDYkSr5o10UMUt5/pZHZVgnaEqpFSsRsKz9yAkx/8C3RYFhGK4MHiNaf9+LtUUemA==",
       "requires": {
         "object.assign": "4.1.0"
       }
@@ -8798,7 +8953,7 @@
     "next-routes": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/next-routes/-/next-routes-1.4.1.tgz",
-      "integrity": "sha1-dA48AsTAQ1zmilxvh3QS/oaGQCs=",
+      "integrity": "sha512-Q9/4g17Eo81QYdavyWIZpi+6Yjpz98BB2BgGFFOe6Oada/FciDYXweL1ZjLXGMSHJpcPeF09tniQdT6/nlXf/w==",
       "requires": {
         "path-to-regexp": "2.2.0"
       },
@@ -8806,7 +8961,7 @@
         "path-to-regexp": {
           "version": "2.2.0",
           "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.0.tgz",
-          "integrity": "sha1-gPD/RcHg5kHadN8xNkTq8RUFCXI="
+          "integrity": "sha512-zJcOPeBsraLjWXwUzFMPzH3QO2CmO1yRggtADPJjOTyCF5csQxfUGJL+CbyyRvIS09wOipi4F/fgRhdmVGSwxQ=="
         }
       }
     },
@@ -8818,7 +8973,7 @@
     "node-fetch": {
       "version": "1.7.3",
       "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
-      "integrity": "sha1-mA9vcthSEaU0fGsrwYxbhMPrR+8=",
+      "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
       "requires": {
         "encoding": "0.1.12",
         "is-stream": "1.1.0"
@@ -8833,7 +8988,7 @@
     "node-libs-browser": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz",
-      "integrity": "sha1-X5QmPUBPbkR2fXJpAf/wVHjWAN8=",
+      "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==",
       "requires": {
         "assert": "1.4.1",
         "browserify-zlib": "0.2.0",
@@ -8870,7 +9025,7 @@
     "node-notifier": {
       "version": "5.2.1",
       "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.2.1.tgz",
-      "integrity": "sha1-+jE90I9VF9sOJQLldY1mSsafneo=",
+      "integrity": "sha512-MIBs+AAd6dJ2SklbbE8RUDRlIVhU8MaNLh1A9SUZDUHPiZkWLFde6UNwG41yQHZEToHgJMXqyVZ9UcS/ReOVTg==",
       "dev": true,
       "requires": {
         "growly": "1.3.0",
@@ -8950,7 +9105,7 @@
     "normalize-package-data": {
       "version": "2.4.0",
       "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
-      "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=",
+      "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
       "requires": {
         "hosted-git-info": "2.6.0",
         "is-builtin-module": "1.0.0",
@@ -9100,7 +9255,7 @@
     "object-inspect": {
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.5.0.tgz",
-      "integrity": "sha1-nYdsEeQPSFx5IVZwKBt2dIj5v+M=",
+      "integrity": "sha512-UmOFbHbwvv+XHj7BerrhVq+knjceBdkvU5AriwLMvhv2qi+e7DJzxfBeFpILEjVzCp+xA+W/pIf06RGPWlZNfw==",
       "dev": true
     },
     "object-is": {
@@ -9125,7 +9280,7 @@
     "object.assign": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
-      "integrity": "sha1-lovxEA15Vrs8oIbwBvhGs7xACNo=",
+      "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
       "requires": {
         "define-properties": "1.1.2",
         "function-bind": "1.1.1",
@@ -9265,7 +9420,7 @@
     "os-locale": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
-      "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=",
+      "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
       "requires": {
         "execa": "0.7.0",
         "lcid": "1.0.0",
@@ -9301,7 +9456,7 @@
     "p-limit": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz",
-      "integrity": "sha1-DpK2vty1nwIsE9DxlJ3ILRWQnxw=",
+      "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==",
       "requires": {
         "p-try": "1.0.0"
       }
@@ -9317,7 +9472,7 @@
     "p-map": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
-      "integrity": "sha1-5OlPMR6rvIYzoeeZCBZfyiYkG2s="
+      "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA=="
     },
     "p-try": {
       "version": "1.0.0",
@@ -9343,7 +9498,7 @@
     "pako": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
-      "integrity": "sha1-AQEhG6pwxLykoPY/Igbpe3368lg="
+      "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg=="
     },
     "parallel-transform": {
       "version": "1.1.0",
@@ -9482,7 +9637,7 @@
     "pbkdf2": {
       "version": "3.0.14",
       "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz",
-      "integrity": "sha1-o14TxkeZsGzhUyD0WcIw5o5zut4=",
+      "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==",
       "requires": {
         "create-hash": "1.1.3",
         "create-hmac": "1.1.6",
@@ -9500,7 +9655,7 @@
     "pg": {
       "version": "7.4.1",
       "resolved": "https://registry.npmjs.org/pg/-/pg-7.4.1.tgz",
-      "integrity": "sha1-80Ecjd+faSMi/gXnAXoYiOR/ePE=",
+      "integrity": "sha512-Pi5qYuXro5PAD9xXx8h7bFtmHgAQEG6/SCNyi7gS3rvb/ZQYDmxKchfB0zYtiSJNWq9iXTsYsHjrM+21eBcN1A==",
       "requires": {
         "buffer-writer": "1.0.1",
         "js-string-escape": "1.0.1",
@@ -9599,13 +9754,13 @@
     "pluralize": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
-      "integrity": "sha1-KYuJ34uTsCIdv0Ia0rGx6iP8Z3c=",
+      "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
       "dev": true
     },
     "pn": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
-      "integrity": "sha1-4vTO8OIZ9GPBeas3Rj5OHs3Muvs=",
+      "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
       "dev": true
     },
     "popper.js": {
@@ -9621,7 +9776,7 @@
     "postcss": {
       "version": "5.2.18",
       "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
+      "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
       "requires": {
         "chalk": "1.1.3",
         "js-base64": "2.4.3",
@@ -9904,7 +10059,7 @@
         "ansi-styles": {
           "version": "3.2.1",
           "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-          "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
           "requires": {
             "color-convert": "1.9.1"
           }
@@ -9912,7 +10067,7 @@
         "chalk": {
           "version": "2.3.2",
           "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
-          "integrity": "sha1-JQ3JawdJG/1gHmSNZt319gx6XGU=",
+          "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
           "requires": {
             "ansi-styles": "3.2.1",
             "escape-string-regexp": "1.0.5",
@@ -9937,12 +10092,12 @@
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
         },
         "supports-color": {
           "version": "5.3.0",
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
-          "integrity": "sha1-WySsFduA+pJ89SJ6SjP9PEx2dsA=",
+          "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
           "requires": {
             "has-flag": "3.0.0"
           }
@@ -9961,7 +10116,7 @@
         "ansi-styles": {
           "version": "3.2.1",
           "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-          "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
           "requires": {
             "color-convert": "1.9.1"
           }
@@ -9969,7 +10124,7 @@
         "chalk": {
           "version": "2.3.2",
           "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
-          "integrity": "sha1-JQ3JawdJG/1gHmSNZt319gx6XGU=",
+          "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
           "requires": {
             "ansi-styles": "3.2.1",
             "escape-string-regexp": "1.0.5",
@@ -9994,12 +10149,12 @@
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
         },
         "supports-color": {
           "version": "5.3.0",
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
-          "integrity": "sha1-WySsFduA+pJ89SJ6SjP9PEx2dsA=",
+          "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
           "requires": {
             "has-flag": "3.0.0"
           }
@@ -10018,7 +10173,7 @@
         "ansi-styles": {
           "version": "3.2.1",
           "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-          "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
           "requires": {
             "color-convert": "1.9.1"
           }
@@ -10026,7 +10181,7 @@
         "chalk": {
           "version": "2.3.2",
           "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
-          "integrity": "sha1-JQ3JawdJG/1gHmSNZt319gx6XGU=",
+          "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
           "requires": {
             "ansi-styles": "3.2.1",
             "escape-string-regexp": "1.0.5",
@@ -10051,12 +10206,12 @@
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
         },
         "supports-color": {
           "version": "5.3.0",
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
-          "integrity": "sha1-WySsFduA+pJ89SJ6SjP9PEx2dsA=",
+          "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
           "requires": {
             "has-flag": "3.0.0"
           }
@@ -10075,7 +10230,7 @@
         "ansi-styles": {
           "version": "3.2.1",
           "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-          "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
           "requires": {
             "color-convert": "1.9.1"
           }
@@ -10083,7 +10238,7 @@
         "chalk": {
           "version": "2.3.2",
           "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
-          "integrity": "sha1-JQ3JawdJG/1gHmSNZt319gx6XGU=",
+          "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
           "requires": {
             "ansi-styles": "3.2.1",
             "escape-string-regexp": "1.0.5",
@@ -10108,12 +10263,12 @@
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
         },
         "supports-color": {
           "version": "5.3.0",
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
-          "integrity": "sha1-WySsFduA+pJ89SJ6SjP9PEx2dsA=",
+          "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
           "requires": {
             "has-flag": "3.0.0"
           }
@@ -10239,7 +10394,7 @@
     "postgres-interval": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.1.tgz",
-      "integrity": "sha1-rNsPiXtLHG5JbZ1OCoU+HEKPBvA=",
+      "integrity": "sha512-OkuCi9t/3CZmeQreutGgx/OVNv9MKHGIT5jH8KldQ4NLYXkvmT9nDVxEuCENlNwhlGPE374oA/xMqn05G49pHA==",
       "requires": {
         "xtend": "4.0.1"
       }
@@ -10264,7 +10419,7 @@
     "prettier": {
       "version": "1.11.1",
       "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.11.1.tgz",
-      "integrity": "sha1-YeQ/xM1E5o8rDfwsOM1LsPzNzHU=",
+      "integrity": "sha512-T/KD65Ot0PB97xTrG8afQ46x3oiVhnfGjGESSI9NWYcG92+OUPZKkwHqGWXH2t9jK1crnQjubECW0FuOth+hxw==",
       "dev": true
     },
     "pretty-format": {
@@ -10297,7 +10452,7 @@
     "pretty-quick": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-1.4.1.tgz",
-      "integrity": "sha1-nUH3eNLU2UDsYD0Sk6CZjoTEciw=",
+      "integrity": "sha512-Q4V2GAflSaM739kKH63utbfI2n4s2fCDCyjFC4ykxA9ueb7FknLcLAZSKa3DejHMt5q9Fq395eKTZ9wYwoILBw==",
       "dev": true,
       "requires": {
         "chalk": "2.3.1",
@@ -10362,7 +10517,7 @@
     "private": {
       "version": "0.1.8",
       "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
-      "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8="
+      "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="
     },
     "process": {
       "version": "0.5.2",
@@ -10383,7 +10538,7 @@
     "promise": {
       "version": "7.3.1",
       "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
-      "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=",
+      "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
       "requires": {
         "asap": "2.0.6"
       }
@@ -10406,7 +10561,7 @@
     "prop-types-exact": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.1.1.tgz",
-      "integrity": "sha1-wmICB+T3f5di+hg1sDh6RkvQiXg=",
+      "integrity": "sha512-VrFC2QoIt7oj9bxVTAYDfDMBYV3u+VHQUOWJWk9OURT7uwPEenH879MQoAQ/reY2GZ55il6p/eCqHRs2nqm8wA==",
       "requires": {
         "has": "1.0.1",
         "object.assign": "4.1.0"
@@ -10443,7 +10598,7 @@
     "pstree.remy": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.0.tgz",
-      "integrity": "sha1-8q8nJlvT5bMrv8wQ6AusVbp4aIs=",
+      "integrity": "sha512-q5I5vLRMVtdWa8n/3UEzZX7Lfghzrg9eG2IKk2ENLSofKRCXVqMvMUHxCKgXNaqH/8ebhBxrqftHWnyTFweJ5Q==",
       "dev": true,
       "requires": {
         "ps-tree": "1.1.0"
@@ -10473,7 +10628,7 @@
     "pumpify": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.4.0.tgz",
-      "integrity": "sha1-gLfF334kFT0D8OesigWl0Gi9B/s=",
+      "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==",
       "requires": {
         "duplexify": "3.5.4",
         "inherits": "2.0.3",
@@ -10499,7 +10654,7 @@
     "qs": {
       "version": "6.5.1",
       "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
-      "integrity": "sha1-NJzfbu+J7EXBLX1es/wMhwNDptg="
+      "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
     },
     "query-string": {
       "version": "4.3.4",
@@ -10523,7 +10678,7 @@
     "raf": {
       "version": "3.4.0",
       "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.0.tgz",
-      "integrity": "sha1-ooh2iBtLwsqRF9QTgWPduA94FXU=",
+      "integrity": "sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw==",
       "dev": true,
       "requires": {
         "performance-now": "2.1.0"
@@ -10538,7 +10693,7 @@
     "randexp": {
       "version": "0.4.6",
       "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz",
-      "integrity": "sha1-6YatXl4x2uE93W97MBmqfIf2DKM=",
+      "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==",
       "dev": true,
       "requires": {
         "discontinuous-range": "1.0.0",
@@ -10553,7 +10708,7 @@
     "randomatic": {
       "version": "1.1.7",
       "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
-      "integrity": "sha1-x6vpzIuHwLqodrGf3oP9RkeX44w=",
+      "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==",
       "dev": true,
       "requires": {
         "is-number": "3.0.0",
@@ -10574,7 +10729,7 @@
     "randombytes": {
       "version": "2.0.6",
       "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
-      "integrity": "sha1-0wLFIpSFiISKjTAMkytEwkIx2oA=",
+      "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
       "requires": {
         "safe-buffer": "5.1.1"
       }
@@ -10665,7 +10820,7 @@
     "react-flip-move": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/react-flip-move/-/react-flip-move-3.0.1.tgz",
-      "integrity": "sha1-e7U1HG4dl3i690jMUpKqmCUMNAE="
+      "integrity": "sha512-yIN0mRSJpKOrelM63FlxzU2aUGRoJBFPEschcIC4/GPuPczGLmGpx/+rXn8lr7I3r7dPQnVhaufU/cbQGbptIA=="
     },
     "react-fontawesome": {
       "version": "1.6.1",
@@ -10708,7 +10863,7 @@
     "react-popper": {
       "version": "0.7.5",
       "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-0.7.5.tgz",
-      "integrity": "sha1-ccJZRvKR2zgSMSgfa5VynouAFZY=",
+      "integrity": "sha512-ya9dhhGCf74JTOB2uyksEHhIGw7w9tNZRUJF73lEq2h4H5JT6MBa4PdT4G+sx6fZwq+xKZAL/sVNAIuojPn7Dg==",
       "requires": {
         "popper.js": "1.12.9",
         "prop-types": "15.6.1"
@@ -10717,7 +10872,7 @@
     "react-reconciler": {
       "version": "0.7.0",
       "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.7.0.tgz",
-      "integrity": "sha1-lhSJQQPl8Tje7rXquvPugOsdAm0=",
+      "integrity": "sha512-50JwZ3yNyMS8fchN+jjWEJOH3Oze7UmhxeoJLn2j6f3NjpfCRbcmih83XTWmzqtar/ivd5f7tvQhvvhism2fgg==",
       "dev": true,
       "requires": {
         "fbjs": "0.8.16",
@@ -10771,7 +10926,7 @@
     "react-toggle": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/react-toggle/-/react-toggle-4.0.2.tgz",
-      "integrity": "sha1-d/SHhg77h/r9GXZyotuMiFvhRA8=",
+      "integrity": "sha512-EPTWnN7gQHgEAUEmjheanZXNzY5TPnQeyyHfEs3YshaiWZf5WNjfYDrglO5F1Hl/dNveX18i4l0grTEsYH2Ccw==",
       "requires": {
         "classnames": "2.2.5"
       }
@@ -10883,7 +11038,7 @@
     "realpath-native": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.0.0.tgz",
-      "integrity": "sha1-eIVyGoO0O9Uydgnw3eyySCMF/fA=",
+      "integrity": "sha512-XJtlRJ9jf0E1H1SLeJyQ9PGzQD7S65h1pRXEcAeK48doKOnKxcgPeNohJvD5u/2sI9J1oke6E8bZHS/fmW1UiQ==",
       "dev": true,
       "requires": {
         "util.promisify": "1.0.0"
@@ -10942,7 +11097,7 @@
     "redux": {
       "version": "3.7.2",
       "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz",
-      "integrity": "sha1-BrcxIyFZAdJdBlvjQusCa8HIU3s=",
+      "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==",
       "requires": {
         "lodash": "4.17.4",
         "lodash-es": "4.17.4",
@@ -10958,17 +11113,17 @@
     "regenerate": {
       "version": "1.3.3",
       "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
-      "integrity": "sha1-DDNtOYBVPXVcObWGrjsgqknIK38="
+      "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg=="
     },
     "regenerator-runtime": {
       "version": "0.11.1",
       "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
-      "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk="
+      "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
     },
     "regenerator-transform": {
       "version": "0.10.1",
       "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
-      "integrity": "sha1-HkmWg3Ix2ot/PPQRTXG1aRoGgN0=",
+      "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
       "requires": {
         "babel-runtime": "6.26.0",
         "babel-types": "6.26.0",
@@ -10978,7 +11133,7 @@
     "regex-cache": {
       "version": "0.4.4",
       "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
-      "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=",
+      "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
       "dev": true,
       "requires": {
         "is-equal-shallow": "0.1.3"
@@ -11012,7 +11167,7 @@
     "registry-auth-token": {
       "version": "3.3.2",
       "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
-      "integrity": "sha1-hR/UkDjuy1hpERFa+EUmDuyYPyA=",
+      "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
       "requires": {
         "rc": "1.2.6",
         "safe-buffer": "5.1.1"
@@ -11152,7 +11307,7 @@
     "resolve": {
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
-      "integrity": "sha1-HwmsznlsmnYlefMbLBzEw83fnzY=",
+      "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
       "requires": {
         "path-parse": "1.0.5"
       }
@@ -11198,7 +11353,7 @@
     "ret": {
       "version": "0.1.15",
       "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
-      "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w="
+      "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
     },
     "retry-as-promised": {
       "version": "2.3.2",
@@ -11220,7 +11375,7 @@
     "rimraf": {
       "version": "2.6.2",
       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
-      "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=",
+      "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
       "requires": {
         "glob": "7.1.2"
       }
@@ -11256,7 +11411,7 @@
     "run-node": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/run-node/-/run-node-0.2.0.tgz",
-      "integrity": "sha1-sm6ULpQgXe2+Uyzd8P0dvVZkmvY=",
+      "integrity": "sha512-Zsnxrr+CMGfm7VFuCj96E8tOpFHTEuZS9EvlXcKapVr2RUvr+fxTMxNgK5fXi3TprSgWoxobtR/3TXZT4na/Ng==",
       "dev": true
     },
     "run-queue": {
@@ -11285,7 +11440,7 @@
     "safe-buffer": {
       "version": "5.1.1",
       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
-      "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM="
+      "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
     },
     "safe-regex": {
       "version": "1.1.0",
@@ -11322,7 +11477,7 @@
     "sax": {
       "version": "1.2.4",
       "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
-      "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk="
+      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
     },
     "schema-utils": {
       "version": "0.3.0",
@@ -11450,7 +11605,7 @@
     "set-value": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
-      "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=",
+      "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
       "requires": {
         "extend-shallow": "2.0.1",
         "is-extendable": "0.1.1",
@@ -11490,7 +11645,7 @@
     "shallowequal": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.0.2.tgz",
-      "integrity": "sha1-FWHb3vuMAUCBADGQhXZNo/z4P48="
+      "integrity": "sha512-zlVXeVUKvo+HEv1e2KQF/csyeMKx2oHvatQ9l6XjCUj3agvC8XGf6R9HvIPDSmp8FNPvx7b5kaEJTRi7CqxtEw=="
     },
     "shebang-command": {
       "version": "1.2.0",
@@ -11505,16 +11660,28 @@
       "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
       "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
     },
+    "shell-quote": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
+      "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
+      "dev": true,
+      "requires": {
+        "array-filter": "0.0.1",
+        "array-map": "0.0.0",
+        "array-reduce": "0.0.0",
+        "jsonify": "0.0.0"
+      }
+    },
     "shellwords": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
-      "integrity": "sha1-1rkYHBpI05cyTISHHvvPxz/AZUs=",
+      "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
       "dev": true
     },
     "shimmer": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.0.tgz",
-      "integrity": "sha1-+Wb3VVeJdj502IQRk2haXnhzZmU="
+      "integrity": "sha512-xTCx2vohXC2EWWDqY/zb4+5Mu28D+HYNSOuFzsyRDRvI/e1ICb69afwaUwfjr+25ZXldbOLyp+iDUZHq8UnTag=="
     },
     "signal-exit": {
       "version": "3.0.2",
@@ -11529,7 +11696,7 @@
     "slice-ansi": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
-      "integrity": "sha1-BE8aSdiEL/MHqta1Be0Xi9lQE00=",
+      "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
       "dev": true,
       "requires": {
         "is-fullwidth-code-point": "2.0.0"
@@ -11622,7 +11789,7 @@
     "snapdragon-node": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
-      "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=",
+      "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
       "requires": {
         "define-property": "1.0.0",
         "isobject": "3.0.1",
@@ -11642,7 +11809,7 @@
     "snapdragon-util": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
-      "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=",
+      "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
       "requires": {
         "kind-of": "3.2.2"
       },
@@ -11660,7 +11827,7 @@
     "sntp": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
-      "integrity": "sha1-LGzsFP7cIiJznK+bXD2F0cxaLMg=",
+      "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
       "dev": true,
       "requires": {
         "hoek": "4.2.1"
@@ -11761,7 +11928,7 @@
     "source-list-map": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz",
-      "integrity": "sha1-qqR0A/eyRakvvJfqCPJQ1gh+0IU="
+      "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A=="
     },
     "source-map": {
       "version": "0.5.7",
@@ -11771,7 +11938,7 @@
     "source-map-resolve": {
       "version": "0.5.1",
       "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
-      "integrity": "sha1-etD1k/IoFZjoVN+A8ZquS5LXoRo=",
+      "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
       "requires": {
         "atob": "2.1.0",
         "decode-uri-component": "0.2.0",
@@ -11833,7 +12000,7 @@
     "split": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
-      "integrity": "sha1-YFvZvjA6pZ+zX5Ip++oN3snqB9k=",
+      "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
       "requires": {
         "through": "2.3.8"
       }
@@ -11841,7 +12008,7 @@
     "split-string": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
-      "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=",
+      "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
       "requires": {
         "extend-shallow": "3.0.2"
       }
@@ -12725,7 +12892,7 @@
     "stackframe": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz",
-      "integrity": "sha1-NXskqZL5Qny6a1RdlqFO0svKGHs="
+      "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw=="
     },
     "static-extend": {
       "version": "0.1.2",
@@ -12829,7 +12996,7 @@
     "stream-each": {
       "version": "1.2.2",
       "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz",
-      "integrity": "sha1-joxGP5HaiZF3h2WHP+TZYNj2Fr0=",
+      "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==",
       "requires": {
         "end-of-stream": "1.4.1",
         "stream-shift": "1.0.0"
@@ -12892,7 +13059,7 @@
     "string-width": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
-      "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
+      "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
       "requires": {
         "is-fullwidth-code-point": "2.0.0",
         "strip-ansi": "4.0.0"
@@ -12916,7 +13083,7 @@
     "string_decoder": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
-      "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=",
+      "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
       "requires": {
         "safe-buffer": "5.1.1"
       }
@@ -12985,10 +13152,27 @@
       "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.8.tgz",
       "integrity": "sha1-sNChJslFsfMEdEejquBkcBPo0WY="
     },
+    "subarg": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz",
+      "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=",
+      "dev": true,
+      "requires": {
+        "minimist": "1.2.0"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+          "dev": true
+        }
+      }
+    },
     "superagent": {
       "version": "3.8.2",
       "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.2.tgz",
-      "integrity": "sha1-5KEbnQR/fT7+s7vlNtnsACHRZAM=",
+      "integrity": "sha512-gVH4QfYHcY3P0f/BZzavLreHW3T1v7hG9B+hpMQotGQqurOvhv87GcMCd6LWySmBuf+BDR44TQd0aISjVHLeNQ==",
       "dev": true,
       "requires": {
         "component-emitter": "1.2.1",
@@ -13064,7 +13248,7 @@
     "table": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
-      "integrity": "sha1-ozRHN1OR52atNNNIbm4q7chNLjY=",
+      "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
       "dev": true,
       "requires": {
         "ajv": "5.5.2",
@@ -13230,7 +13414,7 @@
     "timers-browserify": {
       "version": "2.0.6",
       "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz",
-      "integrity": "sha1-JB52kn2coF9NlZgZAi9bNmS2S64=",
+      "integrity": "sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==",
       "requires": {
         "setimmediate": "1.0.5"
       }
@@ -13238,7 +13422,7 @@
     "tmp": {
       "version": "0.0.33",
       "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
-      "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=",
+      "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
       "dev": true,
       "requires": {
         "os-tmpdir": "1.0.2"
@@ -13311,7 +13495,7 @@
     "touch": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
-      "integrity": "sha1-/jZfX3XsntTlaCXgu3bSSrdK+Ds=",
+      "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
       "requires": {
         "nopt": "1.0.10"
       }
@@ -13399,7 +13583,7 @@
     "ua-parser-js": {
       "version": "0.7.17",
       "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz",
-      "integrity": "sha1-6exflJi57JEOeuOsYmqAXE0J7Kw="
+      "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g=="
     },
     "uglify-js": {
       "version": "2.8.29",
@@ -13433,7 +13617,7 @@
     "uglifyjs-webpack-plugin": {
       "version": "1.1.6",
       "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.1.6.tgz",
-      "integrity": "sha1-9LqESe3PF4NcGLpq6ZudYQhX+xk=",
+      "integrity": "sha512-VUja+7rYbznEvUaeb8IxOCTUrq4BCb1ml0vffa+mfwKtrAwlqnU0ENF14DtYltV1cxd/HSuK51CCA/D/8kMQVw==",
       "requires": {
         "cacache": "10.0.4",
         "find-cache-dir": "1.0.0",
@@ -13473,7 +13657,7 @@
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
         },
         "uglify-es": {
           "version": "3.3.9",
@@ -13489,7 +13673,7 @@
     "uid-safe": {
       "version": "2.1.5",
       "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
-      "integrity": "sha1-Kz1cckDo/C5Y+Komnl7knAhXvTo=",
+      "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
       "requires": {
         "random-bytes": "1.0.0"
       }
@@ -13497,12 +13681,12 @@
     "ultron": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
-      "integrity": "sha1-n+FTahCmZKZSZqHjzPhf02MCvJw="
+      "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="
     },
     "umzug": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/umzug/-/umzug-2.1.0.tgz",
-      "integrity": "sha1-xJ3XHHwm0IKpydNZLcbcks+Gd2E=",
+      "integrity": "sha512-BgT+ekpItEWaG+3JjLLj6yVTxw2wIH8Cr6JyKYIzukWAx9nzGhC6BGHb/IRMjpobMM1qtIrReATwLUjKpU2iOQ==",
       "requires": {
         "babel-runtime": "6.26.0",
         "bluebird": "3.5.1",
@@ -13779,7 +13963,7 @@
     "util.promisify": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
-      "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=",
+      "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
       "dev": true,
       "requires": {
         "define-properties": "1.1.2",
@@ -13904,13 +14088,13 @@
     "webidl-conversions": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
-      "integrity": "sha1-qFWYCx8LazWbodXZ+zmulB+qY60=",
+      "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
       "dev": true
     },
     "webpack": {
       "version": "3.10.0",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.10.0.tgz",
-      "integrity": "sha1-UpG4dQeM8qv0K90jr+P4+WwX1yU=",
+      "integrity": "sha512-fxxKXoicjdXNUMY7LIdY89tkJJJ0m1Oo8PQutZ5rLgWbV5QVKI15Cn7+/IHnRTd3vfKfiwBx6SBqlorAuNA8LA==",
       "requires": {
         "acorn": "5.5.3",
         "acorn-dynamic-import": "2.0.2",
@@ -14093,7 +14277,7 @@
     "webpack-sources": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz",
-      "integrity": "sha1-oQHrrlnWUHNU1x2AE5UKOot6WlQ=",
+      "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==",
       "requires": {
         "source-list-map": "2.0.0",
         "source-map": "0.6.1"
@@ -14102,14 +14286,14 @@
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
         }
       }
     },
     "whatwg-encoding": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz",
-      "integrity": "sha1-V8I1vIZX6RTSTho5fTyC2u4Ka6M=",
+      "integrity": "sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==",
       "dev": true,
       "requires": {
         "iconv-lite": "0.4.19"
@@ -14123,7 +14307,7 @@
     "whatwg-url": {
       "version": "6.4.0",
       "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
-      "integrity": "sha1-CP3yuehyeDp6H2IWJgodZsxyLgg=",
+      "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
       "dev": true,
       "requires": {
         "lodash.sortby": "4.7.0",
@@ -14139,7 +14323,7 @@
     "which": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
-      "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=",
+      "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
       "requires": {
         "isexe": "2.0.0"
       }
@@ -14250,7 +14434,7 @@
     "write-file-atomic": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
-      "integrity": "sha1-H/YVdcLipOjlENb6TiQ8zhg5mas=",
+      "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
       "requires": {
         "graceful-fs": "4.1.11",
         "imurmurhash": "0.1.4",
@@ -14260,7 +14444,7 @@
     "write-file-webpack-plugin": {
       "version": "4.2.0",
       "resolved": "https://registry.npmjs.org/write-file-webpack-plugin/-/write-file-webpack-plugin-4.2.0.tgz",
-      "integrity": "sha1-e9GFR+qg6gsjmS+x4DIuVDHTOe8=",
+      "integrity": "sha512-sIjfV+M1Ia8p/lVcLjvM2I0Lq/40tCMZe+k0Pxg2TG6TKjUgHGwQeM42QdYLiHAIAITGQK1HEQA3YknFubzfDQ==",
       "requires": {
         "chalk": "1.1.3",
         "debug": "2.6.9",
@@ -14288,7 +14472,7 @@
     "xml-name-validator": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
-      "integrity": "sha1-auc+Bt5NjG5H+fsYH3jWSK1FfGo=",
+      "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
       "dev": true
     },
     "xmlhttprequest-ssl": {
diff --git a/package.json b/package.json
index 4e45429..16ddd7e 100644
--- a/package.json
+++ b/package.json
@@ -4,15 +4,15 @@
   "description": "",
   "main": "node server.js",
   "scripts": {
-    "dev": "node server.js",
-    "dev-watch": "nodemon server.js",
-    "build": "next build",
-    "start": "NODE_ENV=production node server.js",
+    "dev": "node src/server.js",
+    "dev-watch": "nodemon src/server.js",
+    "build": "rimraf build && cpx \"src\\**\\*\" build && next build build",
+    "start": "NODE_ENV=production node build/server.js",
     "test": "jest",
     "test-sequential": "jest --runInBand",
     "lint-js": "eslint --ext js .",
-    "prettier": "prettier --write \"**/*.js\"",
-    "prettier-diff": "prettier --list-different \"**/*.js\""
+    "prettier": "prettier --write \"src/**/*.js\"",
+    "prettier-diff": "prettier --list-different \"src/**/*.js\""
   },
   "keywords": [],
   "author": "",
@@ -69,6 +69,7 @@
     "babel-jest": "^22.4.3",
     "babel-preset-env": "^1.6.1",
     "babel-preset-react": "^6.24.1",
+    "cpx": "^1.5.0",
     "enzyme": "^3.3.0",
     "enzyme-adapter-react-16": "^1.1.1",
     "eslint": "^4.19.1",
@@ -84,11 +85,13 @@
     "prettier": "1.11.1",
     "pretty-quick": "^1.4.1",
     "react-test-renderer": "^16.3.0",
+    "rimraf": "^2.6.2",
     "sqlite3": "^3.1.13",
     "supertest": "^3.0.0"
   },
   "jest": {
-    "setupTestFrameworkScriptFile": "./testSetup.js",
+    "setupTestFrameworkScriptFile": "./test/setup.js",
+    "testRegex": "src/.*test.js",
     "collectCoverage": true
   },
   "husky": {
diff --git a/process.yml b/process.yml
index 34ee218..5d32551 100644
--- a/process.yml
+++ b/process.yml
@@ -1,5 +1,5 @@
 apps:
-  - script: server.js
+  - script: build/server.js
     env_staging:
       NODE_ENV: staging
       BASE_URL: /queue-dev2
diff --git a/routes.js b/routes.js
deleted file mode 100644
index 9444797..0000000
--- a/routes.js
+++ /dev/null
@@ -1,15 +0,0 @@
-const routes = require('next-routes')()
-const { baseUrl } = require('./util')
-
-const withBaseUrl = url => `${baseUrl}/${url}`
-
-routes
-  .add('index', withBaseUrl(''))
-  .add('queue', withBaseUrl('queue/:id'))
-  .add('createCourse', withBaseUrl('course/create'))
-  .add('course', withBaseUrl('course/:id'))
-  .add('courseStaff', withBaseUrl('course/:id/staff'))
-  .add('createQueue', withBaseUrl('course/:courseId/queue/create'))
-  .add('userSettings', withBaseUrl('settings'))
-
-module.exports = routes
diff --git a/tools/diff_databases.sh b/scripts/diff_databases.sh
similarity index 81%
rename from tools/diff_databases.sh
rename to scripts/diff_databases.sh
index 0a57f10..dd720dd 100755
--- a/tools/diff_databases.sh
+++ b/scripts/diff_databases.sh
@@ -11,14 +11,14 @@ fi
 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
 
 # Set up the verification databases in Node
-node -e "require('$DIR/../migrations/util').createVerificationDatabases()"
+node -e "require('$DIR/../src/migrations/util').createVerificationDatabases()"
 
 # Perform the actual diff
 mysqldbcompare --server1=queue@localhost --server2=queue@localhost --run-all-tests --changes-for=server2 queue_sequelize:queue_migrations
 EXIT_CODE=$?
 
 # Destroy the verification databases in Node
-node -e "require('$DIR/../migrations/util').destroyVerificationDatabases()"
+node -e "require('$DIR/../src/migrations/util').destroyVerificationDatabases()"
 
 # Let the user know if the databases diffed cleanly or not
 exit $EXIT_CODE
diff --git a/middleware/safeAsync.js b/src/middleware/safeAsync.js
similarity index 100%
rename from middleware/safeAsync.js
rename to src/middleware/safeAsync.js
diff --git a/migrations/20180312224451-create-users.js b/src/migrations/20180312224451-create-users.js
similarity index 100%
rename from migrations/20180312224451-create-users.js
rename to src/migrations/20180312224451-create-users.js
diff --git a/migrations/20180312225328-create-courses.js b/src/migrations/20180312225328-create-courses.js
similarity index 100%
rename from migrations/20180312225328-create-courses.js
rename to src/migrations/20180312225328-create-courses.js
diff --git a/migrations/20180312225352-create-queues.js b/src/migrations/20180312225352-create-queues.js
similarity index 100%
rename from migrations/20180312225352-create-queues.js
rename to src/migrations/20180312225352-create-queues.js
diff --git a/migrations/20180312225357-create-active-staff.js b/src/migrations/20180312225357-create-active-staff.js
similarity index 100%
rename from migrations/20180312225357-create-active-staff.js
rename to src/migrations/20180312225357-create-active-staff.js
diff --git a/migrations/20180312225409-create-course-staff.js b/src/migrations/20180312225409-create-course-staff.js
similarity index 100%
rename from migrations/20180312225409-create-course-staff.js
rename to src/migrations/20180312225409-create-course-staff.js
diff --git a/migrations/20180312225413-create-questions.js b/src/migrations/20180312225413-create-questions.js
similarity index 100%
rename from migrations/20180312225413-create-questions.js
rename to src/migrations/20180312225413-create-questions.js
diff --git a/migrations/20180316181732-fixed-location-queues.js b/src/migrations/20180316181732-fixed-location-queues.js
similarity index 100%
rename from migrations/20180316181732-fixed-location-queues.js
rename to src/migrations/20180316181732-fixed-location-queues.js
diff --git a/migrations/util/index.js b/src/migrations/util/index.js
similarity index 97%
rename from migrations/util/index.js
rename to src/migrations/util/index.js
index f998c39..c2f5f90 100644
--- a/migrations/util/index.js
+++ b/src/migrations/util/index.js
@@ -1,6 +1,7 @@
 const Umzug = require('umzug')
 const Sequelize = require('sequelize')
 const mysql = require('mysql2/promise')
+const path = require('path')
 
 const logger = require('../../util/logger')
 const models = require('../../models')
@@ -17,6 +18,7 @@ module.exports.performMigrations = async sequelize => {
       sequelize,
     },
     migrations: {
+      path: path.resolve(__dirname, '..'),
       params: [sequelize.getQueryInterface(), Sequelize],
     },
   })
diff --git a/models/ActiveStaff.js b/src/models/ActiveStaff.js
similarity index 100%
rename from models/ActiveStaff.js
rename to src/models/ActiveStaff.js
diff --git a/models/Course.js b/src/models/Course.js
similarity index 100%
rename from models/Course.js
rename to src/models/Course.js
diff --git a/models/CourseStaff.js b/src/models/CourseStaff.js
similarity index 100%
rename from models/CourseStaff.js
rename to src/models/CourseStaff.js
diff --git a/models/Question.js b/src/models/Question.js
similarity index 100%
rename from models/Question.js
rename to src/models/Question.js
diff --git a/models/Queue.js b/src/models/Queue.js
similarity index 100%
rename from models/Queue.js
rename to src/models/Queue.js
diff --git a/models/User.js b/src/models/User.js
similarity index 100%
rename from models/User.js
rename to src/models/User.js
diff --git a/models/index.js b/src/models/index.js
similarity index 100%
rename from models/index.js
rename to src/models/index.js
diff --git a/pages/_document.js b/src/pages/_document.js
similarity index 100%
rename from pages/_document.js
rename to src/pages/_document.js
diff --git a/pages/_error.js b/src/pages/_error.js
similarity index 100%
rename from pages/_error.js
rename to src/pages/_error.js
diff --git a/pages/course.js b/src/pages/course.js
similarity index 100%
rename from pages/course.js
rename to src/pages/course.js
diff --git a/pages/courseStaff.js b/src/pages/courseStaff.js
similarity index 100%
rename from pages/courseStaff.js
rename to src/pages/courseStaff.js
diff --git a/pages/index.js b/src/pages/index.js
similarity index 100%
rename from pages/index.js
rename to src/pages/index.js
diff --git a/pages/queue.js b/src/pages/queue.js
similarity index 100%
rename from pages/queue.js
rename to src/pages/queue.js
diff --git a/pages/userSettings.js b/src/pages/userSettings.js
similarity index 100%
rename from pages/userSettings.js
rename to src/pages/userSettings.js
diff --git a/reducers/activeStaff.js b/src/reducers/activeStaff.js
similarity index 100%
rename from reducers/activeStaff.js
rename to src/reducers/activeStaff.js
diff --git a/reducers/courses.js b/src/reducers/courses.js
similarity index 100%
rename from reducers/courses.js
rename to src/reducers/courses.js
diff --git a/reducers/index.js b/src/reducers/index.js
similarity index 100%
rename from reducers/index.js
rename to src/reducers/index.js
diff --git a/reducers/normalize.js b/src/reducers/normalize.js
similarity index 100%
rename from reducers/normalize.js
rename to src/reducers/normalize.js
diff --git a/reducers/questions.js b/src/reducers/questions.js
similarity index 100%
rename from reducers/questions.js
rename to src/reducers/questions.js
diff --git a/reducers/queues.js b/src/reducers/queues.js
similarity index 100%
rename from reducers/queues.js
rename to src/reducers/queues.js
diff --git a/reducers/user.js b/src/reducers/user.js
similarity index 100%
rename from reducers/user.js
rename to src/reducers/user.js
diff --git a/reducers/users.js b/src/reducers/users.js
similarity index 100%
rename from reducers/users.js
rename to src/reducers/users.js
diff --git a/redux/makeStore.js b/src/redux/makeStore.js
similarity index 100%
rename from redux/makeStore.js
rename to src/redux/makeStore.js
diff --git a/redux/questionNotificationMiddleware.js b/src/redux/questionNotificationMiddleware.js
similarity index 100%
rename from redux/questionNotificationMiddleware.js
rename to src/redux/questionNotificationMiddleware.js
diff --git a/src/routes.js b/src/routes.js
new file mode 100644
index 0000000..5b05239
--- /dev/null
+++ b/src/routes.js
@@ -0,0 +1,13 @@
+const routes = require('next-routes')()
+const { withBaseUrl } = require('./util')
+
+routes
+  .add('index', withBaseUrl('/'))
+  .add('queue', withBaseUrl('/queue/:id'))
+  .add('createCourse', withBaseUrl('/course/create'))
+  .add('course', withBaseUrl('/course/:id'))
+  .add('courseStaff', withBaseUrl('/course/:id/staff'))
+  .add('createQueue', withBaseUrl('/course/:courseId/queue/create'))
+  .add('userSettings', withBaseUrl('/settings'))
+
+module.exports = routes
diff --git a/selectors/index.js b/src/selectors/index.js
similarity index 100%
rename from selectors/index.js
rename to src/selectors/index.js
diff --git a/server.js b/src/server.js
similarity index 94%
rename from server.js
rename to src/server.js
index 935aafe..5b756ca 100644
--- a/server.js
+++ b/src/server.js
@@ -17,7 +17,7 @@ const { baseUrl } = require('./util')
 const DEV = ['production', 'staging'].indexOf(process.env.NODE_ENV) === -1
 const PORT = process.env.PORT || 3000
 
-const nextApp = nextJs({ dev: DEV })
+const nextApp = nextJs({ dev: DEV, dir: DEV ? 'src' : 'build' })
 const handler = routes.getRequestHandler(nextApp)
 
 /* eslint-disable func-names */
diff --git a/socket/client.js b/src/socket/client.js
similarity index 100%
rename from socket/client.js
rename to src/socket/client.js
diff --git a/socket/server.js b/src/socket/server.js
similarity index 100%
rename from socket/server.js
rename to src/socket/server.js
diff --git a/static/fastparrot.gif b/src/static/fastparrot.gif
similarity index 100%
rename from static/fastparrot.gif
rename to src/static/fastparrot.gif
diff --git a/static/favicon.ico b/src/static/favicon.ico
similarity index 100%
rename from static/favicon.ico
rename to src/static/favicon.ico
diff --git a/static/manifest.json b/src/static/manifest.json
similarity index 50%
rename from static/manifest.json
rename to src/static/manifest.json
index fcf68f6..8d53a4c 100644
--- a/static/manifest.json
+++ b/src/static/manifest.json
@@ -3,9 +3,11 @@
   "short_name": "Queues",
   "display": "standalone",
   "background_color": "#fff",
-  "icons": [{
-    "src": "notif_icon.png",
-    "sizes": "128x128",
-    "type": "image/png"
-  }]
+  "icons": [
+    {
+      "src": "notif_icon.png",
+      "sizes": "128x128",
+      "type": "image/png"
+    }
+  ]
 }


Test patch:
diff --git a/actions/activeStaff.js b/src/actions/activeStaff.js
similarity index 100%
rename from actions/activeStaff.js
rename to src/actions/activeStaff.js
diff --git a/actions/axios.js b/src/actions/axios.js
similarity index 100%
rename from actions/axios.js
rename to src/actions/axios.js
diff --git a/actions/course.js b/src/actions/course.js
similarity index 100%
rename from actions/course.js
rename to src/actions/course.js
diff --git a/actions/question.js b/src/actions/question.js
similarity index 100%
rename from actions/question.js
rename to src/actions/question.js
diff --git a/actions/queue.js b/src/actions/queue.js
similarity index 100%
rename from actions/queue.js
rename to src/actions/queue.js
diff --git a/actions/user.js b/src/actions/user.js
similarity index 100%
rename from actions/user.js
rename to src/actions/user.js
diff --git a/actions/util.js b/src/actions/util.js
similarity index 100%
rename from actions/util.js
rename to src/actions/util.js
diff --git a/api/courses.js b/src/api/courses.js
similarity index 100%
rename from api/courses.js
rename to src/api/courses.js
diff --git a/api/courses.test.js b/src/api/courses.test.js
similarity index 99%
rename from api/courses.test.js
rename to src/api/courses.test.js
index c9f42ae..e2adb5d 100644
--- a/api/courses.test.js
+++ b/src/api/courses.test.js
@@ -1,7 +1,7 @@
 /* eslint-env jest */
 const request = require('supertest')
 const app = require('../app')
-const testutil = require('../testutil')
+const testutil = require('../../test/util')
 const { User } = require('../models')
 
 beforeEach(async () => {
diff --git a/api/questions.js b/src/api/questions.js
similarity index 100%
rename from api/questions.js
rename to src/api/questions.js
diff --git a/api/questions.test.js b/src/api/questions.test.js
similarity index 99%
rename from api/questions.test.js
rename to src/api/questions.test.js
index d80c311..257e37b 100644
--- a/api/questions.test.js
+++ b/src/api/questions.test.js
@@ -1,8 +1,7 @@
 /* eslint-env jest */
-
 const request = require('supertest')
 const app = require('../app')
-const testutil = require('../testutil')
+const testutil = require('../../test/util')
 const constants = require('../constants')
 const { Question } = require('../models')
 
diff --git a/api/queues.js b/src/api/queues.js
similarity index 100%
rename from api/queues.js
rename to src/api/queues.js
diff --git a/api/queues.test.js b/src/api/queues.test.js
similarity index 99%
rename from api/queues.test.js
rename to src/api/queues.test.js
index bdb7f7a..7e27dea 100644
--- a/api/queues.test.js
+++ b/src/api/queues.test.js
@@ -1,7 +1,7 @@
 /* eslint-env jest */
 const request = require('supertest')
 const app = require('../app')
-const testutil = require('../testutil')
+const testutil = require('../../test/util')
 
 beforeEach(async () => {
   await testutil.setupTestDb()
diff --git a/api/users.js b/src/api/users.js
similarity index 100%
rename from api/users.js
rename to src/api/users.js
diff --git a/api/users.test.js b/src/api/users.test.js
similarity index 98%
rename from api/users.test.js
rename to src/api/users.test.js
index 269a511..caa066c 100644
--- a/api/users.test.js
+++ b/src/api/users.test.js
@@ -1,7 +1,7 @@
 /* eslint-env jest */
 const request = require('supertest')
 const app = require('../app')
-const testutil = require('../testutil')
+const testutil = require('../../test/util')
 
 beforeAll(async () => {
   await testutil.setupTestDb()
diff --git a/api/util.js b/src/api/util.js
similarity index 100%
rename from api/util.js
rename to src/api/util.js
diff --git a/api/util.test.js b/src/api/util.test.js
similarity index 98%
rename from api/util.test.js
rename to src/api/util.test.js
index 4b3a28e..fe79b19 100644
--- a/api/util.test.js
+++ b/src/api/util.test.js
@@ -1,5 +1,5 @@
 /* eslint-env jest */
-const testutil = require('../testutil')
+const testutil = require('../../test/util')
 const util = require('./util')
 
 beforeAll(async () => {
diff --git a/app.js b/src/app.js
similarity index 100%
rename from app.js
rename to src/app.js
diff --git a/components/ActiveQuestionPanel.js b/src/components/ActiveQuestionPanel.js
similarity index 100%
rename from components/ActiveQuestionPanel.js
rename to src/components/ActiveQuestionPanel.js
diff --git a/components/AddStaff.js b/src/components/AddStaff.js
similarity index 100%
rename from components/AddStaff.js
rename to src/components/AddStaff.js
diff --git a/components/ConfirmCancelQuestionModal.js b/src/components/ConfirmCancelQuestionModal.js
similarity index 100%
rename from components/ConfirmCancelQuestionModal.js
rename to src/components/ConfirmCancelQuestionModal.js
diff --git a/components/ConfirmDeleteQuestionModal.js b/src/components/ConfirmDeleteQuestionModal.js
similarity index 100%
rename from components/ConfirmDeleteQuestionModal.js
rename to src/components/ConfirmDeleteQuestionModal.js
diff --git a/components/ConfirmDeleteQueueModal.js b/src/components/ConfirmDeleteQueueModal.js
similarity index 100%
rename from components/ConfirmDeleteQueueModal.js
rename to src/components/ConfirmDeleteQueueModal.js
diff --git a/components/ConfirmLeaveQueueModal.js b/src/components/ConfirmLeaveQueueModal.js
similarity index 100%
rename from components/ConfirmLeaveQueueModal.js
rename to src/components/ConfirmLeaveQueueModal.js
diff --git a/components/ConfirmModal.js b/src/components/ConfirmModal.js
similarity index 100%
rename from components/ConfirmModal.js
rename to src/components/ConfirmModal.js
diff --git a/components/CourseShortCodeInfo.js b/src/components/CourseShortCodeInfo.js
similarity index 100%
rename from components/CourseShortCodeInfo.js
rename to src/components/CourseShortCodeInfo.js
diff --git a/components/CourseStaffMember.js b/src/components/CourseStaffMember.js
similarity index 100%
rename from components/CourseStaffMember.js
rename to src/components/CourseStaffMember.js
diff --git a/components/DevWorkshopAd.js b/src/components/DevWorkshopAd.js
similarity index 100%
rename from components/DevWorkshopAd.js
rename to src/components/DevWorkshopAd.js
diff --git a/components/Footer.js b/src/components/Footer.js
similarity index 100%
rename from components/Footer.js
rename to src/components/Footer.js
diff --git a/components/Header.js b/src/components/Header.js
similarity index 100%
rename from components/Header.js
rename to src/components/Header.js
diff --git a/components/Layout.js b/src/components/Layout.js
similarity index 100%
rename from components/Layout.js
rename to src/components/Layout.js
diff --git a/components/Loading.js b/src/components/Loading.js
similarity index 100%
rename from components/Loading.js
rename to src/components/Loading.js
diff --git a/components/NewCourse.js b/src/components/NewCourse.js
similarity index 100%
rename from components/NewCourse.js
rename to src/components/NewCourse.js
diff --git a/components/NewQuestion.js b/src/components/NewQuestion.js
similarity index 100%
rename from components/NewQuestion.js
rename to src/components/NewQuestion.js
diff --git a/components/NewQuestion.test.js b/src/components/NewQuestion.test.js
similarity index 100%
rename from components/NewQuestion.test.js
rename to src/components/NewQuestion.test.js
diff --git a/components/NewQueue.js b/src/components/NewQueue.js
similarity index 100%
rename from components/NewQueue.js
rename to src/components/NewQueue.js
diff --git a/components/PageWithUser.js b/src/components/PageWithUser.js
similarity index 100%
rename from components/PageWithUser.js
rename to src/components/PageWithUser.js
diff --git a/components/ParrotText.js b/src/components/ParrotText.js
similarity index 100%
rename from components/ParrotText.js
rename to src/components/ParrotText.js
diff --git a/components/Question.js b/src/components/Question.js
similarity index 100%
rename from components/Question.js
rename to src/components/Question.js
diff --git a/components/Question.test.js b/src/components/Question.test.js
similarity index 100%
rename from components/Question.test.js
rename to src/components/Question.test.js
diff --git a/components/QuestionEdit.js b/src/components/QuestionEdit.js
similarity index 100%
rename from components/QuestionEdit.js
rename to src/components/QuestionEdit.js
diff --git a/components/QuestionFeedback.js b/src/components/QuestionFeedback.js
similarity index 100%
rename from components/QuestionFeedback.js
rename to src/components/QuestionFeedback.js
diff --git a/components/QuestionList.js b/src/components/QuestionList.js
similarity index 100%
rename from components/QuestionList.js
rename to src/components/QuestionList.js
diff --git a/components/QuestionNotificationsToggle.js b/src/components/QuestionNotificationsToggle.js
similarity index 100%
rename from components/QuestionNotificationsToggle.js
rename to src/components/QuestionNotificationsToggle.js
diff --git a/components/QuestionNotificationsToggleExplanationModal.js b/src/components/QuestionNotificationsToggleExplanationModal.js
similarity index 100%
rename from components/QuestionNotificationsToggleExplanationModal.js
rename to src/components/QuestionNotificationsToggleExplanationModal.js
diff --git a/components/QuestionPanel.js b/src/components/QuestionPanel.js
similarity index 100%
rename from components/QuestionPanel.js
rename to src/components/QuestionPanel.js
diff --git a/components/QuestionPanel.test.js b/src/components/QuestionPanel.test.js
similarity index 100%
rename from components/QuestionPanel.test.js
rename to src/components/QuestionPanel.test.js
diff --git a/components/QueueCard.js b/src/components/QueueCard.js
similarity index 100%
rename from components/QueueCard.js
rename to src/components/QueueCard.js
diff --git a/components/QueueCardList.js b/src/components/QueueCardList.js
similarity index 100%
rename from components/QueueCardList.js
rename to src/components/QueueCardList.js
diff --git a/components/QueueEdit.js b/src/components/QueueEdit.js
similarity index 100%
rename from components/QueueEdit.js
rename to src/components/QueueEdit.js
diff --git a/components/ShowForAdmin.js b/src/components/ShowForAdmin.js
similarity index 100%
rename from components/ShowForAdmin.js
rename to src/components/ShowForAdmin.js
diff --git a/components/ShowForCourseStaff.js b/src/components/ShowForCourseStaff.js
similarity index 100%
rename from components/ShowForCourseStaff.js
rename to src/components/ShowForCourseStaff.js
diff --git a/components/StaffMember.js b/src/components/StaffMember.js
similarity index 100%
rename from components/StaffMember.js
rename to src/components/StaffMember.js
diff --git a/components/StaffSidebar.js b/src/components/StaffSidebar.js
similarity index 100%
rename from components/StaffSidebar.js
rename to src/components/StaffSidebar.js
diff --git a/components/UserProfileSettings.js b/src/components/UserProfileSettings.js
similarity index 100%
rename from components/UserProfileSettings.js
rename to src/components/UserProfileSettings.js
diff --git a/config/config.json b/src/config/config.json
similarity index 100%
rename from config/config.json
rename to src/config/config.json
diff --git a/constants/ActionTypes.js b/src/constants/ActionTypes.js
similarity index 100%
rename from constants/ActionTypes.js
rename to src/constants/ActionTypes.js
diff --git a/constants/index.js b/src/constants/index.js
similarity index 100%
rename from constants/index.js
rename to src/constants/index.js
diff --git a/containers/NewQuestionContainer.js b/src/containers/NewQuestionContainer.js
similarity index 100%
rename from containers/NewQuestionContainer.js
rename to src/containers/NewQuestionContainer.js
diff --git a/containers/QuestionListContainer.js b/src/containers/QuestionListContainer.js
similarity index 100%
rename from containers/QuestionListContainer.js
rename to src/containers/QuestionListContainer.js
diff --git a/containers/QuestionPanelContainer.js b/src/containers/QuestionPanelContainer.js
similarity index 100%
rename from containers/QuestionPanelContainer.js
rename to src/containers/QuestionPanelContainer.js
diff --git a/containers/QueueCardListContainer.js b/src/containers/QueueCardListContainer.js
similarity index 100%
rename from containers/QueueCardListContainer.js
rename to src/containers/QueueCardListContainer.js
diff --git a/containers/UserProfileSettingsContainer.js b/src/containers/UserProfileSettingsContainer.js
similarity index 100%
rename from containers/UserProfileSettingsContainer.js
rename to src/containers/UserProfileSettingsContainer.js
diff --git a/middleware/authn.js b/src/middleware/authn.js
similarity index 100%
rename from middleware/authn.js
rename to src/middleware/authn.js
diff --git a/middleware/authn.test.js b/src/middleware/authn.test.js
similarity index 98%
rename from middleware/authn.test.js
rename to src/middleware/authn.test.js
index 35be37f..eb457c7 100644
--- a/middleware/authn.test.js
+++ b/src/middleware/authn.test.js
@@ -1,6 +1,6 @@
 /* eslint-env jest */
 const authn = require('./authn')
-const testutil = require('../testutil')
+const testutil = require('../../test/util')
 const { User } = require('../models')
 
 beforeEach(async () => {
diff --git a/middleware/authnDev.js b/src/middleware/authnDev.js
similarity index 100%
rename from middleware/authnDev.js
rename to src/middleware/authnDev.js
diff --git a/middleware/authnDev.test.js b/src/middleware/authnDev.test.js
similarity index 97%
rename from middleware/authnDev.test.js
rename to src/middleware/authnDev.test.js
index 8af0953..91699d0 100644
--- a/middleware/authnDev.test.js
+++ b/src/middleware/authnDev.test.js
@@ -1,6 +1,6 @@
 /* eslint-env jest */
 const authnDev = require('./authnDev')
-const testutil = require('../testutil')
+const testutil = require('../../test/util')
 
 beforeEach(() => testutil.setupTestDb())
 afterEach(() => testutil.destroyTestDb())
diff --git a/middleware/authz.js b/src/middleware/authz.js
similarity index 100%
rename from middleware/authz.js
rename to src/middleware/authz.js
diff --git a/middleware/courseShortcodes.js b/src/middleware/courseShortcodes.js
similarity index 100%
rename from middleware/courseShortcodes.js
rename to src/middleware/courseShortcodes.js
diff --git a/middleware/handleError.js b/src/middleware/handleError.js
similarity index 100%
rename from middleware/handleError.js
rename to src/middleware/handleError.js
diff --git a/middleware/prettyPrintJson.js b/src/middleware/prettyPrintJson.js
similarity index 100%
rename from middleware/prettyPrintJson.js
rename to src/middleware/prettyPrintJson.js
diff --git a/middleware/redirectNoQueue.js b/src/middleware/redirectNoQueue.js
similarity index 100%
rename from middleware/redirectNoQueue.js
rename to src/middleware/redirectNoQueue.js
diff --git a/middleware/redirectNoQueue.test.js b/src/middleware/redirectNoQueue.test.js
similarity index 97%
rename from middleware/redirectNoQueue.test.js
rename to src/middleware/redirectNoQueue.test.js
index 232d55f..32fc9dd 100644
--- a/middleware/redirectNoQueue.test.js
+++ b/src/middleware/redirectNoQueue.test.js
@@ -1,6 +1,6 @@
 /* eslint-env jest */
 const redirectNoQueue = require('./redirectNoQueue')
-const testutil = require('../testutil')
+const testutil = require('../../test/util')
 const { Queue } = require('../models')
 
 beforeEach(async () => {
diff --git a/middleware/requireAdmin.js b/src/middleware/requireAdmin.js
similarity index 100%
rename from middleware/requireAdmin.js
rename to src/middleware/requireAdmin.js
diff --git a/middleware/requireAdmin.test.js b/src/middleware/requireAdmin.test.js
similarity index 100%
rename from middleware/requireAdmin.test.js
rename to src/middleware/requireAdmin.test.js
diff --git a/middleware/requireCourseStaff.js b/src/middleware/requireCourseStaff.js
similarity index 100%
rename from middleware/requireCourseStaff.js
rename to src/middleware/requireCourseStaff.js
diff --git a/middleware/requireCourseStaff.test.js b/src/middleware/requireCourseStaff.test.js
similarity index 100%
rename from middleware/requireCourseStaff.test.js
rename to src/middleware/requireCourseStaff.test.js
diff --git a/middleware/requireCourseStaffForQueue.js b/src/middleware/requireCourseStaffForQueue.js
similarity index 100%
rename from middleware/requireCourseStaffForQueue.js
rename to src/middleware/requireCourseStaffForQueue.js
diff --git a/middleware/requireCourseStaffForQueue.test.js b/src/middleware/requireCourseStaffForQueue.test.js
similarity index 98%
rename from middleware/requireCourseStaffForQueue.test.js
rename to src/middleware/requireCourseStaffForQueue.test.js
index b038343..62cc8e7 100644
--- a/middleware/requireCourseStaffForQueue.test.js
+++ b/src/middleware/requireCourseStaffForQueue.test.js
@@ -1,6 +1,6 @@
 /* eslint-env jest */
 const requireCourseStaffForQueue = require('./requireCourseStaffForQueue')
-const testutil = require('../testutil')
+const testutil = require('../../test/util')
 
 beforeAll(async () => {
   await testutil.setupTestDb()
diff --git a/middleware/requireCourseStaffForQueueForQuestion.js b/src/middleware/requireCourseStaffForQueueForQuestion.js
similarity index 100%
rename from middleware/requireCourseStaffForQueueForQuestion.js
rename to src/middleware/requireCourseStaffForQueueForQuestion.js
diff --git a/middleware/requireCourseStaffForQueueForQuestion.test.js b/src/middleware/requireCourseStaffForQueueForQuestion.test.js
similarity index 98%
rename from middleware/requireCourseStaffForQueueForQuestion.test.js
rename to src/middleware/requireCourseStaffForQueueForQuestion.test.js
index 8ea0e11..b45002f 100644
--- a/middleware/requireCourseStaffForQueueForQuestion.test.js
+++ b/src/middleware/requireCourseStaffForQueueForQuestion.test.js
@@ -1,6 +1,6 @@
 /* eslint-env jest */
 const requireCourseStaffForQueueForQuestion = require('./requireCourseStaffForQueueForQuestion')
-const testutil = require('../testutil')
+const testutil = require('../../test/util')
 
 beforeAll(async () => {
   await testutil.setupTestDb()
diff --git a/static/notif_icon.png b/src/static/notif_icon.png
similarity index 100%
rename from static/notif_icon.png
rename to src/static/notif_icon.png
diff --git a/util/index.js b/src/util/index.js
similarity index 100%
rename from util/index.js
rename to src/util/index.js
diff --git a/util/logger.js b/src/util/logger.js
similarity index 100%
rename from util/logger.js
rename to src/util/logger.js
diff --git a/testSetup.js b/test/setup.js
similarity index 85%
rename from testSetup.js
rename to test/setup.js
index eaad39e..de7bad9 100644
--- a/testSetup.js
+++ b/test/setup.js
@@ -3,7 +3,7 @@
 import Enzyme from 'enzyme'
 import Adapter from 'enzyme-adapter-react-16'
 
-import { sequelize } from './models'
+import { sequelize } from '../src/models'
 
 Enzyme.configure({ adapter: new Adapter() })
 
diff --git a/testutil/index.js b/test/util.js
similarity index 97%
rename from testutil/index.js
rename to test/util.js
index 510cdb7..b4a06ca 100644
--- a/testutil/index.js
+++ b/test/util.js
@@ -1,4 +1,4 @@
-const models = require('../models')
+const models = require('../src/models')
 
 module.exports.setupTestDb = async () => {
   await models.sequelize.sync()