diff --git a/node_modules/buffer-equal/.travis.yml b/node_modules/buffer-equal/.travis.yml
new file mode 100644
index 0000000..dad2273
--- /dev/null
+++ b/node_modules/buffer-equal/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+  - 0.8
+  - "0.10"
diff --git a/node_modules/buffer-equal/LICENSE b/node_modules/buffer-equal/LICENSE
new file mode 100644
index 0000000..ee27ba4
--- /dev/null
+++ b/node_modules/buffer-equal/LICENSE
@@ -0,0 +1,18 @@
+This software is released under the MIT license:
+
+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/buffer-equal/README.markdown b/node_modules/buffer-equal/README.markdown
new file mode 100644
index 0000000..8c062fd
--- /dev/null
+++ b/node_modules/buffer-equal/README.markdown
@@ -0,0 +1,62 @@
+buffer-equal
+============
+
+Return whether two buffers are equal.
+
+[![build status](https://secure.travis-ci.org/substack/node-buffer-equal.png)](http://travis-ci.org/substack/node-buffer-equal)
+
+example
+=======
+
+``` js
+var bufferEqual = require('buffer-equal');
+
+console.dir(bufferEqual(
+    new Buffer([253,254,255]),
+    new Buffer([253,254,255])
+));
+console.dir(bufferEqual(
+    new Buffer('abc'),
+    new Buffer('abcd')
+));
+console.dir(bufferEqual(
+    new Buffer('abc'),
+    'abc'
+));
+```
+
+output:
+
+```
+true
+false
+undefined
+```
+
+methods
+=======
+
+``` js
+var bufferEqual = require('buffer-equal')
+```
+
+bufferEqual(a, b)
+-----------------
+
+Return whether the two buffers `a` and `b` are equal.
+
+If `a` or `b` is not a buffer, return `undefined`.
+
+install
+=======
+
+With [npm](http://npmjs.org) do:
+
+```
+npm install buffer-equal
+```
+
+license
+=======
+
+MIT
diff --git a/node_modules/buffer-equal/example/eq.js b/node_modules/buffer-equal/example/eq.js
new file mode 100644
index 0000000..1eb0509
--- /dev/null
+++ b/node_modules/buffer-equal/example/eq.js
@@ -0,0 +1,14 @@
+var bufferEqual = require('../');
+
+console.dir(bufferEqual(
+    new Buffer([253,254,255]),
+    new Buffer([253,254,255])
+));
+console.dir(bufferEqual(
+    new Buffer('abc'),
+    new Buffer('abcd')
+));
+console.dir(bufferEqual(
+    new Buffer('abc'),
+    'abc'
+));
diff --git a/node_modules/buffer-equal/index.js b/node_modules/buffer-equal/index.js
new file mode 100644
index 0000000..e640d4e
--- /dev/null
+++ b/node_modules/buffer-equal/index.js
@@ -0,0 +1,14 @@
+var Buffer = require('buffer').Buffer; // for use with browserify
+
+module.exports = function (a, b) {
+    if (!Buffer.isBuffer(a)) return undefined;
+    if (!Buffer.isBuffer(b)) return undefined;
+    if (typeof a.equals === 'function') return a.equals(b);
+    if (a.length !== b.length) return false;
+    
+    for (var i = 0; i < a.length; i++) {
+        if (a[i] !== b[i]) return false;
+    }
+    
+    return true;
+};
diff --git a/node_modules/buffer-equal/package.json b/node_modules/buffer-equal/package.json
new file mode 100644
index 0000000..e536d46
--- /dev/null
+++ b/node_modules/buffer-equal/package.json
@@ -0,0 +1,62 @@
+{
+  "_from": "buffer-equal@^1.0.0",
+  "_id": "buffer-equal@1.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=",
+  "_location": "/buffer-equal",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "buffer-equal@^1.0.0",
+    "name": "buffer-equal",
+    "escapedName": "buffer-equal",
+    "rawSpec": "^1.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.0"
+  },
+  "_requiredBy": [
+    "/append-buffer"
+  ],
+  "_resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz",
+  "_shasum": "59616b498304d556abd466966b22eeda3eca5fbe",
+  "_spec": "buffer-equal@^1.0.0",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\append-buffer",
+  "author": {
+    "name": "James Halliday",
+    "email": "mail@substack.net",
+    "url": "http://substack.net"
+  },
+  "bugs": {
+    "url": "https://github.com/substack/node-buffer-equal/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "return whether two buffers are equal",
+  "devDependencies": {
+    "tap": "0.2.4"
+  },
+  "directories": {
+    "example": "example",
+    "test": "test"
+  },
+  "engines": {
+    "node": ">=0.4.0"
+  },
+  "homepage": "https://github.com/substack/node-buffer-equal#readme",
+  "keywords": [
+    "buffer",
+    "equal"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "buffer-equal",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/substack/node-buffer-equal.git"
+  },
+  "scripts": {
+    "test": "tap test/*.js"
+  },
+  "version": "1.0.0"
+}
diff --git a/node_modules/buffer-equal/test/eq.js b/node_modules/buffer-equal/test/eq.js
new file mode 100644
index 0000000..3d34006
--- /dev/null
+++ b/node_modules/buffer-equal/test/eq.js
@@ -0,0 +1,35 @@
+var bufferEqual = require('../');
+var test = require('tap').test;
+
+test('equal', function (t) {
+    var eq = bufferEqual(
+        new Buffer([253,254,255]),
+        new Buffer([253,254,255])
+    );
+    t.strictEqual(eq, true);
+    t.end();
+});
+
+test('not equal', function (t) {
+    var eq = bufferEqual(
+        new Buffer('abc'),
+        new Buffer('abcd')
+    );
+    t.strictEqual(eq, false);
+    t.end();
+});
+
+test('not equal not buffer', function (t) {
+    var eq = bufferEqual(
+        new Buffer('abc'),
+        'abc'
+    );
+    t.strictEqual(eq, undefined);
+    t.end();
+});
+
+test('equal not buffer', function (t) {
+    var eq = bufferEqual('abc', 'abc');
+    t.strictEqual(eq, undefined);
+    t.end();
+});
