From e93480090556cb3a51c2a86320955131d696e7ec Mon Sep 17 00:00:00 2001
From: Torrey Leonard <torreyleonard@voxela.com>
Date: Fri, 14 Dec 2018 13:37:50 -0500
Subject: [PATCH] Added Bollinger Bands to AlphaVantage API. Updated to support
 Robinhood's new authentication API. Added support for Robinhood's multifactor
 authentication. Made it optional to provide a password in the user
 constructor when creating a new Robinhood user.

---
 .gitignore                                   |    3 +-
 LICENSE.md                                   |    0
 README.md                                    |   10 +
 docs/ALGORITHM.md                            |    0
 docs/DATA.md                                 |   19 +
 docs/GLOBALS.md                              |    0
 docs/ROBINHOOD.md                            |  173 ++-
 examples/highest-open-interest.js            |    0
 index.js                                     |    0
 objects/algorithm/Backtest.js                |    0
 objects/algorithm/PaperTrader.js             |    0
 objects/algorithm/Scheduler.js               |    0
 objects/broker/robinhood/Fundamentals.js     |    0
 objects/broker/robinhood/Instrument.js       |    2 +-
 objects/broker/robinhood/Market.js           |    0
 objects/broker/robinhood/OptionInstrument.js |    4 +-
 objects/broker/robinhood/OptionOrder.js      |    4 +-
 objects/broker/robinhood/Order.js            |    8 +-
 objects/broker/robinhood/Portfolio.js        |    0
 objects/broker/robinhood/Robinhood.js        |    2 +-
 objects/broker/robinhood/User.js             |  101 +-
 objects/data/AlphaVantage.js                 |   29 +
 objects/data/IEX.js                          |    0
 objects/data/Nasdaq.js                       |    0
 objects/data/News.js                         |    0
 objects/data/Query.js                        |    0
 objects/data/Stream.js                       |    0
 objects/data/Yahoo.js                        |    0
 objects/globals/LibraryError.js              |    0
 objects/globals/OptionsChain.js              |    0
 objects/globals/Quote.js                     |    0
 package-lock.json                            | 1328 +++++++-----------
 package.json                                 |    6 +-
 test.js                                      |    0
 34 files changed, 797 insertions(+), 892 deletions(-)
 mode change 100644 => 100755 .gitignore
 mode change 100644 => 100755 LICENSE.md
 mode change 100644 => 100755 README.md
 mode change 100644 => 100755 docs/ALGORITHM.md
 mode change 100644 => 100755 docs/DATA.md
 mode change 100644 => 100755 docs/GLOBALS.md
 mode change 100644 => 100755 docs/ROBINHOOD.md
 mode change 100644 => 100755 examples/highest-open-interest.js
 mode change 100644 => 100755 index.js
 mode change 100644 => 100755 objects/algorithm/Backtest.js
 mode change 100644 => 100755 objects/algorithm/PaperTrader.js
 mode change 100644 => 100755 objects/algorithm/Scheduler.js
 mode change 100644 => 100755 objects/broker/robinhood/Fundamentals.js
 mode change 100644 => 100755 objects/broker/robinhood/Instrument.js
 mode change 100644 => 100755 objects/broker/robinhood/Market.js
 mode change 100644 => 100755 objects/broker/robinhood/OptionInstrument.js
 mode change 100644 => 100755 objects/broker/robinhood/OptionOrder.js
 mode change 100644 => 100755 objects/broker/robinhood/Order.js
 mode change 100644 => 100755 objects/broker/robinhood/Portfolio.js
 mode change 100644 => 100755 objects/broker/robinhood/Robinhood.js
 mode change 100644 => 100755 objects/broker/robinhood/User.js
 mode change 100644 => 100755 objects/data/AlphaVantage.js
 mode change 100644 => 100755 objects/data/IEX.js
 mode change 100644 => 100755 objects/data/Nasdaq.js
 mode change 100644 => 100755 objects/data/News.js
 mode change 100644 => 100755 objects/data/Query.js
 mode change 100644 => 100755 objects/data/Stream.js
 mode change 100644 => 100755 objects/data/Yahoo.js
 mode change 100644 => 100755 objects/globals/LibraryError.js
 mode change 100644 => 100755 objects/globals/OptionsChain.js
 mode change 100644 => 100755 objects/globals/Quote.js
 mode change 100644 => 100755 package-lock.json
 mode change 100644 => 100755 package.json
 mode change 100644 => 100755 test.js

diff --git a/.gitignore b/.gitignore
old mode 100644
new mode 100755
index c52e846..ed8fd82
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
 algotrader.iml
 /node_modules/
 /.idea/
-/ignore/
\ No newline at end of file
+/ignore/
+.DS_Store
\ No newline at end of file
diff --git a/LICENSE.md b/LICENSE.md
old mode 100644
new mode 100755
diff --git a/README.md b/README.md
old mode 100644
new mode 100755
index c665446..51233d3
--- a/README.md
+++ b/README.md
@@ -105,6 +105,16 @@ myUser.authenticate()
 ```
 Personally, I either store user data as an array in a .json file, then require it into the class, (insecure) or ask for the user's credentials in the console. You should handle this sensitive data in a way that you're comfortable with.
 
+**Note:** providing a password in the User constructor is optional. If it is not provided, you will be prompted via CLI.
+
+##### MFA
+
+Algotrader now supports multifactor authentication. So, if you have this enabled on your account (which is a good idea by the way), you'll be prompted to enter the six-digit code after login. If you run a trading script with this library automatically and have MFA enabled, it may be worth your while to utilize a telecom API (possible through Twilio?) to have the code programmatically entered into the CLI.
+
+The MFA prompt will appear like so:
+
+![Algotrader MFA Prompt](https://i.gyazo.com/11420983d69bf02a59026947513408ac.png)
+
 #### Get a user's portfolio
 There are a good amount of query functions that you can run on the user's portfolio. Using your [```User```](https://github.com/Ladinn/algotrader/blob/master/docs/ROBINHOOD.md#User) instance, you can grab the portfolio using ``` User.getPortfolio()``` which returns a new [```Portfolio```](https://github.com/Ladinn/algotrader/blob/master/docs/ROBINHOOD.md#Portfolio) object.
 ```js
diff --git a/docs/ALGORITHM.md b/docs/ALGORITHM.md
old mode 100644
new mode 100755
diff --git a/docs/DATA.md b/docs/DATA.md
old mode 100644
new mode 100755
index 385a622..c6b0ea3
--- a/docs/DATA.md
+++ b/docs/DATA.md
@@ -53,6 +53,7 @@ Further documentation can be found here: https://www.alphavantage.co/documentati
     * [.stochf(symbol, interval, timePeriod, seriesType, fastKPeriod, fastDPeriod, fastDmaType)](#AlphaVantage+stochf) ⇒ <code>Promise.&lt;Array&gt;</code>
     * [.rsi(symbol, interval, timePeriod, seriesType)](#AlphaVantage+rsi) ⇒ <code>Promise.&lt;Array&gt;</code>
     * [.stochRSI(symbol, interval, timePeriod, seriesType, fastKPeriod, fastDPeriod, fastDmaType)](#AlphaVantage+stochRSI) ⇒ <code>Promise.&lt;Array&gt;</code>
+    * [.bbands(symbol, interval, timePeriod, seriesType, nbdevup, nbdevdn, matype)](#AlphaVantage+bbands) ⇒ <code>Promise.&lt;Array&gt;</code>
 
 <a name="new_AlphaVantage_new"></a>
 
@@ -383,6 +384,24 @@ http://www.fmlabs.com/reference/default.htm?url=StochRSI.htm
 | fastDPeriod | <code>Number</code> \| <code>Null</code> |  |
 | fastDmaType | <code>Number</code> \| <code>Null</code> | Integers 0 - 8 are accepted with the following mappings: 0 = Simple Moving Average (SMA), 1 = Exponential Moving Average (EMA), 2 = Weighted Moving Average (WMA), 3 = Double Exponential Moving Average (DEMA), 4 = Triple Exponential Moving Average (TEMA), 5 = Triangular Moving Average (TRIMA), 6 = T3 Moving Average, 7 = Kaufman Adaptive Moving Average (KAMA), 8 = MESA Adaptive Moving Average (MAMA). |
 
+<a name="AlphaVantage+bbands"></a>
+
+### alphaVantage.bbands(symbol, interval, timePeriod, seriesType, nbdevup, nbdevdn, matype) ⇒ <code>Promise.&lt;Array&gt;</code>
+Returns an array of bollinger bands for the equity specified.
+https://www.investopedia.com/articles/technical/04/030304.asp
+
+**Kind**: instance method of [<code>AlphaVantage</code>](#AlphaVantage)  
+
+| Param | Type | Description |
+| --- | --- | --- |
+| symbol | <code>String</code> |  |
+| interval | <code>String</code> | Time interval between two consecutive data points in the time series. The following values are supported: 1min, 5min, 15min, 30min, 60min, daily, weekly, monthly |
+| timePeriod | <code>Number</code> | Number of data points used to calculate each BBANDS value. Positive integers are accepted (e.g., time_period=60, time_period=200) |
+| seriesType | <code>String</code> | The desired price type in the time series. Four types are supported: close, open, high, low |
+| nbdevup | <code>Number</code> \| <code>Null</code> | The standard deviation multiplier of the upper band. Positive integers are accepted. By default, nbdevup=2. |
+| nbdevdn | <code>Number</code> \| <code>Null</code> | The standard deviation multiplier of the lower band. Positive integers are accepted. By default, nbdevdn=2. |
+| matype | <code>Number</code> \| <code>Null</code> | Moving average type of the time series. By default, matype=0. Integers 0 - 8 are accepted with the following mappings. 0 = Simple Moving Average (SMA), 1 = Exponential Moving Average (EMA), 2 = Weighted Moving Average (WMA), 3 = Double Exponential Moving Average (DEMA), 4 = Triple Exponential Moving Average (TEMA), 5 = Triangular Moving Average (TRIMA), 6 = T3 Moving Average, 7 = Kaufman Adaptive Moving Average (KAMA), 8 = MESA Adaptive Moving Average (MAMA). |
+
 <a name="IEX"></a>
 
 ## IEX
diff --git a/docs/GLOBALS.md b/docs/GLOBALS.md
old mode 100644
new mode 100755
diff --git a/docs/ROBINHOOD.md b/docs/ROBINHOOD.md
old mode 100644
new mode 100755
index 7129299..031bf6c
--- a/docs/ROBINHOOD.md
+++ b/docs/ROBINHOOD.md
@@ -175,13 +175,19 @@ Represents a security traded on Robinhood.
         * [.isStock()](#Instrument+isStock) ⇒ <code>Boolean</code>
         * [.isETP()](#Instrument+isETP) ⇒ <code>Boolean</code>
         * [.isADR()](#Instrument+isADR) ⇒ <code>Boolean</code>
+        * [.equals(otherInstrument)](#Instrument+equals) ⇒ <code>Boolean</code>
     * _static_
         * [.getAll()](#Instrument.getAll) ⇒ <code>Promise.&lt;Array&gt;</code>
         * [.getBySymbol(symbol)](#Instrument.getBySymbol) ⇒ [<code>Promise.&lt;Instrument&gt;</code>](#Instrument)
+        * [.getByID(id)](#Instrument.getByID) ⇒ [<code>Promise.&lt;Instrument&gt;</code>](#Instrument)
         * [.getByURL(instrumentURL)](#Instrument.getByURL) ⇒ [<code>Promise.&lt;Instrument&gt;</code>](#Instrument)
         * [.getTopMoving(direction)](#Instrument.getTopMoving) ⇒ [<code>Promise.&lt;Instrument&gt;</code>](#Instrument)
+        * [.getByIdArray(ids)](#Instrument.getByIdArray) ⇒ <code>Promise.&lt;Array&gt;</code>
+        * [.getCategories()](#Instrument.getCategories) ⇒ <code>Array.&lt;String&gt;</code>
         * [.getByCategory(category)](#Instrument.getByCategory) ⇒ <code>Promise.&lt;Array&gt;</code>
         * [.getMostPopular()](#Instrument.getMostPopular) ⇒ <code>Promise.&lt;Array&gt;</code>
+        * [.getUpcomingEarnings()](#Instrument.getUpcomingEarnings) ⇒ <code>Promise.&lt;Array&gt;</code>
+        * [.getRecommendations(user)](#Instrument.getRecommendations) ⇒ <code>Promise.&lt;Array&gt;</code>
 
 <a name="new_Instrument_new"></a>
 
@@ -326,6 +332,17 @@ Checks if the instrument is an American Depositary Receipt. Typically applies to
 https://www.investopedia.com/terms/a/adr.asp
 
 **Kind**: instance method of [<code>Instrument</code>](#Instrument)  
+<a name="Instrument+equals"></a>
+
+### instrument.equals(otherInstrument) ⇒ <code>Boolean</code>
+Check whether another instance of Instrument equals this instance.
+
+**Kind**: instance method of [<code>Instrument</code>](#Instrument)  
+
+| Param | Type |
+| --- | --- |
+| otherInstrument | [<code>Instrument</code>](#Instrument) | 
+
 <a name="Instrument.getAll"></a>
 
 ### Instrument.getAll() ⇒ <code>Promise.&lt;Array&gt;</code>
@@ -344,6 +361,17 @@ Returns an instrument object for the specified symbol.
 | --- | --- |
 | symbol | <code>String</code> | 
 
+<a name="Instrument.getByID"></a>
+
+### Instrument.getByID(id) ⇒ [<code>Promise.&lt;Instrument&gt;</code>](#Instrument)
+Returns an instrument object for the specified Robinhood instrument ID.
+
+**Kind**: static method of [<code>Instrument</code>](#Instrument)  
+
+| Param | Type |
+| --- | --- |
+| id | <code>String</code> | 
+
 <a name="Instrument.getByURL"></a>
 
 ### Instrument.getByURL(instrumentURL) ⇒ [<code>Promise.&lt;Instrument&gt;</code>](#Instrument)
@@ -366,6 +394,26 @@ Returns an array of Instruments for 10 of the top moving S&P 500 equities.
 | --- | --- | --- |
 | direction | <code>String</code> | Possible options: [up, down] |
 
+<a name="Instrument.getByIdArray"></a>
+
+### Instrument.getByIdArray(ids) ⇒ <code>Promise.&lt;Array&gt;</code>
+Returns an array of instrument objects for the specified array of IDs.
+
+Note: large arrays will take longer to process and are capped at 50 per request, so multiple
+requests will be sent as the function iterates through the array.
+
+**Kind**: static method of [<code>Instrument</code>](#Instrument)  
+
+| Param | Type |
+| --- | --- |
+| ids | <code>Array</code> | 
+
+<a name="Instrument.getCategories"></a>
+
+### Instrument.getCategories() ⇒ <code>Array.&lt;String&gt;</code>
+Returns an array of known categories that can be used with getByCategory(). This list is non-exhaustive.
+
+**Kind**: static method of [<code>Instrument</code>](#Instrument)  
 <a name="Instrument.getByCategory"></a>
 
 ### Instrument.getByCategory(category) ⇒ <code>Promise.&lt;Array&gt;</code>
@@ -375,7 +423,7 @@ Returns an array of Instruments related to the given category.
 
 | Param | Type | Description |
 | --- | --- | --- |
-| category | <code>String</code> | Possible options: [ technology, 100-most-popular, ... ] |
+| category | <code>String</code> | For possible options see getCategories(). |
 
 <a name="Instrument.getMostPopular"></a>
 
@@ -383,6 +431,23 @@ Returns an array of Instruments related to the given category.
 Returns an array of Instruments for the top 100 most popular equities on Robinhood.
 
 **Kind**: static method of [<code>Instrument</code>](#Instrument)  
+<a name="Instrument.getUpcomingEarnings"></a>
+
+### Instrument.getUpcomingEarnings() ⇒ <code>Promise.&lt;Array&gt;</code>
+Returns an array of Instruments that have upcoming earnings.
+
+**Kind**: static method of [<code>Instrument</code>](#Instrument)  
+<a name="Instrument.getRecommendations"></a>
+
+### Instrument.getRecommendations(user) ⇒ <code>Promise.&lt;Array&gt;</code>
+Returns an array of instruments for stocks from Robinhood's recommendations for the given user.
+
+**Kind**: static method of [<code>Instrument</code>](#Instrument)  
+
+| Param | Type |
+| --- | --- |
+| user | [<code>User</code>](#User) | 
+
 <a name="Market"></a>
 
 ## Market
@@ -763,6 +828,7 @@ Represents and executes an order for the given instrument.
     * [new Order(user, object)](#new_Order_new)
     * _instance_
         * [.submit()](#Order+submit) ⇒ <code>Promise.&lt;Object&gt;</code>
+        * [.cancel()](#Order+cancel) ⇒ <code>Promise.&lt;Object&gt;</code>
         * [.getResponse()](#Order+getResponse) ⇒ <code>Object</code> \| <code>Null</code>
     * _static_
         * [.getByOrderID(user, orderID)](#Order.getByOrderID) ⇒ [<code>Promise.&lt;Order&gt;</code>](#Order)
@@ -784,6 +850,12 @@ Creates a new Order object.
 ### order.submit() ⇒ <code>Promise.&lt;Object&gt;</code>
 Submits an order to Robinhood to be executed by the exchange.
 
+**Kind**: instance method of [<code>Order</code>](#Order)  
+<a name="Order+cancel"></a>
+
+### order.cancel() ⇒ <code>Promise.&lt;Object&gt;</code>
+Attempts to cancel an order.
+
 **Kind**: instance method of [<code>Order</code>](#Order)  
 <a name="Order+getResponse"></a>
 
@@ -822,7 +894,10 @@ Represents all of the user's holdings on Robinhood and allows for various querie
 **Kind**: global class  
 
 * [Portfolio](#Portfolio)
-    * [new Portfolio(array)](#new_Portfolio_new)
+    * [new Portfolio(user, array)](#new_Portfolio_new)
+    * [.sellAll()](#Portfolio+sellAll) ⇒ <code>Promise.&lt;(Boolean\|Error)&gt;</code>
+    * [.setQuantity(symbol, targetQuantity)](#Portfolio+setQuantity) ⇒ [<code>Promise.&lt;Order&gt;</code>](#Order)
+    * [.getStockValue()](#Portfolio+getStockValue) ⇒ <code>Promise.&lt;Number&gt;</code>
     * [.getInstrumentArray()](#Portfolio+getInstrumentArray) ⇒ <code>Array</code>
     * [.getSymbols()](#Portfolio+getSymbols) ⇒ <code>Array</code>
     * [.getBuyPrice(symbol)](#Portfolio+getBuyPrice) ⇒ <code>Number</code>
@@ -844,14 +919,39 @@ Represents all of the user's holdings on Robinhood and allows for various querie
 
 <a name="new_Portfolio_new"></a>
 
-### new Portfolio(array)
+### new Portfolio(user, array)
 Creates a new Portfolio object.
 
 
-| Param |
-| --- |
-| array | 
+| Param | Type |
+| --- | --- |
+| user | [<code>User</code>](#User) | 
+| array | <code>Array</code> | 
 
+<a name="Portfolio+sellAll"></a>
+
+### portfolio.sellAll() ⇒ <code>Promise.&lt;(Boolean\|Error)&gt;</code>
+Sells all positions in the user's portfolio at the market price.
+
+**Kind**: instance method of [<code>Portfolio</code>](#Portfolio)  
+<a name="Portfolio+setQuantity"></a>
+
+### portfolio.setQuantity(symbol, targetQuantity) ⇒ [<code>Promise.&lt;Order&gt;</code>](#Order)
+Executes a new order to reduce or increase the user's position in the given symbol by the given amount.
+
+**Kind**: instance method of [<code>Portfolio</code>](#Portfolio)  
+
+| Param | Type |
+| --- | --- |
+| symbol | <code>String</code> | 
+| targetQuantity | <code>Number</code> | 
+
+<a name="Portfolio+getStockValue"></a>
+
+### portfolio.getStockValue() ⇒ <code>Promise.&lt;Number&gt;</code>
+Returns the total market value of all stocks held by the user.
+
+**Kind**: instance method of [<code>Portfolio</code>](#Portfolio)  
 <a name="Portfolio+getInstrumentArray"></a>
 
 ### portfolio.getInstrumentArray() ⇒ <code>Array</code>
@@ -1049,14 +1149,21 @@ Represents the user that is logged in while accessing the Robinhood API.
 
 * [User](#User)
     * [new User(username, password)](#new_User_new)
-    * [.authenticate()](#User+authenticate) ⇒ <code>Promise</code>
+    * [.authenticate()](#User+authenticate) ⇒ <code>Promise.&lt;Boolean&gt;</code>
+    * [.logout()](#User+logout) ⇒ <code>Promise.&lt;Boolean&gt;</code>
     * [.getAccount()](#User+getAccount) ⇒ <code>Promise</code>
+    * [.getBalances()](#User+getBalances) ⇒ <code>Promise.&lt;Object&gt;</code>
+    * [.getBuyingPower()](#User+getBuyingPower) ⇒ <code>Promise</code>
     * [.getUserInfo()](#User+getUserInfo) ⇒ <code>Promise.&lt;Object&gt;</code>
+    * [.getUID()](#User+getUID) ⇒ <code>Promise.&lt;String&gt;</code>
     * [.getTaxInfo()](#User+getTaxInfo) ⇒ <code>Promise.&lt;Object&gt;</code>
     * [.getDisclosureInfo()](#User+getDisclosureInfo) ⇒ <code>Promise.&lt;Object&gt;</code>
     * [.getEmployerInfo()](#User+getEmployerInfo) ⇒ <code>Promise.&lt;Object&gt;</code>
     * [.getInvestmentProfile()](#User+getInvestmentProfile) ⇒ <code>Promise.&lt;Object&gt;</code>
     * [.getRecentDayTrades()](#User+getRecentDayTrades) ⇒ <code>Promise.&lt;Object&gt;</code>
+    * [.getRecentOrders()](#User+getRecentOrders) ⇒ <code>Promise.&lt;Array.&lt;Order&gt;&gt;</code>
+    * [.cancelOpenOrders()](#User+cancelOpenOrders) ⇒ <code>Promise</code>
+    * [.getRecentOptionOrders()](#User+getRecentOptionOrders) ⇒ <code>Promise.&lt;Array&gt;</code>
     * [.getPortfolio()](#User+getPortfolio) ⇒ <code>Promise.&lt;Object&gt;</code>
     * [.getLinkedBanks()](#User+getLinkedBanks) ⇒ <code>Promise.&lt;Object&gt;</code>
     * [.addDeposit(bankID, amount, frequency)](#User+addDeposit) ⇒ <code>Promise.&lt;Object&gt;</code>
@@ -1069,28 +1176,52 @@ Represents the user that is logged in while accessing the Robinhood API.
 Creates a new User object.
 
 
-| Param | Type |
-| --- | --- |
-| username | <code>String</code> | 
-| password | <code>String</code> | 
+| Param | Type | Description |
+| --- | --- | --- |
+| username | <code>String</code> |  |
+| password | <code>String</code> | Optional. If not provided the user will be prompted via CLI. |
 
 <a name="User+authenticate"></a>
 
-### user.authenticate() ⇒ <code>Promise</code>
+### user.authenticate() ⇒ <code>Promise.&lt;Boolean&gt;</code>
 Authenticates a user using the inputted username and password.
 
+**Kind**: instance method of [<code>User</code>](#User)  
+<a name="User+logout"></a>
+
+### user.logout() ⇒ <code>Promise.&lt;Boolean&gt;</code>
+Logout the user by expiring the authentication token.
+
 **Kind**: instance method of [<code>User</code>](#User)  
 <a name="User+getAccount"></a>
 
 ### user.getAccount() ⇒ <code>Promise</code>
 Returns vital information about balances and enabled features.
 
+**Kind**: instance method of [<code>User</code>](#User)  
+<a name="User+getBalances"></a>
+
+### user.getBalances() ⇒ <code>Promise.&lt;Object&gt;</code>
+Returns an object containing details on the user's cash and marginbalance.
+
+**Kind**: instance method of [<code>User</code>](#User)  
+<a name="User+getBuyingPower"></a>
+
+### user.getBuyingPower() ⇒ <code>Promise</code>
+Returns the amount of money available to be spent.
+
 **Kind**: instance method of [<code>User</code>](#User)  
 <a name="User+getUserInfo"></a>
 
 ### user.getUserInfo() ⇒ <code>Promise.&lt;Object&gt;</code>
 Returns information like username, first / last name, creation date, id, and more.
 
+**Kind**: instance method of [<code>User</code>](#User)  
+<a name="User+getUID"></a>
+
+### user.getUID() ⇒ <code>Promise.&lt;String&gt;</code>
+Returns the user's unique ID.
+
 **Kind**: instance method of [<code>User</code>](#User)  
 <a name="User+getTaxInfo"></a>
 
@@ -1121,6 +1252,24 @@ Returns the user's answers to basic questions regarding investment experiences.
 ### user.getRecentDayTrades() ⇒ <code>Promise.&lt;Object&gt;</code>
 Returns arrays of recent option and equity day trades.
 
+**Kind**: instance method of [<code>User</code>](#User)  
+<a name="User+getRecentOrders"></a>
+
+### user.getRecentOrders() ⇒ <code>Promise.&lt;Array.&lt;Order&gt;&gt;</code>
+Returns an array of recent orders.
+
+**Kind**: instance method of [<code>User</code>](#User)  
+<a name="User+cancelOpenOrders"></a>
+
+### user.cancelOpenOrders() ⇒ <code>Promise</code>
+Cancels all open orders.
+
+**Kind**: instance method of [<code>User</code>](#User)  
+<a name="User+getRecentOptionOrders"></a>
+
+### user.getRecentOptionOrders() ⇒ <code>Promise.&lt;Array&gt;</code>
+Returns an array of recent option orders.
+
 **Kind**: instance method of [<code>User</code>](#User)  
 <a name="User+getPortfolio"></a>
 
diff --git a/examples/highest-open-interest.js b/examples/highest-open-interest.js
old mode 100644
new mode 100755
diff --git a/index.js b/index.js
old mode 100644
new mode 100755
diff --git a/objects/algorithm/Backtest.js b/objects/algorithm/Backtest.js
old mode 100644
new mode 100755
diff --git a/objects/algorithm/PaperTrader.js b/objects/algorithm/PaperTrader.js
old mode 100644
new mode 100755
diff --git a/objects/algorithm/Scheduler.js b/objects/algorithm/Scheduler.js
old mode 100644
new mode 100755
diff --git a/objects/broker/robinhood/Fundamentals.js b/objects/broker/robinhood/Fundamentals.js
old mode 100644
new mode 100755
diff --git a/objects/broker/robinhood/Instrument.js b/objects/broker/robinhood/Instrument.js
old mode 100644
new mode 100755
index 5561592..0253d92
--- a/objects/broker/robinhood/Instrument.js
+++ b/objects/broker/robinhood/Instrument.js
@@ -253,7 +253,7 @@ class Instrument extends Robinhood {
 			request({
 				uri: "https://analytics.robinhood.com/instruments/tag/for-you/",
 				headers: {
-					'Authorization': 'Token ' + user.getAuthToken()
+					'Authorization': 'Bearer ' + user.getAuthToken()
 				}
 			}, (error, response, body) => {
 				Robinhood.handleResponse(error, response, body, null, res => {
diff --git a/objects/broker/robinhood/Market.js b/objects/broker/robinhood/Market.js
old mode 100644
new mode 100755
diff --git a/objects/broker/robinhood/OptionInstrument.js b/objects/broker/robinhood/OptionInstrument.js
old mode 100644
new mode 100755
index 3aa550b..76c7797
--- a/objects/broker/robinhood/OptionInstrument.js
+++ b/objects/broker/robinhood/OptionInstrument.js
@@ -47,7 +47,7 @@ class OptionInstrument extends Robinhood {
 			else request({
 				uri: "https://api.robinhood.com/options/instruments/",
 				headers: {
-					'Authorization': 'Token ' + user.getAuthToken()
+					'Authorization': 'Bearer ' + user.getAuthToken()
 				}
 			}, (error, response, body) => {
 				return Robinhood.handleResponse(error, response, body, user.getAuthToken(), res => {
@@ -71,7 +71,7 @@ class OptionInstrument extends Robinhood {
 			request({
 				uri: url,
 				headers: {
-					'Authorization': 'Token ' + user.getAuthToken()
+					'Authorization': 'Bearer ' + user.getAuthToken()
 				}
 			}, (error, response, body) => {
 				return Robinhood.handleResponse(error, response, body, user.getAuthToken(), res => {
diff --git a/objects/broker/robinhood/OptionOrder.js b/objects/broker/robinhood/OptionOrder.js
old mode 100644
new mode 100755
index 338b497..a6762b2
--- a/objects/broker/robinhood/OptionOrder.js
+++ b/objects/broker/robinhood/OptionOrder.js
@@ -84,7 +84,7 @@ class OptionOrder extends Robinhood {
 			request.post({
 				uri: _this.url + "/options/orders/",
 				headers: {
-					'Authorization': 'Token ' + _this.User.getAuthToken()
+					'Authorization': 'Bearer ' + _this.User.getAuthToken()
 				},
 				form: {
 					account: _this.url + "/accounts/" + _this.User.getAccountNumber() + "/",
@@ -109,7 +109,7 @@ class OptionOrder extends Robinhood {
 			request({
 				uri: "https://api.robinhood.com/options/orders/",
 				headers: {
-					'Authorization': 'Token ' + user.getAuthToken()
+					'Authorization': 'Bearer ' + user.getAuthToken()
 				}
 			}, (error, response, body) => {
 				return Robinhood.handleResponse(error, response, body, user.getAuthToken(), res => {
diff --git a/objects/broker/robinhood/Order.js b/objects/broker/robinhood/Order.js
old mode 100644
new mode 100755
index 049189b..83ff7da
--- a/objects/broker/robinhood/Order.js
+++ b/objects/broker/robinhood/Order.js
@@ -81,7 +81,7 @@ class Order extends Robinhood {
 			else request.post({
 				uri: _this.url + "/orders/",
 				headers: {
-					'Authorization': 'Token ' + _this.user.getAuthToken()
+					'Authorization': 'Bearer ' + _this.user.getAuthToken()
 				},
 				form: {
 					account: _this.url + "/accounts/" + _this.user.getAccountNumber() + "/",
@@ -124,7 +124,7 @@ class Order extends Robinhood {
 				request.post({
 					uri: _this.response.urls.cancel,
 					headers: {
-						'Authorization': 'Token ' + _this.user.getAuthToken()
+						'Authorization': 'Bearer ' + _this.user.getAuthToken()
 					}
 				}, (error, response, body) => {
 					return Robinhood.handleResponse(error, response, body, _this.user.getAuthToken(), resolve, reject);
@@ -144,7 +144,7 @@ class Order extends Robinhood {
 			request({
 				uri: "https://api.robinhood.com/orders/" + orderID + "/",
 				headers: {
-					'Authorization': 'Token ' + user.getAuthToken()
+					'Authorization': 'Bearer ' + user.getAuthToken()
 				}
 			}, (error, response, body) => {
 				return Robinhood.handleResponse(error, response, body, user.getAuthToken(), res => {
@@ -164,7 +164,7 @@ class Order extends Robinhood {
 			request({
 				uri: "https://api.robinhood.com/orders/",
 				headers: {
-					'Authorization': 'Token ' + user.getAuthToken()
+					'Authorization': 'Bearer ' + user.getAuthToken()
 				}
 			}, (error, response, body) => {
 				return Robinhood.handleResponse(error, response, body, user.getAuthToken(), res => {
diff --git a/objects/broker/robinhood/Portfolio.js b/objects/broker/robinhood/Portfolio.js
old mode 100644
new mode 100755
diff --git a/objects/broker/robinhood/Robinhood.js b/objects/broker/robinhood/Robinhood.js
old mode 100644
new mode 100755
index 5d2f044..172cf30
--- a/objects/broker/robinhood/Robinhood.js
+++ b/objects/broker/robinhood/Robinhood.js
@@ -37,7 +37,7 @@ class Robinhood {
 						uri: next
 					};
 					if (token !== null) options.headers = {
-						'Authorization': 'Token ' + token
+						'Authorization': 'Bearer ' + token
 					};
 					request(options, (error, response, body) => {
 						if (error) reject(error);
diff --git a/objects/broker/robinhood/User.js b/objects/broker/robinhood/User.js
old mode 100644
new mode 100755
index 8f7f77d..4cbb1de
--- a/objects/broker/robinhood/User.js
+++ b/objects/broker/robinhood/User.js
@@ -9,6 +9,7 @@ const request = require('request');
 const fs = require('fs');
 const async = require('async');
 const path = require('path');
+const prompt = require('prompt');
 
 /**
  * Represents the user that is logged in while accessing the Robinhood API.
@@ -18,7 +19,7 @@ class User extends Robinhood {
 	/**
 	 * Creates a new User object.
 	 * @param {String} username
-	 * @param {String} password
+	 * @param {String} password - Optional. If not provided the user will be prompted via CLI.
 	 */
 	constructor(username, password) {
 		super();
@@ -35,25 +36,75 @@ class User extends Robinhood {
 	authenticate() {
 		const _this = this;
 		return new Promise((resolve, reject) => {
+			if (_this.password == null) {
+				console.log("You didn't include a password in the constructor of your Robinhood user and it is required to authenticate your account.");
+				prompt.get({
+					properties: {
+						password: {
+							required: true,
+							hidden: true
+						}
+					}
+				}, (error, result) => {
+					_this.password = result.password;
+					_preAuth(resolve, reject);
+				})
+			} else _preAuth(resolve, reject);
+		});
+		function _preAuth(resolve, reject) {
 			request.post({
-				uri: _this.url + "/api-token-auth/",
+				uri: _this.url + "/oauth2/token/",
 				form: {
 					username: _this.username,
-					password: _this.password
+					password: _this.password,
+					client_id: 'c82SH0WZOsabOXGP2sxqcj34FxkvfnWRZBKlBjFS',
+					grant_type: 'password',
+					scope: 'internal'
 				}
 			}, (error, response, body) => {
 				if (error) reject(error);
 				else if (response.statusCode !== 200) reject(new LibraryError(body));
 				else {
-					_this.token = JSON.parse(body).token;
-					_this.getAccount().then(account => {
-						_this.account = account.account_number;
-						_this.password = "*".repeat(_this.password.length);
-						resolve(_this);
-					}).catch(error => reject(error));
+					const json = JSON.parse(body);
+					if (json.mfa_required) {
+						console.log("Multifactor authentication detected. Please enter your six-digit code below:");
+						prompt.get({
+							properties: {
+								code: {
+									pattern: /^[0-9]{6}$/,
+									message: "Your Robinhood code will most likely be texted to you and should only contain 6 integers.",
+									required: true
+								}
+							}
+						}, (error, result) => {
+							request.post({
+								uri: _this.url + '/oauth2/token/',
+								form: {
+									username: _this.username,
+									password: _this.password,
+									client_id: 'c82SH0WZOsabOXGP2sxqcj34FxkvfnWRZBKlBjFS',
+									grant_type: 'password',
+									scope: 'internal',
+									mfa_code: result.code
+								}
+							}, (error, response, body) => {
+								if (error) reject(error);
+								else if (response.statusCode !== 200) reject(new LibraryError(body));
+								else _postAuth(JSON.parse(body), resolve, reject);
+							})
+						})
+					} else _postAuth(json, resolve, reject);
 				}
 			})
-		})
+		}
+		function _postAuth(json, resolve, reject) {
+			_this.token = json.access_token;
+			_this.getAccount().then(account => {
+				_this.account = account.account_number;
+				_this.password = "*".repeat(_this.password.length);
+				resolve(_this);
+			}).catch(error => reject(error));
+		}
 	}
 
 	/**
@@ -66,7 +117,7 @@ class User extends Robinhood {
 			request.post({
 				uri: _this.url + "/api-token-logout/",
 				headers: {
-					'Authorization': 'Token ' + _this.token
+					'Authorization': 'Bearer ' + _this.token
 				}
 			}, (error, response, body) => {
 				if (error) reject(error);
@@ -100,7 +151,7 @@ class User extends Robinhood {
 			request({
 				uri: _this.url + "/accounts/",
 				headers: {
-					'Authorization': 'Token ' + _this.token
+					'Authorization': 'Bearer ' + _this.token
 				}
 			}, (error, response, body) => {
 				return Robinhood.handleResponse(error, response, body, _this.token, resolve, reject);
@@ -167,7 +218,7 @@ class User extends Robinhood {
 			request({
 				uri: _this.url + "/user/",
 				headers: {
-					'Authorization': 'Token ' + _this.token
+					'Authorization': 'Bearer ' + _this.token
 				}
 			}, (error, response, body) => {
 				return Robinhood.handleResponse(error, response, body, _this.token, resolve, reject);
@@ -185,7 +236,7 @@ class User extends Robinhood {
 			request({
 				uri: _this.url + "/user/id/",
 				headers: {
-					'Authorization': 'Token ' + _this.token
+					'Authorization': 'Bearer ' + _this.token
 				}
 			}, (error, response, body) => {
 				return Robinhood.handleResponse(error, response, body, _this.token, res => {
@@ -205,7 +256,7 @@ class User extends Robinhood {
 			request({
 				uri: _this.url + "/user/basic_info/",
 				headers: {
-					'Authorization': 'Token ' + _this.token
+					'Authorization': 'Bearer ' + _this.token
 				}
 			}, (error, response, body) => {
 				return Robinhood.handleResponse(error, response, body, _this.token, resolve, reject);
@@ -223,7 +274,7 @@ class User extends Robinhood {
 			request({
 				uri: _this.url + "/user/additional_info/",
 				headers: {
-					'Authorization': 'Token ' + _this.token
+					'Authorization': 'Bearer ' + _this.token
 				}
 			}, (error, response, body) => {
 				return Robinhood.handleResponse(error, response, body, _this.token, resolve, reject);
@@ -241,7 +292,7 @@ class User extends Robinhood {
 			request({
 				uri: _this.url + "/user/employment/",
 				headers: {
-					'Authorization': 'Token ' + _this.token
+					'Authorization': 'Bearer ' + _this.token
 				}
 			}, (error, response, body) => {
 				return Robinhood.handleResponse(error, response, body, _this.token, resolve, reject);
@@ -259,7 +310,7 @@ class User extends Robinhood {
 			request({
 				uri: _this.url + "/user/investment_profile/",
 				headers: {
-					'Authorization': 'Token ' + _this.token
+					'Authorization': 'Bearer ' + _this.token
 				}
 			}, (error, response, body) => {
 				return Robinhood.handleResponse(error, response, body, _this.token, resolve, reject);
@@ -277,7 +328,7 @@ class User extends Robinhood {
 			request({
 				uri: _this.url + "/accounts/" + _this.account + "/recent_day_trades/",
 				headers: {
-					'Authorization': 'Token ' + _this.token
+					'Authorization': 'Bearer ' + _this.token
 				}
 			}, (error, response, body) => {
 				return Robinhood.handleResponse(error, response, body, _this.token, resolve, reject);
@@ -319,7 +370,7 @@ class User extends Robinhood {
 			request({
 				uri: _this.url + "/accounts/" + _this.account + "/positions/",
 				headers: {
-					'Authorization': 'Token ' + _this.token
+					'Authorization': 'Bearer ' + _this.token
 				}
 			}, (error, response, body) => {
 				Robinhood.handleResponse(error, response, body, _this.token, res => {
@@ -349,7 +400,7 @@ class User extends Robinhood {
 	// 		request({
 	// 			uri: _this.url + "/midlands/notifications/stack/",
 	// 			headers: {
-	// 				'Authorization': 'Token ' + _this.token
+	// 				'Authorization': 'Bearer ' + _this.token
 	// 			}
 	// 		}, (error, response, body) => {
 	// 			return Robinhood.handleResponse(error, response, body, _this.token, resolve, reject);
@@ -369,7 +420,7 @@ class User extends Robinhood {
 			request({
 				uri: _this.url + "/ach/relationships/",
 				headers: {
-					'Authorization': 'Token ' + _this.token
+					'Authorization': 'Bearer ' + _this.token
 				}
 			}, (error, response, body) => {
 				return Robinhood.handleResponse(error, response, body, _this.token, resolve, reject);
@@ -396,7 +447,7 @@ class User extends Robinhood {
 				request({
 					uri: _this.url + "/ach/deposit_schedules/",
 					headers: {
-						'Authorization': 'Token ' + _this.token
+						'Authorization': 'Bearer ' + _this.token
 					},
 					qs: {
 						achRelationship: _this.url + "/ach/relationships/" + bankID + "/",
@@ -422,7 +473,7 @@ class User extends Robinhood {
 			request({
 				uri: _this.url + /documents/,
 				headers: {
-					'Authorization': 'Token ' + _this.token
+					'Authorization': 'Bearer ' + _this.token
 				}
 			}, (error, response, body) => {
 				return Robinhood.handleResponse(error, response, body, _this.token, resolve, reject);
@@ -452,7 +503,7 @@ class User extends Robinhood {
 						const req = request({
 							uri: document.download_url,
 							headers: {
-								'Authorization': 'Token ' + _this.token
+								'Authorization': 'Bearer ' + _this.token
 							}
 						}, (error, response, body) => {
 							if (error) reject(error);
diff --git a/objects/data/AlphaVantage.js b/objects/data/AlphaVantage.js
old mode 100644
new mode 100755
index 6bca840..3d087cd
--- a/objects/data/AlphaVantage.js
+++ b/objects/data/AlphaVantage.js
@@ -629,6 +629,35 @@ class AlphaVantage {
 		]);
 	}
 
+	/**
+	 * Returns an array of bollinger bands for the equity specified.
+	 * https://www.investopedia.com/articles/technical/04/030304.asp
+	 * @param {String} symbol
+	 * @param {String} interval - Time interval between two consecutive data points in the time series. The following values are supported: 1min, 5min, 15min, 30min, 60min, daily, weekly, monthly
+	 * @param {Number} timePeriod - Number of data points used to calculate each BBANDS value. Positive integers are accepted (e.g., time_period=60, time_period=200)
+	 * @param {String} seriesType - The desired price type in the time series. Four types are supported: close, open, high, low
+	 * @param {Number|Null} nbdevup - The standard deviation multiplier of the upper band. Positive integers are accepted. By default, nbdevup=2.
+	 * @param {Number|Null} nbdevdn - The standard deviation multiplier of the lower band. Positive integers are accepted. By default, nbdevdn=2.
+	 * @param {Number|Null} matype - Moving average type of the time series. By default, matype=0. Integers 0 - 8 are accepted with the following mappings. 0 = Simple Moving Average (SMA), 1 = Exponential Moving Average (EMA), 2 = Weighted Moving Average (WMA), 3 = Double Exponential Moving Average (DEMA), 4 = Triple Exponential Moving Average (TEMA), 5 = Triangular Moving Average (TRIMA), 6 = T3 Moving Average, 7 = Kaufman Adaptive Moving Average (KAMA), 8 = MESA Adaptive Moving Average (MAMA).
+	 * @returns {Promise<Array>}
+	 */
+	bbands(symbol, interval, timePeriod, seriesType, nbdevup, nbdevdn, matype) {
+		return this._technical("BBANDS", symbol, interval, timePeriod, seriesType, [
+			{
+				key: "nbdevup",
+				val: nbdevup !== null ? nbdevup : 2
+			},
+			{
+				key: "nbdevdn",
+				val: nbdevdn !== null ? nbdevdn : 2
+			},
+			{
+				key: "matype",
+				val: matype !== null ? matype : 0
+			}
+		]);
+	}
+
 }
 
 module.exports = AlphaVantage;
\ No newline at end of file
diff --git a/objects/data/IEX.js b/objects/data/IEX.js
old mode 100644
new mode 100755
diff --git a/objects/data/Nasdaq.js b/objects/data/Nasdaq.js
old mode 100644
new mode 100755
diff --git a/objects/data/News.js b/objects/data/News.js
old mode 100644
new mode 100755
diff --git a/objects/data/Query.js b/objects/data/Query.js
old mode 100644
new mode 100755
diff --git a/objects/data/Stream.js b/objects/data/Stream.js
old mode 100644
new mode 100755
diff --git a/objects/data/Yahoo.js b/objects/data/Yahoo.js
old mode 100644
new mode 100755
diff --git a/objects/globals/LibraryError.js b/objects/globals/LibraryError.js
old mode 100644
new mode 100755
diff --git a/objects/globals/OptionsChain.js b/objects/globals/OptionsChain.js
old mode 100644
new mode 100755
diff --git a/objects/globals/Quote.js b/objects/globals/Quote.js
old mode 100644
new mode 100755
diff --git a/package-lock.json b/package-lock.json
old mode 100644
new mode 100755
index 656c8fc..a99808c
--- a/package-lock.json
+++ b/package-lock.json
@@ -137,31 +137,16 @@
       "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
     },
     "ajv": {
-      "version": "5.5.2",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
-      "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+      "version": "6.6.1",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz",
+      "integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==",
       "requires": {
-        "co": "^4.6.0",
-        "fast-deep-equal": "^1.0.0",
+        "fast-deep-equal": "^2.0.1",
         "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.3.0"
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
       }
     },
-    "align-text": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
-      "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
-      "requires": {
-        "kind-of": "^3.0.2",
-        "longest": "^1.0.1",
-        "repeat-string": "^1.5.2"
-      }
-    },
-    "amdefine": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
-      "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
-    },
     "ansi-align": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
@@ -172,9 +157,9 @@
       }
     },
     "ansi-escape-sequences": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
-      "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.1.tgz",
+      "integrity": "sha512-G3Aona26cXv8nWIwID6MP11WSishqnyOPQjYaVJ7CfY2Xgu5sHOXM39nQg6XtyfF9++oLV6l2uFGojBb4zglGA==",
       "requires": {
         "array-back": "^2.0.0"
       }
@@ -320,9 +305,12 @@
       "dev": true
     },
     "asn1": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
-      "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+      "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+      "requires": {
+        "safer-buffer": "~2.1.0"
+      }
     },
     "assert-plus": {
       "version": "1.0.0",
@@ -469,9 +457,9 @@
       "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
     },
     "aws4": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
-      "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w=="
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+      "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
     },
     "babel-code-frame": {
       "version": "6.26.0",
@@ -972,10 +960,9 @@
       "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg="
     },
     "bcrypt-pbkdf": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
-      "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
-      "optional": true,
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
       "requires": {
         "tweetnacl": "^0.14.3"
       }
@@ -1009,14 +996,6 @@
       "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
       "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
     },
-    "boom": {
-      "version": "4.3.1",
-      "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
-      "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
-      "requires": {
-        "hoek": "4.x.x"
-      }
-    },
     "boxen": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
@@ -1173,16 +1152,6 @@
         "underscore-contrib": "~0.3.0"
       }
     },
-    "center-align": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
-      "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
-      "optional": true,
-      "requires": {
-        "align-text": "^0.1.3",
-        "lazy-cache": "^1.0.3"
-      }
-    },
     "chalk": {
       "version": "2.4.0",
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz",
@@ -1270,35 +1239,11 @@
         "string-width": "^2.0.0"
       }
     },
-    "cliui": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
-      "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
-      "optional": true,
-      "requires": {
-        "center-align": "^0.1.1",
-        "right-align": "^0.1.1",
-        "wordwrap": "0.0.2"
-      },
-      "dependencies": {
-        "wordwrap": {
-          "version": "0.0.2",
-          "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
-          "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
-          "optional": true
-        }
-      }
-    },
     "clone": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
       "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
     },
-    "co": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
-      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
-    },
     "co-with-promise": {
       "version": "4.6.0",
       "resolved": "https://registry.npmjs.org/co-with-promise/-/co-with-promise-4.6.0.tgz",
@@ -1339,10 +1284,15 @@
       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
       "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
     },
+    "colors": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz",
+      "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg=="
+    },
     "combined-stream": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
-      "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
+      "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
       "requires": {
         "delayed-stream": "~1.0.0"
       }
@@ -1382,6 +1332,12 @@
         "typical": "^2.6.1"
       }
     },
+    "commander": {
+      "version": "2.17.1",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+      "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
+      "optional": true
+    },
     "common-path-prefix": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-1.0.0.tgz",
@@ -1540,24 +1496,6 @@
         "which": "^1.2.9"
       }
     },
-    "cryptiles": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
-      "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
-      "requires": {
-        "boom": "5.x.x"
-      },
-      "dependencies": {
-        "boom": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
-          "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
-          "requires": {
-            "hoek": "4.x.x"
-          }
-        }
-      }
-    },
     "crypto-random-string": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
@@ -1589,6 +1527,11 @@
         "array-find-index": "^1.0.1"
       }
     },
+    "cycle": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+      "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI="
+    },
     "dashdash": {
       "version": "1.14.1",
       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@@ -1631,7 +1574,8 @@
     "decamelize": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+      "dev": true
     },
     "declare.js": {
       "version": "0.0.8",
@@ -1645,10 +1589,9 @@
       "dev": true
     },
     "deep-extend": {
-      "version": "0.4.2",
-      "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
-      "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
-      "dev": true
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+      "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
     },
     "defaults": {
       "version": "1.0.3",
@@ -1682,9 +1625,9 @@
       }
     },
     "dmd": {
-      "version": "3.0.12",
-      "resolved": "https://registry.npmjs.org/dmd/-/dmd-3.0.12.tgz",
-      "integrity": "sha512-79w644JdsB2TthYpVl2bDurX7i9Abaegg2E7X46Ajc135aASTMXxrHzJ9mOa5X5nbmnXwlBYiF68K+1baX+BzQ==",
+      "version": "3.0.13",
+      "resolved": "https://registry.npmjs.org/dmd/-/dmd-3.0.13.tgz",
+      "integrity": "sha512-FV/417bH2c/CYpe8BjFEAHoaHaItcJnPlKELi/qyPZdmUom8joyuC78OhhfPUdyKD/WcouTQ2LxQT4M/RoiJ3w==",
       "requires": {
         "array-back": "^2.0.0",
         "cache-point": "^0.4.1",
@@ -1754,12 +1697,12 @@
       "dev": true
     },
     "ecc-jsbn": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
-      "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
-      "optional": true,
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+      "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
       "requires": {
-        "jsbn": "~0.1.0"
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.1.0"
       }
     },
     "empower-core": {
@@ -1906,9 +1849,9 @@
       }
     },
     "extend": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
-      "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
     },
     "extended": {
       "version": "0.0.6",
@@ -1940,6 +1883,11 @@
       "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
       "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
     },
+    "eyes": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+      "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A="
+    },
     "fast-csv": {
       "version": "2.4.1",
       "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-2.4.1.tgz",
@@ -1952,9 +1900,9 @@
       }
     },
     "fast-deep-equal": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
-      "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+      "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
     },
     "fast-diff": {
       "version": "1.1.2",
@@ -1977,12 +1925,27 @@
       }
     },
     "file-set": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/file-set/-/file-set-2.0.0.tgz",
-      "integrity": "sha512-cCWXfw+nrYoIoUVmEF7Xsw91lGWuObtSnTEZ7AmdvZou1A/6Xx237HfxdQyC/ayKRvQSMbNOBwg62OjN5JxbXw==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/file-set/-/file-set-2.0.1.tgz",
+      "integrity": "sha512-XgOUUpgR6FbbfYcniLw0qm1Am7PnNYIAkd+eXxRt42LiYhjaso0WiuQ+VmrNdtwotyM+cLCfZ56AZrySP3QnKA==",
       "requires": {
         "array-back": "^2.0.0",
-        "glob": "^7.1.2"
+        "glob": "^7.1.3"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "7.1.3",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+          "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        }
       }
     },
     "filename-regex": {
@@ -1992,16 +1955,43 @@
       "dev": true
     },
     "fill-range": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
-      "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+      "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
       "dev": true,
       "requires": {
         "is-number": "^2.1.0",
         "isobject": "^2.0.0",
-        "randomatic": "^1.1.3",
+        "randomatic": "^3.0.0",
         "repeat-element": "^1.1.2",
         "repeat-string": "^1.5.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        },
+        "randomatic": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
+          "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
+          "dev": true,
+          "requires": {
+            "is-number": "^4.0.0",
+            "kind-of": "^6.0.0",
+            "math-random": "^1.0.1"
+          },
+          "dependencies": {
+            "is-number": {
+              "version": "4.0.0",
+              "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+              "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+              "dev": true
+            }
+          }
+        }
       }
     },
     "find-cache-dir": {
@@ -2065,12 +2055,12 @@
       "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
     },
     "form-data": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
-      "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+      "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
       "requires": {
         "asynckit": "^0.4.0",
-        "combined-stream": "1.0.6",
+        "combined-stream": "^1.0.6",
         "mime-types": "^2.1.12"
       }
     },
@@ -2085,39 +2075,29 @@
       "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
     },
     "fsevents": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz",
-      "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
+      "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
       "dev": true,
       "optional": true,
       "requires": {
-        "nan": "^2.3.0",
-        "node-pre-gyp": "^0.6.39"
+        "nan": "^2.9.2",
+        "node-pre-gyp": "^0.10.0"
       },
       "dependencies": {
         "abbrev": {
-          "version": "1.1.0",
+          "version": "1.1.1",
           "bundled": true,
           "dev": true,
           "optional": true
         },
-        "ajv": {
-          "version": "4.11.8",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "co": "^4.6.0",
-            "json-stable-stringify": "^1.0.1"
-          }
-        },
         "ansi-regex": {
           "version": "2.1.1",
           "bundled": true,
           "dev": true
         },
         "aproba": {
-          "version": "1.1.1",
+          "version": "1.2.0",
           "bundled": true,
           "dev": true,
           "optional": true
@@ -2132,88 +2112,22 @@
             "readable-stream": "^2.0.6"
           }
         },
-        "asn1": {
-          "version": "0.2.3",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "assert-plus": {
-          "version": "0.2.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "asynckit": {
-          "version": "0.4.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "aws-sign2": {
-          "version": "0.6.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "aws4": {
-          "version": "1.6.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
         "balanced-match": {
-          "version": "0.4.2",
+          "version": "1.0.0",
           "bundled": true,
           "dev": true
         },
-        "bcrypt-pbkdf": {
-          "version": "1.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "tweetnacl": "^0.14.3"
-          }
-        },
-        "block-stream": {
-          "version": "0.0.9",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "inherits": "~2.0.0"
-          }
-        },
-        "boom": {
-          "version": "2.10.1",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "hoek": "2.x.x"
-          }
-        },
         "brace-expansion": {
-          "version": "1.1.7",
+          "version": "1.1.11",
           "bundled": true,
           "dev": true,
           "requires": {
-            "balanced-match": "^0.4.1",
+            "balanced-match": "^1.0.0",
             "concat-map": "0.0.1"
           }
         },
-        "buffer-shims": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true
-        },
-        "caseless": {
-          "version": "0.12.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "co": {
-          "version": "4.6.0",
+        "chownr": {
+          "version": "1.0.1",
           "bundled": true,
           "dev": true,
           "optional": true
@@ -2223,14 +2137,6 @@
           "bundled": true,
           "dev": true
         },
-        "combined-stream": {
-          "version": "1.0.5",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "delayed-stream": "~1.0.0"
-          }
-        },
         "concat-map": {
           "version": "0.0.1",
           "bundled": true,
@@ -2244,35 +2150,11 @@
         "core-util-is": {
           "version": "1.0.2",
           "bundled": true,
-          "dev": true
-        },
-        "cryptiles": {
-          "version": "2.0.5",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "boom": "2.x.x"
-          }
-        },
-        "dashdash": {
-          "version": "1.14.1",
-          "bundled": true,
           "dev": true,
-          "optional": true,
-          "requires": {
-            "assert-plus": "^1.0.0"
-          },
-          "dependencies": {
-            "assert-plus": {
-              "version": "1.0.0",
-              "bundled": true,
-              "dev": true,
-              "optional": true
-            }
-          }
+          "optional": true
         },
         "debug": {
-          "version": "2.6.8",
+          "version": "2.6.9",
           "bundled": true,
           "dev": true,
           "optional": true,
@@ -2281,16 +2163,11 @@
           }
         },
         "deep-extend": {
-          "version": "0.4.2",
+          "version": "0.5.1",
           "bundled": true,
           "dev": true,
           "optional": true
         },
-        "delayed-stream": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true
-        },
         "delegates": {
           "version": "1.0.0",
           "bundled": true,
@@ -2298,74 +2175,25 @@
           "optional": true
         },
         "detect-libc": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "ecc-jsbn": {
-          "version": "0.1.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "jsbn": "~0.1.0"
-          }
-        },
-        "extend": {
-          "version": "3.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "extsprintf": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true
-        },
-        "forever-agent": {
-          "version": "0.6.1",
+          "version": "1.0.3",
           "bundled": true,
           "dev": true,
           "optional": true
         },
-        "form-data": {
-          "version": "2.1.4",
+        "fs-minipass": {
+          "version": "1.2.5",
           "bundled": true,
           "dev": true,
           "optional": true,
           "requires": {
-            "asynckit": "^0.4.0",
-            "combined-stream": "^1.0.5",
-            "mime-types": "^2.1.12"
+            "minipass": "^2.2.1"
           }
         },
         "fs.realpath": {
           "version": "1.0.0",
           "bundled": true,
-          "dev": true
-        },
-        "fstream": {
-          "version": "1.0.11",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.1.2",
-            "inherits": "~2.0.0",
-            "mkdirp": ">=0.5 0",
-            "rimraf": "2"
-          }
-        },
-        "fstream-ignore": {
-          "version": "1.0.5",
-          "bundled": true,
           "dev": true,
-          "optional": true,
-          "requires": {
-            "fstream": "^1.0.0",
-            "inherits": "2",
-            "minimatch": "^3.0.0"
-          }
+          "optional": true
         },
         "gauge": {
           "version": "2.7.4",
@@ -2383,27 +2211,11 @@
             "wide-align": "^1.1.0"
           }
         },
-        "getpass": {
-          "version": "0.1.7",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "assert-plus": "^1.0.0"
-          },
-          "dependencies": {
-            "assert-plus": {
-              "version": "1.0.0",
-              "bundled": true,
-              "dev": true,
-              "optional": true
-            }
-          }
-        },
         "glob": {
           "version": "7.1.2",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "fs.realpath": "^1.0.0",
             "inflight": "^1.0.4",
@@ -2413,64 +2225,35 @@
             "path-is-absolute": "^1.0.0"
           }
         },
-        "graceful-fs": {
-          "version": "4.1.11",
-          "bundled": true,
-          "dev": true
-        },
-        "har-schema": {
-          "version": "1.0.5",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "har-validator": {
-          "version": "4.2.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ajv": "^4.9.1",
-            "har-schema": "^1.0.5"
-          }
-        },
         "has-unicode": {
           "version": "2.0.1",
           "bundled": true,
           "dev": true,
           "optional": true
         },
-        "hawk": {
-          "version": "3.1.3",
+        "iconv-lite": {
+          "version": "0.4.21",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
-            "boom": "2.x.x",
-            "cryptiles": "2.x.x",
-            "hoek": "2.x.x",
-            "sntp": "1.x.x"
+            "safer-buffer": "^2.1.0"
           }
         },
-        "hoek": {
-          "version": "2.16.3",
-          "bundled": true,
-          "dev": true
-        },
-        "http-signature": {
-          "version": "1.1.1",
+        "ignore-walk": {
+          "version": "3.0.1",
           "bundled": true,
           "dev": true,
           "optional": true,
           "requires": {
-            "assert-plus": "^0.2.0",
-            "jsprim": "^1.2.2",
-            "sshpk": "^1.7.0"
+            "minimatch": "^3.0.4"
           }
         },
         "inflight": {
           "version": "1.0.6",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "once": "^1.3.0",
             "wrappy": "1"
@@ -2482,7 +2265,7 @@
           "dev": true
         },
         "ini": {
-          "version": "1.3.4",
+          "version": "1.3.5",
           "bundled": true,
           "dev": true,
           "optional": true
@@ -2495,111 +2278,43 @@
             "number-is-nan": "^1.0.0"
           }
         },
-        "is-typedarray": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
         "isarray": {
           "version": "1.0.0",
           "bundled": true,
-          "dev": true
-        },
-        "isstream": {
-          "version": "0.1.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "jodid25519": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "jsbn": "~0.1.0"
-          }
-        },
-        "jsbn": {
-          "version": "0.1.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "json-schema": {
-          "version": "0.2.3",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "json-stable-stringify": {
-          "version": "1.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "jsonify": "~0.0.0"
-          }
-        },
-        "json-stringify-safe": {
-          "version": "5.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "jsonify": {
-          "version": "0.0.0",
-          "bundled": true,
           "dev": true,
           "optional": true
         },
-        "jsprim": {
-          "version": "1.4.0",
+        "minimatch": {
+          "version": "3.0.4",
           "bundled": true,
           "dev": true,
-          "optional": true,
           "requires": {
-            "assert-plus": "1.0.0",
-            "extsprintf": "1.0.2",
-            "json-schema": "0.2.3",
-            "verror": "1.3.6"
-          },
-          "dependencies": {
-            "assert-plus": {
-              "version": "1.0.0",
-              "bundled": true,
-              "dev": true,
-              "optional": true
-            }
+            "brace-expansion": "^1.1.7"
           }
         },
-        "mime-db": {
-          "version": "1.27.0",
+        "minimist": {
+          "version": "0.0.8",
           "bundled": true,
           "dev": true
         },
-        "mime-types": {
-          "version": "2.1.15",
+        "minipass": {
+          "version": "2.2.4",
           "bundled": true,
           "dev": true,
           "requires": {
-            "mime-db": "~1.27.0"
+            "safe-buffer": "^5.1.1",
+            "yallist": "^3.0.0"
           }
         },
-        "minimatch": {
-          "version": "3.0.4",
+        "minizlib": {
+          "version": "1.1.0",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
-            "brace-expansion": "^1.1.7"
+            "minipass": "^2.2.1"
           }
         },
-        "minimist": {
-          "version": "0.0.8",
-          "bundled": true,
-          "dev": true
-        },
         "mkdirp": {
           "version": "0.5.1",
           "bundled": true,
@@ -2614,23 +2329,33 @@
           "dev": true,
           "optional": true
         },
+        "needle": {
+          "version": "2.2.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "debug": "^2.1.2",
+            "iconv-lite": "^0.4.4",
+            "sax": "^1.2.4"
+          }
+        },
         "node-pre-gyp": {
-          "version": "0.6.39",
+          "version": "0.10.0",
           "bundled": true,
           "dev": true,
           "optional": true,
           "requires": {
             "detect-libc": "^1.0.2",
-            "hawk": "3.1.3",
             "mkdirp": "^0.5.1",
+            "needle": "^2.2.0",
             "nopt": "^4.0.1",
+            "npm-packlist": "^1.1.6",
             "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"
+            "tar": "^4"
           }
         },
         "nopt": {
@@ -2643,8 +2368,24 @@
             "osenv": "^0.1.4"
           }
         },
+        "npm-bundled": {
+          "version": "1.0.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "npm-packlist": {
+          "version": "1.1.10",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ignore-walk": "^3.0.1",
+            "npm-bundled": "^1.0.1"
+          }
+        },
         "npmlog": {
-          "version": "4.1.0",
+          "version": "4.1.2",
           "bundled": true,
           "dev": true,
           "optional": true,
@@ -2660,12 +2401,6 @@
           "bundled": true,
           "dev": true
         },
-        "oauth-sign": {
-          "version": "0.8.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
         "object-assign": {
           "version": "4.1.1",
           "bundled": true,
@@ -2693,7 +2428,7 @@
           "optional": true
         },
         "osenv": {
-          "version": "0.1.4",
+          "version": "0.1.5",
           "bundled": true,
           "dev": true,
           "optional": true,
@@ -2705,38 +2440,22 @@
         "path-is-absolute": {
           "version": "1.0.1",
           "bundled": true,
-          "dev": true
-        },
-        "performance-now": {
-          "version": "0.2.0",
-          "bundled": true,
           "dev": true,
           "optional": true
         },
         "process-nextick-args": {
-          "version": "1.0.7",
-          "bundled": true,
-          "dev": true
-        },
-        "punycode": {
-          "version": "1.4.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "qs": {
-          "version": "6.4.0",
+          "version": "2.0.0",
           "bundled": true,
           "dev": true,
           "optional": true
         },
         "rc": {
-          "version": "1.2.1",
+          "version": "1.2.7",
           "bundled": true,
           "dev": true,
           "optional": true,
           "requires": {
-            "deep-extend": "~0.4.0",
+            "deep-extend": "^0.5.1",
             "ini": "~1.3.0",
             "minimist": "^1.2.0",
             "strip-json-comments": "~2.0.1"
@@ -2751,112 +2470,63 @@
           }
         },
         "readable-stream": {
-          "version": "2.2.9",
+          "version": "2.3.6",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
-            "buffer-shims": "~1.0.0",
             "core-util-is": "~1.0.0",
-            "inherits": "~2.0.1",
+            "inherits": "~2.0.3",
             "isarray": "~1.0.0",
-            "process-nextick-args": "~1.0.6",
-            "string_decoder": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
             "util-deprecate": "~1.0.1"
           }
         },
-        "request": {
-          "version": "2.81.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "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"
-          }
-        },
         "rimraf": {
-          "version": "2.6.1",
+          "version": "2.6.2",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "glob": "^7.0.5"
           }
         },
         "safe-buffer": {
-          "version": "5.0.1",
+          "version": "5.1.1",
           "bundled": true,
           "dev": true
         },
-        "semver": {
-          "version": "5.3.0",
+        "safer-buffer": {
+          "version": "2.1.2",
           "bundled": true,
           "dev": true,
           "optional": true
         },
-        "set-blocking": {
-          "version": "2.0.0",
+        "sax": {
+          "version": "1.2.4",
           "bundled": true,
           "dev": true,
           "optional": true
         },
-        "signal-exit": {
-          "version": "3.0.2",
+        "semver": {
+          "version": "5.5.0",
           "bundled": true,
           "dev": true,
           "optional": true
         },
-        "sntp": {
-          "version": "1.0.9",
+        "set-blocking": {
+          "version": "2.0.0",
           "bundled": true,
           "dev": true,
-          "requires": {
-            "hoek": "2.x.x"
-          }
+          "optional": true
         },
-        "sshpk": {
-          "version": "1.13.0",
+        "signal-exit": {
+          "version": "3.0.2",
           "bundled": true,
           "dev": true,
-          "optional": true,
-          "requires": {
-            "asn1": "~0.2.3",
-            "assert-plus": "^1.0.0",
-            "bcrypt-pbkdf": "^1.0.0",
-            "dashdash": "^1.12.0",
-            "ecc-jsbn": "~0.1.1",
-            "getpass": "^0.1.1",
-            "jodid25519": "^1.0.0",
-            "jsbn": "~0.1.0",
-            "tweetnacl": "~0.14.0"
-          },
-          "dependencies": {
-            "assert-plus": {
-              "version": "1.0.0",
-              "bundled": true,
-              "dev": true,
-              "optional": true
-            }
-          }
+          "optional": true
         },
         "string-width": {
           "version": "1.0.2",
@@ -2869,19 +2539,14 @@
           }
         },
         "string_decoder": {
-          "version": "1.0.1",
+          "version": "1.1.1",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
-            "safe-buffer": "^5.0.1"
+            "safe-buffer": "~5.1.0"
           }
         },
-        "stringstream": {
-          "version": "0.0.5",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
         "strip-ansi": {
           "version": "3.0.1",
           "bundled": true,
@@ -2897,81 +2562,26 @@
           "optional": true
         },
         "tar": {
-          "version": "2.2.1",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "block-stream": "*",
-            "fstream": "^1.0.2",
-            "inherits": "2"
-          }
-        },
-        "tar-pack": {
-          "version": "3.4.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "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"
-          }
-        },
-        "tough-cookie": {
-          "version": "2.3.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "punycode": "^1.4.1"
-          }
-        },
-        "tunnel-agent": {
-          "version": "0.6.0",
+          "version": "4.4.1",
           "bundled": true,
           "dev": true,
           "optional": true,
           "requires": {
-            "safe-buffer": "^5.0.1"
+            "chownr": "^1.0.1",
+            "fs-minipass": "^1.2.5",
+            "minipass": "^2.2.4",
+            "minizlib": "^1.1.0",
+            "mkdirp": "^0.5.0",
+            "safe-buffer": "^5.1.1",
+            "yallist": "^3.0.2"
           }
         },
-        "tweetnacl": {
-          "version": "0.14.5",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "uid-number": {
-          "version": "0.0.6",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
         "util-deprecate": {
           "version": "1.0.2",
           "bundled": true,
-          "dev": true
-        },
-        "uuid": {
-          "version": "3.0.1",
-          "bundled": true,
           "dev": true,
           "optional": true
         },
-        "verror": {
-          "version": "1.3.6",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "extsprintf": "1.0.2"
-          }
-        },
         "wide-align": {
           "version": "1.1.2",
           "bundled": true,
@@ -2985,6 +2595,11 @@
           "version": "1.0.2",
           "bundled": true,
           "dev": true
+        },
+        "yallist": {
+          "version": "3.0.2",
+          "bundled": true,
+          "dev": true
         }
       }
     },
@@ -3154,28 +2769,20 @@
       "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
     },
     "handlebars": {
-      "version": "4.0.11",
-      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
-      "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
+      "version": "4.0.12",
+      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz",
+      "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==",
       "requires": {
-        "async": "^1.4.0",
+        "async": "^2.5.0",
         "optimist": "^0.6.1",
-        "source-map": "^0.4.4",
-        "uglify-js": "^2.6"
+        "source-map": "^0.6.1",
+        "uglify-js": "^3.1.4"
       },
       "dependencies": {
-        "async": {
-          "version": "1.5.2",
-          "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
-          "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
-        },
         "source-map": {
-          "version": "0.4.4",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
-          "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
-          "requires": {
-            "amdefine": ">=0.0.4"
-          }
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
         }
       }
     },
@@ -3185,11 +2792,11 @@
       "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
     },
     "har-validator": {
-      "version": "5.0.3",
-      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
-      "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
+      "version": "5.1.3",
+      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+      "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
       "requires": {
-        "ajv": "^5.1.0",
+        "ajv": "^6.5.5",
         "har-schema": "^2.0.0"
       }
     },
@@ -3240,22 +2847,6 @@
       "integrity": "sha1-ieJdtgS3Jcj1l2//Ct3JIbgopac=",
       "dev": true
     },
-    "hawk": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
-      "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
-      "requires": {
-        "boom": "4.x.x",
-        "cryptiles": "3.x.x",
-        "hoek": "4.x.x",
-        "sntp": "2.x.x"
-      }
-    },
-    "hoek": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
-      "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA=="
-    },
     "home-or-tmp": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
@@ -3317,6 +2908,11 @@
         "safe-buffer": "^5.0.1"
       }
     },
+    "i": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz",
+      "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0="
+    },
     "ignore-by-default": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
@@ -3409,7 +3005,8 @@
     "is-buffer": {
       "version": "1.1.6",
       "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+      "dev": true
     },
     "is-builtin-module": {
       "version": "1.0.0",
@@ -3674,8 +3271,7 @@
     "jsbn": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
-      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
-      "optional": true
+      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
     },
     "jsdoc": {
       "version": "3.5.5",
@@ -3764,9 +3360,9 @@
       "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
     },
     "json-schema-traverse": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
-      "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
     },
     "json-stringify-safe": {
       "version": "5.0.1",
@@ -3794,6 +3390,7 @@
       "version": "3.2.2",
       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
       "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+      "dev": true,
       "requires": {
         "is-buffer": "^1.1.5"
       }
@@ -3824,12 +3421,6 @@
         "package-json": "^4.0.0"
       }
     },
-    "lazy-cache": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
-      "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
-      "optional": true
-    },
     "load-json-file": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
@@ -3938,11 +3529,6 @@
       "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz",
       "integrity": "sha1-lyHXiLR+C8taJMLivuGg2lXatRQ="
     },
-    "longest": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
-      "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
-    },
     "loose-envify": {
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
@@ -4003,7 +3589,7 @@
     },
     "marked": {
       "version": "0.3.19",
-      "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz",
+      "resolved": "http://registry.npmjs.org/marked/-/marked-0.3.19.tgz",
       "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg=="
     },
     "matcher": {
@@ -4015,6 +3601,12 @@
         "escape-string-regexp": "^1.0.4"
       }
     },
+    "math-random": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
+      "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=",
+      "dev": true
+    },
     "md5-hex": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-2.0.0.tgz",
@@ -4166,16 +3758,16 @@
       }
     },
     "mime-db": {
-      "version": "1.33.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
-      "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="
+      "version": "1.37.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
+      "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg=="
     },
     "mime-types": {
-      "version": "2.1.18",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
-      "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
+      "version": "2.1.21",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
+      "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
       "requires": {
-        "mime-db": "~1.33.0"
+        "mime-db": "~1.37.0"
       }
     },
     "mimic-fn": {
@@ -4205,9 +3797,9 @@
       }
     },
     "mkdirp2": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/mkdirp2/-/mkdirp2-1.0.3.tgz",
-      "integrity": "sha1-zI3YJl8fBuLY9bELblL04FC+0hs="
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/mkdirp2/-/mkdirp2-1.0.4.tgz",
+      "integrity": "sha512-Q2PKB4ZR4UPtjLl76JfzlgSCUZhSV1AXQgAZa1qt5RiaALFjP/CDrGvFBrOz7Ck6McPcwMAxTsJvWOUjOU8XMw=="
     },
     "moment": {
       "version": "2.22.0",
@@ -4240,6 +3832,11 @@
         "minimatch": "^3.0.0"
       }
     },
+    "mute-stream": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+      "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
+    },
     "nan": {
       "version": "2.10.0",
       "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
@@ -4247,6 +3844,11 @@
       "dev": true,
       "optional": true
     },
+    "ncp": {
+      "version": "1.0.1",
+      "resolved": "http://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz",
+      "integrity": "sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY="
+    },
     "node-schedule": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-1.3.0.tgz",
@@ -4302,9 +3904,9 @@
       "dev": true
     },
     "oauth-sign": {
-      "version": "0.8.2",
-      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
-      "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
+      "version": "0.9.0",
+      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
     },
     "object-assign": {
       "version": "4.1.1",
@@ -4649,6 +4251,11 @@
         "find-up": "^2.1.0"
       }
     },
+    "pkginfo": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz",
+      "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8="
+    },
     "plur": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz",
@@ -4699,75 +4306,58 @@
       "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
       "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
     },
+    "prompt": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.0.0.tgz",
+      "integrity": "sha1-jlcSPDlquYiJf7Mn/Trtw+c15P4=",
+      "requires": {
+        "colors": "^1.1.2",
+        "pkginfo": "0.x.x",
+        "read": "1.0.x",
+        "revalidator": "0.1.x",
+        "utile": "0.3.x",
+        "winston": "2.1.x"
+      }
+    },
     "pseudomap": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
       "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
       "dev": true
     },
+    "psl": {
+      "version": "1.1.31",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz",
+      "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw=="
+    },
     "punycode": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
-      "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
     },
     "qs": {
-      "version": "6.5.1",
-      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
-      "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
-    },
-    "randomatic": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
-      "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==",
-      "dev": true,
-      "requires": {
-        "is-number": "^3.0.0",
-        "kind-of": "^4.0.0"
-      },
-      "dependencies": {
-        "is-number": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
-          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
-          "dev": true,
-          "requires": {
-            "kind-of": "^3.0.2"
-          },
-          "dependencies": {
-            "kind-of": {
-              "version": "3.2.2",
-              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-              "dev": true,
-              "requires": {
-                "is-buffer": "^1.1.5"
-              }
-            }
-          }
-        },
-        "kind-of": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
-          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
-      }
+      "version": "6.5.2",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+      "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
     },
     "rc": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.6.tgz",
-      "integrity": "sha1-6xiYnG1PTxYsOZ953dKfODVWgJI=",
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+      "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
       "dev": true,
       "requires": {
-        "deep-extend": "~0.4.0",
+        "deep-extend": "^0.6.0",
         "ini": "~1.3.0",
         "minimist": "^1.2.0",
         "strip-json-comments": "~2.0.1"
       },
       "dependencies": {
+        "deep-extend": {
+          "version": "0.6.0",
+          "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+          "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+          "dev": true
+        },
         "minimist": {
           "version": "1.2.0",
           "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
@@ -4776,6 +4366,14 @@
         }
       }
     },
+    "read": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
+      "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=",
+      "requires": {
+        "mute-stream": "~0.0.4"
+      }
+    },
     "read-pkg": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
@@ -4854,7 +4452,7 @@
       "dependencies": {
         "array-back": {
           "version": "1.0.4",
-          "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
+          "resolved": "http://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
           "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
           "requires": {
             "typical": "^2.6.0"
@@ -4891,7 +4489,7 @@
       "dependencies": {
         "array-back": {
           "version": "1.0.4",
-          "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
+          "resolved": "http://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
           "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
           "requires": {
             "typical": "^2.6.0"
@@ -4998,7 +4596,8 @@
     "repeat-string": {
       "version": "1.6.1",
       "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
-      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+      "dev": true
     },
     "repeating": {
       "version": "2.0.1",
@@ -5010,32 +4609,37 @@
       }
     },
     "request": {
-      "version": "2.85.0",
-      "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz",
-      "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==",
+      "version": "2.88.0",
+      "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+      "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
       "requires": {
         "aws-sign2": "~0.7.0",
-        "aws4": "^1.6.0",
+        "aws4": "^1.8.0",
         "caseless": "~0.12.0",
-        "combined-stream": "~1.0.5",
-        "extend": "~3.0.1",
+        "combined-stream": "~1.0.6",
+        "extend": "~3.0.2",
         "forever-agent": "~0.6.1",
-        "form-data": "~2.3.1",
-        "har-validator": "~5.0.3",
-        "hawk": "~6.0.2",
+        "form-data": "~2.3.2",
+        "har-validator": "~5.1.0",
         "http-signature": "~1.2.0",
         "is-typedarray": "~1.0.0",
         "isstream": "~0.1.2",
         "json-stringify-safe": "~5.0.1",
-        "mime-types": "~2.1.17",
-        "oauth-sign": "~0.8.2",
+        "mime-types": "~2.1.19",
+        "oauth-sign": "~0.9.0",
         "performance-now": "^2.1.0",
-        "qs": "~6.5.1",
-        "safe-buffer": "^5.1.1",
-        "stringstream": "~0.0.5",
-        "tough-cookie": "~2.3.3",
+        "qs": "~6.5.2",
+        "safe-buffer": "^5.1.2",
+        "tough-cookie": "~2.4.3",
         "tunnel-agent": "^0.6.0",
-        "uuid": "^3.1.0"
+        "uuid": "^3.3.2"
+      },
+      "dependencies": {
+        "safe-buffer": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+        }
       }
     },
     "require-precompiled": {
@@ -5054,7 +4658,7 @@
       "dependencies": {
         "underscore": {
           "version": "1.6.0",
-          "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
+          "resolved": "http://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
           "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag="
         }
       }
@@ -5083,13 +4687,17 @@
         "signal-exit": "^3.0.2"
       }
     },
-    "right-align": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
-      "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
-      "optional": true,
+    "revalidator": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz",
+      "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs="
+    },
+    "rimraf": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+      "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
       "requires": {
-        "align-text": "^0.1.1"
+        "glob": "^7.0.5"
       }
     },
     "safe-buffer": {
@@ -5097,6 +4705,11 @@
       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
       "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
     },
+    "safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+    },
     "sax": {
       "version": "1.2.4",
       "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
@@ -5170,14 +4783,6 @@
       "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=",
       "dev": true
     },
-    "sntp": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
-      "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
-      "requires": {
-        "hoek": "4.x.x"
-      }
-    },
     "socket.io-client": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.0.tgz",
@@ -5228,7 +4833,7 @@
       "dependencies": {
         "array-back": {
           "version": "1.0.4",
-          "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
+          "resolved": "http://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
           "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
           "requires": {
             "typical": "^2.6.0"
@@ -5253,7 +4858,8 @@
     "source-map": {
       "version": "0.5.7",
       "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+      "dev": true
     },
     "source-map-support": {
       "version": "0.5.4",
@@ -5311,9 +4917,9 @@
       "dev": true
     },
     "sshpk": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz",
-      "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=",
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz",
+      "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==",
       "requires": {
         "asn1": "~0.2.3",
         "assert-plus": "^1.0.0",
@@ -5322,9 +4928,15 @@
         "ecc-jsbn": "~0.1.1",
         "getpass": "^0.1.1",
         "jsbn": "~0.1.0",
+        "safer-buffer": "^2.0.2",
         "tweetnacl": "~0.14.0"
       }
     },
+    "stack-trace": {
+      "version": "0.0.10",
+      "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+      "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
+    },
     "stack-utils": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz",
@@ -5341,7 +4953,7 @@
       "dependencies": {
         "array-back": {
           "version": "1.0.4",
-          "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
+          "resolved": "http://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
           "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
           "requires": {
             "typical": "^2.6.0"
@@ -5383,11 +4995,6 @@
         "safe-buffer": "~5.1.0"
       }
     },
-    "stringstream": {
-      "version": "0.0.5",
-      "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
-      "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg="
-    },
     "strip-ansi": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
@@ -5473,22 +5080,15 @@
       "dev": true
     },
     "table-layout": {
-      "version": "0.4.3",
-      "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz",
-      "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==",
+      "version": "0.4.4",
+      "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.4.tgz",
+      "integrity": "sha512-uNaR3SRMJwfdp9OUr36eyEi6LLsbcTqTO/hfTsNviKsNeyMBPICJCC7QXRF3+07bAP6FRwA8rczJPBqXDc0CkQ==",
       "requires": {
         "array-back": "^2.0.0",
-        "deep-extend": "~0.5.0",
+        "deep-extend": "~0.6.0",
         "lodash.padend": "^4.6.1",
         "typical": "^2.6.1",
         "wordwrapjs": "^3.0.0"
-      },
-      "dependencies": {
-        "deep-extend": {
-          "version": "0.5.1",
-          "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz",
-          "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w=="
-        }
       }
     },
     "taffydb": {
@@ -5559,11 +5159,19 @@
       "dev": true
     },
     "tough-cookie": {
-      "version": "2.3.4",
-      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
-      "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
+      "version": "2.4.3",
+      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+      "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
       "requires": {
+        "psl": "^1.1.24",
         "punycode": "^1.4.1"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+        }
       }
     },
     "trim-newlines": {
@@ -5595,8 +5203,7 @@
     "tweetnacl": {
       "version": "0.14.5",
       "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
-      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
-      "optional": true
+      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
     },
     "typical": {
       "version": "2.6.1",
@@ -5604,22 +5211,23 @@
       "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0="
     },
     "uglify-js": {
-      "version": "2.8.29",
-      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
-      "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+      "version": "3.4.9",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
+      "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
       "optional": true,
       "requires": {
-        "source-map": "~0.5.1",
-        "uglify-to-browserify": "~1.0.0",
-        "yargs": "~3.10.0"
+        "commander": "~2.17.1",
+        "source-map": "~0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "optional": true
+        }
       }
     },
-    "uglify-to-browserify": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
-      "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
-      "optional": true
-    },
     "uid2": {
       "version": "0.0.3",
       "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz",
@@ -5633,7 +5241,7 @@
     },
     "underscore": {
       "version": "1.8.3",
-      "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
+      "resolved": "http://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
       "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
     },
     "underscore-contrib": {
@@ -5646,7 +5254,7 @@
       "dependencies": {
         "underscore": {
           "version": "1.6.0",
-          "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
+          "resolved": "http://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
           "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag="
         }
       }
@@ -5695,6 +5303,14 @@
         "xdg-basedir": "^3.0.0"
       }
     },
+    "uri-js": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+      "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+      "requires": {
+        "punycode": "^2.1.0"
+      }
+    },
     "url-parse-lax": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
@@ -5709,10 +5325,35 @@
       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
       "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
     },
+    "utile": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/utile/-/utile-0.3.0.tgz",
+      "integrity": "sha1-E1LDQOuCDk2N26A5pPv6oy7U7zo=",
+      "requires": {
+        "async": "~0.9.0",
+        "deep-equal": "~0.2.1",
+        "i": "0.3.x",
+        "mkdirp": "0.x.x",
+        "ncp": "1.0.x",
+        "rimraf": "2.x.x"
+      },
+      "dependencies": {
+        "async": {
+          "version": "0.9.2",
+          "resolved": "http://registry.npmjs.org/async/-/async-0.9.2.tgz",
+          "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0="
+        },
+        "deep-equal": {
+          "version": "0.2.2",
+          "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz",
+          "integrity": "sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0="
+        }
+      }
+    },
     "uuid": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
-      "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA=="
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+      "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
     },
     "validate-npm-package-license": {
       "version": "3.0.3",
@@ -5771,11 +5412,36 @@
         "string-width": "^2.1.1"
       }
     },
-    "window-size": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
-      "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
-      "optional": true
+    "winston": {
+      "version": "2.1.1",
+      "resolved": "http://registry.npmjs.org/winston/-/winston-2.1.1.tgz",
+      "integrity": "sha1-PJNJ0ZYgf9G9/51LxD73JRDjoS4=",
+      "requires": {
+        "async": "~1.0.0",
+        "colors": "1.0.x",
+        "cycle": "1.0.x",
+        "eyes": "0.1.x",
+        "isstream": "0.1.x",
+        "pkginfo": "0.3.x",
+        "stack-trace": "0.0.x"
+      },
+      "dependencies": {
+        "async": {
+          "version": "1.0.0",
+          "resolved": "http://registry.npmjs.org/async/-/async-1.0.0.tgz",
+          "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k="
+        },
+        "colors": {
+          "version": "1.0.3",
+          "resolved": "http://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+          "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs="
+        },
+        "pkginfo": {
+          "version": "0.3.1",
+          "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz",
+          "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE="
+        }
+      }
     },
     "wordwrap": {
       "version": "0.0.3",
@@ -5896,26 +5562,6 @@
       "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
       "dev": true
     },
-    "yargs": {
-      "version": "3.10.0",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
-      "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
-      "optional": true,
-      "requires": {
-        "camelcase": "^1.0.2",
-        "cliui": "^2.1.0",
-        "decamelize": "^1.0.0",
-        "window-size": "0.1.0"
-      },
-      "dependencies": {
-        "camelcase": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
-          "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
-          "optional": true
-        }
-      }
-    },
     "yeast": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
diff --git a/package.json b/package.json
old mode 100644
new mode 100755
index 5e0e1f3..995c303
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "algotrader",
-  "version": "1.3.1",
+  "version": "1.4.0",
   "description": "Algorithmically trade stocks and options using Robinhood, Yahoo Finance, and more.",
   "main": "index.js",
   "scripts": {
@@ -36,12 +36,12 @@
     "cheerio": "^1.0.0-rc.2",
     "fast-csv": "^2.4.1",
     "ftp": "^0.3.10",
-    "jsdoc-to-markdown": "^4.0.1",
     "lodash": "^4.17.5",
     "moment": "^2.22.0",
     "node-schedule": "^1.3.0",
     "ora": "^2.0.0",
-    "request": "^2.85.0",
+    "prompt": "^1.0.0",
+    "request": "^2.88.0",
     "socket.io-client": "^2.1.0",
     "xml-js": "^1.6.2"
   },
diff --git a/test.js b/test.js
old mode 100644
new mode 100755