Fixing GUI to respond to server-side layout changes.

Change-Id: Ida1052d6bec4a92d29774ede47942410db189732
(cherry picked from commit c616e17aff8f0962e0ef56daa1f777f6b08af110)
diff --git a/core/api/src/main/java/org/onosproject/net/config/basics/BasicElementConfig.java b/core/api/src/main/java/org/onosproject/net/config/basics/BasicElementConfig.java
index 1cb00dc..0504624 100644
--- a/core/api/src/main/java/org/onosproject/net/config/basics/BasicElementConfig.java
+++ b/core/api/src/main/java/org/onosproject/net/config/basics/BasicElementConfig.java
@@ -84,8 +84,10 @@
     protected static final double ZERO_THRESHOLD = Double.MIN_VALUE * 2.0;
 
     private static final double DEFAULT_COORD = 0.0;
-    private static final String LOC_TYPE_GEO = "geo";
-    private static final String LOC_TYPE_GRID = "grid";
+
+    public static final String LOC_TYPE_GEO = "geo";
+    public static final String LOC_TYPE_GRID = "grid";
+    public static final String LOC_TYPE_NONE = "none";
 
     private static final int NAME_MAX_LENGTH = 256;
     private static final int UI_TYPE_MAX_LENGTH = 128;
@@ -137,23 +139,29 @@
 
     /**
      * Returns the location type (geo or grid) for the element in
-     * the Topology View. If not set, returns the default of "geo".
+     * the Topology View. If not set, the type will be determined implicitly
+     * by latitude being set ("geo") or gridX being set ("grid");
+     * otherwise returns the default of "none".
      *
      * @return location type (string)
      */
     public String locType() {
-        return get(LOC_TYPE, LOC_TYPE_GEO);
+        String l = get(LATITUDE, null);
+        String x = get(GRID_X, null);
+        String def = l != null ? LOC_TYPE_GEO : (x != null ? LOC_TYPE_GRID : LOC_TYPE_NONE);
+        return get(LOC_TYPE, def);
     }
 
     /**
      * Sets the location type (geo or grid) for the element in
-     * the Topology View. If null is passsed, it will default to "geo".
+     * the Topology View. If null is passed, it will default to "geo".
      *
      * @param locType the UI type; null for default
      * @return self
      */
     public BasicElementConfig locType(String locType) {
-        String lt = LOC_TYPE_GRID.equals(locType) ? LOC_TYPE_GRID : LOC_TYPE_GEO;
+        String lt = Objects.equals(LOC_TYPE_GRID, locType) || Objects.equals(LOC_TYPE_GEO, locType)
+                ? locType : LOC_TYPE_NONE;
         return (BasicElementConfig) setOrClear(LOC_TYPE, lt);
     }
 
diff --git a/core/api/src/test/java/org/onosproject/net/config/basics/BasicElementConfigTest.java b/core/api/src/test/java/org/onosproject/net/config/basics/BasicElementConfigTest.java
index 0d65eb9..f2e4b99 100644
--- a/core/api/src/test/java/org/onosproject/net/config/basics/BasicElementConfigTest.java
+++ b/core/api/src/test/java/org/onosproject/net/config/basics/BasicElementConfigTest.java
@@ -32,8 +32,8 @@
     private static final ObjectMapper MAPPER = new ObjectMapper();
 
     private static final String E1 = "e1";
-    private static final String GEO = "geo";
-    private static final String GRID = "grid";
+    private static final String GEO = BasicElementConfig.LOC_TYPE_GEO;
+    private static final String GRID = BasicElementConfig.LOC_TYPE_GRID;
     public static final ImmutableSet<String> ROLES = ImmutableSet.of("spine", "primary");
 
     // concrete subclass of abstract class we are testing
@@ -128,7 +128,7 @@
     @Test
     public void defaultLocationType() {
         print(cfg);
-        assertEquals("not geo", GEO, cfg.locType());
+        assertEquals("not none", BasicElementConfig.LOC_TYPE_NONE, cfg.locType());
     }
 
     @Test
@@ -149,7 +149,7 @@
     public void otherLocationType() {
         cfg.locType("foobar");
         print(cfg);
-        assertEquals("not geo", GEO, cfg.locType());
+        assertEquals("not none", BasicElementConfig.LOC_TYPE_NONE, cfg.locType());
     }
 
     @Test
diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/BasicElementOperator.java b/core/net/src/main/java/org/onosproject/net/device/impl/BasicElementOperator.java
index 09a154d..29333e6 100644
--- a/core/net/src/main/java/org/onosproject/net/device/impl/BasicElementOperator.java
+++ b/core/net/src/main/java/org/onosproject/net/device/impl/BasicElementOperator.java
@@ -21,6 +21,8 @@
 import org.onosproject.net.config.ConfigOperator;
 import org.onosproject.net.config.basics.BasicElementConfig;
 
+import java.util.Objects;
+
 /**
  * Abstract base implementation for element operators.
  */
@@ -46,12 +48,18 @@
         if (cfg.locType() != null) {
             builder.set(AnnotationKeys.LOC_TYPE, cfg.locType());
         }
-        if (cfg.geoCoordsSet()) {
+
+        if (Objects.equals(cfg.locType(), BasicElementConfig.LOC_TYPE_NONE)) {
+            builder.remove(AnnotationKeys.GRID_X).remove(AnnotationKeys.GRID_Y);
+            builder.remove(AnnotationKeys.LATITUDE).remove(AnnotationKeys.LONGITUDE);
+        } else if (cfg.geoCoordsSet()) {
             builder.set(AnnotationKeys.LATITUDE, Double.toString(cfg.latitude()));
             builder.set(AnnotationKeys.LONGITUDE, Double.toString(cfg.longitude()));
+            builder.remove(AnnotationKeys.GRID_X).remove(AnnotationKeys.GRID_Y);
         } else if (cfg.gridCoordsSet()) {
             builder.set(AnnotationKeys.GRID_Y, Double.toString(cfg.gridY()));
             builder.set(AnnotationKeys.GRID_X, Double.toString(cfg.gridX()));
+            builder.remove(AnnotationKeys.LATITUDE).remove(AnnotationKeys.LONGITUDE);
         }
 
         if (cfg.rackAddress() != null) {
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java
index 7027fc2..60fa17a 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java
@@ -60,12 +60,15 @@
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
 import static com.google.common.base.Strings.isNullOrEmpty;
 import static org.onosproject.net.PortNumber.portNumber;
+import static org.onosproject.net.config.basics.BasicElementConfig.LOC_TYPE_GEO;
+import static org.onosproject.net.config.basics.BasicElementConfig.LOC_TYPE_GRID;
 import static org.onosproject.ui.topo.TopoConstants.CoreButtons;
 import static org.onosproject.ui.topo.TopoConstants.Properties.DEVICES;
 import static org.onosproject.ui.topo.TopoConstants.Properties.FLOWS;
@@ -196,6 +199,13 @@
         return Collections.unmodifiableMap(metaUi);
     }
 
+    /**
+     * Clears any meta-ui information.
+     */
+    public static void clearMetaUi() {
+        metaUi.clear();
+    }
+
     private static final String LION_TOPO = "core.view.Topo";
 
     private static final Set<String> REQ_LION_BUNDLES = ImmutableSet.of(
@@ -310,9 +320,10 @@
 
         payload.set("labels", labels("", name, device.id().toString()));
         payload.set("props", props(device.annotations()));
-        addGeoLocation(device, payload);
-        addGridLocation(device, payload);
-        addMetaUi(device.id().toString(), payload);
+
+        if (!addGeoLocation(device, payload) && !addGridLocation(device, payload)) {
+            addMetaUi(device.id().toString(), payload);
+        }
 
         String type = DEVICE_EVENT.get(event.type());
         return JsonUtils.envelope(type, payload);
@@ -357,9 +368,10 @@
 
         payload.set("labels", labels(nameForHost(host), ip, host.mac().toString(), ""));
         payload.set("props", props(host.annotations()));
-        addGeoLocation(host, payload);
-        addGridLocation(host, payload);
-        addMetaUi(host.id().toString(), payload);
+
+        if (!addGeoLocation(host, payload) && !addGridLocation(host, payload)) {
+            addMetaUi(host.id().toString(), payload);
+        }
 
         String type = HOST_EVENT.get(event.type());
         return JsonUtils.envelope(type, payload);
@@ -408,53 +420,57 @@
     }
 
     // Adds a geo location JSON to the specified payload object.
-    private void addGeoLocation(Annotated annotated, ObjectNode payload) {
+    private boolean addGeoLocation(Annotated annotated, ObjectNode payload) {
         Annotations annotations = annotated.annotations();
-        if (annotations == null) {
-            return;
-        }
+        if (annotations != null) {
+            String locType = annotations.value(AnnotationKeys.LOC_TYPE);
+            String slat = annotations.value(AnnotationKeys.LATITUDE);
+            String slng = annotations.value(AnnotationKeys.LONGITUDE);
+            boolean validLat = slat != null && !slat.equals(NO_GEO_VALUE);
+            boolean validLng = slng != null && !slng.equals(NO_GEO_VALUE);
 
-        String slat = annotations.value(AnnotationKeys.LATITUDE);
-        String slng = annotations.value(AnnotationKeys.LONGITUDE);
-        boolean validLat = slat != null && !slat.equals(NO_GEO_VALUE);
-        boolean validLng = slng != null && !slng.equals(NO_GEO_VALUE);
-        if (validLat && validLng) {
-            try {
-                double lat = Double.parseDouble(slat);
-                double lng = Double.parseDouble(slng);
-                ObjectNode loc = objectNode()
-                        .put("locType", "geo")
-                        .put("latOrY", lat)
-                        .put("longOrX", lng);
-                payload.set("location", loc);
-            } catch (NumberFormatException e) {
-                log.warn("Invalid geo data: latitude={}, longitude={}", slat, slng);
+            if (Objects.equals(locType, LOC_TYPE_GEO) && validLat && validLng) {
+                try {
+                    double lat = Double.parseDouble(slat);
+                    double lng = Double.parseDouble(slng);
+                    ObjectNode loc = objectNode()
+                            .put("locType", "geo")
+                            .put("latOrY", lat)
+                            .put("longOrX", lng);
+                    payload.set("location", loc);
+                    return true;
+                } catch (NumberFormatException e) {
+                    log.warn("Invalid geo data: latitude={}, longitude={}", slat, slng);
+                }
             }
         }
+        return false;
     }
 
     // Adds a grid location JSON to the specified payload object.
-    private void addGridLocation(Annotated annotated, ObjectNode payload) {
+    private boolean addGridLocation(Annotated annotated, ObjectNode payload) {
         Annotations annotations = annotated.annotations();
-        if (annotations == null) {
-            return;
-        }
+        if (annotations != null) {
+            String locType = annotations.value(AnnotationKeys.LOC_TYPE);
+            String xs = annotations.value(AnnotationKeys.GRID_X);
+            String ys = annotations.value(AnnotationKeys.GRID_Y);
 
-        String xs = annotations.value(AnnotationKeys.GRID_X);
-        String ys = annotations.value(AnnotationKeys.GRID_Y);
-        if (xs != null && ys != null) {
-            try {
-                double x = Double.parseDouble(xs);
-                double y = Double.parseDouble(ys);
-                ObjectNode loc = objectNode()
-                        .put("locType", "grid")
-                        .put("latOrY", y)
-                        .put("longOrX", x);
-                payload.set("location", loc);
-            } catch (NumberFormatException e) {
-                log.warn("Invalid grid data: x={}, y={}", xs, ys);
+            if (Objects.equals(locType, LOC_TYPE_GRID) && xs != null && ys != null) {
+                try {
+                    double x = Double.parseDouble(xs);
+                    double y = Double.parseDouble(ys);
+                    ObjectNode loc = objectNode()
+                            .put("locType", "grid")
+                            .put("latOrY", y)
+                            .put("longOrX", x);
+                    payload.set("location", loc);
+                    return true;
+                } catch (NumberFormatException e) {
+                    log.warn("Invalid grid data: x={}, y={}", xs, ys);
+                }
             }
         }
+        return false;
     }
 
     // Updates meta UI information for the specified object.
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/cli/UiClearMetaCommand.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/cli/UiClearMetaCommand.java
new file mode 100644
index 0000000..ecbd82a
--- /dev/null
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/cli/UiClearMetaCommand.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.onosproject.ui.impl.topo.cli;
+
+import org.apache.karaf.shell.commands.Command;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.ui.impl.TopologyViewMessageHandlerBase;
+
+/**
+ * Clears meta-UI data for topology view.
+ */
+@Command(scope = "onos", name = "ui-clear-meta",
+        description = "Clears meta-UI data for topology view")
+public class UiClearMetaCommand extends AbstractShellCommand {
+
+    @Override
+    protected void execute() {
+        TopologyViewMessageHandlerBase.clearMetaUi();
+    }
+}
diff --git a/web/gui/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/web/gui/src/main/resources/OSGI-INF/blueprint/shell-config.xml
index 4bc2b55..19abddd 100644
--- a/web/gui/src/main/resources/OSGI-INF/blueprint/shell-config.xml
+++ b/web/gui/src/main/resources/OSGI-INF/blueprint/shell-config.xml
@@ -43,6 +43,9 @@
         <command>
             <action class="org.onosproject.ui.impl.topo.cli.UiGeoMapListCommand"/>
         </command>
+        <command>
+            <action class="org.onosproject.ui.impl.topo.cli.UiClearMetaCommand"/>
+        </command>
     </command-bundle>
 
     <!--<bean id="macIDCompleter" class="org.onosproject.dhcp.cli.MacIdCompleter"/>-->
diff --git a/web/gui/src/main/webapp/app/view/topo/topo.js b/web/gui/src/main/webapp/app/view/topo/topo.js
index 04b552c..44ed953 100644
--- a/web/gui/src/main/webapp/app/view/topo/topo.js
+++ b/web/gui/src/main/webapp/app/view/topo/topo.js
@@ -527,6 +527,11 @@
         ps.setPrefs('topo_prefs', prefsState);
     }
 
+    function applyPreferences(evt) {
+        if (ps.getPrefs('topo_prefs', null)) {
+            restoreConfigFromPrefs();
+        }
+    }
 
     function restoreConfigFromPrefs() {
         // NOTE: toolbar will have set this for us..
@@ -545,6 +550,7 @@
         togglePorts(prefsState.porthl);
         toggleMap(prefsState.bg);
         toggleSprites(prefsState.spr);
+        ttbs.setToolbar(prefsState.toolbar);
         t3s.setDevLabIndex(prefsState.dlbls);
         t3s.setHostLabIndex(prefsState.hlbls);
         flash.enable(true);
@@ -696,6 +702,8 @@
             svg.attr(fs.windowSize(mast.mastHeight()));
             dim = [svg.attr('width'), svg.attr('height')];
 
+            ps.addListener(applyPreferences);
+
             setUpKeys();
             setUpToolbar();
             setUpDefs();
diff --git a/web/gui/src/main/webapp/app/view/topo/topoForce.js b/web/gui/src/main/webapp/app/view/topo/topoForce.js
index 6f77bed..b7cc07c 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoForce.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoForce.js
@@ -111,6 +111,13 @@
     // ==========================
     // === EVENT HANDLERS
 
+    function mergeNodeData(o, n) {
+        angular.extend(o, n);
+        if (!n.location) {
+            delete o.location;
+        }
+    }
+
     function addDevice(data) {
         var id = data.id,
             d;
@@ -138,15 +145,17 @@
 
         if (d) {
             wasOnline = d.online;
-            angular.extend(d, data);
+            mergeNodeData(d, data);
             if (tms.positionNode(d, true)) {
                 sendUpdateMeta(d);
             }
             updateNodes();
+            tick();
             if (wasOnline !== d.online) {
                 tms.findAttachedLinks(d.id).forEach(restyleLinkElement);
                 updateOfflineVisibility(d);
             }
+            fStart();
         }
     }
 
@@ -187,11 +196,13 @@
         var id = data.id,
             d = lu[id];
         if (d) {
-            angular.extend(d, data);
+            mergeNodeData(d, data);
             if (tms.positionNode(d, true)) {
                 sendUpdateMeta(d);
             }
             updateNodes();
+            tick();
+            fStart();
         }
     }
 
@@ -726,6 +737,7 @@
         // exiting node specifics:
         exiting.filter('.host').each(td3.hostExit);
         exiting.filter('.device').each(td3.deviceExit);
+        tick();
     }
 
     // ==========================
diff --git a/web/gui/src/main/webapp/app/view/topo/topoModel.js b/web/gui/src/main/webapp/app/view/topo/topoModel.js
index 6adf1f3..1084b52 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoModel.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoModel.js
@@ -78,20 +78,20 @@
         // if the device contains explicit LONG/LAT data, use that to position
         if (setLongLat(node)) {
             // indicate we want to update cached meta data...
-            return true;
+            return false;
         }
 
         // else if we have [x,y] cached in meta data, use that...
-        if (x !== undefined && y !== undefined) {
+        if (x != undefined && y != undefined) {
             node.fixed = true;
             node.px = node.x = x;
             node.py = node.y = y;
-            return;
+            return true;
         }
 
         // if this is a node update (not a node add).. skip randomizer
-        if (forUpdate) {
-            return;
+        if (forUpdate && node.x != undefined && node.y != undefined) {
+            return false;
         }
 
         // Note: Placing incoming unpinned nodes at exactly the same point
@@ -120,21 +120,27 @@
             return d || rand();
         }
 
+        node.fixed = false;
         xy = (node.class === 'host') ? near(getDevice(node.cp)) : rand();
         angular.extend(node, xy);
+        return false;
     }
 
     function setLongLat(node) {
         var loc = node.location,
             coord;
 
-        if (loc) {
+        if (!loc || loc.locType === 'none') {
+            node.fixed = false;
+
+        } else if (loc) {
             coord = loc.locType === 'geo' ? coordFromLngLat(loc) : coordFromXY(loc);
             node.fixed = true;
             node.px = node.x = coord[0];
             node.py = node.y = coord[1];
             return true;
         }
+        return false;
     }
 
     function resetAllLocations() {
diff --git a/web/gui/src/main/webapp/app/view/topo/topoToolbar.js b/web/gui/src/main/webapp/app/view/topo/topoToolbar.js
index 8b37002..2552123 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoToolbar.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoToolbar.js
@@ -304,6 +304,14 @@
         persistTopoPrefs('toolbar');
     }
 
+    function setToolbar(state) {
+        if (state) {
+            toolbar.show();
+        } else {
+            toolbar.hide();
+        }
+     }
+
     function selectOverlay(ovid) {
         var idx = ovIndex[defaultOverlay] || 0,
             pidx = (ovid === null) ? 0 : ovIndex[ovid] || -1;
@@ -339,6 +347,7 @@
                 destroyToolbar: destroyToolbar,
                 keyListener: keyListener,
                 toggleToolbar: toggleToolbar,
+                setToolbar: setToolbar,
                 selectOverlay: selectOverlay,
                 defaultPrefs: defaultPrefsState,
                 fnkey: fnkey,
diff --git a/web/gui/src/main/webapp/tests/package-lock.json b/web/gui/src/main/webapp/tests/package-lock.json
index 4eb860d..112765d 100644
--- a/web/gui/src/main/webapp/tests/package-lock.json
+++ b/web/gui/src/main/webapp/tests/package-lock.json
@@ -2,6 +2,7 @@
   "name": "Onos-GUI-tests",
   "version": "1.0.0",
   "lockfileVersion": 1,
+  "requires": true,
   "dependencies": {
     "bower": {
       "version": "1.8.0",
@@ -12,12 +13,17 @@
     "debug": {
       "version": "2.6.8",
       "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
-      "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw="
+      "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+      "dev": true,
+      "requires": {
+        "ms": "2.0.0"
+      }
     },
     "is-typedarray": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+      "dev": true
     },
     "jasmine-core": {
       "version": "2.6.4",
@@ -30,6 +36,31 @@
       "resolved": "https://registry.npmjs.org/karma/-/karma-0.13.22.tgz",
       "integrity": "sha1-B3ULG9Bj1+fnuRvNLmNU2PKqh0Q=",
       "dev": true,
+      "requires": {
+        "batch": "0.5.3",
+        "bluebird": "2.11.0",
+        "body-parser": "1.17.2",
+        "chokidar": "1.7.0",
+        "colors": "1.1.2",
+        "connect": "3.6.2",
+        "core-js": "2.4.1",
+        "di": "0.0.1",
+        "dom-serialize": "2.2.1",
+        "expand-braces": "0.1.2",
+        "glob": "7.1.2",
+        "graceful-fs": "4.1.11",
+        "http-proxy": "1.16.2",
+        "isbinaryfile": "3.0.2",
+        "lodash": "3.10.1",
+        "log4js": "0.6.38",
+        "mime": "1.3.6",
+        "minimatch": "3.0.4",
+        "optimist": "0.6.1",
+        "rimraf": "2.6.1",
+        "socket.io": "1.7.4",
+        "source-map": "0.5.6",
+        "useragent": "2.2.1"
+      },
       "dependencies": {
         "batch": {
           "version": "0.5.3",
@@ -48,6 +79,18 @@
           "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz",
           "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=",
           "dev": true,
+          "requires": {
+            "bytes": "2.4.0",
+            "content-type": "1.0.2",
+            "debug": "2.6.7",
+            "depd": "1.1.0",
+            "http-errors": "1.6.1",
+            "iconv-lite": "0.4.15",
+            "on-finished": "2.3.0",
+            "qs": "6.4.0",
+            "raw-body": "2.2.0",
+            "type-is": "1.6.15"
+          },
           "dependencies": {
             "bytes": {
               "version": "2.4.0",
@@ -66,6 +109,9 @@
               "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz",
               "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=",
               "dev": true,
+              "requires": {
+                "ms": "2.0.0"
+              },
               "dependencies": {
                 "ms": {
                   "version": "2.0.0",
@@ -86,6 +132,12 @@
               "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz",
               "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=",
               "dev": true,
+              "requires": {
+                "depd": "1.1.0",
+                "inherits": "2.0.3",
+                "setprototypeof": "1.0.3",
+                "statuses": "1.3.1"
+              },
               "dependencies": {
                 "inherits": {
                   "version": "2.0.3",
@@ -118,6 +170,9 @@
               "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
               "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
               "dev": true,
+              "requires": {
+                "ee-first": "1.1.1"
+              },
               "dependencies": {
                 "ee-first": {
                   "version": "1.1.1",
@@ -138,6 +193,11 @@
               "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz",
               "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=",
               "dev": true,
+              "requires": {
+                "bytes": "2.4.0",
+                "iconv-lite": "0.4.15",
+                "unpipe": "1.0.0"
+              },
               "dependencies": {
                 "unpipe": {
                   "version": "1.0.0",
@@ -152,6 +212,10 @@
               "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz",
               "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=",
               "dev": true,
+              "requires": {
+                "media-typer": "0.3.0",
+                "mime-types": "2.1.15"
+              },
               "dependencies": {
                 "media-typer": {
                   "version": "0.3.0",
@@ -164,6 +228,9 @@
                   "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz",
                   "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=",
                   "dev": true,
+                  "requires": {
+                    "mime-db": "1.27.0"
+                  },
                   "dependencies": {
                     "mime-db": {
                       "version": "1.27.0",
@@ -182,12 +249,27 @@
           "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
           "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
           "dev": true,
+          "requires": {
+            "anymatch": "1.3.0",
+            "async-each": "1.0.1",
+            "fsevents": "1.1.2",
+            "glob-parent": "2.0.0",
+            "inherits": "2.0.3",
+            "is-binary-path": "1.0.1",
+            "is-glob": "2.0.1",
+            "path-is-absolute": "1.0.1",
+            "readdirp": "2.1.0"
+          },
           "dependencies": {
             "anymatch": {
               "version": "1.3.0",
               "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz",
               "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=",
               "dev": true,
+              "requires": {
+                "arrify": "1.0.1",
+                "micromatch": "2.3.11"
+              },
               "dependencies": {
                 "arrify": {
                   "version": "1.0.1",
@@ -200,12 +282,30 @@
                   "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
                   "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
                   "dev": true,
+                  "requires": {
+                    "arr-diff": "2.0.0",
+                    "array-unique": "0.2.1",
+                    "braces": "1.8.5",
+                    "expand-brackets": "0.1.5",
+                    "extglob": "0.3.2",
+                    "filename-regex": "2.0.1",
+                    "is-extglob": "1.0.0",
+                    "is-glob": "2.0.1",
+                    "kind-of": "3.2.2",
+                    "normalize-path": "2.1.1",
+                    "object.omit": "2.0.1",
+                    "parse-glob": "3.0.4",
+                    "regex-cache": "0.4.3"
+                  },
                   "dependencies": {
                     "arr-diff": {
                       "version": "2.0.0",
                       "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
                       "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
                       "dev": true,
+                      "requires": {
+                        "arr-flatten": "1.1.0"
+                      },
                       "dependencies": {
                         "arr-flatten": {
                           "version": "1.1.0",
@@ -226,30 +326,51 @@
                       "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
                       "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
                       "dev": true,
+                      "requires": {
+                        "expand-range": "1.8.2",
+                        "preserve": "0.2.0",
+                        "repeat-element": "1.1.2"
+                      },
                       "dependencies": {
                         "expand-range": {
                           "version": "1.8.2",
                           "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
                           "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
                           "dev": true,
+                          "requires": {
+                            "fill-range": "2.2.3"
+                          },
                           "dependencies": {
                             "fill-range": {
                               "version": "2.2.3",
                               "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
                               "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
                               "dev": true,
+                              "requires": {
+                                "is-number": "2.1.0",
+                                "isobject": "2.1.0",
+                                "randomatic": "1.1.7",
+                                "repeat-element": "1.1.2",
+                                "repeat-string": "1.6.1"
+                              },
                               "dependencies": {
                                 "is-number": {
                                   "version": "2.1.0",
                                   "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
                                   "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
-                                  "dev": true
+                                  "dev": true,
+                                  "requires": {
+                                    "kind-of": "3.2.2"
+                                  }
                                 },
                                 "isobject": {
                                   "version": "2.1.0",
                                   "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
                                   "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
                                   "dev": true,
+                                  "requires": {
+                                    "isarray": "1.0.0"
+                                  },
                                   "dependencies": {
                                     "isarray": {
                                       "version": "1.0.0",
@@ -264,18 +385,28 @@
                                   "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
                                   "integrity": "sha1-x6vpzIuHwLqodrGf3oP9RkeX44w=",
                                   "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.2.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"
+                                          },
                                           "dependencies": {
                                             "is-buffer": {
                                               "version": "1.1.5",
@@ -292,6 +423,9 @@
                                       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
                                       "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
                                       "dev": true,
+                                      "requires": {
+                                        "is-buffer": "1.1.5"
+                                      },
                                       "dependencies": {
                                         "is-buffer": {
                                           "version": "1.1.5",
@@ -332,6 +466,9 @@
                       "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
                       "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
                       "dev": true,
+                      "requires": {
+                        "is-posix-bracket": "0.1.1"
+                      },
                       "dependencies": {
                         "is-posix-bracket": {
                           "version": "0.1.1",
@@ -345,7 +482,10 @@
                       "version": "0.3.2",
                       "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
                       "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
-                      "dev": true
+                      "dev": true,
+                      "requires": {
+                        "is-extglob": "1.0.0"
+                      }
                     },
                     "filename-regex": {
                       "version": "2.0.1",
@@ -364,6 +504,9 @@
                       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
                       "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                       "dev": true,
+                      "requires": {
+                        "is-buffer": "1.1.5"
+                      },
                       "dependencies": {
                         "is-buffer": {
                           "version": "1.1.5",
@@ -378,6 +521,9 @@
                       "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
                       "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
                       "dev": true,
+                      "requires": {
+                        "remove-trailing-separator": "1.0.2"
+                      },
                       "dependencies": {
                         "remove-trailing-separator": {
                           "version": "1.0.2",
@@ -392,12 +538,19 @@
                       "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
                       "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
                       "dev": true,
+                      "requires": {
+                        "for-own": "0.1.5",
+                        "is-extendable": "0.1.1"
+                      },
                       "dependencies": {
                         "for-own": {
                           "version": "0.1.5",
                           "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
                           "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
                           "dev": true,
+                          "requires": {
+                            "for-in": "1.0.2"
+                          },
                           "dependencies": {
                             "for-in": {
                               "version": "1.0.2",
@@ -420,12 +573,22 @@
                       "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
                       "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
                       "dev": true,
+                      "requires": {
+                        "glob-base": "0.3.0",
+                        "is-dotfile": "1.0.3",
+                        "is-extglob": "1.0.0",
+                        "is-glob": "2.0.1"
+                      },
                       "dependencies": {
                         "glob-base": {
                           "version": "0.3.0",
                           "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
                           "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
-                          "dev": true
+                          "dev": true,
+                          "requires": {
+                            "glob-parent": "2.0.0",
+                            "is-glob": "2.0.1"
+                          }
                         },
                         "is-dotfile": {
                           "version": "1.0.3",
@@ -440,12 +603,19 @@
                       "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz",
                       "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=",
                       "dev": true,
+                      "requires": {
+                        "is-equal-shallow": "0.1.3",
+                        "is-primitive": "2.0.0"
+                      },
                       "dependencies": {
                         "is-equal-shallow": {
                           "version": "0.1.3",
                           "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
                           "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
-                          "dev": true
+                          "dev": true,
+                          "requires": {
+                            "is-primitive": "2.0.0"
+                          }
                         },
                         "is-primitive": {
                           "version": "2.0.0",
@@ -471,6 +641,10 @@
               "integrity": "sha1-MoK3E/s62A7eDp/PRhG1qm/AM/Q=",
               "dev": true,
               "optional": true,
+              "requires": {
+                "nan": "2.6.2",
+                "node-pre-gyp": "0.6.36"
+              },
               "dependencies": {
                 "abbrev": {
                   "version": "1.1.0",
@@ -484,7 +658,11 @@
                   "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
                   "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "co": "4.6.0",
+                    "json-stable-stringify": "1.0.1"
+                  }
                 },
                 "ansi-regex": {
                   "version": "2.1.1",
@@ -504,7 +682,11 @@
                   "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
                   "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "delegates": "1.0.0",
+                    "readable-stream": "2.2.9"
+                  }
                 },
                 "asn1": {
                   "version": "0.2.3",
@@ -552,25 +734,38 @@
                   "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
                   "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "tweetnacl": "0.14.5"
+                  }
                 },
                 "block-stream": {
                   "version": "0.0.9",
                   "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
                   "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
-                  "dev": true
+                  "dev": true,
+                  "requires": {
+                    "inherits": "2.0.3"
+                  }
                 },
                 "boom": {
                   "version": "2.10.1",
                   "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
                   "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
-                  "dev": true
+                  "dev": true,
+                  "requires": {
+                    "hoek": "2.16.3"
+                  }
                 },
                 "brace-expansion": {
                   "version": "1.1.7",
                   "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz",
                   "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=",
-                  "dev": true
+                  "dev": true,
+                  "requires": {
+                    "balanced-match": "0.4.2",
+                    "concat-map": "0.0.1"
+                  }
                 },
                 "buffer-shims": {
                   "version": "1.0.0",
@@ -602,7 +797,10 @@
                   "version": "1.0.5",
                   "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
                   "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
-                  "dev": true
+                  "dev": true,
+                  "requires": {
+                    "delayed-stream": "1.0.0"
+                  }
                 },
                 "concat-map": {
                   "version": "0.0.1",
@@ -627,7 +825,10 @@
                   "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
                   "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "boom": "2.10.1"
+                  }
                 },
                 "dashdash": {
                   "version": "1.14.1",
@@ -635,6 +836,9 @@
                   "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
                   "dev": true,
                   "optional": true,
+                  "requires": {
+                    "assert-plus": "1.0.0"
+                  },
                   "dependencies": {
                     "assert-plus": {
                       "version": "1.0.0",
@@ -650,7 +854,10 @@
                   "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
                   "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "ms": "2.0.0"
+                  }
                 },
                 "deep-extend": {
                   "version": "0.4.2",
@@ -677,7 +884,10 @@
                   "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
                   "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "jsbn": "0.1.1"
+                  }
                 },
                 "extend": {
                   "version": "3.0.1",
@@ -704,7 +914,12 @@
                   "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
                   "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "asynckit": "0.4.0",
+                    "combined-stream": "1.0.5",
+                    "mime-types": "2.1.15"
+                  }
                 },
                 "fs.realpath": {
                   "version": "1.0.0",
@@ -716,21 +931,42 @@
                   "version": "1.0.11",
                   "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
                   "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
-                  "dev": true
+                  "dev": true,
+                  "requires": {
+                    "graceful-fs": "4.1.11",
+                    "inherits": "2.0.3",
+                    "mkdirp": "0.5.1",
+                    "rimraf": "2.6.1"
+                  }
                 },
                 "fstream-ignore": {
                   "version": "1.0.5",
                   "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz",
                   "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "fstream": "1.0.11",
+                    "inherits": "2.0.3",
+                    "minimatch": "3.0.4"
+                  }
                 },
                 "gauge": {
                   "version": "2.7.4",
                   "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
                   "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "aproba": "1.1.1",
+                    "console-control-strings": "1.1.0",
+                    "has-unicode": "2.0.1",
+                    "object-assign": "4.1.1",
+                    "signal-exit": "3.0.2",
+                    "string-width": "1.0.2",
+                    "strip-ansi": "3.0.1",
+                    "wide-align": "1.1.2"
+                  }
                 },
                 "getpass": {
                   "version": "0.1.7",
@@ -738,6 +974,9 @@
                   "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
                   "dev": true,
                   "optional": true,
+                  "requires": {
+                    "assert-plus": "1.0.0"
+                  },
                   "dependencies": {
                     "assert-plus": {
                       "version": "1.0.0",
@@ -752,7 +991,15 @@
                   "version": "7.1.2",
                   "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
                   "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
-                  "dev": true
+                  "dev": true,
+                  "requires": {
+                    "fs.realpath": "1.0.0",
+                    "inflight": "1.0.6",
+                    "inherits": "2.0.3",
+                    "minimatch": "3.0.4",
+                    "once": "1.4.0",
+                    "path-is-absolute": "1.0.1"
+                  }
                 },
                 "graceful-fs": {
                   "version": "4.1.11",
@@ -772,7 +1019,11 @@
                   "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
                   "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "ajv": "4.11.8",
+                    "har-schema": "1.0.5"
+                  }
                 },
                 "has-unicode": {
                   "version": "2.0.1",
@@ -786,7 +1037,13 @@
                   "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
                   "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "boom": "2.10.1",
+                    "cryptiles": "2.0.5",
+                    "hoek": "2.16.3",
+                    "sntp": "1.0.9"
+                  }
                 },
                 "hoek": {
                   "version": "2.16.3",
@@ -799,13 +1056,22 @@
                   "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
                   "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "assert-plus": "0.2.0",
+                    "jsprim": "1.4.0",
+                    "sshpk": "1.13.0"
+                  }
                 },
                 "inflight": {
                   "version": "1.0.6",
                   "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
                   "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-                  "dev": true
+                  "dev": true,
+                  "requires": {
+                    "once": "1.4.0",
+                    "wrappy": "1.0.2"
+                  }
                 },
                 "inherits": {
                   "version": "2.0.3",
@@ -824,7 +1090,10 @@
                   "version": "1.0.0",
                   "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
                   "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
-                  "dev": true
+                  "dev": true,
+                  "requires": {
+                    "number-is-nan": "1.0.1"
+                  }
                 },
                 "is-typedarray": {
                   "version": "1.0.0",
@@ -851,7 +1120,10 @@
                   "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz",
                   "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "jsbn": "0.1.1"
+                  }
                 },
                 "jsbn": {
                   "version": "0.1.1",
@@ -872,7 +1144,10 @@
                   "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
                   "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "jsonify": "0.0.0"
+                  }
                 },
                 "json-stringify-safe": {
                   "version": "5.0.1",
@@ -894,6 +1169,12 @@
                   "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=",
                   "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",
@@ -914,13 +1195,19 @@
                   "version": "2.1.15",
                   "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz",
                   "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=",
-                  "dev": true
+                  "dev": true,
+                  "requires": {
+                    "mime-db": "1.27.0"
+                  }
                 },
                 "minimatch": {
                   "version": "3.0.4",
                   "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
                   "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-                  "dev": true
+                  "dev": true,
+                  "requires": {
+                    "brace-expansion": "1.1.7"
+                  }
                 },
                 "minimist": {
                   "version": "0.0.8",
@@ -932,7 +1219,10 @@
                   "version": "0.5.1",
                   "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
                   "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
-                  "dev": true
+                  "dev": true,
+                  "requires": {
+                    "minimist": "0.0.8"
+                  }
                 },
                 "ms": {
                   "version": "2.0.0",
@@ -953,21 +1243,42 @@
                   "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz",
                   "integrity": "sha1-22BBEst04NR3VU6bUFsXq936t4Y=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "mkdirp": "0.5.1",
+                    "nopt": "4.0.1",
+                    "npmlog": "4.1.0",
+                    "rc": "1.2.1",
+                    "request": "2.81.0",
+                    "rimraf": "2.6.1",
+                    "semver": "5.3.0",
+                    "tar": "2.2.1",
+                    "tar-pack": "3.4.0"
+                  }
                 },
                 "nopt": {
                   "version": "4.0.1",
                   "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
                   "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "abbrev": "1.1.0",
+                    "osenv": "0.1.4"
+                  }
                 },
                 "npmlog": {
                   "version": "4.1.0",
                   "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz",
                   "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "are-we-there-yet": "1.1.4",
+                    "console-control-strings": "1.1.0",
+                    "gauge": "2.7.4",
+                    "set-blocking": "2.0.0"
+                  }
                 },
                 "number-is-nan": {
                   "version": "1.0.1",
@@ -993,7 +1304,10 @@
                   "version": "1.4.0",
                   "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
                   "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-                  "dev": true
+                  "dev": true,
+                  "requires": {
+                    "wrappy": "1.0.2"
+                  }
                 },
                 "os-homedir": {
                   "version": "1.0.2",
@@ -1014,7 +1328,11 @@
                   "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
                   "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "os-homedir": "1.0.2",
+                    "os-tmpdir": "1.0.2"
+                  }
                 },
                 "path-is-absolute": {
                   "version": "1.0.1",
@@ -1055,6 +1373,12 @@
                   "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=",
                   "dev": true,
                   "optional": true,
+                  "requires": {
+                    "deep-extend": "0.4.2",
+                    "ini": "1.3.4",
+                    "minimist": "1.2.0",
+                    "strip-json-comments": "2.0.1"
+                  },
                   "dependencies": {
                     "minimist": {
                       "version": "1.2.0",
@@ -1069,20 +1393,56 @@
                   "version": "2.2.9",
                   "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz",
                   "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=",
-                  "dev": true
+                  "dev": true,
+                  "requires": {
+                    "buffer-shims": "1.0.0",
+                    "core-util-is": "1.0.2",
+                    "inherits": "2.0.3",
+                    "isarray": "1.0.0",
+                    "process-nextick-args": "1.0.7",
+                    "string_decoder": "1.0.1",
+                    "util-deprecate": "1.0.2"
+                  }
                 },
                 "request": {
                   "version": "2.81.0",
                   "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
                   "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "aws-sign2": "0.6.0",
+                    "aws4": "1.6.0",
+                    "caseless": "0.12.0",
+                    "combined-stream": "1.0.5",
+                    "extend": "3.0.1",
+                    "forever-agent": "0.6.1",
+                    "form-data": "2.1.4",
+                    "har-validator": "4.2.1",
+                    "hawk": "3.1.3",
+                    "http-signature": "1.1.1",
+                    "is-typedarray": "1.0.0",
+                    "isstream": "0.1.2",
+                    "json-stringify-safe": "5.0.1",
+                    "mime-types": "2.1.15",
+                    "oauth-sign": "0.8.2",
+                    "performance-now": "0.2.0",
+                    "qs": "6.4.0",
+                    "safe-buffer": "5.0.1",
+                    "stringstream": "0.0.5",
+                    "tough-cookie": "2.3.2",
+                    "tunnel-agent": "0.6.0",
+                    "uuid": "3.0.1"
+                  }
                 },
                 "rimraf": {
                   "version": "2.6.1",
                   "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz",
                   "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=",
-                  "dev": true
+                  "dev": true,
+                  "requires": {
+                    "glob": "7.1.2"
+                  }
                 },
                 "safe-buffer": {
                   "version": "5.0.1",
@@ -1116,7 +1476,10 @@
                   "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
                   "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "hoek": "2.16.3"
+                  }
                 },
                 "sshpk": {
                   "version": "1.13.0",
@@ -1124,6 +1487,17 @@
                   "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=",
                   "dev": true,
                   "optional": true,
+                  "requires": {
+                    "asn1": "0.2.3",
+                    "assert-plus": "1.0.0",
+                    "bcrypt-pbkdf": "1.0.1",
+                    "dashdash": "1.14.1",
+                    "ecc-jsbn": "0.1.1",
+                    "getpass": "0.1.7",
+                    "jodid25519": "1.0.2",
+                    "jsbn": "0.1.1",
+                    "tweetnacl": "0.14.5"
+                  },
                   "dependencies": {
                     "assert-plus": {
                       "version": "1.0.0",
@@ -1134,17 +1508,25 @@
                     }
                   }
                 },
-                "string_decoder": {
-                  "version": "1.0.1",
-                  "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz",
-                  "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=",
-                  "dev": true
-                },
                 "string-width": {
                   "version": "1.0.2",
                   "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
                   "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
-                  "dev": true
+                  "dev": true,
+                  "requires": {
+                    "code-point-at": "1.1.0",
+                    "is-fullwidth-code-point": "1.0.0",
+                    "strip-ansi": "3.0.1"
+                  }
+                },
+                "string_decoder": {
+                  "version": "1.0.1",
+                  "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz",
+                  "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=",
+                  "dev": true,
+                  "requires": {
+                    "safe-buffer": "5.0.1"
+                  }
                 },
                 "stringstream": {
                   "version": "0.0.5",
@@ -1157,7 +1539,10 @@
                   "version": "3.0.1",
                   "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
                   "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-                  "dev": true
+                  "dev": true,
+                  "requires": {
+                    "ansi-regex": "2.1.1"
+                  }
                 },
                 "strip-json-comments": {
                   "version": "2.0.1",
@@ -1170,28 +1555,49 @@
                   "version": "2.2.1",
                   "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
                   "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
-                  "dev": true
+                  "dev": true,
+                  "requires": {
+                    "block-stream": "0.0.9",
+                    "fstream": "1.0.11",
+                    "inherits": "2.0.3"
+                  }
                 },
                 "tar-pack": {
                   "version": "3.4.0",
                   "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz",
                   "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "debug": "2.6.8",
+                    "fstream": "1.0.11",
+                    "fstream-ignore": "1.0.5",
+                    "once": "1.4.0",
+                    "readable-stream": "2.2.9",
+                    "rimraf": "2.6.1",
+                    "tar": "2.2.1",
+                    "uid-number": "0.0.6"
+                  }
                 },
                 "tough-cookie": {
                   "version": "2.3.2",
                   "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz",
                   "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "punycode": "1.4.1"
+                  }
                 },
                 "tunnel-agent": {
                   "version": "0.6.0",
                   "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
                   "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "safe-buffer": "5.0.1"
+                  }
                 },
                 "tweetnacl": {
                   "version": "0.14.5",
@@ -1225,14 +1631,20 @@
                   "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz",
                   "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "extsprintf": "1.0.2"
+                  }
                 },
                 "wide-align": {
                   "version": "1.1.2",
                   "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
                   "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
                   "dev": true,
-                  "optional": true
+                  "optional": true,
+                  "requires": {
+                    "string-width": "1.0.2"
+                  }
                 },
                 "wrappy": {
                   "version": "1.0.2",
@@ -1246,7 +1658,10 @@
               "version": "2.0.0",
               "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
               "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
-              "dev": true
+              "dev": true,
+              "requires": {
+                "is-glob": "2.0.1"
+              }
             },
             "inherits": {
               "version": "2.0.3",
@@ -1259,6 +1674,9 @@
               "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
               "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
               "dev": true,
+              "requires": {
+                "binary-extensions": "1.8.0"
+              },
               "dependencies": {
                 "binary-extensions": {
                   "version": "1.8.0",
@@ -1273,6 +1691,9 @@
               "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
               "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
               "dev": true,
+              "requires": {
+                "is-extglob": "1.0.0"
+              },
               "dependencies": {
                 "is-extglob": {
                   "version": "1.0.0",
@@ -1293,12 +1714,27 @@
               "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
               "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
               "dev": true,
+              "requires": {
+                "graceful-fs": "4.1.11",
+                "minimatch": "3.0.4",
+                "readable-stream": "2.3.3",
+                "set-immediate-shim": "1.0.1"
+              },
               "dependencies": {
                 "readable-stream": {
                   "version": "2.3.3",
                   "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
                   "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=",
                   "dev": true,
+                  "requires": {
+                    "core-util-is": "1.0.2",
+                    "inherits": "2.0.3",
+                    "isarray": "1.0.0",
+                    "process-nextick-args": "1.0.7",
+                    "safe-buffer": "5.1.1",
+                    "string_decoder": "1.0.3",
+                    "util-deprecate": "1.0.2"
+                  },
                   "dependencies": {
                     "core-util-is": {
                       "version": "1.0.2",
@@ -1328,7 +1764,10 @@
                       "version": "1.0.3",
                       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
                       "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=",
-                      "dev": true
+                      "dev": true,
+                      "requires": {
+                        "safe-buffer": "5.1.1"
+                      }
                     },
                     "util-deprecate": {
                       "version": "1.0.2",
@@ -1359,12 +1798,21 @@
           "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.2.tgz",
           "integrity": "sha1-aU6NIGgb/kkCgsiriGvpjwn0L+c=",
           "dev": true,
+          "requires": {
+            "debug": "2.6.7",
+            "finalhandler": "1.0.3",
+            "parseurl": "1.3.1",
+            "utils-merge": "1.0.0"
+          },
           "dependencies": {
             "debug": {
               "version": "2.6.7",
               "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz",
               "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=",
               "dev": true,
+              "requires": {
+                "ms": "2.0.0"
+              },
               "dependencies": {
                 "ms": {
                   "version": "2.0.0",
@@ -1379,6 +1827,15 @@
               "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz",
               "integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=",
               "dev": true,
+              "requires": {
+                "debug": "2.6.7",
+                "encodeurl": "1.0.1",
+                "escape-html": "1.0.3",
+                "on-finished": "2.3.0",
+                "parseurl": "1.3.1",
+                "statuses": "1.3.1",
+                "unpipe": "1.0.0"
+              },
               "dependencies": {
                 "encodeurl": {
                   "version": "1.0.1",
@@ -1397,6 +1854,9 @@
                   "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
                   "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
                   "dev": true,
+                  "requires": {
+                    "ee-first": "1.1.1"
+                  },
                   "dependencies": {
                     "ee-first": {
                       "version": "1.1.1",
@@ -1451,6 +1911,12 @@
           "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz",
           "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=",
           "dev": true,
+          "requires": {
+            "custom-event": "1.0.1",
+            "ent": "2.2.0",
+            "extend": "3.0.1",
+            "void-elements": "2.0.1"
+          },
           "dependencies": {
             "custom-event": {
               "version": "1.0.1",
@@ -1483,6 +1949,11 @@
           "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz",
           "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=",
           "dev": true,
+          "requires": {
+            "array-slice": "0.2.3",
+            "array-unique": "0.2.1",
+            "braces": "0.1.5"
+          },
           "dependencies": {
             "array-slice": {
               "version": "0.2.3",
@@ -1501,12 +1972,19 @@
               "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz",
               "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=",
               "dev": true,
+              "requires": {
+                "expand-range": "0.1.1"
+              },
               "dependencies": {
                 "expand-range": {
                   "version": "0.1.1",
                   "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz",
                   "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=",
                   "dev": true,
+                  "requires": {
+                    "is-number": "0.1.1",
+                    "repeat-string": "0.2.2"
+                  },
                   "dependencies": {
                     "is-number": {
                       "version": "0.1.1",
@@ -1531,6 +2009,14 @@
           "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
           "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=",
           "dev": true,
+          "requires": {
+            "fs.realpath": "1.0.0",
+            "inflight": "1.0.6",
+            "inherits": "2.0.3",
+            "minimatch": "3.0.4",
+            "once": "1.4.0",
+            "path-is-absolute": "1.0.1"
+          },
           "dependencies": {
             "fs.realpath": {
               "version": "1.0.0",
@@ -1543,6 +2029,10 @@
               "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
               "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
               "dev": true,
+              "requires": {
+                "once": "1.4.0",
+                "wrappy": "1.0.2"
+              },
               "dependencies": {
                 "wrappy": {
                   "version": "1.0.2",
@@ -1563,6 +2053,9 @@
               "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
               "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
               "dev": true,
+              "requires": {
+                "wrappy": "1.0.2"
+              },
               "dependencies": {
                 "wrappy": {
                   "version": "1.0.2",
@@ -1591,6 +2084,10 @@
           "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz",
           "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=",
           "dev": true,
+          "requires": {
+            "eventemitter3": "1.2.0",
+            "requires-port": "1.0.0"
+          },
           "dependencies": {
             "eventemitter3": {
               "version": "1.2.0",
@@ -1623,12 +2120,22 @@
           "resolved": "https://registry.npmjs.com/log4js/-/log4js-0.6.38.tgz",
           "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=",
           "dev": true,
+          "requires": {
+            "readable-stream": "1.0.34",
+            "semver": "4.3.6"
+          },
           "dependencies": {
             "readable-stream": {
               "version": "1.0.34",
               "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
               "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
               "dev": true,
+              "requires": {
+                "core-util-is": "1.0.2",
+                "inherits": "2.0.3",
+                "isarray": "0.0.1",
+                "string_decoder": "0.10.31"
+              },
               "dependencies": {
                 "core-util-is": {
                   "version": "1.0.2",
@@ -1675,12 +2182,19 @@
           "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
           "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
           "dev": true,
+          "requires": {
+            "brace-expansion": "1.1.8"
+          },
           "dependencies": {
             "brace-expansion": {
               "version": "1.1.8",
               "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
               "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
               "dev": true,
+              "requires": {
+                "balanced-match": "1.0.0",
+                "concat-map": "0.0.1"
+              },
               "dependencies": {
                 "balanced-match": {
                   "version": "1.0.0",
@@ -1703,6 +2217,10 @@
           "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
           "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
           "dev": true,
+          "requires": {
+            "minimist": "0.0.10",
+            "wordwrap": "0.0.3"
+          },
           "dependencies": {
             "minimist": {
               "version": "0.0.10",
@@ -1722,19 +2240,34 @@
           "version": "2.6.1",
           "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz",
           "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=",
-          "dev": true
+          "dev": true,
+          "requires": {
+            "glob": "7.1.2"
+          }
         },
         "socket.io": {
           "version": "1.7.4",
           "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.4.tgz",
           "integrity": "sha1-L37O3DORvy1cc+KR/iM+bjTU3QA=",
           "dev": true,
+          "requires": {
+            "debug": "2.3.3",
+            "engine.io": "1.8.4",
+            "has-binary": "0.1.7",
+            "object-assign": "4.1.0",
+            "socket.io-adapter": "0.5.0",
+            "socket.io-client": "1.7.4",
+            "socket.io-parser": "2.3.1"
+          },
           "dependencies": {
             "debug": {
               "version": "2.3.3",
               "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
               "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
               "dev": true,
+              "requires": {
+                "ms": "0.7.2"
+              },
               "dependencies": {
                 "ms": {
                   "version": "0.7.2",
@@ -1749,18 +2282,33 @@
               "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.4.tgz",
               "integrity": "sha1-d7zhK4Dl1gQpM3/sOw2vaR68kAM=",
               "dev": true,
+              "requires": {
+                "accepts": "1.3.3",
+                "base64id": "1.0.0",
+                "cookie": "0.3.1",
+                "debug": "2.3.3",
+                "engine.io-parser": "1.3.2",
+                "ws": "1.1.4"
+              },
               "dependencies": {
                 "accepts": {
                   "version": "1.3.3",
                   "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz",
                   "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=",
                   "dev": true,
+                  "requires": {
+                    "mime-types": "2.1.15",
+                    "negotiator": "0.6.1"
+                  },
                   "dependencies": {
                     "mime-types": {
                       "version": "2.1.15",
                       "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz",
                       "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=",
                       "dev": true,
+                      "requires": {
+                        "mime-db": "1.27.0"
+                      },
                       "dependencies": {
                         "mime-db": {
                           "version": "1.27.0",
@@ -1795,6 +2343,14 @@
                   "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz",
                   "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=",
                   "dev": true,
+                  "requires": {
+                    "after": "0.8.2",
+                    "arraybuffer.slice": "0.0.6",
+                    "base64-arraybuffer": "0.1.5",
+                    "blob": "0.0.4",
+                    "has-binary": "0.1.7",
+                    "wtf-8": "1.0.0"
+                  },
                   "dependencies": {
                     "after": {
                       "version": "0.8.2",
@@ -1833,6 +2389,10 @@
                   "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.4.tgz",
                   "integrity": "sha1-V/QNA2gy5fUFVmKjl8Tedu1mv2E=",
                   "dev": true,
+                  "requires": {
+                    "options": "0.0.6",
+                    "ultron": "1.0.2"
+                  },
                   "dependencies": {
                     "options": {
                       "version": "0.0.6",
@@ -1855,6 +2415,9 @@
               "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz",
               "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=",
               "dev": true,
+              "requires": {
+                "isarray": "0.0.1"
+              },
               "dependencies": {
                 "isarray": {
                   "version": "0.0.1",
@@ -1874,13 +2437,30 @@
               "version": "0.5.0",
               "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz",
               "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=",
-              "dev": true
+              "dev": true,
+              "requires": {
+                "debug": "2.3.3",
+                "socket.io-parser": "2.3.1"
+              }
             },
             "socket.io-client": {
               "version": "1.7.4",
               "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.4.tgz",
               "integrity": "sha1-7J+CA1btme9tNX8HVtZIcXvdQoE=",
               "dev": true,
+              "requires": {
+                "backo2": "1.0.2",
+                "component-bind": "1.0.0",
+                "component-emitter": "1.2.1",
+                "debug": "2.3.3",
+                "engine.io-client": "1.8.4",
+                "has-binary": "0.1.7",
+                "indexof": "0.0.1",
+                "object-component": "0.0.3",
+                "parseuri": "0.0.5",
+                "socket.io-parser": "2.3.1",
+                "to-array": "0.1.4"
+              },
               "dependencies": {
                 "backo2": {
                   "version": "1.0.2",
@@ -1905,6 +2485,20 @@
                   "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.4.tgz",
                   "integrity": "sha1-n+hd7iWFPKa6viW9KtaHEIY+kcI=",
                   "dev": true,
+                  "requires": {
+                    "component-emitter": "1.2.1",
+                    "component-inherit": "0.0.3",
+                    "debug": "2.3.3",
+                    "engine.io-parser": "1.3.2",
+                    "has-cors": "1.1.0",
+                    "indexof": "0.0.1",
+                    "parsejson": "0.0.3",
+                    "parseqs": "0.0.5",
+                    "parseuri": "0.0.5",
+                    "ws": "1.1.2",
+                    "xmlhttprequest-ssl": "1.5.3",
+                    "yeast": "0.1.2"
+                  },
                   "dependencies": {
                     "component-inherit": {
                       "version": "0.0.3",
@@ -1917,6 +2511,14 @@
                       "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz",
                       "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=",
                       "dev": true,
+                      "requires": {
+                        "after": "0.8.2",
+                        "arraybuffer.slice": "0.0.6",
+                        "base64-arraybuffer": "0.1.5",
+                        "blob": "0.0.4",
+                        "has-binary": "0.1.7",
+                        "wtf-8": "1.0.0"
+                      },
                       "dependencies": {
                         "after": {
                           "version": "0.8.2",
@@ -1961,12 +2563,18 @@
                       "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz",
                       "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=",
                       "dev": true,
+                      "requires": {
+                        "better-assert": "1.0.2"
+                      },
                       "dependencies": {
                         "better-assert": {
                           "version": "1.0.2",
                           "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
                           "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
                           "dev": true,
+                          "requires": {
+                            "callsite": "1.0.0"
+                          },
                           "dependencies": {
                             "callsite": {
                               "version": "1.0.0",
@@ -1983,12 +2591,18 @@
                       "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
                       "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
                       "dev": true,
+                      "requires": {
+                        "better-assert": "1.0.2"
+                      },
                       "dependencies": {
                         "better-assert": {
                           "version": "1.0.2",
                           "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
                           "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
                           "dev": true,
+                          "requires": {
+                            "callsite": "1.0.0"
+                          },
                           "dependencies": {
                             "callsite": {
                               "version": "1.0.0",
@@ -2005,6 +2619,10 @@
                       "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz",
                       "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=",
                       "dev": true,
+                      "requires": {
+                        "options": "0.0.6",
+                        "ultron": "1.0.2"
+                      },
                       "dependencies": {
                         "options": {
                           "version": "0.0.6",
@@ -2051,12 +2669,18 @@
                   "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
                   "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
                   "dev": true,
+                  "requires": {
+                    "better-assert": "1.0.2"
+                  },
                   "dependencies": {
                     "better-assert": {
                       "version": "1.0.2",
                       "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
                       "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
                       "dev": true,
+                      "requires": {
+                        "callsite": "1.0.0"
+                      },
                       "dependencies": {
                         "callsite": {
                           "version": "1.0.0",
@@ -2081,6 +2705,12 @@
               "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz",
               "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=",
               "dev": true,
+              "requires": {
+                "component-emitter": "1.1.2",
+                "debug": "2.2.0",
+                "isarray": "0.0.1",
+                "json3": "3.3.2"
+              },
               "dependencies": {
                 "component-emitter": {
                   "version": "1.1.2",
@@ -2093,6 +2723,9 @@
                   "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
                   "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
                   "dev": true,
+                  "requires": {
+                    "ms": "0.7.1"
+                  },
                   "dependencies": {
                     "ms": {
                       "version": "0.7.1",
@@ -2129,6 +2762,10 @@
           "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz",
           "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=",
           "dev": true,
+          "requires": {
+            "lru-cache": "2.2.4",
+            "tmp": "0.0.31"
+          },
           "dependencies": {
             "lru-cache": {
               "version": "2.2.4",
@@ -2141,6 +2778,9 @@
               "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz",
               "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=",
               "dev": true,
+              "requires": {
+                "os-tmpdir": "1.0.2"
+              },
               "dependencies": {
                 "os-tmpdir": {
                   "version": "1.0.2",
@@ -2159,24 +2799,60 @@
       "resolved": "https://registry.npmjs.org/karma-babel-preprocessor/-/karma-babel-preprocessor-6.0.1.tgz",
       "integrity": "sha1-euHT5klQ2+EfQht0BAqwj7WmbCE=",
       "dev": true,
+      "requires": {
+        "babel-core": "6.25.0"
+      },
       "dependencies": {
         "babel-core": {
           "version": "6.25.0",
           "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.25.0.tgz",
           "integrity": "sha1-fdQrBGPHQunVKW3rPsZ6kyLa1yk=",
           "dev": true,
+          "requires": {
+            "babel-code-frame": "6.22.0",
+            "babel-generator": "6.25.0",
+            "babel-helpers": "6.24.1",
+            "babel-messages": "6.23.0",
+            "babel-register": "6.24.1",
+            "babel-runtime": "6.23.0",
+            "babel-template": "6.25.0",
+            "babel-traverse": "6.25.0",
+            "babel-types": "6.25.0",
+            "babylon": "6.17.4",
+            "convert-source-map": "1.5.0",
+            "debug": "2.6.8",
+            "json5": "0.5.1",
+            "lodash": "4.17.4",
+            "minimatch": "3.0.4",
+            "path-is-absolute": "1.0.1",
+            "private": "0.1.7",
+            "slash": "1.0.0",
+            "source-map": "0.5.6"
+          },
           "dependencies": {
             "babel-code-frame": {
               "version": "6.22.0",
               "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz",
               "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=",
               "dev": true,
+              "requires": {
+                "chalk": "1.1.3",
+                "esutils": "2.0.2",
+                "js-tokens": "3.0.2"
+              },
               "dependencies": {
                 "chalk": {
                   "version": "1.1.3",
                   "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
                   "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
                   "dev": true,
+                  "requires": {
+                    "ansi-styles": "2.2.1",
+                    "escape-string-regexp": "1.0.5",
+                    "has-ansi": "2.0.0",
+                    "strip-ansi": "3.0.1",
+                    "supports-color": "2.0.0"
+                  },
                   "dependencies": {
                     "ansi-styles": {
                       "version": "2.2.1",
@@ -2195,6 +2871,9 @@
                       "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
                       "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
                       "dev": true,
+                      "requires": {
+                        "ansi-regex": "2.1.1"
+                      },
                       "dependencies": {
                         "ansi-regex": {
                           "version": "2.1.1",
@@ -2209,6 +2888,9 @@
                       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
                       "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
                       "dev": true,
+                      "requires": {
+                        "ansi-regex": "2.1.1"
+                      },
                       "dependencies": {
                         "ansi-regex": {
                           "version": "2.1.1",
@@ -2245,24 +2927,43 @@
               "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz",
               "integrity": "sha1-M6GvcNXyiQrrRlpKd5PB32qeqfw=",
               "dev": true,
+              "requires": {
+                "babel-messages": "6.23.0",
+                "babel-runtime": "6.23.0",
+                "babel-types": "6.25.0",
+                "detect-indent": "4.0.0",
+                "jsesc": "1.3.0",
+                "lodash": "4.17.4",
+                "source-map": "0.5.6",
+                "trim-right": "1.0.1"
+              },
               "dependencies": {
                 "detect-indent": {
                   "version": "4.0.0",
                   "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
                   "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
                   "dev": true,
+                  "requires": {
+                    "repeating": "2.0.1"
+                  },
                   "dependencies": {
                     "repeating": {
                       "version": "2.0.1",
                       "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
                       "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
                       "dev": true,
+                      "requires": {
+                        "is-finite": "1.0.2"
+                      },
                       "dependencies": {
                         "is-finite": {
                           "version": "1.0.2",
                           "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
                           "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
                           "dev": true,
+                          "requires": {
+                            "number-is-nan": "1.0.1"
+                          },
                           "dependencies": {
                             "number-is-nan": {
                               "version": "1.0.1",
@@ -2294,19 +2995,35 @@
               "version": "6.24.1",
               "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
               "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
-              "dev": true
+              "dev": true,
+              "requires": {
+                "babel-runtime": "6.23.0",
+                "babel-template": "6.25.0"
+              }
             },
             "babel-messages": {
               "version": "6.23.0",
               "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
               "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
-              "dev": true
+              "dev": true,
+              "requires": {
+                "babel-runtime": "6.23.0"
+              }
             },
             "babel-register": {
               "version": "6.24.1",
               "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.24.1.tgz",
               "integrity": "sha1-fhDhOi9xBlvfrVoXh7pFvKbe118=",
               "dev": true,
+              "requires": {
+                "babel-core": "6.25.0",
+                "babel-runtime": "6.23.0",
+                "core-js": "2.4.1",
+                "home-or-tmp": "2.0.0",
+                "lodash": "4.17.4",
+                "mkdirp": "0.5.1",
+                "source-map-support": "0.4.15"
+              },
               "dependencies": {
                 "core-js": {
                   "version": "2.4.1",
@@ -2319,6 +3036,10 @@
                   "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
                   "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
                   "dev": true,
+                  "requires": {
+                    "os-homedir": "1.0.2",
+                    "os-tmpdir": "1.0.2"
+                  },
                   "dependencies": {
                     "os-homedir": {
                       "version": "1.0.2",
@@ -2339,6 +3060,9 @@
                   "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
                   "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
                   "dev": true,
+                  "requires": {
+                    "minimist": "0.0.8"
+                  },
                   "dependencies": {
                     "minimist": {
                       "version": "0.0.8",
@@ -2352,7 +3076,10 @@
                   "version": "0.4.15",
                   "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz",
                   "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=",
-                  "dev": true
+                  "dev": true,
+                  "requires": {
+                    "source-map": "0.5.6"
+                  }
                 }
               }
             },
@@ -2361,6 +3088,10 @@
               "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz",
               "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=",
               "dev": true,
+              "requires": {
+                "core-js": "2.4.1",
+                "regenerator-runtime": "0.10.5"
+              },
               "dependencies": {
                 "core-js": {
                   "version": "2.4.1",
@@ -2380,13 +3111,31 @@
               "version": "6.25.0",
               "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz",
               "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=",
-              "dev": true
+              "dev": true,
+              "requires": {
+                "babel-runtime": "6.23.0",
+                "babel-traverse": "6.25.0",
+                "babel-types": "6.25.0",
+                "babylon": "6.17.4",
+                "lodash": "4.17.4"
+              }
             },
             "babel-traverse": {
               "version": "6.25.0",
               "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz",
               "integrity": "sha1-IldJfi/NGbie3BPEyROB+VEklvE=",
               "dev": true,
+              "requires": {
+                "babel-code-frame": "6.22.0",
+                "babel-messages": "6.23.0",
+                "babel-runtime": "6.23.0",
+                "babel-types": "6.25.0",
+                "babylon": "6.17.4",
+                "debug": "2.6.8",
+                "globals": "9.18.0",
+                "invariant": "2.2.2",
+                "lodash": "4.17.4"
+              },
               "dependencies": {
                 "globals": {
                   "version": "9.18.0",
@@ -2399,12 +3148,18 @@
                   "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
                   "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
                   "dev": true,
+                  "requires": {
+                    "loose-envify": "1.3.1"
+                  },
                   "dependencies": {
                     "loose-envify": {
                       "version": "1.3.1",
                       "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
                       "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
                       "dev": true,
+                      "requires": {
+                        "js-tokens": "3.0.2"
+                      },
                       "dependencies": {
                         "js-tokens": {
                           "version": "3.0.2",
@@ -2423,6 +3178,12 @@
               "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz",
               "integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=",
               "dev": true,
+              "requires": {
+                "babel-runtime": "6.23.0",
+                "esutils": "2.0.2",
+                "lodash": "4.17.4",
+                "to-fast-properties": "1.0.3"
+              },
               "dependencies": {
                 "esutils": {
                   "version": "2.0.2",
@@ -2455,6 +3216,9 @@
               "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
               "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
               "dev": true,
+              "requires": {
+                "ms": "2.0.0"
+              },
               "dependencies": {
                 "ms": {
                   "version": "2.0.0",
@@ -2481,12 +3245,19 @@
               "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
               "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
               "dev": true,
+              "requires": {
+                "brace-expansion": "1.1.8"
+              },
               "dependencies": {
                 "brace-expansion": {
                   "version": "1.1.8",
                   "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
                   "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
                   "dev": true,
+                  "requires": {
+                    "balanced-match": "1.0.0",
+                    "concat-map": "0.0.1"
+                  },
                   "dependencies": {
                     "balanced-match": {
                       "version": "1.0.0",
@@ -2537,12 +3308,19 @@
       "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-0.2.3.tgz",
       "integrity": "sha1-TG1wDRY6nTTGGO/YeRi+SeekqMk=",
       "dev": true,
+      "requires": {
+        "fs-access": "1.0.1",
+        "which": "1.2.14"
+      },
       "dependencies": {
         "fs-access": {
           "version": "1.0.1",
           "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz",
           "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=",
           "dev": true,
+          "requires": {
+            "null-check": "1.0.0"
+          },
           "dependencies": {
             "null-check": {
               "version": "1.0.0",
@@ -2557,6 +3335,9 @@
           "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz",
           "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=",
           "dev": true,
+          "requires": {
+            "isexe": "2.0.0"
+          },
           "dependencies": {
             "isexe": {
               "version": "2.0.0",
@@ -2573,12 +3354,22 @@
       "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-0.5.5.tgz",
       "integrity": "sha1-sNWLECXVnVxmICYxhvHVj11TSMU=",
       "dev": true,
+      "requires": {
+        "dateformat": "1.0.12",
+        "istanbul": "0.4.5",
+        "minimatch": "3.0.4",
+        "source-map": "0.5.6"
+      },
       "dependencies": {
         "dateformat": {
           "version": "1.0.12",
           "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
           "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
           "dev": true,
+          "requires": {
+            "get-stdin": "4.0.1",
+            "meow": "3.7.0"
+          },
           "dependencies": {
             "get-stdin": {
               "version": "4.0.1",
@@ -2591,12 +3382,28 @@
               "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
               "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
               "dev": true,
+              "requires": {
+                "camelcase-keys": "2.1.0",
+                "decamelize": "1.2.0",
+                "loud-rejection": "1.6.0",
+                "map-obj": "1.0.1",
+                "minimist": "1.2.0",
+                "normalize-package-data": "2.4.0",
+                "object-assign": "4.1.1",
+                "read-pkg-up": "1.0.1",
+                "redent": "1.0.0",
+                "trim-newlines": "1.0.0"
+              },
               "dependencies": {
                 "camelcase-keys": {
                   "version": "2.1.0",
                   "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
                   "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
                   "dev": true,
+                  "requires": {
+                    "camelcase": "2.1.1",
+                    "map-obj": "1.0.1"
+                  },
                   "dependencies": {
                     "camelcase": {
                       "version": "2.1.1",
@@ -2617,12 +3424,19 @@
                   "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
                   "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
                   "dev": true,
+                  "requires": {
+                    "currently-unhandled": "0.4.1",
+                    "signal-exit": "3.0.2"
+                  },
                   "dependencies": {
                     "currently-unhandled": {
                       "version": "0.4.1",
                       "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
                       "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
                       "dev": true,
+                      "requires": {
+                        "array-find-index": "1.0.2"
+                      },
                       "dependencies": {
                         "array-find-index": {
                           "version": "1.0.2",
@@ -2657,6 +3471,12 @@
                   "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
                   "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=",
                   "dev": true,
+                  "requires": {
+                    "hosted-git-info": "2.5.0",
+                    "is-builtin-module": "1.0.0",
+                    "semver": "5.3.0",
+                    "validate-npm-package-license": "3.0.1"
+                  },
                   "dependencies": {
                     "hosted-git-info": {
                       "version": "2.5.0",
@@ -2669,6 +3489,9 @@
                       "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
                       "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
                       "dev": true,
+                      "requires": {
+                        "builtin-modules": "1.1.1"
+                      },
                       "dependencies": {
                         "builtin-modules": {
                           "version": "1.1.1",
@@ -2689,12 +3512,19 @@
                       "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
                       "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
                       "dev": true,
+                      "requires": {
+                        "spdx-correct": "1.0.2",
+                        "spdx-expression-parse": "1.0.4"
+                      },
                       "dependencies": {
                         "spdx-correct": {
                           "version": "1.0.2",
                           "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
                           "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
                           "dev": true,
+                          "requires": {
+                            "spdx-license-ids": "1.2.2"
+                          },
                           "dependencies": {
                             "spdx-license-ids": {
                               "version": "1.2.2",
@@ -2725,24 +3555,38 @@
                   "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
                   "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
                   "dev": true,
+                  "requires": {
+                    "find-up": "1.1.2",
+                    "read-pkg": "1.1.0"
+                  },
                   "dependencies": {
                     "find-up": {
                       "version": "1.1.2",
                       "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
                       "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
                       "dev": true,
+                      "requires": {
+                        "path-exists": "2.1.0",
+                        "pinkie-promise": "2.0.1"
+                      },
                       "dependencies": {
                         "path-exists": {
                           "version": "2.1.0",
                           "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
                           "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-                          "dev": true
+                          "dev": true,
+                          "requires": {
+                            "pinkie-promise": "2.0.1"
+                          }
                         },
                         "pinkie-promise": {
                           "version": "2.0.1",
                           "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
                           "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
                           "dev": true,
+                          "requires": {
+                            "pinkie": "2.0.4"
+                          },
                           "dependencies": {
                             "pinkie": {
                               "version": "2.0.4",
@@ -2759,12 +3603,24 @@
                       "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
                       "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
                       "dev": true,
+                      "requires": {
+                        "load-json-file": "1.1.0",
+                        "normalize-package-data": "2.4.0",
+                        "path-type": "1.1.0"
+                      },
                       "dependencies": {
                         "load-json-file": {
                           "version": "1.1.0",
                           "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
                           "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
                           "dev": true,
+                          "requires": {
+                            "graceful-fs": "4.1.11",
+                            "parse-json": "2.2.0",
+                            "pify": "2.3.0",
+                            "pinkie-promise": "2.0.1",
+                            "strip-bom": "2.0.0"
+                          },
                           "dependencies": {
                             "graceful-fs": {
                               "version": "4.1.11",
@@ -2777,12 +3633,18 @@
                               "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
                               "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
                               "dev": true,
+                              "requires": {
+                                "error-ex": "1.3.1"
+                              },
                               "dependencies": {
                                 "error-ex": {
                                   "version": "1.3.1",
                                   "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
                                   "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
                                   "dev": true,
+                                  "requires": {
+                                    "is-arrayish": "0.2.1"
+                                  },
                                   "dependencies": {
                                     "is-arrayish": {
                                       "version": "0.2.1",
@@ -2805,6 +3667,9 @@
                               "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
                               "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
                               "dev": true,
+                              "requires": {
+                                "pinkie": "2.0.4"
+                              },
                               "dependencies": {
                                 "pinkie": {
                                   "version": "2.0.4",
@@ -2819,6 +3684,9 @@
                               "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
                               "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
                               "dev": true,
+                              "requires": {
+                                "is-utf8": "0.2.1"
+                              },
                               "dependencies": {
                                 "is-utf8": {
                                   "version": "0.2.1",
@@ -2835,6 +3703,11 @@
                           "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
                           "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
                           "dev": true,
+                          "requires": {
+                            "graceful-fs": "4.1.11",
+                            "pify": "2.3.0",
+                            "pinkie-promise": "2.0.1"
+                          },
                           "dependencies": {
                             "graceful-fs": {
                               "version": "4.1.11",
@@ -2853,6 +3726,9 @@
                               "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
                               "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
                               "dev": true,
+                              "requires": {
+                                "pinkie": "2.0.4"
+                              },
                               "dependencies": {
                                 "pinkie": {
                                   "version": "2.0.4",
@@ -2873,24 +3749,37 @@
                   "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
                   "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
                   "dev": true,
+                  "requires": {
+                    "indent-string": "2.1.0",
+                    "strip-indent": "1.0.1"
+                  },
                   "dependencies": {
                     "indent-string": {
                       "version": "2.1.0",
                       "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
                       "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
                       "dev": true,
+                      "requires": {
+                        "repeating": "2.0.1"
+                      },
                       "dependencies": {
                         "repeating": {
                           "version": "2.0.1",
                           "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
                           "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
                           "dev": true,
+                          "requires": {
+                            "is-finite": "1.0.2"
+                          },
                           "dependencies": {
                             "is-finite": {
                               "version": "1.0.2",
                               "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
                               "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
                               "dev": true,
+                              "requires": {
+                                "number-is-nan": "1.0.1"
+                              },
                               "dependencies": {
                                 "number-is-nan": {
                                   "version": "1.0.1",
@@ -2908,7 +3797,10 @@
                       "version": "1.0.1",
                       "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
                       "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
-                      "dev": true
+                      "dev": true,
+                      "requires": {
+                        "get-stdin": "4.0.1"
+                      }
                     }
                   }
                 },
@@ -2927,6 +3819,22 @@
           "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz",
           "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=",
           "dev": true,
+          "requires": {
+            "abbrev": "1.0.9",
+            "async": "1.5.2",
+            "escodegen": "1.8.1",
+            "esprima": "2.7.3",
+            "glob": "5.0.15",
+            "handlebars": "4.0.10",
+            "js-yaml": "3.9.0",
+            "mkdirp": "0.5.1",
+            "nopt": "3.0.6",
+            "once": "1.4.0",
+            "resolve": "1.1.7",
+            "supports-color": "3.2.3",
+            "which": "1.2.14",
+            "wordwrap": "1.0.0"
+          },
           "dependencies": {
             "abbrev": {
               "version": "1.0.9",
@@ -2945,6 +3853,13 @@
               "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
               "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
               "dev": true,
+              "requires": {
+                "esprima": "2.7.3",
+                "estraverse": "1.9.3",
+                "esutils": "2.0.2",
+                "optionator": "0.8.2",
+                "source-map": "0.2.0"
+              },
               "dependencies": {
                 "estraverse": {
                   "version": "1.9.3",
@@ -2963,6 +3878,14 @@
                   "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
                   "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
                   "dev": true,
+                  "requires": {
+                    "deep-is": "0.1.3",
+                    "fast-levenshtein": "2.0.6",
+                    "levn": "0.3.0",
+                    "prelude-ls": "1.1.2",
+                    "type-check": "0.3.2",
+                    "wordwrap": "1.0.0"
+                  },
                   "dependencies": {
                     "deep-is": {
                       "version": "0.1.3",
@@ -2980,7 +3903,11 @@
                       "version": "0.3.0",
                       "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
                       "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
-                      "dev": true
+                      "dev": true,
+                      "requires": {
+                        "prelude-ls": "1.1.2",
+                        "type-check": "0.3.2"
+                      }
                     },
                     "prelude-ls": {
                       "version": "1.1.2",
@@ -2992,7 +3919,10 @@
                       "version": "0.3.2",
                       "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
                       "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
-                      "dev": true
+                      "dev": true,
+                      "requires": {
+                        "prelude-ls": "1.1.2"
+                      }
                     }
                   }
                 },
@@ -3002,6 +3932,9 @@
                   "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
                   "dev": true,
                   "optional": true,
+                  "requires": {
+                    "amdefine": "1.0.1"
+                  },
                   "dependencies": {
                     "amdefine": {
                       "version": "1.0.1",
@@ -3025,12 +3958,23 @@
               "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
               "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
               "dev": true,
+              "requires": {
+                "inflight": "1.0.6",
+                "inherits": "2.0.3",
+                "minimatch": "3.0.4",
+                "once": "1.4.0",
+                "path-is-absolute": "1.0.1"
+              },
               "dependencies": {
                 "inflight": {
                   "version": "1.0.6",
                   "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
                   "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
                   "dev": true,
+                  "requires": {
+                    "once": "1.4.0",
+                    "wrappy": "1.0.2"
+                  },
                   "dependencies": {
                     "wrappy": {
                       "version": "1.0.2",
@@ -3059,12 +4003,22 @@
               "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz",
               "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=",
               "dev": true,
+              "requires": {
+                "async": "1.5.2",
+                "optimist": "0.6.1",
+                "source-map": "0.4.4",
+                "uglify-js": "2.8.29"
+              },
               "dependencies": {
                 "optimist": {
                   "version": "0.6.1",
                   "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
                   "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
                   "dev": true,
+                  "requires": {
+                    "minimist": "0.0.10",
+                    "wordwrap": "0.0.3"
+                  },
                   "dependencies": {
                     "minimist": {
                       "version": "0.0.10",
@@ -3085,6 +4039,9 @@
                   "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
                   "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
                   "dev": true,
+                  "requires": {
+                    "amdefine": "1.0.1"
+                  },
                   "dependencies": {
                     "amdefine": {
                       "version": "1.0.1",
@@ -3100,6 +4057,11 @@
                   "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
                   "dev": true,
                   "optional": true,
+                  "requires": {
+                    "source-map": "0.5.6",
+                    "uglify-to-browserify": "1.0.2",
+                    "yargs": "3.10.0"
+                  },
                   "dependencies": {
                     "source-map": {
                       "version": "0.5.6",
@@ -3121,6 +4083,12 @@
                       "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
                       "dev": true,
                       "optional": true,
+                      "requires": {
+                        "camelcase": "1.2.1",
+                        "cliui": "2.1.0",
+                        "decamelize": "1.2.0",
+                        "window-size": "0.1.0"
+                      },
                       "dependencies": {
                         "camelcase": {
                           "version": "1.2.1",
@@ -3135,6 +4103,11 @@
                           "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
                           "dev": true,
                           "optional": true,
+                          "requires": {
+                            "center-align": "0.1.3",
+                            "right-align": "0.1.3",
+                            "wordwrap": "0.0.2"
+                          },
                           "dependencies": {
                             "center-align": {
                               "version": "0.1.3",
@@ -3142,6 +4115,10 @@
                               "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
                               "dev": true,
                               "optional": true,
+                              "requires": {
+                                "align-text": "0.1.4",
+                                "lazy-cache": "1.0.4"
+                              },
                               "dependencies": {
                                 "align-text": {
                                   "version": "0.1.4",
@@ -3149,6 +4126,11 @@
                                   "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
                                   "dev": true,
                                   "optional": true,
+                                  "requires": {
+                                    "kind-of": "3.2.2",
+                                    "longest": "1.0.1",
+                                    "repeat-string": "1.6.1"
+                                  },
                                   "dependencies": {
                                     "kind-of": {
                                       "version": "3.2.2",
@@ -3156,6 +4138,9 @@
                                       "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                                       "dev": true,
                                       "optional": true,
+                                      "requires": {
+                                        "is-buffer": "1.1.5"
+                                      },
                                       "dependencies": {
                                         "is-buffer": {
                                           "version": "1.1.5",
@@ -3197,6 +4182,9 @@
                               "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
                               "dev": true,
                               "optional": true,
+                              "requires": {
+                                "align-text": "0.1.4"
+                              },
                               "dependencies": {
                                 "align-text": {
                                   "version": "0.1.4",
@@ -3204,6 +4192,11 @@
                                   "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
                                   "dev": true,
                                   "optional": true,
+                                  "requires": {
+                                    "kind-of": "3.2.2",
+                                    "longest": "1.0.1",
+                                    "repeat-string": "1.6.1"
+                                  },
                                   "dependencies": {
                                     "kind-of": {
                                       "version": "3.2.2",
@@ -3211,6 +4204,9 @@
                                       "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                                       "dev": true,
                                       "optional": true,
+                                      "requires": {
+                                        "is-buffer": "1.1.5"
+                                      },
                                       "dependencies": {
                                         "is-buffer": {
                                           "version": "1.1.5",
@@ -3273,12 +4269,19 @@
               "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.0.tgz",
               "integrity": "sha1-T/u/JcKsljuCmdx02n43QN4cGM4=",
               "dev": true,
+              "requires": {
+                "argparse": "1.0.9",
+                "esprima": "4.0.0"
+              },
               "dependencies": {
                 "argparse": {
                   "version": "1.0.9",
                   "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
                   "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
                   "dev": true,
+                  "requires": {
+                    "sprintf-js": "1.0.3"
+                  },
                   "dependencies": {
                     "sprintf-js": {
                       "version": "1.0.3",
@@ -3301,6 +4304,9 @@
               "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
               "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
               "dev": true,
+              "requires": {
+                "minimist": "0.0.8"
+              },
               "dependencies": {
                 "minimist": {
                   "version": "0.0.8",
@@ -3314,13 +4320,19 @@
               "version": "3.0.6",
               "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
               "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
-              "dev": true
+              "dev": true,
+              "requires": {
+                "abbrev": "1.0.9"
+              }
             },
             "once": {
               "version": "1.4.0",
               "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
               "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
               "dev": true,
+              "requires": {
+                "wrappy": "1.0.2"
+              },
               "dependencies": {
                 "wrappy": {
                   "version": "1.0.2",
@@ -3341,6 +4353,9 @@
               "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
               "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
               "dev": true,
+              "requires": {
+                "has-flag": "1.0.0"
+              },
               "dependencies": {
                 "has-flag": {
                   "version": "1.0.0",
@@ -3355,6 +4370,9 @@
               "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz",
               "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=",
               "dev": true,
+              "requires": {
+                "isexe": "2.0.0"
+              },
               "dependencies": {
                 "isexe": {
                   "version": "2.0.0",
@@ -3377,12 +4395,19 @@
           "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
           "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
           "dev": true,
+          "requires": {
+            "brace-expansion": "1.1.8"
+          },
           "dependencies": {
             "brace-expansion": {
               "version": "1.1.8",
               "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
               "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
               "dev": true,
+              "requires": {
+                "balanced-match": "1.0.0",
+                "concat-map": "0.0.1"
+              },
               "dependencies": {
                 "balanced-match": {
                   "version": "1.0.0",
@@ -3419,6 +4444,10 @@
       "resolved": "https://registry.npmjs.org/karma-junit-reporter/-/karma-junit-reporter-0.4.2.tgz",
       "integrity": "sha1-SSojZyj+TJKqz0GfzQEQpDJ+nX8=",
       "dev": true,
+      "requires": {
+        "path-is-absolute": "1.0.1",
+        "xmlbuilder": "3.1.0"
+      },
       "dependencies": {
         "path-is-absolute": {
           "version": "1.0.1",
@@ -3431,6 +4460,9 @@
           "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-3.1.0.tgz",
           "integrity": "sha1-LIaIjy1OrehQ+jjKf3Ij9yCVFuE=",
           "dev": true,
+          "requires": {
+            "lodash": "3.10.1"
+          },
           "dependencies": {
             "lodash": {
               "version": "3.10.1",
@@ -3447,12 +4479,23 @@
       "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-1.3.0.tgz",
       "integrity": "sha1-r2pGwIqcVcf9OUw6WqJhetoVhKU=",
       "dev": true,
+      "requires": {
+        "chalk": "1.1.1",
+        "karma": "0.13.22"
+      },
       "dependencies": {
         "chalk": {
           "version": "1.1.1",
           "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz",
           "integrity": "sha1-UJr7ZwZudJn36zU1x3RFdyri0Bk=",
           "dev": true,
+          "requires": {
+            "ansi-styles": "2.2.1",
+            "escape-string-regexp": "1.0.5",
+            "has-ansi": "2.0.0",
+            "strip-ansi": "3.0.1",
+            "supports-color": "2.0.0"
+          },
           "dependencies": {
             "ansi-styles": {
               "version": "2.2.1",
@@ -3471,6 +4514,9 @@
               "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
               "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
               "dev": true,
+              "requires": {
+                "ansi-regex": "2.1.1"
+              },
               "dependencies": {
                 "ansi-regex": {
                   "version": "2.1.1",
@@ -3485,6 +4531,9 @@
               "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
               "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
               "dev": true,
+              "requires": {
+                "ansi-regex": "2.1.1"
+              },
               "dependencies": {
                 "ansi-regex": {
                   "version": "2.1.1",
@@ -3515,6 +4564,9 @@
       "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-0.2.3.tgz",
       "integrity": "sha1-d/aCQ/rXhSxbMhvPnWkfEiPMCAk=",
       "dev": true,
+      "requires": {
+        "lodash": "3.10.1"
+      },
       "dependencies": {
         "lodash": {
           "version": "3.10.1",
@@ -3527,30 +4579,53 @@
     "ms": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+      "dev": true
     },
     "nan": {
       "version": "2.7.0",
       "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz",
-      "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY="
+      "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=",
+      "dev": true
     },
     "phantomjs": {
       "version": "2.1.7",
       "resolved": "https://registry.npmjs.org/phantomjs/-/phantomjs-2.1.7.tgz",
       "integrity": "sha1-xpEPZ5NcNyhbYRQyn8LyfV8+MTQ=",
       "dev": true,
+      "requires": {
+        "extract-zip": "1.5.0",
+        "fs-extra": "0.26.7",
+        "hasha": "2.2.0",
+        "kew": "0.7.0",
+        "progress": "1.1.8",
+        "request": "2.67.0",
+        "request-progress": "2.0.1",
+        "which": "1.2.14"
+      },
       "dependencies": {
         "extract-zip": {
           "version": "1.5.0",
           "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.5.0.tgz",
           "integrity": "sha1-ksz22B73Cp+kwXRxFMzvbYaIpsQ=",
           "dev": true,
+          "requires": {
+            "concat-stream": "1.5.0",
+            "debug": "0.7.4",
+            "mkdirp": "0.5.0",
+            "yauzl": "2.4.1"
+          },
           "dependencies": {
             "concat-stream": {
               "version": "1.5.0",
               "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.0.tgz",
               "integrity": "sha1-U/fUPFHF5D+ByP3QMyHGMb5o1hE=",
               "dev": true,
+              "requires": {
+                "inherits": "2.0.3",
+                "readable-stream": "2.0.6",
+                "typedarray": "0.0.6"
+              },
               "dependencies": {
                 "inherits": {
                   "version": "2.0.3",
@@ -3563,6 +4638,14 @@
                   "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
                   "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
                   "dev": true,
+                  "requires": {
+                    "core-util-is": "1.0.2",
+                    "inherits": "2.0.3",
+                    "isarray": "1.0.0",
+                    "process-nextick-args": "1.0.7",
+                    "string_decoder": "0.10.31",
+                    "util-deprecate": "1.0.2"
+                  },
                   "dependencies": {
                     "core-util-is": {
                       "version": "1.0.2",
@@ -3615,6 +4698,9 @@
               "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
               "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=",
               "dev": true,
+              "requires": {
+                "minimist": "0.0.8"
+              },
               "dependencies": {
                 "minimist": {
                   "version": "0.0.8",
@@ -3629,12 +4715,18 @@
               "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
               "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
               "dev": true,
+              "requires": {
+                "fd-slicer": "1.0.1"
+              },
               "dependencies": {
                 "fd-slicer": {
                   "version": "1.0.1",
                   "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
                   "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
                   "dev": true,
+                  "requires": {
+                    "pend": "1.2.0"
+                  },
                   "dependencies": {
                     "pend": {
                       "version": "1.2.0",
@@ -3653,6 +4745,13 @@
           "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz",
           "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=",
           "dev": true,
+          "requires": {
+            "graceful-fs": "4.1.11",
+            "jsonfile": "2.4.0",
+            "klaw": "1.3.1",
+            "path-is-absolute": "1.0.1",
+            "rimraf": "2.6.1"
+          },
           "dependencies": {
             "graceful-fs": {
               "version": "4.1.11",
@@ -3664,13 +4763,19 @@
               "version": "2.4.0",
               "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
               "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
-              "dev": true
+              "dev": true,
+              "requires": {
+                "graceful-fs": "4.1.11"
+              }
             },
             "klaw": {
               "version": "1.3.1",
               "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
               "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
-              "dev": true
+              "dev": true,
+              "requires": {
+                "graceful-fs": "4.1.11"
+              }
             },
             "path-is-absolute": {
               "version": "1.0.1",
@@ -3683,12 +4788,23 @@
               "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz",
               "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=",
               "dev": true,
+              "requires": {
+                "glob": "7.1.2"
+              },
               "dependencies": {
                 "glob": {
                   "version": "7.1.2",
                   "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
                   "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=",
                   "dev": true,
+                  "requires": {
+                    "fs.realpath": "1.0.0",
+                    "inflight": "1.0.6",
+                    "inherits": "2.0.3",
+                    "minimatch": "3.0.4",
+                    "once": "1.4.0",
+                    "path-is-absolute": "1.0.1"
+                  },
                   "dependencies": {
                     "fs.realpath": {
                       "version": "1.0.0",
@@ -3701,6 +4817,10 @@
                       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
                       "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
                       "dev": true,
+                      "requires": {
+                        "once": "1.4.0",
+                        "wrappy": "1.0.2"
+                      },
                       "dependencies": {
                         "wrappy": {
                           "version": "1.0.2",
@@ -3721,12 +4841,19 @@
                       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
                       "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
                       "dev": true,
+                      "requires": {
+                        "brace-expansion": "1.1.8"
+                      },
                       "dependencies": {
                         "brace-expansion": {
                           "version": "1.1.8",
                           "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
                           "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
                           "dev": true,
+                          "requires": {
+                            "balanced-match": "1.0.0",
+                            "concat-map": "0.0.1"
+                          },
                           "dependencies": {
                             "balanced-match": {
                               "version": "1.0.0",
@@ -3749,6 +4876,9 @@
                       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
                       "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
                       "dev": true,
+                      "requires": {
+                        "wrappy": "1.0.2"
+                      },
                       "dependencies": {
                         "wrappy": {
                           "version": "1.0.2",
@@ -3769,6 +4899,10 @@
           "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz",
           "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=",
           "dev": true,
+          "requires": {
+            "is-stream": "1.1.0",
+            "pinkie-promise": "2.0.1"
+          },
           "dependencies": {
             "is-stream": {
               "version": "1.1.0",
@@ -3781,6 +4915,9 @@
               "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
               "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
               "dev": true,
+              "requires": {
+                "pinkie": "2.0.4"
+              },
               "dependencies": {
                 "pinkie": {
                   "version": "2.0.4",
@@ -3809,6 +4946,28 @@
           "resolved": "https://registry.npmjs.org/request/-/request-2.67.0.tgz",
           "integrity": "sha1-ivdHgOK/EeoK6aqWXBHxGv0nJ0I=",
           "dev": true,
+          "requires": {
+            "aws-sign2": "0.6.0",
+            "bl": "1.0.3",
+            "caseless": "0.11.0",
+            "combined-stream": "1.0.5",
+            "extend": "3.0.1",
+            "forever-agent": "0.6.1",
+            "form-data": "1.0.1",
+            "har-validator": "2.0.6",
+            "hawk": "3.1.3",
+            "http-signature": "1.1.1",
+            "is-typedarray": "1.0.0",
+            "isstream": "0.1.2",
+            "json-stringify-safe": "5.0.1",
+            "mime-types": "2.1.15",
+            "node-uuid": "1.4.8",
+            "oauth-sign": "0.8.2",
+            "qs": "5.2.1",
+            "stringstream": "0.0.5",
+            "tough-cookie": "2.2.2",
+            "tunnel-agent": "0.4.3"
+          },
           "dependencies": {
             "aws-sign2": {
               "version": "0.6.0",
@@ -3821,12 +4980,23 @@
               "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.3.tgz",
               "integrity": "sha1-/FQhoo/UImA2w7OJGmaiW8ZNIm4=",
               "dev": true,
+              "requires": {
+                "readable-stream": "2.0.6"
+              },
               "dependencies": {
                 "readable-stream": {
                   "version": "2.0.6",
                   "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
                   "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
                   "dev": true,
+                  "requires": {
+                    "core-util-is": "1.0.2",
+                    "inherits": "2.0.3",
+                    "isarray": "1.0.0",
+                    "process-nextick-args": "1.0.7",
+                    "string_decoder": "0.10.31",
+                    "util-deprecate": "1.0.2"
+                  },
                   "dependencies": {
                     "core-util-is": {
                       "version": "1.0.2",
@@ -3879,6 +5049,9 @@
               "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
               "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
               "dev": true,
+              "requires": {
+                "delayed-stream": "1.0.0"
+              },
               "dependencies": {
                 "delayed-stream": {
                   "version": "1.0.0",
@@ -3905,12 +5078,20 @@
               "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz",
               "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=",
               "dev": true,
+              "requires": {
+                "async": "2.5.0",
+                "combined-stream": "1.0.5",
+                "mime-types": "2.1.15"
+              },
               "dependencies": {
                 "async": {
                   "version": "2.5.0",
                   "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz",
                   "integrity": "sha1-hDGQ/WtzV6C54clW7d3V7IRitU0=",
                   "dev": true,
+                  "requires": {
+                    "lodash": "4.17.4"
+                  },
                   "dependencies": {
                     "lodash": {
                       "version": "4.17.4",
@@ -3927,12 +5108,25 @@
               "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
               "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
               "dev": true,
+              "requires": {
+                "chalk": "1.1.3",
+                "commander": "2.11.0",
+                "is-my-json-valid": "2.16.0",
+                "pinkie-promise": "2.0.1"
+              },
               "dependencies": {
                 "chalk": {
                   "version": "1.1.3",
                   "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
                   "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
                   "dev": true,
+                  "requires": {
+                    "ansi-styles": "2.2.1",
+                    "escape-string-regexp": "1.0.5",
+                    "has-ansi": "2.0.0",
+                    "strip-ansi": "3.0.1",
+                    "supports-color": "2.0.0"
+                  },
                   "dependencies": {
                     "ansi-styles": {
                       "version": "2.2.1",
@@ -3951,6 +5145,9 @@
                       "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
                       "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
                       "dev": true,
+                      "requires": {
+                        "ansi-regex": "2.1.1"
+                      },
                       "dependencies": {
                         "ansi-regex": {
                           "version": "2.1.1",
@@ -3965,6 +5162,9 @@
                       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
                       "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
                       "dev": true,
+                      "requires": {
+                        "ansi-regex": "2.1.1"
+                      },
                       "dependencies": {
                         "ansi-regex": {
                           "version": "2.1.1",
@@ -3993,6 +5193,12 @@
                   "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz",
                   "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=",
                   "dev": true,
+                  "requires": {
+                    "generate-function": "2.0.0",
+                    "generate-object-property": "1.2.0",
+                    "jsonpointer": "4.0.1",
+                    "xtend": "4.0.1"
+                  },
                   "dependencies": {
                     "generate-function": {
                       "version": "2.0.0",
@@ -4005,6 +5211,9 @@
                       "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
                       "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
                       "dev": true,
+                      "requires": {
+                        "is-property": "1.0.2"
+                      },
                       "dependencies": {
                         "is-property": {
                           "version": "1.0.2",
@@ -4033,6 +5242,9 @@
                   "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
                   "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
                   "dev": true,
+                  "requires": {
+                    "pinkie": "2.0.4"
+                  },
                   "dependencies": {
                     "pinkie": {
                       "version": "2.0.4",
@@ -4049,18 +5261,30 @@
               "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
               "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
               "dev": true,
+              "requires": {
+                "boom": "2.10.1",
+                "cryptiles": "2.0.5",
+                "hoek": "2.16.3",
+                "sntp": "1.0.9"
+              },
               "dependencies": {
                 "boom": {
                   "version": "2.10.1",
                   "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
                   "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
-                  "dev": true
+                  "dev": true,
+                  "requires": {
+                    "hoek": "2.16.3"
+                  }
                 },
                 "cryptiles": {
                   "version": "2.0.5",
                   "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
                   "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
-                  "dev": true
+                  "dev": true,
+                  "requires": {
+                    "boom": "2.10.1"
+                  }
                 },
                 "hoek": {
                   "version": "2.16.3",
@@ -4072,7 +5296,10 @@
                   "version": "1.0.9",
                   "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
                   "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
-                  "dev": true
+                  "dev": true,
+                  "requires": {
+                    "hoek": "2.16.3"
+                  }
                 }
               }
             },
@@ -4081,6 +5308,11 @@
               "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
               "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
               "dev": true,
+              "requires": {
+                "assert-plus": "0.2.0",
+                "jsprim": "1.4.0",
+                "sshpk": "1.13.1"
+              },
               "dependencies": {
                 "assert-plus": {
                   "version": "0.2.0",
@@ -4093,6 +5325,12 @@
                   "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz",
                   "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=",
                   "dev": 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",
@@ -4116,7 +5354,10 @@
                       "version": "1.3.6",
                       "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz",
                       "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=",
-                      "dev": true
+                      "dev": true,
+                      "requires": {
+                        "extsprintf": "1.0.2"
+                      }
                     }
                   }
                 },
@@ -4125,6 +5366,16 @@
                   "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
                   "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
                   "dev": true,
+                  "requires": {
+                    "asn1": "0.2.3",
+                    "assert-plus": "1.0.0",
+                    "bcrypt-pbkdf": "1.0.1",
+                    "dashdash": "1.14.1",
+                    "ecc-jsbn": "0.1.1",
+                    "getpass": "0.1.7",
+                    "jsbn": "0.1.1",
+                    "tweetnacl": "0.14.5"
+                  },
                   "dependencies": {
                     "asn1": {
                       "version": "0.2.3",
@@ -4143,26 +5394,38 @@
                       "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
                       "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
                       "dev": true,
-                      "optional": true
+                      "optional": true,
+                      "requires": {
+                        "tweetnacl": "0.14.5"
+                      }
                     },
                     "dashdash": {
                       "version": "1.14.1",
                       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
                       "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
-                      "dev": true
+                      "dev": true,
+                      "requires": {
+                        "assert-plus": "1.0.0"
+                      }
                     },
                     "ecc-jsbn": {
                       "version": "0.1.1",
                       "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
                       "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
                       "dev": true,
-                      "optional": true
+                      "optional": true,
+                      "requires": {
+                        "jsbn": "0.1.1"
+                      }
                     },
                     "getpass": {
                       "version": "0.1.7",
                       "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
                       "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
-                      "dev": true
+                      "dev": true,
+                      "requires": {
+                        "assert-plus": "1.0.0"
+                      }
                     },
                     "jsbn": {
                       "version": "0.1.1",
@@ -4205,6 +5468,9 @@
               "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz",
               "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=",
               "dev": true,
+              "requires": {
+                "mime-db": "1.27.0"
+              },
               "dependencies": {
                 "mime-db": {
                   "version": "1.27.0",
@@ -4257,6 +5523,9 @@
           "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz",
           "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=",
           "dev": true,
+          "requires": {
+            "throttleit": "1.0.0"
+          },
           "dependencies": {
             "throttleit": {
               "version": "1.0.0",
@@ -4271,6 +5540,9 @@
           "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz",
           "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=",
           "dev": true,
+          "requires": {
+            "isexe": "2.0.0"
+          },
           "dependencies": {
             "isexe": {
               "version": "2.0.0",
@@ -4285,17 +5557,29 @@
     "typedarray-to-buffer": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.2.tgz",
-      "integrity": "sha1-EBezLZhP9VbroQD1AViauhrOLgQ="
+      "integrity": "sha1-EBezLZhP9VbroQD1AViauhrOLgQ=",
+      "dev": true,
+      "requires": {
+        "is-typedarray": "1.0.0"
+      }
     },
     "websocket": {
       "version": "1.0.24",
       "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.24.tgz",
-      "integrity": "sha1-dJA+dfJUW2suHeFCW8HJBZF6GJA="
+      "integrity": "sha1-dJA+dfJUW2suHeFCW8HJBZF6GJA=",
+      "dev": true,
+      "requires": {
+        "debug": "2.6.8",
+        "nan": "2.7.0",
+        "typedarray-to-buffer": "3.1.2",
+        "yaeti": "0.0.6"
+      }
     },
     "yaeti": {
       "version": "0.0.6",
       "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz",
-      "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc="
+      "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=",
+      "dev": true
     }
   }
 }