diff --git a/node_modules/longest/LICENSE b/node_modules/longest/LICENSE
new file mode 100644
index 0000000..fa30c4c
--- /dev/null
+++ b/node_modules/longest/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2015, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/longest/README.md b/node_modules/longest/README.md
new file mode 100644
index 0000000..cdffe65
--- /dev/null
+++ b/node_modules/longest/README.md
@@ -0,0 +1,65 @@
+# longest [![NPM version](https://badge.fury.io/js/longest.svg)](http://badge.fury.io/js/longest)  [![Build Status](https://travis-ci.org/jonschlinkert/longest.svg)](https://travis-ci.org/jonschlinkert/longest) 
+
+> Get the longest item in an array.
+
+## Install with [npm](npmjs.org)
+
+```bash
+npm i longest --save
+```
+### Install with [bower](https://github.com/bower/bower)
+
+```bash
+bower install longest --save
+```
+
+## Running tests
+Install dev dependencies.
+
+```bash
+npm i -d && npm test
+```
+
+## Usage
+
+```js
+var longest = require('longest');
+longest(['a', 'abcde', 'abc']);
+//=> 'abcde'
+
+longest(['a', 'abcde', 'abc']).length;
+//=> 5
+```
+
+## Related projects
+* [longest-value](https://github.com/jonschlinkert/longest-value): Get the longest value for the given property from an array of objects. Useful for aligning values.
+* [right-align-values](https://github.com/jonschlinkert/right-align-values): Right align the values of a given property for each object in an array. Useful for creating text columns or tables.
+* [right-pad-values](https://github.com/jonschlinkert/right-pad-values): Right pad the values of a given property for each object in an array. Useful for creating text columns or tables.
+* [repeat-string](https://github.com/jonschlinkert/repeat-string): Repeat the given string n times. Fastest implementation for repeating a string.
+* [pad-right](https://github.com/jonschlinkert/pad-right): Right pad a string with zeros or a specified string. Fastest implementation.
+* [pad-left](https://github.com/jonschlinkert/pad-left): Left pad a string with zeros or a specified string. Fastest implementation.  
+
+## Running tests
+Install dev dependencies.
+
+```bash
+npm i -d && npm test
+```
+
+## Contributing
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/longest/issues)
+
+## Author
+
+**Jon Schlinkert**
+ 
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) 
+
+## License
+Copyright (c) 2015 Jon Schlinkert  
+Released under the MIT license
+
+***
+
+_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on March 31, 2015._
\ No newline at end of file
diff --git a/node_modules/longest/index.js b/node_modules/longest/index.js
new file mode 100644
index 0000000..9892e52
--- /dev/null
+++ b/node_modules/longest/index.js
@@ -0,0 +1,37 @@
+/*!
+ * longest <https://github.com/jonschlinkert/longest>
+ *
+ * Copyright (c) 2014-2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+module.exports = function(arr) {
+  if (!arr) {
+    return null;
+  }
+
+  var len = arr.length;
+  if (!len) {
+    return null;
+  }
+
+  var c = 0;
+  var i = 0;
+  var ele;
+  var elen;
+  var res;
+
+  for (; i < len; i++) {
+    ele = arr[i].toString();
+    elen = ele.length;
+
+    if (elen > c) {
+      res = ele;
+      c = elen;
+    }
+  }
+
+  return res;
+};
diff --git a/node_modules/longest/package.json b/node_modules/longest/package.json
new file mode 100644
index 0000000..15fde95
--- /dev/null
+++ b/node_modules/longest/package.json
@@ -0,0 +1,68 @@
+{
+  "_from": "longest@^1.0.0",
+  "_id": "longest@1.0.1",
+  "_inBundle": false,
+  "_integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+  "_location": "/longest",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "longest@^1.0.0",
+    "name": "longest",
+    "escapedName": "longest",
+    "rawSpec": "^1.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.0"
+  },
+  "_requiredBy": [
+    "/lpad-align"
+  ],
+  "_resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+  "_shasum": "30a0b2da38f73770e8294a0d22e6625ed77d0097",
+  "_spec": "longest@^1.0.0",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\lpad-align",
+  "author": {
+    "name": "Jon Schlinkert",
+    "url": "https://github.com/jonschlinkert"
+  },
+  "bugs": {
+    "url": "https://github.com/jonschlinkert/longest/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Get the longest item in an array.",
+  "devDependencies": {
+    "fill-range": "^2.1.0",
+    "mocha": "*"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/jonschlinkert/longest",
+  "keywords": [
+    "array",
+    "element",
+    "item",
+    "long",
+    "length",
+    "longest"
+  ],
+  "license": {
+    "type": "MIT",
+    "url": "https://github.com/jonschlinkert/longest/blob/master/LICENSE"
+  },
+  "main": "index.js",
+  "name": "longest",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jonschlinkert/longest.git"
+  },
+  "scripts": {
+    "test": "mocha"
+  },
+  "version": "1.0.1"
+}
