public inbox for [email protected]  
help / color / mirror / Atom feed
[pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature
20+ messages / 4 participants
[nested] [flat]

* [pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature
@ 2018-03-29 16:53  Rahul Soshte <[email protected]>
  0 siblings, 1 reply; 20+ messages in thread

From: Rahul Soshte @ 2018-03-29 16:53 UTC (permalink / raw)
  To: pgadmin-hackers

Hi,
When using save or save as feature if .sql is not provided this Patch
appends it.
as clearly mentioned in this link.

https://redmine.postgresql.org/issues/1998

I have ran pep8,regression and Jasmine tests too.

I have primarily changed these files
     web/pgadmin/tools/sqleditor/__init__.py
     web/pgadmin/tools/sqleditor/static/js/sqleditor.js
     web/pgadmin/tools/sqleditor/utils/save_query_to_file.py


Regards,
Rahul Soshte (Hunter)


Attachments:

  [text/x-patch] sqlappendextensionfinal.diff (331.4K, 3-sqlappendextensionfinal.diff)
  download | inline diff:
diff --git a/runtime/moc_LogWindow.cpp b/runtime/moc_LogWindow.cpp
new file mode 100644
index 00000000..1282690b
--- /dev/null
+++ b/runtime/moc_LogWindow.cpp
@@ -0,0 +1,93 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'LogWindow.h'
+**
+** Created by: The Qt Meta Object Compiler version 63 (Qt 4.8.7)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "LogWindow.h"
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'LogWindow.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 63
+#error "This file was generated using the moc from 4.8.7. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+static const uint qt_meta_data_LogWindow[] = {
+
+ // content:
+       6,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       1,   14, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+ // slots: signature, parameters, type, tag, flags
+      11,   10,   10,   10, 0x08,
+
+       0        // eod
+};
+
+static const char qt_meta_stringdata_LogWindow[] = {
+    "LogWindow\0\0reload()\0"
+};
+
+void LogWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        Q_ASSERT(staticMetaObject.cast(_o));
+        LogWindow *_t = static_cast<LogWindow *>(_o);
+        switch (_id) {
+        case 0: _t->reload(); break;
+        default: ;
+        }
+    }
+    Q_UNUSED(_a);
+}
+
+const QMetaObjectExtraData LogWindow::staticMetaObjectExtraData = {
+    0,  qt_static_metacall 
+};
+
+const QMetaObject LogWindow::staticMetaObject = {
+    { &QDialog::staticMetaObject, qt_meta_stringdata_LogWindow,
+      qt_meta_data_LogWindow, &staticMetaObjectExtraData }
+};
+
+#ifdef Q_NO_DATA_RELOCATION
+const QMetaObject &LogWindow::getStaticMetaObject() { return staticMetaObject; }
+#endif //Q_NO_DATA_RELOCATION
+
+const QMetaObject *LogWindow::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;
+}
+
+void *LogWindow::qt_metacast(const char *_clname)
+{
+    if (!_clname) return 0;
+    if (!strcmp(_clname, qt_meta_stringdata_LogWindow))
+        return static_cast<void*>(const_cast< LogWindow*>(this));
+    return QDialog::qt_metacast(_clname);
+}
+
+int LogWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QDialog::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        if (_id < 1)
+            qt_static_metacall(this, _c, _id, _a);
+        _id -= 1;
+    }
+    return _id;
+}
+QT_END_MOC_NAMESPACE
diff --git a/runtime/ui_LogWindow.h b/runtime/ui_LogWindow.h
new file mode 100644
index 00000000..aa85cfbf
--- /dev/null
+++ b/runtime/ui_LogWindow.h
@@ -0,0 +1,103 @@
+/********************************************************************************
+** Form generated from reading UI file 'LogWindow.ui'
+**
+** Created by: Qt User Interface Compiler version 4.8.7
+**
+** WARNING! All changes made in this file will be lost when recompiling UI file!
+********************************************************************************/
+
+#ifndef UI_LOGWINDOW_H
+#define UI_LOGWINDOW_H
+
+#include <QtCore/QVariant>
+#include <QtGui/QAction>
+#include <QtGui/QApplication>
+#include <QtGui/QButtonGroup>
+#include <QtGui/QDialog>
+#include <QtGui/QHBoxLayout>
+#include <QtGui/QHeaderView>
+#include <QtGui/QLabel>
+#include <QtGui/QPlainTextEdit>
+#include <QtGui/QPushButton>
+#include <QtGui/QVBoxLayout>
+
+QT_BEGIN_NAMESPACE
+
+class Ui_LogWindow
+{
+public:
+    QVBoxLayout *verticalLayout;
+    QPlainTextEdit *textLog;
+    QHBoxLayout *horizontalLayout;
+    QPushButton *btnReload;
+    QLabel *lblStatus;
+    QPushButton *btnClose;
+
+    void setupUi(QDialog *LogWindow)
+    {
+        if (LogWindow->objectName().isEmpty())
+            LogWindow->setObjectName(QString::fromUtf8("LogWindow"));
+        LogWindow->resize(800, 500);
+        verticalLayout = new QVBoxLayout(LogWindow);
+        verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+        textLog = new QPlainTextEdit(LogWindow);
+        textLog->setObjectName(QString::fromUtf8("textLog"));
+        QFont font;
+        font.setFamily(QString::fromUtf8("Courier"));
+        textLog->setFont(font);
+        textLog->setReadOnly(true);
+        textLog->setPlainText(QString::fromUtf8(""));
+        textLog->setCenterOnScroll(false);
+
+        verticalLayout->addWidget(textLog);
+
+        horizontalLayout = new QHBoxLayout();
+        horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
+        btnReload = new QPushButton(LogWindow);
+        btnReload->setObjectName(QString::fromUtf8("btnReload"));
+
+        horizontalLayout->addWidget(btnReload);
+
+        lblStatus = new QLabel(LogWindow);
+        lblStatus->setObjectName(QString::fromUtf8("lblStatus"));
+        QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+        sizePolicy.setHorizontalStretch(0);
+        sizePolicy.setVerticalStretch(0);
+        sizePolicy.setHeightForWidth(lblStatus->sizePolicy().hasHeightForWidth());
+        lblStatus->setSizePolicy(sizePolicy);
+
+        horizontalLayout->addWidget(lblStatus);
+
+        btnClose = new QPushButton(LogWindow);
+        btnClose->setObjectName(QString::fromUtf8("btnClose"));
+
+        horizontalLayout->addWidget(btnClose);
+
+
+        verticalLayout->addLayout(horizontalLayout);
+
+
+        retranslateUi(LogWindow);
+        QObject::connect(btnReload, SIGNAL(clicked()), LogWindow, SLOT(reload()));
+        QObject::connect(btnClose, SIGNAL(clicked()), LogWindow, SLOT(close()));
+
+        QMetaObject::connectSlotsByName(LogWindow);
+    } // setupUi
+
+    void retranslateUi(QDialog *LogWindow)
+    {
+        LogWindow->setWindowTitle(QApplication::translate("LogWindow", "Dialog", 0, QApplication::UnicodeUTF8));
+        btnReload->setText(QApplication::translate("LogWindow", "Reload", 0, QApplication::UnicodeUTF8));
+        lblStatus->setText(QString());
+        btnClose->setText(QApplication::translate("LogWindow", "Close", 0, QApplication::UnicodeUTF8));
+    } // retranslateUi
+
+};
+
+namespace Ui {
+    class LogWindow: public Ui_LogWindow {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // UI_LOGWINDOW_H
diff --git a/web/migrations/versions/37148d5aa14e_.py b/web/migrations/versions/37148d5aa14e_.py
new file mode 100644
index 00000000..bf33eda4
--- /dev/null
+++ b/web/migrations/versions/37148d5aa14e_.py
@@ -0,0 +1,25 @@
+
+"""empty message
+
+Revision ID: 37148d5aa14e
+Revises: 50aad68f99c2
+Create Date: 2018-03-27 14:00:46.340287
+
+"""
+from alembic import op
+import sqlalchemy as sa
+
+
+# revision identifiers, used by Alembic.
+revision = '37148d5aa14e'
+down_revision = '50aad68f99c2'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+    pass
+
+
+def downgrade():
+    pass
diff --git a/web/pgadmin/tools/sqleditor/__init__.py b/web/pgadmin/tools/sqleditor/__init__.py
index 6f5d5b78..8c6ad6ad 100644
--- a/web/pgadmin/tools/sqleditor/__init__.py
+++ b/web/pgadmin/tools/sqleditor/__init__.py
@@ -40,6 +40,8 @@ from pgadmin.tools.sqleditor.utils.query_tool_preferences import \
     RegisterQueryToolPreferences
 from pgadmin.tools.sqleditor.utils.query_tool_fs_utils import \
     read_file_generator
+from pgadmin.tools.sqleditor.utils.save_query_to_file import \
+    SaveQueryToFile
 
 MODULE_NAME = 'sqleditor'
 
@@ -1378,52 +1380,12 @@ def save_file():
     if request.data:
         file_data = json.loads(request.data, encoding='utf-8')
 
-    # retrieve storage directory path
-    storage_manager_path = get_storage_directory()
-
-    # generate full path of file
-    file_path = unquote(file_data['file_name'])
-    if hasattr(str, 'decode'):
-        file_path = unquote(
-            file_data['file_name']
-        ).encode('utf-8').decode('utf-8')
-
-    try:
-        Filemanager.check_access_permission(storage_manager_path, file_path)
-    except Exception as e:
-        return internal_server_error(errormsg=str(e))
-
-    if storage_manager_path is not None:
-        file_path = os.path.join(
-            storage_manager_path,
-            file_path.lstrip('/').lstrip('\\')
-        )
-
-    if hasattr(str, 'decode'):
-        file_content = file_data['file_content']
-    else:
-        file_content = file_data['file_content'].encode()
-
-    # write to file
-    try:
-        with open(file_path, 'wb+') as output_file:
-            if hasattr(str, 'decode'):
-                output_file.write(file_content.encode('utf-8'))
-            else:
-                output_file.write(file_content)
-    except IOError as e:
-        if e.strerror == 'Permission denied':
-            err_msg = "Error: {0}".format(e.strerror)
-        else:
-            err_msg = "Error: {0}".format(e.strerror)
-        return internal_server_error(errormsg=err_msg)
-    except Exception as e:
-        err_msg = "Error: {0}".format(e.strerror)
-        return internal_server_error(errormsg=err_msg)
+    file_path = SaveQueryToFile(file_data)
 
     return make_json_response(
         data={
             'status': True,
+            'file_path': file_path,
         }
     )
 
diff --git a/web/pgadmin/tools/sqleditor/static/js/sqleditor.js b/web/pgadmin/tools/sqleditor/static/js/sqleditor.js
index 923ccead..9a96ccab 100644
--- a/web/pgadmin/tools/sqleditor/static/js/sqleditor.js
+++ b/web/pgadmin/tools/sqleditor/static/js/sqleditor.js
@@ -3083,7 +3083,7 @@ define('tools.querytool', [
           success: function(res) {
             if (res.data.status) {
               alertify.success(gettext('File saved successfully.'));
-              self.gridView.current_file = e;
+              self.gridView.current_file = res.data.file_path;
               self.setTitle(self.gridView.current_file.replace(/^.*[\\\/]/g, ''), true);
               // disable save button on file save
               $('#btn-save').prop('disabled', true);
diff --git a/web/pgadmin/tools/sqleditor/utils/save_query_to_file.py b/web/pgadmin/tools/sqleditor/utils/save_query_to_file.py
new file mode 100644
index 00000000..f4a8d3ce
--- /dev/null
+++ b/web/pgadmin/tools/sqleditor/utils/save_query_to_file.py
@@ -0,0 +1,63 @@
+import os
+from pgadmin.misc.file_manager import Filemanager
+from pgadmin.utils import get_storage_directory
+from pgadmin.utils.ajax import make_json_response, bad_request, \
+    success_return, internal_server_error, unauthorized
+
+try:
+    from urllib import unquote
+except ImportError:
+    from urllib.parse import unquote
+
+
+def SaveQueryToFile(file_data):
+    # retrieve storage directory path
+    storage_manager_path = get_storage_directory()
+
+    # generate full path of file
+    file_path = unquote(file_data['file_name'])
+    if hasattr(str, 'decode'):
+        file_path = unquote(
+            file_data['file_name']
+        ).encode('utf-8').decode('utf-8')
+
+    if not file_path.endswith('.sql'):
+        file_path = file_path + ".sql"
+
+    try:
+        Filemanager.check_access_permission(storage_manager_path, file_path)
+    except Exception as e:
+        return internal_server_error(errormsg=str(e))
+
+    # lstrip() returns a copy of the string
+    # in which all chars have been stripped
+    # from the beginning of the string (default whitespace characters).
+    if storage_manager_path is not None:
+        file_path = os.path.join(
+            storage_manager_path,
+            file_path.lstrip('/').lstrip('\\')
+        )
+
+    if hasattr(str, 'decode'):
+        file_content = file_data['file_content']
+    else:
+        file_content = file_data['file_content'].encode()
+
+    # write to file
+    try:
+        with open(file_path, 'wb+') as output_file:
+            if hasattr(str, 'decode'):
+                output_file.write(file_content.encode('utf-8'))
+                return file_path
+            else:
+                output_file.write(file_content)
+                return file_path
+    except IOError as e:
+        if e.strerror == 'Permission denied':
+            err_msg = "Error: {0}".format(e.strerror)
+        else:
+            err_msg = "Error: {0}".format(e.strerror)
+        return internal_server_error(errormsg=err_msg)
+    except Exception as e:
+        err_msg = "Error: {0}".format(e.strerror)
+        return internal_server_error(errormsg=err_msg)
diff --git a/web/pgadmin/tools/sqleditor/utils/tests/test_save_query_to_file.py b/web/pgadmin/tools/sqleditor/utils/tests/test_save_query_to_file.py
new file mode 100644
index 00000000..e69de29b
diff --git a/web/yarn-error.log b/web/yarn-error.log
new file mode 100644
index 00000000..a6a96145
--- /dev/null
+++ b/web/yarn-error.log
@@ -0,0 +1,8574 @@
+Arguments: 
+  /usr/bin/node /usr/share/yarn/bin/yarn.js run pep8
+
+PATH: 
+  /var/www/flask/pgadmin4/bin:/home/hunter/.local/share/umake/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
+
+Yarn version: 
+  1.5.1
+
+Node version: 
+  6.11.4
+
+Platform: 
+  linux x64
+
+npm manifest: 
+  {
+    "license": "PostgreSQL",
+    "devDependencies": {
+      "axios-mock-adapter": "^1.11.0",
+      "babel-core": "~6.24.0",
+      "babel-loader": "~7.1.2",
+      "babel-preset-airbnb": "^2.4.0",
+      "babel-preset-es2015": "~6.24.0",
+      "babel-preset-react": "~6.23.0",
+      "cross-env": "^5.0.1",
+      "eclint": "^2.3.0",
+      "enzyme": "^3.3.0",
+      "enzyme-adapter-react-16": "^1.1.1",
+      "enzyme-matchers": "^4.1.1",
+      "eslint": "3.19.0",
+      "eslint-plugin-react": "^6.10.3",
+      "extract-text-webpack-plugin": "^3.0.2",
+      "file-loader": "^0.11.2",
+      "image-webpack-loader": "^3.3.1",
+      "is-docker": "^1.1.0",
+      "jasmine-core": "~2.99.0",
+      "jasmine-enzyme": "~4.1.1",
+      "karma": "~2.0.0",
+      "karma-babel-preprocessor": "^7.0.0",
+      "karma-browserify": "~5.2.0",
+      "karma-chrome-launcher": "^2.2.0",
+      "karma-jasmine": "~1.1.1",
+      "karma-jasmine-html-reporter": "^0.2.2",
+      "karma-requirejs": "~1.1.0",
+      "karma-webpack": "~2.0.13",
+      "node-sass": "^4.5.3",
+      "optimize-css-assets-webpack-plugin": "^2.0.0",
+      "raw-loader": "^0.5.1",
+      "sass-loader": "^6.0.6",
+      "style-loader": "^0.18.2",
+      "uglifyjs-webpack-plugin": "^0.4.6",
+      "url-loader": "^0.5.9",
+      "webpack": "^3.0.0"
+    },
+    "dependencies": {
+      "acitree": "git+https://github.com/imsurinder90/jquery-aciTree.git#rc.7",
+      "alertifyjs": "^1.10.0",
+      "axios": "^0.16.1",
+      "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
+      "babel-polyfill": "^6.23.0",
+      "babel-preset-es2015-without-strict": "~0.0.4",
+      "babelify": "~7.3.0",
+      "backbone": "1.1.2",
+      "backform": "^0.2.0",
+      "backgrid": "^0.3.8",
+      "backgrid-filter": "^0.3.7",
+      "backgrid-select-all": "^0.3.5",
+      "backgrid-sizeable-columns": "^0.1.1",
+      "bignumber.js": "^4.0.2",
+      "bootstrap": "^3.3.7",
+      "bootstrap-datepicker": "^1.7.0",
+      "bootstrap-switch": "3.3.2",
+      "bowser": "1.6.1",
+      "browserify": "~14.1.0",
+      "codemirror": "^5.29.0",
+      "css-loader": "0.14.0",
+      "cssnano": "^3.10.0",
+      "dropzone": "^5.1.1",
+      "eonasdan-bootstrap-datetimepicker": "^4.17.47",
+      "exports-loader": "~0.6.4",
+      "flotr2": "^0.1.0",
+      "font-awesome": "^4.7.0",
+      "hard-source-webpack-plugin": "^0.4.9",
+      "immutability-helper": "^2.2.0",
+      "imports-loader": "^0.7.1",
+      "ip-address": "^5.8.9",
+      "jquery": "1.11.2",
+      "jquery-contextmenu": "^2.5.0",
+      "jquery-ui": "^1.12.1",
+      "moment": "^2.20.1",
+      "mousetrap": "^1.6.1",
+      "prop-types": "^15.5.10",
+      "react": "^16.2.0",
+      "react-dom": "^16.2.0",
+      "react-split-pane": "^0.1.63",
+      "requirejs": "~2.3.3",
+      "select2": "^4.0.3",
+      "shim-loader": "^1.0.1",
+      "slickgrid": "git+https://github.com/6pac/SlickGrid.git#2.3.7",
+      "snapsvg": "^0.5.1",
+      "spectrum-colorpicker": "^1.8.0",
+      "underscore": "^1.8.3",
+      "underscore.string": "^3.3.4",
+      "watchify": "~3.9.0",
+      "webcabin-docker": "^2.2.2"
+    },
+    "scripts": {
+      "linter": "node pga_eslint.js",
+      "webpacker": "yarn run webpack --config webpack.config.js --progress",
+      "webpacker:watch": "yarn run webpack --config webpack.config.js --progress --watch",
+      "bundle:watch": "yarn run linter && yarn run webpacker:watch",
+      "bundle:dev": "yarn run linter && yarn run webpacker",
+      "bundle": "cross-env NODE_ENV=production yarn run bundle:dev",
+      "test:karma-once": "yarn run linter && yarn run karma start --single-run",
+      "test:karma": "yarn run linter && yarn run karma start",
+      "test:feature": "yarn run bundle && python regression/runtests.py --pkg feature_tests",
+      "test": "yarn run test:karma-once && yarn run bundle && python regression/runtests.py",
+      "pep8": "pycodestyle --config=.pycodestyle ."
+    }
+  }
+
+yarn manifest: 
+  No manifest
+
+Lockfile: 
+  # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+  # yarn lockfile v1
+  
+  
+  "@types/node@*":
+    version "9.4.0"
+    resolved "https://registry.yarnpkg.com/@types/node/-/node-9.4.0.tgz#b85a0bcf1e1cc84eb4901b7e96966aedc6f078d1"
+  
+  [email protected]:
+    version "0.10.0"
+    resolved "https://registry.yarnpkg.com/FileSaver/-/FileSaver-0.10.0.tgz#7def3889944458042ef5df2e9064c88e3d2281c7"
+  
+  JSONStream@^1.0.3:
+    version "1.3.1"
+    resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.1.tgz#707f761e01dae9e16f1bcf93703b78c70966579a"
+    dependencies:
+      jsonparse "^1.2.0"
+      through ">=2.2.7 <3"
+  
+  abbrev@1:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
+  
+  abstract-leveldown@~2.6.0, abstract-leveldown@~2.6.1:
+    version "2.6.3"
+    resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8"
+    dependencies:
+      xtend "~4.0.0"
+  
+  accepts@~1.3.4:
+    version "1.3.5"
+    resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2"
+    dependencies:
+      mime-types "~2.1.18"
+      negotiator "0.6.1"
+  
+  "acitree@git+https://github.com/imsurinder90/jquery-aciTree.git#rc.7":
+    version "4.5.0-rc.7"
+    resolved "git+https://github.com/imsurinder90/jquery-aciTree.git#24dcd7536a008abe25da6adb7bfde8eeb53892f1"
+  
+  acorn-dynamic-import@^2.0.0:
+    version "2.0.2"
+    resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4"
+    dependencies:
+      acorn "^4.0.3"
+  
+  acorn-jsx@^3.0.0:
+    version "3.0.1"
+    resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
+    dependencies:
+      acorn "^3.0.4"
+  
+  acorn@^3.0.4:
+    version "3.3.0"
+    resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
+  
+  acorn@^4.0.3:
+    version "4.0.13"
+    resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
+  
+  acorn@^5.0.0, acorn@^5.1.1:
+    version "5.1.2"
+    resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.2.tgz#911cb53e036807cf0fa778dc5d370fbd864246d7"
+  
+  [email protected]:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/addressparser/-/addressparser-1.0.1.tgz#47afbe1a2a9262191db6838e4fd1d39b40821746"
+  
+  [email protected]:
+    version "0.8.2"
+    resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
+  
+  agent-base@2:
+    version "2.1.1"
+    resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.1.1.tgz#d6de10d5af6132d5bd692427d46fc538539094c7"
+    dependencies:
+      extend "~3.0.0"
+      semver "~5.0.1"
+  
+  ajv-keywords@^1.0.0:
+    version "1.5.1"
+    resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
+  
+  ajv-keywords@^2.0.0:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.0.tgz#a296e17f7bfae7c1ce4f7e0de53d29cb32162df0"
+  
+  ajv@^4.7.0, ajv@^4.9.1:
+    version "4.11.8"
+    resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
+    dependencies:
+      co "^4.6.0"
+      json-stable-stringify "^1.0.1"
+  
+  ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5:
+    version "5.2.3"
+    resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.3.tgz#c06f598778c44c6b161abafe3466b81ad1814ed2"
+    dependencies:
+      co "^4.6.0"
+      fast-deep-equal "^1.0.0"
+      json-schema-traverse "^0.3.0"
+      json-stable-stringify "^1.0.1"
+  
+  alertifyjs@^1.10.0:
+    version "1.11.0"
+    resolved "https://registry.yarnpkg.com/alertifyjs/-/alertifyjs-1.11.0.tgz#646f0bbd62edac5bb03cce2d03f4379c84ffde19"
+  
+  align-text@^0.1.1, align-text@^0.1.3:
+    version "0.1.4"
+    resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
+    dependencies:
+      kind-of "^3.0.2"
+      longest "^1.0.1"
+      repeat-string "^1.5.2"
+  
+  almond@~0.3.1:
+    version "0.3.3"
+    resolved "https://registry.yarnpkg.com/almond/-/almond-0.3.3.tgz#a0e7c95ac7624d6417b4494b1e68bff693168a20"
+  
+  alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
+  
+  amdefine@>=0.0.4:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+  
+  amqplib@^0.5.2:
+    version "0.5.2"
+    resolved "https://registry.yarnpkg.com/amqplib/-/amqplib-0.5.2.tgz#d2d7313c7ffaa4d10bcf1e6252de4591b6cc7b63"
+    dependencies:
+      bitsyntax "~0.0.4"
+      bluebird "^3.4.6"
+      buffer-more-ints "0.0.2"
+      readable-stream "1.x >=1.1.9"
+      safe-buffer "^5.0.1"
+  
+  ansi-escapes@^1.1.0:
+    version "1.4.0"
+    resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
+  
+  ansi-escapes@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-2.0.0.tgz#5bae52be424878dd9783e8910e3fc2922e83c81b"
+  
+  ansi-regex@^2.0.0:
+    version "2.1.1"
+    resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+  
+  ansi-regex@^3.0.0:
+    version "3.0.0"
+    resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+  
+  ansi-styles@^2.2.1:
+    version "2.2.1"
+    resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+  
+  ansi-styles@^3.1.0:
+    version "3.2.0"
+    resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88"
+    dependencies:
+      color-convert "^1.9.0"
+  
+  anymatch@^1.3.0:
+    version "1.3.2"
+    resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a"
+    dependencies:
+      micromatch "^2.1.5"
+      normalize-path "^2.0.0"
+  
+  aproba@^1.0.3:
+    version "1.2.0"
+    resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+  
+  archive-type@^3.0.0, archive-type@^3.0.1:
+    version "3.2.0"
+    resolved "https://registry.yarnpkg.com/archive-type/-/archive-type-3.2.0.tgz#9cd9c006957ebe95fadad5bd6098942a813737f6"
+    dependencies:
+      file-type "^3.1.0"
+  
+  are-we-there-yet@~1.1.2:
+    version "1.1.4"
+    resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
+    dependencies:
+      delegates "^1.0.0"
+      readable-stream "^2.0.6"
+  
+  argparse@^1.0.7:
+    version "1.0.9"
+    resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
+    dependencies:
+      sprintf-js "~1.0.2"
+  
+  arr-diff@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+    dependencies:
+      arr-flatten "^1.0.1"
+  
+  arr-flatten@^1.0.1:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+  
+  array-differ@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
+  
+  array-filter@~0.0.0:
+    version "0.0.1"
+    resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec"
+  
+  array-find-index@^1.0.1:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+  
+  array-map@~0.0.0:
+    version "0.0.0"
+    resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662"
+  
+  array-reduce@~0.0.0:
+    version "0.0.0"
+    resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b"
+  
+  array-slice@^0.2.3:
+    version "0.2.3"
+    resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5"
+  
+  array-union@^1.0.1:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+    dependencies:
+      array-uniq "^1.0.1"
+  
+  array-uniq@^1.0.0, array-uniq@^1.0.1, array-uniq@^1.0.2:
+    version "1.0.3"
+    resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+  
+  array-unique@^0.2.1:
+    version "0.2.1"
+    resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+  
+  array.prototype.find@^2.0.1:
+    version "2.0.4"
+    resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.4.tgz#556a5c5362c08648323ddaeb9de9d14bc1864c90"
+    dependencies:
+      define-properties "^1.1.2"
+      es-abstract "^1.7.0"
+  
+  arraybuffer.slice@~0.0.7:
+    version "0.0.7"
+    resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
+  
+  arrify@^1.0.0:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+  
+  asap@~2.0.3:
+    version "2.0.6"
+    resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+  
+  asn1.js@^4.0.0:
+    version "4.9.1"
+    resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40"
+    dependencies:
+      bn.js "^4.0.0"
+      inherits "^2.0.1"
+      minimalistic-assert "^1.0.0"
+  
+  asn1@~0.2.3:
+    version "0.2.3"
+    resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+  
+  [email protected], assert-plus@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+  
+  assert-plus@^0.2.0:
+    version "0.2.0"
+    resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+  
+  assert@^1.1.1, assert@^1.4.0:
+    version "1.4.1"
+    resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
+    dependencies:
+      util "0.10.3"
+  
+  [email protected]:
+    version "0.11.3"
+    resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.3.tgz#c20757fe72ee71278ea0ff3d87e5c2ca30d9edf8"
+  
+  astw@^2.0.0:
+    version "2.2.0"
+    resolved "https://registry.yarnpkg.com/astw/-/astw-2.2.0.tgz#7bd41784d32493987aeb239b6b4e1c57a873b917"
+    dependencies:
+      acorn "^4.0.3"
+  
+  async-each-series@^1.1.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/async-each-series/-/async-each-series-1.1.0.tgz#f42fd8155d38f21a5b8ea07c28e063ed1700b138"
+  
+  async-each@^1.0.0:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
+  
+  async-foreach@^0.1.3:
+    version "0.1.3"
+    resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
+  
+  async-limiter@~1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
+  
+  async@^2.0.0, async@^2.4.1:
+    version "2.6.0"
+    resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4"
+    dependencies:
+      lodash "^4.14.0"
+  
+  async@^2.1.2, async@^2.1.5:
+    version "2.5.0"
+    resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d"
+    dependencies:
+      lodash "^4.14.0"
+  
+  async@~2.1.2:
+    version "2.1.5"
+    resolved "https://registry.yarnpkg.com/async/-/async-2.1.5.tgz#e587c68580994ac67fc56ff86d3ac56bdbe810bc"
+    dependencies:
+      lodash "^4.14.0"
+  
+  asynckit@^0.4.0:
+    version "0.4.0"
+    resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+  
+  autoprefixer@^6.3.1:
+    version "6.7.7"
+    resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
+    dependencies:
+      browserslist "^1.7.6"
+      caniuse-db "^1.0.30000634"
+      normalize-range "^0.1.2"
+      num2fraction "^1.2.2"
+      postcss "^5.2.16"
+      postcss-value-parser "^3.2.3"
+  
+  aws-sign2@~0.6.0:
+    version "0.6.0"
+    resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+  
+  aws-sign2@~0.7.0:
+    version "0.7.0"
+    resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+  
+  aws4@^1.2.1, aws4@^1.6.0:
+    version "1.6.0"
+    resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
+  
+  axios-mock-adapter@^1.11.0:
+    version "1.11.0"
+    resolved "https://registry.yarnpkg.com/axios-mock-adapter/-/axios-mock-adapter-1.11.0.tgz#96e4bb2702cf6900f2ae5f9bdbef6e5dc86669e2"
+    dependencies:
+      deep-equal "^1.0.1"
+  
+  axios@^0.15.3:
+    version "0.15.3"
+    resolved "https://registry.yarnpkg.com/axios/-/axios-0.15.3.tgz#2c9d638b2e191a08ea1d6cc988eadd6ba5bdc053"
+    dependencies:
+      follow-redirects "1.0.0"
+  
+  axios@^0.16.1:
+    version "0.16.2"
+    resolved "https://registry.yarnpkg.com/axios/-/axios-0.16.2.tgz#ba4f92f17167dfbab40983785454b9ac149c3c6d"
+    dependencies:
+      follow-redirects "^1.2.3"
+      is-buffer "^1.1.5"
+  
+  babel-code-frame@^6.16.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
+    version "6.26.0"
+    resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+    dependencies:
+      chalk "^1.1.3"
+      esutils "^2.0.2"
+      js-tokens "^3.0.2"
+  
+  babel-core@^6.0.14, babel-core@~6.24.0:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83"
+    dependencies:
+      babel-code-frame "^6.22.0"
+      babel-generator "^6.24.1"
+      babel-helpers "^6.24.1"
+      babel-messages "^6.23.0"
+      babel-register "^6.24.1"
+      babel-runtime "^6.22.0"
+      babel-template "^6.24.1"
+      babel-traverse "^6.24.1"
+      babel-types "^6.24.1"
+      babylon "^6.11.0"
+      convert-source-map "^1.1.0"
+      debug "^2.1.1"
+      json5 "^0.5.0"
+      lodash "^4.2.0"
+      minimatch "^3.0.2"
+      path-is-absolute "^1.0.0"
+      private "^0.1.6"
+      slash "^1.0.0"
+      source-map "^0.5.0"
+  
+  babel-core@^6.26.0:
+    version "6.26.0"
+    resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8"
+    dependencies:
+      babel-code-frame "^6.26.0"
+      babel-generator "^6.26.0"
+      babel-helpers "^6.24.1"
+      babel-messages "^6.23.0"
+      babel-register "^6.26.0"
+      babel-runtime "^6.26.0"
+      babel-template "^6.26.0"
+      babel-traverse "^6.26.0"
+      babel-types "^6.26.0"
+      babylon "^6.18.0"
+      convert-source-map "^1.5.0"
+      debug "^2.6.8"
+      json5 "^0.5.1"
+      lodash "^4.17.4"
+      minimatch "^3.0.4"
+      path-is-absolute "^1.0.1"
+      private "^0.1.7"
+      slash "^1.0.0"
+      source-map "^0.5.6"
+  
+  babel-generator@^6.24.1, babel-generator@^6.26.0:
+    version "6.26.0"
+    resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5"
+    dependencies:
+      babel-messages "^6.23.0"
+      babel-runtime "^6.26.0"
+      babel-types "^6.26.0"
+      detect-indent "^4.0.0"
+      jsesc "^1.3.0"
+      lodash "^4.17.4"
+      source-map "^0.5.6"
+      trim-right "^1.0.1"
+  
+  babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664"
+    dependencies:
+      babel-helper-explode-assignable-expression "^6.24.1"
+      babel-runtime "^6.22.0"
+      babel-types "^6.24.1"
+  
+  babel-helper-builder-react-jsx@^6.24.1:
+    version "6.26.0"
+    resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0"
+    dependencies:
+      babel-runtime "^6.26.0"
+      babel-types "^6.26.0"
+      esutils "^2.0.2"
+  
+  babel-helper-call-delegate@^6.24.1:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d"
+    dependencies:
+      babel-helper-hoist-variables "^6.24.1"
+      babel-runtime "^6.22.0"
+      babel-traverse "^6.24.1"
+      babel-types "^6.24.1"
+  
+  babel-helper-define-map@^6.24.1:
+    version "6.26.0"
+    resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f"
+    dependencies:
+      babel-helper-function-name "^6.24.1"
+      babel-runtime "^6.26.0"
+      babel-types "^6.26.0"
+      lodash "^4.17.4"
+  
+  babel-helper-explode-assignable-expression@^6.24.1:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa"
+    dependencies:
+      babel-runtime "^6.22.0"
+      babel-traverse "^6.24.1"
+      babel-types "^6.24.1"
+  
+  babel-helper-function-name@^6.24.1:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9"
+    dependencies:
+      babel-helper-get-function-arity "^6.24.1"
+      babel-runtime "^6.22.0"
+      babel-template "^6.24.1"
+      babel-traverse "^6.24.1"
+      babel-types "^6.24.1"
+  
+  babel-helper-get-function-arity@^6.24.1:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d"
+    dependencies:
+      babel-runtime "^6.22.0"
+      babel-types "^6.24.1"
+  
+  babel-helper-hoist-variables@^6.24.1:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76"
+    dependencies:
+      babel-runtime "^6.22.0"
+      babel-types "^6.24.1"
+  
+  babel-helper-optimise-call-expression@^6.24.1:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257"
+    dependencies:
+      babel-runtime "^6.22.0"
+      babel-types "^6.24.1"
+  
+  babel-helper-regex@^6.24.1:
+    version "6.26.0"
+    resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72"
+    dependencies:
+      babel-runtime "^6.26.0"
+      babel-types "^6.26.0"
+      lodash "^4.17.4"
+  
+  babel-helper-remap-async-to-generator@^6.24.1:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b"
+    dependencies:
+      babel-helper-function-name "^6.24.1"
+      babel-runtime "^6.22.0"
+      babel-template "^6.24.1"
+      babel-traverse "^6.24.1"
+      babel-types "^6.24.1"
+  
+  babel-helper-replace-supers@^6.24.1:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a"
+    dependencies:
+      babel-helper-optimise-call-expression "^6.24.1"
+      babel-messages "^6.23.0"
+      babel-runtime "^6.22.0"
+      babel-template "^6.24.1"
+      babel-traverse "^6.24.1"
+      babel-types "^6.24.1"
+  
+  babel-helpers@^6.24.1:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
+    dependencies:
+      babel-runtime "^6.22.0"
+      babel-template "^6.24.1"
+  
+  babel-loader@~7.1.2:
+    version "7.1.2"
+    resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126"
+    dependencies:
+      find-cache-dir "^1.0.0"
+      loader-utils "^1.0.2"
+      mkdirp "^0.5.1"
+  
+  babel-messages@^6.23.0:
+    version "6.23.0"
+    resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
+    dependencies:
+      babel-runtime "^6.22.0"
+  
+  babel-plugin-check-es2015-constants@^6.22.0, babel-plugin-check-es2015-constants@^6.3.13:
+    version "6.22.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a"
+    dependencies:
+      babel-runtime "^6.22.0"
+  
+  babel-plugin-syntax-async-functions@^6.8.0:
+    version "6.13.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
+  
+  babel-plugin-syntax-exponentiation-operator@^6.8.0:
+    version "6.13.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
+  
+  babel-plugin-syntax-flow@^6.18.0:
+    version "6.18.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d"
+  
+  babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0:
+    version "6.18.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
+  
+  babel-plugin-syntax-object-rest-spread@^6.8.0:
+    version "6.13.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
+  
+  babel-plugin-syntax-trailing-function-commas@^6.22.0:
+    version "6.22.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3"
+  
+  babel-plugin-transform-async-to-generator@^6.22.0:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761"
+    dependencies:
+      babel-helper-remap-async-to-generator "^6.24.1"
+      babel-plugin-syntax-async-functions "^6.8.0"
+      babel-runtime "^6.22.0"
+  
+  babel-plugin-transform-es2015-arrow-functions@^6.22.0, babel-plugin-transform-es2015-arrow-functions@^6.3.13:
+    version "6.22.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
+    dependencies:
+      babel-runtime "^6.22.0"
+  
+  babel-plugin-transform-es2015-block-scoped-functions@^6.22.0, babel-plugin-transform-es2015-block-scoped-functions@^6.3.13:
+    version "6.22.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141"
+    dependencies:
+      babel-runtime "^6.22.0"
+  
+  babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es2015-block-scoping@^6.24.1, babel-plugin-transform-es2015-block-scoping@^6.9.0:
+    version "6.26.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f"
+    dependencies:
+      babel-runtime "^6.26.0"
+      babel-template "^6.26.0"
+      babel-traverse "^6.26.0"
+      babel-types "^6.26.0"
+      lodash "^4.17.4"
+  
+  babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-classes@^6.24.1, babel-plugin-transform-es2015-classes@^6.9.0:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db"
+    dependencies:
+      babel-helper-define-map "^6.24.1"
+      babel-helper-function-name "^6.24.1"
+      babel-helper-optimise-call-expression "^6.24.1"
+      babel-helper-replace-supers "^6.24.1"
+      babel-messages "^6.23.0"
+      babel-runtime "^6.22.0"
+      babel-template "^6.24.1"
+      babel-traverse "^6.24.1"
+      babel-types "^6.24.1"
+  
+  babel-plugin-transform-es2015-computed-properties@^6.22.0, babel-plugin-transform-es2015-computed-properties@^6.24.1, babel-plugin-transform-es2015-computed-properties@^6.3.13:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3"
+    dependencies:
+      babel-runtime "^6.22.0"
+      babel-template "^6.24.1"
+  
+  babel-plugin-transform-es2015-destructuring@^6.22.0, babel-plugin-transform-es2015-destructuring@^6.23.0, babel-plugin-transform-es2015-destructuring@^6.9.0:
+    version "6.23.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d"
+    dependencies:
+      babel-runtime "^6.22.0"
+  
+  babel-plugin-transform-es2015-duplicate-keys@^6.22.0, babel-plugin-transform-es2015-duplicate-keys@^6.24.1, babel-plugin-transform-es2015-duplicate-keys@^6.6.0:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e"
+    dependencies:
+      babel-runtime "^6.22.0"
+      babel-types "^6.24.1"
+  
+  babel-plugin-transform-es2015-for-of@^6.22.0, babel-plugin-transform-es2015-for-of@^6.23.0, babel-plugin-transform-es2015-for-of@^6.6.0:
+    version "6.23.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691"
+    dependencies:
+      babel-runtime "^6.22.0"
+  
+  babel-plugin-transform-es2015-function-name@^6.22.0, babel-plugin-transform-es2015-function-name@^6.24.1, babel-plugin-transform-es2015-function-name@^6.9.0:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b"
+    dependencies:
+      babel-helper-function-name "^6.24.1"
+      babel-runtime "^6.22.0"
+      babel-types "^6.24.1"
+  
+  babel-plugin-transform-es2015-literals@^6.22.0, babel-plugin-transform-es2015-literals@^6.3.13:
+    version "6.22.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e"
+    dependencies:
+      babel-runtime "^6.22.0"
+  
+  babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154"
+    dependencies:
+      babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
+      babel-runtime "^6.22.0"
+      babel-template "^6.24.1"
+  
+  babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1, babel-plugin-transform-es2015-modules-commonjs@^6.6.0:
+    version "6.26.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a"
+    dependencies:
+      babel-plugin-transform-strict-mode "^6.24.1"
+      babel-runtime "^6.26.0"
+      babel-template "^6.26.0"
+      babel-types "^6.26.0"
+  
+  babel-plugin-transform-es2015-modules-systemjs@^6.23.0, babel-plugin-transform-es2015-modules-systemjs@^6.24.1:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23"
+    dependencies:
+      babel-helper-hoist-variables "^6.24.1"
+      babel-runtime "^6.22.0"
+      babel-template "^6.24.1"
+  
+  babel-plugin-transform-es2015-modules-umd@^6.23.0, babel-plugin-transform-es2015-modules-umd@^6.24.1:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468"
+    dependencies:
+      babel-plugin-transform-es2015-modules-amd "^6.24.1"
+      babel-runtime "^6.22.0"
+      babel-template "^6.24.1"
+  
+  babel-plugin-transform-es2015-object-super@^6.22.0, babel-plugin-transform-es2015-object-super@^6.24.1, babel-plugin-transform-es2015-object-super@^6.3.13:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d"
+    dependencies:
+      babel-helper-replace-supers "^6.24.1"
+      babel-runtime "^6.22.0"
+  
+  babel-plugin-transform-es2015-parameters@^6.23.0, babel-plugin-transform-es2015-parameters@^6.24.1, babel-plugin-transform-es2015-parameters@^6.9.0:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b"
+    dependencies:
+      babel-helper-call-delegate "^6.24.1"
+      babel-helper-get-function-arity "^6.24.1"
+      babel-runtime "^6.22.0"
+      babel-template "^6.24.1"
+      babel-traverse "^6.24.1"
+      babel-types "^6.24.1"
+  
+  babel-plugin-transform-es2015-shorthand-properties@^6.22.0, babel-plugin-transform-es2015-shorthand-properties@^6.24.1, babel-plugin-transform-es2015-shorthand-properties@^6.3.13:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0"
+    dependencies:
+      babel-runtime "^6.22.0"
+      babel-types "^6.24.1"
+  
+  babel-plugin-transform-es2015-spread@^6.22.0, babel-plugin-transform-es2015-spread@^6.3.13:
+    version "6.22.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"
+    dependencies:
+      babel-runtime "^6.22.0"
+  
+  babel-plugin-transform-es2015-sticky-regex@^6.22.0, babel-plugin-transform-es2015-sticky-regex@^6.24.1, babel-plugin-transform-es2015-sticky-regex@^6.3.13:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc"
+    dependencies:
+      babel-helper-regex "^6.24.1"
+      babel-runtime "^6.22.0"
+      babel-types "^6.24.1"
+  
+  babel-plugin-transform-es2015-template-literals@^6.22.0, babel-plugin-transform-es2015-template-literals@^6.6.0:
+    version "6.22.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"
+    dependencies:
+      babel-runtime "^6.22.0"
+  
+  babel-plugin-transform-es2015-typeof-symbol@^6.22.0, babel-plugin-transform-es2015-typeof-symbol@^6.23.0, babel-plugin-transform-es2015-typeof-symbol@^6.6.0:
+    version "6.23.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372"
+    dependencies:
+      babel-runtime "^6.22.0"
+  
+  babel-plugin-transform-es2015-unicode-regex@^6.22.0, babel-plugin-transform-es2015-unicode-regex@^6.24.1, babel-plugin-transform-es2015-unicode-regex@^6.3.13:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9"
+    dependencies:
+      babel-helper-regex "^6.24.1"
+      babel-runtime "^6.22.0"
+      regexpu-core "^2.0.0"
+  
+  babel-plugin-transform-es3-member-expression-literals@^6.22.0:
+    version "6.22.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-member-expression-literals/-/babel-plugin-transform-es3-member-expression-literals-6.22.0.tgz#733d3444f3ecc41bef8ed1a6a4e09657b8969ebb"
+    dependencies:
+      babel-runtime "^6.22.0"
+  
+  babel-plugin-transform-es3-property-literals@^6.22.0:
+    version "6.22.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-property-literals/-/babel-plugin-transform-es3-property-literals-6.22.0.tgz#b2078d5842e22abf40f73e8cde9cd3711abd5758"
+    dependencies:
+      babel-runtime "^6.22.0"
+  
+  babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e"
+    dependencies:
+      babel-helper-builder-binary-assignment-operator-visitor "^6.24.1"
+      babel-plugin-syntax-exponentiation-operator "^6.8.0"
+      babel-runtime "^6.22.0"
+  
+  babel-plugin-transform-flow-strip-types@^6.22.0:
+    version "6.22.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf"
+    dependencies:
+      babel-plugin-syntax-flow "^6.18.0"
+      babel-runtime "^6.22.0"
+  
+  babel-plugin-transform-jscript@^6.22.0:
+    version "6.22.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-jscript/-/babel-plugin-transform-jscript-6.22.0.tgz#6e8af12b7aba49e0a809152616ac05690b3352dc"
+    dependencies:
+      babel-runtime "^6.22.0"
+  
+  babel-plugin-transform-object-rest-spread@^6.23.0:
+    version "6.26.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06"
+    dependencies:
+      babel-plugin-syntax-object-rest-spread "^6.8.0"
+      babel-runtime "^6.26.0"
+  
+  babel-plugin-transform-react-display-name@^6.23.0:
+    version "6.25.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1"
+    dependencies:
+      babel-runtime "^6.22.0"
+  
+  babel-plugin-transform-react-jsx-self@^6.22.0:
+    version "6.22.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e"
+    dependencies:
+      babel-plugin-syntax-jsx "^6.8.0"
+      babel-runtime "^6.22.0"
+  
+  babel-plugin-transform-react-jsx-source@^6.22.0:
+    version "6.22.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6"
+    dependencies:
+      babel-plugin-syntax-jsx "^6.8.0"
+      babel-runtime "^6.22.0"
+  
+  babel-plugin-transform-react-jsx@^6.23.0, babel-plugin-transform-react-jsx@^6.24.1:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3"
+    dependencies:
+      babel-helper-builder-react-jsx "^6.24.1"
+      babel-plugin-syntax-jsx "^6.8.0"
+      babel-runtime "^6.22.0"
+  
+  babel-plugin-transform-regenerator@^6.22.0, babel-plugin-transform-regenerator@^6.24.1, babel-plugin-transform-regenerator@^6.9.0:
+    version "6.26.0"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f"
+    dependencies:
+      regenerator-transform "^0.10.0"
+  
+  babel-plugin-transform-strict-mode@^6.24.1:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
+    dependencies:
+      babel-runtime "^6.22.0"
+      babel-types "^6.24.1"
+  
+  babel-polyfill@^6.23.0:
+    version "6.26.0"
+    resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153"
+    dependencies:
+      babel-runtime "^6.26.0"
+      core-js "^2.5.0"
+      regenerator-runtime "^0.10.5"
+  
+  babel-preset-airbnb@^2.4.0:
+    version "2.4.0"
+    resolved "https://registry.yarnpkg.com/babel-preset-airbnb/-/babel-preset-airbnb-2.4.0.tgz#1b1476f3fafd3c7abc22fa97f932f9e021301450"
+    dependencies:
+      babel-plugin-syntax-trailing-function-commas "^6.22.0"
+      babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
+      babel-plugin-transform-es2015-template-literals "^6.22.0"
+      babel-plugin-transform-es3-member-expression-literals "^6.22.0"
+      babel-plugin-transform-es3-property-literals "^6.22.0"
+      babel-plugin-transform-exponentiation-operator "^6.24.1"
+      babel-plugin-transform-jscript "^6.22.0"
+      babel-plugin-transform-object-rest-spread "^6.23.0"
+      babel-preset-env "^1.5.2"
+      babel-preset-react "^6.24.1"
+      object.assign "^4.0.4"
+  
+  babel-preset-env@^1.5.2:
+    version "1.6.1"
+    resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48"
+    dependencies:
+      babel-plugin-check-es2015-constants "^6.22.0"
+      babel-plugin-syntax-trailing-function-commas "^6.22.0"
+      babel-plugin-transform-async-to-generator "^6.22.0"
+      babel-plugin-transform-es2015-arrow-functions "^6.22.0"
+      babel-plugin-transform-es2015-block-scoped-functions "^6.22.0"
+      babel-plugin-transform-es2015-block-scoping "^6.23.0"
+      babel-plugin-transform-es2015-classes "^6.23.0"
+      babel-plugin-transform-es2015-computed-properties "^6.22.0"
+      babel-plugin-transform-es2015-destructuring "^6.23.0"
+      babel-plugin-transform-es2015-duplicate-keys "^6.22.0"
+      babel-plugin-transform-es2015-for-of "^6.23.0"
+      babel-plugin-transform-es2015-function-name "^6.22.0"
+      babel-plugin-transform-es2015-literals "^6.22.0"
+      babel-plugin-transform-es2015-modules-amd "^6.22.0"
+      babel-plugin-transform-es2015-modules-commonjs "^6.23.0"
+      babel-plugin-transform-es2015-modules-systemjs "^6.23.0"
+      babel-plugin-transform-es2015-modules-umd "^6.23.0"
+      babel-plugin-transform-es2015-object-super "^6.22.0"
+      babel-plugin-transform-es2015-parameters "^6.23.0"
+      babel-plugin-transform-es2015-shorthand-properties "^6.22.0"
+      babel-plugin-transform-es2015-spread "^6.22.0"
+      babel-plugin-transform-es2015-sticky-regex "^6.22.0"
+      babel-plugin-transform-es2015-template-literals "^6.22.0"
+      babel-plugin-transform-es2015-typeof-symbol "^6.23.0"
+      babel-plugin-transform-es2015-unicode-regex "^6.22.0"
+      babel-plugin-transform-exponentiation-operator "^6.22.0"
+      babel-plugin-transform-regenerator "^6.22.0"
+      browserslist "^2.1.2"
+      invariant "^2.2.2"
+      semver "^5.3.0"
+  
+  babel-preset-es2015-without-strict@~0.0.4:
+    version "0.0.4"
+    resolved "https://registry.yarnpkg.com/babel-preset-es2015-without-strict/-/babel-preset-es2015-without-strict-0.0.4.tgz#88c9f36e79d4762c58347b1a698a07c35b6bda5d"
+    dependencies:
+      babel-plugin-check-es2015-constants "^6.3.13"
+      babel-plugin-transform-es2015-arrow-functions "^6.3.13"
+      babel-plugin-transform-es2015-block-scoped-functions "^6.3.13"
+      babel-plugin-transform-es2015-block-scoping "^6.9.0"
+      babel-plugin-transform-es2015-classes "^6.9.0"
+      babel-plugin-transform-es2015-computed-properties "^6.3.13"
+      babel-plugin-transform-es2015-destructuring "^6.9.0"
+      babel-plugin-transform-es2015-duplicate-keys "^6.6.0"
+      babel-plugin-transform-es2015-for-of "^6.6.0"
+      babel-plugin-transform-es2015-function-name "^6.9.0"
+      babel-plugin-transform-es2015-literals "^6.3.13"
+      babel-plugin-transform-es2015-modules-commonjs "^6.6.0"
+      babel-plugin-transform-es2015-object-super "^6.3.13"
+      babel-plugin-transform-es2015-parameters "^6.9.0"
+      babel-plugin-transform-es2015-shorthand-properties "^6.3.13"
+      babel-plugin-transform-es2015-spread "^6.3.13"
+      babel-plugin-transform-es2015-sticky-regex "^6.3.13"
+      babel-plugin-transform-es2015-template-literals "^6.6.0"
+      babel-plugin-transform-es2015-typeof-symbol "^6.6.0"
+      babel-plugin-transform-es2015-unicode-regex "^6.3.13"
+      babel-plugin-transform-regenerator "^6.9.0"
+  
+  babel-preset-es2015@~6.24.0:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939"
+    dependencies:
+      babel-plugin-check-es2015-constants "^6.22.0"
+      babel-plugin-transform-es2015-arrow-functions "^6.22.0"
+      babel-plugin-transform-es2015-block-scoped-functions "^6.22.0"
+      babel-plugin-transform-es2015-block-scoping "^6.24.1"
+      babel-plugin-transform-es2015-classes "^6.24.1"
+      babel-plugin-transform-es2015-computed-properties "^6.24.1"
+      babel-plugin-transform-es2015-destructuring "^6.22.0"
+      babel-plugin-transform-es2015-duplicate-keys "^6.24.1"
+      babel-plugin-transform-es2015-for-of "^6.22.0"
+      babel-plugin-transform-es2015-function-name "^6.24.1"
+      babel-plugin-transform-es2015-literals "^6.22.0"
+      babel-plugin-transform-es2015-modules-amd "^6.24.1"
+      babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
+      babel-plugin-transform-es2015-modules-systemjs "^6.24.1"
+      babel-plugin-transform-es2015-modules-umd "^6.24.1"
+      babel-plugin-transform-es2015-object-super "^6.24.1"
+      babel-plugin-transform-es2015-parameters "^6.24.1"
+      babel-plugin-transform-es2015-shorthand-properties "^6.24.1"
+      babel-plugin-transform-es2015-spread "^6.22.0"
+      babel-plugin-transform-es2015-sticky-regex "^6.24.1"
+      babel-plugin-transform-es2015-template-literals "^6.22.0"
+      babel-plugin-transform-es2015-typeof-symbol "^6.22.0"
+      babel-plugin-transform-es2015-unicode-regex "^6.24.1"
+      babel-plugin-transform-regenerator "^6.24.1"
+  
+  babel-preset-flow@^6.23.0:
+    version "6.23.0"
+    resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d"
+    dependencies:
+      babel-plugin-transform-flow-strip-types "^6.22.0"
+  
+  babel-preset-react@^6.24.1:
+    version "6.24.1"
+    resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380"
+    dependencies:
+      babel-plugin-syntax-jsx "^6.3.13"
+      babel-plugin-transform-react-display-name "^6.23.0"
+      babel-plugin-transform-react-jsx "^6.24.1"
+      babel-plugin-transform-react-jsx-self "^6.22.0"
+      babel-plugin-transform-react-jsx-source "^6.22.0"
+      babel-preset-flow "^6.23.0"
+  
+  babel-preset-react@~6.23.0:
+    version "6.23.0"
+    resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.23.0.tgz#eb7cee4de98a3f94502c28565332da9819455195"
+    dependencies:
+      babel-plugin-syntax-jsx "^6.3.13"
+      babel-plugin-transform-react-display-name "^6.23.0"
+      babel-plugin-transform-react-jsx "^6.23.0"
+      babel-plugin-transform-react-jsx-self "^6.22.0"
+      babel-plugin-transform-react-jsx-source "^6.22.0"
+      babel-preset-flow "^6.23.0"
+  
+  babel-register@^6.24.1, babel-register@^6.26.0:
+    version "6.26.0"
+    resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
+    dependencies:
+      babel-core "^6.26.0"
+      babel-runtime "^6.26.0"
+      core-js "^2.5.0"
+      home-or-tmp "^2.0.0"
+      lodash "^4.17.4"
+      mkdirp "^0.5.1"
+      source-map-support "^0.4.15"
+  
+  babel-runtime@^6.0.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
+    version "6.26.0"
+    resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+    dependencies:
+      core-js "^2.4.0"
+      regenerator-runtime "^0.11.0"
+  
+  babel-template@^6.24.1, babel-template@^6.26.0:
+    version "6.26.0"
+    resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
+    dependencies:
+      babel-runtime "^6.26.0"
+      babel-traverse "^6.26.0"
+      babel-types "^6.26.0"
+      babylon "^6.18.0"
+      lodash "^4.17.4"
+  
+  babel-traverse@^6.24.1, babel-traverse@^6.26.0:
+    version "6.26.0"
+    resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
+    dependencies:
+      babel-code-frame "^6.26.0"
+      babel-messages "^6.23.0"
+      babel-runtime "^6.26.0"
+      babel-types "^6.26.0"
+      babylon "^6.18.0"
+      debug "^2.6.8"
+      globals "^9.18.0"
+      invariant "^2.2.2"
+      lodash "^4.17.4"
+  
+  babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
+    version "6.26.0"
+    resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
+    dependencies:
+      babel-runtime "^6.26.0"
+      esutils "^2.0.2"
+      lodash "^4.17.4"
+      to-fast-properties "^1.0.3"
+  
+  babelify@~7.3.0:
+    version "7.3.0"
+    resolved "https://registry.yarnpkg.com/babelify/-/babelify-7.3.0.tgz#aa56aede7067fd7bd549666ee16dc285087e88e5"
+    dependencies:
+      babel-core "^6.0.14"
+      object-assign "^4.0.0"
+  
+  babylon@^6.11.0, babylon@^6.18.0:
+    version "6.18.0"
+    resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
+  
+  [email protected], "[email protected] || 1.2.3 || ~1.3.2":
+    version "1.1.2"
+    resolved "https://registry.yarnpkg.com/backbone/-/backbone-1.1.2.tgz#c2c04c66bf87268fb82c177acebeff7d37ba6f2d"
+    dependencies:
+      underscore ">=1.5.0"
+  
+  backbone@~1.2.3:
+    version "1.2.3"
+    resolved "https://registry.yarnpkg.com/backbone/-/backbone-1.2.3.tgz#c22cfd07fc86ebbeae61d18929ed115e999d65b9"
+    dependencies:
+      underscore ">=1.7.0"
+  
+  backform@^0.2.0:
+    version "0.2.0"
+    resolved "https://registry.yarnpkg.com/backform/-/backform-0.2.0.tgz#b14cb8deb08c863fc595a2bc505066e32a2ad4ce"
+  
+  backgrid-filter@^0.3.7:
+    version "0.3.7"
+    resolved "https://registry.yarnpkg.com/backgrid-filter/-/backgrid-filter-0.3.7.tgz#d4b19d0e707013d7f181f9e8c7febb4997d56f03"
+    dependencies:
+      backbone "~1.2.3"
+      backgrid "~0.3.7"
+      lunr "^0.7.0"
+      underscore "^1.8.3"
+  
+  backgrid-select-all@^0.3.5:
+    version "0.3.5"
+    resolved "https://registry.yarnpkg.com/backgrid-select-all/-/backgrid-select-all-0.3.5.tgz#143a800e5d95ff2ae5a84d78bf4fba41f9481e94"
+  
+  backgrid-sizeable-columns@^0.1.1:
+    version "0.1.1"
+    resolved "https://registry.yarnpkg.com/backgrid-sizeable-columns/-/backgrid-sizeable-columns-0.1.1.tgz#ec6fa592b263b390df1d83e566a48dca5036f02b"
+  
+  backgrid@^0.3.8, backgrid@~0.3.7:
+    version "0.3.8"
+    resolved "https://registry.yarnpkg.com/backgrid/-/backgrid-0.3.8.tgz#7d26816742d72c859cad39b13f19c9f27baffed7"
+    dependencies:
+      backbone "1.1.2 || 1.2.3 || ~1.3.2"
+      underscore "^1.8.0"
+  
+  [email protected]:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
+  
+  balanced-match@^0.4.2:
+    version "0.4.2"
+    resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+  
+  balanced-match@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+  
+  [email protected]:
+    version "0.1.5"
+    resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
+  
+  base64-js@^1.0.2:
+    version "1.2.1"
+    resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886"
+  
+  [email protected]:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6"
+  
+  bcrypt-pbkdf@^1.0.0:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
+    dependencies:
+      tweetnacl "^0.14.3"
+  
+  beeper@^1.0.0:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809"
+  
+  better-assert@~1.0.0:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522"
+    dependencies:
+      callsite "1.0.0"
+  
+  big.js@^3.1.3:
+    version "3.2.0"
+    resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
+  
+  bignumber.js@^2.4.0:
+    version "2.4.0"
+    resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-2.4.0.tgz#838a992da9f9d737e0f4b2db0be62bb09dd0c5e8"
+  
+  bignumber.js@^4.0.2:
+    version "4.1.0"
+    resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-4.1.0.tgz#db6f14067c140bd46624815a7916c92d9b6c24b1"
+  
+  bin-build@^2.0.0:
+    version "2.2.0"
+    resolved "https://registry.yarnpkg.com/bin-build/-/bin-build-2.2.0.tgz#11f8dd61f70ffcfa2bdcaa5b46f5e8fedd4221cc"
+    dependencies:
+      archive-type "^3.0.1"
+      decompress "^3.0.0"
+      download "^4.1.2"
+      exec-series "^1.0.0"
+      rimraf "^2.2.6"
+      tempfile "^1.0.0"
+      url-regex "^3.0.0"
+  
+  bin-check@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/bin-check/-/bin-check-2.0.0.tgz#86f8e6f4253893df60dc316957f5af02acb05930"
+    dependencies:
+      executable "^1.0.0"
+  
+  bin-version-check@^2.1.0:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/bin-version-check/-/bin-version-check-2.1.0.tgz#e4e5df290b9069f7d111324031efc13fdd11a5b0"
+    dependencies:
+      bin-version "^1.0.0"
+      minimist "^1.1.0"
+      semver "^4.0.3"
+      semver-truncate "^1.0.0"
+  
+  bin-version@^1.0.0:
+    version "1.0.4"
+    resolved "https://registry.yarnpkg.com/bin-version/-/bin-version-1.0.4.tgz#9eb498ee6fd76f7ab9a7c160436f89579435d78e"
+    dependencies:
+      find-versions "^1.0.0"
+  
+  bin-wrapper@^3.0.0, bin-wrapper@^3.0.1:
+    version "3.0.2"
+    resolved "https://registry.yarnpkg.com/bin-wrapper/-/bin-wrapper-3.0.2.tgz#67d3306262e4b1a5f2f88ee23464f6a655677aeb"
+    dependencies:
+      bin-check "^2.0.0"
+      bin-version-check "^2.1.0"
+      download "^4.0.0"
+      each-async "^1.1.1"
+      lazy-req "^1.0.0"
+      os-filter-obj "^1.0.0"
+  
+  binary-extensions@^1.0.0:
+    version "1.10.0"
+    resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0"
+  
+  bindings@~1.2.1:
+    version "1.2.1"
+    resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11"
+  
+  bitsyntax@~0.0.4:
+    version "0.0.4"
+    resolved "https://registry.yarnpkg.com/bitsyntax/-/bitsyntax-0.0.4.tgz#eb10cc6f82b8c490e3e85698f07e83d46e0cba82"
+    dependencies:
+      buffer-more-ints "0.0.2"
+  
+  bl@^1.0.0:
+    version "1.2.1"
+    resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.1.tgz#cac328f7bee45730d404b692203fcb590e172d5e"
+    dependencies:
+      readable-stream "^2.0.5"
+  
+  bl@~1.1.2:
+    version "1.1.2"
+    resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398"
+    dependencies:
+      readable-stream "~2.0.5"
+  
+  [email protected]:
+    version "0.0.4"
+    resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921"
+  
+  block-stream@*:
+    version "0.0.9"
+    resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+    dependencies:
+      inherits "~2.0.0"
+  
+  bluebird@^3.0.0, bluebird@^3.0.5, bluebird@^3.3.0:
+    version "3.5.0"
+    resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c"
+  
+  bluebird@^3.4.6:
+    version "3.5.1"
+    resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
+  
+  bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
+    version "4.11.8"
+    resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
+  
+  body-parser@^1.16.1:
+    version "1.18.2"
+    resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454"
+    dependencies:
+      bytes "3.0.0"
+      content-type "~1.0.4"
+      debug "2.6.9"
+      depd "~1.1.1"
+      http-errors "~1.6.2"
+      iconv-lite "0.4.19"
+      on-finished "~2.3.0"
+      qs "6.5.1"
+      raw-body "2.3.2"
+      type-is "~1.6.15"
+  
+  boolbase@~1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+  
+  [email protected]:
+    version "2.10.1"
+    resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+    dependencies:
+      hoek "2.x.x"
+  
+  [email protected]:
+    version "4.3.1"
+    resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31"
+    dependencies:
+      hoek "4.x.x"
+  
+  [email protected]:
+    version "5.2.0"
+    resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02"
+    dependencies:
+      hoek "4.x.x"
+  
+  bootstrap-datepicker@^1.7.0:
+    version "1.7.1"
+    resolved "https://registry.yarnpkg.com/bootstrap-datepicker/-/bootstrap-datepicker-1.7.1.tgz#4ee7faf34888dbec7834fbf9dbe7c4277e01ddaf"
+    dependencies:
+      jquery ">=1.7.1 <4.0.0"
+  
+  [email protected]:
+    version "3.3.2"
+    resolved "https://registry.yarnpkg.com/bootstrap-switch/-/bootstrap-switch-3.3.2.tgz#79ddb49fadc308fb731e257f95957af48996eea7"
+    dependencies:
+      jquery ">=1.9.0"
+  
+  bootstrap@^3.3, bootstrap@^3.3.7:
+    version "3.3.7"
+    resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-3.3.7.tgz#5a389394549f23330875a3b150656574f8a9eb71"
+  
+  [email protected]:
+    version "1.6.1"
+    resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.6.1.tgz#9157e9498f456e937173a2918f3b2161e5353eb3"
+  
+  bowser@^1.7.3:
+    version "1.7.3"
+    resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.7.3.tgz#504bdb43118ca8db9cbbadf28fd60f265af96e4f"
+  
+  brace-expansion@^1.1.7:
+    version "1.1.8"
+    resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
+    dependencies:
+      balanced-match "^1.0.0"
+      concat-map "0.0.1"
+  
+  braces@^0.1.2:
+    version "0.1.5"
+    resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6"
+    dependencies:
+      expand-range "^0.1.0"
+  
+  braces@^1.8.2:
+    version "1.8.5"
+    resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+    dependencies:
+      expand-range "^1.8.1"
+      preserve "^0.2.0"
+      repeat-element "^1.1.2"
+  
+  brorand@^1.0.1:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+  
+  browser-pack@^6.0.1:
+    version "6.0.2"
+    resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.0.2.tgz#f86cd6cef4f5300c8e63e07a4d512f65fbff4531"
+    dependencies:
+      JSONStream "^1.0.3"
+      combine-source-map "~0.7.1"
+      defined "^1.0.0"
+      through2 "^2.0.0"
+      umd "^3.0.0"
+  
+  browser-resolve@^1.11.0, browser-resolve@^1.7.0:
+    version "1.11.2"
+    resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
+    dependencies:
+      resolve "1.1.7"
+  
+  browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+    version "1.0.8"
+    resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.8.tgz#c8fa3b1b7585bb7ba77c5560b60996ddec6d5309"
+    dependencies:
+      buffer-xor "^1.0.3"
+      cipher-base "^1.0.0"
+      create-hash "^1.1.0"
+      evp_bytestokey "^1.0.3"
+      inherits "^2.0.1"
+      safe-buffer "^5.0.1"
+  
+  browserify-cipher@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a"
+    dependencies:
+      browserify-aes "^1.0.4"
+      browserify-des "^1.0.0"
+      evp_bytestokey "^1.0.0"
+  
+  browserify-des@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd"
+    dependencies:
+      cipher-base "^1.0.1"
+      des.js "^1.0.0"
+      inherits "^2.0.1"
+  
+  browserify-rsa@^4.0.0:
+    version "4.0.1"
+    resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+    dependencies:
+      bn.js "^4.1.0"
+      randombytes "^2.0.1"
+  
+  browserify-sign@^4.0.0:
+    version "4.0.4"
+    resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
+    dependencies:
+      bn.js "^4.1.1"
+      browserify-rsa "^4.0.0"
+      create-hash "^1.1.0"
+      create-hmac "^1.1.2"
+      elliptic "^6.0.0"
+      inherits "^2.0.1"
+      parse-asn1 "^5.0.0"
+  
+  browserify-zlib@^0.1.4, browserify-zlib@~0.1.2:
+    version "0.1.4"
+    resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
+    dependencies:
+      pako "~0.2.0"
+  
+  browserify-zlib@~0.2.0:
+    version "0.2.0"
+    resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+    dependencies:
+      pako "~1.0.5"
+  
+  browserify@^14.0.0, browserify@~14.1.0:
+    version "14.1.0"
+    resolved "https://registry.yarnpkg.com/browserify/-/browserify-14.1.0.tgz#0508cc1e7bf4c152312c2fa523e676c0b0b92311"
+    dependencies:
+      JSONStream "^1.0.3"
+      assert "^1.4.0"
+      browser-pack "^6.0.1"
+      browser-resolve "^1.11.0"
+      browserify-zlib "~0.1.2"
+      buffer "^5.0.2"
+      cached-path-relative "^1.0.0"
+      concat-stream "~1.5.1"
+      console-browserify "^1.1.0"
+      constants-browserify "~1.0.0"
+      crypto-browserify "^3.0.0"
+      defined "^1.0.0"
+      deps-sort "^2.0.0"
+      domain-browser "~1.1.0"
+      duplexer2 "~0.1.2"
+      events "~1.1.0"
+      glob "^7.1.0"
+      has "^1.0.0"
+      htmlescape "^1.1.0"
+      https-browserify "~0.0.0"
+      inherits "~2.0.1"
+      insert-module-globals "^7.0.0"
+      labeled-stream-splicer "^2.0.0"
+      module-deps "^4.0.8"
+      os-browserify "~0.1.1"
+      parents "^1.0.1"
+      path-browserify "~0.0.0"
+      process "~0.11.0"
+      punycode "^1.3.2"
+      querystring-es3 "~0.2.0"
+      read-only-stream "^2.0.0"
+      readable-stream "^2.0.2"
+      resolve "^1.1.4"
+      shasum "^1.0.0"
+      shell-quote "^1.6.1"
+      stream-browserify "^2.0.0"
+      stream-http "^2.0.0"
+      string_decoder "~0.10.0"
+      subarg "^1.0.0"
+      syntax-error "^1.1.1"
+      through2 "^2.0.0"
+      timers-browserify "^1.0.1"
+      tty-browserify "~0.0.0"
+      url "~0.11.0"
+      util "~0.10.1"
+      vm-browserify "~0.0.1"
+      xtend "^4.0.0"
+  
+  browserify@^14.5.0:
+    version "14.5.0"
+    resolved "https://registry.yarnpkg.com/browserify/-/browserify-14.5.0.tgz#0bbbce521acd6e4d1d54d8e9365008efb85a9cc5"
+    dependencies:
+      JSONStream "^1.0.3"
+      assert "^1.4.0"
+      browser-pack "^6.0.1"
+      browser-resolve "^1.11.0"
+      browserify-zlib "~0.2.0"
+      buffer "^5.0.2"
+      cached-path-relative "^1.0.0"
+      concat-stream "~1.5.1"
+      console-browserify "^1.1.0"
+      constants-browserify "~1.0.0"
+      crypto-browserify "^3.0.0"
+      defined "^1.0.0"
+      deps-sort "^2.0.0"
+      domain-browser "~1.1.0"
+      duplexer2 "~0.1.2"
+      events "~1.1.0"
+      glob "^7.1.0"
+      has "^1.0.0"
+      htmlescape "^1.1.0"
+      https-browserify "^1.0.0"
+      inherits "~2.0.1"
+      insert-module-globals "^7.0.0"
+      labeled-stream-splicer "^2.0.0"
+      module-deps "^4.0.8"
+      os-browserify "~0.3.0"
+      parents "^1.0.1"
+      path-browserify "~0.0.0"
+      process "~0.11.0"
+      punycode "^1.3.2"
+      querystring-es3 "~0.2.0"
+      read-only-stream "^2.0.0"
+      readable-stream "^2.0.2"
+      resolve "^1.1.4"
+      shasum "^1.0.0"
+      shell-quote "^1.6.1"
+      stream-browserify "^2.0.0"
+      stream-http "^2.0.0"
+      string_decoder "~1.0.0"
+      subarg "^1.0.0"
+      syntax-error "^1.1.1"
+      through2 "^2.0.0"
+      timers-browserify "^1.0.1"
+      tty-browserify "~0.0.0"
+      url "~0.11.0"
+      util "~0.10.1"
+      vm-browserify "~0.0.1"
+      xtend "^4.0.0"
+  
+  browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
+    version "1.7.7"
+    resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9"
+    dependencies:
+      caniuse-db "^1.0.30000639"
+      electron-to-chromium "^1.2.7"
+  
+  browserslist@^2.1.2:
+    version "2.11.3"
+    resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2"
+    dependencies:
+      caniuse-lite "^1.0.30000792"
+      electron-to-chromium "^1.3.30"
+  
+  buffer-equals@^1.0.4:
+    version "1.0.4"
+    resolved "https://registry.yarnpkg.com/buffer-equals/-/buffer-equals-1.0.4.tgz#0353b54fd07fd9564170671ae6f66b9cf10d27f5"
+  
+  [email protected]:
+    version "0.0.2"
+    resolved "https://registry.yarnpkg.com/buffer-more-ints/-/buffer-more-ints-0.0.2.tgz#26b3885d10fa13db7fc01aae3aab870199e0124c"
+  
+  buffer-to-vinyl@^1.0.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz#00f15faee3ab7a1dda2cde6d9121bffdd07b2262"
+    dependencies:
+      file-type "^3.1.0"
+      readable-stream "^2.0.2"
+      uuid "^2.0.1"
+      vinyl "^1.0.0"
+  
+  buffer-xor@^1.0.3:
+    version "1.0.3"
+    resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+  
+  buffer@^4.3.0:
+    version "4.9.1"
+    resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+    dependencies:
+      base64-js "^1.0.2"
+      ieee754 "^1.1.4"
+      isarray "^1.0.0"
+  
+  buffer@^5.0.2:
+    version "5.0.7"
+    resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.0.7.tgz#570a290b625cf2603290c1149223d27ccf04db97"
+    dependencies:
+      base64-js "^1.0.2"
+      ieee754 "^1.1.4"
+  
+  buffered-spawn@^3.3.2:
+    version "3.3.2"
+    resolved "https://registry.yarnpkg.com/buffered-spawn/-/buffered-spawn-3.3.2.tgz#97b9846c4e446aa23320b4a94c5209edd32dacbb"
+    dependencies:
+      cross-spawn "^4.0.0"
+  
+  bufferstreams@^1.1.1:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/bufferstreams/-/bufferstreams-1.1.1.tgz#0161373060ac5988eff99058731114f6e195d51e"
+    dependencies:
+      readable-stream "^2.0.2"
+  
+  [email protected]:
+    version "4.0.1"
+    resolved "https://registry.yarnpkg.com/buildmail/-/buildmail-4.0.1.tgz#877f7738b78729871c9a105e3b837d2be11a7a72"
+    dependencies:
+      addressparser "1.0.1"
+      libbase64 "0.1.0"
+      libmime "3.0.0"
+      libqp "1.1.0"
+      nodemailer-fetch "1.6.0"
+      nodemailer-shared "1.1.0"
+      punycode "1.4.1"
+  
+  builtin-modules@^1.0.0:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+  
+  builtin-status-codes@^3.0.0:
+    version "3.0.0"
+    resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+  
+  [email protected]:
+    version "3.0.0"
+    resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+  
+  cached-path-relative@^1.0.0:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.1.tgz#d09c4b52800aa4c078e2dd81a869aac90d2e54e7"
+  
+  caller-path@^0.1.0:
+    version "0.1.0"
+    resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
+    dependencies:
+      callsites "^0.2.0"
+  
+  [email protected]:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20"
+  
+  callsites@^0.2.0:
+    version "0.2.0"
+    resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
+  
+  camelcase-keys@^2.0.0:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+    dependencies:
+      camelcase "^2.0.0"
+      map-obj "^1.0.0"
+  
+  camelcase@^1.0.2:
+    version "1.2.1"
+    resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+  
+  camelcase@^2.0.0:
+    version "2.1.1"
+    resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+  
+  camelcase@^3.0.0:
+    version "3.0.0"
+    resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
+  
+  camelcase@^4.1.0:
+    version "4.1.0"
+    resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+  
+  caniuse-api@^1.5.2:
+    version "1.6.1"
+    resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"
+    dependencies:
+      browserslist "^1.3.6"
+      caniuse-db "^1.0.30000529"
+      lodash.memoize "^4.1.2"
+      lodash.uniq "^4.5.0"
+  
+  caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
+    version "1.0.30000738"
+    resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000738.tgz#84809abc49a390e5a8c224ab9369d3f8d01aa202"
+  
+  caniuse-lite@^1.0.30000792:
+    version "1.0.30000792"
+    resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000792.tgz#d0cea981f8118f3961471afbb43c9a1e5bbf0332"
+  
+  capture-stack-trace@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d"
+  
+  caseless@~0.11.0:
+    version "0.11.0"
+    resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
+  
+  caseless@~0.12.0:
+    version "0.12.0"
+    resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+  
+  caw@^1.0.1:
+    version "1.2.0"
+    resolved "https://registry.yarnpkg.com/caw/-/caw-1.2.0.tgz#ffb226fe7efc547288dc62ee3e97073c212d1034"
+    dependencies:
+      get-proxy "^1.0.1"
+      is-obj "^1.0.0"
+      object-assign "^3.0.0"
+      tunnel-agent "^0.4.0"
+  
+  center-align@^0.1.1:
+    version "0.1.3"
+    resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+    dependencies:
+      align-text "^0.1.3"
+      lazy-cache "^1.0.3"
+  
+  chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
+    version "1.1.3"
+    resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+    dependencies:
+      ansi-styles "^2.2.1"
+      escape-string-regexp "^1.0.2"
+      has-ansi "^2.0.0"
+      strip-ansi "^3.0.0"
+      supports-color "^2.0.0"
+  
+  chalk@^2.1.0:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e"
+    dependencies:
+      ansi-styles "^3.1.0"
+      escape-string-regexp "^1.0.5"
+      supports-color "^4.0.0"
+  
+  cheerio@^1.0.0-rc.2:
+    version "1.0.0-rc.2"
+    resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db"
+    dependencies:
+      css-select "~1.2.0"
+      dom-serializer "~0.1.0"
+      entities "~1.1.1"
+      htmlparser2 "^3.9.1"
+      lodash "^4.15.0"
+      parse5 "^3.0.1"
+  
+  chokidar@^1.0.0, chokidar@^1.4.1, chokidar@^1.7.0:
+    version "1.7.0"
+    resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
+    dependencies:
+      anymatch "^1.3.0"
+      async-each "^1.0.0"
+      glob-parent "^2.0.0"
+      inherits "^2.0.1"
+      is-binary-path "^1.0.0"
+      is-glob "^2.0.0"
+      path-is-absolute "^1.0.0"
+      readdirp "^2.0.0"
+    optionalDependencies:
+      fsevents "^1.0.0"
+  
+  chownr@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181"
+  
+  ci-info@^1.0.0:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.1.tgz#47b44df118c48d2597b56d342e7e25791060171a"
+  
+  cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+    version "1.0.4"
+    resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+    dependencies:
+      inherits "^2.0.1"
+      safe-buffer "^5.0.1"
+  
+  circular-json-es6@^2.0.1:
+    version "2.0.2"
+    resolved "https://registry.yarnpkg.com/circular-json-es6/-/circular-json-es6-2.0.2.tgz#e4f4a093e49fb4b6aba1157365746112a78bd344"
+  
+  circular-json@^0.3.1:
+    version "0.3.3"
+    resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
+  
+  circular-json@^0.5.1:
+    version "0.5.1"
+    resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.5.1.tgz#b8942a09e535863dc21b04417a91971e1d9cd91f"
+  
+  clap@^1.0.9:
+    version "1.2.3"
+    resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51"
+    dependencies:
+      chalk "^1.1.3"
+  
+  clean-css@^3.1.9:
+    version "3.4.28"
+    resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.28.tgz#bf1945e82fc808f55695e6ddeaec01400efd03ff"
+    dependencies:
+      commander "2.8.x"
+      source-map "0.4.x"
+  
+  cli-cursor@^1.0.1:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
+    dependencies:
+      restore-cursor "^1.0.1"
+  
+  cli-truncate@^1.1.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-1.1.0.tgz#2b2dfd83c53cfd3572b87fc4d430a808afb04086"
+    dependencies:
+      slice-ansi "^1.0.0"
+      string-width "^2.0.0"
+  
+  cli-width@^2.0.0:
+    version "2.2.0"
+    resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
+  
+  cliui@^2.1.0:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+    dependencies:
+      center-align "^0.1.1"
+      right-align "^0.1.1"
+      wordwrap "0.0.2"
+  
+  cliui@^3.2.0:
+    version "3.2.0"
+    resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
+    dependencies:
+      string-width "^1.0.1"
+      strip-ansi "^3.0.1"
+      wrap-ansi "^2.0.0"
+  
+  clone-buffer@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58"
+  
+  clone-deep@^0.3.0:
+    version "0.3.0"
+    resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.3.0.tgz#348c61ae9cdbe0edfe053d91ff4cc521d790ede8"
+    dependencies:
+      for-own "^1.0.0"
+      is-plain-object "^2.0.1"
+      kind-of "^3.2.2"
+      shallow-clone "^0.1.2"
+  
+  clone-stats@^0.0.1:
+    version "0.0.1"
+    resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1"
+  
+  clone-stats@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680"
+  
+  clone@^0.2.0:
+    version "0.2.0"
+    resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f"
+  
+  clone@^1.0.0, clone@^1.0.2:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
+  
+  clone@^2.1.1:
+    version "2.1.1"
+    resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb"
+  
+  cloneable-readable@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.0.0.tgz#a6290d413f217a61232f95e458ff38418cfb0117"
+    dependencies:
+      inherits "^2.0.1"
+      process-nextick-args "^1.0.6"
+      through2 "^2.0.1"
+  
+  [email protected]:
+    version "3.1.0"
+    resolved "https://registry.yarnpkg.com/co/-/co-3.1.0.tgz#4ea54ea5a08938153185e15210c68d9092bc1b78"
+  
+  co@^4.6.0:
+    version "4.6.0"
+    resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+  
+  co@~3.0.6:
+    version "3.0.6"
+    resolved "https://registry.yarnpkg.com/co/-/co-3.0.6.tgz#1445f226c5eb956138e68c9ac30167ea7d2e6bda"
+  
+  coa@~1.0.1:
+    version "1.0.4"
+    resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd"
+    dependencies:
+      q "^1.1.2"
+  
+  code-point-at@^1.0.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+  
+  codemirror@^5.29.0:
+    version "5.30.0"
+    resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.30.0.tgz#86e57dd5ea5535acbcf9c720797b4cefe05b5a70"
+  
+  color-convert@^1.3.0, color-convert@^1.9.0:
+    version "1.9.0"
+    resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a"
+    dependencies:
+      color-name "^1.1.1"
+  
+  color-name@^1.0.0, color-name@^1.1.1:
+    version "1.1.3"
+    resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+  
+  color-string@^0.3.0:
+    version "0.3.0"
+    resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991"
+    dependencies:
+      color-name "^1.0.0"
+  
+  color@^0.11.0:
+    version "0.11.4"
+    resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
+    dependencies:
+      clone "^1.0.2"
+      color-convert "^1.3.0"
+      color-string "^0.3.0"
+  
+  colormin@^1.0.5:
+    version "1.1.2"
+    resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
+    dependencies:
+      color "^0.11.0"
+      css-color-names "0.0.4"
+      has "^1.0.1"
+  
+  [email protected]:
+    version "0.5.1"
+    resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774"
+  
+  colors@^1.1.0, colors@~1.1.2:
+    version "1.1.2"
+    resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
+  
+  combine-lists@^1.0.0:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/combine-lists/-/combine-lists-1.0.1.tgz#458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6"
+    dependencies:
+      lodash "^4.5.0"
+  
+  combine-source-map@~0.7.1:
+    version "0.7.2"
+    resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.7.2.tgz#0870312856b307a87cc4ac486f3a9a62aeccc09e"
+    dependencies:
+      convert-source-map "~1.1.0"
+      inline-source-map "~0.6.0"
+      lodash.memoize "~3.0.3"
+      source-map "~0.5.3"
+  
+  combined-stream@^1.0.5, combined-stream@~1.0.5:
+    version "1.0.5"
+    resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
+    dependencies:
+      delayed-stream "~1.0.0"
+  
+  [email protected], commander@~2.8.1:
+    version "2.8.1"
+    resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4"
+    dependencies:
+      graceful-readlink ">= 1.0.0"
+  
+  commander@^2.9.0:
+    version "2.11.0"
+    resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563"
+  
+  commondir@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+  
+  [email protected]:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"
+  
+  [email protected]:
+    version "1.2.1"
+    resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
+  
+  [email protected]:
+    version "0.0.3"
+    resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
+  
+  [email protected]:
+    version "0.0.1"
+    resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+  
+  concat-stream@^1.4.6, concat-stream@^1.4.7:
+    version "1.6.0"
+    resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
+    dependencies:
+      inherits "^2.0.3"
+      readable-stream "^2.2.2"
+      typedarray "^0.0.6"
+  
+  concat-stream@^1.5.2, concat-stream@~1.5.0, concat-stream@~1.5.1:
+    version "1.5.2"
+    resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266"
+    dependencies:
+      inherits "~2.0.1"
+      readable-stream "~2.0.0"
+      typedarray "~0.0.5"
+  
+  connect@^3.6.0:
+    version "3.6.5"
+    resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.5.tgz#fb8dde7ba0763877d0ec9df9dac0b4b40e72c7da"
+    dependencies:
+      debug "2.6.9"
+      finalhandler "1.0.6"
+      parseurl "~1.3.2"
+      utils-merge "1.0.1"
+  
+  console-browserify@^1.1.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+    dependencies:
+      date-now "^0.1.4"
+  
+  console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+  
+  console-stream@^0.1.1:
+    version "0.1.1"
+    resolved "https://registry.yarnpkg.com/console-stream/-/console-stream-0.1.1.tgz#a095fe07b20465955f2fafd28b5d72bccd949d44"
+  
+  constants-browserify@^1.0.0, constants-browserify@~1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+  
+  content-type@~1.0.4:
+    version "1.0.4"
+    resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+  
+  convert-source-map@^1.1.0, convert-source-map@^1.1.1, convert-source-map@^1.1.3, convert-source-map@^1.5.0:
+    version "1.5.0"
+    resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5"
+  
+  convert-source-map@~1.1.0:
+    version "1.1.3"
+    resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860"
+  
+  [email protected]:
+    version "0.3.1"
+    resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
+  
+  core-js@^1.0.0:
+    version "1.2.7"
+    resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
+  
+  core-js@^2.2.0, core-js@^2.4.0, core-js@^2.5.0:
+    version "2.5.1"
+    resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b"
+  
+  [email protected], core-util-is@~1.0.0:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+  
+  create-ecdh@^4.0.0:
+    version "4.0.0"
+    resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d"
+    dependencies:
+      bn.js "^4.1.0"
+      elliptic "^6.0.0"
+  
+  create-error-class@^3.0.1:
+    version "3.0.2"
+    resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
+    dependencies:
+      capture-stack-trace "^1.0.0"
+  
+  create-hash@^1.1.0, create-hash@^1.1.2:
+    version "1.1.3"
+    resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd"
+    dependencies:
+      cipher-base "^1.0.1"
+      inherits "^2.0.1"
+      ripemd160 "^2.0.0"
+      sha.js "^2.4.0"
+  
+  create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
+    version "1.1.6"
+    resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06"
+    dependencies:
+      cipher-base "^1.0.3"
+      create-hash "^1.1.0"
+      inherits "^2.0.1"
+      ripemd160 "^2.0.0"
+      safe-buffer "^5.0.1"
+      sha.js "^2.4.8"
+  
+  cross-env@^5.0.1:
+    version "5.0.5"
+    resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.0.5.tgz#4383d364d9660873dd185b398af3bfef5efffef3"
+    dependencies:
+      cross-spawn "^5.1.0"
+      is-windows "^1.0.0"
+  
+  cross-spawn@^3.0.0:
+    version "3.0.1"
+    resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982"
+    dependencies:
+      lru-cache "^4.0.1"
+      which "^1.2.9"
+  
+  cross-spawn@^4.0.0:
+    version "4.0.2"
+    resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
+    dependencies:
+      lru-cache "^4.0.1"
+      which "^1.2.9"
+  
+  cross-spawn@^5.0.1, cross-spawn@^5.1.0:
+    version "5.1.0"
+    resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+    dependencies:
+      lru-cache "^4.0.1"
+      shebang-command "^1.2.0"
+      which "^1.2.9"
+  
+  [email protected]:
+    version "2.0.5"
+    resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+    dependencies:
+      boom "2.x.x"
+  
+  [email protected]:
+    version "3.1.2"
+    resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe"
+    dependencies:
+      boom "5.x.x"
+  
+  crypto-browserify@^3.0.0, crypto-browserify@^3.11.0:
+    version "3.11.1"
+    resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.1.tgz#948945efc6757a400d6e5e5af47194d10064279f"
+    dependencies:
+      browserify-cipher "^1.0.0"
+      browserify-sign "^4.0.0"
+      create-ecdh "^4.0.0"
+      create-hash "^1.1.0"
+      create-hmac "^1.1.0"
+      diffie-hellman "^5.0.0"
+      inherits "^2.0.1"
+      pbkdf2 "^3.0.3"
+      public-encrypt "^4.0.0"
+      randombytes "^2.0.0"
+  
+  [email protected]:
+    version "0.0.4"
+    resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
+  
+  css-in-js-utils@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-2.0.0.tgz#5af1dd70f4b06b331f48d22a3d86e0786c0b9435"
+    dependencies:
+      hyphenate-style-name "^1.0.2"
+  
+  [email protected]:
+    version "0.14.0"
+    resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.14.0.tgz#7e5acf45fc4d620dedda5b6de78f6738f1a2048b"
+    dependencies:
+      clean-css "^3.1.9"
+      fastparse "^1.0.0"
+      loader-utils "~0.2.2"
+      source-list-map "^0.1.4"
+  
+  css-select@~1.2.0:
+    version "1.2.0"
+    resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
+    dependencies:
+      boolbase "~1.0.0"
+      css-what "2.1"
+      domutils "1.5.1"
+      nth-check "~1.0.1"
+  
+  [email protected]:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd"
+  
+  cssnano@^3.10.0:
+    version "3.10.0"
+    resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
+    dependencies:
+      autoprefixer "^6.3.1"
+      decamelize "^1.1.2"
+      defined "^1.0.0"
+      has "^1.0.1"
+      object-assign "^4.0.1"
+      postcss "^5.0.14"
+      postcss-calc "^5.2.0"
+      postcss-colormin "^2.1.8"
+      postcss-convert-values "^2.3.4"
+      postcss-discard-comments "^2.0.4"
+      postcss-discard-duplicates "^2.0.1"
+      postcss-discard-empty "^2.0.1"
+      postcss-discard-overridden "^0.1.1"
+      postcss-discard-unused "^2.2.1"
+      postcss-filter-plugins "^2.0.0"
+      postcss-merge-idents "^2.1.5"
+      postcss-merge-longhand "^2.0.1"
+      postcss-merge-rules "^2.0.3"
+      postcss-minify-font-values "^1.0.2"
+      postcss-minify-gradients "^1.0.1"
+      postcss-minify-params "^1.0.4"
+      postcss-minify-selectors "^2.0.4"
+      postcss-normalize-charset "^1.1.0"
+      postcss-normalize-url "^3.0.7"
+      postcss-ordered-values "^2.1.0"
+      postcss-reduce-idents "^2.2.2"
+      postcss-reduce-initial "^1.0.0"
+      postcss-reduce-transforms "^1.0.3"
+      postcss-svgo "^2.1.1"
+      postcss-unique-selectors "^2.0.2"
+      postcss-value-parser "^3.2.3"
+      postcss-zindex "^2.0.1"
+  
+  csso@~2.3.1:
+    version "2.3.2"
+    resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85"
+    dependencies:
+      clap "^1.0.9"
+      source-map "^0.5.3"
+  
+  currently-unhandled@^0.4.1:
+    version "0.4.1"
+    resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+    dependencies:
+      array-find-index "^1.0.1"
+  
+  custom-event@~1.0.0:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425"
+  
+  cwebp-bin@^3.1.0:
+    version "3.2.0"
+    resolved "https://registry.yarnpkg.com/cwebp-bin/-/cwebp-bin-3.2.0.tgz#ae02df453d8c15341b1d8d499a5226bcf3bf4a6f"
+    dependencies:
+      bin-build "^2.0.0"
+      bin-wrapper "^3.0.1"
+      logalot "^2.0.0"
+  
+  d@1:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
+    dependencies:
+      es5-ext "^0.10.9"
+  
+  dashdash@^1.12.0:
+    version "1.14.1"
+    resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+    dependencies:
+      assert-plus "^1.0.0"
+  
+  data-uri-to-buffer@1:
+    version "1.2.0"
+    resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835"
+  
+  date-format@^1.2.0:
+    version "1.2.0"
+    resolved "https://registry.yarnpkg.com/date-format/-/date-format-1.2.0.tgz#615e828e233dd1ab9bb9ae0950e0ceccfa6ecad8"
+  
+  date-now@^0.1.4:
+    version "0.1.4"
+    resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+  
+  dateformat@^2.0.0:
+    version "2.2.0"
+    resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062"
+  
+  debug@2, [email protected], debug@^2.1.1, debug@^2.2.0, debug@^2.4.5, debug@^2.6.8, debug@~2.6.4, debug@~2.6.6:
+    version "2.6.9"
+    resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+    dependencies:
+      ms "2.0.0"
+  
+  debug@^3.1.0, debug@~3.1.0:
+    version "3.1.0"
+    resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+    dependencies:
+      ms "2.0.0"
+  
+  debug@~2.2.0:
+    version "2.2.0"
+    resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
+    dependencies:
+      ms "0.7.1"
+  
+  decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
+    version "1.2.0"
+    resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+  
+  decompress-response@^3.2.0:
+    version "3.3.0"
+    resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
+    dependencies:
+      mimic-response "^1.0.0"
+  
+  decompress-tar@^3.0.0:
+    version "3.1.0"
+    resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-3.1.0.tgz#217c789f9b94450efaadc5c5e537978fc333c466"
+    dependencies:
+      is-tar "^1.0.0"
+      object-assign "^2.0.0"
+      strip-dirs "^1.0.0"
+      tar-stream "^1.1.1"
+      through2 "^0.6.1"
+      vinyl "^0.4.3"
+  
+  decompress-tarbz2@^3.0.0:
+    version "3.1.0"
+    resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz#8b23935681355f9f189d87256a0f8bdd96d9666d"
+    dependencies:
+      is-bzip2 "^1.0.0"
+      object-assign "^2.0.0"
+      seek-bzip "^1.0.3"
+      strip-dirs "^1.0.0"
+      tar-stream "^1.1.1"
+      through2 "^0.6.1"
+      vinyl "^0.4.3"
+  
+  decompress-targz@^3.0.0:
+    version "3.1.0"
+    resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-3.1.0.tgz#b2c13df98166268991b715d6447f642e9696f5a0"
+    dependencies:
+      is-gzip "^1.0.0"
+      object-assign "^2.0.0"
+      strip-dirs "^1.0.0"
+      tar-stream "^1.1.1"
+      through2 "^0.6.1"
+      vinyl "^0.4.3"
+  
+  decompress-unzip@^3.0.0:
+    version "3.4.0"
+    resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-3.4.0.tgz#61475b4152066bbe3fee12f9d629d15fe6478eeb"
+    dependencies:
+      is-zip "^1.0.0"
+      read-all-stream "^3.0.0"
+      stat-mode "^0.2.0"
+      strip-dirs "^1.0.0"
+      through2 "^2.0.0"
+      vinyl "^1.0.0"
+      yauzl "^2.2.1"
+  
+  decompress@^3.0.0:
+    version "3.0.0"
+    resolved "https://registry.yarnpkg.com/decompress/-/decompress-3.0.0.tgz#af1dd50d06e3bfc432461d37de11b38c0d991bed"
+    dependencies:
+      buffer-to-vinyl "^1.0.0"
+      concat-stream "^1.4.6"
+      decompress-tar "^3.0.0"
+      decompress-tarbz2 "^3.0.0"
+      decompress-targz "^3.0.0"
+      decompress-unzip "^3.0.0"
+      stream-combiner2 "^1.1.1"
+      vinyl-assign "^1.0.1"
+      vinyl-fs "^2.2.0"
+  
+  deep-equal-ident@^1.1.1:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/deep-equal-ident/-/deep-equal-ident-1.1.1.tgz#06f4b89e53710cd6cea4a7781c7a956642de8dc9"
+    dependencies:
+      lodash.isequal "^3.0"
+  
+  deep-equal@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
+  
+  deep-extend@~0.4.0:
+    version "0.4.2"
+    resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f"
+  
+  deep-is@~0.1.3:
+    version "0.1.3"
+    resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+  
+  deferred-leveldown@~1.2.1:
+    version "1.2.2"
+    resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz#3acd2e0b75d1669924bc0a4b642851131173e1eb"
+    dependencies:
+      abstract-leveldown "~2.6.0"
+  
+  define-properties@^1.1.2:
+    version "1.1.2"
+    resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
+    dependencies:
+      foreach "^2.0.5"
+      object-keys "^1.0.8"
+  
+  defined@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
+  
+  degenerator@~1.0.2:
+    version "1.0.4"
+    resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095"
+    dependencies:
+      ast-types "0.x.x"
+      escodegen "1.x.x"
+      esprima "3.x.x"
+  
+  del@^2.0.2:
+    version "2.2.2"
+    resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
+    dependencies:
+      globby "^5.0.0"
+      is-path-cwd "^1.0.0"
+      is-path-in-cwd "^1.0.0"
+      object-assign "^4.0.1"
+      pify "^2.0.0"
+      pinkie-promise "^2.0.0"
+      rimraf "^2.2.8"
+  
+  delayed-stream@~1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+  
+  delegates@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+  
+  [email protected], depd@~1.1.1:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359"
+  
+  deps-sort@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.0.tgz#091724902e84658260eb910748cccd1af6e21fb5"
+    dependencies:
+      JSONStream "^1.0.3"
+      shasum "^1.0.0"
+      subarg "^1.0.0"
+      through2 "^2.0.0"
+  
+  des.js@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
+    dependencies:
+      inherits "^2.0.1"
+      minimalistic-assert "^1.0.0"
+  
+  detect-indent@^4.0.0:
+    version "4.0.0"
+    resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
+    dependencies:
+      repeating "^2.0.0"
+  
+  detective@^4.0.0:
+    version "4.5.0"
+    resolved "https://registry.yarnpkg.com/detective/-/detective-4.5.0.tgz#6e5a8c6b26e6c7a254b1c6b6d7490d98ec91edd1"
+    dependencies:
+      acorn "^4.0.3"
+      defined "^1.0.0"
+  
+  di@^0.0.1:
+    version "0.0.1"
+    resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c"
+  
+  diffie-hellman@^5.0.0:
+    version "5.0.2"
+    resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e"
+    dependencies:
+      bn.js "^4.1.0"
+      miller-rabin "^4.0.0"
+      randombytes "^2.0.0"
+  
+  [email protected]:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a"
+  
+  doctrine@^1.2.2:
+    version "1.5.0"
+    resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+    dependencies:
+      esutils "^2.0.2"
+      isarray "^1.0.0"
+  
+  doctrine@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63"
+    dependencies:
+      esutils "^2.0.2"
+      isarray "^1.0.0"
+  
+  dom-serialize@^2.2.0:
+    version "2.2.1"
+    resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b"
+    dependencies:
+      custom-event "~1.0.0"
+      ent "~2.2.0"
+      extend "^3.0.0"
+      void-elements "^2.0.0"
+  
+  dom-serializer@0, dom-serializer@~0.1.0:
+    version "0.1.0"
+    resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
+    dependencies:
+      domelementtype "~1.1.1"
+      entities "~1.1.1"
+  
+  domain-browser@^1.1.1, domain-browser@~1.1.0:
+    version "1.1.7"
+    resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
+  
+  domelementtype@1, domelementtype@^1.3.0:
+    version "1.3.0"
+    resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
+  
+  domelementtype@~1.1.1:
+    version "1.1.3"
+    resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
+  
+  domhandler@^2.3.0:
+    version "2.4.1"
+    resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259"
+    dependencies:
+      domelementtype "1"
+  
+  [email protected], domutils@^1.5.1:
+    version "1.5.1"
+    resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+    dependencies:
+      dom-serializer "0"
+      domelementtype "1"
+  
+  double-ended-queue@^2.1.0-0:
+    version "2.1.0-0"
+    resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c"
+  
+  download@^4.0.0, download@^4.1.2:
+    version "4.4.3"
+    resolved "https://registry.yarnpkg.com/download/-/download-4.4.3.tgz#aa55fdad392d95d4b68e8c2be03e0c2aa21ba9ac"
+    dependencies:
+      caw "^1.0.1"
+      concat-stream "^1.4.7"
+      each-async "^1.0.0"
+      filenamify "^1.0.1"
+      got "^5.0.0"
+      gulp-decompress "^1.2.0"
+      gulp-rename "^1.2.0"
+      is-url "^1.2.0"
+      object-assign "^4.0.1"
+      read-all-stream "^3.0.0"
+      readable-stream "^2.0.2"
+      stream-combiner2 "^1.1.1"
+      vinyl "^1.0.0"
+      vinyl-fs "^2.2.0"
+      ware "^1.2.0"
+  
+  dropzone@^5.1.1:
+    version "5.1.1"
+    resolved "https://registry.yarnpkg.com/dropzone/-/dropzone-5.1.1.tgz#9f5b02fc4aa84e6466e046ba770bc82776ea49de"
+  
+  [email protected]:
+    version "0.0.2"
+    resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db"
+    dependencies:
+      readable-stream "~1.1.9"
+  
+  duplexer2@^0.1.2, duplexer2@^0.1.4, duplexer2@~0.1.0, duplexer2@~0.1.2:
+    version "0.1.4"
+    resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
+    dependencies:
+      readable-stream "^2.0.2"
+  
+  duplexer3@^0.1.4:
+    version "0.1.4"
+    resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
+  
+  duplexify@^3.2.0:
+    version "3.5.1"
+    resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.1.tgz#4e1516be68838bc90a49994f0b39a6e5960befcd"
+    dependencies:
+      end-of-stream "^1.0.0"
+      inherits "^2.0.1"
+      readable-stream "^2.0.0"
+      stream-shift "^1.0.0"
+  
+  each-async@^1.0.0, each-async@^1.1.1:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/each-async/-/each-async-1.1.1.tgz#dee5229bdf0ab6ba2012a395e1b869abf8813473"
+    dependencies:
+      onetime "^1.0.0"
+      set-immediate-shim "^1.0.0"
+  
+  ecc-jsbn@~0.1.1:
+    version "0.1.1"
+    resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+    dependencies:
+      jsbn "~0.1.0"
+  
+  eclint@^2.3.0:
+    version "2.4.3"
+    resolved "https://registry.yarnpkg.com/eclint/-/eclint-2.4.3.tgz#6ffc28d3f8803f9797c271214184786fbc5c88d1"
+    dependencies:
+      editorconfig "^0.14.1"
+      file-type "^6.1.0"
+      gulp-filter "^5.0.1"
+      gulp-gitignore "^0.1.0"
+      gulp-reporter "^2.2.1"
+      gulp-tap "^1.0.1"
+      gulp-util "^3.0.8"
+      linez "^4.1.4"
+      lodash "^4.17.4"
+      minimatch "^3.0.4"
+      os-locale "^2.1.0"
+      through2 "^2.0.3"
+      vinyl "^2.1.0"
+      vinyl-fs "^2.4.4"
+      y18n "^3.2.1"
+      yargs "^8.0.2"
+  
+  editorconfig@^0.14.1:
+    version "0.14.1"
+    resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.14.1.tgz#a7b3ce821e34250d5988c50946453d68d5e8fc3b"
+    dependencies:
+      bluebird "^3.0.5"
+      commander "^2.9.0"
+      lru-cache "^3.2.0"
+      semver "^5.1.0"
+      sigmund "^1.0.1"
+  
+  [email protected]:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+  
+  electron-to-chromium@^1.2.7:
+    version "1.3.22"
+    resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.22.tgz#4322d52c151406e3eaef74ad02676883e8416418"
+  
+  electron-to-chromium@^1.3.30:
+    version "1.3.32"
+    resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.32.tgz#11d0684c0840e003c4be8928f8ac5f35dbc2b4e6"
+  
+  elliptic@^6.0.0:
+    version "6.4.0"
+    resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df"
+    dependencies:
+      bn.js "^4.4.0"
+      brorand "^1.0.1"
+      hash.js "^1.0.0"
+      hmac-drbg "^1.0.0"
+      inherits "^2.0.1"
+      minimalistic-assert "^1.0.0"
+      minimalistic-crypto-utils "^1.0.0"
+  
+  emojis-list@^2.0.0:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+  
+  emphasize@^1.5.0:
+    version "1.5.0"
+    resolved "https://registry.yarnpkg.com/emphasize/-/emphasize-1.5.0.tgz#e3c5af2ddccb4982822a3349b471613cc7cecc92"
+    dependencies:
+      chalk "^1.1.3"
+      highlight.js "~9.12.0"
+      lowlight "~1.9.0"
+  
+  encodeurl@~1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
+  
+  encoding@^0.1.11:
+    version "0.1.12"
+    resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
+    dependencies:
+      iconv-lite "~0.4.13"
+  
+  end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+    version "1.4.0"
+    resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206"
+    dependencies:
+      once "^1.4.0"
+  
+  ends-with@^0.2.0:
+    version "0.2.0"
+    resolved "https://registry.yarnpkg.com/ends-with/-/ends-with-0.2.0.tgz#2f9da98d57a50cfda4571ce4339000500f4e6b8a"
+  
+  engine.io-client@~3.1.0:
+    version "3.1.6"
+    resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.1.6.tgz#5bdeb130f8b94a50ac5cbeb72583e7a4a063ddfd"
+    dependencies:
+      component-emitter "1.2.1"
+      component-inherit "0.0.3"
+      debug "~3.1.0"
+      engine.io-parser "~2.1.1"
+      has-cors "1.1.0"
+      indexof "0.0.1"
+      parseqs "0.0.5"
+      parseuri "0.0.5"
+      ws "~3.3.1"
+      xmlhttprequest-ssl "~1.5.4"
+      yeast "0.1.2"
+  
+  engine.io-parser@~2.1.0, engine.io-parser@~2.1.1:
+    version "2.1.2"
+    resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.2.tgz#4c0f4cff79aaeecbbdcfdea66a823c6085409196"
+    dependencies:
+      after "0.8.2"
+      arraybuffer.slice "~0.0.7"
+      base64-arraybuffer "0.1.5"
+      blob "0.0.4"
+      has-binary2 "~1.0.2"
+  
+  engine.io@~3.1.0:
+    version "3.1.5"
+    resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.1.5.tgz#0e7ef9d690eb0b35597f1d4ad02a26ca2dba3845"
+    dependencies:
+      accepts "~1.3.4"
+      base64id "1.0.0"
+      cookie "0.3.1"
+      debug "~3.1.0"
+      engine.io-parser "~2.1.0"
+      ws "~3.3.1"
+    optionalDependencies:
+      uws "~9.14.0"
+  
+  enhanced-resolve@^3.4.0:
+    version "3.4.1"
+    resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e"
+    dependencies:
+      graceful-fs "^4.1.2"
+      memory-fs "^0.4.0"
+      object-assign "^4.0.1"
+      tapable "^0.2.7"
+  
+  ent@~2.2.0:
+    version "2.2.0"
+    resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d"
+  
+  entities@^1.1.1, entities@~1.1.1:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
+  
+  enzyme-adapter-react-16@^1.1.1:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.1.tgz#a8f4278b47e082fbca14f5bfb1ee50ee650717b4"
+    dependencies:
+      enzyme-adapter-utils "^1.3.0"
+      lodash "^4.17.4"
+      object.assign "^4.0.4"
+      object.values "^1.0.4"
+      prop-types "^15.6.0"
+      react-reconciler "^0.7.0"
+      react-test-renderer "^16.0.0-0"
+  
+  enzyme-adapter-utils@^1.3.0:
+    version "1.3.0"
+    resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.3.0.tgz#d6c85756826c257a8544d362cc7a67e97ea698c7"
+    dependencies:
+      lodash "^4.17.4"
+      object.assign "^4.0.4"
+      prop-types "^15.6.0"
+  
+  enzyme-matchers@^4.1.1:
+    version "4.1.1"
+    resolved "https://registry.yarnpkg.com/enzyme-matchers/-/enzyme-matchers-4.1.1.tgz#ce8c177f96f05e757a2c7b5ca4040450c3beb57c"
+    dependencies:
+      circular-json-es6 "^2.0.1"
+      deep-equal-ident "^1.1.1"
+  
+  enzyme@^3.3.0:
+    version "3.3.0"
+    resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.3.0.tgz#0971abd167f2d4bf3f5bd508229e1c4b6dc50479"
+    dependencies:
+      cheerio "^1.0.0-rc.2"
+      function.prototype.name "^1.0.3"
+      has "^1.0.1"
+      is-boolean-object "^1.0.0"
+      is-callable "^1.1.3"
+      is-number-object "^1.0.3"
+      is-string "^1.0.4"
+      is-subset "^0.1.1"
+      lodash "^4.17.4"
+      object-inspect "^1.5.0"
+      object-is "^1.0.1"
+      object.assign "^4.1.0"
+      object.entries "^1.0.4"
+      object.values "^1.0.4"
+      raf "^3.4.0"
+      rst-selector-parser "^2.2.3"
+  
+  eonasdan-bootstrap-datetimepicker@^4.17.47:
+    version "4.17.47"
+    resolved "https://registry.yarnpkg.com/eonasdan-bootstrap-datetimepicker/-/eonasdan-bootstrap-datetimepicker-4.17.47.tgz#7a49970044065276e7965efd16f822735219e735"
+    dependencies:
+      bootstrap "^3.3"
+      jquery "^1.8.3 || ^2.0 || ^3.0"
+      moment "^2.10"
+      moment-timezone "^0.4.0"
+  
+  errno@^0.1.3, errno@~0.1.1:
+    version "0.1.4"
+    resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
+    dependencies:
+      prr "~0.0.0"
+  
+  error-ex@^1.2.0:
+    version "1.3.1"
+    resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
+    dependencies:
+      is-arrayish "^0.2.1"
+  
+  es-abstract@^1.6.1, es-abstract@^1.7.0:
+    version "1.8.2"
+    resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.2.tgz#25103263dc4decbda60e0c737ca32313518027ee"
+    dependencies:
+      es-to-primitive "^1.1.1"
+      function-bind "^1.1.1"
+      has "^1.0.1"
+      is-callable "^1.1.3"
+      is-regex "^1.0.4"
+  
+  es-to-primitive@^1.1.1:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
+    dependencies:
+      is-callable "^1.1.1"
+      is-date-object "^1.0.1"
+      is-symbol "^1.0.1"
+  
+  es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14:
+    version "0.10.30"
+    resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.30.tgz#7141a16836697dbabfaaaeee41495ce29f52c939"
+    dependencies:
+      es6-iterator "2"
+      es6-symbol "~3.1"
+  
+  es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1:
+    version "2.0.1"
+    resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512"
+    dependencies:
+      d "1"
+      es5-ext "^0.10.14"
+      es6-symbol "^3.1"
+  
+  es6-map@^0.1.3:
+    version "0.1.5"
+    resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0"
+    dependencies:
+      d "1"
+      es5-ext "~0.10.14"
+      es6-iterator "~2.0.1"
+      es6-set "~0.1.5"
+      es6-symbol "~3.1.1"
+      event-emitter "~0.3.5"
+  
+  es6-set@~0.1.5:
+    version "0.1.5"
+    resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
+    dependencies:
+      d "1"
+      es5-ext "~0.10.14"
+      es6-iterator "~2.0.1"
+      es6-symbol "3.1.1"
+      event-emitter "~0.3.5"
+  
+  [email protected], es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1:
+    version "3.1.1"
+    resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
+    dependencies:
+      d "1"
+      es5-ext "~0.10.14"
+  
+  es6-weak-map@^2.0.1:
+    version "2.0.2"
+    resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"
+    dependencies:
+      d "1"
+      es5-ext "^0.10.14"
+      es6-iterator "^2.0.1"
+      es6-symbol "^3.1.1"
+  
+  escape-html@~1.0.3:
+    version "1.0.3"
+    resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+  
+  escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+    version "1.0.5"
+    resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+  
+  [email protected]:
+    version "1.9.1"
+    resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2"
+    dependencies:
+      esprima "^3.1.3"
+      estraverse "^4.2.0"
+      esutils "^2.0.2"
+      optionator "^0.8.1"
+    optionalDependencies:
+      source-map "~0.6.1"
+  
+  escope@^3.6.0:
+    version "3.6.0"
+    resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
+    dependencies:
+      es6-map "^0.1.3"
+      es6-weak-map "^2.0.1"
+      esrecurse "^4.1.0"
+      estraverse "^4.1.1"
+  
+  eslint-plugin-react@^6.10.3:
+    version "6.10.3"
+    resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz#c5435beb06774e12c7db2f6abaddcbf900cd3f78"
+    dependencies:
+      array.prototype.find "^2.0.1"
+      doctrine "^1.2.2"
+      has "^1.0.1"
+      jsx-ast-utils "^1.3.4"
+      object.assign "^4.0.4"
+  
+  [email protected]:
+    version "3.19.0"
+    resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc"
+    dependencies:
+      babel-code-frame "^6.16.0"
+      chalk "^1.1.3"
+      concat-stream "^1.5.2"
+      debug "^2.1.1"
+      doctrine "^2.0.0"
+      escope "^3.6.0"
+      espree "^3.4.0"
+      esquery "^1.0.0"
+      estraverse "^4.2.0"
+      esutils "^2.0.2"
+      file-entry-cache "^2.0.0"
+      glob "^7.0.3"
+      globals "^9.14.0"
+      ignore "^3.2.0"
+      imurmurhash "^0.1.4"
+      inquirer "^0.12.0"
+      is-my-json-valid "^2.10.0"
+      is-resolvable "^1.0.0"
+      js-yaml "^3.5.1"
+      json-stable-stringify "^1.0.0"
+      levn "^0.3.0"
+      lodash "^4.0.0"
+      mkdirp "^0.5.0"
+      natural-compare "^1.4.0"
+      optionator "^0.8.2"
+      path-is-inside "^1.0.1"
+      pluralize "^1.2.1"
+      progress "^1.1.8"
+      require-uncached "^1.0.2"
+      shelljs "^0.7.5"
+      strip-bom "^3.0.0"
+      strip-json-comments "~2.0.1"
+      table "^3.7.8"
+      text-table "~0.2.0"
+      user-home "^2.0.0"
+  
+  espree@^3.4.0:
+    version "3.5.1"
+    resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.1.tgz#0c988b8ab46db53100a1954ae4ba995ddd27d87e"
+    dependencies:
+      acorn "^5.1.1"
+      acorn-jsx "^3.0.0"
+  
+  [email protected], esprima@^3.1.3:
+    version "3.1.3"
+    resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
+  
+  esprima@^2.6.0:
+    version "2.7.3"
+    resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
+  
+  esprima@^4.0.0:
+    version "4.0.0"
+    resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
+  
+  esquery@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa"
+    dependencies:
+      estraverse "^4.0.0"
+  
+  esrecurse@^4.1.0:
+    version "4.2.0"
+    resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163"
+    dependencies:
+      estraverse "^4.1.0"
+      object-assign "^4.0.1"
+  
+  estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
+    version "4.2.0"
+    resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+  
+  esutils@^2.0.2:
+    version "2.0.2"
+    resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+  
+  eve@~0.5.1:
+    version "0.5.4"
+    resolved "https://registry.yarnpkg.com/eve/-/eve-0.5.4.tgz#67d080b9725291d7e389e34c26860dd97f1debaa"
+  
+  event-emitter@~0.3.5:
+    version "0.3.5"
+    resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
+    dependencies:
+      d "1"
+      es5-ext "~0.10.14"
+  
+  [email protected]:
+    version "1.2.0"
+    resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508"
+  
+  events@^1.0.0, events@~1.1.0:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
+  
+  evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+    version "1.0.3"
+    resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+    dependencies:
+      md5.js "^1.3.4"
+      safe-buffer "^5.1.1"
+  
+  exec-buffer@^3.0.0:
+    version "3.2.0"
+    resolved "https://registry.yarnpkg.com/exec-buffer/-/exec-buffer-3.2.0.tgz#b1686dbd904c7cf982e652c1f5a79b1e5573082b"
+    dependencies:
+      execa "^0.7.0"
+      p-finally "^1.0.0"
+      pify "^3.0.0"
+      rimraf "^2.5.4"
+      tempfile "^2.0.0"
+  
+  exec-series@^1.0.0:
+    version "1.0.3"
+    resolved "https://registry.yarnpkg.com/exec-series/-/exec-series-1.0.3.tgz#6d257a9beac482a872c7783bc8615839fc77143a"
+    dependencies:
+      async-each-series "^1.1.0"
+      object-assign "^4.1.0"
+  
+  execa@^0.7.0:
+    version "0.7.0"
+    resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
+    dependencies:
+      cross-spawn "^5.0.1"
+      get-stream "^3.0.0"
+      is-stream "^1.1.0"
+      npm-run-path "^2.0.0"
+      p-finally "^1.0.0"
+      signal-exit "^3.0.0"
+      strip-eof "^1.0.0"
+  
+  executable@^1.0.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/executable/-/executable-1.1.0.tgz#877980e9112f3391066da37265de7ad8434ab4d9"
+    dependencies:
+      meow "^3.1.0"
+  
+  exit-hook@^1.0.0:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
+  
+  expand-braces@^0.1.1:
+    version "0.1.2"
+    resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea"
+    dependencies:
+      array-slice "^0.2.3"
+      array-unique "^0.2.1"
+      braces "^0.1.2"
+  
+  expand-brackets@^0.1.4:
+    version "0.1.5"
+    resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+    dependencies:
+      is-posix-bracket "^0.1.0"
+  
+  expand-range@^0.1.0:
+    version "0.1.1"
+    resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044"
+    dependencies:
+      is-number "^0.1.1"
+      repeat-string "^0.2.2"
+  
+  expand-range@^1.8.1:
+    version "1.8.2"
+    resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+    dependencies:
+      fill-range "^2.1.0"
+  
+  expand-template@^1.0.2:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.0.tgz#e09efba977bf98f9ee0ed25abd0c692e02aec3fc"
+  
+  exports-loader@~0.6.4:
+    version "0.6.4"
+    resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-0.6.4.tgz#d70fc6121975b35fc12830cf52754be2740fc886"
+    dependencies:
+      loader-utils "^1.0.2"
+      source-map "0.5.x"
+  
+  extend-shallow@^2.0.1:
+    version "2.0.1"
+    resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+    dependencies:
+      is-extendable "^0.1.0"
+  
+  extend@3, extend@^3.0.0, extend@~3.0.0, extend@~3.0.1:
+    version "3.0.1"
+    resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
+  
+  extglob@^0.3.1:
+    version "0.3.2"
+    resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+    dependencies:
+      is-extglob "^1.0.0"
+  
+  extract-text-webpack-plugin@^3.0.2:
+    version "3.0.2"
+    resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz#5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7"
+    dependencies:
+      async "^2.4.1"
+      loader-utils "^1.1.0"
+      schema-utils "^0.3.0"
+      webpack-sources "^1.0.1"
+  
+  [email protected], extsprintf@^1.2.0:
+    version "1.3.0"
+    resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+  
+  fancy-log@^1.1.0:
+    version "1.3.0"
+    resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.0.tgz#45be17d02bb9917d60ccffd4995c999e6c8c9948"
+    dependencies:
+      chalk "^1.1.1"
+      time-stamp "^1.0.0"
+  
+  fast-deep-equal@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff"
+  
+  fast-future@~1.0.2:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/fast-future/-/fast-future-1.0.2.tgz#8435a9aaa02d79248d17d704e76259301d99280a"
+  
+  fast-levenshtein@~2.0.4:
+    version "2.0.6"
+    resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+  
+  fastparse@^1.0.0:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8"
+  
+  fbjs@^0.8.16:
+    version "0.8.16"
+    resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db"
+    dependencies:
+      core-js "^1.0.0"
+      isomorphic-fetch "^2.1.1"
+      loose-envify "^1.0.0"
+      object-assign "^4.1.0"
+      promise "^7.1.1"
+      setimmediate "^1.0.5"
+      ua-parser-js "^0.7.9"
+  
+  fd-slicer@~1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65"
+    dependencies:
+      pend "~1.2.0"
+  
+  figures@^1.3.5:
+    version "1.7.0"
+    resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+    dependencies:
+      escape-string-regexp "^1.0.5"
+      object-assign "^4.1.0"
+  
+  file-entry-cache@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
+    dependencies:
+      flat-cache "^1.2.1"
+      object-assign "^4.0.1"
+  
+  file-loader@^0.11.2:
+    version "0.11.2"
+    resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.11.2.tgz#4ff1df28af38719a6098093b88c82c71d1794a34"
+    dependencies:
+      loader-utils "^1.0.2"
+  
+  file-type@^3.1.0:
+    version "3.9.0"
+    resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9"
+  
+  file-type@^4.1.0:
+    version "4.4.0"
+    resolved "https://registry.yarnpkg.com/file-type/-/file-type-4.4.0.tgz#1b600e5fca1fbdc6e80c0a70c71c8dba5f7906c5"
+  
+  file-type@^6.1.0:
+    version "6.2.0"
+    resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919"
+  
+  file-uri-to-path@1:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+  
+  filename-regex@^2.0.0:
+    version "2.0.1"
+    resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
+  
+  filename-reserved-regex@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz#e61cf805f0de1c984567d0386dc5df50ee5af7e4"
+  
+  filenamify@^1.0.1:
+    version "1.2.1"
+    resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-1.2.1.tgz#a9f2ffd11c503bed300015029272378f1f1365a5"
+    dependencies:
+      filename-reserved-regex "^1.0.0"
+      strip-outer "^1.0.0"
+      trim-repeated "^1.0.0"
+  
+  fill-range@^2.1.0:
+    version "2.2.3"
+    resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
+    dependencies:
+      is-number "^2.1.0"
+      isobject "^2.0.0"
+      randomatic "^1.1.3"
+      repeat-element "^1.1.2"
+      repeat-string "^1.5.2"
+  
+  [email protected]:
+    version "1.0.6"
+    resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.6.tgz#007aea33d1a4d3e42017f624848ad58d212f814f"
+    dependencies:
+      debug "2.6.9"
+      encodeurl "~1.0.1"
+      escape-html "~1.0.3"
+      on-finished "~2.3.0"
+      parseurl "~1.3.2"
+      statuses "~1.3.1"
+      unpipe "~1.0.0"
+  
+  find-cache-dir@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f"
+    dependencies:
+      commondir "^1.0.1"
+      make-dir "^1.0.0"
+      pkg-dir "^2.0.0"
+  
+  find-up@^1.0.0:
+    version "1.1.2"
+    resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+    dependencies:
+      path-exists "^2.0.0"
+      pinkie-promise "^2.0.0"
+  
+  find-up@^2.0.0, find-up@^2.1.0:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+    dependencies:
+      locate-path "^2.0.0"
+  
+  find-versions@^1.0.0:
+    version "1.2.1"
+    resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-1.2.1.tgz#cbde9f12e38575a0af1be1b9a2c5d5fd8f186b62"
+    dependencies:
+      array-uniq "^1.0.0"
+      get-stdin "^4.0.1"
+      meow "^3.5.0"
+      semver-regex "^1.0.0"
+  
+  first-chunk-stream@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e"
+  
+  flat-cache@^1.2.1:
+    version "1.3.0"
+    resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481"
+    dependencies:
+      circular-json "^0.3.1"
+      del "^2.0.2"
+      graceful-fs "^4.1.2"
+      write "^0.2.1"
+  
+  flatten@^1.0.2:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
+  
+  flotr2@^0.1.0:
+    version "0.1.0"
+    resolved "https://registry.yarnpkg.com/flotr2/-/flotr2-0.1.0.tgz#8d31b0d1b3dc46f5e399edeb7a179e075b36e036"
+  
+  [email protected]:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.0.0.tgz#8e34298cbd2e176f254effec75a1c78cc849fd37"
+    dependencies:
+      debug "^2.2.0"
+  
+  follow-redirects@^1.2.3:
+    version "1.2.4"
+    resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.2.4.tgz#355e8f4d16876b43f577b0d5ce2668b9723214ea"
+    dependencies:
+      debug "^2.4.5"
+  
+  [email protected]:
+    version "4.6.3"
+    resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.6.3.tgz#86933651540ee00874c664017f50f2172f6531a2"
+  
+  font-awesome@^4.7.0:
+    version "4.7.0"
+    resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133"
+  
+  for-in@^0.1.3:
+    version "0.1.8"
+    resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
+  
+  for-in@^1.0.1:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+  
+  for-own@^0.1.4:
+    version "0.1.5"
+    resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
+    dependencies:
+      for-in "^1.0.1"
+  
+  for-own@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b"
+    dependencies:
+      for-in "^1.0.1"
+  
+  foreach@^2.0.5:
+    version "2.0.5"
+    resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
+  
+  forever-agent@~0.6.1:
+    version "0.6.1"
+    resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+  
+  form-data@~2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.0.0.tgz#6f0aebadcc5da16c13e1ecc11137d85f9b883b25"
+    dependencies:
+      asynckit "^0.4.0"
+      combined-stream "^1.0.5"
+      mime-types "^2.1.11"
+  
+  form-data@~2.1.1:
+    version "2.1.4"
+    resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
+    dependencies:
+      asynckit "^0.4.0"
+      combined-stream "^1.0.5"
+      mime-types "^2.1.12"
+  
+  form-data@~2.3.1:
+    version "2.3.1"
+    resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf"
+    dependencies:
+      asynckit "^0.4.0"
+      combined-stream "^1.0.5"
+      mime-types "^2.1.12"
+  
+  fs-access@^1.0.0:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a"
+    dependencies:
+      null-check "^1.0.0"
+  
+  fs.realpath@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+  
+  fsevents@^1.0.0:
+    version "1.1.2"
+    resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4"
+    dependencies:
+      nan "^2.3.0"
+      node-pre-gyp "^0.6.36"
+  
+  fstream-ignore@^1.0.5:
+    version "1.0.5"
+    resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
+    dependencies:
+      fstream "^1.0.0"
+      inherits "2"
+      minimatch "^3.0.0"
+  
+  fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
+    version "1.0.11"
+    resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
+    dependencies:
+      graceful-fs "^4.1.2"
+      inherits "~2.0.0"
+      mkdirp ">=0.5 0"
+      rimraf "2"
+  
+  ftp@~0.3.10:
+    version "0.3.10"
+    resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d"
+    dependencies:
+      readable-stream "1.1.x"
+      xregexp "2.0.0"
+  
+  function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+  
+  function.prototype.name@^1.0.3:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.0.tgz#8bd763cc0af860a859cc5d49384d74b932cd2327"
+    dependencies:
+      define-properties "^1.1.2"
+      function-bind "^1.1.1"
+      is-callable "^1.1.3"
+  
+  gauge@~2.7.3:
+    version "2.7.4"
+    resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+    dependencies:
+      aproba "^1.0.3"
+      console-control-strings "^1.0.0"
+      has-unicode "^2.0.0"
+      object-assign "^4.1.0"
+      signal-exit "^3.0.0"
+      string-width "^1.0.1"
+      strip-ansi "^3.0.1"
+      wide-align "^1.1.0"
+  
+  gaze@^1.0.0:
+    version "1.1.2"
+    resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105"
+    dependencies:
+      globule "^1.0.0"
+  
+  generate-function@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
+  
+  generate-object-property@^1.1.0:
+    version "1.2.0"
+    resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
+    dependencies:
+      is-property "^1.0.0"
+  
+  get-caller-file@^1.0.1:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
+  
+  get-proxy@^1.0.1:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/get-proxy/-/get-proxy-1.1.0.tgz#894854491bc591b0f147d7ae570f5c678b7256eb"
+    dependencies:
+      rc "^1.1.2"
+  
+  get-stdin@^4.0.1:
+    version "4.0.1"
+    resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+  
+  get-stream@^3.0.0:
+    version "3.0.0"
+    resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+  
+  get-uri@2:
+    version "2.0.1"
+    resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.1.tgz#dbdcacacd8c608a38316869368117697a1631c59"
+    dependencies:
+      data-uri-to-buffer "1"
+      debug "2"
+      extend "3"
+      file-uri-to-path "1"
+      ftp "~0.3.10"
+      readable-stream "2"
+  
+  getpass@^0.1.1:
+    version "0.1.7"
+    resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+    dependencies:
+      assert-plus "^1.0.0"
+  
+  gifsicle@^3.0.0:
+    version "3.0.4"
+    resolved "https://registry.yarnpkg.com/gifsicle/-/gifsicle-3.0.4.tgz#f45cb5ed10165b665dc929e0e9328b6c821dfa3b"
+    dependencies:
+      bin-build "^2.0.0"
+      bin-wrapper "^3.0.0"
+      logalot "^2.0.0"
+  
+  [email protected]:
+    version "0.0.0"
+    resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
+  
+  glob-base@^0.3.0:
+    version "0.3.0"
+    resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+    dependencies:
+      glob-parent "^2.0.0"
+      is-glob "^2.0.0"
+  
+  glob-parent@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+    dependencies:
+      is-glob "^2.0.0"
+  
+  glob-parent@^3.0.0:
+    version "3.1.0"
+    resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+    dependencies:
+      is-glob "^3.1.0"
+      path-dirname "^1.0.0"
+  
+  glob-stream@^5.3.2:
+    version "5.3.5"
+    resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-5.3.5.tgz#a55665a9a8ccdc41915a87c701e32d4e016fad22"
+    dependencies:
+      extend "^3.0.0"
+      glob "^5.0.3"
+      glob-parent "^3.0.0"
+      micromatch "^2.3.7"
+      ordered-read-streams "^0.3.0"
+      through2 "^0.6.0"
+      to-absolute-glob "^0.1.1"
+      unique-stream "^2.0.2"
+  
+  glob@^5.0.3:
+    version "5.0.15"
+    resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
+    dependencies:
+      inflight "^1.0.4"
+      inherits "2"
+      minimatch "2 || 3"
+      once "^1.3.0"
+      path-is-absolute "^1.0.0"
+  
+  glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.0, glob@^7.1.1, glob@~7.1.1:
+    version "7.1.2"
+    resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
+    dependencies:
+      fs.realpath "^1.0.0"
+      inflight "^1.0.4"
+      inherits "2"
+      minimatch "^3.0.4"
+      once "^1.3.0"
+      path-is-absolute "^1.0.0"
+  
+  globals@^9.14.0, globals@^9.18.0:
+    version "9.18.0"
+    resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
+  
+  globby@^5.0.0:
+    version "5.0.0"
+    resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
+    dependencies:
+      array-union "^1.0.1"
+      arrify "^1.0.0"
+      glob "^7.0.3"
+      object-assign "^4.0.1"
+      pify "^2.0.0"
+      pinkie-promise "^2.0.0"
+  
+  globby@^6.1.0:
+    version "6.1.0"
+    resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+    dependencies:
+      array-union "^1.0.1"
+      glob "^7.0.3"
+      object-assign "^4.0.1"
+      pify "^2.0.0"
+      pinkie-promise "^2.0.0"
+  
+  globule@^1.0.0:
+    version "1.2.0"
+    resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09"
+    dependencies:
+      glob "~7.1.1"
+      lodash "~4.17.4"
+      minimatch "~3.0.2"
+  
+  glogg@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5"
+    dependencies:
+      sparkles "^1.0.0"
+  
+  got@^5.0.0:
+    version "5.7.1"
+    resolved "https://registry.yarnpkg.com/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35"
+    dependencies:
+      create-error-class "^3.0.1"
+      duplexer2 "^0.1.4"
+      is-redirect "^1.0.0"
+      is-retry-allowed "^1.0.0"
+      is-stream "^1.0.0"
+      lowercase-keys "^1.0.0"
+      node-status-codes "^1.0.0"
+      object-assign "^4.0.1"
+      parse-json "^2.1.0"
+      pinkie-promise "^2.0.0"
+      read-all-stream "^3.0.0"
+      readable-stream "^2.0.5"
+      timed-out "^3.0.0"
+      unzip-response "^1.0.2"
+      url-parse-lax "^1.0.0"
+  
+  got@^7.1.0:
+    version "7.1.0"
+    resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a"
+    dependencies:
+      decompress-response "^3.2.0"
+      duplexer3 "^0.1.4"
+      get-stream "^3.0.0"
+      is-plain-obj "^1.1.0"
+      is-retry-allowed "^1.0.0"
+      is-stream "^1.0.0"
+      isurl "^1.0.0-alpha5"
+      lowercase-keys "^1.0.0"
+      p-cancelable "^0.3.0"
+      p-timeout "^1.1.1"
+      safe-buffer "^5.0.1"
+      timed-out "^4.0.0"
+      url-parse-lax "^1.0.0"
+      url-to-options "^1.0.1"
+  
+  graceful-fs@^4.0.0, graceful-fs@^4.1.2:
+    version "4.1.11"
+    resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+  
+  "graceful-readlink@>= 1.0.0":
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+  
+  gulp-decompress@^1.2.0:
+    version "1.2.0"
+    resolved "https://registry.yarnpkg.com/gulp-decompress/-/gulp-decompress-1.2.0.tgz#8eeb65a5e015f8ed8532cafe28454960626f0dc7"
+    dependencies:
+      archive-type "^3.0.0"
+      decompress "^3.0.0"
+      gulp-util "^3.0.1"
+      readable-stream "^2.0.2"
+  
+  gulp-filter@^3.0.1:
+    version "3.0.1"
+    resolved "https://registry.yarnpkg.com/gulp-filter/-/gulp-filter-3.0.1.tgz#7c6ffce5b563e89de7a90dfceff16ec8a8cb1562"
+    dependencies:
+      gulp-util "^3.0.6"
+      multimatch "^2.0.0"
+      streamfilter "^1.0.5"
+  
+  gulp-filter@^5.0.1:
+    version "5.0.1"
+    resolved "https://registry.yarnpkg.com/gulp-filter/-/gulp-filter-5.0.1.tgz#5d87f662e317e5839ef7650e620e6c9008ff92d0"
+    dependencies:
+      gulp-util "^3.0.6"
+      multimatch "^2.0.0"
+      streamfilter "^1.0.5"
+  
+  gulp-gitignore@^0.1.0:
+    version "0.1.0"
+    resolved "https://registry.yarnpkg.com/gulp-gitignore/-/gulp-gitignore-0.1.0.tgz#ea3272b8da0d96359c990871bf1b4ad40f13d8da"
+    dependencies:
+      gulp-filter "^3.0.1"
+      parse-gitignore "^0.2.0"
+      starts-with "^1.0.2"
+  
+  gulp-rename@^1.2.0:
+    version "1.2.2"
+    resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.2.2.tgz#3ad4428763f05e2764dec1c67d868db275687817"
+  
+  gulp-reporter@^2.2.1:
+    version "2.3.0"
+    resolved "https://registry.yarnpkg.com/gulp-reporter/-/gulp-reporter-2.3.0.tgz#91469bc7d853e7bb33c09cbe04b3825280b09c55"
+    dependencies:
+      ansi-escapes "^2.0.0"
+      buffered-spawn "^3.3.2"
+      bufferstreams "^1.1.1"
+      chalk "^2.1.0"
+      cli-truncate "^1.1.0"
+      emphasize "^1.5.0"
+      got "^7.1.0"
+      gulp-util "^3.0.8"
+      is-ci "^1.0.10"
+      is-windows "^1.0.1"
+      lodash.get "^4.4.2"
+      os-locale "^2.1.0"
+      string-width "^2.1.1"
+      term-size "^1.2.0"
+      through2 "^2.0.3"
+      to-time "^1.0.2"
+  
+  [email protected]:
+    version "1.6.0"
+    resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz#b86ff349d801ceb56e1d9e7dc7bbcb4b7dee600c"
+    dependencies:
+      convert-source-map "^1.1.1"
+      graceful-fs "^4.1.2"
+      strip-bom "^2.0.0"
+      through2 "^2.0.0"
+      vinyl "^1.0.0"
+  
+  gulp-tap@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/gulp-tap/-/gulp-tap-1.0.1.tgz#e671124e1259b4cea219ed1ca97b7f585c334690"
+    dependencies:
+      through2 "^2.0.3"
+  
+  gulp-util@^3.0.1, gulp-util@^3.0.6, gulp-util@^3.0.8:
+    version "3.0.8"
+    resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f"
+    dependencies:
+      array-differ "^1.0.0"
+      array-uniq "^1.0.2"
+      beeper "^1.0.0"
+      chalk "^1.0.0"
+      dateformat "^2.0.0"
+      fancy-log "^1.1.0"
+      gulplog "^1.0.0"
+      has-gulplog "^0.1.0"
+      lodash._reescape "^3.0.0"
+      lodash._reevaluate "^3.0.0"
+      lodash._reinterpolate "^3.0.0"
+      lodash.template "^3.0.0"
+      minimist "^1.1.0"
+      multipipe "^0.1.2"
+      object-assign "^3.0.0"
+      replace-ext "0.0.1"
+      through2 "^2.0.0"
+      vinyl "^0.5.0"
+  
+  gulplog@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5"
+    dependencies:
+      glogg "^1.0.0"
+  
+  har-schema@^1.0.5:
+    version "1.0.5"
+    resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
+  
+  har-schema@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+  
+  har-validator@~2.0.6:
+    version "2.0.6"
+    resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
+    dependencies:
+      chalk "^1.1.1"
+      commander "^2.9.0"
+      is-my-json-valid "^2.12.4"
+      pinkie-promise "^2.0.0"
+  
+  har-validator@~4.2.1:
+    version "4.2.1"
+    resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
+    dependencies:
+      ajv "^4.9.1"
+      har-schema "^1.0.5"
+  
+  har-validator@~5.0.3:
+    version "5.0.3"
+    resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
+    dependencies:
+      ajv "^5.1.0"
+      har-schema "^2.0.0"
+  
+  hard-source-webpack-plugin@^0.4.9:
+    version "0.4.9"
+    resolved "https://registry.yarnpkg.com/hard-source-webpack-plugin/-/hard-source-webpack-plugin-0.4.9.tgz#b26e404b81644f6b95bd7e245e88a25b0229ba98"
+    dependencies:
+      bluebird "^3.0.0"
+      level "^1.4.0"
+      lodash "^4.15.0"
+      mkdirp "^0.5.1"
+      node-object-hash "^1.2.0"
+      source-list-map "^0.1.6"
+      source-map "^0.5.6"
+      webpack-core "~0.6.0"
+      webpack-sources "^1.0.1"
+  
+  has-ansi@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+    dependencies:
+      ansi-regex "^2.0.0"
+  
+  has-binary2@~1.0.2:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.2.tgz#e83dba49f0b9be4d026d27365350d9f03f54be98"
+    dependencies:
+      isarray "2.0.1"
+  
+  [email protected]:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
+  
+  has-flag@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+  
+  has-flag@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
+  
+  has-gulplog@^0.1.0:
+    version "0.1.0"
+    resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce"
+    dependencies:
+      sparkles "^1.0.0"
+  
+  has-symbol-support-x@^1.4.1:
+    version "1.4.1"
+    resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.1.tgz#66ec2e377e0c7d7ccedb07a3a84d77510ff1bc4c"
+  
+  has-symbols@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
+  
+  has-to-string-tag-x@^1.2.0:
+    version "1.4.1"
+    resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d"
+    dependencies:
+      has-symbol-support-x "^1.4.1"
+  
+  has-unicode@^2.0.0:
+    version "2.0.1"
+    resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+  
+  has@^1.0.0, has@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
+    dependencies:
+      function-bind "^1.0.2"
+  
+  hash-base@^2.0.0:
+    version "2.0.2"
+    resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1"
+    dependencies:
+      inherits "^2.0.1"
+  
+  hash-base@^3.0.0:
+    version "3.0.4"
+    resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
+    dependencies:
+      inherits "^2.0.1"
+      safe-buffer "^5.0.1"
+  
+  hash.js@^1.0.0, hash.js@^1.0.3:
+    version "1.1.3"
+    resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846"
+    dependencies:
+      inherits "^2.0.3"
+      minimalistic-assert "^1.0.0"
+  
+  hat@^0.0.3:
+    version "0.0.3"
+    resolved "https://registry.yarnpkg.com/hat/-/hat-0.0.3.tgz#bb014a9e64b3788aed8005917413d4ff3d502d8a"
+  
+  [email protected], hawk@~3.1.3:
+    version "3.1.3"
+    resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+    dependencies:
+      boom "2.x.x"
+      cryptiles "2.x.x"
+      hoek "2.x.x"
+      sntp "1.x.x"
+  
+  hawk@~6.0.2:
+    version "6.0.2"
+    resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038"
+    dependencies:
+      boom "4.x.x"
+      cryptiles "3.x.x"
+      hoek "4.x.x"
+      sntp "2.x.x"
+  
+  highlight.js@~9.12.0:
+    version "9.12.0"
+    resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e"
+  
+  hipchat-notifier@^1.1.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/hipchat-notifier/-/hipchat-notifier-1.1.0.tgz#b6d249755437c191082367799d3ba9a0f23b231e"
+    dependencies:
+      lodash "^4.0.0"
+      request "^2.0.0"
+  
+  hmac-drbg@^1.0.0:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+    dependencies:
+      hash.js "^1.0.3"
+      minimalistic-assert "^1.0.0"
+      minimalistic-crypto-utils "^1.0.1"
+  
+  [email protected]:
+    version "2.16.3"
+    resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+  
+  [email protected]:
+    version "4.2.0"
+    resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d"
+  
+  home-or-tmp@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
+    dependencies:
+      os-homedir "^1.0.0"
+      os-tmpdir "^1.0.1"
+  
+  hosted-git-info@^2.1.4:
+    version "2.5.0"
+    resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c"
+  
+  html-comment-regex@^1.1.0:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
+  
+  htmlescape@^1.1.0:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351"
+  
+  htmlparser2@^3.9.1:
+    version "3.9.2"
+    resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338"
+    dependencies:
+      domelementtype "^1.3.0"
+      domhandler "^2.3.0"
+      domutils "^1.5.1"
+      entities "^1.1.1"
+      inherits "^2.0.1"
+      readable-stream "^2.0.2"
+  
+  [email protected], http-errors@~1.6.2:
+    version "1.6.2"
+    resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736"
+    dependencies:
+      depd "1.1.1"
+      inherits "2.0.3"
+      setprototypeof "1.0.3"
+      statuses ">= 1.3.1 < 2"
+  
+  http-proxy-agent@1:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz#cc1ce38e453bf984a0f7702d2dd59c73d081284a"
+    dependencies:
+      agent-base "2"
+      debug "2"
+      extend "3"
+  
+  http-proxy@^1.13.0:
+    version "1.16.2"
+    resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742"
+    dependencies:
+      eventemitter3 "1.x.x"
+      requires-port "1.x.x"
+  
+  http-signature@~1.1.0:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+    dependencies:
+      assert-plus "^0.2.0"
+      jsprim "^1.2.2"
+      sshpk "^1.7.0"
+  
+  http-signature@~1.2.0:
+    version "1.2.0"
+    resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+    dependencies:
+      assert-plus "^1.0.0"
+      jsprim "^1.2.2"
+      sshpk "^1.7.0"
+  
+  [email protected]:
+    version "1.6.1"
+    resolved "https://registry.yarnpkg.com/httpntlm/-/httpntlm-1.6.1.tgz#ad01527143a2e8773cfae6a96f58656bb52a34b2"
+    dependencies:
+      httpreq ">=0.4.22"
+      underscore "~1.7.0"
+  
+  httpreq@>=0.4.22:
+    version "0.4.24"
+    resolved "https://registry.yarnpkg.com/httpreq/-/httpreq-0.4.24.tgz#4335ffd82cd969668a39465c929ac61d6393627f"
+  
+  [email protected], https-browserify@~0.0.0:
+    version "0.0.1"
+    resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
+  
+  https-browserify@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+  
+  https-proxy-agent@1:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6"
+    dependencies:
+      agent-base "2"
+      debug "2"
+      extend "3"
+  
+  hyphenate-style-name@^1.0.2:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz#31160a36930adaf1fc04c6074f7eb41465d4ec4b"
+  
+  [email protected]:
+    version "0.4.15"
+    resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb"
+  
+  [email protected], iconv-lite@^0.4.15, iconv-lite@~0.4.13:
+    version "0.4.19"
+    resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
+  
+  ieee754@^1.1.4:
+    version "1.1.8"
+    resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
+  
+  ignore@^3.2.0:
+    version "3.3.5"
+    resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.5.tgz#c4e715455f6073a8d7e5dae72d2fc9d71663dba6"
+  
+  image-webpack-loader@^3.3.1:
+    version "3.4.2"
+    resolved "https://registry.yarnpkg.com/image-webpack-loader/-/image-webpack-loader-3.4.2.tgz#7e8bfa7270e853eee6d7861f0ed6a3c12d8a20f8"
+    dependencies:
+      imagemin "^5.2.2"
+      imagemin-gifsicle "^5.1.0"
+      imagemin-mozjpeg "^6.0.0"
+      imagemin-optipng "^5.2.1"
+      imagemin-pngquant "^5.0.0"
+      imagemin-svgo "^5.2.1"
+      imagemin-webp "^4.0.0"
+      loader-utils "^1.1.0"
+      object-assign "^4.1.1"
+  
+  imagemin-gifsicle@^5.1.0:
+    version "5.2.0"
+    resolved "https://registry.yarnpkg.com/imagemin-gifsicle/-/imagemin-gifsicle-5.2.0.tgz#3781524c457612ef04916af34241a2b42bfcb40a"
+    dependencies:
+      exec-buffer "^3.0.0"
+      gifsicle "^3.0.0"
+      is-gif "^1.0.0"
+  
+  imagemin-mozjpeg@^6.0.0:
+    version "6.0.0"
+    resolved "https://registry.yarnpkg.com/imagemin-mozjpeg/-/imagemin-mozjpeg-6.0.0.tgz#71a32a457aa1b26117a68eeef2d9b190c2e5091e"
+    dependencies:
+      exec-buffer "^3.0.0"
+      is-jpg "^1.0.0"
+      mozjpeg "^4.0.0"
+  
+  imagemin-optipng@^5.2.1:
+    version "5.2.1"
+    resolved "https://registry.yarnpkg.com/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz#d22da412c09f5ff00a4339960b98a88b1dbe8695"
+    dependencies:
+      exec-buffer "^3.0.0"
+      is-png "^1.0.0"
+      optipng-bin "^3.0.0"
+  
+  imagemin-pngquant@^5.0.0:
+    version "5.0.1"
+    resolved "https://registry.yarnpkg.com/imagemin-pngquant/-/imagemin-pngquant-5.0.1.tgz#d8a329da553afa226b11ce62debe0b7e37b439e6"
+    dependencies:
+      exec-buffer "^3.0.0"
+      is-png "^1.0.0"
+      pngquant-bin "^3.0.0"
+  
+  imagemin-svgo@^5.2.1:
+    version "5.2.2"
+    resolved "https://registry.yarnpkg.com/imagemin-svgo/-/imagemin-svgo-5.2.2.tgz#501699f5789730a57922b8736ea15c53f7b55838"
+    dependencies:
+      is-svg "^2.0.0"
+      svgo "^0.7.0"
+  
+  imagemin-webp@^4.0.0:
+    version "4.0.0"
+    resolved "https://registry.yarnpkg.com/imagemin-webp/-/imagemin-webp-4.0.0.tgz#a2caf32b5f52ad21b949a6fed8efc901daf7249d"
+    dependencies:
+      cwebp-bin "^3.1.0"
+      exec-buffer "^3.0.0"
+      is-cwebp-readable "^1.0.0"
+  
+  imagemin@^5.2.2:
+    version "5.3.1"
+    resolved "https://registry.yarnpkg.com/imagemin/-/imagemin-5.3.1.tgz#f19c2eee1e71ba6c6558c515f9fc96680189a6d4"
+    dependencies:
+      file-type "^4.1.0"
+      globby "^6.1.0"
+      make-dir "^1.0.0"
+      p-pipe "^1.1.0"
+      pify "^2.3.0"
+      replace-ext "^1.0.0"
+  
+  immutability-helper@^2.2.0:
+    version "2.4.0"
+    resolved "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-2.4.0.tgz#00d421e2957c17f0f0781475f05ffd837e73458d"
+    dependencies:
+      invariant "^2.2.0"
+  
+  imports-loader@^0.7.1:
+    version "0.7.1"
+    resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.7.1.tgz#f204b5f34702a32c1db7d48d89d5e867a0441253"
+    dependencies:
+      loader-utils "^1.0.2"
+      source-map "^0.5.6"
+  
+  imurmurhash@^0.1.4:
+    version "0.1.4"
+    resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+  
+  in-publish@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51"
+  
+  indent-string@^2.1.0:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+    dependencies:
+      repeating "^2.0.0"
+  
+  indexes-of@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
+  
+  [email protected]:
+    version "0.0.1"
+    resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+  
+  inflection@~1.10.0:
+    version "1.10.0"
+    resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.10.0.tgz#5bffcb1197ad3e81050f8e17e21668087ee9eb2f"
+  
+  inflection@~1.3.0:
+    version "1.3.8"
+    resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.3.8.tgz#cbd160da9f75b14c3cc63578d4f396784bf3014e"
+  
+  inflight@^1.0.4:
+    version "1.0.6"
+    resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+    dependencies:
+      once "^1.3.0"
+      wrappy "1"
+  
+  inherits@2, [email protected], inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
+    version "2.0.3"
+    resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+  
+  [email protected]:
+    version "2.0.1"
+    resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+  
+  ini@~1.3.0:
+    version "1.3.4"
+    resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+  
+  inline-source-map@~0.6.0:
+    version "0.6.2"
+    resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5"
+    dependencies:
+      source-map "~0.5.3"
+  
+  inline-style-prefixer@^3.0.6:
+    version "3.0.8"
+    resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz#8551b8e5b4d573244e66a34b04f7d32076a2b534"
+    dependencies:
+      bowser "^1.7.3"
+      css-in-js-utils "^2.0.0"
+  
+  inquirer@^0.12.0:
+    version "0.12.0"
+    resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
+    dependencies:
+      ansi-escapes "^1.1.0"
+      ansi-regex "^2.0.0"
+      chalk "^1.0.0"
+      cli-cursor "^1.0.1"
+      cli-width "^2.0.0"
+      figures "^1.3.5"
+      lodash "^4.3.0"
+      readline2 "^1.0.1"
+      run-async "^0.1.0"
+      rx-lite "^3.1.2"
+      string-width "^1.0.1"
+      strip-ansi "^3.0.0"
+      through "^2.3.6"
+  
+  insert-module-globals@^7.0.0:
+    version "7.0.1"
+    resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.0.1.tgz#c03bf4e01cb086d5b5e5ace8ad0afe7889d638c3"
+    dependencies:
+      JSONStream "^1.0.3"
+      combine-source-map "~0.7.1"
+      concat-stream "~1.5.1"
+      is-buffer "^1.1.0"
+      lexical-scope "^1.2.0"
+      process "~0.11.0"
+      through2 "^2.0.0"
+      xtend "^4.0.0"
+  
+  interpret@^1.0.0:
+    version "1.0.4"
+    resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.4.tgz#820cdd588b868ffb191a809506d6c9c8f212b1b0"
+  
+  invariant@^2.2.0, invariant@^2.2.2:
+    version "2.2.2"
+    resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
+    dependencies:
+      loose-envify "^1.0.0"
+  
+  invert-kv@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+  
+  ip-address@^5.8.9:
+    version "5.8.9"
+    resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-5.8.9.tgz#6379277c23fc5adb20511e4d23ec2c1bde105dfd"
+    dependencies:
+      jsbn "1.1.0"
+      lodash.find "^4.6.0"
+      lodash.max "^4.0.1"
+      lodash.merge "^4.6.0"
+      lodash.padstart "^4.6.1"
+      lodash.repeat "^4.1.0"
+      sprintf-js "1.1.0"
+  
+  ip-regex@^1.0.1:
+    version "1.0.3"
+    resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd"
+  
+  [email protected]:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/ip/-/ip-1.0.1.tgz#c7e356cdea225ae71b36d70f2e71a92ba4e42590"
+  
+  ip@^1.1.2, ip@^1.1.4:
+    version "1.1.5"
+    resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
+  
+  is-absolute-url@^2.0.0:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
+  
+  is-absolute@^0.1.5:
+    version "0.1.7"
+    resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.1.7.tgz#847491119fccb5fb436217cc737f7faad50f603f"
+    dependencies:
+      is-relative "^0.1.0"
+  
+  is-arrayish@^0.2.1:
+    version "0.2.1"
+    resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+  
+  is-binary-path@^1.0.0:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+    dependencies:
+      binary-extensions "^1.0.0"
+  
+  is-boolean-object@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93"
+  
+  is-buffer@^1.0.2, is-buffer@^1.1.0, is-buffer@^1.1.5:
+    version "1.1.5"
+    resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc"
+  
+  is-builtin-module@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+    dependencies:
+      builtin-modules "^1.0.0"
+  
+  is-bzip2@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/is-bzip2/-/is-bzip2-1.0.0.tgz#5ee58eaa5a2e9c80e21407bedf23ae5ac091b3fc"
+  
+  is-callable@^1.1.1, is-callable@^1.1.3:
+    version "1.1.3"
+    resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
+  
+  is-ci@^1.0.10:
+    version "1.0.10"
+    resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e"
+    dependencies:
+      ci-info "^1.0.0"
+  
+  is-cwebp-readable@^1.0.0:
+    version "1.0.3"
+    resolved "https://registry.yarnpkg.com/is-cwebp-readable/-/is-cwebp-readable-1.0.3.tgz#9a8fde2bed77f3417ae9371258c58e2ec3285118"
+    dependencies:
+      file-type "^3.1.0"
+  
+  is-date-object@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
+  
+  is-docker@^1.1.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-1.1.0.tgz#f04374d4eee5310e9a8e113bf1495411e46176a1"
+  
+  is-dotfile@^1.0.0:
+    version "1.0.3"
+    resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
+  
+  is-equal-shallow@^0.1.3:
+    version "0.1.3"
+    resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+    dependencies:
+      is-primitive "^2.0.0"
+  
+  is-extendable@^0.1.0, is-extendable@^0.1.1:
+    version "0.1.1"
+    resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+  
+  is-extglob@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+  
+  is-extglob@^2.1.0:
+    version "2.1.1"
+    resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+  
+  is-finite@^1.0.0:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+    dependencies:
+      number-is-nan "^1.0.0"
+  
+  is-fullwidth-code-point@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+    dependencies:
+      number-is-nan "^1.0.0"
+  
+  is-fullwidth-code-point@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+  
+  is-gif@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/is-gif/-/is-gif-1.0.0.tgz#a6d2ae98893007bffa97a1d8c01d63205832097e"
+  
+  is-glob@^2.0.0, is-glob@^2.0.1:
+    version "2.0.1"
+    resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+    dependencies:
+      is-extglob "^1.0.0"
+  
+  is-glob@^3.1.0:
+    version "3.1.0"
+    resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+    dependencies:
+      is-extglob "^2.1.0"
+  
+  is-gzip@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/is-gzip/-/is-gzip-1.0.0.tgz#6ca8b07b99c77998025900e555ced8ed80879a83"
+  
+  is-jpg@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/is-jpg/-/is-jpg-1.0.0.tgz#2959c17e73430db38264da75b90dd54f2d86da1c"
+  
+  is-my-ip-valid@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824"
+  
+  is-my-json-valid@^2.10.0:
+    version "2.16.1"
+    resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11"
+    dependencies:
+      generate-function "^2.0.0"
+      generate-object-property "^1.1.0"
+      jsonpointer "^4.0.0"
+      xtend "^4.0.0"
+  
+  is-my-json-valid@^2.12.4:
+    version "2.17.2"
+    resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c"
+    dependencies:
+      generate-function "^2.0.0"
+      generate-object-property "^1.1.0"
+      is-my-ip-valid "^1.0.0"
+      jsonpointer "^4.0.0"
+      xtend "^4.0.0"
+  
+  is-natural-number@^2.0.0:
+    version "2.1.1"
+    resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-2.1.1.tgz#7d4c5728377ef386c3e194a9911bf57c6dc335e7"
+  
+  is-number-object@^1.0.3:
+    version "1.0.3"
+    resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799"
+  
+  is-number@^0.1.1:
+    version "0.1.1"
+    resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806"
+  
+  is-number@^2.1.0:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+    dependencies:
+      kind-of "^3.0.2"
+  
+  is-number@^3.0.0:
+    version "3.0.0"
+    resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+    dependencies:
+      kind-of "^3.0.2"
+  
+  is-obj@^1.0.0:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+  
+  is-object@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470"
+  
+  is-path-cwd@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
+  
+  is-path-in-cwd@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
+    dependencies:
+      is-path-inside "^1.0.0"
+  
+  is-path-inside@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f"
+    dependencies:
+      path-is-inside "^1.0.1"
+  
+  is-plain-obj@^1.0.0, is-plain-obj@^1.1.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+  
+  is-plain-object@^2.0.1:
+    version "2.0.4"
+    resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+    dependencies:
+      isobject "^3.0.1"
+  
+  is-png@^1.0.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/is-png/-/is-png-1.1.0.tgz#d574b12bf275c0350455570b0e5b57ab062077ce"
+  
+  is-posix-bracket@^0.1.0:
+    version "0.1.1"
+    resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+  
+  is-primitive@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+  
+  is-property@^1.0.0:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+  
+  is-redirect@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
+  
+  is-regex@^1.0.4:
+    version "1.0.4"
+    resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
+    dependencies:
+      has "^1.0.1"
+  
+  is-relative@^0.1.0:
+    version "0.1.3"
+    resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.1.3.tgz#905fee8ae86f45b3ec614bc3c15c869df0876e82"
+  
+  is-resolvable@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62"
+    dependencies:
+      tryit "^1.0.1"
+  
+  is-retry-allowed@^1.0.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"
+  
+  is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+  
+  is-string@^1.0.4:
+    version "1.0.4"
+    resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64"
+  
+  is-subset@^0.1.1:
+    version "0.1.1"
+    resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6"
+  
+  is-svg@^2.0.0:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9"
+    dependencies:
+      html-comment-regex "^1.1.0"
+  
+  is-symbol@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
+  
+  is-tar@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/is-tar/-/is-tar-1.0.0.tgz#2f6b2e1792c1f5bb36519acaa9d65c0d26fe853d"
+  
+  is-typedarray@~1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+  
+  is-url@^1.2.0:
+    version "1.2.2"
+    resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.2.tgz#498905a593bf47cc2d9e7f738372bbf7696c7f26"
+  
+  is-utf8@^0.2.0:
+    version "0.2.1"
+    resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+  
+  is-valid-glob@^0.3.0:
+    version "0.3.0"
+    resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-0.3.0.tgz#d4b55c69f51886f9b65c70d6c2622d37e29f48fe"
+  
+  is-windows@^1.0.0, is-windows@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9"
+  
+  is-zip@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/is-zip/-/is-zip-1.0.0.tgz#47b0a8ff4d38a76431ccfd99a8e15a4c86ba2325"
+  
+  [email protected], isarray@~0.0.1:
+    version "0.0.1"
+    resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+  
+  [email protected], isarray@^1.0.0, isarray@~1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+  
+  [email protected]:
+    version "2.0.1"
+    resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e"
+  
+  isbinaryfile@^3.0.0:
+    version "3.0.2"
+    resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621"
+  
+  isexe@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+  
+  isobject@^2.0.0:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+    dependencies:
+      isarray "1.0.0"
+  
+  isobject@^3.0.1:
+    version "3.0.1"
+    resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+  
+  isomorphic-fetch@^2.1.1:
+    version "2.2.1"
+    resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
+    dependencies:
+      node-fetch "^1.0.1"
+      whatwg-fetch ">=0.10.0"
+  
+  isstream@~0.1.2:
+    version "0.1.2"
+    resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+  
+  isurl@^1.0.0-alpha5:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67"
+    dependencies:
+      has-to-string-tag-x "^1.2.0"
+      is-object "^1.0.1"
+  
+  jasmine-core@~2.99.0:
+    version "2.99.1"
+    resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.99.1.tgz#e6400df1e6b56e130b61c4bcd093daa7f6e8ca15"
+  
+  jasmine-enzyme@~4.1.1:
+    version "4.1.1"
+    resolved "https://registry.yarnpkg.com/jasmine-enzyme/-/jasmine-enzyme-4.1.1.tgz#031dc0847c6e9f6e30ba559696422769c8e9a685"
+    dependencies:
+      enzyme-matchers "^4.1.1"
+  
+  [email protected]:
+    version "1.6.7"
+    resolved "https://registry.yarnpkg.com/jquery-contextmenu/-/jquery-contextmenu-1.6.7.tgz#e0d807d1bdca71c11bb82b95c1617dd2757278e5"
+    dependencies:
+      jquery ">=1.7.0"
+  
+  jquery-contextmenu@^2.5.0:
+    version "2.6.2"
+    resolved "https://registry.yarnpkg.com/jquery-contextmenu/-/jquery-contextmenu-2.6.2.tgz#83c7ba45c67c814cc4095b19551fd12e5d71da7e"
+  
+  jquery-mousewheel@~3.1.13:
+    version "3.1.13"
+    resolved "https://registry.yarnpkg.com/jquery-mousewheel/-/jquery-mousewheel-3.1.13.tgz#06f0335f16e353a695e7206bf50503cb523a6ee5"
+  
+  jquery-ui@>=1.8.0, jquery-ui@^1.12.1:
+    version "1.12.1"
+    resolved "https://registry.yarnpkg.com/jquery-ui/-/jquery-ui-1.12.1.tgz#bcb4045c8dd0539c134bc1488cdd3e768a7a9e51"
+  
+  [email protected]:
+    version "1.11.1"
+    resolved "https://registry.yarnpkg.com/jquery/-/jquery-1.11.1.tgz#b6ec928590112ebed69e1e49cbfd0025ccd60ddb"
+  
+  [email protected], jquery@>=1.7.0, "jquery@>=1.7.1 <4.0.0", jquery@>=1.8.0, jquery@>=1.9.0, "jquery@^1.8.3 || ^2.0 || ^3.0":
+    version "1.11.2"
+    resolved "https://registry.yarnpkg.com/jquery/-/jquery-1.11.2.tgz#30ab26857211c37caa83da0f6903155fe49bb72d"
+  
+  js-base64@^2.1.8, js-base64@^2.1.9:
+    version "2.3.2"
+    resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.3.2.tgz#a79a923666372b580f8e27f51845c6f7e8fbfbaf"
+  
+  js-string-escape@^1.0.0:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef"
+  
+  js-tokens@^3.0.0, js-tokens@^3.0.2:
+    version "3.0.2"
+    resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+  
+  js-yaml@^3.5.1:
+    version "3.10.0"
+    resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
+    dependencies:
+      argparse "^1.0.7"
+      esprima "^4.0.0"
+  
+  js-yaml@~3.7.0:
+    version "3.7.0"
+    resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
+    dependencies:
+      argparse "^1.0.7"
+      esprima "^2.6.0"
+  
+  [email protected]:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040"
+  
+  jsbn@~0.1.0:
+    version "0.1.1"
+    resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+  
+  jsesc@^1.3.0:
+    version "1.3.0"
+    resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+  
+  jsesc@~0.5.0:
+    version "0.5.0"
+    resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+  
+  json-loader@^0.5.4:
+    version "0.5.7"
+    resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d"
+  
+  json-schema-traverse@^0.3.0:
+    version "0.3.1"
+    resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
+  
+  [email protected]:
+    version "0.2.3"
+    resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+  
+  json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+    dependencies:
+      jsonify "~0.0.0"
+  
+  json-stable-stringify@~0.0.0:
+    version "0.0.1"
+    resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45"
+    dependencies:
+      jsonify "~0.0.0"
+  
+  [email protected], json-stringify-safe@~5.0.1:
+    version "5.0.1"
+    resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+  
+  json5@^0.5.0, json5@^0.5.1:
+    version "0.5.1"
+    resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+  
+  jsonify@~0.0.0:
+    version "0.0.0"
+    resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+  
+  jsonparse@^1.2.0:
+    version "1.3.1"
+    resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
+  
+  jsonpointer@^4.0.0:
+    version "4.0.1"
+    resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
+  
+  jsprim@^1.2.2:
+    version "1.4.1"
+    resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+    dependencies:
+      assert-plus "1.0.0"
+      extsprintf "1.3.0"
+      json-schema "0.2.3"
+      verror "1.10.0"
+  
+  jsx-ast-utils@^1.3.4:
+    version "1.4.1"
+    resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1"
+  
+  karma-babel-preprocessor@^7.0.0:
+    version "7.0.0"
+    resolved "https://registry.yarnpkg.com/karma-babel-preprocessor/-/karma-babel-preprocessor-7.0.0.tgz#18756d818f97a5e88f91902674cd9130177a8dce"
+  
+  karma-browserify@~5.2.0:
+    version "5.2.0"
+    resolved "https://registry.yarnpkg.com/karma-browserify/-/karma-browserify-5.2.0.tgz#d3039aeea24362162fea048bcec04abf375f1d79"
+    dependencies:
+      convert-source-map "^1.1.3"
+      hat "^0.0.3"
+      js-string-escape "^1.0.0"
+      lodash "^3.10.1"
+      minimatch "^3.0.0"
+      os-shim "^0.1.3"
+  
+  karma-chrome-launcher@^2.2.0:
+    version "2.2.0"
+    resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz#cf1b9d07136cc18fe239327d24654c3dbc368acf"
+    dependencies:
+      fs-access "^1.0.0"
+      which "^1.2.1"
+  
+  karma-jasmine-html-reporter@^0.2.2:
+    version "0.2.2"
+    resolved "https://registry.yarnpkg.com/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.2.tgz#48a8e5ef18807617ee2b5e33c1194c35b439524c"
+    dependencies:
+      karma-jasmine "^1.0.2"
+  
+  karma-jasmine@^1.0.2:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.1.0.tgz#22e4c06bf9a182e5294d1f705e3733811b810acf"
+  
+  karma-jasmine@~1.1.1:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.1.1.tgz#6fe840e75a11600c9d91e84b33c458e1c46a3529"
+  
+  karma-requirejs@~1.1.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/karma-requirejs/-/karma-requirejs-1.1.0.tgz#fddae2cb87d7ebc16fb0222893564d7fee578798"
+  
+  karma-webpack@~2.0.13:
+    version "2.0.13"
+    resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-2.0.13.tgz#cf56e3056c15b7747a0bb2140fc9a6be41dd9f02"
+    dependencies:
+      async "^2.0.0"
+      babel-runtime "^6.0.0"
+      loader-utils "^1.0.0"
+      lodash "^4.0.0"
+      source-map "^0.5.6"
+      webpack-dev-middleware "^1.12.0"
+  
+  karma@~2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/karma/-/karma-2.0.0.tgz#a02698dd7f0f05ff5eb66ab8f65582490b512e58"
+    dependencies:
+      bluebird "^3.3.0"
+      body-parser "^1.16.1"
+      browserify "^14.5.0"
+      chokidar "^1.4.1"
+      colors "^1.1.0"
+      combine-lists "^1.0.0"
+      connect "^3.6.0"
+      core-js "^2.2.0"
+      di "^0.0.1"
+      dom-serialize "^2.2.0"
+      expand-braces "^0.1.1"
+      glob "^7.1.1"
+      graceful-fs "^4.1.2"
+      http-proxy "^1.13.0"
+      isbinaryfile "^3.0.0"
+      lodash "^4.17.4"
+      log4js "^2.3.9"
+      mime "^1.3.4"
+      minimatch "^3.0.2"
+      optimist "^0.6.1"
+      qjobs "^1.1.4"
+      range-parser "^1.2.0"
+      rimraf "^2.6.0"
+      safe-buffer "^5.0.1"
+      socket.io "2.0.4"
+      source-map "^0.6.1"
+      tmp "0.0.33"
+      useragent "^2.1.12"
+  
+  kind-of@^2.0.1:
+    version "2.0.1"
+    resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5"
+    dependencies:
+      is-buffer "^1.0.2"
+  
+  kind-of@^3.0.2, kind-of@^3.2.2:
+    version "3.2.2"
+    resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+    dependencies:
+      is-buffer "^1.1.5"
+  
+  kind-of@^4.0.0:
+    version "4.0.0"
+    resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+    dependencies:
+      is-buffer "^1.1.5"
+  
+  labeled-stream-splicer@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz#a52e1d138024c00b86b1c0c91f677918b8ae0a59"
+    dependencies:
+      inherits "^2.0.1"
+      isarray "~0.0.1"
+      stream-splicer "^2.0.0"
+  
+  lazy-cache@^0.2.3:
+    version "0.2.7"
+    resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65"
+  
+  lazy-cache@^1.0.3:
+    version "1.0.4"
+    resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+  
+  lazy-req@^1.0.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-1.1.0.tgz#bdaebead30f8d824039ce0ce149d4daa07ba1fac"
+  
+  lazystream@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4"
+    dependencies:
+      readable-stream "^2.0.5"
+  
+  lcid@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
+    dependencies:
+      invert-kv "^1.0.0"
+  
+  level-codec@~7.0.0:
+    version "7.0.1"
+    resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7"
+  
+  level-errors@^1.0.3, level-errors@~1.0.3:
+    version "1.0.5"
+    resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.0.5.tgz#83dbfb12f0b8a2516bdc9a31c4876038e227b859"
+    dependencies:
+      errno "~0.1.1"
+  
+  level-iterator-stream@~1.3.0:
+    version "1.3.1"
+    resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz#e43b78b1a8143e6fa97a4f485eb8ea530352f2ed"
+    dependencies:
+      inherits "^2.0.1"
+      level-errors "^1.0.3"
+      readable-stream "^1.0.33"
+      xtend "^4.0.0"
+  
+  level-packager@~1.2.0:
+    version "1.2.1"
+    resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-1.2.1.tgz#067fedfd072b7fe3c6bec6080c0cbd4a6b2e11f4"
+    dependencies:
+      levelup "~1.3.0"
+  
+  level@^1.4.0:
+    version "1.7.0"
+    resolved "https://registry.yarnpkg.com/level/-/level-1.7.0.tgz#43464a3a8ba73b2f3de56a24292805146da213a1"
+    dependencies:
+      level-packager "~1.2.0"
+      leveldown "~1.7.0"
+  
+  leveldown@~1.7.0:
+    version "1.7.2"
+    resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-1.7.2.tgz#5e3467bb27ee246a4a7b8dbd8fb2b16206a6eb8b"
+    dependencies:
+      abstract-leveldown "~2.6.1"
+      bindings "~1.2.1"
+      fast-future "~1.0.2"
+      nan "~2.6.1"
+      prebuild-install "^2.1.0"
+  
+  levelup@~1.3.0:
+    version "1.3.9"
+    resolved "https://registry.yarnpkg.com/levelup/-/levelup-1.3.9.tgz#2dbcae845b2bb2b6bea84df334c475533bbd82ab"
+    dependencies:
+      deferred-leveldown "~1.2.1"
+      level-codec "~7.0.0"
+      level-errors "~1.0.3"
+      level-iterator-stream "~1.3.0"
+      prr "~1.0.1"
+      semver "~5.4.1"
+      xtend "~4.0.0"
+  
+  levn@^0.3.0, levn@~0.3.0:
+    version "0.3.0"
+    resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+    dependencies:
+      prelude-ls "~1.1.2"
+      type-check "~0.3.2"
+  
+  lexical-scope@^1.2.0:
+    version "1.2.0"
+    resolved "https://registry.yarnpkg.com/lexical-scope/-/lexical-scope-1.2.0.tgz#fcea5edc704a4b3a8796cdca419c3a0afaf22df4"
+    dependencies:
+      astw "^2.0.0"
+  
+  [email protected]:
+    version "0.1.0"
+    resolved "https://registry.yarnpkg.com/libbase64/-/libbase64-0.1.0.tgz#62351a839563ac5ff5bd26f12f60e9830bb751e6"
+  
+  [email protected]:
+    version "3.0.0"
+    resolved "https://registry.yarnpkg.com/libmime/-/libmime-3.0.0.tgz#51a1a9e7448ecbd32cda54421675bb21bc093da6"
+    dependencies:
+      iconv-lite "0.4.15"
+      libbase64 "0.1.0"
+      libqp "1.1.0"
+  
+  [email protected]:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/libqp/-/libqp-1.1.0.tgz#f5e6e06ad74b794fb5b5b66988bf728ef1dedbe8"
+  
+  linez@^4.1.4:
+    version "4.1.4"
+    resolved "https://registry.yarnpkg.com/linez/-/linez-4.1.4.tgz#4f1db16965c3a19e394a29313023cc9cb29f02a7"
+    dependencies:
+      buffer-equals "^1.0.4"
+      iconv-lite "^0.4.15"
+  
+  load-json-file@^1.0.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+    dependencies:
+      graceful-fs "^4.1.2"
+      parse-json "^2.2.0"
+      pify "^2.0.0"
+      pinkie-promise "^2.0.0"
+      strip-bom "^2.0.0"
+  
+  load-json-file@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+    dependencies:
+      graceful-fs "^4.1.2"
+      parse-json "^2.2.0"
+      pify "^2.0.0"
+      strip-bom "^3.0.0"
+  
+  loader-runner@^2.3.0:
+    version "2.3.0"
+    resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2"
+  
+  loader-utils@^1.0.0, loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd"
+    dependencies:
+      big.js "^3.1.3"
+      emojis-list "^2.0.0"
+      json5 "^0.5.0"
+  
+  loader-utils@~0.2.2:
+    version "0.2.17"
+    resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
+    dependencies:
+      big.js "^3.1.3"
+      emojis-list "^2.0.0"
+      json5 "^0.5.0"
+      object-assign "^4.0.1"
+  
+  locate-path@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+    dependencies:
+      p-locate "^2.0.0"
+      path-exists "^3.0.0"
+  
+  lodash._basecopy@^3.0.0:
+    version "3.0.1"
+    resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
+  
+  lodash._baseisequal@^3.0.0:
+    version "3.0.7"
+    resolved "https://registry.yarnpkg.com/lodash._baseisequal/-/lodash._baseisequal-3.0.7.tgz#d8025f76339d29342767dcc887ce5cb95a5b51f1"
+    dependencies:
+      lodash.isarray "^3.0.0"
+      lodash.istypedarray "^3.0.0"
+      lodash.keys "^3.0.0"
+  
+  lodash._basetostring@^3.0.0:
+    version "3.0.1"
+    resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5"
+  
+  lodash._basevalues@^3.0.0:
+    version "3.0.0"
+    resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7"
+  
+  lodash._bindcallback@^3.0.0:
+    version "3.0.1"
+    resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
+  
+  lodash._getnative@^3.0.0:
+    version "3.9.1"
+    resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
+  
+  lodash._isiterateecall@^3.0.0:
+    version "3.0.9"
+    resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
+  
+  lodash._reescape@^3.0.0:
+    version "3.0.0"
+    resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a"
+  
+  lodash._reevaluate@^3.0.0:
+    version "3.0.0"
+    resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed"
+  
+  lodash._reinterpolate@^3.0.0:
+    version "3.0.0"
+    resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
+  
+  lodash._root@^3.0.0:
+    version "3.0.1"
+    resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692"
+  
+  lodash.assign@^4.2.0:
+    version "4.2.0"
+    resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
+  
+  lodash.clonedeep@^4.3.2:
+    version "4.5.0"
+    resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
+  
+  lodash.escape@^3.0.0:
+    version "3.2.0"
+    resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698"
+    dependencies:
+      lodash._root "^3.0.0"
+  
+  lodash.find@^4.6.0:
+    version "4.6.0"
+    resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1"
+  
+  lodash.flattendeep@^4.4.0:
+    version "4.4.0"
+    resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2"
+  
+  lodash.get@^4.4.2:
+    version "4.4.2"
+    resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
+  
+  lodash.isarguments@^3.0.0:
+    version "3.1.0"
+    resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
+  
+  lodash.isarray@^3.0.0:
+    version "3.0.4"
+    resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
+  
+  lodash.isequal@^3.0:
+    version "3.0.4"
+    resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-3.0.4.tgz#1c35eb3b6ef0cd1ff51743e3ea3cf7fdffdacb64"
+    dependencies:
+      lodash._baseisequal "^3.0.0"
+      lodash._bindcallback "^3.0.0"
+  
+  lodash.isequal@^4.0.0:
+    version "4.5.0"
+    resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
+  
+  lodash.istypedarray@^3.0.0:
+    version "3.0.6"
+    resolved "https://registry.yarnpkg.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62"
+  
+  lodash.keys@^3.0.0:
+    version "3.1.2"
+    resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
+    dependencies:
+      lodash._getnative "^3.0.0"
+      lodash.isarguments "^3.0.0"
+      lodash.isarray "^3.0.0"
+  
+  lodash.max@^4.0.1:
+    version "4.0.1"
+    resolved "https://registry.yarnpkg.com/lodash.max/-/lodash.max-4.0.1.tgz#8735566c618b35a9f760520b487ae79658af136a"
+  
+  lodash.memoize@^4.1.2:
+    version "4.1.2"
+    resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+  
+  lodash.memoize@~3.0.3:
+    version "3.0.4"
+    resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f"
+  
+  lodash.merge@^4.6.0:
+    version "4.6.1"
+    resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54"
+  
+  lodash.mergewith@^4.6.0:
+    version "4.6.0"
+    resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55"
+  
+  lodash.padstart@^4.6.1:
+    version "4.6.1"
+    resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b"
+  
+  lodash.repeat@^4.1.0:
+    version "4.1.0"
+    resolved "https://registry.yarnpkg.com/lodash.repeat/-/lodash.repeat-4.1.0.tgz#fc7de8131d8c8ac07e4b49f74ffe829d1f2bec44"
+  
+  lodash.restparam@^3.0.0:
+    version "3.6.1"
+    resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
+  
+  lodash.tail@^4.1.1:
+    version "4.1.1"
+    resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664"
+  
+  lodash.template@^3.0.0:
+    version "3.6.2"
+    resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f"
+    dependencies:
+      lodash._basecopy "^3.0.0"
+      lodash._basetostring "^3.0.0"
+      lodash._basevalues "^3.0.0"
+      lodash._isiterateecall "^3.0.0"
+      lodash._reinterpolate "^3.0.0"
+      lodash.escape "^3.0.0"
+      lodash.keys "^3.0.0"
+      lodash.restparam "^3.0.0"
+      lodash.templatesettings "^3.0.0"
+  
+  lodash.templatesettings@^3.0.0:
+    version "3.1.1"
+    resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5"
+    dependencies:
+      lodash._reinterpolate "^3.0.0"
+      lodash.escape "^3.0.0"
+  
+  lodash.uniq@^4.5.0:
+    version "4.5.0"
+    resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+  
+  lodash@^3.10.1:
+    version "3.10.1"
+    resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
+  
+  lodash@^4.0.0, lodash@^4.14.0, lodash@^4.14.1, lodash@^4.15.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.0, lodash@~4.17.4:
+    version "4.17.4"
+    resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+  
+  log4js@^2.3.9:
+    version "2.5.3"
+    resolved "https://registry.yarnpkg.com/log4js/-/log4js-2.5.3.tgz#38bb7bde5e9c1c181bd75e8bc128c5cd0409caf1"
+    dependencies:
+      circular-json "^0.5.1"
+      date-format "^1.2.0"
+      debug "^3.1.0"
+      semver "^5.3.0"
+      streamroller "^0.7.0"
+    optionalDependencies:
+      amqplib "^0.5.2"
+      axios "^0.15.3"
+      hipchat-notifier "^1.1.0"
+      loggly "^1.1.0"
+      mailgun-js "^0.7.0"
+      nodemailer "^2.5.0"
+      redis "^2.7.1"
+      slack-node "~0.2.0"
+  
+  logalot@^2.0.0:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/logalot/-/logalot-2.1.0.tgz#5f8e8c90d304edf12530951a5554abb8c5e3f552"
+    dependencies:
+      figures "^1.3.5"
+      squeak "^1.0.0"
+  
+  loggly@^1.1.0:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/loggly/-/loggly-1.1.1.tgz#0a0fc1d3fa3a5ec44fdc7b897beba2a4695cebee"
+    dependencies:
+      json-stringify-safe "5.0.x"
+      request "2.75.x"
+      timespan "2.3.x"
+  
+  longest@^1.0.0, longest@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+  
+  loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1:
+    version "1.3.1"
+    resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
+    dependencies:
+      js-tokens "^3.0.0"
+  
+  loud-rejection@^1.0.0:
+    version "1.6.0"
+    resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+    dependencies:
+      currently-unhandled "^0.4.1"
+      signal-exit "^3.0.0"
+  
+  lowercase-keys@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
+  
+  lowlight@~1.9.0:
+    version "1.9.1"
+    resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.9.1.tgz#ed7c3dffc36f8c1f263735c0fe0c907847c11250"
+    dependencies:
+      highlight.js "~9.12.0"
+  
+  lpad-align@^1.0.1:
+    version "1.1.2"
+    resolved "https://registry.yarnpkg.com/lpad-align/-/lpad-align-1.1.2.tgz#21f600ac1c3095c3c6e497ee67271ee08481fe9e"
+    dependencies:
+      get-stdin "^4.0.1"
+      indent-string "^2.1.0"
+      longest "^1.0.0"
+      meow "^3.3.0"
+  
+  [email protected]:
+    version "2.2.4"
+    resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d"
+  
+  lru-cache@^3.2.0:
+    version "3.2.0"
+    resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee"
+    dependencies:
+      pseudomap "^1.0.1"
+  
+  lru-cache@^4.0.1:
+    version "4.1.1"
+    resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55"
+    dependencies:
+      pseudomap "^1.0.2"
+      yallist "^2.1.2"
+  
+  lru-cache@~2.6.5:
+    version "2.6.5"
+    resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.6.5.tgz#e56d6354148ede8d7707b58d143220fd08df0fd5"
+  
+  lunr@^0.7.0:
+    version "0.7.2"
+    resolved "https://registry.yarnpkg.com/lunr/-/lunr-0.7.2.tgz#79a30e932e216cba163541ee37a3607c12cd7281"
+  
+  macaddress@^0.2.8:
+    version "0.2.8"
+    resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12"
+  
+  [email protected]:
+    version "4.0.1"
+    resolved "https://registry.yarnpkg.com/mailcomposer/-/mailcomposer-4.0.1.tgz#0e1c44b2a07cf740ee17dc149ba009f19cadfeb4"
+    dependencies:
+      buildmail "4.0.1"
+      libmime "3.0.0"
+  
+  mailgun-js@^0.7.0:
+    version "0.7.15"
+    resolved "https://registry.yarnpkg.com/mailgun-js/-/mailgun-js-0.7.15.tgz#ee366a20dac64c3c15c03d6c1b3e0ed795252abb"
+    dependencies:
+      async "~2.1.2"
+      debug "~2.2.0"
+      form-data "~2.1.1"
+      inflection "~1.10.0"
+      is-stream "^1.1.0"
+      path-proxy "~1.0.0"
+      proxy-agent "~2.0.0"
+      q "~1.4.0"
+      tsscmp "~1.0.0"
+  
+  make-dir@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.0.0.tgz#97a011751e91dd87cfadef58832ebb04936de978"
+    dependencies:
+      pify "^2.3.0"
+  
+  map-obj@^1.0.0, map-obj@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+  
+  math-expression-evaluator@^1.2.14:
+    version "1.2.17"
+    resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac"
+  
+  md5.js@^1.3.4:
+    version "1.3.4"
+    resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d"
+    dependencies:
+      hash-base "^3.0.0"
+      inherits "^2.0.1"
+  
+  [email protected]:
+    version "0.3.0"
+    resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+  
+  mem@^1.1.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
+    dependencies:
+      mimic-fn "^1.0.0"
+  
+  memory-fs@^0.4.0, memory-fs@~0.4.1:
+    version "0.4.1"
+    resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+    dependencies:
+      errno "^0.1.3"
+      readable-stream "^2.0.1"
+  
+  meow@^3.1.0, meow@^3.3.0, meow@^3.5.0, meow@^3.7.0:
+    version "3.7.0"
+    resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+    dependencies:
+      camelcase-keys "^2.0.0"
+      decamelize "^1.1.2"
+      loud-rejection "^1.0.0"
+      map-obj "^1.0.1"
+      minimist "^1.1.3"
+      normalize-package-data "^2.3.4"
+      object-assign "^4.0.1"
+      read-pkg-up "^1.0.1"
+      redent "^1.0.0"
+      trim-newlines "^1.0.0"
+  
+  merge-stream@^1.0.0:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1"
+    dependencies:
+      readable-stream "^2.0.1"
+  
+  micromatch@^2.1.5, micromatch@^2.3.7:
+    version "2.3.11"
+    resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+    dependencies:
+      arr-diff "^2.0.0"
+      array-unique "^0.2.1"
+      braces "^1.8.2"
+      expand-brackets "^0.1.4"
+      extglob "^0.3.1"
+      filename-regex "^2.0.0"
+      is-extglob "^1.0.0"
+      is-glob "^2.0.1"
+      kind-of "^3.0.2"
+      normalize-path "^2.0.1"
+      object.omit "^2.0.0"
+      parse-glob "^3.0.4"
+      regex-cache "^0.4.2"
+  
+  miller-rabin@^4.0.0:
+    version "4.0.0"
+    resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d"
+    dependencies:
+      bn.js "^4.0.0"
+      brorand "^1.0.1"
+  
+  mime-db@~1.30.0:
+    version "1.30.0"
+    resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
+  
+  mime-db@~1.33.0:
+    version "1.33.0"
+    resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
+  
+  mime-types@^2.1.11, mime-types@~2.1.18:
+    version "2.1.18"
+    resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8"
+    dependencies:
+      mime-db "~1.33.0"
+  
+  mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.17, mime-types@~2.1.7:
+    version "2.1.17"
+    resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a"
+    dependencies:
+      mime-db "~1.30.0"
+  
+  [email protected]:
+    version "1.3.6"
+    resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0"
+  
+  mime@^1.3.4:
+    version "1.4.1"
+    resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
+  
+  mime@^1.5.0:
+    version "1.6.0"
+    resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+  
+  mimic-fn@^1.0.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18"
+  
+  mimic-response@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e"
+  
+  minimalistic-assert@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3"
+  
+  minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+  
+  "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2:
+    version "3.0.4"
+    resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+    dependencies:
+      brace-expansion "^1.1.7"
+  
+  [email protected], minimist@~0.0.1:
+    version "0.0.8"
+    resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+  
+  minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0:
+    version "1.2.0"
+    resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+  
+  mixin-object@^2.0.1:
+    version "2.0.1"
+    resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e"
+    dependencies:
+      for-in "^0.1.3"
+      is-extendable "^0.1.1"
+  
+  "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
+    version "0.5.1"
+    resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+    dependencies:
+      minimist "0.0.8"
+  
+  module-deps@^4.0.8:
+    version "4.1.1"
+    resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-4.1.1.tgz#23215833f1da13fd606ccb8087b44852dcb821fd"
+    dependencies:
+      JSONStream "^1.0.3"
+      browser-resolve "^1.7.0"
+      cached-path-relative "^1.0.0"
+      concat-stream "~1.5.0"
+      defined "^1.0.0"
+      detective "^4.0.0"
+      duplexer2 "^0.1.2"
+      inherits "^2.0.1"
+      parents "^1.0.0"
+      readable-stream "^2.0.2"
+      resolve "^1.1.3"
+      stream-combiner2 "^1.1.1"
+      subarg "^1.0.0"
+      through2 "^2.0.0"
+      xtend "^4.0.0"
+  
+  moment-timezone@^0.4.0:
+    version "0.4.1"
+    resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.4.1.tgz#81f598c3ad5e22cdad796b67ecd8d88d0f5baa06"
+    dependencies:
+      moment ">= 2.6.0"
+  
+  "moment@>= 2.6.0", moment@^2.10:
+    version "2.18.1"
+    resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f"
+  
+  moment@^2.20.1:
+    version "2.20.1"
+    resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd"
+  
+  mousetrap@^1.6.1:
+    version "1.6.1"
+    resolved "https://registry.yarnpkg.com/mousetrap/-/mousetrap-1.6.1.tgz#2a085f5c751294c75e7e81f6ec2545b29cbf42d9"
+  
+  mozjpeg@^4.0.0:
+    version "4.1.1"
+    resolved "https://registry.yarnpkg.com/mozjpeg/-/mozjpeg-4.1.1.tgz#859030b24f689a53db9b40f0160d89195b88fd50"
+    dependencies:
+      bin-build "^2.0.0"
+      bin-wrapper "^3.0.0"
+      logalot "^2.0.0"
+  
+  [email protected]:
+    version "0.7.1"
+    resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+  
+  [email protected]:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+  
+  multimatch@^2.0.0:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b"
+    dependencies:
+      array-differ "^1.0.0"
+      array-union "^1.0.1"
+      arrify "^1.0.0"
+      minimatch "^3.0.0"
+  
+  multipipe@^0.1.2:
+    version "0.1.2"
+    resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b"
+    dependencies:
+      duplexer2 "0.0.2"
+  
+  [email protected]:
+    version "0.0.5"
+    resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
+  
+  nan@^2.3.0, nan@^2.3.2:
+    version "2.7.0"
+    resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46"
+  
+  nan@~2.6.1:
+    version "2.6.2"
+    resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45"
+  
+  natural-compare@^1.4.0:
+    version "1.4.0"
+    resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+  
+  nearley@^2.7.10:
+    version "2.11.0"
+    resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.11.0.tgz#5e626c79a6cd2f6ab9e7e5d5805e7668967757ae"
+    dependencies:
+      nomnom "~1.6.2"
+      railroad-diagrams "^1.0.0"
+      randexp "^0.4.2"
+  
+  [email protected]:
+    version "0.6.1"
+    resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
+  
+  netmask@~1.0.4:
+    version "1.0.6"
+    resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35"
+  
+  node-abi@^2.0.0:
+    version "2.1.1"
+    resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.1.1.tgz#c9cda256ec8aa99bcab2f6446db38af143338b2a"
+  
+  node-fetch@^1.0.1:
+    version "1.7.3"
+    resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
+    dependencies:
+      encoding "^0.1.11"
+      is-stream "^1.0.1"
+  
+  node-gyp@^3.3.1:
+    version "3.6.2"
+    resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60"
+    dependencies:
+      fstream "^1.0.0"
+      glob "^7.0.3"
+      graceful-fs "^4.1.2"
+      minimatch "^3.0.2"
+      mkdirp "^0.5.0"
+      nopt "2 || 3"
+      npmlog "0 || 1 || 2 || 3 || 4"
+      osenv "0"
+      request "2"
+      rimraf "2"
+      semver "~5.3.0"
+      tar "^2.0.0"
+      which "1"
+  
+  node-libs-browser@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646"
+    dependencies:
+      assert "^1.1.1"
+      browserify-zlib "^0.1.4"
+      buffer "^4.3.0"
+      console-browserify "^1.1.0"
+      constants-browserify "^1.0.0"
+      crypto-browserify "^3.11.0"
+      domain-browser "^1.1.1"
+      events "^1.0.0"
+      https-browserify "0.0.1"
+      os-browserify "^0.2.0"
+      path-browserify "0.0.0"
+      process "^0.11.0"
+      punycode "^1.2.4"
+      querystring-es3 "^0.2.0"
+      readable-stream "^2.0.5"
+      stream-browserify "^2.0.1"
+      stream-http "^2.3.1"
+      string_decoder "^0.10.25"
+      timers-browserify "^2.0.2"
+      tty-browserify "0.0.0"
+      url "^0.11.0"
+      util "^0.10.3"
+      vm-browserify "0.0.4"
+  
+  node-object-hash@^1.2.0:
+    version "1.3.0"
+    resolved "https://registry.yarnpkg.com/node-object-hash/-/node-object-hash-1.3.0.tgz#7f294f5afec6b08d713e40d40a95ec793e05baf3"
+  
+  node-pre-gyp@^0.6.36:
+    version "0.6.38"
+    resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.38.tgz#e92a20f83416415bb4086f6d1fb78b3da73d113d"
+    dependencies:
+      hawk "3.1.3"
+      mkdirp "^0.5.1"
+      nopt "^4.0.1"
+      npmlog "^4.0.2"
+      rc "^1.1.7"
+      request "2.81.0"
+      rimraf "^2.6.1"
+      semver "^5.3.0"
+      tar "^2.2.1"
+      tar-pack "^3.4.0"
+  
+  node-sass@^4.5.3:
+    version "4.5.3"
+    resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.5.3.tgz#d09c9d1179641239d1b97ffc6231fdcec53e1568"
+    dependencies:
+      async-foreach "^0.1.3"
+      chalk "^1.1.1"
+      cross-spawn "^3.0.0"
+      gaze "^1.0.0"
+      get-stdin "^4.0.1"
+      glob "^7.0.3"
+      in-publish "^2.0.0"
+      lodash.assign "^4.2.0"
+      lodash.clonedeep "^4.3.2"
+      lodash.mergewith "^4.6.0"
+      meow "^3.7.0"
+      mkdirp "^0.5.1"
+      nan "^2.3.2"
+      node-gyp "^3.3.1"
+      npmlog "^4.0.0"
+      request "^2.79.0"
+      sass-graph "^2.1.1"
+      stdout-stream "^1.4.0"
+  
+  node-status-codes@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f"
+  
+  node-uuid@~1.4.7:
+    version "1.4.8"
+    resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907"
+  
+  [email protected]:
+    version "3.3.2"
+    resolved "https://registry.yarnpkg.com/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz#e96fafb90358560947e569017d97e60738a50a86"
+    dependencies:
+      nodemailer-shared "1.1.0"
+      smtp-connection "2.12.0"
+  
+  [email protected]:
+    version "1.6.0"
+    resolved "https://registry.yarnpkg.com/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz#79c4908a1c0f5f375b73fe888da9828f6dc963a4"
+  
+  [email protected]:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz#cf5994e2fd268d00f5cf0fa767a08169edb07ec0"
+    dependencies:
+      nodemailer-fetch "1.6.0"
+  
+  [email protected]:
+    version "2.8.2"
+    resolved "https://registry.yarnpkg.com/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz#2eb94d6cf85780b1b4725ce853b9cbd5e8da8c72"
+    dependencies:
+      nodemailer-shared "1.1.0"
+      nodemailer-wellknown "0.1.10"
+      smtp-connection "2.12.0"
+  
+  [email protected]:
+    version "2.7.2"
+    resolved "https://registry.yarnpkg.com/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz#03d71c76314f14ac7dbc7bf033a6a6d16d67fb77"
+    dependencies:
+      nodemailer-shared "1.1.0"
+      nodemailer-wellknown "0.1.10"
+      smtp-connection "2.12.0"
+  
+  [email protected]:
+    version "0.1.10"
+    resolved "https://registry.yarnpkg.com/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz#586db8101db30cb4438eb546737a41aad0cf13d5"
+  
+  nodemailer@^2.5.0:
+    version "2.7.2"
+    resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-2.7.2.tgz#f242e649aeeae39b6c7ed740ef7b061c404d30f9"
+    dependencies:
+      libmime "3.0.0"
+      mailcomposer "4.0.1"
+      nodemailer-direct-transport "3.3.2"
+      nodemailer-shared "1.1.0"
+      nodemailer-smtp-pool "2.8.2"
+      nodemailer-smtp-transport "2.7.2"
+      socks "1.1.9"
+  
+  nomnom@~1.6.2:
+    version "1.6.2"
+    resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.6.2.tgz#84a66a260174408fc5b77a18f888eccc44fb6971"
+    dependencies:
+      colors "0.5.x"
+      underscore "~1.4.4"
+  
+  noop-logger@^0.1.1:
+    version "0.1.1"
+    resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2"
+  
+  "nopt@2 || 3":
+    version "3.0.6"
+    resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+    dependencies:
+      abbrev "1"
+  
+  nopt@^4.0.1:
+    version "4.0.1"
+    resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
+    dependencies:
+      abbrev "1"
+      osenv "^0.1.4"
+  
+  normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+    version "2.4.0"
+    resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
+    dependencies:
+      hosted-git-info "^2.1.4"
+      is-builtin-module "^1.0.0"
+      semver "2 || 3 || 4 || 5"
+      validate-npm-package-license "^3.0.1"
+  
+  normalize-path@^2.0.0, normalize-path@^2.0.1:
+    version "2.1.1"
+    resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+    dependencies:
+      remove-trailing-separator "^1.0.1"
+  
+  normalize-range@^0.1.2:
+    version "0.1.2"
+    resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+  
+  normalize-url@^1.4.0:
+    version "1.9.1"
+    resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
+    dependencies:
+      object-assign "^4.0.1"
+      prepend-http "^1.0.0"
+      query-string "^4.1.0"
+      sort-keys "^1.0.0"
+  
+  npm-run-path@^2.0.0:
+    version "2.0.2"
+    resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+    dependencies:
+      path-key "^2.0.0"
+  
+  "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.1, npmlog@^4.0.2:
+    version "4.1.2"
+    resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+    dependencies:
+      are-we-there-yet "~1.1.2"
+      console-control-strings "~1.1.0"
+      gauge "~2.7.3"
+      set-blocking "~2.0.0"
+  
+  nth-check@~1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4"
+    dependencies:
+      boolbase "~1.0.0"
+  
+  null-check@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd"
+  
+  num2fraction@^1.2.2:
+    version "1.2.2"
+    resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
+  
+  number-is-nan@^1.0.0:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+  
+  oauth-sign@~0.8.1, oauth-sign@~0.8.2:
+    version "0.8.2"
+    resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+  
+  object-assign@^2.0.0:
+    version "2.1.1"
+    resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa"
+  
+  object-assign@^3.0.0:
+    version "3.0.0"
+    resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
+  
+  object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
+    version "4.1.1"
+    resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+  
+  [email protected]:
+    version "0.0.3"
+    resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291"
+  
+  object-inspect@^1.5.0:
+    version "1.5.0"
+    resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.5.0.tgz#9d876c11e40f485c79215670281b767488f9bfe3"
+  
+  object-is@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6"
+  
+  object-keys@^1.0.10, object-keys@^1.0.11, object-keys@^1.0.8:
+    version "1.0.11"
+    resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
+  
+  object.assign@^4.0.4:
+    version "4.0.4"
+    resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc"
+    dependencies:
+      define-properties "^1.1.2"
+      function-bind "^1.1.0"
+      object-keys "^1.0.10"
+  
+  object.assign@^4.1.0:
+    version "4.1.0"
+    resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
+    dependencies:
+      define-properties "^1.1.2"
+      function-bind "^1.1.1"
+      has-symbols "^1.0.0"
+      object-keys "^1.0.11"
+  
+  object.entries@^1.0.4:
+    version "1.0.4"
+    resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f"
+    dependencies:
+      define-properties "^1.1.2"
+      es-abstract "^1.6.1"
+      function-bind "^1.1.0"
+      has "^1.0.1"
+  
+  object.omit@^2.0.0:
+    version "2.0.1"
+    resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+    dependencies:
+      for-own "^0.1.4"
+      is-extendable "^0.1.1"
+  
+  object.values@^1.0.4:
+    version "1.0.4"
+    resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a"
+    dependencies:
+      define-properties "^1.1.2"
+      es-abstract "^1.6.1"
+      function-bind "^1.1.0"
+      has "^1.0.1"
+  
+  on-finished@~2.3.0:
+    version "2.3.0"
+    resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+    dependencies:
+      ee-first "1.1.1"
+  
+  once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0:
+    version "1.4.0"
+    resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+    dependencies:
+      wrappy "1"
+  
+  onetime@^1.0.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
+  
+  optimist@^0.6.1:
+    version "0.6.1"
+    resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+    dependencies:
+      minimist "~0.0.1"
+      wordwrap "~0.0.2"
+  
+  optimize-css-assets-webpack-plugin@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-2.0.0.tgz#51cae71230ec91a4c157649715e47498e0cb460b"
+    dependencies:
+      underscore "^1.8.3"
+      webpack-sources "^0.1.0"
+  
+  optionator@^0.8.1, optionator@^0.8.2:
+    version "0.8.2"
+    resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+    dependencies:
+      deep-is "~0.1.3"
+      fast-levenshtein "~2.0.4"
+      levn "~0.3.0"
+      prelude-ls "~1.1.2"
+      type-check "~0.3.2"
+      wordwrap "~1.0.0"
+  
+  optipng-bin@^3.0.0:
+    version "3.1.4"
+    resolved "https://registry.yarnpkg.com/optipng-bin/-/optipng-bin-3.1.4.tgz#95d34f2c488704f6fd70606bfea0c659f1d95d84"
+    dependencies:
+      bin-build "^2.0.0"
+      bin-wrapper "^3.0.0"
+      logalot "^2.0.0"
+  
+  ordered-read-streams@^0.3.0:
+    version "0.3.0"
+    resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz#7137e69b3298bb342247a1bbee3881c80e2fd78b"
+    dependencies:
+      is-stream "^1.0.1"
+      readable-stream "^2.0.1"
+  
+  os-browserify@^0.2.0:
+    version "0.2.1"
+    resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f"
+  
+  os-browserify@~0.1.1:
+    version "0.1.2"
+    resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.1.2.tgz#49ca0293e0b19590a5f5de10c7f265a617d8fe54"
+  
+  os-browserify@~0.3.0:
+    version "0.3.0"
+    resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+  
+  os-filter-obj@^1.0.0:
+    version "1.0.3"
+    resolved "https://registry.yarnpkg.com/os-filter-obj/-/os-filter-obj-1.0.3.tgz#5915330d90eced557d2d938a31c6dd214d9c63ad"
+  
+  os-homedir@^1.0.0, os-homedir@^1.0.1:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+  
+  os-locale@^1.4.0:
+    version "1.4.0"
+    resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
+    dependencies:
+      lcid "^1.0.0"
+  
+  os-locale@^2.0.0, os-locale@^2.1.0:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
+    dependencies:
+      execa "^0.7.0"
+      lcid "^1.0.0"
+      mem "^1.1.0"
+  
+  os-shim@^0.1.3:
+    version "0.1.3"
+    resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917"
+  
+  os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+  
+  osenv@0, osenv@^0.1.4:
+    version "0.1.4"
+    resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
+    dependencies:
+      os-homedir "^1.0.0"
+      os-tmpdir "^1.0.0"
+  
+  outpipe@^1.1.0:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/outpipe/-/outpipe-1.1.1.tgz#50cf8616365e87e031e29a5ec9339a3da4725fa2"
+    dependencies:
+      shell-quote "^1.4.2"
+  
+  p-cancelable@^0.3.0:
+    version "0.3.0"
+    resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa"
+  
+  p-finally@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+  
+  p-limit@^1.1.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc"
+  
+  p-locate@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+    dependencies:
+      p-limit "^1.1.0"
+  
+  p-pipe@^1.1.0:
+    version "1.2.0"
+    resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9"
+  
+  p-timeout@^1.1.1:
+    version "1.2.0"
+    resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.0.tgz#9820f99434c5817868b4f34809ee5291660d5b6c"
+    dependencies:
+      p-finally "^1.0.0"
+  
+  pac-proxy-agent@1:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-1.1.0.tgz#34a385dfdf61d2f0ecace08858c745d3e791fd4d"
+    dependencies:
+      agent-base "2"
+      debug "2"
+      extend "3"
+      get-uri "2"
+      http-proxy-agent "1"
+      https-proxy-agent "1"
+      pac-resolver "~2.0.0"
+      raw-body "2"
+      socks-proxy-agent "2"
+  
+  pac-resolver@~2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-2.0.0.tgz#99b88d2f193fbdeefc1c9a529c1f3260ab5277cd"
+    dependencies:
+      co "~3.0.6"
+      degenerator "~1.0.2"
+      ip "1.0.1"
+      netmask "~1.0.4"
+      thunkify "~2.1.1"
+  
+  pako@~0.2.0:
+    version "0.2.9"
+    resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
+  
+  pako@~1.0.5:
+    version "1.0.6"
+    resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258"
+  
+  parents@^1.0.0, parents@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751"
+    dependencies:
+      path-platform "~0.11.15"
+  
+  parse-asn1@^5.0.0:
+    version "5.1.0"
+    resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712"
+    dependencies:
+      asn1.js "^4.0.0"
+      browserify-aes "^1.0.0"
+      create-hash "^1.1.0"
+      evp_bytestokey "^1.0.0"
+      pbkdf2 "^3.0.3"
+  
+  parse-gitignore@^0.2.0:
+    version "0.2.0"
+    resolved "https://registry.yarnpkg.com/parse-gitignore/-/parse-gitignore-0.2.0.tgz#98706d09f0f93ee86348b721ffee0606bc093d74"
+    dependencies:
+      ends-with "^0.2.0"
+      is-glob "^2.0.0"
+      starts-with "^1.0.0"
+  
+  parse-glob@^3.0.4:
+    version "3.0.4"
+    resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+    dependencies:
+      glob-base "^0.3.0"
+      is-dotfile "^1.0.0"
+      is-extglob "^1.0.0"
+      is-glob "^2.0.0"
+  
+  parse-json@^2.1.0, parse-json@^2.2.0:
+    version "2.2.0"
+    resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+    dependencies:
+      error-ex "^1.2.0"
+  
+  parse5@^3.0.1:
+    version "3.0.3"
+    resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
+    dependencies:
+      "@types/node" "*"
+  
+  [email protected]:
+    version "0.0.5"
+    resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d"
+    dependencies:
+      better-assert "~1.0.0"
+  
+  [email protected]:
+    version "0.0.5"
+    resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a"
+    dependencies:
+      better-assert "~1.0.0"
+  
+  parseurl@~1.3.2:
+    version "1.3.2"
+    resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
+  
+  [email protected], path-browserify@~0.0.0:
+    version "0.0.0"
+    resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
+  
+  path-dirname@^1.0.0:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+  
+  path-exists@^2.0.0:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+    dependencies:
+      pinkie-promise "^2.0.0"
+  
+  path-exists@^3.0.0:
+    version "3.0.0"
+    resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+  
+  path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+  
+  path-is-inside@^1.0.1:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+  
+  path-key@^2.0.0:
+    version "2.0.1"
+    resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+  
+  path-parse@^1.0.5:
+    version "1.0.5"
+    resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
+  
+  path-platform@~0.11.15:
+    version "0.11.15"
+    resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2"
+  
+  path-proxy@~1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/path-proxy/-/path-proxy-1.0.0.tgz#18e8a36859fc9d2f1a53b48dee138543c020de5e"
+    dependencies:
+      inflection "~1.3.0"
+  
+  path-type@^1.0.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+    dependencies:
+      graceful-fs "^4.1.2"
+      pify "^2.0.0"
+      pinkie-promise "^2.0.0"
+  
+  path-type@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+    dependencies:
+      pify "^2.0.0"
+  
+  pbkdf2@^3.0.3:
+    version "3.0.14"
+    resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade"
+    dependencies:
+      create-hash "^1.1.2"
+      create-hmac "^1.1.4"
+      ripemd160 "^2.0.1"
+      safe-buffer "^5.0.1"
+      sha.js "^2.4.8"
+  
+  pend@~1.2.0:
+    version "1.2.0"
+    resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+  
+  performance-now@^0.2.0:
+    version "0.2.0"
+    resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
+  
+  performance-now@^2.1.0:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+  
+  pify@^2.0.0, pify@^2.3.0:
+    version "2.3.0"
+    resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+  
+  pify@^3.0.0:
+    version "3.0.0"
+    resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+  
+  pinkie-promise@^2.0.0:
+    version "2.0.1"
+    resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+    dependencies:
+      pinkie "^2.0.0"
+  
+  pinkie@^2.0.0:
+    version "2.0.4"
+    resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+  
+  pkg-dir@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+    dependencies:
+      find-up "^2.1.0"
+  
+  pluralize@^1.2.1:
+    version "1.2.1"
+    resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
+  
+  pngquant-bin@^3.0.0:
+    version "3.1.1"
+    resolved "https://registry.yarnpkg.com/pngquant-bin/-/pngquant-bin-3.1.1.tgz#d124d98a75a9487f40c1640b4dbfcbb2bd5a1fd1"
+    dependencies:
+      bin-build "^2.0.0"
+      bin-wrapper "^3.0.0"
+      logalot "^2.0.0"
+  
+  postcss-calc@^5.2.0:
+    version "5.3.1"
+    resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e"
+    dependencies:
+      postcss "^5.0.2"
+      postcss-message-helpers "^2.0.0"
+      reduce-css-calc "^1.2.6"
+  
+  postcss-colormin@^2.1.8:
+    version "2.2.2"
+    resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b"
+    dependencies:
+      colormin "^1.0.5"
+      postcss "^5.0.13"
+      postcss-value-parser "^3.2.3"
+  
+  postcss-convert-values@^2.3.4:
+    version "2.6.1"
+    resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d"
+    dependencies:
+      postcss "^5.0.11"
+      postcss-value-parser "^3.1.2"
+  
+  postcss-discard-comments@^2.0.4:
+    version "2.0.4"
+    resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d"
+    dependencies:
+      postcss "^5.0.14"
+  
+  postcss-discard-duplicates@^2.0.1:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932"
+    dependencies:
+      postcss "^5.0.4"
+  
+  postcss-discard-empty@^2.0.1:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"
+    dependencies:
+      postcss "^5.0.14"
+  
+  postcss-discard-overridden@^0.1.1:
+    version "0.1.1"
+    resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58"
+    dependencies:
+      postcss "^5.0.16"
+  
+  postcss-discard-unused@^2.2.1:
+    version "2.2.3"
+    resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433"
+    dependencies:
+      postcss "^5.0.14"
+      uniqs "^2.0.0"
+  
+  postcss-filter-plugins@^2.0.0:
+    version "2.0.2"
+    resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c"
+    dependencies:
+      postcss "^5.0.4"
+      uniqid "^4.0.0"
+  
+  postcss-merge-idents@^2.1.5:
+    version "2.1.7"
+    resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270"
+    dependencies:
+      has "^1.0.1"
+      postcss "^5.0.10"
+      postcss-value-parser "^3.1.1"
+  
+  postcss-merge-longhand@^2.0.1:
+    version "2.0.2"
+    resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658"
+    dependencies:
+      postcss "^5.0.4"
+  
+  postcss-merge-rules@^2.0.3:
+    version "2.1.2"
+    resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721"
+    dependencies:
+      browserslist "^1.5.2"
+      caniuse-api "^1.5.2"
+      postcss "^5.0.4"
+      postcss-selector-parser "^2.2.2"
+      vendors "^1.0.0"
+  
+  postcss-message-helpers@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e"
+  
+  postcss-minify-font-values@^1.0.2:
+    version "1.0.5"
+    resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69"
+    dependencies:
+      object-assign "^4.0.1"
+      postcss "^5.0.4"
+      postcss-value-parser "^3.0.2"
+  
+  postcss-minify-gradients@^1.0.1:
+    version "1.0.5"
+    resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1"
+    dependencies:
+      postcss "^5.0.12"
+      postcss-value-parser "^3.3.0"
+  
+  postcss-minify-params@^1.0.4:
+    version "1.2.2"
+    resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3"
+    dependencies:
+      alphanum-sort "^1.0.1"
+      postcss "^5.0.2"
+      postcss-value-parser "^3.0.2"
+      uniqs "^2.0.0"
+  
+  postcss-minify-selectors@^2.0.4:
+    version "2.1.1"
+    resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf"
+    dependencies:
+      alphanum-sort "^1.0.2"
+      has "^1.0.1"
+      postcss "^5.0.14"
+      postcss-selector-parser "^2.0.0"
+  
+  postcss-normalize-charset@^1.1.0:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1"
+    dependencies:
+      postcss "^5.0.5"
+  
+  postcss-normalize-url@^3.0.7:
+    version "3.0.8"
+    resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222"
+    dependencies:
+      is-absolute-url "^2.0.0"
+      normalize-url "^1.4.0"
+      postcss "^5.0.14"
+      postcss-value-parser "^3.2.3"
+  
+  postcss-ordered-values@^2.1.0:
+    version "2.2.3"
+    resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d"
+    dependencies:
+      postcss "^5.0.4"
+      postcss-value-parser "^3.0.1"
+  
+  postcss-reduce-idents@^2.2.2:
+    version "2.4.0"
+    resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3"
+    dependencies:
+      postcss "^5.0.4"
+      postcss-value-parser "^3.0.2"
+  
+  postcss-reduce-initial@^1.0.0:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea"
+    dependencies:
+      postcss "^5.0.4"
+  
+  postcss-reduce-transforms@^1.0.3:
+    version "1.0.4"
+    resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1"
+    dependencies:
+      has "^1.0.1"
+      postcss "^5.0.8"
+      postcss-value-parser "^3.0.1"
+  
+  postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
+    version "2.2.3"
+    resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90"
+    dependencies:
+      flatten "^1.0.2"
+      indexes-of "^1.0.1"
+      uniq "^1.0.1"
+  
+  postcss-svgo@^2.1.1:
+    version "2.1.6"
+    resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d"
+    dependencies:
+      is-svg "^2.0.0"
+      postcss "^5.0.14"
+      postcss-value-parser "^3.2.3"
+      svgo "^0.7.0"
+  
+  postcss-unique-selectors@^2.0.2:
+    version "2.0.2"
+    resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d"
+    dependencies:
+      alphanum-sort "^1.0.1"
+      postcss "^5.0.4"
+      uniqs "^2.0.0"
+  
+  postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0:
+    version "3.3.0"
+    resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15"
+  
+  postcss-zindex@^2.0.1:
+    version "2.2.0"
+    resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22"
+    dependencies:
+      has "^1.0.1"
+      postcss "^5.0.4"
+      uniqs "^2.0.0"
+  
+  postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.8, postcss@^5.2.16:
+    version "5.2.17"
+    resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.17.tgz#cf4f597b864d65c8a492b2eabe9d706c879c388b"
+    dependencies:
+      chalk "^1.1.3"
+      js-base64 "^2.1.9"
+      source-map "^0.5.6"
+      supports-color "^3.2.3"
+  
+  prebuild-install@^2.1.0:
+    version "2.2.2"
+    resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.2.2.tgz#dd47c4d61f3754fb17bbf601759e5922e16e0671"
+    dependencies:
+      expand-template "^1.0.2"
+      github-from-package "0.0.0"
+      minimist "^1.2.0"
+      mkdirp "^0.5.1"
+      node-abi "^2.0.0"
+      noop-logger "^0.1.1"
+      npmlog "^4.0.1"
+      os-homedir "^1.0.1"
+      pump "^1.0.1"
+      rc "^1.1.6"
+      simple-get "^1.4.2"
+      tar-fs "^1.13.0"
+      tunnel-agent "^0.6.0"
+      xtend "4.0.1"
+  
+  precond@^0.2.3:
+    version "0.2.3"
+    resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac"
+  
+  prelude-ls@~1.1.2:
+    version "1.1.2"
+    resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+  
+  prepend-http@^1.0.0, prepend-http@^1.0.1:
+    version "1.0.4"
+    resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
+  
+  preserve@^0.2.0:
+    version "0.2.0"
+    resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+  
+  private@^0.1.6, private@^0.1.7:
+    version "0.1.7"
+    resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1"
+  
+  process-nextick-args@^1.0.6, process-nextick-args@~1.0.6:
+    version "1.0.7"
+    resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+  
+  process-nextick-args@~2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
+  
+  process@^0.11.0, process@~0.11.0:
+    version "0.11.10"
+    resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+  
+  progress@^1.1.8:
+    version "1.1.8"
+    resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
+  
+  promise@^7.1.1:
+    version "7.3.1"
+    resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
+    dependencies:
+      asap "~2.0.3"
+  
+  prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.6.0:
+    version "15.6.0"
+    resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856"
+    dependencies:
+      fbjs "^0.8.16"
+      loose-envify "^1.3.1"
+      object-assign "^4.1.1"
+  
+  proxy-agent@~2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-2.0.0.tgz#57eb5347aa805d74ec681cb25649dba39c933499"
+    dependencies:
+      agent-base "2"
+      debug "2"
+      extend "3"
+      http-proxy-agent "1"
+      https-proxy-agent "1"
+      lru-cache "~2.6.5"
+      pac-proxy-agent "1"
+      socks-proxy-agent "2"
+  
+  prr@~0.0.0:
+    version "0.0.0"
+    resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
+  
+  prr@~1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+  
+  pseudomap@^1.0.1, pseudomap@^1.0.2:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+  
+  public-encrypt@^4.0.0:
+    version "4.0.0"
+    resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6"
+    dependencies:
+      bn.js "^4.1.0"
+      browserify-rsa "^4.0.0"
+      create-hash "^1.1.0"
+      parse-asn1 "^5.0.0"
+      randombytes "^2.0.1"
+  
+  pump@^1.0.0, pump@^1.0.1:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.2.tgz#3b3ee6512f94f0e575538c17995f9f16990a5d51"
+    dependencies:
+      end-of-stream "^1.1.0"
+      once "^1.3.1"
+  
+  [email protected]:
+    version "1.3.2"
+    resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+  
+  [email protected], punycode@^1.2.4, punycode@^1.3.2, punycode@^1.4.1:
+    version "1.4.1"
+    resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+  
+  q@^1.1.2:
+    version "1.5.0"
+    resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1"
+  
+  q@~1.4.0:
+    version "1.4.1"
+    resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e"
+  
+  qjobs@^1.1.4:
+    version "1.1.5"
+    resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.1.5.tgz#659de9f2cf8dcc27a1481276f205377272382e73"
+  
+  [email protected], qs@~6.5.1:
+    version "6.5.1"
+    resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
+  
+  qs@~6.2.0:
+    version "6.2.3"
+    resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe"
+  
+  qs@~6.4.0:
+    version "6.4.0"
+    resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
+  
+  query-string@^4.1.0:
+    version "4.3.4"
+    resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
+    dependencies:
+      object-assign "^4.1.0"
+      strict-uri-encode "^1.0.0"
+  
+  querystring-es3@^0.2.0, querystring-es3@~0.2.0:
+    version "0.2.1"
+    resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+  
+  [email protected]:
+    version "0.2.0"
+    resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+  
+  raf@^3.4.0:
+    version "3.4.0"
+    resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575"
+    dependencies:
+      performance-now "^2.1.0"
+  
+  railroad-diagrams@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e"
+  
+  randexp@^0.4.2:
+    version "0.4.6"
+    resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3"
+    dependencies:
+      discontinuous-range "1.0.0"
+      ret "~0.1.10"
+  
+  randomatic@^1.1.3:
+    version "1.1.7"
+    resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
+    dependencies:
+      is-number "^3.0.0"
+      kind-of "^4.0.0"
+  
+  randombytes@^2.0.0, randombytes@^2.0.1:
+    version "2.0.5"
+    resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79"
+    dependencies:
+      safe-buffer "^5.1.0"
+  
+  range-parser@^1.0.3, range-parser@^1.2.0:
+    version "1.2.0"
+    resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
+  
+  raw-body@2, [email protected]:
+    version "2.3.2"
+    resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89"
+    dependencies:
+      bytes "3.0.0"
+      http-errors "1.6.2"
+      iconv-lite "0.4.19"
+      unpipe "1.0.0"
+  
+  raw-loader@^0.5.1:
+    version "0.5.1"
+    resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa"
+  
+  rc@^1.1.2, rc@^1.1.6, rc@^1.1.7:
+    version "1.2.1"
+    resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95"
+    dependencies:
+      deep-extend "~0.4.0"
+      ini "~1.3.0"
+      minimist "^1.2.0"
+      strip-json-comments "~2.0.1"
+  
+  react-dom@^16.2.0:
+    version "16.2.0"
+    resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044"
+    dependencies:
+      fbjs "^0.8.16"
+      loose-envify "^1.1.0"
+      object-assign "^4.1.1"
+      prop-types "^15.6.0"
+  
+  react-reconciler@^0.7.0:
+    version "0.7.0"
+    resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.7.0.tgz#9614894103e5f138deeeb5eabaf3ee80eb1d026d"
+    dependencies:
+      fbjs "^0.8.16"
+      loose-envify "^1.1.0"
+      object-assign "^4.1.1"
+      prop-types "^15.6.0"
+  
+  react-split-pane@^0.1.63:
+    version "0.1.66"
+    resolved "https://registry.yarnpkg.com/react-split-pane/-/react-split-pane-0.1.66.tgz#369085dd07ec1237bda123e73813dcc7dc6502c1"
+    dependencies:
+      inline-style-prefixer "^3.0.6"
+      prop-types "^15.5.10"
+      react-style-proptype "^3.0.0"
+  
+  react-style-proptype@^3.0.0:
+    version "3.0.0"
+    resolved "https://registry.yarnpkg.com/react-style-proptype/-/react-style-proptype-3.0.0.tgz#89e0b646f266c656abb0f0dd8202dbd5036c31e6"
+    dependencies:
+      prop-types "^15.5.4"
+  
+  react-test-renderer@^16.0.0-0:
+    version "16.2.0"
+    resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.2.0.tgz#bddf259a6b8fcd8555f012afc8eacc238872a211"
+    dependencies:
+      fbjs "^0.8.16"
+      object-assign "^4.1.1"
+      prop-types "^15.6.0"
+  
+  react@^16.2.0:
+    version "16.2.0"
+    resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba"
+    dependencies:
+      fbjs "^0.8.16"
+      loose-envify "^1.1.0"
+      object-assign "^4.1.1"
+      prop-types "^15.6.0"
+  
+  read-all-stream@^3.0.0:
+    version "3.1.0"
+    resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa"
+    dependencies:
+      pinkie-promise "^2.0.0"
+      readable-stream "^2.0.0"
+  
+  read-only-stream@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0"
+    dependencies:
+      readable-stream "^2.0.2"
+  
+  read-pkg-up@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+    dependencies:
+      find-up "^1.0.0"
+      read-pkg "^1.0.0"
+  
+  read-pkg-up@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+    dependencies:
+      find-up "^2.0.0"
+      read-pkg "^2.0.0"
+  
+  read-pkg@^1.0.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+    dependencies:
+      load-json-file "^1.0.0"
+      normalize-package-data "^2.3.2"
+      path-type "^1.0.0"
+  
+  read-pkg@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+    dependencies:
+      load-json-file "^2.0.0"
+      normalize-package-data "^2.3.2"
+      path-type "^2.0.0"
+  
+  [email protected], "[email protected] >=1.1.9", readable-stream@^1.0.33, readable-stream@~1.1.9:
+    version "1.1.14"
+    resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
+    dependencies:
+      core-util-is "~1.0.0"
+      inherits "~2.0.1"
+      isarray "0.0.1"
+      string_decoder "~0.10.x"
+  
+  readable-stream@2, readable-stream@^2.3.0:
+    version "2.3.5"
+    resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d"
+    dependencies:
+      core-util-is "~1.0.0"
+      inherits "~2.0.3"
+      isarray "~1.0.0"
+      process-nextick-args "~2.0.0"
+      safe-buffer "~5.1.1"
+      string_decoder "~1.0.3"
+      util-deprecate "~1.0.1"
+  
+  "readable-stream@>=1.0.33-1 <1.1.0-0":
+    version "1.0.34"
+    resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+    dependencies:
+      core-util-is "~1.0.0"
+      inherits "~2.0.1"
+      isarray "0.0.1"
+      string_decoder "~0.10.x"
+  
+  readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6:
+    version "2.3.3"
+    resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
+    dependencies:
+      core-util-is "~1.0.0"
+      inherits "~2.0.3"
+      isarray "~1.0.0"
+      process-nextick-args "~1.0.6"
+      safe-buffer "~5.1.1"
+      string_decoder "~1.0.3"
+      util-deprecate "~1.0.1"
+  
+  readable-stream@~2.0.0, readable-stream@~2.0.5:
+    version "2.0.6"
+    resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e"
+    dependencies:
+      core-util-is "~1.0.0"
+      inherits "~2.0.1"
+      isarray "~1.0.0"
+      process-nextick-args "~1.0.6"
+      string_decoder "~0.10.x"
+      util-deprecate "~1.0.1"
+  
+  readdirp@^2.0.0:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
+    dependencies:
+      graceful-fs "^4.1.2"
+      minimatch "^3.0.2"
+      readable-stream "^2.0.2"
+      set-immediate-shim "^1.0.1"
+  
+  readline2@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35"
+    dependencies:
+      code-point-at "^1.0.0"
+      is-fullwidth-code-point "^1.0.0"
+      mute-stream "0.0.5"
+  
+  rechoir@^0.6.2:
+    version "0.6.2"
+    resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+    dependencies:
+      resolve "^1.1.6"
+  
+  redent@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+    dependencies:
+      indent-string "^2.1.0"
+      strip-indent "^1.0.1"
+  
+  redis-commands@^1.2.0:
+    version "1.3.5"
+    resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.3.5.tgz#4495889414f1e886261180b1442e7295602d83a2"
+  
+  redis-parser@^2.6.0:
+    version "2.6.0"
+    resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-2.6.0.tgz#52ed09dacac108f1a631c07e9b69941e7a19504b"
+  
+  redis@^2.7.1:
+    version "2.8.0"
+    resolved "https://registry.yarnpkg.com/redis/-/redis-2.8.0.tgz#202288e3f58c49f6079d97af7a10e1303ae14b02"
+    dependencies:
+      double-ended-queue "^2.1.0-0"
+      redis-commands "^1.2.0"
+      redis-parser "^2.6.0"
+  
+  reduce-css-calc@^1.2.6:
+    version "1.3.0"
+    resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716"
+    dependencies:
+      balanced-match "^0.4.2"
+      math-expression-evaluator "^1.2.14"
+      reduce-function-call "^1.0.1"
+  
+  reduce-function-call@^1.0.1:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99"
+    dependencies:
+      balanced-match "^0.4.2"
+  
+  regenerate@^1.2.1:
+    version "1.3.3"
+    resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f"
+  
+  regenerator-runtime@^0.10.5:
+    version "0.10.5"
+    resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
+  
+  regenerator-runtime@^0.11.0:
+    version "0.11.0"
+    resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1"
+  
+  regenerator-transform@^0.10.0:
+    version "0.10.1"
+    resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
+    dependencies:
+      babel-runtime "^6.18.0"
+      babel-types "^6.19.0"
+      private "^0.1.6"
+  
+  regex-cache@^0.4.2:
+    version "0.4.4"
+    resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
+    dependencies:
+      is-equal-shallow "^0.1.3"
+  
+  regexpu-core@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240"
+    dependencies:
+      regenerate "^1.2.1"
+      regjsgen "^0.2.0"
+      regjsparser "^0.1.4"
+  
+  regjsgen@^0.2.0:
+    version "0.2.0"
+    resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
+  
+  regjsparser@^0.1.4:
+    version "0.1.5"
+    resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
+    dependencies:
+      jsesc "~0.5.0"
+  
+  remove-trailing-separator@^1.0.1:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+  
+  repeat-element@^1.1.2:
+    version "1.1.2"
+    resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
+  
+  repeat-string@^0.2.2:
+    version "0.2.2"
+    resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae"
+  
+  repeat-string@^1.5.2:
+    version "1.6.1"
+    resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+  
+  repeating@^2.0.0:
+    version "2.0.1"
+    resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+    dependencies:
+      is-finite "^1.0.0"
+  
+  [email protected]:
+    version "0.0.1"
+    resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924"
+  
+  replace-ext@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
+  
+  request@2, request@^2.79.0:
+    version "2.82.0"
+    resolved "https://registry.yarnpkg.com/request/-/request-2.82.0.tgz#2ba8a92cd7ac45660ea2b10a53ae67cd247516ea"
+    dependencies:
+      aws-sign2 "~0.7.0"
+      aws4 "^1.6.0"
+      caseless "~0.12.0"
+      combined-stream "~1.0.5"
+      extend "~3.0.1"
+      forever-agent "~0.6.1"
+      form-data "~2.3.1"
+      har-validator "~5.0.3"
+      hawk "~6.0.2"
+      http-signature "~1.2.0"
+      is-typedarray "~1.0.0"
+      isstream "~0.1.2"
+      json-stringify-safe "~5.0.1"
+      mime-types "~2.1.17"
+      oauth-sign "~0.8.2"
+      performance-now "^2.1.0"
+      qs "~6.5.1"
+      safe-buffer "^5.1.1"
+      stringstream "~0.0.5"
+      tough-cookie "~2.3.2"
+      tunnel-agent "^0.6.0"
+      uuid "^3.1.0"
+  
+  [email protected]:
+    version "2.75.0"
+    resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93"
+    dependencies:
+      aws-sign2 "~0.6.0"
+      aws4 "^1.2.1"
+      bl "~1.1.2"
+      caseless "~0.11.0"
+      combined-stream "~1.0.5"
+      extend "~3.0.0"
+      forever-agent "~0.6.1"
+      form-data "~2.0.0"
+      har-validator "~2.0.6"
+      hawk "~3.1.3"
+      http-signature "~1.1.0"
+      is-typedarray "~1.0.0"
+      isstream "~0.1.2"
+      json-stringify-safe "~5.0.1"
+      mime-types "~2.1.7"
+      node-uuid "~1.4.7"
+      oauth-sign "~0.8.1"
+      qs "~6.2.0"
+      stringstream "~0.0.4"
+      tough-cookie "~2.3.0"
+      tunnel-agent "~0.4.1"
+  
+  [email protected]:
+    version "2.81.0"
+    resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
+    dependencies:
+      aws-sign2 "~0.6.0"
+      aws4 "^1.2.1"
+      caseless "~0.12.0"
+      combined-stream "~1.0.5"
+      extend "~3.0.0"
+      forever-agent "~0.6.1"
+      form-data "~2.1.1"
+      har-validator "~4.2.1"
+      hawk "~3.1.3"
+      http-signature "~1.1.0"
+      is-typedarray "~1.0.0"
+      isstream "~0.1.2"
+      json-stringify-safe "~5.0.1"
+      mime-types "~2.1.7"
+      oauth-sign "~0.8.1"
+      performance-now "^0.2.0"
+      qs "~6.4.0"
+      safe-buffer "^5.0.1"
+      stringstream "~0.0.4"
+      tough-cookie "~2.3.0"
+      tunnel-agent "^0.6.0"
+      uuid "^3.0.0"
+  
+  request@^2.0.0, request@^2.74.0:
+    version "2.85.0"
+    resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa"
+    dependencies:
+      aws-sign2 "~0.7.0"
+      aws4 "^1.6.0"
+      caseless "~0.12.0"
+      combined-stream "~1.0.5"
+      extend "~3.0.1"
+      forever-agent "~0.6.1"
+      form-data "~2.3.1"
+      har-validator "~5.0.3"
+      hawk "~6.0.2"
+      http-signature "~1.2.0"
+      is-typedarray "~1.0.0"
+      isstream "~0.1.2"
+      json-stringify-safe "~5.0.1"
+      mime-types "~2.1.17"
+      oauth-sign "~0.8.2"
+      performance-now "^2.1.0"
+      qs "~6.5.1"
+      safe-buffer "^5.1.1"
+      stringstream "~0.0.5"
+      tough-cookie "~2.3.3"
+      tunnel-agent "^0.6.0"
+      uuid "^3.1.0"
+  
+  requestretry@^1.2.2:
+    version "1.13.0"
+    resolved "https://registry.yarnpkg.com/requestretry/-/requestretry-1.13.0.tgz#213ec1006eeb750e8b8ce54176283d15a8d55d94"
+    dependencies:
+      extend "^3.0.0"
+      lodash "^4.15.0"
+      request "^2.74.0"
+      when "^3.7.7"
+  
+  require-directory@^2.1.1:
+    version "2.1.1"
+    resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+  
+  require-main-filename@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+  
+  require-uncached@^1.0.2:
+    version "1.0.3"
+    resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
+    dependencies:
+      caller-path "^0.1.0"
+      resolve-from "^1.0.0"
+  
+  requirejs@~2.3.3:
+    version "2.3.5"
+    resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.5.tgz#617b9acbbcb336540ef4914d790323a8d4b861b0"
+  
+  [email protected]:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+  
+  resolve-from@^1.0.0:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
+  
+  [email protected]:
+    version "1.1.7"
+    resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+  
+  resolve@^1.1.3, resolve@^1.1.4, resolve@^1.1.6:
+    version "1.4.0"
+    resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86"
+    dependencies:
+      path-parse "^1.0.5"
+  
+  restore-cursor@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
+    dependencies:
+      exit-hook "^1.0.0"
+      onetime "^1.0.0"
+  
+  ret@~0.1.10:
+    version "0.1.15"
+    resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+  
+  right-align@^0.1.1:
+    version "0.1.3"
+    resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+    dependencies:
+      align-text "^0.1.1"
+  
+  rimraf@2, rimraf@^2.2.6, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1:
+    version "2.6.2"
+    resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
+    dependencies:
+      glob "^7.0.5"
+  
+  ripemd160@^2.0.0, ripemd160@^2.0.1:
+    version "2.0.1"
+    resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7"
+    dependencies:
+      hash-base "^2.0.0"
+      inherits "^2.0.1"
+  
+  rst-selector-parser@^2.2.3:
+    version "2.2.3"
+    resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91"
+    dependencies:
+      lodash.flattendeep "^4.4.0"
+      nearley "^2.7.10"
+  
+  run-async@^0.1.0:
+    version "0.1.0"
+    resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389"
+    dependencies:
+      once "^1.3.0"
+  
+  rx-lite@^3.1.2:
+    version "3.1.2"
+    resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
+  
+  safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+    version "5.1.1"
+    resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
+  
+  sass-graph@^2.1.1:
+    version "2.2.4"
+    resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49"
+    dependencies:
+      glob "^7.0.0"
+      lodash "^4.0.0"
+      scss-tokenizer "^0.2.3"
+      yargs "^7.0.0"
+  
+  sass-loader@^6.0.6:
+    version "6.0.6"
+    resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-6.0.6.tgz#e9d5e6c1f155faa32a4b26d7a9b7107c225e40f9"
+    dependencies:
+      async "^2.1.5"
+      clone-deep "^0.3.0"
+      loader-utils "^1.0.1"
+      lodash.tail "^4.1.1"
+      pify "^3.0.0"
+  
+  sax@~1.2.1:
+    version "1.2.4"
+    resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+  
+  schema-utils@^0.3.0:
+    version "0.3.0"
+    resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf"
+    dependencies:
+      ajv "^5.0.0"
+  
+  scss-tokenizer@^0.2.3:
+    version "0.2.3"
+    resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1"
+    dependencies:
+      js-base64 "^2.1.8"
+      source-map "^0.4.2"
+  
+  seek-bzip@^1.0.3:
+    version "1.0.5"
+    resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc"
+    dependencies:
+      commander "~2.8.1"
+  
+  select2@^4.0.3:
+    version "4.0.3"
+    resolved "https://registry.yarnpkg.com/select2/-/select2-4.0.3.tgz#207733fe91eacb9cb1a13f12463401f472449e0f"
+    dependencies:
+      almond "~0.3.1"
+      jquery-mousewheel "~3.1.13"
+  
+  semver-regex@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-1.0.0.tgz#92a4969065f9c70c694753d55248fc68f8f652c9"
+  
+  semver-truncate@^1.0.0:
+    version "1.1.2"
+    resolved "https://registry.yarnpkg.com/semver-truncate/-/semver-truncate-1.1.2.tgz#57f41de69707a62709a7e0104ba2117109ea47e8"
+    dependencies:
+      semver "^5.3.0"
+  
+  "semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0, semver@~5.4.1:
+    version "5.4.1"
+    resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
+  
+  semver@^4.0.3:
+    version "4.3.6"
+    resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
+  
+  semver@~5.0.1:
+    version "5.0.3"
+    resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a"
+  
+  semver@~5.3.0:
+    version "5.3.0"
+    resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+  
+  set-blocking@^2.0.0, set-blocking@~2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+  
+  set-immediate-shim@^1.0.0, set-immediate-shim@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+  
+  setimmediate@^1.0.4, setimmediate@^1.0.5:
+    version "1.0.5"
+    resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+  
+  [email protected]:
+    version "1.0.3"
+    resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
+  
+  sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4:
+    version "2.4.9"
+    resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.9.tgz#98f64880474b74f4a38b8da9d3c0f2d104633e7d"
+    dependencies:
+      inherits "^2.0.1"
+      safe-buffer "^5.0.1"
+  
+  shallow-clone@^0.1.2:
+    version "0.1.2"
+    resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-0.1.2.tgz#5909e874ba77106d73ac414cfec1ffca87d97060"
+    dependencies:
+      is-extendable "^0.1.1"
+      kind-of "^2.0.1"
+      lazy-cache "^0.2.3"
+      mixin-object "^2.0.1"
+  
+  shasum@^1.0.0:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f"
+    dependencies:
+      json-stable-stringify "~0.0.0"
+      sha.js "~2.4.4"
+  
+  shebang-command@^1.2.0:
+    version "1.2.0"
+    resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+    dependencies:
+      shebang-regex "^1.0.0"
+  
+  shebang-regex@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+  
+  shell-quote@^1.4.2, shell-quote@^1.6.1:
+    version "1.6.1"
+    resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767"
+    dependencies:
+      array-filter "~0.0.0"
+      array-map "~0.0.0"
+      array-reduce "~0.0.0"
+      jsonify "~0.0.0"
+  
+  shelljs@^0.7.5:
+    version "0.7.8"
+    resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3"
+    dependencies:
+      glob "^7.0.0"
+      interpret "^1.0.0"
+      rechoir "^0.6.2"
+  
+  shim-loader@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/shim-loader/-/shim-loader-1.0.1.tgz#2583a6d2aa938897c2a41658bcef73ec87d3aa5e"
+    dependencies:
+      loader-utils "^1.1.0"
+      lodash "^4.14.1"
+      precond "^0.2.3"
+      webpack-sources "^0.2.3"
+  
+  sigmund@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
+  
+  signal-exit@^3.0.0:
+    version "3.0.2"
+    resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+  
+  simple-get@^1.4.2:
+    version "1.4.3"
+    resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-1.4.3.tgz#e9755eda407e96da40c5e5158c9ea37b33becbeb"
+    dependencies:
+      once "^1.3.1"
+      unzip-response "^1.0.0"
+      xtend "^4.0.0"
+  
+  slack-node@~0.2.0:
+    version "0.2.0"
+    resolved "https://registry.yarnpkg.com/slack-node/-/slack-node-0.2.0.tgz#de4b8dddaa8b793f61dbd2938104fdabf37dfa30"
+    dependencies:
+      requestretry "^1.2.2"
+  
+  slash@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+  
+  [email protected]:
+    version "0.0.4"
+    resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+  
+  slice-ansi@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
+    dependencies:
+      is-fullwidth-code-point "^2.0.0"
+  
+  "slickgrid@git+https://github.com/6pac/SlickGrid.git#2.3.7":
+    version "2.3.4"
+    resolved "git+https://github.com/6pac/SlickGrid.git#8ff68140bd5be132d2913640b4b1f2512219d075"
+    dependencies:
+      jquery ">=1.8.0"
+      jquery-ui ">=1.8.0"
+  
+  smart-buffer@^1.0.13, smart-buffer@^1.0.4:
+    version "1.1.15"
+    resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16"
+  
+  [email protected]:
+    version "2.12.0"
+    resolved "https://registry.yarnpkg.com/smtp-connection/-/smtp-connection-2.12.0.tgz#d76ef9127cb23c2259edb1e8349c2e8d5e2d74c1"
+    dependencies:
+      httpntlm "1.6.1"
+      nodemailer-shared "1.1.0"
+  
+  snapsvg@^0.5.1:
+    version "0.5.1"
+    resolved "https://registry.yarnpkg.com/snapsvg/-/snapsvg-0.5.1.tgz#0caf52c79189a290746fc446cc5e863f6bdddfe3"
+    dependencies:
+      eve "~0.5.1"
+  
+  [email protected]:
+    version "1.0.9"
+    resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+    dependencies:
+      hoek "2.x.x"
+  
+  [email protected]:
+    version "2.0.2"
+    resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.0.2.tgz#5064110f0af85f7cfdb7d6b67a40028ce52b4b2b"
+    dependencies:
+      hoek "4.x.x"
+  
+  socket.io-adapter@~1.1.0:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b"
+  
+  [email protected]:
+    version "2.0.4"
+    resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.0.4.tgz#0918a552406dc5e540b380dcd97afc4a64332f8e"
+    dependencies:
+      backo2 "1.0.2"
+      base64-arraybuffer "0.1.5"
+      component-bind "1.0.0"
+      component-emitter "1.2.1"
+      debug "~2.6.4"
+      engine.io-client "~3.1.0"
+      has-cors "1.1.0"
+      indexof "0.0.1"
+      object-component "0.0.3"
+      parseqs "0.0.5"
+      parseuri "0.0.5"
+      socket.io-parser "~3.1.1"
+      to-array "0.1.4"
+  
+  socket.io-parser@~3.1.1:
+    version "3.1.3"
+    resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.1.3.tgz#ed2da5ee79f10955036e3da413bfd7f1e4d86c8e"
+    dependencies:
+      component-emitter "1.2.1"
+      debug "~3.1.0"
+      has-binary2 "~1.0.2"
+      isarray "2.0.1"
+  
+  [email protected]:
+    version "2.0.4"
+    resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.0.4.tgz#c1a4590ceff87ecf13c72652f046f716b29e6014"
+    dependencies:
+      debug "~2.6.6"
+      engine.io "~3.1.0"
+      socket.io-adapter "~1.1.0"
+      socket.io-client "2.0.4"
+      socket.io-parser "~3.1.1"
+  
+  socks-proxy-agent@2:
+    version "2.1.1"
+    resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-2.1.1.tgz#86ebb07193258637870e13b7bd99f26c663df3d3"
+    dependencies:
+      agent-base "2"
+      extend "3"
+      socks "~1.1.5"
+  
+  [email protected]:
+    version "1.1.9"
+    resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.9.tgz#628d7e4d04912435445ac0b6e459376cb3e6d691"
+    dependencies:
+      ip "^1.1.2"
+      smart-buffer "^1.0.4"
+  
+  socks@~1.1.5:
+    version "1.1.10"
+    resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.10.tgz#5b8b7fc7c8f341c53ed056e929b7bf4de8ba7b5a"
+    dependencies:
+      ip "^1.1.4"
+      smart-buffer "^1.0.13"
+  
+  sort-keys@^1.0.0:
+    version "1.1.2"
+    resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
+    dependencies:
+      is-plain-obj "^1.0.0"
+  
+  source-list-map@^0.1.4, source-list-map@^0.1.6, source-list-map@~0.1.7:
+    version "0.1.8"
+    resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106"
+  
+  source-list-map@^1.1.1:
+    version "1.1.2"
+    resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.2.tgz#9889019d1024cce55cdc069498337ef6186a11a1"
+  
+  source-list-map@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085"
+  
+  source-map-support@^0.4.15:
+    version "0.4.18"
+    resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
+    dependencies:
+      source-map "^0.5.6"
+  
+  [email protected], source-map@^0.4.2, source-map@~0.4.1:
+    version "0.4.4"
+    resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
+    dependencies:
+      amdefine ">=0.0.4"
+  
+  [email protected], source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3:
+    version "0.5.7"
+    resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+  
+  source-map@^0.6.1, source-map@~0.6.1:
+    version "0.6.1"
+    resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+  
+  sparkles@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3"
+  
+  spdx-correct@~1.0.0:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+    dependencies:
+      spdx-license-ids "^1.0.2"
+  
+  spdx-expression-parse@~1.0.0:
+    version "1.0.4"
+    resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
+  
+  spdx-license-ids@^1.0.2:
+    version "1.2.2"
+    resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+  
+  spectrum-colorpicker@^1.8.0:
+    version "1.8.0"
+    resolved "https://registry.yarnpkg.com/spectrum-colorpicker/-/spectrum-colorpicker-1.8.0.tgz#b926cf5002c0a77860b5f8351e1c093c65200107"
+  
+  [email protected]:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.0.tgz#cffcaf702daf65ea39bb4e0fa2b299cec1a1be46"
+  
+  sprintf-js@^1.0.3:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.1.tgz#36be78320afe5801f6cea3ee78b6e5aab940ea0c"
+  
+  sprintf-js@~1.0.2:
+    version "1.0.3"
+    resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+  
+  squeak@^1.0.0:
+    version "1.3.0"
+    resolved "https://registry.yarnpkg.com/squeak/-/squeak-1.3.0.tgz#33045037b64388b567674b84322a6521073916c3"
+    dependencies:
+      chalk "^1.0.0"
+      console-stream "^0.1.1"
+      lpad-align "^1.0.1"
+  
+  sshpk@^1.7.0:
+    version "1.13.1"
+    resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
+    dependencies:
+      asn1 "~0.2.3"
+      assert-plus "^1.0.0"
+      dashdash "^1.12.0"
+      getpass "^0.1.1"
+    optionalDependencies:
+      bcrypt-pbkdf "^1.0.0"
+      ecc-jsbn "~0.1.1"
+      jsbn "~0.1.0"
+      tweetnacl "~0.14.0"
+  
+  starts-with@^1.0.0, starts-with@^1.0.2:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/starts-with/-/starts-with-1.0.2.tgz#16793a729d89d4cf3d4fb2eda2f908ae357f196f"
+  
+  stat-mode@^0.2.0:
+    version "0.2.2"
+    resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502"
+  
+  "statuses@>= 1.3.1 < 2", statuses@~1.3.1:
+    version "1.3.1"
+    resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
+  
+  stdout-stream@^1.4.0:
+    version "1.4.0"
+    resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz#a2c7c8587e54d9427ea9edb3ac3f2cd522df378b"
+    dependencies:
+      readable-stream "^2.0.1"
+  
+  stream-browserify@^2.0.0, stream-browserify@^2.0.1:
+    version "2.0.1"
+    resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
+    dependencies:
+      inherits "~2.0.1"
+      readable-stream "^2.0.2"
+  
+  stream-combiner2@^1.1.1:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe"
+    dependencies:
+      duplexer2 "~0.1.0"
+      readable-stream "^2.0.2"
+  
+  stream-http@^2.0.0, stream-http@^2.3.1:
+    version "2.7.2"
+    resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad"
+    dependencies:
+      builtin-status-codes "^3.0.0"
+      inherits "^2.0.1"
+      readable-stream "^2.2.6"
+      to-arraybuffer "^1.0.0"
+      xtend "^4.0.0"
+  
+  stream-shift@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
+  
+  stream-splicer@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.0.tgz#1b63be438a133e4b671cc1935197600175910d83"
+    dependencies:
+      inherits "^2.0.1"
+      readable-stream "^2.0.2"
+  
+  streamfilter@^1.0.5:
+    version "1.0.5"
+    resolved "https://registry.yarnpkg.com/streamfilter/-/streamfilter-1.0.5.tgz#87507111beb8e298451717b511cfed8f002abf53"
+    dependencies:
+      readable-stream "^2.0.2"
+  
+  streamroller@^0.7.0:
+    version "0.7.0"
+    resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-0.7.0.tgz#a1d1b7cf83d39afb0d63049a5acbf93493bdf64b"
+    dependencies:
+      date-format "^1.2.0"
+      debug "^3.1.0"
+      mkdirp "^0.5.1"
+      readable-stream "^2.3.0"
+  
+  strict-uri-encode@^1.0.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
+  
+  string-width@^1.0.1, string-width@^1.0.2:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+    dependencies:
+      code-point-at "^1.0.0"
+      is-fullwidth-code-point "^1.0.0"
+      strip-ansi "^3.0.0"
+  
+  string-width@^2.0.0, string-width@^2.1.1:
+    version "2.1.1"
+    resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+    dependencies:
+      is-fullwidth-code-point "^2.0.0"
+      strip-ansi "^4.0.0"
+  
+  string_decoder@^0.10.25, string_decoder@~0.10.0, string_decoder@~0.10.x:
+    version "0.10.31"
+    resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+  
+  string_decoder@~1.0.0, string_decoder@~1.0.3:
+    version "1.0.3"
+    resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
+    dependencies:
+      safe-buffer "~5.1.0"
+  
+  stringstream@~0.0.4, stringstream@~0.0.5:
+    version "0.0.5"
+    resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+  
+  strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+    version "3.0.1"
+    resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+    dependencies:
+      ansi-regex "^2.0.0"
+  
+  strip-ansi@^4.0.0:
+    version "4.0.0"
+    resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+    dependencies:
+      ansi-regex "^3.0.0"
+  
+  strip-bom-stream@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz#e7144398577d51a6bed0fa1994fa05f43fd988ee"
+    dependencies:
+      first-chunk-stream "^1.0.0"
+      strip-bom "^2.0.0"
+  
+  strip-bom@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+    dependencies:
+      is-utf8 "^0.2.0"
+  
+  strip-bom@^3.0.0:
+    version "3.0.0"
+    resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+  
+  strip-dirs@^1.0.0:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-1.1.1.tgz#960bbd1287844f3975a4558aa103a8255e2456a0"
+    dependencies:
+      chalk "^1.0.0"
+      get-stdin "^4.0.1"
+      is-absolute "^0.1.5"
+      is-natural-number "^2.0.0"
+      minimist "^1.1.0"
+      sum-up "^1.0.1"
+  
+  strip-eof@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+  
+  strip-indent@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+    dependencies:
+      get-stdin "^4.0.1"
+  
+  strip-json-comments@~2.0.1:
+    version "2.0.1"
+    resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+  
+  strip-outer@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.0.tgz#aac0ba60d2e90c5d4f275fd8869fd9a2d310ffb8"
+    dependencies:
+      escape-string-regexp "^1.0.2"
+  
+  style-loader@^0.18.2:
+    version "0.18.2"
+    resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.18.2.tgz#cc31459afbcd6d80b7220ee54b291a9fd66ff5eb"
+    dependencies:
+      loader-utils "^1.0.2"
+      schema-utils "^0.3.0"
+  
+  subarg@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2"
+    dependencies:
+      minimist "^1.1.0"
+  
+  sum-up@^1.0.1:
+    version "1.0.3"
+    resolved "https://registry.yarnpkg.com/sum-up/-/sum-up-1.0.3.tgz#1c661f667057f63bcb7875aa1438bc162525156e"
+    dependencies:
+      chalk "^1.0.0"
+  
+  supports-color@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+  
+  supports-color@^3.2.3:
+    version "3.2.3"
+    resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
+    dependencies:
+      has-flag "^1.0.0"
+  
+  supports-color@^4.0.0, supports-color@^4.2.1:
+    version "4.4.0"
+    resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e"
+    dependencies:
+      has-flag "^2.0.0"
+  
+  svgo@^0.7.0:
+    version "0.7.2"
+    resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
+    dependencies:
+      coa "~1.0.1"
+      colors "~1.1.2"
+      csso "~2.3.1"
+      js-yaml "~3.7.0"
+      mkdirp "~0.5.1"
+      sax "~1.2.1"
+      whet.extend "~0.9.9"
+  
+  syntax-error@^1.1.1:
+    version "1.3.0"
+    resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.3.0.tgz#1ed9266c4d40be75dc55bf9bb1cb77062bb96ca1"
+    dependencies:
+      acorn "^4.0.3"
+  
+  table@^3.7.8:
+    version "3.8.3"
+    resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f"
+    dependencies:
+      ajv "^4.7.0"
+      ajv-keywords "^1.0.0"
+      chalk "^1.1.1"
+      lodash "^4.0.0"
+      slice-ansi "0.0.4"
+      string-width "^2.0.0"
+  
+  tapable@^0.2.7:
+    version "0.2.8"
+    resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22"
+  
+  tar-fs@^1.13.0:
+    version "1.15.3"
+    resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.15.3.tgz#eccf935e941493d8151028e636e51ce4c3ca7f20"
+    dependencies:
+      chownr "^1.0.1"
+      mkdirp "^0.5.1"
+      pump "^1.0.0"
+      tar-stream "^1.1.2"
+  
+  tar-pack@^3.4.0:
+    version "3.4.0"
+    resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984"
+    dependencies:
+      debug "^2.2.0"
+      fstream "^1.0.10"
+      fstream-ignore "^1.0.5"
+      once "^1.3.3"
+      readable-stream "^2.1.4"
+      rimraf "^2.5.1"
+      tar "^2.2.1"
+      uid-number "^0.0.6"
+  
+  tar-stream@^1.1.1, tar-stream@^1.1.2:
+    version "1.5.4"
+    resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.5.4.tgz#36549cf04ed1aee9b2a30c0143252238daf94016"
+    dependencies:
+      bl "^1.0.0"
+      end-of-stream "^1.0.0"
+      readable-stream "^2.0.0"
+      xtend "^4.0.0"
+  
+  tar@^2.0.0, tar@^2.2.1:
+    version "2.2.1"
+    resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+    dependencies:
+      block-stream "*"
+      fstream "^1.0.2"
+      inherits "2"
+  
+  temp-dir@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d"
+  
+  tempfile@^1.0.0:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2"
+    dependencies:
+      os-tmpdir "^1.0.0"
+      uuid "^2.0.1"
+  
+  tempfile@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-2.0.0.tgz#6b0446856a9b1114d1856ffcbe509cccb0977265"
+    dependencies:
+      temp-dir "^1.0.0"
+      uuid "^3.0.1"
+  
+  term-size@^1.2.0:
+    version "1.2.0"
+    resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69"
+    dependencies:
+      execa "^0.7.0"
+  
+  text-table@~0.2.0:
+    version "0.2.0"
+    resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+  
+  through2-filter@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-2.0.0.tgz#60bc55a0dacb76085db1f9dae99ab43f83d622ec"
+    dependencies:
+      through2 "~2.0.0"
+      xtend "~4.0.0"
+  
+  through2@^0.6.0, through2@^0.6.1:
+    version "0.6.5"
+    resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48"
+    dependencies:
+      readable-stream ">=1.0.33-1 <1.1.0-0"
+      xtend ">=4.0.0 <4.1.0-0"
+  
+  through2@^2.0.0, through2@^2.0.1, through2@^2.0.3, through2@~2.0.0:
+    version "2.0.3"
+    resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
+    dependencies:
+      readable-stream "^2.1.5"
+      xtend "~4.0.1"
+  
+  "through@>=2.2.7 <3", through@^2.3.6:
+    version "2.3.8"
+    resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+  
+  thunkify@~2.1.1:
+    version "2.1.2"
+    resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d"
+  
+  time-stamp@^1.0.0:
+    version "1.1.0"
+    resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3"
+  
+  time-stamp@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357"
+  
+  timed-out@^3.0.0:
+    version "3.1.3"
+    resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.3.tgz#95860bfcc5c76c277f8f8326fd0f5b2e20eba217"
+  
+  timed-out@^4.0.0:
+    version "4.0.1"
+    resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
+  
+  timers-browserify@^1.0.1:
+    version "1.4.2"
+    resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d"
+    dependencies:
+      process "~0.11.0"
+  
+  timers-browserify@^2.0.2:
+    version "2.0.4"
+    resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.4.tgz#96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6"
+    dependencies:
+      setimmediate "^1.0.4"
+  
+  [email protected]:
+    version "2.3.0"
+    resolved "https://registry.yarnpkg.com/timespan/-/timespan-2.3.0.tgz#4902ce040bd13d845c8f59b27e9d59bad6f39929"
+  
+  [email protected]:
+    version "0.0.33"
+    resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+    dependencies:
+      os-tmpdir "~1.0.2"
+  
+  [email protected]:
+    version "0.0.31"
+    resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7"
+    dependencies:
+      os-tmpdir "~1.0.1"
+  
+  to-absolute-glob@^0.1.1:
+    version "0.1.1"
+    resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz#1cdfa472a9ef50c239ee66999b662ca0eb39937f"
+    dependencies:
+      extend-shallow "^2.0.1"
+  
+  [email protected]:
+    version "0.1.4"
+    resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"
+  
+  to-arraybuffer@^1.0.0:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+  
+  to-fast-properties@^1.0.3:
+    version "1.0.3"
+    resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
+  
+  to-time@^1.0.2:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/to-time/-/to-time-1.0.2.tgz#4f8145a07d85f6356a62e1cea0a7a9e6661776e3"
+    dependencies:
+      bignumber.js "^2.4.0"
+  
+  tough-cookie@~2.3.0, tough-cookie@~2.3.2:
+    version "2.3.3"
+    resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561"
+    dependencies:
+      punycode "^1.4.1"
+  
+  tough-cookie@~2.3.3:
+    version "2.3.4"
+    resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
+    dependencies:
+      punycode "^1.4.1"
+  
+  trim-newlines@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+  
+  trim-repeated@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21"
+    dependencies:
+      escape-string-regexp "^1.0.2"
+  
+  trim-right@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
+  
+  tryit@^1.0.1:
+    version "1.0.3"
+    resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"
+  
+  tsscmp@~1.0.0:
+    version "1.0.5"
+    resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.5.tgz#7dc4a33af71581ab4337da91d85ca5427ebd9a97"
+  
+  [email protected], tty-browserify@~0.0.0:
+    version "0.0.0"
+    resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+  
+  tunnel-agent@^0.4.0, tunnel-agent@~0.4.1:
+    version "0.4.3"
+    resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
+  
+  tunnel-agent@^0.6.0:
+    version "0.6.0"
+    resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+    dependencies:
+      safe-buffer "^5.0.1"
+  
+  tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+    version "0.14.5"
+    resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+  
+  type-check@~0.3.2:
+    version "0.3.2"
+    resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+    dependencies:
+      prelude-ls "~1.1.2"
+  
+  type-is@~1.6.15:
+    version "1.6.15"
+    resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410"
+    dependencies:
+      media-typer "0.3.0"
+      mime-types "~2.1.15"
+  
+  typedarray@^0.0.6, typedarray@~0.0.5:
+    version "0.0.6"
+    resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+  
+  ua-parser-js@^0.7.9:
+    version "0.7.14"
+    resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.14.tgz#110d53fa4c3f326c121292bbeac904d2e03387ca"
+  
+  uglify-js@^2.8.29:
+    version "2.8.29"
+    resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
+    dependencies:
+      source-map "~0.5.1"
+      yargs "~3.10.0"
+    optionalDependencies:
+      uglify-to-browserify "~1.0.0"
+  
+  uglify-to-browserify@~1.0.0:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+  
+  uglifyjs-webpack-plugin@^0.4.6:
+    version "0.4.6"
+    resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309"
+    dependencies:
+      source-map "^0.5.6"
+      uglify-js "^2.8.29"
+      webpack-sources "^1.0.1"
+  
+  uid-number@^0.0.6:
+    version "0.0.6"
+    resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+  
+  ultron@~1.1.0:
+    version "1.1.1"
+    resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"
+  
+  umd@^3.0.0:
+    version "3.0.1"
+    resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.1.tgz#8ae556e11011f63c2596708a8837259f01b3d60e"
+  
+  underscore.string@^3.3.4:
+    version "3.3.4"
+    resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.4.tgz#2c2a3f9f83e64762fdc45e6ceac65142864213db"
+    dependencies:
+      sprintf-js "^1.0.3"
+      util-deprecate "^1.0.2"
+  
+  underscore@>=1.5.0, underscore@>=1.7.0, underscore@^1.8.0, underscore@^1.8.3:
+    version "1.8.3"
+    resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022"
+  
+  underscore@~1.4.4:
+    version "1.4.4"
+    resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604"
+  
+  underscore@~1.7.0:
+    version "1.7.0"
+    resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209"
+  
+  uniq@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
+  
+  uniqid@^4.0.0:
+    version "4.1.1"
+    resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1"
+    dependencies:
+      macaddress "^0.2.8"
+  
+  uniqs@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
+  
+  unique-stream@^2.0.2:
+    version "2.2.1"
+    resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.2.1.tgz#5aa003cfbe94c5ff866c4e7d668bb1c4dbadb369"
+    dependencies:
+      json-stable-stringify "^1.0.0"
+      through2-filter "^2.0.0"
+  
+  [email protected], unpipe@~1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+  
+  unzip-response@^1.0.0, unzip-response@^1.0.2:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe"
+  
+  url-loader@^0.5.9:
+    version "0.5.9"
+    resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.5.9.tgz#cc8fea82c7b906e7777019250869e569e995c295"
+    dependencies:
+      loader-utils "^1.0.2"
+      mime "1.3.x"
+  
+  url-parse-lax@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
+    dependencies:
+      prepend-http "^1.0.1"
+  
+  url-regex@^3.0.0:
+    version "3.2.0"
+    resolved "https://registry.yarnpkg.com/url-regex/-/url-regex-3.2.0.tgz#dbad1e0c9e29e105dd0b1f09f6862f7fdb482724"
+    dependencies:
+      ip-regex "^1.0.1"
+  
+  url-to-options@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9"
+  
+  url@^0.11.0, url@~0.11.0:
+    version "0.11.0"
+    resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+    dependencies:
+      punycode "1.3.2"
+      querystring "0.2.0"
+  
+  user-home@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"
+    dependencies:
+      os-homedir "^1.0.0"
+  
+  useragent@^2.1.12:
+    version "2.2.1"
+    resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.2.1.tgz#cf593ef4f2d175875e8bb658ea92e18a4fd06d8e"
+    dependencies:
+      lru-cache "2.2.x"
+      tmp "0.0.x"
+  
+  util-deprecate@^1.0.2, util-deprecate@~1.0.1:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+  
+  [email protected], util@^0.10.3, util@~0.10.1:
+    version "0.10.3"
+    resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+    dependencies:
+      inherits "2.0.1"
+  
+  [email protected]:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+  
+  uuid@^2.0.1:
+    version "2.0.3"
+    resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
+  
+  uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0:
+    version "3.1.0"
+    resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
+  
+  uws@~9.14.0:
+    version "9.14.0"
+    resolved "https://registry.yarnpkg.com/uws/-/uws-9.14.0.tgz#fac8386befc33a7a3705cbd58dc47b430ca4dd95"
+  
+  vali-date@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6"
+  
+  validate-npm-package-license@^3.0.1:
+    version "3.0.1"
+    resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
+    dependencies:
+      spdx-correct "~1.0.0"
+      spdx-expression-parse "~1.0.0"
+  
+  vendors@^1.0.0:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22"
+  
+  [email protected]:
+    version "1.10.0"
+    resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+    dependencies:
+      assert-plus "^1.0.0"
+      core-util-is "1.0.2"
+      extsprintf "^1.2.0"
+  
+  vinyl-assign@^1.0.1:
+    version "1.2.1"
+    resolved "https://registry.yarnpkg.com/vinyl-assign/-/vinyl-assign-1.2.1.tgz#4d198891b5515911d771a8cd9c5480a46a074a45"
+    dependencies:
+      object-assign "^4.0.1"
+      readable-stream "^2.0.0"
+  
+  vinyl-fs@^2.2.0, vinyl-fs@^2.4.4:
+    version "2.4.4"
+    resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-2.4.4.tgz#be6ff3270cb55dfd7d3063640de81f25d7532239"
+    dependencies:
+      duplexify "^3.2.0"
+      glob-stream "^5.3.2"
+      graceful-fs "^4.0.0"
+      gulp-sourcemaps "1.6.0"
+      is-valid-glob "^0.3.0"
+      lazystream "^1.0.0"
+      lodash.isequal "^4.0.0"
+      merge-stream "^1.0.0"
+      mkdirp "^0.5.0"
+      object-assign "^4.0.0"
+      readable-stream "^2.0.4"
+      strip-bom "^2.0.0"
+      strip-bom-stream "^1.0.0"
+      through2 "^2.0.0"
+      through2-filter "^2.0.0"
+      vali-date "^1.0.0"
+      vinyl "^1.0.0"
+  
+  vinyl@^0.4.3:
+    version "0.4.6"
+    resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847"
+    dependencies:
+      clone "^0.2.0"
+      clone-stats "^0.0.1"
+  
+  vinyl@^0.5.0:
+    version "0.5.3"
+    resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde"
+    dependencies:
+      clone "^1.0.0"
+      clone-stats "^0.0.1"
+      replace-ext "0.0.1"
+  
+  vinyl@^1.0.0:
+    version "1.2.0"
+    resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884"
+    dependencies:
+      clone "^1.0.0"
+      clone-stats "^0.0.1"
+      replace-ext "0.0.1"
+  
+  vinyl@^2.1.0:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.1.0.tgz#021f9c2cf951d6b939943c89eb5ee5add4fd924c"
+    dependencies:
+      clone "^2.1.1"
+      clone-buffer "^1.0.0"
+      clone-stats "^1.0.0"
+      cloneable-readable "^1.0.0"
+      remove-trailing-separator "^1.0.1"
+      replace-ext "^1.0.0"
+  
+  [email protected], vm-browserify@~0.0.1:
+    version "0.0.4"
+    resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
+    dependencies:
+      indexof "0.0.1"
+  
+  void-elements@^2.0.0:
+    version "2.0.1"
+    resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
+  
+  ware@^1.2.0:
+    version "1.3.0"
+    resolved "https://registry.yarnpkg.com/ware/-/ware-1.3.0.tgz#d1b14f39d2e2cb4ab8c4098f756fe4b164e473d4"
+    dependencies:
+      wrap-fn "^0.1.0"
+  
+  watchify@~3.9.0:
+    version "3.9.0"
+    resolved "https://registry.yarnpkg.com/watchify/-/watchify-3.9.0.tgz#f075fd2e8a86acde84cedba6e5c2a0bedd523d9e"
+    dependencies:
+      anymatch "^1.3.0"
+      browserify "^14.0.0"
+      chokidar "^1.0.0"
+      defined "^1.0.0"
+      outpipe "^1.1.0"
+      through2 "^2.0.0"
+      xtend "^4.0.0"
+  
+  watchpack@^1.4.0:
+    version "1.4.0"
+    resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac"
+    dependencies:
+      async "^2.1.2"
+      chokidar "^1.7.0"
+      graceful-fs "^4.1.2"
+  
+  webcabin-docker@^2.2.2:
+    version "2.2.2"
+    resolved "https://registry.yarnpkg.com/webcabin-docker/-/webcabin-docker-2.2.2.tgz#ff5e4bb48278b4219c0951d1f4db6456659bed2a"
+    dependencies:
+      FileSaver "0.10.0"
+      font-awesome "4.6.3"
+      jquery "1.11.1"
+      jquery-contextmenu "1.6.7"
+  
+  webpack-core@~0.6.0:
+    version "0.6.9"
+    resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2"
+    dependencies:
+      source-list-map "~0.1.7"
+      source-map "~0.4.1"
+  
+  webpack-dev-middleware@^1.12.0:
+    version "1.12.2"
+    resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e"
+    dependencies:
+      memory-fs "~0.4.1"
+      mime "^1.5.0"
+      path-is-absolute "^1.0.0"
+      range-parser "^1.0.3"
+      time-stamp "^2.0.0"
+  
+  webpack-sources@^0.1.0:
+    version "0.1.5"
+    resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.5.tgz#aa1f3abf0f0d74db7111c40e500b84f966640750"
+    dependencies:
+      source-list-map "~0.1.7"
+      source-map "~0.5.3"
+  
+  webpack-sources@^0.2.3:
+    version "0.2.3"
+    resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb"
+    dependencies:
+      source-list-map "^1.1.1"
+      source-map "~0.5.3"
+  
+  webpack-sources@^1.0.1:
+    version "1.0.1"
+    resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.0.1.tgz#c7356436a4d13123be2e2426a05d1dad9cbe65cf"
+    dependencies:
+      source-list-map "^2.0.0"
+      source-map "~0.5.3"
+  
+  webpack@^3.0.0:
+    version "3.6.0"
+    resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.6.0.tgz#a89a929fbee205d35a4fa2cc487be9cbec8898bc"
+    dependencies:
+      acorn "^5.0.0"
+      acorn-dynamic-import "^2.0.0"
+      ajv "^5.1.5"
+      ajv-keywords "^2.0.0"
+      async "^2.1.2"
+      enhanced-resolve "^3.4.0"
+      escope "^3.6.0"
+      interpret "^1.0.0"
+      json-loader "^0.5.4"
+      json5 "^0.5.1"
+      loader-runner "^2.3.0"
+      loader-utils "^1.1.0"
+      memory-fs "~0.4.1"
+      mkdirp "~0.5.0"
+      node-libs-browser "^2.0.0"
+      source-map "^0.5.3"
+      supports-color "^4.2.1"
+      tapable "^0.2.7"
+      uglifyjs-webpack-plugin "^0.4.6"
+      watchpack "^1.4.0"
+      webpack-sources "^1.0.1"
+      yargs "^8.0.2"
+  
+  whatwg-fetch@>=0.10.0:
+    version "2.0.3"
+    resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
+  
+  when@^3.7.7:
+    version "3.7.8"
+    resolved "https://registry.yarnpkg.com/when/-/when-3.7.8.tgz#c7130b6a7ea04693e842cdc9e7a1f2aa39a39f82"
+  
+  whet.extend@~0.9.9:
+    version "0.9.9"
+    resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1"
+  
+  which-module@^1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
+  
+  which-module@^2.0.0:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+  
+  which@1, which@^1.2.1, which@^1.2.9:
+    version "1.3.0"
+    resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
+    dependencies:
+      isexe "^2.0.0"
+  
+  wide-align@^1.1.0:
+    version "1.1.2"
+    resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
+    dependencies:
+      string-width "^1.0.2"
+  
+  [email protected]:
+    version "0.1.0"
+    resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+  
+  [email protected]:
+    version "0.0.2"
+    resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+  
+  wordwrap@~0.0.2:
+    version "0.0.3"
+    resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+  
+  wordwrap@~1.0.0:
+    version "1.0.0"
+    resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+  
+  wrap-ansi@^2.0.0:
+    version "2.1.0"
+    resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+    dependencies:
+      string-width "^1.0.1"
+      strip-ansi "^3.0.1"
+  
+  wrap-fn@^0.1.0:
+    version "0.1.5"
+    resolved "https://registry.yarnpkg.com/wrap-fn/-/wrap-fn-0.1.5.tgz#f21b6e41016ff4a7e31720dbc63a09016bdf9845"
+    dependencies:
+      co "3.1.0"
+  
+  wrappy@1:
+    version "1.0.2"
+    resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+  
+  write@^0.2.1:
+    version "0.2.1"
+    resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
+    dependencies:
+      mkdirp "^0.5.1"
+  
+  ws@~3.3.1:
+    version "3.3.3"
+    resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2"
+    dependencies:
+      async-limiter "~1.0.0"
+      safe-buffer "~5.1.0"
+      ultron "~1.1.0"
+  
+  xmlhttprequest-ssl@~1.5.4:
+    version "1.5.5"
+    resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e"
+  
+  [email protected]:
+    version "2.0.0"
+    resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943"
+  
+  [email protected], "xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1:
+    version "4.0.1"
+    resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+  
+  y18n@^3.2.1:
+    version "3.2.1"
+    resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+  
+  yallist@^2.1.2:
+    version "2.1.2"
+    resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+  
+  yargs-parser@^5.0.0:
+    version "5.0.0"
+    resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"
+    dependencies:
+      camelcase "^3.0.0"
+  
+  yargs-parser@^7.0.0:
+    version "7.0.0"
+    resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9"
+    dependencies:
+      camelcase "^4.1.0"
+  
+  yargs@^7.0.0:
+    version "7.1.0"
+    resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"
+    dependencies:
+      camelcase "^3.0.0"
+      cliui "^3.2.0"
+      decamelize "^1.1.1"
+      get-caller-file "^1.0.1"
+      os-locale "^1.4.0"
+      read-pkg-up "^1.0.1"
+      require-directory "^2.1.1"
+      require-main-filename "^1.0.1"
+      set-blocking "^2.0.0"
+      string-width "^1.0.2"
+      which-module "^1.0.0"
+      y18n "^3.2.1"
+      yargs-parser "^5.0.0"
+  
+  yargs@^8.0.2:
+    version "8.0.2"
+    resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360"
+    dependencies:
+      camelcase "^4.1.0"
+      cliui "^3.2.0"
+      decamelize "^1.1.1"
+      get-caller-file "^1.0.1"
+      os-locale "^2.0.0"
+      read-pkg-up "^2.0.0"
+      require-directory "^2.1.1"
+      require-main-filename "^1.0.1"
+      set-blocking "^2.0.0"
+      string-width "^2.0.0"
+      which-module "^2.0.0"
+      y18n "^3.2.1"
+      yargs-parser "^7.0.0"
+  
+  yargs@~3.10.0:
+    version "3.10.0"
+    resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+    dependencies:
+      camelcase "^1.0.2"
+      cliui "^2.1.0"
+      decamelize "^1.0.0"
+      window-size "0.1.0"
+  
+  yauzl@^2.2.1:
+    version "2.4.1"
+    resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005"
+    dependencies:
+      fd-slicer "~1.0.1"
+  
+  [email protected]:
+    version "0.1.2"
+    resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
+
+Trace: 
+  Error: Command failed.
+  Exit code: 1
+  Command: sh
+  Arguments: -c pycodestyle --config=.pycodestyle .
+  Directory: /var/www/flask/pgadmin4/pgadmin4/web
+  Output:
+  
+      at ProcessTermError.Error (native)
+      at ProcessTermError.MessageError (/usr/share/yarn/lib/cli.js:186:110)
+      at new ProcessTermError (/usr/share/yarn/lib/cli.js:226:113)
+      at ChildProcess.<anonymous> (/usr/share/yarn/lib/cli.js:30281:17)
+      at emitTwo (events.js:106:13)
+      at ChildProcess.emit (events.js:191:7)
+      at maybeClose (internal/child_process.js:920:16)
+      at Process.ChildProcess._handle.onexit (internal/child_process.js:230:5)


^ permalink  raw  reply  [nested|flat] 20+ messages in thread

* Re: [pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature
@ 2018-03-29 18:15  Joao De Almeida Pereira <[email protected]>
  parent: Rahul Soshte <[email protected]>
  0 siblings, 1 reply; 20+ messages in thread

From: Joao De Almeida Pereira @ 2018-03-29 18:15 UTC (permalink / raw)
  To: Rahul Soshte <[email protected]>; +Cc: pgadmin-hackers

Hi Rahul,
I see you extracted some code, that is a pretty good move :D

We run the patch through the testing pipeline and everything is green GJ :D
Also tested the functionality by hand and looks like it is working except
for "add the .sql extension when format is set to SQL." if you set it to
All Files  the extension is also added. Not sure if this is a big deal or
not. Lets see what other people think.

Codewise here are some of my comments:
. You added the yarn-error.log file and a migration to the patch doesn't
look intentional. Can you please remove them?
. Also in the patch there are 2 file (moc_LogWindow.cpp and ui_LogWindow.h)
that look like they do not belong to the patch (Did you rebase your branch
before trying to create the patch?

The test file: test_save_query_to_file.py is empty, it is missing some
tests there.

As a convention we user lower case names for functions and UpperCase for
class

Please, regenerate the patch following my previous comments.

Thanks
Joao

On Thu, Mar 29, 2018 at 12:54 PM Rahul Soshte <[email protected]>
wrote:

> Hi,
> When using save or save as feature if .sql is not provided this Patch
> appends it.
> as clearly mentioned in this link.
>
> https://redmine.postgresql.org/issues/1998
>
> I have ran pep8,regression and Jasmine tests too.
>
> I have primarily changed these files
>      web/pgadmin/tools/sqleditor/__init__.py
>      web/pgadmin/tools/sqleditor/static/js/sqleditor.js
>      web/pgadmin/tools/sqleditor/utils/save_query_to_file.py
>
>
> Regards,
> Rahul Soshte (Hunter)
>
>


^ permalink  raw  reply  [nested|flat] 20+ messages in thread

* Re: [pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature
@ 2018-03-30 10:40  Murtuza Zabuawala <[email protected]>
  parent: Joao De Almeida Pereira <[email protected]>
  0 siblings, 1 reply; 20+ messages in thread

From: Murtuza Zabuawala @ 2018-03-30 10:40 UTC (permalink / raw)
  To: Joao De Almeida Pereira <[email protected]>; +Cc: Rahul Soshte <[email protected]>; pgadmin-hackers

On Thu, Mar 29, 2018 at 11:45 PM, Joao De Almeida Pereira <
[email protected]> wrote:

> Hi Rahul,
> I see you extracted some code, that is a pretty good move :D
>
> We run the patch through the testing pipeline and everything is green GJ :D
> Also tested the functionality by hand and looks like it is working except
> for "add the .sql extension when format is set to SQL." if you set it to
> All Files  the extension is also added. Not sure if this is a big deal or
> not. Lets see what other people think.
>
​Yes, I also think it should append .sql only if the sql extension is
selected and user has not provided extension.​

​Let say If I want to save the file with .txt extension then I can use All
Files. ​


> Codewise here are some of my comments:
> . You added the yarn-error.log file and a migration to the patch doesn't
> look intentional. Can you please remove them?
> . Also in the patch there are 2 file (moc_LogWindow.cpp and
> ui_LogWindow.h) that look like they do not belong to the patch (Did you
> rebase your branch before trying to create the patch?
>
> The test file: test_save_query_to_file.py is empty, it is missing some
> tests there.
>
> As a convention we user lower case names for functions and UpperCase for
> class
>
> Please, regenerate the patch following my previous comments.
>
> Thanks
> Joao
>
> On Thu, Mar 29, 2018 at 12:54 PM Rahul Soshte <[email protected]>
> wrote:
>
>> Hi,
>> When using save or save as feature if .sql is not provided this Patch
>> appends it.
>> as clearly mentioned in this link.
>>
>> https://redmine.postgresql.org/issues/1998
>>
>> I have ran pep8,regression and Jasmine tests too.
>>
>> I have primarily changed these files
>>      web/pgadmin/tools/sqleditor/__init__.py
>>      web/pgadmin/tools/sqleditor/static/js/sqleditor.js
>>      web/pgadmin/tools/sqleditor/utils/save_query_to_file.py
>>
>>
>> Regards,
>> Rahul Soshte (Hunter)
>>
>>


^ permalink  raw  reply  [nested|flat] 20+ messages in thread

* Re: [pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature
@ 2018-03-30 13:06  Rahul Soshte <[email protected]>
  parent: Murtuza Zabuawala <[email protected]>
  0 siblings, 1 reply; 20+ messages in thread

From: Rahul Soshte @ 2018-03-30 13:06 UTC (permalink / raw)
  To: Murtuza Zabuawala <[email protected]>; +Cc: Joao De Almeida Pereira <[email protected]>; pgadmin-hackers

Hi,
I tried writing tests in the web/pgadmin/tools/sqleditor/
utils/tests/test_save_query_to_file_utils
for the file web/pgadmin/tools/sqleditor/utils/tests/save_query_to_
file_utils.py

But I am getting a error,

ERROR: runTest (pgadmin.tools.sqleditor.utils.tests.test_save_query_
to_file_utils.TestSaveQueryToFile)
When user has entered the extension .sql to the file while saving
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/
sqleditor/utils/tests/test_save_query_to_file_utils.py", line 42, in runTest
    file_path_result = save_query_to_file(self.file_data)
  File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/
sqleditor/utils/save_query_to_file_utils.py", line 15, in save_query_to_file
    storage_manager_path = get_storage_directory()
  File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/flask_login.py",
line 788, in decorated_view
    if current_app.login_manager._login_disabled:
  File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/werkzeug/local.py",
line 338, in __getattr__
    return getattr(self._get_current_object(), name)
  File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/werkzeug/local.py",
line 297, in _get_current_object
    return self.__local()
  File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/flask/globals.py",
line 51, in _find_app
    raise RuntimeError(_app_ctx_err_msg)
RuntimeError: Working outside of application context.

How do I test the extracted code inside context? How do I resolve this
error.
I have attached test_save_query_to_file_utils.py
and save_query_to_file_utils.py

Murtuza, Actually I didnt find any toggable button in the File Dialog Box
So I made it general purpose ( I guess I will have to make one then and
then if I select SQL all .sql files should be listed, and if I select All
files then every type of file is shown in the File Dialog Box,this will be
a new feature, wouldnt it ?  )


On Fri, Mar 30, 2018 at 4:10 PM, Murtuza Zabuawala <
[email protected]> wrote:

>
>
> On Thu, Mar 29, 2018 at 11:45 PM, Joao De Almeida Pereira <
> [email protected]> wrote:
>
>> Hi Rahul,
>> I see you extracted some code, that is a pretty good move :D
>>
>> We run the patch through the testing pipeline and everything is green GJ
>> :D
>> Also tested the functionality by hand and looks like it is working except
>> for "add the .sql extension when format is set to SQL." if you set it to
>> All Files  the extension is also added. Not sure if this is a big deal or
>> not. Lets see what other people think.
>>
> ​Yes, I also think it should append .sql only if the sql extension is
> selected and user has not provided extension.​
>
> ​Let say If I want to save the file with .txt extension then I can use
> All Files. ​
>
>
>> Codewise here are some of my comments:
>> . You added the yarn-error.log file and a migration to the patch doesn't
>> look intentional. Can you please remove them?
>> . Also in the patch there are 2 file (moc_LogWindow.cpp and
>> ui_LogWindow.h) that look like they do not belong to the patch (Did you
>> rebase your branch before trying to create the patch?
>>
>> The test file: test_save_query_to_file.py is empty, it is missing some
>> tests there.
>>
>> As a convention we user lower case names for functions and UpperCase for
>> class
>>
>> Please, regenerate the patch following my previous comments.
>>
>> Thanks
>> Joao
>>
>> On Thu, Mar 29, 2018 at 12:54 PM Rahul Soshte <[email protected]>
>> wrote:
>>
>>> Hi,
>>> When using save or save as feature if .sql is not provided this Patch
>>> appends it.
>>> as clearly mentioned in this link.
>>>
>>> https://redmine.postgresql.org/issues/1998
>>>
>>> I have ran pep8,regression and Jasmine tests too.
>>>
>>> I have primarily changed these files
>>>      web/pgadmin/tools/sqleditor/__init__.py
>>>      web/pgadmin/tools/sqleditor/static/js/sqleditor.js
>>>      web/pgadmin/tools/sqleditor/utils/save_query_to_file.py
>>>
>>>
>>> Regards,
>>> Rahul Soshte (Hunter)
>>>
>>>
>


Attachments:

  [text/x-python] save_query_to_file_utils.py (2.0K, 3-save_query_to_file_utils.py)
  download | inline:
import os
from pgadmin.misc.file_manager import Filemanager
from pgadmin.utils import get_storage_directory
from pgadmin.utils.ajax import make_json_response, bad_request, \
    success_return, internal_server_error, unauthorized

try:
    from urllib import unquote
except ImportError:
    from urllib.parse import unquote


def save_query_to_file(file_data):
    # retrieve storage directory path
    storage_manager_path = get_storage_directory()

    # generate full path of file
    file_path = unquote(file_data['file_name'])
    if hasattr(str, 'decode'):
        file_path = unquote(
            file_data['file_name']
        ).encode('utf-8').decode('utf-8')

    if not file_path.endswith('.sql'):
        file_path = file_path + ".sql"

    try:
        Filemanager.check_access_permission(storage_manager_path, file_path)
    except Exception as e:
        return internal_server_error(errormsg=str(e))

    # lstrip() returns a copy of the string
    # in which all chars have been stripped
    # from the beginning of the string (default whitespace characters).
    if storage_manager_path is not None:
        file_path = os.path.join(
            storage_manager_path,
            file_path.lstrip('/').lstrip('\\')
        )

    if hasattr(str, 'decode'):
        file_content = file_data['file_content']
    else:
        file_content = file_data['file_content'].encode()

    # write to file
    try:
        with open(file_path, 'wb+') as output_file:
            if hasattr(str, 'decode'):
                output_file.write(file_content.encode('utf-8'))
                return file_path
            else:
                output_file.write(file_content)
                return file_path
    except IOError as e:
        if e.strerror == 'Permission denied':
            err_msg = "Error: {0}".format(e.strerror)
        else:
            err_msg = "Error: {0}".format(e.strerror)
        return internal_server_error(errormsg=err_msg)
    except Exception as e:
        err_msg = "Error: {0}".format(e.strerror)
        return internal_server_error(errormsg=err_msg)

  [text/x-python] test_save_query_to_file_utils.py (1.2K, 4-test_save_query_to_file_utils.py)
  download | inline:
import sys
from pgadmin.utils.route import BaseTestGenerator
from pgadmin.tools.sqleditor.utils.save_query_to_file_utils import \
    save_query_to_file
from flask import Flask

if sys.version_info < (3, 3):
    from mock import patch, ANY
else:
    from unittest.mock import patch, ANY

class TestSaveQueryToFile(BaseTestGenerator):
    """
    Check that the save_query method works as intended

    """

    scenarios = [
        (
            'When user has not entered the extension .sql while saving the file',
            dict(
                file_data= {
                    'file_name': '/abc/xyz',
                    'file_content': 'some data here', 
                },
                expected_return_value='/abc/xyz.sql'
            )
        ),
        (
            'When user has entered the extension .sql to the file while saving',
            dict(
                file_data= {
                    'file_name': '/abc/xyx.sql',
                    'file_content': 'some data here',
                },
                expected_return_value='/abc/xyx.sql'
            )
        ),
    ]
    
    def runTest(self):
            file_path_result = save_query_to_file(self.file_data)
            self.assertEquals(file_path_result, self.expected_return_value)

^ permalink  raw  reply  [nested|flat] 20+ messages in thread

* Re: [pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature
@ 2018-03-30 13:36  Murtuza Zabuawala <[email protected]>
  parent: Rahul Soshte <[email protected]>
  0 siblings, 1 reply; 20+ messages in thread

From: Murtuza Zabuawala @ 2018-03-30 13:36 UTC (permalink / raw)
  To: Rahul Soshte <[email protected]>; +Cc: Joao De Almeida Pereira <[email protected]>; pgadmin-hackers

Hi Rahul,

When I said .sql extension, I meant selected sql option in 'Format'
combobox (check the screenshot I've attached)

For the error you've mentioned you can create Fake application context.
Ref: ../web/pgadmin/dashboard/tests/test_dashboard_templates.py +274

--
Regards,
Murtuza Zabuawala
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


On Fri, Mar 30, 2018 at 6:36 PM, Rahul Soshte <[email protected]>
wrote:

> Hi,
> I tried writing tests in the web/pgadmin/tools/sqleditor/ut
> ils/tests/test_save_query_to_file_utils
> for the file web/pgadmin/tools/sqleditor/utils/tests/save_query_to_file_
> utils.py
>
> But I am getting a error,
>
> ERROR: runTest (pgadmin.tools.sqleditor.utils.tests.test_save_query_to_
> file_utils.TestSaveQueryToFile)
> When user has entered the extension .sql to the file while saving
> ----------------------------------------------------------------------
> Traceback (most recent call last):
>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqledito
> r/utils/tests/test_save_query_to_file_utils.py", line 42, in runTest
>     file_path_result = save_query_to_file(self.file_data)
>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqledito
> r/utils/save_query_to_file_utils.py", line 15, in save_query_to_file
>     storage_manager_path = get_storage_directory()
>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/flask_login.py",
> line 788, in decorated_view
>     if current_app.login_manager._login_disabled:
>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/werkzeug/local.py",
> line 338, in __getattr__
>     return getattr(self._get_current_object(), name)
>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/werkzeug/local.py",
> line 297, in _get_current_object
>     return self.__local()
>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/flask/globals.py",
> line 51, in _find_app
>     raise RuntimeError(_app_ctx_err_msg)
> RuntimeError: Working outside of application context.
>
> How do I test the extracted code inside context? How do I resolve this
> error.
> I have attached test_save_query_to_file_utils.py
> and save_query_to_file_utils.py
>
> Murtuza, Actually I didnt find any toggable button in the File Dialog Box
> So I made it general purpose ( I guess I will have to make one then and
> then if I select SQL all .sql files should be listed, and if I select All
> files then every type of file is shown in the File Dialog Box,this will be
> a new feature, wouldnt it ?  )
>
>
> On Fri, Mar 30, 2018 at 4:10 PM, Murtuza Zabuawala <murtuza.zabuawala@
> enterprisedb.com> wrote:
>
>>
>>
>> On Thu, Mar 29, 2018 at 11:45 PM, Joao De Almeida Pereira <
>> [email protected]> wrote:
>>
>>> Hi Rahul,
>>> I see you extracted some code, that is a pretty good move :D
>>>
>>> We run the patch through the testing pipeline and everything is green GJ
>>> :D
>>> Also tested the functionality by hand and looks like it is working
>>> except for "add the .sql extension when format is set to SQL." if you
>>> set it to All Files  the extension is also added. Not sure if this is a big
>>> deal or not. Lets see what other people think.
>>>
>> ​Yes, I also think it should append .sql only if the sql extension is
>> selected and user has not provided extension.​
>>
>> ​Let say If I want to save the file with .txt extension then I can use
>> All Files. ​
>>
>>
>>> Codewise here are some of my comments:
>>> . You added the yarn-error.log file and a migration to the patch doesn't
>>> look intentional. Can you please remove them?
>>> . Also in the patch there are 2 file (moc_LogWindow.cpp and
>>> ui_LogWindow.h) that look like they do not belong to the patch (Did you
>>> rebase your branch before trying to create the patch?
>>>
>>> The test file: test_save_query_to_file.py is empty, it is missing some
>>> tests there.
>>>
>>> As a convention we user lower case names for functions and UpperCase for
>>> class
>>>
>>> Please, regenerate the patch following my previous comments.
>>>
>>> Thanks
>>> Joao
>>>
>>> On Thu, Mar 29, 2018 at 12:54 PM Rahul Soshte <[email protected]>
>>> wrote:
>>>
>>>> Hi,
>>>> When using save or save as feature if .sql is not provided this Patch
>>>> appends it.
>>>> as clearly mentioned in this link.
>>>>
>>>> https://redmine.postgresql.org/issues/1998
>>>>
>>>> I have ran pep8,regression and Jasmine tests too.
>>>>
>>>> I have primarily changed these files
>>>>      web/pgadmin/tools/sqleditor/__init__.py
>>>>      web/pgadmin/tools/sqleditor/static/js/sqleditor.js
>>>>      web/pgadmin/tools/sqleditor/utils/save_query_to_file.py
>>>>
>>>>
>>>> Regards,
>>>> Rahul Soshte (Hunter)
>>>>
>>>>
>>
>


^ permalink  raw  reply  [nested|flat] 20+ messages in thread

* Re: [pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature
@ 2018-03-30 13:37  Murtuza Zabuawala <[email protected]>
  parent: Murtuza Zabuawala <[email protected]>
  0 siblings, 1 reply; 20+ messages in thread

From: Murtuza Zabuawala @ 2018-03-30 13:37 UTC (permalink / raw)
  To: Rahul Soshte <[email protected]>; +Cc: Joao De Almeida Pereira <[email protected]>; pgadmin-hackers

++ Attaching screenshot

On Fri, Mar 30, 2018 at 7:06 PM, Murtuza Zabuawala <
[email protected]> wrote:

> Hi Rahul,
>
> When I said .sql extension, I meant selected sql option in 'Format'
> combobox (check the screenshot I've attached)
>
> For the error you've mentioned you can create Fake application context.
> Ref: ../web/pgadmin/dashboard/tests/test_dashboard_templates.py +274
>
> --
> Regards,
> Murtuza Zabuawala
> EnterpriseDB: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>
>
> On Fri, Mar 30, 2018 at 6:36 PM, Rahul Soshte <[email protected]>
> wrote:
>
>> Hi,
>> I tried writing tests in the web/pgadmin/tools/sqleditor/ut
>> ils/tests/test_save_query_to_file_utils
>> for the file web/pgadmin/tools/sqleditor/utils/tests/save_query_to_file_u
>> tils.py
>>
>> But I am getting a error,
>>
>> ERROR: runTest (pgadmin.tools.sqleditor.utils
>> .tests.test_save_query_to_file_utils.TestSaveQueryToFile)
>> When user has entered the extension .sql to the file while saving
>> ----------------------------------------------------------------------
>> Traceback (most recent call last):
>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqledito
>> r/utils/tests/test_save_query_to_file_utils.py", line 42, in runTest
>>     file_path_result = save_query_to_file(self.file_data)
>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqledito
>> r/utils/save_query_to_file_utils.py", line 15, in save_query_to_file
>>     storage_manager_path = get_storage_directory()
>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/flask_login.py",
>> line 788, in decorated_view
>>     if current_app.login_manager._login_disabled:
>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/werkzeug/local.py",
>> line 338, in __getattr__
>>     return getattr(self._get_current_object(), name)
>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/werkzeug/local.py",
>> line 297, in _get_current_object
>>     return self.__local()
>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/flask/globals.py",
>> line 51, in _find_app
>>     raise RuntimeError(_app_ctx_err_msg)
>> RuntimeError: Working outside of application context.
>>
>> How do I test the extracted code inside context? How do I resolve this
>> error.
>> I have attached test_save_query_to_file_utils.py
>> and save_query_to_file_utils.py
>>
>> Murtuza, Actually I didnt find any toggable button in the File Dialog Box
>> So I made it general purpose ( I guess I will have to make one then and
>> then if I select SQL all .sql files should be listed, and if I select All
>> files then every type of file is shown in the File Dialog Box,this will be
>> a new feature, wouldnt it ?  )
>>
>>
>> On Fri, Mar 30, 2018 at 4:10 PM, Murtuza Zabuawala <
>> [email protected]> wrote:
>>
>>>
>>>
>>> On Thu, Mar 29, 2018 at 11:45 PM, Joao De Almeida Pereira <
>>> [email protected]> wrote:
>>>
>>>> Hi Rahul,
>>>> I see you extracted some code, that is a pretty good move :D
>>>>
>>>> We run the patch through the testing pipeline and everything is green
>>>> GJ :D
>>>> Also tested the functionality by hand and looks like it is working
>>>> except for "add the .sql extension when format is set to SQL." if you
>>>> set it to All Files  the extension is also added. Not sure if this is a big
>>>> deal or not. Lets see what other people think.
>>>>
>>> ​Yes, I also think it should append .sql only if the sql extension is
>>> selected and user has not provided extension.​
>>>
>>> ​Let say If I want to save the file with .txt extension then I can use
>>> All Files. ​
>>>
>>>
>>>> Codewise here are some of my comments:
>>>> . You added the yarn-error.log file and a migration to the patch
>>>> doesn't look intentional. Can you please remove them?
>>>> . Also in the patch there are 2 file (moc_LogWindow.cpp and
>>>> ui_LogWindow.h) that look like they do not belong to the patch (Did you
>>>> rebase your branch before trying to create the patch?
>>>>
>>>> The test file: test_save_query_to_file.py is empty, it is missing some
>>>> tests there.
>>>>
>>>> As a convention we user lower case names for functions and UpperCase
>>>> for class
>>>>
>>>> Please, regenerate the patch following my previous comments.
>>>>
>>>> Thanks
>>>> Joao
>>>>
>>>> On Thu, Mar 29, 2018 at 12:54 PM Rahul Soshte <[email protected]>
>>>> wrote:
>>>>
>>>>> Hi,
>>>>> When using save or save as feature if .sql is not provided this Patch
>>>>> appends it.
>>>>> as clearly mentioned in this link.
>>>>>
>>>>> https://redmine.postgresql.org/issues/1998
>>>>>
>>>>> I have ran pep8,regression and Jasmine tests too.
>>>>>
>>>>> I have primarily changed these files
>>>>>      web/pgadmin/tools/sqleditor/__init__.py
>>>>>      web/pgadmin/tools/sqleditor/static/js/sqleditor.js
>>>>>      web/pgadmin/tools/sqleditor/utils/save_query_to_file.py
>>>>>
>>>>>
>>>>> Regards,
>>>>> Rahul Soshte (Hunter)
>>>>>
>>>>>
>>>
>>
>


Attachments:

  [image/png] Screen Shot 2018-03-30 at 6.55.27 pm.png (67.6K, 3-Screen%20Shot%202018-03-30%20at%206.55.27%20pm.png)
  download | view image

^ permalink  raw  reply  [nested|flat] 20+ messages in thread

* Re: [pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature
@ 2018-03-30 15:00  Rahul Soshte <[email protected]>
  parent: Murtuza Zabuawala <[email protected]>
  0 siblings, 1 reply; 20+ messages in thread

From: Rahul Soshte @ 2018-03-30 15:00 UTC (permalink / raw)
  To: Murtuza Zabuawala <[email protected]>; pgadmin-hackers

Hi,
I don't know why that combobox is not seen in my environment.I am using
Ubuntu 17.10.I have attached the screenshot.
Is this a bug?



On Fri, Mar 30, 2018 at 7:07 PM, Murtuza Zabuawala <
[email protected]> wrote:

> ++ Attaching screenshot
>
> On Fri, Mar 30, 2018 at 7:06 PM, Murtuza Zabuawala <murtuza.zabuawala@
> enterprisedb.com> wrote:
>
>> Hi Rahul,
>>
>> When I said .sql extension, I meant selected sql option in 'Format'
>> combobox (check the screenshot I've attached)
>>
>> For the error you've mentioned you can create Fake application context.
>> Ref: ../web/pgadmin/dashboard/tests/test_dashboard_templates.py +274
>>
>> --
>> Regards,
>> Murtuza Zabuawala
>> EnterpriseDB: http://www.enterprisedb.com
>> The Enterprise PostgreSQL Company
>>
>>
>> On Fri, Mar 30, 2018 at 6:36 PM, Rahul Soshte <[email protected]>
>> wrote:
>>
>>> Hi,
>>> I tried writing tests in the web/pgadmin/tools/sqleditor/ut
>>> ils/tests/test_save_query_to_file_utils
>>> for the file web/pgadmin/tools/sqleditor/ut
>>> ils/tests/save_query_to_file_utils.py
>>>
>>> But I am getting a error,
>>>
>>> ERROR: runTest (pgadmin.tools.sqleditor.utils
>>> .tests.test_save_query_to_file_utils.TestSaveQueryToFile)
>>> When user has entered the extension .sql to the file while saving
>>> ----------------------------------------------------------------------
>>> Traceback (most recent call last):
>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqledito
>>> r/utils/tests/test_save_query_to_file_utils.py", line 42, in runTest
>>>     file_path_result = save_query_to_file(self.file_data)
>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqledito
>>> r/utils/save_query_to_file_utils.py", line 15, in save_query_to_file
>>>     storage_manager_path = get_storage_directory()
>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/flask_login.py",
>>> line 788, in decorated_view
>>>     if current_app.login_manager._login_disabled:
>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/werkzeug/local.py",
>>> line 338, in __getattr__
>>>     return getattr(self._get_current_object(), name)
>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/werkzeug/local.py",
>>> line 297, in _get_current_object
>>>     return self.__local()
>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/flask/globals.py",
>>> line 51, in _find_app
>>>     raise RuntimeError(_app_ctx_err_msg)
>>> RuntimeError: Working outside of application context.
>>>
>>> How do I test the extracted code inside context? How do I resolve this
>>> error.
>>> I have attached test_save_query_to_file_utils.py
>>> and save_query_to_file_utils.py
>>>
>>> Murtuza, Actually I didnt find any toggable button in the File Dialog
>>> Box So I made it general purpose ( I guess I will have to make one then and
>>> then if I select SQL all .sql files should be listed, and if I select All
>>> files then every type of file is shown in the File Dialog Box,this will be
>>> a new feature, wouldnt it ?  )
>>>
>>>
>>> On Fri, Mar 30, 2018 at 4:10 PM, Murtuza Zabuawala <
>>> [email protected]> wrote:
>>>
>>>>
>>>>
>>>> On Thu, Mar 29, 2018 at 11:45 PM, Joao De Almeida Pereira <
>>>> [email protected]> wrote:
>>>>
>>>>> Hi Rahul,
>>>>> I see you extracted some code, that is a pretty good move :D
>>>>>
>>>>> We run the patch through the testing pipeline and everything is green
>>>>> GJ :D
>>>>> Also tested the functionality by hand and looks like it is working
>>>>> except for "add the .sql extension when format is set to SQL." if you
>>>>> set it to All Files  the extension is also added. Not sure if this is a big
>>>>> deal or not. Lets see what other people think.
>>>>>
>>>> ​Yes, I also think it should append .sql only if the sql extension is
>>>> selected and user has not provided extension.​
>>>>
>>>> ​Let say If I want to save the file with .txt extension then I can use
>>>> All Files. ​
>>>>
>>>>
>>>>> Codewise here are some of my comments:
>>>>> . You added the yarn-error.log file and a migration to the patch
>>>>> doesn't look intentional. Can you please remove them?
>>>>> . Also in the patch there are 2 file (moc_LogWindow.cpp and
>>>>> ui_LogWindow.h) that look like they do not belong to the patch (Did you
>>>>> rebase your branch before trying to create the patch?
>>>>>
>>>>> The test file: test_save_query_to_file.py is empty, it is missing
>>>>> some tests there.
>>>>>
>>>>> As a convention we user lower case names for functions and UpperCase
>>>>> for class
>>>>>
>>>>> Please, regenerate the patch following my previous comments.
>>>>>
>>>>> Thanks
>>>>> Joao
>>>>>
>>>>> On Thu, Mar 29, 2018 at 12:54 PM Rahul Soshte <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Hi,
>>>>>> When using save or save as feature if .sql is not provided this Patch
>>>>>> appends it.
>>>>>> as clearly mentioned in this link.
>>>>>>
>>>>>> https://redmine.postgresql.org/issues/1998
>>>>>>
>>>>>> I have ran pep8,regression and Jasmine tests too.
>>>>>>
>>>>>> I have primarily changed these files
>>>>>>      web/pgadmin/tools/sqleditor/__init__.py
>>>>>>      web/pgadmin/tools/sqleditor/static/js/sqleditor.js
>>>>>>      web/pgadmin/tools/sqleditor/utils/save_query_to_file.py
>>>>>>
>>>>>>
>>>>>> Regards,
>>>>>> Rahul Soshte (Hunter)
>>>>>>
>>>>>>
>>>>
>>>
>>
>


Attachments:

  [image/png] Screenshot from 2018-03-30 20-24-00.png (177.8K, 3-Screenshot%20from%202018-03-30%2020-24-00.png)
  download | view image

  [image/png] Screenshot from 2018-03-30 20-29-32.png (186.2K, 4-Screenshot%20from%202018-03-30%2020-29-32.png)
  download | view image

^ permalink  raw  reply  [nested|flat] 20+ messages in thread

* Re: [pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature
@ 2018-03-30 16:29  Murtuza Zabuawala <[email protected]>
  parent: Rahul Soshte <[email protected]>
  0 siblings, 1 reply; 20+ messages in thread

From: Murtuza Zabuawala @ 2018-03-30 16:29 UTC (permalink / raw)
  To: Rahul Soshte <[email protected]>; +Cc: pgadmin-hackers

​I don't think so, Could you inspect html/css code on 'Save as' dialog
within your browser window and see if it's present or not?​


On Fri, Mar 30, 2018 at 8:30 PM, Rahul Soshte <[email protected]>
wrote:

> Hi,
> I don't know why that combobox is not seen in my environment.I am using
> Ubuntu 17.10.I have attached the screenshot.
> Is this a bug?
>
>
>
> On Fri, Mar 30, 2018 at 7:07 PM, Murtuza Zabuawala <murtuza.zabuawala@
> enterprisedb.com> wrote:
>
>> ++ Attaching screenshot
>>
>> On Fri, Mar 30, 2018 at 7:06 PM, Murtuza Zabuawala <
>> [email protected]> wrote:
>>
>>> Hi Rahul,
>>>
>>> When I said .sql extension, I meant selected sql option in 'Format'
>>> combobox (check the screenshot I've attached)
>>>
>>> For the error you've mentioned you can create Fake application context.
>>> Ref: ../web/pgadmin/dashboard/tests/test_dashboard_templates.py +274
>>>
>>> --
>>> Regards,
>>> Murtuza Zabuawala
>>> EnterpriseDB: http://www.enterprisedb.com
>>> The Enterprise PostgreSQL Company
>>>
>>>
>>> On Fri, Mar 30, 2018 at 6:36 PM, Rahul Soshte <[email protected]>
>>> wrote:
>>>
>>>> Hi,
>>>> I tried writing tests in the web/pgadmin/tools/sqleditor/ut
>>>> ils/tests/test_save_query_to_file_utils
>>>> for the file web/pgadmin/tools/sqleditor/ut
>>>> ils/tests/save_query_to_file_utils.py
>>>>
>>>> But I am getting a error,
>>>>
>>>> ERROR: runTest (pgadmin.tools.sqleditor.utils
>>>> .tests.test_save_query_to_file_utils.TestSaveQueryToFile)
>>>> When user has entered the extension .sql to the file while saving
>>>> ----------------------------------------------------------------------
>>>> Traceback (most recent call last):
>>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqledito
>>>> r/utils/tests/test_save_query_to_file_utils.py", line 42, in runTest
>>>>     file_path_result = save_query_to_file(self.file_data)
>>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqledito
>>>> r/utils/save_query_to_file_utils.py", line 15, in save_query_to_file
>>>>     storage_manager_path = get_storage_directory()
>>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/flask_login.py",
>>>> line 788, in decorated_view
>>>>     if current_app.login_manager._login_disabled:
>>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/werkzeug/local.py",
>>>> line 338, in __getattr__
>>>>     return getattr(self._get_current_object(), name)
>>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/werkzeug/local.py",
>>>> line 297, in _get_current_object
>>>>     return self.__local()
>>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/flask/globals.py",
>>>> line 51, in _find_app
>>>>     raise RuntimeError(_app_ctx_err_msg)
>>>> RuntimeError: Working outside of application context.
>>>>
>>>> How do I test the extracted code inside context? How do I resolve this
>>>> error.
>>>> I have attached test_save_query_to_file_utils.py
>>>> and save_query_to_file_utils.py
>>>>
>>>> Murtuza, Actually I didnt find any toggable button in the File Dialog
>>>> Box So I made it general purpose ( I guess I will have to make one then and
>>>> then if I select SQL all .sql files should be listed, and if I select All
>>>> files then every type of file is shown in the File Dialog Box,this will be
>>>> a new feature, wouldnt it ?  )
>>>>
>>>>
>>>> On Fri, Mar 30, 2018 at 4:10 PM, Murtuza Zabuawala <
>>>> [email protected]> wrote:
>>>>
>>>>>
>>>>>
>>>>> On Thu, Mar 29, 2018 at 11:45 PM, Joao De Almeida Pereira <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Hi Rahul,
>>>>>> I see you extracted some code, that is a pretty good move :D
>>>>>>
>>>>>> We run the patch through the testing pipeline and everything is green
>>>>>> GJ :D
>>>>>> Also tested the functionality by hand and looks like it is working
>>>>>> except for "add the .sql extension when format is set to SQL." if
>>>>>> you set it to All Files  the extension is also added. Not sure if this is a
>>>>>> big deal or not. Lets see what other people think.
>>>>>>
>>>>> ​Yes, I also think it should append .sql only if the sql extension is
>>>>> selected and user has not provided extension.​
>>>>>
>>>>> ​Let say If I want to save the file with .txt extension then I can
>>>>> use All Files. ​
>>>>>
>>>>>
>>>>>> Codewise here are some of my comments:
>>>>>> . You added the yarn-error.log file and a migration to the patch
>>>>>> doesn't look intentional. Can you please remove them?
>>>>>> . Also in the patch there are 2 file (moc_LogWindow.cpp and
>>>>>> ui_LogWindow.h) that look like they do not belong to the patch (Did you
>>>>>> rebase your branch before trying to create the patch?
>>>>>>
>>>>>> The test file: test_save_query_to_file.py is empty, it is missing
>>>>>> some tests there.
>>>>>>
>>>>>> As a convention we user lower case names for functions and UpperCase
>>>>>> for class
>>>>>>
>>>>>> Please, regenerate the patch following my previous comments.
>>>>>>
>>>>>> Thanks
>>>>>> Joao
>>>>>>
>>>>>> On Thu, Mar 29, 2018 at 12:54 PM Rahul Soshte <
>>>>>> [email protected]> wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>> When using save or save as feature if .sql is not provided this
>>>>>>> Patch appends it.
>>>>>>> as clearly mentioned in this link.
>>>>>>>
>>>>>>> https://redmine.postgresql.org/issues/1998
>>>>>>>
>>>>>>> I have ran pep8,regression and Jasmine tests too.
>>>>>>>
>>>>>>> I have primarily changed these files
>>>>>>>      web/pgadmin/tools/sqleditor/__init__.py
>>>>>>>      web/pgadmin/tools/sqleditor/static/js/sqleditor.js
>>>>>>>      web/pgadmin/tools/sqleditor/utils/save_query_to_file.py
>>>>>>>
>>>>>>>
>>>>>>> Regards,
>>>>>>> Rahul Soshte (Hunter)
>>>>>>>
>>>>>>>
>>>>>
>>>>
>>>
>>
>


^ permalink  raw  reply  [nested|flat] 20+ messages in thread

* Re: [pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature
@ 2018-03-30 18:06  Rahul Soshte <[email protected]>
  parent: Murtuza Zabuawala <[email protected]>
  0 siblings, 1 reply; 20+ messages in thread

From: Rahul Soshte @ 2018-03-30 18:06 UTC (permalink / raw)
  To: Murtuza Zabuawala <[email protected]>; +Cc: pgadmin-hackers

Yeah the code is present.I have attached the screenshot.
Also  I have noticed that the format combobox appears clearly in my Vivaldi
Browser but it is not seen in my Firefox Browser.

On Fri, Mar 30, 2018 at 9:59 PM, Murtuza Zabuawala <
[email protected]> wrote:

> ​I don't think so, Could you inspect html/css code on 'Save as' dialog
> within your browser window and see if it's present or not?​
>
>
> On Fri, Mar 30, 2018 at 8:30 PM, Rahul Soshte <[email protected]>
> wrote:
>
>> Hi,
>> I don't know why that combobox is not seen in my environment.I am using
>> Ubuntu 17.10.I have attached the screenshot.
>> Is this a bug?
>>
>>
>>
>> On Fri, Mar 30, 2018 at 7:07 PM, Murtuza Zabuawala <
>> [email protected]> wrote:
>>
>>> ++ Attaching screenshot
>>>
>>> On Fri, Mar 30, 2018 at 7:06 PM, Murtuza Zabuawala <
>>> [email protected]> wrote:
>>>
>>>> Hi Rahul,
>>>>
>>>> When I said .sql extension, I meant selected sql option in 'Format'
>>>> combobox (check the screenshot I've attached)
>>>>
>>>> For the error you've mentioned you can create Fake application context.
>>>> Ref: ../web/pgadmin/dashboard/tests/test_dashboard_templates.py +274
>>>>
>>>> --
>>>> Regards,
>>>> Murtuza Zabuawala
>>>> EnterpriseDB: http://www.enterprisedb.com
>>>> The Enterprise PostgreSQL Company
>>>>
>>>>
>>>> On Fri, Mar 30, 2018 at 6:36 PM, Rahul Soshte <[email protected]
>>>> > wrote:
>>>>
>>>>> Hi,
>>>>> I tried writing tests in the web/pgadmin/tools/sqleditor/ut
>>>>> ils/tests/test_save_query_to_file_utils
>>>>> for the file web/pgadmin/tools/sqleditor/ut
>>>>> ils/tests/save_query_to_file_utils.py
>>>>>
>>>>> But I am getting a error,
>>>>>
>>>>> ERROR: runTest (pgadmin.tools.sqleditor.utils
>>>>> .tests.test_save_query_to_file_utils.TestSaveQueryToFile)
>>>>> When user has entered the extension .sql to the file while saving
>>>>> ----------------------------------------------------------------------
>>>>> Traceback (most recent call last):
>>>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqledito
>>>>> r/utils/tests/test_save_query_to_file_utils.py", line 42, in runTest
>>>>>     file_path_result = save_query_to_file(self.file_data)
>>>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqledito
>>>>> r/utils/save_query_to_file_utils.py", line 15, in save_query_to_file
>>>>>     storage_manager_path = get_storage_directory()
>>>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/flask_login.py",
>>>>> line 788, in decorated_view
>>>>>     if current_app.login_manager._login_disabled:
>>>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/werkzeug/local.py",
>>>>> line 338, in __getattr__
>>>>>     return getattr(self._get_current_object(), name)
>>>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/werkzeug/local.py",
>>>>> line 297, in _get_current_object
>>>>>     return self.__local()
>>>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/flask/globals.py",
>>>>> line 51, in _find_app
>>>>>     raise RuntimeError(_app_ctx_err_msg)
>>>>> RuntimeError: Working outside of application context.
>>>>>
>>>>> How do I test the extracted code inside context? How do I resolve this
>>>>> error.
>>>>> I have attached test_save_query_to_file_utils.py
>>>>> and save_query_to_file_utils.py
>>>>>
>>>>> Murtuza, Actually I didnt find any toggable button in the File Dialog
>>>>> Box So I made it general purpose ( I guess I will have to make one then and
>>>>> then if I select SQL all .sql files should be listed, and if I select All
>>>>> files then every type of file is shown in the File Dialog Box,this will be
>>>>> a new feature, wouldnt it ?  )
>>>>>
>>>>>
>>>>> On Fri, Mar 30, 2018 at 4:10 PM, Murtuza Zabuawala <
>>>>> [email protected]> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> On Thu, Mar 29, 2018 at 11:45 PM, Joao De Almeida Pereira <
>>>>>> [email protected]> wrote:
>>>>>>
>>>>>>> Hi Rahul,
>>>>>>> I see you extracted some code, that is a pretty good move :D
>>>>>>>
>>>>>>> We run the patch through the testing pipeline and everything is
>>>>>>> green GJ :D
>>>>>>> Also tested the functionality by hand and looks like it is working
>>>>>>> except for "add the .sql extension when format is set to SQL." if
>>>>>>> you set it to All Files  the extension is also added. Not sure if this is a
>>>>>>> big deal or not. Lets see what other people think.
>>>>>>>
>>>>>> ​Yes, I also think it should append .sql only if the sql extension
>>>>>> is selected and user has not provided extension.​
>>>>>>
>>>>>> ​Let say If I want to save the file with .txt extension then I can
>>>>>> use All Files. ​
>>>>>>
>>>>>>
>>>>>>> Codewise here are some of my comments:
>>>>>>> . You added the yarn-error.log file and a migration to the patch
>>>>>>> doesn't look intentional. Can you please remove them?
>>>>>>> . Also in the patch there are 2 file (moc_LogWindow.cpp and
>>>>>>> ui_LogWindow.h) that look like they do not belong to the patch (Did you
>>>>>>> rebase your branch before trying to create the patch?
>>>>>>>
>>>>>>> The test file: test_save_query_to_file.py is empty, it is missing
>>>>>>> some tests there.
>>>>>>>
>>>>>>> As a convention we user lower case names for functions and UpperCase
>>>>>>> for class
>>>>>>>
>>>>>>> Please, regenerate the patch following my previous comments.
>>>>>>>
>>>>>>> Thanks
>>>>>>> Joao
>>>>>>>
>>>>>>> On Thu, Mar 29, 2018 at 12:54 PM Rahul Soshte <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>> When using save or save as feature if .sql is not provided this
>>>>>>>> Patch appends it.
>>>>>>>> as clearly mentioned in this link.
>>>>>>>>
>>>>>>>> https://redmine.postgresql.org/issues/1998
>>>>>>>>
>>>>>>>> I have ran pep8,regression and Jasmine tests too.
>>>>>>>>
>>>>>>>> I have primarily changed these files
>>>>>>>>      web/pgadmin/tools/sqleditor/__init__.py
>>>>>>>>      web/pgadmin/tools/sqleditor/static/js/sqleditor.js
>>>>>>>>      web/pgadmin/tools/sqleditor/utils/save_query_to_file.py
>>>>>>>>
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>> Rahul Soshte (Hunter)
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>


Attachments:

  [image/png] Screenshot from 2018-03-30 23-34-26.png (210.0K, 3-Screenshot%20from%202018-03-30%2023-34-26.png)
  download | view image

^ permalink  raw  reply  [nested|flat] 20+ messages in thread

* Re: [pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature
@ 2018-03-31 06:35  Murtuza Zabuawala <[email protected]>
  parent: Rahul Soshte <[email protected]>
  0 siblings, 1 reply; 20+ messages in thread

From: Murtuza Zabuawala @ 2018-03-31 06:35 UTC (permalink / raw)
  To: Rahul Soshte <[email protected]>; +Cc: pgadmin-hackers

Then that's browser specific issue, please create one redmine ticket
<https://redmine.postgresql.org/projects/pgadmin4; for the issue.​


On Fri, Mar 30, 2018 at 11:36 PM, Rahul Soshte <[email protected]>
wrote:

> Yeah the code is present.I have attached the screenshot.
> Also  I have noticed that the format combobox appears clearly in my
> Vivaldi Browser but it is not seen in my Firefox Browser.
>
> On Fri, Mar 30, 2018 at 9:59 PM, Murtuza Zabuawala <murtuza.zabuawala@
> enterprisedb.com> wrote:
>
>> ​I don't think so, Could you inspect html/css code on 'Save as' dialog
>> within your browser window and see if it's present or not?​
>>
>>
>> On Fri, Mar 30, 2018 at 8:30 PM, Rahul Soshte <[email protected]>
>> wrote:
>>
>>> Hi,
>>> I don't know why that combobox is not seen in my environment.I am using
>>> Ubuntu 17.10.I have attached the screenshot.
>>> Is this a bug?
>>>
>>>
>>>
>>> On Fri, Mar 30, 2018 at 7:07 PM, Murtuza Zabuawala <
>>> [email protected]> wrote:
>>>
>>>> ++ Attaching screenshot
>>>>
>>>> On Fri, Mar 30, 2018 at 7:06 PM, Murtuza Zabuawala <
>>>> [email protected]> wrote:
>>>>
>>>>> Hi Rahul,
>>>>>
>>>>> When I said .sql extension, I meant selected sql option in 'Format'
>>>>> combobox (check the screenshot I've attached)
>>>>>
>>>>> For the error you've mentioned you can create Fake application context.
>>>>> Ref: ../web/pgadmin/dashboard/tests/test_dashboard_templates.py +274
>>>>>
>>>>> --
>>>>> Regards,
>>>>> Murtuza Zabuawala
>>>>> EnterpriseDB: http://www.enterprisedb.com
>>>>> The Enterprise PostgreSQL Company
>>>>>
>>>>>
>>>>> On Fri, Mar 30, 2018 at 6:36 PM, Rahul Soshte <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Hi,
>>>>>> I tried writing tests in the web/pgadmin/tools/sqleditor/ut
>>>>>> ils/tests/test_save_query_to_file_utils
>>>>>> for the file web/pgadmin/tools/sqleditor/ut
>>>>>> ils/tests/save_query_to_file_utils.py
>>>>>>
>>>>>> But I am getting a error,
>>>>>>
>>>>>> ERROR: runTest (pgadmin.tools.sqleditor.utils
>>>>>> .tests.test_save_query_to_file_utils.TestSaveQueryToFile)
>>>>>> When user has entered the extension .sql to the file while saving
>>>>>> ------------------------------------------------------------
>>>>>> ----------
>>>>>> Traceback (most recent call last):
>>>>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqledito
>>>>>> r/utils/tests/test_save_query_to_file_utils.py", line 42, in runTest
>>>>>>     file_path_result = save_query_to_file(self.file_data)
>>>>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqledito
>>>>>> r/utils/save_query_to_file_utils.py", line 15, in save_query_to_file
>>>>>>     storage_manager_path = get_storage_directory()
>>>>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/flask_login.py",
>>>>>> line 788, in decorated_view
>>>>>>     if current_app.login_manager._login_disabled:
>>>>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/werkzeug/local.py",
>>>>>> line 338, in __getattr__
>>>>>>     return getattr(self._get_current_object(), name)
>>>>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/werkzeug/local.py",
>>>>>> line 297, in _get_current_object
>>>>>>     return self.__local()
>>>>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/flask/globals.py",
>>>>>> line 51, in _find_app
>>>>>>     raise RuntimeError(_app_ctx_err_msg)
>>>>>> RuntimeError: Working outside of application context.
>>>>>>
>>>>>> How do I test the extracted code inside context? How do I resolve
>>>>>> this error.
>>>>>> I have attached test_save_query_to_file_utils.py
>>>>>> and save_query_to_file_utils.py
>>>>>>
>>>>>> Murtuza, Actually I didnt find any toggable button in the File Dialog
>>>>>> Box So I made it general purpose ( I guess I will have to make one then and
>>>>>> then if I select SQL all .sql files should be listed, and if I select All
>>>>>> files then every type of file is shown in the File Dialog Box,this will be
>>>>>> a new feature, wouldnt it ?  )
>>>>>>
>>>>>>
>>>>>> On Fri, Mar 30, 2018 at 4:10 PM, Murtuza Zabuawala <
>>>>>> [email protected]> wrote:
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Thu, Mar 29, 2018 at 11:45 PM, Joao De Almeida Pereira <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>> Hi Rahul,
>>>>>>>> I see you extracted some code, that is a pretty good move :D
>>>>>>>>
>>>>>>>> We run the patch through the testing pipeline and everything is
>>>>>>>> green GJ :D
>>>>>>>> Also tested the functionality by hand and looks like it is working
>>>>>>>> except for "add the .sql extension when format is set to SQL." if
>>>>>>>> you set it to All Files  the extension is also added. Not sure if this is a
>>>>>>>> big deal or not. Lets see what other people think.
>>>>>>>>
>>>>>>> ​Yes, I also think it should append .sql only if the sql extension
>>>>>>> is selected and user has not provided extension.​
>>>>>>>
>>>>>>> ​Let say If I want to save the file with .txt extension then I can
>>>>>>> use All Files. ​
>>>>>>>
>>>>>>>
>>>>>>>> Codewise here are some of my comments:
>>>>>>>> . You added the yarn-error.log file and a migration to the patch
>>>>>>>> doesn't look intentional. Can you please remove them?
>>>>>>>> . Also in the patch there are 2 file (moc_LogWindow.cpp and
>>>>>>>> ui_LogWindow.h) that look like they do not belong to the patch (Did you
>>>>>>>> rebase your branch before trying to create the patch?
>>>>>>>>
>>>>>>>> The test file: test_save_query_to_file.py is empty, it is missing
>>>>>>>> some tests there.
>>>>>>>>
>>>>>>>> As a convention we user lower case names for functions and
>>>>>>>> UpperCase for class
>>>>>>>>
>>>>>>>> Please, regenerate the patch following my previous comments.
>>>>>>>>
>>>>>>>> Thanks
>>>>>>>> Joao
>>>>>>>>
>>>>>>>> On Thu, Mar 29, 2018 at 12:54 PM Rahul Soshte <
>>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>> When using save or save as feature if .sql is not provided this
>>>>>>>>> Patch appends it.
>>>>>>>>> as clearly mentioned in this link.
>>>>>>>>>
>>>>>>>>> https://redmine.postgresql.org/issues/1998
>>>>>>>>>
>>>>>>>>> I have ran pep8,regression and Jasmine tests too.
>>>>>>>>>
>>>>>>>>> I have primarily changed these files
>>>>>>>>>      web/pgadmin/tools/sqleditor/__init__.py
>>>>>>>>>      web/pgadmin/tools/sqleditor/static/js/sqleditor.js
>>>>>>>>>      web/pgadmin/tools/sqleditor/utils/save_query_to_file.py
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Regards,
>>>>>>>>> Rahul Soshte (Hunter)
>>>>>>>>>
>>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>


^ permalink  raw  reply  [nested|flat] 20+ messages in thread

* Re: [pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature
@ 2018-04-10 22:49  Rahul Soshte <[email protected]>
  parent: Murtuza Zabuawala <[email protected]>
  0 siblings, 1 reply; 20+ messages in thread

From: Rahul Soshte @ 2018-04-10 22:49 UTC (permalink / raw)
  To: Murtuza Zabuawala <[email protected]>; Joao De Almeida Pereira <[email protected]>; +Cc: pgadmin-hackers

I am trying to access the value in the format combobox for selected file
type to put it here..

This snippet happens to be in
web/pgadmin/tools/sqleditor/static/js/sqleditor.js



How do I get access to that format combobox value to determine whether it
is 'sql' or 'All Files' ?
Also What is e here ?

This passed as to sqleditor's save_file method as seen from the code here.

This snippet happens to be in web/pgadmin/tools/sqleditor/__init__.py






On Sat, Mar 31, 2018 at 12:05 PM, Murtuza Zabuawala <
[email protected]> wrote:

>
> Then that's browser specific issue, please create one redmine ticket
> <https://redmine.postgresql.org/projects/pgadmin4; for the issue.​
>
>
> On Fri, Mar 30, 2018 at 11:36 PM, Rahul Soshte <[email protected]>
> wrote:
>
>> Yeah the code is present.I have attached the screenshot.
>> Also  I have noticed that the format combobox appears clearly in my
>> Vivaldi Browser but it is not seen in my Firefox Browser.
>>
>> On Fri, Mar 30, 2018 at 9:59 PM, Murtuza Zabuawala <
>> [email protected]> wrote:
>>
>>> ​I don't think so, Could you inspect html/css code on 'Save as' dialog
>>> within your browser window and see if it's present or not?​
>>>
>>>
>>> On Fri, Mar 30, 2018 at 8:30 PM, Rahul Soshte <[email protected]>
>>> wrote:
>>>
>>>> Hi,
>>>> I don't know why that combobox is not seen in my environment.I am using
>>>> Ubuntu 17.10.I have attached the screenshot.
>>>> Is this a bug?
>>>>
>>>>
>>>>
>>>> On Fri, Mar 30, 2018 at 7:07 PM, Murtuza Zabuawala <
>>>> [email protected]> wrote:
>>>>
>>>>> ++ Attaching screenshot
>>>>>
>>>>> On Fri, Mar 30, 2018 at 7:06 PM, Murtuza Zabuawala <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Hi Rahul,
>>>>>>
>>>>>> When I said .sql extension, I meant selected sql option in 'Format'
>>>>>> combobox (check the screenshot I've attached)
>>>>>>
>>>>>> For the error you've mentioned you can create Fake application
>>>>>> context.
>>>>>> Ref: ../web/pgadmin/dashboard/tests/test_dashboard_templates.py +274
>>>>>>
>>>>>> --
>>>>>> Regards,
>>>>>> Murtuza Zabuawala
>>>>>> EnterpriseDB: http://www.enterprisedb.com
>>>>>> The Enterprise PostgreSQL Company
>>>>>>
>>>>>>
>>>>>> On Fri, Mar 30, 2018 at 6:36 PM, Rahul Soshte <
>>>>>> [email protected]> wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>> I tried writing tests in the web/pgadmin/tools/sqleditor/ut
>>>>>>> ils/tests/test_save_query_to_file_utils
>>>>>>> for the file web/pgadmin/tools/sqleditor/ut
>>>>>>> ils/tests/save_query_to_file_utils.py
>>>>>>>
>>>>>>> But I am getting a error,
>>>>>>>
>>>>>>> ERROR: runTest (pgadmin.tools.sqleditor.utils
>>>>>>> .tests.test_save_query_to_file_utils.TestSaveQueryToFile)
>>>>>>> When user has entered the extension .sql to the file while saving
>>>>>>> ------------------------------------------------------------
>>>>>>> ----------
>>>>>>> Traceback (most recent call last):
>>>>>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqledito
>>>>>>> r/utils/tests/test_save_query_to_file_utils.py", line 42, in runTest
>>>>>>>     file_path_result = save_query_to_file(self.file_data)
>>>>>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqledito
>>>>>>> r/utils/save_query_to_file_utils.py", line 15, in save_query_to_file
>>>>>>>     storage_manager_path = get_storage_directory()
>>>>>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/flask_login.py",
>>>>>>> line 788, in decorated_view
>>>>>>>     if current_app.login_manager._login_disabled:
>>>>>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/werkzeug/local.py",
>>>>>>> line 338, in __getattr__
>>>>>>>     return getattr(self._get_current_object(), name)
>>>>>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/werkzeug/local.py",
>>>>>>> line 297, in _get_current_object
>>>>>>>     return self.__local()
>>>>>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/flask/globals.py",
>>>>>>> line 51, in _find_app
>>>>>>>     raise RuntimeError(_app_ctx_err_msg)
>>>>>>> RuntimeError: Working outside of application context.
>>>>>>>
>>>>>>> How do I test the extracted code inside context? How do I resolve
>>>>>>> this error.
>>>>>>> I have attached test_save_query_to_file_utils.py
>>>>>>> and save_query_to_file_utils.py
>>>>>>>
>>>>>>> Murtuza, Actually I didnt find any toggable button in the File
>>>>>>> Dialog Box So I made it general purpose ( I guess I will have to make one
>>>>>>> then and then if I select SQL all .sql files should be listed, and if I
>>>>>>> select All files then every type of file is shown in the File Dialog
>>>>>>> Box,this will be a new feature, wouldnt it ?  )
>>>>>>>
>>>>>>>
>>>>>>> On Fri, Mar 30, 2018 at 4:10 PM, Murtuza Zabuawala <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thu, Mar 29, 2018 at 11:45 PM, Joao De Almeida Pereira <
>>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>>> Hi Rahul,
>>>>>>>>> I see you extracted some code, that is a pretty good move :D
>>>>>>>>>
>>>>>>>>> We run the patch through the testing pipeline and everything is
>>>>>>>>> green GJ :D
>>>>>>>>> Also tested the functionality by hand and looks like it is working
>>>>>>>>> except for "add the .sql extension when format is set to SQL." if
>>>>>>>>> you set it to All Files  the extension is also added. Not sure if this is a
>>>>>>>>> big deal or not. Lets see what other people think.
>>>>>>>>>
>>>>>>>> ​Yes, I also think it should append .sql only if the sql extension
>>>>>>>> is selected and user has not provided extension.​
>>>>>>>>
>>>>>>>> ​Let say If I want to save the file with .txt extension then I can
>>>>>>>> use All Files. ​
>>>>>>>>
>>>>>>>>
>>>>>>>>> Codewise here are some of my comments:
>>>>>>>>> . You added the yarn-error.log file and a migration to the patch
>>>>>>>>> doesn't look intentional. Can you please remove them?
>>>>>>>>> . Also in the patch there are 2 file (moc_LogWindow.cpp and
>>>>>>>>> ui_LogWindow.h) that look like they do not belong to the patch (Did you
>>>>>>>>> rebase your branch before trying to create the patch?
>>>>>>>>>
>>>>>>>>> The test file: test_save_query_to_file.py is empty, it is missing
>>>>>>>>> some tests there.
>>>>>>>>>
>>>>>>>>> As a convention we user lower case names for functions and
>>>>>>>>> UpperCase for class
>>>>>>>>>
>>>>>>>>> Please, regenerate the patch following my previous comments.
>>>>>>>>>
>>>>>>>>> Thanks
>>>>>>>>> Joao
>>>>>>>>>
>>>>>>>>> On Thu, Mar 29, 2018 at 12:54 PM Rahul Soshte <
>>>>>>>>> [email protected]> wrote:
>>>>>>>>>
>>>>>>>>>> Hi,
>>>>>>>>>> When using save or save as feature if .sql is not provided this
>>>>>>>>>> Patch appends it.
>>>>>>>>>> as clearly mentioned in this link.
>>>>>>>>>>
>>>>>>>>>> https://redmine.postgresql.org/issues/1998
>>>>>>>>>>
>>>>>>>>>> I have ran pep8,regression and Jasmine tests too.
>>>>>>>>>>
>>>>>>>>>> I have primarily changed these files
>>>>>>>>>>      web/pgadmin/tools/sqleditor/__init__.py
>>>>>>>>>>      web/pgadmin/tools/sqleditor/static/js/sqleditor.js
>>>>>>>>>>      web/pgadmin/tools/sqleditor/utils/save_query_to_file.py
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Regards,
>>>>>>>>>> Rahul Soshte (Hunter)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>


Attachments:

  [image/png] image.png (37.7K, 3-image.png)
  download | view image

  [image/png] image.png (45.4K, 4-image.png)
  download | view image

^ permalink  raw  reply  [nested|flat] 20+ messages in thread

* Re: [pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature
@ 2018-04-11 05:45  Murtuza Zabuawala <[email protected]>
  parent: Rahul Soshte <[email protected]>
  0 siblings, 1 reply; 20+ messages in thread

From: Murtuza Zabuawala @ 2018-04-11 05:45 UTC (permalink / raw)
  To: Rahul Soshte <[email protected]>; +Cc: Joao De Almeida Pereira <[email protected]>; pgadmin-hackers

Hi,

We are passing the file name when we trigger an event from File manager
whenever user selects any file
../pgadmin/misc/file_manager/static/js/file_manager.js   Line:302
OR creates any new file
../pgadmin/misc/file_manager/static/js/file_manager.js   Line:583, Line:678

You can use jQuery selector *$('.change_file_types select').val()* to fetch
the selected file type and write your logic accordingly.

On Wed, Apr 11, 2018 at 4:19 AM, Rahul Soshte <[email protected]>
wrote:

> I am trying to access the value in the format combobox for selected file
> type to put it here..
>
> This snippet happens to be in web/pgadmin/tools/sqleditor/st
> atic/js/sqleditor.js
>
>
>
> How do I get access to that format combobox value to determine whether it
> is 'sql' or 'All Files' ?
> Also What is e here ?
>
> This passed as to sqleditor's save_file method as seen from the code here.
>
> This snippet happens to be in web/pgadmin/tools/sqleditor/__init__.py
>
>
>
>
>
>
> On Sat, Mar 31, 2018 at 12:05 PM, Murtuza Zabuawala <
> [email protected]> wrote:
>
>>
>> Then that's browser specific issue, please create one redmine ticket
>> <https://redmine.postgresql.org/projects/pgadmin4; for the issue.​
>>
>>
>> On Fri, Mar 30, 2018 at 11:36 PM, Rahul Soshte <[email protected]>
>> wrote:
>>
>>> Yeah the code is present.I have attached the screenshot.
>>> Also  I have noticed that the format combobox appears clearly in my
>>> Vivaldi Browser but it is not seen in my Firefox Browser.
>>>
>>> On Fri, Mar 30, 2018 at 9:59 PM, Murtuza Zabuawala <
>>> [email protected]> wrote:
>>>
>>>> ​I don't think so, Could you inspect html/css code on 'Save as' dialog
>>>> within your browser window and see if it's present or not?​
>>>>
>>>>
>>>> On Fri, Mar 30, 2018 at 8:30 PM, Rahul Soshte <[email protected]
>>>> > wrote:
>>>>
>>>>> Hi,
>>>>> I don't know why that combobox is not seen in my environment.I am
>>>>> using Ubuntu 17.10.I have attached the screenshot.
>>>>> Is this a bug?
>>>>>
>>>>>
>>>>>
>>>>> On Fri, Mar 30, 2018 at 7:07 PM, Murtuza Zabuawala <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> ++ Attaching screenshot
>>>>>>
>>>>>> On Fri, Mar 30, 2018 at 7:06 PM, Murtuza Zabuawala <
>>>>>> [email protected]> wrote:
>>>>>>
>>>>>>> Hi Rahul,
>>>>>>>
>>>>>>> When I said .sql extension, I meant selected sql option in 'Format'
>>>>>>> combobox (check the screenshot I've attached)
>>>>>>>
>>>>>>> For the error you've mentioned you can create Fake application
>>>>>>> context.
>>>>>>> Ref: ../web/pgadmin/dashboard/tests/test_dashboard_templates.py +274
>>>>>>>
>>>>>>> --
>>>>>>> Regards,
>>>>>>> Murtuza Zabuawala
>>>>>>> EnterpriseDB: http://www.enterprisedb.com
>>>>>>> The Enterprise PostgreSQL Company
>>>>>>>
>>>>>>>
>>>>>>> On Fri, Mar 30, 2018 at 6:36 PM, Rahul Soshte <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>> I tried writing tests in the web/pgadmin/tools/sqleditor/ut
>>>>>>>> ils/tests/test_save_query_to_file_utils
>>>>>>>> for the file web/pgadmin/tools/sqleditor/ut
>>>>>>>> ils/tests/save_query_to_file_utils.py
>>>>>>>>
>>>>>>>> But I am getting a error,
>>>>>>>>
>>>>>>>> ERROR: runTest (pgadmin.tools.sqleditor.utils
>>>>>>>> .tests.test_save_query_to_file_utils.TestSaveQueryToFile)
>>>>>>>> When user has entered the extension .sql to the file while saving
>>>>>>>> ------------------------------------------------------------
>>>>>>>> ----------
>>>>>>>> Traceback (most recent call last):
>>>>>>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqledito
>>>>>>>> r/utils/tests/test_save_query_to_file_utils.py", line 42, in
>>>>>>>> runTest
>>>>>>>>     file_path_result = save_query_to_file(self.file_data)
>>>>>>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqledito
>>>>>>>> r/utils/save_query_to_file_utils.py", line 15, in
>>>>>>>> save_query_to_file
>>>>>>>>     storage_manager_path = get_storage_directory()
>>>>>>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/flask_login.py",
>>>>>>>> line 788, in decorated_view
>>>>>>>>     if current_app.login_manager._login_disabled:
>>>>>>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/werkzeug/local.py",
>>>>>>>> line 338, in __getattr__
>>>>>>>>     return getattr(self._get_current_object(), name)
>>>>>>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/werkzeug/local.py",
>>>>>>>> line 297, in _get_current_object
>>>>>>>>     return self.__local()
>>>>>>>>   File "/var/www/flask/pgadmin4/local/lib/python2.7/site-packages/flask/globals.py",
>>>>>>>> line 51, in _find_app
>>>>>>>>     raise RuntimeError(_app_ctx_err_msg)
>>>>>>>> RuntimeError: Working outside of application context.
>>>>>>>>
>>>>>>>> How do I test the extracted code inside context? How do I resolve
>>>>>>>> this error.
>>>>>>>> I have attached test_save_query_to_file_utils.py
>>>>>>>> and save_query_to_file_utils.py
>>>>>>>>
>>>>>>>> Murtuza, Actually I didnt find any toggable button in the File
>>>>>>>> Dialog Box So I made it general purpose ( I guess I will have to make one
>>>>>>>> then and then if I select SQL all .sql files should be listed, and if I
>>>>>>>> select All files then every type of file is shown in the File Dialog
>>>>>>>> Box,this will be a new feature, wouldnt it ?  )
>>>>>>>>
>>>>>>>>
>>>>>>>> On Fri, Mar 30, 2018 at 4:10 PM, Murtuza Zabuawala <
>>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Thu, Mar 29, 2018 at 11:45 PM, Joao De Almeida Pereira <
>>>>>>>>> [email protected]> wrote:
>>>>>>>>>
>>>>>>>>>> Hi Rahul,
>>>>>>>>>> I see you extracted some code, that is a pretty good move :D
>>>>>>>>>>
>>>>>>>>>> We run the patch through the testing pipeline and everything is
>>>>>>>>>> green GJ :D
>>>>>>>>>> Also tested the functionality by hand and looks like it is
>>>>>>>>>> working except for "add the .sql extension when format is set to
>>>>>>>>>> SQL." if you set it to All Files  the extension is also added.
>>>>>>>>>> Not sure if this is a big deal or not. Lets see what other people think.
>>>>>>>>>>
>>>>>>>>> ​Yes, I also think it should append .sql only if the sql
>>>>>>>>> extension is selected and user has not provided extension.​
>>>>>>>>>
>>>>>>>>> ​Let say If I want to save the file with .txt extension then I
>>>>>>>>> can use All Files. ​
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> Codewise here are some of my comments:
>>>>>>>>>> . You added the yarn-error.log file and a migration to the patch
>>>>>>>>>> doesn't look intentional. Can you please remove them?
>>>>>>>>>> . Also in the patch there are 2 file (moc_LogWindow.cpp and
>>>>>>>>>> ui_LogWindow.h) that look like they do not belong to the patch (Did you
>>>>>>>>>> rebase your branch before trying to create the patch?
>>>>>>>>>>
>>>>>>>>>> The test file: test_save_query_to_file.py is empty, it is
>>>>>>>>>> missing some tests there.
>>>>>>>>>>
>>>>>>>>>> As a convention we user lower case names for functions and
>>>>>>>>>> UpperCase for class
>>>>>>>>>>
>>>>>>>>>> Please, regenerate the patch following my previous comments.
>>>>>>>>>>
>>>>>>>>>> Thanks
>>>>>>>>>> Joao
>>>>>>>>>>
>>>>>>>>>> On Thu, Mar 29, 2018 at 12:54 PM Rahul Soshte <
>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hi,
>>>>>>>>>>> When using save or save as feature if .sql is not provided this
>>>>>>>>>>> Patch appends it.
>>>>>>>>>>> as clearly mentioned in this link.
>>>>>>>>>>>
>>>>>>>>>>> https://redmine.postgresql.org/issues/1998
>>>>>>>>>>>
>>>>>>>>>>> I have ran pep8,regression and Jasmine tests too.
>>>>>>>>>>>
>>>>>>>>>>> I have primarily changed these files
>>>>>>>>>>>      web/pgadmin/tools/sqleditor/__init__.py
>>>>>>>>>>>      web/pgadmin/tools/sqleditor/static/js/sqleditor.js
>>>>>>>>>>>      web/pgadmin/tools/sqleditor/utils/save_query_to_file.py
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Regards,
>>>>>>>>>>> Rahul Soshte (Hunter)
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>


Attachments:

  [image/png] image.png (45.4K, 3-image.png)
  download | view image

  [image/png] image.png (37.7K, 4-image.png)
  download | view image

^ permalink  raw  reply  [nested|flat] 20+ messages in thread

* Re: [pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature
@ 2018-04-14 11:16  Rahul Soshte <[email protected]>
  parent: Murtuza Zabuawala <[email protected]>
  0 siblings, 1 reply; 20+ messages in thread

From: Rahul Soshte @ 2018-04-14 11:16 UTC (permalink / raw)
  To: Murtuza Zabuawala <[email protected]>; +Cc: Joao De Almeida Pereira <[email protected]>; pgadmin-hackers

Hi,

I have been partially able to solve the problem as you can see in the
image. When I select sql in format combobox then only the .sql extension is
added.




 But another issue has arisen. Once the file is saved and now When I change
the text in the CodeMirror , the save button is enabled and then when I
click on it , a error message pops.The problem is whenever I try to save a
file for the first time the code works ,but the 2nd time
I try to save it,the code faulters.

Error message is as follows:

Traceback (most recent call last):
  File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
line 1997, in __call__
    return self.wsgi_app(environ, start_response)
  File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
line 1985, in wsgi_app
    response = self.handle_exception(e)
  File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
line 1540, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
line 1982, in wsgi_app
    response = self.full_dispach_request()
  File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File
"/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask_login.py", line
792, in decorated_view
    return func(*args, **kwargs)
  File
"/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqleditor/__init__.py",
line 1314, in save_file
    'file_path': file_path
  File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/utils/ajax.py", line
61, in make_json_response
    separators=(',', ':')),
  File
"/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/__init__.py",
line 399, in dumps
    **kw).encode(obj)
  File
"/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
line 291, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File
"/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
line 373, in iterencode
    return _iterencode(o, 0)
  File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/utils/ajax.py", line
30, in default
    return json.JSONEncoder.default(self, obj)
  File
"/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
line 268, in default
    o.__class__.__name__)
TypeError: Object of type Response is not JSON serializable

I pass an array which contains the file_name and file_type in
/pgadmin/misc/file_manager/static/js/file_manager.js



Also I have done similar changes around line 678.

Also in web/pgadmin/tools/sqleditor/__init__.py I have made the folllowing
changes



Also I have attached my
web/pgadmin/tools/sqleditor/utils/save_file_query_to_file_utils.py


Attachments:

  [image/png] image.png (24.9K, 3-image.png)
  download | view image

  [image/png] image.png (62.4K, 4-image.png)
  download | view image

  [image/png] image.png (62.9K, 5-image.png)
  download | view image

  [image/png] image.png (29.1K, 6-image.png)
  download | view image

  [text/x-python] save_query_to_file_utils.py (2.2K, 7-save_query_to_file_utils.py)
  download | inline:
import os
from pgadmin.misc.file_manager import Filemanager
from pgadmin.utils import get_storage_directory
from pgadmin.utils.ajax import make_json_response, bad_request, \
    success_return, internal_server_error, unauthorized

try:
    from urllib import unquote
except ImportError:
    from urllib.parse import unquote


def save_query_to_file(file_data):
    # retrieve storage directory path
    storage_manager_path = get_storage_directory()

    # generate full path of file
    file_path = unquote(file_data['file_name'])

    if hasattr(str, 'decode'):
        file_path = unquote(
            file_data['file_name']
        ).encode('utf-8').decode('utf-8')
        
        file_type = file_data['file_type']

    
    #file_type=file_data['file_type']
    if file_type == 'sql':
        if not file_path.endswith('.sql'):
            file_path = file_path + ".sql"        

    try:
        Filemanager.check_access_permission(storage_manager_path, file_path)
    except Exception as e:
        return internal_server_error(errormsg=str(e))

    # lstrip() returns a copy of the string
    # in which all chars have been stripped
    # from the beginning of the string (default whitespace characters).
    if storage_manager_path is not None:
        file_path = os.path.join(
            storage_manager_path,
            file_path.lstrip('/').lstrip('\\')
        )

    if hasattr(str, 'decode'):
        file_content = file_data['file_content']
    else:
        file_content = file_data['file_content'].encode()

    # write to file
    try:
        with open(file_path, 'wb+') as output_file:
            if hasattr(str, 'decode'):
                output_file.write(file_content.encode('utf-8'))
                return file_path
            else:
                output_file.write(file_content)
                return file_path
    except IOError as e:
        if e.strerror == 'Permission denied':
            err_msg = "Error: {0}".format(e.strerror)
        else:
            err_msg = "Error: {0}".format(e.strerror)
        return internal_server_error(errormsg=err_msg)
    except Exception as e:
        err_msg = "Error: {0}".format(e.strerror)
        return internal_server_error(errormsg=err_msg)

^ permalink  raw  reply  [nested|flat] 20+ messages in thread

* Re: [pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature
@ 2018-04-14 11:19  Rahul Soshte <[email protected]>
  parent: Rahul Soshte <[email protected]>
  0 siblings, 1 reply; 20+ messages in thread

From: Rahul Soshte @ 2018-04-14 11:19 UTC (permalink / raw)
  To: Murtuza Zabuawala <[email protected]>; +Cc: Joao De Almeida Pereira <[email protected]>; pgadmin-hackers

Also attaching my web/pgadmin/tools/sqleditor/static/sqleditor.js
my  _save_file_handler code





On Sat, Apr 14, 2018 at 4:46 PM, Rahul Soshte <[email protected]>
wrote:

> Hi,
>
> I have been partially able to solve the problem as you can see in the
> image. When I select sql in format combobox then only the .sql extension is
> added.
>
>
>
>
>  But another issue has arisen. Once the file is saved and now When I
> change the text in the CodeMirror , the save button is enabled and then
> when I click on it , a error message pops.The problem is whenever I try to
> save a file for the first time the code works ,but the 2nd time
> I try to save it,the code faulters.
>
> Error message is as follows:
>
> Traceback (most recent call last):
>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
> line 1997, in __call__
>     return self.wsgi_app(environ, start_response)
>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
> line 1985, in wsgi_app
>     response = self.handle_exception(e)
>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
> line 1540, in handle_exception
>     reraise(exc_type, exc_value, tb)
>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
> line 1982, in wsgi_app
>     response = self.full_dispach_request()
>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
> line 1614, in full_dispatch_request
>     rv = self.handle_user_exception(e)
>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
> line 1517, in handle_user_exception
>     reraise(exc_type, exc_value, tb)
>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
> line 1612, in full_dispatch_request
>     rv = self.dispatch_request()
>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
> line 1598, in dispatch_request
>     return self.view_functions[rule.endpoint](**req.view_args)
>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask_login.py",
> line 792, in decorated_view
>     return func(*args, **kwargs)
>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqleditor/__init__.py",
> line 1314, in save_file
>     'file_path': file_path
>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/utils/ajax.py", line
> 61, in make_json_response
>     separators=(',', ':')),
>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/__init__.py",
> line 399, in dumps
>     **kw).encode(obj)
>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
> line 291, in encode
>     chunks = self.iterencode(o, _one_shot=True)
>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
> line 373, in iterencode
>     return _iterencode(o, 0)
>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/utils/ajax.py", line
> 30, in default
>     return json.JSONEncoder.default(self, obj)
>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
> line 268, in default
>     o.__class__.__name__)
> TypeError: Object of type Response is not JSON serializable
>
> I pass an array which contains the file_name and file_type in
> /pgadmin/misc/file_manager/static/js/file_manager.js
>
>
>
> Also I have done similar changes around line 678.
>
> Also in web/pgadmin/tools/sqleditor/__init__.py I have made the
> folllowing changes
>
>
>
> Also I have attached my web/pgadmin/tools/sqleditor/
> utils/save_file_query_to_file_utils.py
>


Attachments:

  [image/png] image.png (62.4K, 3-image.png)
  download | view image

  [image/png] image.png (64.0K, 4-image.png)
  download | view image

  [image/png] image.png (24.9K, 5-image.png)
  download | view image

  [image/png] image.png (29.1K, 6-image.png)
  download | view image

  [image/png] image.png (62.9K, 7-image.png)
  download | view image

^ permalink  raw  reply  [nested|flat] 20+ messages in thread

* Re: [pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature
@ 2018-04-14 11:20  Rahul Soshte <[email protected]>
  parent: Rahul Soshte <[email protected]>
  0 siblings, 1 reply; 20+ messages in thread

From: Rahul Soshte @ 2018-04-14 11:20 UTC (permalink / raw)
  To: Murtuza Zabuawala <[email protected]>; +Cc: Joao De Almeida Pereira <[email protected]>; pgadmin-hackers

On Sat, Apr 14, 2018 at 4:49 PM, Rahul Soshte <[email protected]>
wrote:

> Also attaching my web/pgadmin/tools/sqleditor/static/sqleditor.js
> my  _save_file_handler code
>
>
>
>
>
> On Sat, Apr 14, 2018 at 4:46 PM, Rahul Soshte <[email protected]>
> wrote:
>
>> Hi,
>>
>> I have been partially able to solve the problem as you can see in the
>> image. When I select sql in format combobox then only the .sql extension is
>> added.
>>
>>
>>
>>
>>  But another issue has arisen. Once the file is saved and now When I
>> change the text in the CodeMirror , the save button is enabled and then
>> when I click on it , a error message pops.The problem is whenever I try to
>> save a file for the first time the code works ,but the 2nd time
>> I try to save it,the code faulters.
>>
>> Error message is as follows:
>>
>> Traceback (most recent call last):
>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>> line 1997, in __call__
>>     return self.wsgi_app(environ, start_response)
>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>> line 1985, in wsgi_app
>>     response = self.handle_exception(e)
>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>> line 1540, in handle_exception
>>     reraise(exc_type, exc_value, tb)
>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>> line 1982, in wsgi_app
>>     response = self.full_dispach_request()
>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>> line 1614, in full_dispatch_request
>>     rv = self.handle_user_exception(e)
>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>> line 1517, in handle_user_exception
>>     reraise(exc_type, exc_value, tb)
>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>> line 1612, in full_dispatch_request
>>     rv = self.dispatch_request()
>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>> line 1598, in dispatch_request
>>     return self.view_functions[rule.endpoint](**req.view_args)
>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask_login.py",
>> line 792, in decorated_view
>>     return func(*args, **kwargs)
>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqleditor/__init__.py",
>> line 1314, in save_file
>>     'file_path': file_path
>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/utils/ajax.py",
>> line 61, in make_json_response
>>     separators=(',', ':')),
>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/__init__.py",
>> line 399, in dumps
>>     **kw).encode(obj)
>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
>> line 291, in encode
>>     chunks = self.iterencode(o, _one_shot=True)
>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
>> line 373, in iterencode
>>     return _iterencode(o, 0)
>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/utils/ajax.py",
>> line 30, in default
>>     return json.JSONEncoder.default(self, obj)
>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
>> line 268, in default
>>     o.__class__.__name__)
>> TypeError: Object of type Response is not JSON serializable
>>
>> I pass an array which contains the file_name and file_type in
>> /pgadmin/misc/file_manager/static/js/file_manager.js
>>
>>
>>
>> Also I have done similar changes around line 678.
>>
>> Also in web/pgadmin/tools/sqleditor/__init__.py I have made the
>> folllowing changes
>>
>>
>>
>> Also I have attached my web/pgadmin/tools/sqleditor/ut
>> ils/save_file_query_to_file_utils.py
>>
>
>


Attachments:

  [image/png] image.png (24.9K, 3-image.png)
  download | view image

  [image/png] image.png (29.1K, 4-image.png)
  download | view image

  [image/png] image.png (64.0K, 5-image.png)
  download | view image

  [image/png] image.png (62.4K, 6-image.png)
  download | view image

  [image/png] image.png (62.9K, 7-image.png)
  download | view image

  [image/png] image.png (64.0K, 8-image.png)
  download | view image

^ permalink  raw  reply  [nested|flat] 20+ messages in thread

* Re: [pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature
@ 2018-04-14 11:21  Rahul Soshte <[email protected]>
  parent: Rahul Soshte <[email protected]>
  0 siblings, 1 reply; 20+ messages in thread

From: Rahul Soshte @ 2018-04-14 11:21 UTC (permalink / raw)
  To: Murtuza Zabuawala <[email protected]>; +Cc: Joao De Almeida Pereira <[email protected]>; pgadmin-hackers

// read data from codemirror and write to file
      _save_file_handler: function(e) {
        var self = this,
          _e = e,
          data = {
            'file_name': decodeURI(e[0]),
            'file_content': self.gridView.query_tool_obj.getValue(),
            'file_type': e[1],
          };
        self.trigger(
          'pgadmin-sqleditor:loading-icon:show',
          gettext('Saving the queries in the file...')
        );

        // Make ajax call to save the data to file
        $.ajax({
          url: url_for('sqleditor.save_file'),
          method: 'POST',
          contentType: 'application/json',
          data: JSON.stringify(data),
          success: function(res) {
            if (res.data.status) {
              alertify.success(res.data.result);
              alertify.success(gettext('File saved successfully.'));
              self.gridView.current_file = res.data.result;
              self.gridView.current_file_type = e[1];

self.setTitle(self.gridView.current_file.replace(/^.*[\\\/]/g, ''), true);
              // disable save button on file save
              $('#btn-save').prop('disabled', true);

On Sat, Apr 14, 2018 at 4:50 PM, Rahul Soshte <[email protected]>
wrote:

>
>
>
> On Sat, Apr 14, 2018 at 4:49 PM, Rahul Soshte <[email protected]>
> wrote:
>
>> Also attaching my web/pgadmin/tools/sqleditor/static/sqleditor.js
>> my  _save_file_handler code
>>
>>
>>
>>
>>
>> On Sat, Apr 14, 2018 at 4:46 PM, Rahul Soshte <[email protected]>
>> wrote:
>>
>>> Hi,
>>>
>>> I have been partially able to solve the problem as you can see in the
>>> image. When I select sql in format combobox then only the .sql extension is
>>> added.
>>>
>>>
>>>
>>>
>>>  But another issue has arisen. Once the file is saved and now When I
>>> change the text in the CodeMirror , the save button is enabled and then
>>> when I click on it , a error message pops.The problem is whenever I try to
>>> save a file for the first time the code works ,but the 2nd time
>>> I try to save it,the code faulters.
>>>
>>> Error message is as follows:
>>>
>>> Traceback (most recent call last):
>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>> line 1997, in __call__
>>>     return self.wsgi_app(environ, start_response)
>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>> line 1985, in wsgi_app
>>>     response = self.handle_exception(e)
>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>> line 1540, in handle_exception
>>>     reraise(exc_type, exc_value, tb)
>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>> line 1982, in wsgi_app
>>>     response = self.full_dispach_request()
>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>> line 1614, in full_dispatch_request
>>>     rv = self.handle_user_exception(e)
>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>> line 1517, in handle_user_exception
>>>     reraise(exc_type, exc_value, tb)
>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>> line 1612, in full_dispatch_request
>>>     rv = self.dispatch_request()
>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>> line 1598, in dispatch_request
>>>     return self.view_functions[rule.endpoint](**req.view_args)
>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask_login.py",
>>> line 792, in decorated_view
>>>     return func(*args, **kwargs)
>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqleditor/__init__.py",
>>> line 1314, in save_file
>>>     'file_path': file_path
>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/utils/ajax.py",
>>> line 61, in make_json_response
>>>     separators=(',', ':')),
>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/__init__.py",
>>> line 399, in dumps
>>>     **kw).encode(obj)
>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
>>> line 291, in encode
>>>     chunks = self.iterencode(o, _one_shot=True)
>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
>>> line 373, in iterencode
>>>     return _iterencode(o, 0)
>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/utils/ajax.py",
>>> line 30, in default
>>>     return json.JSONEncoder.default(self, obj)
>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
>>> line 268, in default
>>>     o.__class__.__name__)
>>> TypeError: Object of type Response is not JSON serializable
>>>
>>> I pass an array which contains the file_name and file_type in
>>> /pgadmin/misc/file_manager/static/js/file_manager.js
>>>
>>>
>>>
>>> Also I have done similar changes around line 678.
>>>
>>> Also in web/pgadmin/tools/sqleditor/__init__.py I have made the
>>> folllowing changes
>>>
>>>
>>>
>>> Also I have attached my web/pgadmin/tools/sqleditor/ut
>>> ils/save_file_query_to_file_utils.py
>>>
>>
>>
>


Attachments:

  [image/png] image.png (64.0K, 3-image.png)
  download | view image

  [image/png] image.png (62.4K, 4-image.png)
  download | view image

  [image/png] image.png (29.1K, 5-image.png)
  download | view image

  [image/png] image.png (24.9K, 6-image.png)
  download | view image

  [image/png] image.png (64.0K, 7-image.png)
  download | view image

  [image/png] image.png (62.9K, 8-image.png)
  download | view image

^ permalink  raw  reply  [nested|flat] 20+ messages in thread

* Re: [pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature
@ 2018-04-16 10:43  Khushboo Vashi <[email protected]>
  parent: Rahul Soshte <[email protected]>
  0 siblings, 1 reply; 20+ messages in thread

From: Khushboo Vashi @ 2018-04-16 10:43 UTC (permalink / raw)
  To: Rahul Soshte <[email protected]>; +Cc: Murtuza Zabuawala <[email protected]>; Joao De Almeida Pereira <[email protected]>; pgadmin-hackers

Hi Rahul,

Instead of partial code, please send WIP patch, so I can look into this and
help you.

Thanks,
Khushboo

On Sat, Apr 14, 2018 at 4:51 PM, Rahul Soshte <[email protected]>
wrote:

> // read data from codemirror and write to file
>       _save_file_handler: function(e) {
>         var self = this,
>           _e = e,
>           data = {
>             'file_name': decodeURI(e[0]),
>             'file_content': self.gridView.query_tool_obj.getValue(),
>             'file_type': e[1],
>           };
>         self.trigger(
>           'pgadmin-sqleditor:loading-icon:show',
>           gettext('Saving the queries in the file...')
>         );
>
>         // Make ajax call to save the data to file
>         $.ajax({
>           url: url_for('sqleditor.save_file'),
>           method: 'POST',
>           contentType: 'application/json',
>           data: JSON.stringify(data),
>           success: function(res) {
>             if (res.data.status) {
>               alertify.success(res.data.result);
>               alertify.success(gettext('File saved successfully.'));
>               self.gridView.current_file = res.data.result;
>               self.gridView.current_file_type = e[1];
>               self.setTitle(self.gridView.current_file.replace(/^.*[\\\/]/g,
> ''), true);
>               // disable save button on file save
>               $('#btn-save').prop('disabled', true);
>
> On Sat, Apr 14, 2018 at 4:50 PM, Rahul Soshte <[email protected]>
> wrote:
>
>>
>>
>>
>> On Sat, Apr 14, 2018 at 4:49 PM, Rahul Soshte <[email protected]>
>> wrote:
>>
>>> Also attaching my web/pgadmin/tools/sqleditor/static/sqleditor.js
>>> my  _save_file_handler code
>>>
>>>
>>>
>>>
>>>
>>> On Sat, Apr 14, 2018 at 4:46 PM, Rahul Soshte <[email protected]>
>>> wrote:
>>>
>>>> Hi,
>>>>
>>>> I have been partially able to solve the problem as you can see in the
>>>> image. When I select sql in format combobox then only the .sql extension is
>>>> added.
>>>>
>>>>
>>>>
>>>>
>>>>  But another issue has arisen. Once the file is saved and now When I
>>>> change the text in the CodeMirror , the save button is enabled and then
>>>> when I click on it , a error message pops.The problem is whenever I try to
>>>> save a file for the first time the code works ,but the 2nd time
>>>> I try to save it,the code faulters.
>>>>
>>>> Error message is as follows:
>>>>
>>>> Traceback (most recent call last):
>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>> line 1997, in __call__
>>>>     return self.wsgi_app(environ, start_response)
>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>> line 1985, in wsgi_app
>>>>     response = self.handle_exception(e)
>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>> line 1540, in handle_exception
>>>>     reraise(exc_type, exc_value, tb)
>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>> line 1982, in wsgi_app
>>>>     response = self.full_dispach_request()
>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>> line 1614, in full_dispatch_request
>>>>     rv = self.handle_user_exception(e)
>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>> line 1517, in handle_user_exception
>>>>     reraise(exc_type, exc_value, tb)
>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>> line 1612, in full_dispatch_request
>>>>     rv = self.dispatch_request()
>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>> line 1598, in dispatch_request
>>>>     return self.view_functions[rule.endpoint](**req.view_args)
>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask_login.py",
>>>> line 792, in decorated_view
>>>>     return func(*args, **kwargs)
>>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqleditor/__init__.py",
>>>> line 1314, in save_file
>>>>     'file_path': file_path
>>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/utils/ajax.py",
>>>> line 61, in make_json_response
>>>>     separators=(',', ':')),
>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/__init__.py",
>>>> line 399, in dumps
>>>>     **kw).encode(obj)
>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
>>>> line 291, in encode
>>>>     chunks = self.iterencode(o, _one_shot=True)
>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
>>>> line 373, in iterencode
>>>>     return _iterencode(o, 0)
>>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/utils/ajax.py",
>>>> line 30, in default
>>>>     return json.JSONEncoder.default(self, obj)
>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
>>>> line 268, in default
>>>>     o.__class__.__name__)
>>>> TypeError: Object of type Response is not JSON serializable
>>>>
>>>> I pass an array which contains the file_name and file_type in
>>>> /pgadmin/misc/file_manager/static/js/file_manager.js
>>>>
>>>>
>>>>
>>>> Also I have done similar changes around line 678.
>>>>
>>>> Also in web/pgadmin/tools/sqleditor/__init__.py I have made the
>>>> folllowing changes
>>>>
>>>>
>>>>
>>>> Also I have attached my web/pgadmin/tools/sqleditor/ut
>>>> ils/save_file_query_to_file_utils.py
>>>>
>>>
>>>
>>
>


Attachments:

  [image/png] image.png (62.9K, 3-image.png)
  download | view image

  [image/png] image.png (24.9K, 4-image.png)
  download | view image

  [image/png] image.png (64.0K, 5-image.png)
  download | view image

  [image/png] image.png (29.1K, 6-image.png)
  download | view image

  [image/png] image.png (62.4K, 7-image.png)
  download | view image

  [image/png] image.png (64.0K, 8-image.png)
  download | view image

^ permalink  raw  reply  [nested|flat] 20+ messages in thread

* Re: [pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature
@ 2018-04-16 12:20  Rahul Soshte <[email protected]>
  parent: Khushboo Vashi <[email protected]>
  0 siblings, 1 reply; 20+ messages in thread

From: Rahul Soshte @ 2018-04-16 12:20 UTC (permalink / raw)
  To: Khushboo Vashi <[email protected]>; +Cc: Murtuza Zabuawala <[email protected]>; Joao De Almeida Pereira <[email protected]>; pgadmin-hackers

Hi,

I have attached the WIP Patch.

Regards,
Rahul Soshte

On Mon, Apr 16, 2018 at 4:13 PM, Khushboo Vashi <
[email protected]> wrote:

> Hi Rahul,
>
> Instead of partial code, please send WIP patch, so I can look into this
> and help you.
>
> Thanks,
> Khushboo
>
>
> On Sat, Apr 14, 2018 at 4:51 PM, Rahul Soshte <[email protected]>
> wrote:
>
>> // read data from codemirror and write to file
>>       _save_file_handler: function(e) {
>>         var self = this,
>>           _e = e,
>>           data = {
>>             'file_name': decodeURI(e[0]),
>>             'file_content': self.gridView.query_tool_obj.getValue(),
>>             'file_type': e[1],
>>           };
>>         self.trigger(
>>           'pgadmin-sqleditor:loading-icon:show',
>>           gettext('Saving the queries in the file...')
>>         );
>>
>>         // Make ajax call to save the data to file
>>         $.ajax({
>>           url: url_for('sqleditor.save_file'),
>>           method: 'POST',
>>           contentType: 'application/json',
>>           data: JSON.stringify(data),
>>           success: function(res) {
>>             if (res.data.status) {
>>               alertify.success(res.data.result);
>>               alertify.success(gettext('File saved successfully.'));
>>               self.gridView.current_file = res.data.result;
>>               self.gridView.current_file_type = e[1];
>>               self.setTitle(self.gridView.cu
>> rrent_file.replace(/^.*[\\\/]/g, ''), true);
>>               // disable save button on file save
>>               $('#btn-save').prop('disabled', true);
>>
>> On Sat, Apr 14, 2018 at 4:50 PM, Rahul Soshte <[email protected]>
>> wrote:
>>
>>>
>>>
>>>
>>> On Sat, Apr 14, 2018 at 4:49 PM, Rahul Soshte <[email protected]>
>>> wrote:
>>>
>>>> Also attaching my web/pgadmin/tools/sqleditor/static/sqleditor.js
>>>> my  _save_file_handler code
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Sat, Apr 14, 2018 at 4:46 PM, Rahul Soshte <[email protected]
>>>> > wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> I have been partially able to solve the problem as you can see in the
>>>>> image. When I select sql in format combobox then only the .sql extension is
>>>>> added.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>  But another issue has arisen. Once the file is saved and now When I
>>>>> change the text in the CodeMirror , the save button is enabled and then
>>>>> when I click on it , a error message pops.The problem is whenever I try to
>>>>> save a file for the first time the code works ,but the 2nd time
>>>>> I try to save it,the code faulters.
>>>>>
>>>>> Error message is as follows:
>>>>>
>>>>> Traceback (most recent call last):
>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>>> line 1997, in __call__
>>>>>     return self.wsgi_app(environ, start_response)
>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>>> line 1985, in wsgi_app
>>>>>     response = self.handle_exception(e)
>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>>> line 1540, in handle_exception
>>>>>     reraise(exc_type, exc_value, tb)
>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>>> line 1982, in wsgi_app
>>>>>     response = self.full_dispach_request()
>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>>> line 1614, in full_dispatch_request
>>>>>     rv = self.handle_user_exception(e)
>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>>> line 1517, in handle_user_exception
>>>>>     reraise(exc_type, exc_value, tb)
>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>>> line 1612, in full_dispatch_request
>>>>>     rv = self.dispatch_request()
>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>>> line 1598, in dispatch_request
>>>>>     return self.view_functions[rule.endpoint](**req.view_args)
>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask_login.py",
>>>>> line 792, in decorated_view
>>>>>     return func(*args, **kwargs)
>>>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqleditor/__init__.py",
>>>>> line 1314, in save_file
>>>>>     'file_path': file_path
>>>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/utils/ajax.py",
>>>>> line 61, in make_json_response
>>>>>     separators=(',', ':')),
>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/__init__.py",
>>>>> line 399, in dumps
>>>>>     **kw).encode(obj)
>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
>>>>> line 291, in encode
>>>>>     chunks = self.iterencode(o, _one_shot=True)
>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
>>>>> line 373, in iterencode
>>>>>     return _iterencode(o, 0)
>>>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/utils/ajax.py",
>>>>> line 30, in default
>>>>>     return json.JSONEncoder.default(self, obj)
>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
>>>>> line 268, in default
>>>>>     o.__class__.__name__)
>>>>> TypeError: Object of type Response is not JSON serializable
>>>>>
>>>>> I pass an array which contains the file_name and file_type in
>>>>> /pgadmin/misc/file_manager/static/js/file_manager.js
>>>>>
>>>>>
>>>>>
>>>>> Also I have done similar changes around line 678.
>>>>>
>>>>> Also in web/pgadmin/tools/sqleditor/__init__.py I have made the
>>>>> folllowing changes
>>>>>
>>>>>
>>>>>
>>>>> Also I have attached my web/pgadmin/tools/sqleditor/ut
>>>>> ils/save_file_query_to_file_utils.py
>>>>>
>>>>
>>>>
>>>
>>
>


Attachments:

  [image/png] image.png (64.0K, 3-image.png)
  download | view image

  [image/png] image.png (29.1K, 4-image.png)
  download | view image

  [image/png] image.png (62.9K, 5-image.png)
  download | view image

  [image/png] image.png (62.4K, 6-image.png)
  download | view image

  [image/png] image.png (64.0K, 7-image.png)
  download | view image

  [image/png] image.png (24.9K, 8-image.png)
  download | view image

  [text/x-patch] WIPPatch.diff (12.4K, 9-WIPPatch.diff)
  download | inline diff:
diff --git a/web/pgadmin/misc/file_manager/__init__.py b/web/pgadmin/misc/file_manager/__init__.py
index 32afb5e3..b34caf69 100644
--- a/web/pgadmin/misc/file_manager/__init__.py
+++ b/web/pgadmin/misc/file_manager/__init__.py
@@ -211,7 +211,6 @@ def utility():
         status=200,
         mimetype="application/javascript")
 
-
 @blueprint.route("/file_manager.js")
 @login_required
 def file_manager_js():
diff --git a/web/pgadmin/misc/file_manager/static/js/file_manager.js b/web/pgadmin/misc/file_manager/static/js/file_manager.js
index 10de1ea8..9f28769a 100644
--- a/web/pgadmin/misc/file_manager/static/js/file_manager.js
+++ b/web/pgadmin/misc/file_manager/static/js/file_manager.js
@@ -294,7 +294,8 @@ define('misc.file_manager', [
             var innerbody;
 
             if (closeEvent.button.text == gettext('Select')) {
-              var newFile = $('.storage_dialog #uploader .input-path').val(),
+              var newFile = [$('.storage_dialog #uploader .input-path').val(),
+                  '*'],
                 file_data = {
                   'path': $('.currentpath').val(),
                 };
@@ -305,7 +306,7 @@ define('misc.file_manager', [
               innerbody.remove();
               removeTransId(trans_id);
               // Ajax call to store the last directory visited once user press select button
-
+              
               set_last_traversed_dir(file_data, trans_id);
             } else if (closeEvent.button.text == gettext('Cancel')) {
               innerbody = $(this.elements.body).find('.storage_content');
@@ -578,8 +579,11 @@ define('misc.file_manager', [
               $('.replace_file, .fm_dimmer').hide();
               $yesBtn.off();
               $noBtn.off();
-              var newFile = $('.storage_dialog #uploader .input-path').val();
-
+              var newFile = [
+                $('.storage_dialog #uploader .input-path').val(),
+                $('.change_file_types select').val(),
+              ];
+              
               pgAdmin.Browser.Events.trigger('pgadmin-storage:finish_btn:create_file', newFile);
               $('.file_manager_create_cancel').trigger('click');
               $('.storage_dialog #uploader .input-path').attr('disabled', false);
@@ -660,18 +664,23 @@ define('misc.file_manager', [
           },
           callback: function(closeEvent) {
             if (closeEvent.button.text == gettext('Create')) {
-              var newFile = $('.storage_dialog #uploader .input-path').val(),
+              var newFile = [ 
+                  $('.storage_dialog #uploader .input-path').val(),
+                  $('.change_file_types select').val(),
+                ],
                 file_data = {
                   'path': $('.currentpath').val(),
                 },
                 innerbody;
 
-              if (!this.check_permission(newFile)) {
+            //  var file_type = $('.change_file_types select').val()  
+
+              if (!this.check_permission(newFile[0])) {
                 closeEvent.cancel = true;
                 return;
               }
 
-              if (!_.isUndefined(newFile) && newFile !== '' && this.is_file_exist()) {
+              if (!_.isUndefined(newFile[0]) && newFile[0] !== '' && this.is_file_exist()) {
                 this.replace_file();
                 closeEvent.cancel = true;
               } else {
diff --git a/web/pgadmin/misc/file_manager/static/js/utility.js b/web/pgadmin/misc/file_manager/static/js/utility.js
index 249b0fe8..fc4b8edf 100755
--- a/web/pgadmin/misc/file_manager/static/js/utility.js
+++ b/web/pgadmin/misc/file_manager/static/js/utility.js
@@ -19,6 +19,14 @@ define([
     Define functions used for various operations
   ---------------------------------------------------------*/
 
+  //get Format type.
+//  var getFormattype = function(name){
+  //  $('.allowed_file_types select').on('change', function() {
+    //      var selected_val = $(this).val(),
+      //    return selected_val
+        //});
+ // }
+
   // Return file extension
   var getFileExtension = function(name) {
     var found = name.lastIndexOf('.') + 1;
diff --git a/web/pgadmin/tools/sqleditor/__init__.py b/web/pgadmin/tools/sqleditor/__init__.py
index fae527c7..d348a3d0 100644
--- a/web/pgadmin/tools/sqleditor/__init__.py
+++ b/web/pgadmin/tools/sqleditor/__init__.py
@@ -41,6 +41,7 @@ from pgadmin.tools.sqleditor.utils.query_tool_preferences import \
 from pgadmin.tools.sqleditor.utils.query_tool_fs_utils import \
     read_file_generator
 from pgadmin.tools.sqleditor.utils.filter_dialog import FilterDialog
+from pgadmin.tools.sqleditor.utils.save_query_to_file_utils import save_query_to_file
 
 MODULE_NAME = 'sqleditor'
 
@@ -1294,7 +1295,6 @@ def load_file():
 
     return Response(read_file_generator(file_path, enc), mimetype='text/plain')
 
-
 @blueprint.route('/save_file/', methods=["PUT", "POST"], endpoint='save_file')
 @login_required
 def save_file():
@@ -1305,52 +1305,13 @@ def save_file():
     if request.data:
         file_data = json.loads(request.data, encoding='utf-8')
 
-    # retrieve storage directory path
-    storage_manager_path = get_storage_directory()
-
-    # generate full path of file
-    file_path = unquote(file_data['file_name'])
-    if hasattr(str, 'decode'):
-        file_path = unquote(
-            file_data['file_name']
-        ).encode('utf-8').decode('utf-8')
-
-    try:
-        Filemanager.check_access_permission(storage_manager_path, file_path)
-    except Exception as e:
-        return internal_server_error(errormsg=str(e))
-
-    if storage_manager_path is not None:
-        file_path = os.path.join(
-            storage_manager_path,
-            file_path.lstrip('/').lstrip('\\')
-        )
-
-    if hasattr(str, 'decode'):
-        file_content = file_data['file_content']
-    else:
-        file_content = file_data['file_content'].encode()
-
-    # write to file
-    try:
-        with open(file_path, 'wb+') as output_file:
-            if hasattr(str, 'decode'):
-                output_file.write(file_content.encode('utf-8'))
-            else:
-                output_file.write(file_content)
-    except IOError as e:
-        if e.strerror == 'Permission denied':
-            err_msg = "Error: {0}".format(e.strerror)
-        else:
-            err_msg = "Error: {0}".format(e.strerror)
-        return internal_server_error(errormsg=err_msg)
-    except Exception as e:
-        err_msg = "Error: {0}".format(e.strerror)
-        return internal_server_error(errormsg=err_msg)
+    filepath1=save_query_to_file(file_data);
 
     return make_json_response(
         data={
-            'status': True,
+            'result': filepath1,
+            'status': True
+            
         }
     )
 
diff --git a/web/pgadmin/tools/sqleditor/static/js/sqleditor.js b/web/pgadmin/tools/sqleditor/static/js/sqleditor.js
index f8cb05af..3ca436ce 100644
--- a/web/pgadmin/tools/sqleditor/static/js/sqleditor.js
+++ b/web/pgadmin/tools/sqleditor/static/js/sqleditor.js
@@ -1947,6 +1947,7 @@ define('tools.querytool', [
 
         self.gridView.editor_title = _.unescape(editor_title);
         self.gridView.current_file = undefined;
+        self.gridView.current_file_type = undefined; 
 
         // Render the header
         self.gridView.render();
@@ -2588,8 +2589,10 @@ define('tools.querytool', [
 
         // Open save file dialog if query tool
         if (self.is_query_tool) {
-          var current_file = self.gridView.current_file;
-          if (!_.isUndefined(current_file) && !save_as) {
+       
+          var current_file = [ self.gridView.current_file, self.gridView.current_file_type];
+          alertify.success(self.gridView.current_file);
+          if (!_.isUndefined(current_file[0]) && !save_as) {
             self._save_file_handler(current_file);
           } else {
             // provide custom option to save file dialog
@@ -2868,7 +2871,8 @@ define('tools.querytool', [
         var self = this,
           _e = e,
           data = {
-            'file_name': decodeURI(e),
+            'file_name': decodeURI(e[0]),
+            'file_type': e[1],
           };
 
         self.trigger(
@@ -2887,7 +2891,8 @@ define('tools.querytool', [
           data: JSON.stringify(data),
           success: function(res) {
             self.gridView.query_tool_obj.setValue(res);
-            self.gridView.current_file = e;
+            self.gridView.current_file = e[0];
+            self.gridView.current_file_type= e[1];
             self.setTitle(self.gridView.current_file.split('\\').pop().split('/').pop(), true);
             self.trigger('pgadmin-sqleditor:loading-icon:hide');
             // hide cursor
@@ -2919,8 +2924,9 @@ define('tools.querytool', [
         var self = this,
           _e = e,
           data = {
-            'file_name': decodeURI(e),
+            'file_name': decodeURI(e[0]),
             'file_content': self.gridView.query_tool_obj.getValue(),
+            'file_type': e[1],
           };
         self.trigger(
           'pgadmin-sqleditor:loading-icon:show',
@@ -2935,8 +2941,10 @@ define('tools.querytool', [
           data: JSON.stringify(data),
           success: function(res) {
             if (res.data.status) {
+             // alertify.success(res.data.result);
               alertify.success(gettext('File saved successfully.'));
-              self.gridView.current_file = e;
+              self.gridView.current_file = res.data.result;
+              self.gridView.current_file_type = e[1];
               self.setTitle(self.gridView.current_file.replace(/^.*[\\\/]/g, ''), true);
               // disable save button on file save
               $('#btn-save').prop('disabled', true);
@@ -2971,6 +2979,7 @@ define('tools.querytool', [
           self.is_query_changed = true;
 
           if (self.gridView.current_file) {
+            alertify.success(self.gridView.current_file);
             var title = self.gridView.current_file.replace(/^.*[\\\/]/g, '') + ' *';
             self.setTitle(title, true);
           } else {
diff --git a/web/pgadmin/tools/sqleditor/utils/save_query_to_file_utils.py b/web/pgadmin/tools/sqleditor/utils/save_query_to_file_utils.py
new file mode 100644
index 00000000..a67c3e83
--- /dev/null
+++ b/web/pgadmin/tools/sqleditor/utils/save_query_to_file_utils.py
@@ -0,0 +1,71 @@
+import os
+from pgadmin.misc.file_manager import Filemanager
+from pgadmin.utils import get_storage_directory
+from pgadmin.utils.ajax import make_json_response, bad_request, \
+    success_return, internal_server_error, unauthorized
+
+try:
+    from urllib import unquote
+except ImportError:
+    from urllib.parse import unquote
+
+
+def save_query_to_file(file_data):
+    # retrieve storage directory path
+    storage_manager_path = get_storage_directory()
+
+    # generate full path of file
+    file_path = unquote(file_data['file_name'])
+
+    if hasattr(str, 'decode'):
+        file_path = unquote(
+            file_data['file_name']
+        ).encode('utf-8').decode('utf-8')
+        
+        file_type = file_data['file_type']
+
+    
+    #file_type=file_data['file_type']
+    if file_type == 'sql':
+        if not file_path.endswith('.sql'):
+            file_path = file_path + ".sql"        
+            
+    file_path = file_path.encode('utf-8')
+
+    try:
+        Filemanager.check_access_permission(storage_manager_path, file_path)
+    except Exception as e:
+        return internal_server_error(errormsg=str(e))
+
+    # lstrip() returns a copy of the string
+    # in which all chars have been stripped
+    # from the beginning of the string (default whitespace characters).
+    if storage_manager_path is not None:
+        file_path = os.path.join(
+            storage_manager_path,
+            file_path.lstrip('/').lstrip('\\')
+        )
+
+    if hasattr(str, 'decode'):
+        file_content = file_data['file_content']
+    else:
+        file_content = file_data['file_content'].encode()
+
+    # write to file
+    try:
+        with open(file_path, 'wb+') as output_file:
+            if hasattr(str, 'decode'):
+                output_file.write(file_content.encode('utf-8'))
+                return file_path
+            else:
+                output_file.write(file_content)
+                return file_path
+    except IOError as e:
+        if e.strerror == 'Permission denied':
+            err_msg = "Error: {0}".format(e.strerror)
+        else:
+            err_msg = "Error: {0}".format(e.strerror)
+        return internal_server_error(errormsg=err_msg)
+    except Exception as e:
+        err_msg = "Error: {0}".format(e.strerror)
+        return internal_server_error(errormsg=err_msg)


^ permalink  raw  reply  [nested|flat] 20+ messages in thread

* Re: [pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature
@ 2018-04-16 14:03  Joao De Almeida Pereira <[email protected]>
  parent: Rahul Soshte <[email protected]>
  0 siblings, 1 reply; 20+ messages in thread

From: Joao De Almeida Pereira @ 2018-04-16 14:03 UTC (permalink / raw)
  To: Rahul Soshte <[email protected]>; +Cc: Khushboo Vashi <[email protected]>; Murtuza Zabuawala <[email protected]>; pgadmin-hackers

Hello Rahul,
I didn't try to execute the code that you sent on the WIP.

Nevertheless you are returning internal_server_error in some cases from the
function save_query_to_file. You need to do one of 2 things
​
1) Let the exception flow to the controller and catch it there
2) In the controller check if the return is a response

Personally I would go with 1. Eventually I would catch the exception in the
function and throw a SaveFileException (new class). Going with 1 you can
test all the functionality without having to standup a Flask application
and doing an HTTP request.

Thanks
Joao

On Mon, Apr 16, 2018 at 8:20 AM Rahul Soshte <[email protected]>
wrote:

> Hi,
>
> I have attached the WIP Patch.
>
> Regards,
> Rahul Soshte
>
> On Mon, Apr 16, 2018 at 4:13 PM, Khushboo Vashi <
> [email protected]> wrote:
>
>> Hi Rahul,
>>
>> Instead of partial code, please send WIP patch, so I can look into this
>> and help you.
>>
>> Thanks,
>> Khushboo
>>
>>
>> On Sat, Apr 14, 2018 at 4:51 PM, Rahul Soshte <[email protected]>
>> wrote:
>>
>>> // read data from codemirror and write to file
>>>       _save_file_handler: function(e) {
>>>         var self = this,
>>>           _e = e,
>>>           data = {
>>>             'file_name': decodeURI(e[0]),
>>>             'file_content': self.gridView.query_tool_obj.getValue(),
>>>             'file_type': e[1],
>>>           };
>>>         self.trigger(
>>>           'pgadmin-sqleditor:loading-icon:show',
>>>           gettext('Saving the queries in the file...')
>>>         );
>>>
>>>         // Make ajax call to save the data to file
>>>         $.ajax({
>>>           url: url_for('sqleditor.save_file'),
>>>           method: 'POST',
>>>           contentType: 'application/json',
>>>           data: JSON.stringify(data),
>>>           success: function(res) {
>>>             if (res.data.status) {
>>>               alertify.success(res.data.result);
>>>               alertify.success(gettext('File saved successfully.'));
>>>               self.gridView.current_file = res.data.result;
>>>               self.gridView.current_file_type = e[1];
>>>               self.setTitle(self.gridView.current_file.replace(/^.*[\\\/]/g,
>>> ''), true);
>>>               // disable save button on file save
>>>               $('#btn-save').prop('disabled', true);
>>>
>>> On Sat, Apr 14, 2018 at 4:50 PM, Rahul Soshte <[email protected]>
>>> wrote:
>>>
>>>>
>>>>
>>>>
>>>> On Sat, Apr 14, 2018 at 4:49 PM, Rahul Soshte <[email protected]
>>>> > wrote:
>>>>
>>>>> Also attaching my web/pgadmin/tools/sqleditor/static/sqleditor.js
>>>>> my  _save_file_handler code
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Sat, Apr 14, 2018 at 4:46 PM, Rahul Soshte <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I have been partially able to solve the problem as you can see in the
>>>>>> image. When I select sql in format combobox then only the .sql extension is
>>>>>> added.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>  But another issue has arisen. Once the file is saved and now When I
>>>>>> change the text in the CodeMirror , the save button is enabled and then
>>>>>> when I click on it , a error message pops.The problem is whenever I try to
>>>>>> save a file for the first time the code works ,but the 2nd time
>>>>>> I try to save it,the code faulters.
>>>>>>
>>>>>> Error message is as follows:
>>>>>>
>>>>>> Traceback (most recent call last):
>>>>>>   File
>>>>>> "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py", line
>>>>>> 1997, in __call__
>>>>>>     return self.wsgi_app(environ, start_response)
>>>>>>   File
>>>>>> "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py", line
>>>>>> 1985, in wsgi_app
>>>>>>     response = self.handle_exception(e)
>>>>>>   File
>>>>>> "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py", line
>>>>>> 1540, in handle_exception
>>>>>>     reraise(exc_type, exc_value, tb)
>>>>>>   File
>>>>>> "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py", line
>>>>>> 1982, in wsgi_app
>>>>>>     response = self.full_dispach_request()
>>>>>>   File
>>>>>> "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py", line
>>>>>> 1614, in full_dispatch_request
>>>>>>     rv = self.handle_user_exception(e)
>>>>>>   File
>>>>>> "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py", line
>>>>>> 1517, in handle_user_exception
>>>>>>     reraise(exc_type, exc_value, tb)
>>>>>>   File
>>>>>> "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py", line
>>>>>> 1612, in full_dispatch_request
>>>>>>     rv = self.dispatch_request()
>>>>>>   File
>>>>>> "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py", line
>>>>>> 1598, in dispatch_request
>>>>>>     return self.view_functions[rule.endpoint](**req.view_args)
>>>>>>   File
>>>>>> "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask_login.py", line
>>>>>> 792, in decorated_view
>>>>>>     return func(*args, **kwargs)
>>>>>>   File
>>>>>> "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqleditor/__init__.py",
>>>>>> line 1314, in save_file
>>>>>>     'file_path': file_path
>>>>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/utils/ajax.py",
>>>>>> line 61, in make_json_response
>>>>>>     separators=(',', ':')),
>>>>>>   File
>>>>>> "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/__init__.py",
>>>>>> line 399, in dumps
>>>>>>     **kw).encode(obj)
>>>>>>   File
>>>>>> "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
>>>>>> line 291, in encode
>>>>>>     chunks = self.iterencode(o, _one_shot=True)
>>>>>>   File
>>>>>> "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
>>>>>> line 373, in iterencode
>>>>>>     return _iterencode(o, 0)
>>>>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/utils/ajax.py",
>>>>>> line 30, in default
>>>>>>     return json.JSONEncoder.default(self, obj)
>>>>>>   File
>>>>>> "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
>>>>>> line 268, in default
>>>>>>     o.__class__.__name__)
>>>>>> TypeError: Object of type Response is not JSON serializable
>>>>>>
>>>>>> I pass an array which contains the file_name and file_type in
>>>>>> /pgadmin/misc/file_manager/static/js/file_manager.js
>>>>>>
>>>>>>
>>>>>>
>>>>>> Also I have done similar changes around line 678.
>>>>>>
>>>>>> Also in web/pgadmin/tools/sqleditor/__init__.py I have made the
>>>>>> folllowing changes
>>>>>>
>>>>>>
>>>>>>
>>>>>> Also I have attached my
>>>>>> web/pgadmin/tools/sqleditor/utils/save_file_query_to_file_utils.py
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>
>


Attachments:

  [image/png] image.png (64.0K, 3-image.png)
  download | view image

  [image/png] image.png (29.1K, 4-image.png)
  download | view image

  [image/png] image.png (62.9K, 5-image.png)
  download | view image

  [image/png] image.png (62.4K, 6-image.png)
  download | view image

  [image/png] image.png (64.0K, 7-image.png)
  download | view image

  [image/png] image.png (24.9K, 8-image.png)
  download | view image

^ permalink  raw  reply  [nested|flat] 20+ messages in thread

* Re: [pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature
@ 2018-04-16 14:22  Khushboo Vashi <[email protected]>
  parent: Joao De Almeida Pereira <[email protected]>
  0 siblings, 0 replies; 20+ messages in thread

From: Khushboo Vashi @ 2018-04-16 14:22 UTC (permalink / raw)
  To: Joao De Almeida Pereira <[email protected]>; +Cc: Rahul Soshte <[email protected]>; Murtuza Zabuawala <[email protected]>; pgadmin-hackers

Hi Rahul,

I have tried to execute your code on PY2, no error but the .sql extension
has not appended.
On PY3, the code is not working, giving an error.

One another thing I have noticed that you are using the make_json_response
function in a wrong way, please check the definition to get the better idea.

Thanks,
Khushboo

On Mon, Apr 16, 2018 at 7:33 PM, Joao De Almeida Pereira <
[email protected]> wrote:

> Hello Rahul,
> I didn't try to execute the code that you sent on the WIP.
>
> Nevertheless you are returning internal_server_error in some cases from
> the function save_query_to_file. You need to do one of 2 things
> ​
> 1) Let the exception flow to the controller and catch it there
> 2) In the controller check if the return is a response
>
> Personally I would go with 1. Eventually I would catch the exception in
> the function and throw a SaveFileException (new class). Going with 1 you
> can test all the functionality without having to standup a Flask
> application and doing an HTTP request.
>
> Thanks
> Joao
>
> On Mon, Apr 16, 2018 at 8:20 AM Rahul Soshte <[email protected]>
> wrote:
>
>> Hi,
>>
>> I have attached the WIP Patch.
>>
>> Regards,
>> Rahul Soshte
>>
>> On Mon, Apr 16, 2018 at 4:13 PM, Khushboo Vashi <
>> [email protected]> wrote:
>>
>>> Hi Rahul,
>>>
>>> Instead of partial code, please send WIP patch, so I can look into this
>>> and help you.
>>>
>>> Thanks,
>>> Khushboo
>>>
>>>
>>> On Sat, Apr 14, 2018 at 4:51 PM, Rahul Soshte <[email protected]>
>>> wrote:
>>>
>>>> // read data from codemirror and write to file
>>>>       _save_file_handler: function(e) {
>>>>         var self = this,
>>>>           _e = e,
>>>>           data = {
>>>>             'file_name': decodeURI(e[0]),
>>>>             'file_content': self.gridView.query_tool_obj.getValue(),
>>>>             'file_type': e[1],
>>>>           };
>>>>         self.trigger(
>>>>           'pgadmin-sqleditor:loading-icon:show',
>>>>           gettext('Saving the queries in the file...')
>>>>         );
>>>>
>>>>         // Make ajax call to save the data to file
>>>>         $.ajax({
>>>>           url: url_for('sqleditor.save_file'),
>>>>           method: 'POST',
>>>>           contentType: 'application/json',
>>>>           data: JSON.stringify(data),
>>>>           success: function(res) {
>>>>             if (res.data.status) {
>>>>               alertify.success(res.data.result);
>>>>               alertify.success(gettext('File saved successfully.'));
>>>>               self.gridView.current_file = res.data.result;
>>>>               self.gridView.current_file_type = e[1];
>>>>               self.setTitle(self.gridView.cu
>>>> rrent_file.replace(/^.*[\\\/]/g, ''), true);
>>>>               // disable save button on file save
>>>>               $('#btn-save').prop('disabled', true);
>>>>
>>>> On Sat, Apr 14, 2018 at 4:50 PM, Rahul Soshte <[email protected]
>>>> > wrote:
>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Sat, Apr 14, 2018 at 4:49 PM, Rahul Soshte <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Also attaching my web/pgadmin/tools/sqleditor/static/sqleditor.js
>>>>>> my  _save_file_handler code
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Sat, Apr 14, 2018 at 4:46 PM, Rahul Soshte <
>>>>>> [email protected]> wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I have been partially able to solve the problem as you can see in
>>>>>>> the image. When I select sql in format combobox then only the .sql
>>>>>>> extension is added.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>  But another issue has arisen. Once the file is saved and now When I
>>>>>>> change the text in the CodeMirror , the save button is enabled and then
>>>>>>> when I click on it , a error message pops.The problem is whenever I try to
>>>>>>> save a file for the first time the code works ,but the 2nd time
>>>>>>> I try to save it,the code faulters.
>>>>>>>
>>>>>>> Error message is as follows:
>>>>>>>
>>>>>>> Traceback (most recent call last):
>>>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>>>>> line 1997, in __call__
>>>>>>>     return self.wsgi_app(environ, start_response)
>>>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>>>>> line 1985, in wsgi_app
>>>>>>>     response = self.handle_exception(e)
>>>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>>>>> line 1540, in handle_exception
>>>>>>>     reraise(exc_type, exc_value, tb)
>>>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>>>>> line 1982, in wsgi_app
>>>>>>>     response = self.full_dispach_request()
>>>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>>>>> line 1614, in full_dispatch_request
>>>>>>>     rv = self.handle_user_exception(e)
>>>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>>>>> line 1517, in handle_user_exception
>>>>>>>     reraise(exc_type, exc_value, tb)
>>>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>>>>> line 1612, in full_dispatch_request
>>>>>>>     rv = self.dispatch_request()
>>>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask/app.py",
>>>>>>> line 1598, in dispatch_request
>>>>>>>     return self.view_functions[rule.endpoint](**req.view_args)
>>>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/flask_login.py",
>>>>>>> line 792, in decorated_view
>>>>>>>     return func(*args, **kwargs)
>>>>>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/tools/sqleditor/__init__.py",
>>>>>>> line 1314, in save_file
>>>>>>>     'file_path': file_path
>>>>>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/utils/ajax.py",
>>>>>>> line 61, in make_json_response
>>>>>>>     separators=(',', ':')),
>>>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/__init__.py",
>>>>>>> line 399, in dumps
>>>>>>>     **kw).encode(obj)
>>>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
>>>>>>> line 291, in encode
>>>>>>>     chunks = self.iterencode(o, _one_shot=True)
>>>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
>>>>>>> line 373, in iterencode
>>>>>>>     return _iterencode(o, 0)
>>>>>>>   File "/var/www/flask/pgadmin4/pgadmin4/web/pgadmin/utils/ajax.py",
>>>>>>> line 30, in default
>>>>>>>     return json.JSONEncoder.default(self, obj)
>>>>>>>   File "/var/www/flask/pgadmin4/lib/python2.7/site-packages/simplejson/encoder.py",
>>>>>>> line 268, in default
>>>>>>>     o.__class__.__name__)
>>>>>>> TypeError: Object of type Response is not JSON serializable
>>>>>>>
>>>>>>> I pass an array which contains the file_name and file_type in
>>>>>>> /pgadmin/misc/file_manager/static/js/file_manager.js
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Also I have done similar changes around line 678.
>>>>>>>
>>>>>>> Also in web/pgadmin/tools/sqleditor/__init__.py I have made the
>>>>>>> folllowing changes
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Also I have attached my web/pgadmin/tools/sqleditor/
>>>>>>> utils/save_file_query_to_file_utils.py
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>


Attachments:

  [image/png] image.png (62.9K, 3-image.png)
  download | view image

  [image/png] image.png (64.0K, 4-image.png)
  download | view image

  [image/png] image.png (64.0K, 5-image.png)
  download | view image

  [image/png] image.png (62.4K, 6-image.png)
  download | view image

  [image/png] image.png (29.1K, 7-image.png)
  download | view image

  [image/png] image.png (24.9K, 8-image.png)
  download | view image

^ permalink  raw  reply  [nested|flat] 20+ messages in thread


end of thread, other threads:[~2018-04-16 14:22 UTC | newest]

Thread overview: 20+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2018-03-29 16:53 [pgAdmin4][Patch][Feature #1998] Appends .sql if extension not given when using 'save' or 'save as' feature Rahul Soshte <[email protected]>
2018-03-29 18:15 ` Joao De Almeida Pereira <[email protected]>
2018-03-30 10:40   ` Murtuza Zabuawala <[email protected]>
2018-03-30 13:06     ` Rahul Soshte <[email protected]>
2018-03-30 13:36       ` Murtuza Zabuawala <[email protected]>
2018-03-30 13:37         ` Murtuza Zabuawala <[email protected]>
2018-03-30 15:00           ` Rahul Soshte <[email protected]>
2018-03-30 16:29             ` Murtuza Zabuawala <[email protected]>
2018-03-30 18:06               ` Rahul Soshte <[email protected]>
2018-03-31 06:35                 ` Murtuza Zabuawala <[email protected]>
2018-04-10 22:49                   ` Rahul Soshte <[email protected]>
2018-04-11 05:45                     ` Murtuza Zabuawala <[email protected]>
2018-04-14 11:16                       ` Rahul Soshte <[email protected]>
2018-04-14 11:19                         ` Rahul Soshte <[email protected]>
2018-04-14 11:20                           ` Rahul Soshte <[email protected]>
2018-04-14 11:21                             ` Rahul Soshte <[email protected]>
2018-04-16 10:43                               ` Khushboo Vashi <[email protected]>
2018-04-16 12:20                                 ` Rahul Soshte <[email protected]>
2018-04-16 14:03                                   ` Joao De Almeida Pereira <[email protected]>
2018-04-16 14:22                                     ` Khushboo Vashi <[email protected]>

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox