diff --git a/node_modules/source-map-url/.jshintrc b/node_modules/source-map-url/.jshintrc
new file mode 100644
index 0000000..8f33293
--- /dev/null
+++ b/node_modules/source-map-url/.jshintrc
@@ -0,0 +1,43 @@
+{
+  "bitwise": true,
+  "camelcase": true,
+  "curly": false,
+  "eqeqeq": true,
+  "es3": true,
+  "forin": true,
+  "immed": false,
+  "indent": false,
+  "latedef": "nofunc",
+  "newcap": false,
+  "noarg": true,
+  "noempty": true,
+  "nonew": false,
+  "plusplus": false,
+  "quotmark": false,
+  "undef": true,
+  "unused": "vars",
+  "strict": false,
+  "trailing": true,
+  "maxparams": 5,
+  "maxdepth": false,
+  "maxstatements": false,
+  "maxcomplexity": false,
+  "maxlen": 100,
+
+  "asi": true,
+  "expr": true,
+  "globalstrict": true,
+  "smarttabs": true,
+  "sub": true,
+
+  "node": true,
+  "globals": {
+    "describe": false,
+    "it": false,
+    "before": false,
+    "beforeEach": false,
+    "after": false,
+    "afterEach": false,
+    "define": false
+  }
+}
diff --git a/node_modules/source-map-url/LICENSE b/node_modules/source-map-url/LICENSE
new file mode 100644
index 0000000..10052a9
--- /dev/null
+++ b/node_modules/source-map-url/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Simon Lydell
+
+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/source-map-url/bower.json b/node_modules/source-map-url/bower.json
new file mode 100644
index 0000000..9831b7c
--- /dev/null
+++ b/node_modules/source-map-url/bower.json
@@ -0,0 +1,20 @@
+{
+  "name": "source-map-url",
+  "version": "0.4.0",
+  "author": "Simon Lydell",
+  "license": "MIT",
+  "description": "Tools for working with sourceMappingURL comments.",
+  "keywords": [
+    "source map",
+    "sourceMappingURL",
+    "comment",
+    "annotation"
+  ],
+  "main": "source-map-url.js",
+  "authors": [
+    "Simon Lydell"
+  ],
+  "ignore": [
+    ".*"
+  ]
+}
\ No newline at end of file
diff --git a/node_modules/source-map-url/changelog.md b/node_modules/source-map-url/changelog.md
new file mode 100644
index 0000000..e291a7f
--- /dev/null
+++ b/node_modules/source-map-url/changelog.md
@@ -0,0 +1,52 @@
+### Version 0.4.0 (2015-11-12) ###
+
+- Changed: sourceMappingURL comments used to be matched only when placed at
+  the end of the script. However, since several commonly used JavaScript
+  libraries do not follow this convention and all popular web browsers accept
+  non-trailing comments, this has been revised.
+
+  So now non-trailing SourceMappingURL comments are matched as well.
+
+
+### Version 0.3.0 (2014-08-16) ###
+
+- Changed: sourceMappingURL comments used to be matched only if they appeared
+  on their own line. However, the spec only says:
+
+  > The generated code may include a line at the end of the source, with the following form:
+  >
+  >     //# sourceMappingURL=<url>
+
+  So now they are matched also when they appear on the same line as code.
+
+- Removed: The `.set()` method. I couldn’t decide how it should work
+  considering the above change. Moreover, it was unnecessarily complex (and
+  would have gotten worse) for very little gain. It is much easier to run
+  `.remove()` if needed, and then simply `code += "\n//# sourceMappingURL=" +
+  url` (using the appropriate comment syntax and newline). KISS.
+
+- Changed: The `.insertBefore()` method now always inserts the string exactly
+  before the sourceMappingURL comment; not before the newline before the
+  comment (if any). Moreover, it does not ensure that the comment will be on a
+  new line anymore. This is up to the caller. KISS.
+
+- Changed: The `.remove()` method no longer removes the newline before the
+  sourceMappingURL (if any).
+
+- Changed: Renamed `.get()` to `.getFrom()`.
+- Changed: Renamed `.remove()` to `.removeFrom()`.
+
+- Added: The `.existsIn()` method.
+
+
+### Version 0.2.0 (2014-02-23) ###
+
+- Changed: A space is no longer inserted before the closing comment syntax. If
+  such a space is desired, it needs to be put in the closing comment syntax
+  itself (such as `["/*", " */"]` instead of `["/*", "*/"]`). (Backwards
+  incompatible change.)
+
+
+### Version 0.1.0 (2014-02-22) ###
+
+- Initial release.
diff --git a/node_modules/source-map-url/component.json b/node_modules/source-map-url/component.json
new file mode 100644
index 0000000..11d569c
--- /dev/null
+++ b/node_modules/source-map-url/component.json
@@ -0,0 +1,18 @@
+{
+  "name": "source-map-url",
+  "version": "0.4.0",
+  "author": "Simon Lydell",
+  "license": "MIT",
+  "description": "Tools for working with sourceMappingURL comments.",
+  "keywords": [
+    "source map",
+    "sourceMappingURL",
+    "comment",
+    "annotation"
+  ],
+  "main": "source-map-url.js",
+  "repo": "lydell/source-map-url",
+  "scripts": [
+    "source-map-url.js"
+  ]
+}
diff --git a/node_modules/source-map-url/package.json b/node_modules/source-map-url/package.json
new file mode 100644
index 0000000..a79d175
--- /dev/null
+++ b/node_modules/source-map-url/package.json
@@ -0,0 +1,73 @@
+{
+  "_from": "source-map-url@^0.4.0",
+  "_id": "source-map-url@0.4.0",
+  "_inBundle": false,
+  "_integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+  "_location": "/source-map-url",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "source-map-url@^0.4.0",
+    "name": "source-map-url",
+    "escapedName": "source-map-url",
+    "rawSpec": "^0.4.0",
+    "saveSpec": null,
+    "fetchSpec": "^0.4.0"
+  },
+  "_requiredBy": [
+    "/source-map-resolve"
+  ],
+  "_resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+  "_shasum": "3e935d7ddd73631b97659956d55128e87b5084a3",
+  "_spec": "source-map-url@^0.4.0",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\source-map-resolve",
+  "author": {
+    "name": "Simon Lydell"
+  },
+  "bugs": {
+    "url": "https://github.com/lydell/source-map-url/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Tools for working with sourceMappingURL comments.",
+  "devDependencies": {
+    "expect.js": "~0.3.1",
+    "jshint": "~2.4.3",
+    "mocha": "~1.17.1"
+  },
+  "homepage": "https://github.com/lydell/source-map-url#readme",
+  "keywords": [
+    "source map",
+    "sourceMappingURL",
+    "comment",
+    "annotation"
+  ],
+  "license": "MIT",
+  "main": "source-map-url.js",
+  "name": "source-map-url",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/lydell/source-map-url.git"
+  },
+  "scripts": {
+    "lint": "jshint source-map-url.js test/ ",
+    "test": "npm run lint && npm run unit",
+    "unit": "mocha"
+  },
+  "testling": {
+    "harness": "mocha",
+    "files": "test/*.js",
+    "browsers": [
+      "ie/8..latest",
+      "chrome/latest",
+      "firefox/latest",
+      "opera/12",
+      "opera/latest",
+      "safari/5",
+      "iphone/6",
+      "android-browser/4"
+    ]
+  },
+  "version": "0.4.0"
+}
diff --git a/node_modules/source-map-url/readme.md b/node_modules/source-map-url/readme.md
new file mode 100644
index 0000000..216de5e
--- /dev/null
+++ b/node_modules/source-map-url/readme.md
@@ -0,0 +1,97 @@
+Overview [![Build Status](https://travis-ci.org/lydell/source-map-url.png?branch=master)](https://travis-ci.org/lydell/source-map-url)
+========
+
+[![browser support](https://ci.testling.com/lydell/source-map-url.png)](https://ci.testling.com/lydell/source-map-url)
+
+Tools for working with sourceMappingURL comments.
+
+```js
+var sourceMappingURL = require("source-map-url")
+
+var code = [
+  "!function(){...}();",
+  "/*# sourceMappingURL=foo.js.map */"
+].join("\n")
+
+sourceMappingURL.existsIn(code)
+// true
+
+sourceMappingURL.getFrom(code)
+// foo.js.map
+
+code = sourceMappingURL.insertBefore(code, "// License: MIT\n")
+// !function(){...}();
+// // License: MIT
+// /*# sourceMappingURL=foo.js.map */
+
+code = sourceMappingURL.removeFrom(code)
+// !function(){...}();
+// // License: MIT
+
+sourceMappingURL.existsIn(code)
+// false
+
+sourceMappingURL.getFrom(code)
+// null
+
+code += "//# sourceMappingURL=/other/file.js.map"
+// !function(){...}();
+// // License: MIT
+// //# sourceMappingURL=/other/file.js.map
+```
+
+
+Installation
+============
+
+- `npm install source-map-url`
+- `bower install source-map-url`
+- `component install lydell/source-map-url`
+
+Works with CommonJS, AMD and browser globals, through UMD.
+
+
+Usage
+=====
+
+### `sourceMappingURL.getFrom(code)` ###
+
+Returns the url of the sourceMappingURL comment in `code`. Returns `null` if
+there is no such comment.
+
+### `sourceMappingURL.existsIn(code)` ###
+
+Returns `true` if there is a sourceMappingURL comment in `code`, or `false`
+otherwise.
+
+### `sourceMappingURL.removeFrom(code)` ###
+
+Removes the sourceMappingURL comment in `code`. Does nothing if there is no
+such comment. Returns the updated `code`.
+
+### `sourceMappingURL.insertBefore(code, string)` ###
+
+Inserts `string` before the sourceMappingURL comment in `code`. Appends
+`string` to `code` if there is no such comment.
+
+Lets you append something to a file without worrying about burying the
+sourceMappingURL comment (by keeping it at the end of the file).
+
+### `sourceMappingURL.regex` ###
+
+The regex that is used to match sourceMappingURL comments. It matches both `//`
+and `/**/` comments, thus supporting both JavaScript and CSS.
+
+
+Tests
+=====
+
+Start by running `npm test`, which lints the code and runs the test suite in Node.js.
+
+To run the tests in a browser, run `testling` (`npm install -g testling`) or `testling -u`.
+
+
+License
+=======
+
+[The X11 (“MIT”) License](LICENSE).
diff --git a/node_modules/source-map-url/source-map-url.js b/node_modules/source-map-url/source-map-url.js
new file mode 100644
index 0000000..1724cb7
--- /dev/null
+++ b/node_modules/source-map-url/source-map-url.js
@@ -0,0 +1,57 @@
+// Copyright 2014 Simon Lydell
+// X11 (“MIT”) Licensed. (See LICENSE.)
+
+void (function(root, factory) {
+  if (typeof define === "function" && define.amd) {
+    define(factory)
+  } else if (typeof exports === "object") {
+    module.exports = factory()
+  } else {
+    root.sourceMappingURL = factory()
+  }
+}(this, function() {
+
+  var innerRegex = /[#@] sourceMappingURL=([^\s'"]*)/
+
+  var regex = RegExp(
+    "(?:" +
+      "/\\*" +
+      "(?:\\s*\r?\n(?://)?)?" +
+      "(?:" + innerRegex.source + ")" +
+      "\\s*" +
+      "\\*/" +
+      "|" +
+      "//(?:" + innerRegex.source + ")" +
+    ")" +
+    "\\s*"
+  )
+
+  return {
+
+    regex: regex,
+    _innerRegex: innerRegex,
+
+    getFrom: function(code) {
+      var match = code.match(regex)
+      return (match ? match[1] || match[2] || "" : null)
+    },
+
+    existsIn: function(code) {
+      return regex.test(code)
+    },
+
+    removeFrom: function(code) {
+      return code.replace(regex, "")
+    },
+
+    insertBefore: function(code, string) {
+      var match = code.match(regex)
+      if (match) {
+        return code.slice(0, match.index) + string + code.slice(match.index)
+      } else {
+        return code + string
+      }
+    }
+  }
+
+}));
diff --git a/node_modules/source-map-url/test/source-map-url.js b/node_modules/source-map-url/test/source-map-url.js
new file mode 100644
index 0000000..630bc86
--- /dev/null
+++ b/node_modules/source-map-url/test/source-map-url.js
@@ -0,0 +1,402 @@
+// Copyright 2014 Simon Lydell
+// X11 (“MIT”) Licensed. (See LICENSE.)
+
+var expect = require("expect.js")
+
+var sourceMappingURL = require("../")
+
+var comments = {
+
+  universal: [
+    "/*# sourceMappingURL=foo.js.map */"
+  ],
+
+  js: [
+    "//# sourceMappingURL=foo.js.map"
+  ],
+
+  block: [
+    "/*",
+    "# sourceMappingURL=foo.js.map",
+    "*/"
+  ],
+
+  mix: [
+    "/*",
+    "//# sourceMappingURL=foo.js.map",
+    "*/"
+  ]
+
+}
+
+var nonTrailingComments = {
+
+  jsLeading: {
+    contents: [
+      "//# sourceMappingURL=foo.js.map",
+      "(function(){})"
+    ],
+    solution: [
+      "(function(){})"
+    ]
+  },
+
+  mixEmbedded: {
+    contents: [
+      "/*! Library Name v1.0.0",
+      "//# sourceMappingURL=foo.js.map",
+      "*/",
+      "(function(){})"
+    ],
+    solution: [
+      "/*! Library Name v1.0.0",
+      "*/",
+      "(function(){})"
+    ]
+  }
+
+}
+
+function forEachComment(fn) {
+  forOf(comments, function(name, comment) {
+    var description = "the '" + name + "' syntax with "
+    fn(comment.join("\n"),   description + "regular newlines")
+    fn(comment.join("\r\n"), description + "Windows newlines")
+  })
+}
+
+function forEachNonTrailingComment(fn) {
+  forOf(nonTrailingComments, function(name, comment) {
+
+    var description = "the '" + name + "' syntax with "
+
+    fn({
+      contents: comment.contents.join("\n"),
+      solution: comment.solution.join("\n")
+    }, description + "regular newlines")
+
+    fn({
+      contents: comment.contents.join("\r\n"),
+      solution: comment.solution.join("\r\n")
+    }, description + "Windows newlines")
+  })
+}
+
+function forOf(obj, fn) {
+  for (var key in obj) {
+    if (Object.prototype.hasOwnProperty.call(obj, key)) {
+      fn(key, obj[key])
+    }
+  }
+}
+
+
+describe("sourceMappingURL", function() {
+
+  describe(".getFrom", function() {
+
+    forEachComment(function(comment, description) {
+
+      it("gets the url from " + description, function() {
+        expect(sourceMappingURL.getFrom("code\n" + comment))
+          .to.equal("foo.js.map")
+
+        expect(sourceMappingURL.getFrom("code" + comment))
+          .to.equal("foo.js.map")
+
+        expect(sourceMappingURL.getFrom(comment))
+          .to.equal("foo.js.map")
+      })
+
+    })
+
+    forEachNonTrailingComment(function(comment, description) {
+
+      it("gets the url from " + description, function() {
+        expect(sourceMappingURL.getFrom("code\n" + comment.contents))
+          .to.equal("foo.js.map")
+
+        expect(sourceMappingURL.getFrom("code" + comment.contents))
+          .to.equal("foo.js.map")
+
+        expect(sourceMappingURL.getFrom(comment.contents))
+          .to.equal("foo.js.map")
+      })
+
+    })
+
+
+    it("returns null if no comment", function() {
+      expect(sourceMappingURL.getFrom("code"))
+        .to.equal(null)
+    })
+
+
+    it("can return an empty string as url", function() {
+      expect(sourceMappingURL.getFrom("/*# sourceMappingURL= */"))
+        .to.equal("")
+    })
+
+
+    it("is detachable", function() {
+      var get = sourceMappingURL.getFrom
+      expect(get("/*# sourceMappingURL=foo */"))
+        .to.equal("foo")
+    })
+
+  })
+
+
+  describe(".existsIn", function() {
+
+    forEachComment(function(comment, description) {
+
+      it("returns true for " + description, function() {
+        expect(sourceMappingURL.existsIn("code\n" + comment))
+          .to.equal(true)
+
+        expect(sourceMappingURL.existsIn("code" + comment))
+          .to.equal(true)
+
+        expect(sourceMappingURL.existsIn(comment))
+          .to.equal(true)
+      })
+
+    })
+
+    forEachNonTrailingComment(function(comment, description) {
+
+      it("returns true for " + description, function() {
+        expect(sourceMappingURL.existsIn("code\n" + comment.contents))
+          .to.equal(true)
+
+        expect(sourceMappingURL.existsIn("code" + comment.contents))
+          .to.equal(true)
+
+        expect(sourceMappingURL.existsIn(comment.contents))
+          .to.equal(true)
+      })
+
+    })
+
+
+    it("returns false if no comment", function() {
+      expect(sourceMappingURL.existsIn("code"))
+        .to.equal(false)
+    })
+
+
+    it("is detachable", function() {
+      var has = sourceMappingURL.existsIn
+      expect(has("/*# sourceMappingURL=foo */"))
+        .to.equal(true)
+    })
+
+  })
+
+
+  describe(".removeFrom", function() {
+
+    forEachComment(function(comment, description) {
+
+      it("removes the comment for " + description, function() {
+        expect(sourceMappingURL.removeFrom("code\n" + comment))
+          .to.equal("code\n")
+
+        expect(sourceMappingURL.removeFrom("code" + comment))
+          .to.equal("code")
+
+        expect(sourceMappingURL.removeFrom(comment))
+          .to.equal("")
+      })
+
+    })
+
+    forEachNonTrailingComment(function(comment, description) {
+
+      it("removes the comment for " + description, function() {
+        expect(sourceMappingURL.removeFrom("code\n" + comment.contents))
+          .to.equal("code\n" + comment.solution)
+
+        expect(sourceMappingURL.removeFrom("code" + comment.contents))
+          .to.equal("code" + comment.solution)
+
+        expect(sourceMappingURL.removeFrom(comment.contents))
+          .to.equal(comment.solution)
+      })
+
+    })
+
+
+    it("does nothing if no comment", function() {
+      expect(sourceMappingURL.removeFrom("code\n"))
+        .to.equal("code\n")
+    })
+
+
+    it("is detachable", function() {
+      var remove = sourceMappingURL.removeFrom
+      expect(remove("/*# sourceMappingURL=foo */"))
+        .to.equal("")
+    })
+
+  })
+
+
+  describe(".insertBefore", function() {
+
+    forEachComment(function(comment, description) {
+
+      it("inserts a string before the comment for " + description, function() {
+        expect(sourceMappingURL.insertBefore("code\n" + comment, "more code\n"))
+          .to.equal("code\nmore code\n" + comment)
+
+        expect(sourceMappingURL.insertBefore("code" + comment, "\nmore code"))
+          .to.equal("code\nmore code" + comment)
+
+        expect(sourceMappingURL.insertBefore(comment, "some code"))
+          .to.equal("some code" + comment)
+      })
+
+    })
+
+
+    it("inserts a string before an embedded comment", function() {
+      expect(sourceMappingURL.insertBefore("/*! Library Name v1.0.0\n" +
+        "//# sourceMappingURL=foo.js.map\n*/\n(function(){})", "code\n"))
+        .to.equal("/*! Library Name v1.0.0\ncode\n" +
+          "//# sourceMappingURL=foo.js.map\n*/\n(function(){})")
+    })
+
+
+    it("inserts a string before a leading comment", function() {
+      expect(sourceMappingURL.insertBefore("//# sourceMappingURL=foo.js.map\n" +
+        "(function(){})", "code\n"))
+        .to.equal("code\n//# sourceMappingURL=foo.js.map\n" +
+          "(function(){})")
+    })
+
+
+    it("appends if no comment", function() {
+      expect(sourceMappingURL.insertBefore("code", "\nmore code"))
+        .to.equal("code\nmore code")
+    })
+
+
+    it("is detachable", function() {
+      var insertBefore = sourceMappingURL.insertBefore
+      expect(insertBefore("/*# sourceMappingURL=foo */", "bar"))
+        .to.equal("bar/*# sourceMappingURL=foo */")
+    })
+
+  })
+
+
+  describe(".regex", function() {
+
+    it("includes ._innerRegex", function() {
+      expect(sourceMappingURL.regex.source)
+        .to.contain(sourceMappingURL._innerRegex.source)
+    })
+
+
+    var match = function(code) {
+      expect(code)
+        .to.match(sourceMappingURL.regex)
+    }
+
+    var noMatch = function(code) {
+      expect(code)
+        .not.to.match(sourceMappingURL.regex)
+    }
+
+
+    forEachComment(function(comment, description) {
+
+      it("matches " + description, function() {
+        match("code\n" + comment)
+        match("code" + comment)
+        match(comment)
+      })
+
+
+      it("matches " + description + ", with trailing whitespace", function() {
+        match(comment + "  ")
+        match(comment + "\n")
+        match(comment + "\n\n\t\n    \t  ")
+      })
+
+    })
+
+
+    it("does not match some cases that are easy to mess up", function() {
+      noMatch(
+        "/* # sourceMappingURL=foo */"
+      )
+
+      noMatch(
+        "// # sourceMappingURL=foo"
+      )
+    })
+
+
+    it("is liberal regarding inner whitespace", function() {
+      match(
+        "/*# sourceMappingURL=foo*/"
+      )
+
+      match(
+        "/*# sourceMappingURL=foo    */"
+      )
+
+      match(
+        "/*# sourceMappingURL=foo   \t\n" +
+        "*/"
+      )
+
+      match(
+        "/*    \n" +
+        "# sourceMappingURL=foo\n" +
+        "*/"
+      )
+
+      match(
+        "/*\n" +
+        "# sourceMappingURL=foo\n" +
+        "     */"
+      )
+
+      match(
+        "/*\n" +
+        "# sourceMappingURL=foo\n" +
+        "\n" +
+        "\t\n" +
+        "*/"
+      )
+    })
+
+  })
+
+
+  describe("._innerRegex", function() {
+
+    it("matches the contents of sourceMappingURL comments", function() {
+      expect("# sourceMappingURL=http://www.example.com/foo/bar.js.map")
+        .to.match(sourceMappingURL._innerRegex)
+    })
+
+
+    it("captures the url in the first capture group", function() {
+      expect(sourceMappingURL._innerRegex.exec("# sourceMappingURL=foo")[1])
+        .to.equal("foo")
+    })
+
+
+    it("supports the legacy syntax", function() {
+      expect("@ sourceMappingURL=http://www.example.com/foo/bar.js.map")
+        .to.match(sourceMappingURL._innerRegex)
+    })
+
+  })
+
+})
diff --git a/node_modules/source-map-url/x-package.json5 b/node_modules/source-map-url/x-package.json5
new file mode 100644
index 0000000..bdcd6ae
--- /dev/null
+++ b/node_modules/source-map-url/x-package.json5
@@ -0,0 +1,55 @@
+{
+  name: "source-map-url",
+  version: "0.4.0",
+  author: "Simon Lydell",
+  license: "MIT",
+  description: "Tools for working with sourceMappingURL comments.",
+  keywords: [
+    "source map",
+    "sourceMappingURL",
+    "comment",
+    "annotation"
+  ],
+  main: "source-map-url.js",
+  overlay: {
+    npm: {
+      repository: "lydell/source-map-url",
+      scripts: {
+        lint: "jshint source-map-url.js test/ ",
+        unit: "mocha",
+        test: "npm run lint && npm run unit"
+      },
+      devDependencies: {
+        "mocha": "~1.17.1",
+        "expect.js": "~0.3.1",
+        "jshint": "~2.4.3"
+      },
+      testling: {
+        harness: "mocha",
+        files: "test/*.js",
+        browsers: [
+          "ie/8..latest",
+          "chrome/latest",
+          "firefox/latest",
+          "opera/12",
+          "opera/latest",
+          "safari/5",
+          "iphone/6",
+          "android-browser/4"
+        ]
+      }
+    },
+    component: {
+      repo: "lydell/source-map-url",
+      scripts: [
+        "source-map-url.js"
+      ]
+    },
+    bower: {
+      authors: ["Simon Lydell"],
+      ignore: [
+        ".*"
+      ]
+    }
+  }
+}
