Index: Dev/trunk/node_modules/grunt-coffeelint/.travis.yml
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/.travis.yml	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/.travis.yml	(revision 516)
@@ -1,4 +1,5 @@
 language: node_js
 node_js:
-  - 0.6
   - 0.8
+before_script:
+  - npm install -g grunt-cli
Index: Dev/trunk/node_modules/grunt-coffeelint/Gruntfile.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/Gruntfile.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/Gruntfile.coffee	(revision 516)
@@ -0,0 +1,42 @@
+module.exports = (grunt) ->
+
+  # Project configuration.
+  grunt.initConfig
+
+    coffeelint:
+      # global options
+      options:
+        indentation:
+          value: 4
+          level: 'warn'
+
+      # a target that overrides default options
+      one:
+        files:
+          src: ['test/fixtures/*.coffee']
+        options:
+          indentation:
+            value: 2
+            level: 'warn'
+          'no_trailing_semicolons':
+            level: 'warn'
+
+      # a simple target
+      two: ['test/fixtures/correct.coffee', 'test/fixtures/some.coffee']
+
+  # Load local tasks.
+  grunt.loadTasks 'tasks'
+
+  grunt.loadNpmTasks 'grunt-npm'
+  grunt.loadNpmTasks 'grunt-bump'
+
+  # Default task.
+  grunt.registerTask 'default', 'coffeelint'
+
+  grunt.registerTask 'test', 'coffeelint'
+
+  grunt.registerTask 'release', 'Bump version, push to NPM.', (type)->
+    grunt.task.run [
+      "bump:#{type || 'patch'}"
+      'npm-publish'
+    ]
Index: Dev/trunk/node_modules/grunt-coffeelint/Gruntfile.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/Gruntfile.js	(revision 484)
+++ 	(revision )
@@ -1,51 +1,0 @@
-module.exports = function(grunt) {
-
-  // Project configuration.
-  grunt.initConfig({
-
-    coffeelint: {
-      // global options
-      options: {
-        indentation: {
-          value: 4,
-          level: 'warn'
-        }
-      },
-
-      // a target that overrides default options
-      one: {
-        files: {
-          src: ['test/fixtures/*.coffee']
-        },
-        options: {
-          indentation: {
-            value: 2,
-            level: 'warn'
-          },
-          'no_trailing_semicolons': {
-            level: 'warn'
-          }
-        }
-      },
-
-      // a simple target
-      two: ['test/fixtures/correct.coffee', 'test/fixtures/some.coffee']
-    }
-  });
-
-  // Load local tasks.
-  grunt.loadTasks('tasks');
-
-  grunt.loadNpmTasks('grunt-npm');
-  grunt.loadNpmTasks('grunt-bump');
-
-  // Default task.
-  grunt.registerTask('default', 'coffeelint');
-
-  grunt.registerTask('release', 'Bump version, push to NPM.', function(type) {
-    grunt.task.run([
-      'bump:' + (type || 'patch'),
-      'npm-publish'
-    ]);
-  });
-};
Index: Dev/trunk/node_modules/grunt-coffeelint/README.md
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/README.md	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/README.md	(revision 516)
@@ -14,4 +14,13 @@
     grunt.loadNpmTasks('grunt-coffeelint');
 
+## Options
+
+A few additional options are supported:
+
+### force
+Type: `Boolean`
+Default value: `false`
+
+Set `force` to `true` to report CoffeeLint errors but not fail the task.
 
 ## Configuration
@@ -68,8 +77,6 @@
 ````
 
-For available options see [example configuration] or [coffeelint homepage].
-
+For available options see [coffeelint homepage].
 
 [CoffeeLint]: http://www.coffeelint.org/
 [coffeelint homepage]: http://www.coffeelint.org/
-[example configuration]: https://raw.github.com/clutchski/coffeelint/master/examples/coffeelint.json
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/.package.json
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/.package.json	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/.package.json	(revision 516)
@@ -0,0 +1,52 @@
+{
+  "name": "coffeelint",
+  "description": "Lint your CoffeeScript",
+  "version": "1.0.8",
+  "homepage": "http://www.coffeelint.org",
+  "keywords": [
+    "lint",
+    "coffeescript",
+    "coffee-script"
+  ],
+  "author": "Matthew Perpick <clutchski@gmail.com>",
+  "main": "./lib/coffeelint.js",
+  "engines": {
+    "node": ">=0.8.0"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/clutchski/coffeelint.git"
+  },
+  "bin": {
+    "coffeelint": "./bin/coffeelint"
+  },
+  "dependencies": {
+    "optimist": ">=0.2.8",
+    "coffee-script": "1.6.x",
+    "glob": ">=3.1.9",
+    "browserify": "~3.x",
+    "coffeeify": "~0.6.0"
+  },
+  "devDependencies": {
+    "vows": ">=0.6.0",
+    "underscore": ">=1.4.4"
+  },
+  "licenses": [
+    {
+      "type": "MIT",
+      "url": "http://github.com/clutchski/coffeelint/raw/master/LICENSE"
+    }
+  ],
+  "scripts": {
+    "pretest": "cake compile",
+    "test": "vows --spec test/*.coffee test/*.litcoffee",
+    "posttest": "npm run lint",
+    "prepublish": "cake prepublish",
+    "publish": "cake publish",
+    "install": "cake install",
+    "lint": "cake compile && ./bin/coffeelint -f coffeelint.json src/*.coffee test/*.coffee test/*.litcoffee",
+    "lint-csv": "cake compile && ./bin/coffeelint --csv -f coffeelint.json src/*.coffee test/*.coffee",
+    "lint-jslint": "cake compile && ./bin/coffeelint --jslint -f coffeelint.json src/*.coffee test/*.coffee",
+    "compile": "cake compile"
+  }
+}
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/.travis.yml
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/.travis.yml	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/.travis.yml	(revision 516)
@@ -1,5 +1,4 @@
 language: node_js
 node_js:
-  - "0.6"
   - "0.8"
   - "0.10"
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/3rd_party_rules.md
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/3rd_party_rules.md	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/3rd_party_rules.md	(revision 516)
@@ -0,0 +1,68 @@
+Creating a 3rd party rule
+=========================
+
+If your rule is overly specific or too restrictive it may not be accepted into
+the CoffeeLint repo. This doesn't mean you can't have your rule.
+
+Setup your repo
+---------------
+
+My personal preference is to not commit compiled Javascript files to a
+CoffeeScript repo. 
+
+1. `npm init`
+2. `npm install --save coffee-script` When it asks about `main` leave it as `index.js`
+3. Create an `index.js` it only needs two lines
+
+        require('coffee-script');
+        module.exports = require('./your_rule_name.coffee');
+
+4. `sudo npm link`: Once you run this CoffeeLint will be able to `require` your module
+5. Build your rule, make sure the file name matches `index.js`'s `require`
+
+[link]: https://npmjs.org/doc/cli/npm-link.html
+
+Loading your rule
+-----------------
+
+It's probably best once you get this worked out, to commit a coffeelint.json to
+your repo with your rule enabled. Here is an example:
+
+
+    {
+        "your_rule_name": {
+            "module": "your-rule-name"
+        }
+    }
+
+
+* `your_rule_name`: This MUST match the name inside your rule. A few of of the
+  built in rules are no_plus_plus, no_tabs, and cyclomatic_complexity
+* `your-rule-name`: npm's convention is to use dashes. CoffeeLint is going to
+  run `require('your-rule-name')` to find this rule.
+
+Publishing your rule
+--------------------
+
+Once you're ready you can publish it as a normal npm package. Remember to
+mention in your readme that they will need to `npm install -g your-rule-name`.
+If it's not global CoffeeLint won't see it.
+
+By convention rule authors add the keyword `coffeelintrule` to their npm 
+`package.json` so custom rules can be found easily. Click
+[here](https://npmjs.org/search?q=coffeelintrule) to list all currently available
+custom rules on npm.
+
+Verify Installation
+-------------------
+
+This will verify your development install when you used `sudo npm link` or when
+users run `npm install -g your-rule-name`
+
+Verify your installation using:
+
+    node -p "require('your-rule-name');"
+
+You should get output similar to
+
+    [Function: YourRuleName]
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/Cakefile
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/Cakefile	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/Cakefile	(revision 516)
@@ -0,0 +1,54 @@
+fs = require 'fs'
+browserify = require 'browserify'
+CoffeeScript = require 'coffee-script'
+
+
+copySync = (src, dest) ->
+    fs.writeFileSync dest, fs.readFileSync(src)
+
+coffeeSync = (input, output) ->
+    coffee = fs.readFileSync(input).toString()
+    fs.writeFileSync output, CoffeeScript.compile(coffee)
+
+
+task 'compile', 'Compile Coffeelint', ->
+    console.log 'Compiling Coffeelint...'
+    fs.mkdirSync 'lib' unless fs.existsSync 'lib'
+    invoke 'compile:browserify'
+    invoke 'compile:commandline'
+
+task 'compile:commandline', 'Compiles commandline.js', ->
+    coffeeSync 'src/commandline.coffee', 'lib/commandline.js'
+    coffeeSync 'src/configfinder.coffee', 'lib/configfinder.js'
+
+task 'compile:browserify', 'Uses browserify to compile coffeelint', ->
+    b = browserify [ './src/coffeelint.coffee' ]
+    opts =
+        standalone: 'coffeelint'
+    b.transform require('coffeeify')
+    b.bundle(opts).pipe fs.createWriteStream('lib/coffeelint.js')
+
+task 'prepublish', 'Prepublish', ->
+    { npm_config_argv } = process.env
+    if npm_config_argv? and JSON.parse(npm_config_argv).original[0] is 'install'
+        return
+
+    copySync 'package.json', '.package.json'
+    packageJson = require './package.json'
+
+    delete packageJson.dependencies.browserify
+    delete packageJson.dependencies.coffeeify
+    delete packageJson.scripts.install
+
+    fs.writeFileSync 'package.json', JSON.stringify(packageJson, undefined, 2)
+
+    invoke 'compile'
+
+task 'publish', 'publish', ->
+    copySync '.package.json', 'package.json'
+
+task 'install', 'Install', ->
+    unless require("fs").existsSync("lib/commandline.js")
+        invoke 'compile'
+
+
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/bin/coffeelint
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/bin/coffeelint	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/bin/coffeelint	(revision 516)
@@ -1,3 +1,21 @@
 #!/usr/bin/env node
 
-require('../lib/commandline')
+var path = require("path");
+var fs   = require("fs");
+
+// path.existsSync was moved to fs.existsSync node 0.6 -> 0.8
+var existsFn = fs.existsSync || path.existsSync;
+
+var thisdir = path.dirname(fs.realpathSync(__filename));
+
+// This setup allows for VERY fast development. You can clear the lib
+// directory then run without having to recompile the coffeescript.
+//
+// I use this so vim runs the newest code while I work on CoffeeLint. -Asa
+commandline = path.join(thisdir, '..', "lib", "commandline.js");
+if (existsFn(commandline)) {
+    require(commandline);
+} else {
+    require('coffee-script');
+    require('../src/commandline');
+}
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/coffeelint.json
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/coffeelint.json	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/coffeelint.json	(revision 516)
@@ -0,0 +1,25 @@
+{
+    "arrow_spacing": {
+        "level": "error"
+    },
+    "indentation" : {
+        "level" : "error",
+        "value" : 4
+    },
+
+    "cyclomatic_complexity" : {
+        "level" : "warn",
+        "value" : 11
+    },
+
+    "line_endings" : {
+        "value" : "unix",
+        "level" : "error"
+    },
+
+    "space_operators" : {
+        "level" : "error"
+    }
+
+
+}
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/generated_coffeelint.json
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/generated_coffeelint.json	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/generated_coffeelint.json	(revision 516)
@@ -0,0 +1,114 @@
+{
+    "coffeescript_error": {
+        "level": "error"
+    },
+    "arrow_spacing": {
+        "name": "arrow_spacing",
+        "level": "ignore"
+    },
+    "no_tabs": {
+        "name": "no_tabs",
+        "level": "error"
+    },
+    "no_trailing_whitespace": {
+        "name": "no_trailing_whitespace",
+        "level": "error",
+        "allowed_in_comments": false,
+        "allowed_in_empty_lines": true
+    },
+    "max_line_length": {
+        "name": "max_line_length",
+        "value": 80,
+        "level": "error",
+        "limitComments": true
+    },
+    "line_endings": {
+        "name": "line_endings",
+        "level": "ignore",
+        "value": "unix"
+    },
+    "no_trailing_semicolons": {
+        "name": "no_trailing_semicolons",
+        "level": "error"
+    },
+    "indentation": {
+        "name": "indentation",
+        "value": 2,
+        "level": "error"
+    },
+    "camel_case_classes": {
+        "name": "camel_case_classes",
+        "level": "error"
+    },
+    "colon_assignment_spacing": {
+        "name": "colon_assignment_spacing",
+        "level": "ignore",
+        "spacing": {
+            "left": 0,
+            "right": 0
+        }
+    },
+    "no_implicit_braces": {
+        "name": "no_implicit_braces",
+        "level": "ignore",
+        "strict": true
+    },
+    "no_plusplus": {
+        "name": "no_plusplus",
+        "level": "ignore"
+    },
+    "no_throwing_strings": {
+        "name": "no_throwing_strings",
+        "level": "error"
+    },
+    "no_backticks": {
+        "name": "no_backticks",
+        "level": "error"
+    },
+    "no_implicit_parens": {
+        "name": "no_implicit_parens",
+        "level": "ignore"
+    },
+    "no_empty_param_list": {
+        "name": "no_empty_param_list",
+        "level": "ignore"
+    },
+    "no_stand_alone_at": {
+        "name": "no_stand_alone_at",
+        "level": "ignore"
+    },
+    "space_operators": {
+        "name": "space_operators",
+        "level": "ignore"
+    },
+    "duplicate_key": {
+        "name": "duplicate_key",
+        "level": "error"
+    },
+    "empty_constructor_needs_parens": {
+        "name": "empty_constructor_needs_parens",
+        "level": "ignore"
+    },
+    "cyclomatic_complexity": {
+        "name": "cyclomatic_complexity",
+        "value": 10,
+        "level": "ignore"
+    },
+    "newlines_after_classes": {
+        "name": "newlines_after_classes",
+        "value": 3,
+        "level": "ignore"
+    },
+    "no_unnecessary_fat_arrows": {
+        "name": "no_unnecessary_fat_arrows",
+        "level": "warn"
+    },
+    "missing_fat_arrows": {
+        "name": "missing_fat_arrows",
+        "level": "ignore"
+    },
+    "non_empty_constructor_needs_parens": {
+        "name": "non_empty_constructor_needs_parens",
+        "level": "ignore"
+    }
+}
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/lib/coffeelint.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/lib/coffeelint.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/lib/coffeelint.js	(revision 516)
@@ -1,3 +1,235 @@
-// Generated by CoffeeScript 1.6.2
+!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.coffeelint=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
+module.exports={
+  "name": "coffeelint",
+  "description": "Lint your CoffeeScript",
+  "version": "1.0.8",
+  "homepage": "http://www.coffeelint.org",
+  "keywords": [
+    "lint",
+    "coffeescript",
+    "coffee-script"
+  ],
+  "author": "Matthew Perpick <clutchski@gmail.com>",
+  "main": "./lib/coffeelint.js",
+  "engines": {
+    "node": ">=0.8.0"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/clutchski/coffeelint.git"
+  },
+  "bin": {
+    "coffeelint": "./bin/coffeelint"
+  },
+  "dependencies": {
+    "optimist": ">=0.2.8",
+    "coffee-script": "1.6.x",
+    "glob": ">=3.1.9"
+  },
+  "devDependencies": {
+    "vows": ">=0.6.0",
+    "underscore": ">=1.4.4"
+  },
+  "licenses": [
+    {
+      "type": "MIT",
+      "url": "http://github.com/clutchski/coffeelint/raw/master/LICENSE"
+    }
+  ],
+  "scripts": {
+    "pretest": "cake compile",
+    "test": "vows --spec test/*.coffee test/*.litcoffee",
+    "posttest": "npm run lint",
+    "prepublish": "cake prepublish",
+    "publish": "cake publish",
+    "lint": "cake compile && ./bin/coffeelint -f coffeelint.json src/*.coffee test/*.coffee test/*.litcoffee",
+    "lint-csv": "cake compile && ./bin/coffeelint --csv -f coffeelint.json src/*.coffee test/*.coffee",
+    "lint-jslint": "cake compile && ./bin/coffeelint --jslint -f coffeelint.json src/*.coffee test/*.coffee",
+    "compile": "cake compile"
+  }
+}
+},{}],2:[function(_dereq_,module,exports){
+var ASTApi, ASTLinter, BaseLinter,
+  __hasProp = {}.hasOwnProperty,
+  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+BaseLinter = _dereq_('./base_linter.coffee');
+
+ASTApi = (function() {
+  function ASTApi(config) {
+    this.config = config;
+  }
+
+  return ASTApi;
+
+})();
+
+module.exports = ASTLinter = (function(_super) {
+  __extends(ASTLinter, _super);
+
+  function ASTLinter(source, config, rules, CoffeeScript) {
+    this.CoffeeScript = CoffeeScript;
+    ASTLinter.__super__.constructor.call(this, source, config, rules);
+    this.astApi = new ASTApi(this.config);
+  }
+
+  ASTLinter.prototype.acceptRule = function(rule) {
+    return typeof rule.lintAST === 'function';
+  };
+
+  ASTLinter.prototype.lint = function() {
+    var coffeeError, err, errors, rule, v, _i, _len, _ref;
+    errors = [];
+    try {
+      this.node = this.CoffeeScript.nodes(this.source);
+    } catch (_error) {
+      coffeeError = _error;
+      err = this._parseCoffeeScriptError(coffeeError);
+      if (err != null) {
+        errors.push(err);
+      }
+      return errors;
+    }
+    _ref = this.rules;
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      rule = _ref[_i];
+      this.astApi.createError = (function(_this) {
+        return function(attrs) {
+          if (attrs == null) {
+            attrs = {};
+          }
+          return _this.createError(rule.rule.name, attrs);
+        };
+      })(this);
+      rule.errors = errors;
+      v = this.normalizeResult(rule, rule.lintAST(this.node, this.astApi));
+      if (v != null) {
+        return v;
+      }
+    }
+    return errors;
+  };
+
+  ASTLinter.prototype._parseCoffeeScriptError = function(coffeeError) {
+    var attrs, lineNumber, match, message, rule;
+    rule = this.config['coffeescript_error'];
+    message = coffeeError.toString();
+    lineNumber = -1;
+    if (coffeeError.location != null) {
+      lineNumber = coffeeError.location.first_line + 1;
+    } else {
+      match = /line (\d+)/.exec(message);
+      if ((match != null ? match.length : void 0) > 1) {
+        lineNumber = parseInt(match[1], 10);
+      }
+    }
+    attrs = {
+      message: message,
+      level: rule.level,
+      lineNumber: lineNumber
+    };
+    return this.createError('coffeescript_error', attrs);
+  };
+
+  return ASTLinter;
+
+})(BaseLinter);
+
+
+},{"./base_linter.coffee":3}],3:[function(_dereq_,module,exports){
+var BaseLinter, defaults, extend,
+  __slice = [].slice;
+
+extend = function() {
+  var destination, k, source, sources, v, _i, _len;
+  destination = arguments[0], sources = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
+  for (_i = 0, _len = sources.length; _i < _len; _i++) {
+    source = sources[_i];
+    for (k in source) {
+      v = source[k];
+      destination[k] = v;
+    }
+  }
+  return destination;
+};
+
+defaults = function(source, defaults) {
+  return extend({}, defaults, source);
+};
+
+module.exports = BaseLinter = (function() {
+  function BaseLinter(source, config, rules) {
+    this.source = source;
+    this.config = config;
+    this.setupRules(rules);
+  }
+
+  BaseLinter.prototype.isObject = function(obj) {
+    return obj === Object(obj);
+  };
+
+  BaseLinter.prototype.createError = function(ruleName, attrs) {
+    var level;
+    if (attrs == null) {
+      attrs = {};
+    }
+    if (attrs.level == null) {
+      attrs.level = this.config[ruleName].level;
+    }
+    level = attrs.level;
+    if (level !== 'ignore' && level !== 'warn' && level !== 'error') {
+      throw new Error("unknown level " + level);
+    }
+    if (level === 'error' || level === 'warn') {
+      attrs.rule = ruleName;
+      return defaults(attrs, this.config[ruleName]);
+    } else {
+      return null;
+    }
+  };
+
+  BaseLinter.prototype.acceptRule = function(rule) {
+    throw new Error("acceptRule needs to be overridden in the subclass");
+  };
+
+  BaseLinter.prototype.setupRules = function(rules) {
+    var RuleConstructor, level, name, rule, _results;
+    this.rules = [];
+    _results = [];
+    for (name in rules) {
+      RuleConstructor = rules[name];
+      level = this.config[name].level;
+      if (level === 'error' || level === 'warn') {
+        rule = new RuleConstructor(this, this.config);
+        if (this.acceptRule(rule)) {
+          _results.push(this.rules.push(rule));
+        } else {
+          _results.push(void 0);
+        }
+      } else if (level !== 'ignore') {
+        throw new Error("unknown level " + level);
+      } else {
+        _results.push(void 0);
+      }
+    }
+    return _results;
+  };
+
+  BaseLinter.prototype.normalizeResult = function(p, result) {
+    if (result === true) {
+      return this.createError(p.rule.name);
+    }
+    if (this.isObject(result)) {
+      return this.createError(p.rule.name, result);
+    }
+  };
+
+  return BaseLinter;
+
+})();
+
+
+},{}],4:[function(_dereq_,module,exports){
+
 /*
 CoffeeLint
@@ -5,183 +237,602 @@
 Copyright (c) 2011 Matthew Perpick.
 CoffeeLint is freely distributable under the MIT license.
-*/
-
-
-(function() {
-  var ASTLinter, CoffeeScript, ERROR, IGNORE, LexicalLinter, LineLinter, RULES, WARN, block_config, coffeelint, createError, defaults, extend, mergeDefaultConfig, regexes,
-    __slice = [].slice,
-    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
-
-  coffeelint = {};
-
-  if (typeof exports !== "undefined" && exports !== null) {
-    coffeelint = exports;
-    CoffeeScript = require('coffee-script');
+ */
+var ASTLinter, CoffeeScript, ERROR, IGNORE, LexicalLinter, LineLinter, RULES, WARN, coffeelint, cs, defaults, difference, extend, hasSyntaxError, mergeDefaultConfig, packageJSON, _rules,
+  __slice = [].slice,
+  __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
+
+coffeelint = exports;
+
+if (typeof window !== "undefined" && window !== null) {
+  CoffeeScript = window.CoffeeScript;
+} else {
+  cs = 'coffee-script';
+  CoffeeScript = _dereq_(cs);
+}
+
+packageJSON = _dereq_('./../package.json');
+
+coffeelint.VERSION = packageJSON.version;
+
+ERROR = 'error';
+
+WARN = 'warn';
+
+IGNORE = 'ignore';
+
+coffeelint.RULES = RULES = _dereq_('./rules.coffee');
+
+extend = function() {
+  var destination, k, source, sources, v, _i, _len;
+  destination = arguments[0], sources = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
+  for (_i = 0, _len = sources.length; _i < _len; _i++) {
+    source = sources[_i];
+    for (k in source) {
+      v = source[k];
+      destination[k] = v;
+    }
+  }
+  return destination;
+};
+
+defaults = function(source, defaults) {
+  return extend({}, defaults, source);
+};
+
+difference = function(a, b) {
+  var j, _ref, _results;
+  j = 0;
+  _results = [];
+  while (j < a.length) {
+    if (_ref = a[j], __indexOf.call(b, _ref) >= 0) {
+      _results.push(a.splice(j, 1));
+    } else {
+      _results.push(j++);
+    }
+  }
+  return _results;
+};
+
+LineLinter = _dereq_('./line_linter.coffee');
+
+LexicalLinter = _dereq_('./lexical_linter.coffee');
+
+ASTLinter = _dereq_('./ast_linter.coffee');
+
+mergeDefaultConfig = function(userConfig) {
+  var config, rule, ruleConfig;
+  config = {};
+  for (rule in RULES) {
+    ruleConfig = RULES[rule];
+    config[rule] = defaults(userConfig[rule], ruleConfig);
+  }
+  return config;
+};
+
+coffeelint.invertLiterate = function(source) {
+  var line, newSource, _i, _len, _ref;
+  source = CoffeeScript.helpers.invertLiterate(source);
+  newSource = "";
+  _ref = source.split("\n");
+  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+    line = _ref[_i];
+    if (line.match(/^#/)) {
+      line = line.replace(/\s*$/, '');
+    }
+    line = line.replace(/^\s{4}/g, '');
+    newSource += "" + line + "\n";
+  }
+  return newSource;
+};
+
+_rules = {};
+
+coffeelint.registerRule = function(RuleConstructor, ruleName) {
+  var e, name, p, _ref, _ref1;
+  if (ruleName == null) {
+    ruleName = void 0;
+  }
+  p = new RuleConstructor;
+  name = (p != null ? (_ref = p.rule) != null ? _ref.name : void 0 : void 0) || "(unknown)";
+  e = function(msg) {
+    throw new Error("Invalid rule: " + name + " " + msg);
+  };
+  if (p.rule == null) {
+    e("Rules must provide rule attribute with a default configuration.");
+  }
+  if (p.rule.name == null) {
+    e("Rule defaults require a name");
+  }
+  if ((ruleName != null) && ruleName !== p.rule.name) {
+    e("Mismatched rule name: " + ruleName);
+  }
+  if (p.rule.message == null) {
+    e("Rule defaults require a message");
+  }
+  if (p.rule.description == null) {
+    e("Rule defaults require a description");
+  }
+  if ((_ref1 = p.rule.level) !== 'ignore' && _ref1 !== 'warn' && _ref1 !== 'error') {
+    e("Default level must be 'ignore', 'warn', or 'error'");
+  }
+  if (typeof p.lintToken === 'function') {
+    if (!p.tokens) {
+      e("'tokens' is required for 'lintToken'");
+    }
+  } else if (typeof p.lintLine !== 'function' && typeof p.lintAST !== 'function') {
+    e("Rules must implement lintToken, lintLine, or lintAST");
+  }
+  RULES[p.rule.name] = p.rule;
+  return _rules[p.rule.name] = RuleConstructor;
+};
+
+coffeelint.registerRule(_dereq_('./rules/arrow_spacing.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/no_tabs.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/no_trailing_whitespace.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/max_line_length.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/line_endings.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/no_trailing_semicolons.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/indentation.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/camel_case_classes.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/colon_assignment_spacing.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/no_implicit_braces.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/no_plusplus.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/no_throwing_strings.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/no_backticks.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/no_implicit_parens.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/no_empty_param_list.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/no_stand_alone_at.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/space_operators.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/duplicate_key.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/empty_constructor_needs_parens.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/cyclomatic_complexity.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/newlines_after_classes.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/no_unnecessary_fat_arrows.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/missing_fat_arrows.coffee'));
+
+coffeelint.registerRule(_dereq_('./rules/non_empty_constructor_needs_parens.coffee'));
+
+hasSyntaxError = function(source) {
+  try {
+    CoffeeScript.tokens(source);
+    return false;
+  } catch (_error) {}
+  return true;
+};
+
+coffeelint.lint = function(source, userConfig, literate) {
+  var all_errors, astErrors, block_config, cmd, config, disabled, disabled_initially, e, errors, i, l, lexErrors, lexicalLinter, lineErrors, lineLinter, next_line, r, rules, s, tokensByLine, _i, _j, _k, _len, _len1, _ref, _ref1, _ref2, _ref3, _ref4;
+  if (userConfig == null) {
+    userConfig = {};
+  }
+  if (literate == null) {
+    literate = false;
+  }
+  if (literate) {
+    source = this.invertLiterate(source);
+  }
+  config = mergeDefaultConfig(userConfig);
+  disabled_initially = [];
+  _ref = source.split('\n');
+  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+    l = _ref[_i];
+    s = LineLinter.configStatement.exec(l);
+    if ((s != null ? s.length : void 0) > 2 && __indexOf.call(s, 'enable') >= 0) {
+      _ref1 = s.slice(1);
+      for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
+        r = _ref1[_j];
+        if (r !== 'enable' && r !== 'disable') {
+          if (!(r in config && ((_ref2 = config[r].level) === 'warn' || _ref2 === 'error'))) {
+            disabled_initially.push(r);
+            config[r] = {
+              level: 'error'
+            };
+          }
+        }
+      }
+    }
+  }
+  astErrors = new ASTLinter(source, config, _rules, CoffeeScript).lint();
+  errors = [].concat(astErrors);
+  if (!hasSyntaxError(source)) {
+    lexicalLinter = new LexicalLinter(source, config, _rules, CoffeeScript);
+    lexErrors = lexicalLinter.lint();
+    errors = errors.concat(lexErrors);
+    tokensByLine = lexicalLinter.tokensByLine;
+    lineLinter = new LineLinter(source, config, _rules, tokensByLine, literate);
+    lineErrors = lineLinter.lint();
+    errors = errors.concat(lineErrors);
+    block_config = lineLinter.block_config;
   } else {
-    this.coffeelint = coffeelint;
-    CoffeeScript = this.CoffeeScript;
-  }
-
-  coffeelint.VERSION = "0.5.7";
-
-  ERROR = 'error';
-
-  WARN = 'warn';
-
-  IGNORE = 'ignore';
-
-  coffeelint.RULES = RULES = {
-    no_tabs: {
-      level: ERROR,
-      message: 'Line contains tab indentation',
-      description: "This rule forbids tabs in indentation. Enough said. It is enabled by\ndefault."
-    },
-    no_trailing_whitespace: {
-      level: ERROR,
-      message: 'Line ends with trailing whitespace',
-      allowed_in_comments: false,
-      description: "This rule forbids trailing whitespace in your code, since it is\nneedless cruft. It is enabled by default."
-    },
-    max_line_length: {
-      value: 80,
-      level: ERROR,
-      message: 'Line exceeds maximum allowed length',
-      description: "This rule imposes a maximum line length on your code. <a\nhref=\"http://www.python.org/dev/peps/pep-0008/\">Python's style\nguide</a> does a good job explaining why you might want to limit the\nlength of your lines, though this is a matter of taste.\n\nLines can be no longer than eighty characters by default."
-    },
-    camel_case_classes: {
-      level: ERROR,
-      message: 'Class names should be camel cased',
-      description: "This rule mandates that all class names are camel cased. Camel\ncasing class names is a generally accepted way of distinguishing\nconstructor functions - which require the 'new' prefix to behave\nproperly - from plain old functions.\n<pre>\n<code># Good!\nclass BoaConstrictor\n\n# Bad!\nclass boaConstrictor\n</code>\n</pre>\nThis rule is enabled by default."
-    },
-    indentation: {
-      value: 2,
-      level: ERROR,
-      message: 'Line contains inconsistent indentation',
-      description: "This rule imposes a standard number of spaces to be used for\nindentation. Since whitespace is significant in CoffeeScript, it's\ncritical that a project chooses a standard indentation format and\nstays consistent. Other roads lead to darkness. <pre> <code>#\nEnabling this option will prevent this ugly\n# but otherwise valid CoffeeScript.\ntwoSpaces = () ->\n  fourSpaces = () ->\n      eightSpaces = () ->\n            'this is valid CoffeeScript'\n\n</code>\n</pre>\nTwo space indentation is enabled by default."
-    },
-    no_implicit_braces: {
-      level: IGNORE,
-      message: 'Implicit braces are forbidden',
-      description: "This rule prohibits implicit braces when declaring object literals.\nImplicit braces can make code more difficult to understand,\nespecially when used in combination with optional parenthesis.\n<pre>\n<code># Do you find this code ambiguous? Is it a\n# function call with three arguments or four?\nmyFunction a, b, 1:2, 3:4\n\n# While the same code written in a more\n# explicit manner has no ambiguity.\nmyFunction(a, b, {1:2, 3:4})\n</code>\n</pre>\nImplicit braces are permitted by default, since their use is\nidiomatic CoffeeScript."
-    },
-    no_trailing_semicolons: {
-      level: ERROR,
-      message: 'Line contains a trailing semicolon',
-      description: "This rule prohibits trailing semicolons, since they are needless\ncruft in CoffeeScript.\n<pre>\n<code># This semicolon is meaningful.\nx = '1234'; console.log(x)\n\n# This semicolon is redundant.\nalert('end of line');\n</code>\n</pre>\nTrailing semicolons are forbidden by default."
-    },
-    no_plusplus: {
-      level: IGNORE,
-      message: 'The increment and decrement operators are forbidden',
-      description: "This rule forbids the increment and decrement arithmetic operators.\nSome people believe the <tt>++</tt> and <tt>--</tt> to be cryptic\nand the cause of bugs due to misunderstandings of their precedence\nrules.\nThis rule is disabled by default."
-    },
-    no_throwing_strings: {
-      level: ERROR,
-      message: 'Throwing strings is forbidden',
-      description: "This rule forbids throwing string literals or interpolations. While\nJavaScript (and CoffeeScript by extension) allow any expression to\nbe thrown, it is best to only throw <a\nhref=\"https://developer.mozilla.org\n/en/JavaScript/Reference/Global_Objects/Error\"> Error</a> objects,\nbecause they contain valuable debugging information like the stack\ntrace. Because of JavaScript's dynamic nature, CoffeeLint cannot\nensure you are always throwing instances of <tt>Error</tt>. It will\nonly catch the simple but real case of throwing literal strings.\n<pre>\n<code># CoffeeLint will catch this:\nthrow \"i made a boo boo\"\n\n# ... but not this:\nthrow getSomeString()\n</code>\n</pre>\nThis rule is enabled by default."
-    },
-    cyclomatic_complexity: {
-      value: 10,
-      level: IGNORE,
-      message: 'The cyclomatic complexity is too damn high'
-    },
-    no_backticks: {
-      level: ERROR,
-      message: 'Backticks are forbidden',
-      description: "Backticks allow snippets of JavaScript to be embedded in\nCoffeeScript. While some folks consider backticks useful in a few\nniche circumstances, they should be avoided because so none of\nJavaScript's \"bad parts\", like <tt>with</tt> and <tt>eval</tt>,\nsneak into CoffeeScript.\nThis rule is enabled by default."
-    },
-    line_endings: {
-      level: IGNORE,
-      value: 'unix',
-      message: 'Line contains incorrect line endings',
-      description: "This rule ensures your project uses only <tt>windows</tt> or\n<tt>unix</tt> line endings. This rule is disabled by default."
-    },
-    no_implicit_parens: {
-      level: IGNORE,
-      message: 'Implicit parens are forbidden',
-      description: "This rule prohibits implicit parens on function calls.\n<pre>\n<code># Some folks don't like this style of coding.\nmyFunction a, b, c\n\n# And would rather it always be written like this:\nmyFunction(a, b, c)\n</code>\n</pre>\nImplicit parens are permitted by default, since their use is\nidiomatic CoffeeScript."
-    },
-    empty_constructor_needs_parens: {
-      level: IGNORE,
-      message: 'Invoking a constructor without parens and without arguments'
-    },
-    non_empty_constructor_needs_parens: {
-      level: IGNORE,
-      message: 'Invoking a constructor without parens and with arguments'
-    },
-    no_empty_param_list: {
-      level: IGNORE,
-      message: 'Empty parameter list is forbidden',
-      description: "This rule prohibits empty parameter lists in function definitions.\n<pre>\n<code># The empty parameter list in here is unnecessary:\nmyFunction = () -&gt;\n\n# We might favor this instead:\nmyFunction = -&gt;\n</code>\n</pre>\nEmpty parameter lists are permitted by default."
-    },
-    space_operators: {
-      level: IGNORE,
-      message: 'Operators must be spaced properly'
-    },
-    duplicate_key: {
-      level: ERROR,
-      message: 'Duplicate key defined in object or class'
-    },
-    newlines_after_classes: {
-      value: 3,
-      level: IGNORE,
-      message: 'Wrong count of newlines between a class and other code'
-    },
-    no_stand_alone_at: {
-      level: IGNORE,
-      message: '@ must not be used stand alone',
-      description: "This rule checks that no stand alone @ are in use, they are\ndiscouraged. Further information in CoffeScript issue <a\nhref=\"https://github.com/jashkenas/coffee-script/issues/1601\">\n#1601</a>"
-    },
-    arrow_spacing: {
-      level: IGNORE,
-      message: 'Function arrow (->) must be spaced properly',
-      description: "<p>This rule checks to see that there is spacing before and after\nthe arrow operator that declares a function. This rule is disabled\nby default.</p> <p>Note that if arrow_spacing is enabled, and you\npass an empty function as a parameter, arrow_spacing will accept\neither a space or no space in-between the arrow operator and the\nparenthesis</p>\n<pre><code># Both of this will not trigger an error,\n# even with arrow_spacing enabled.\nx(-> 3)\nx( -> 3)\n\n# However, this will trigger an error\nx((a,b)-> 3)\n</code>\n</pre>"
-    },
-    coffeescript_error: {
-      level: ERROR,
-      message: ''
-    }
-  };
-
-  regexes = {
-    trailingWhitespace: /[^\s]+[\t ]+\r?$/,
-    lineHasComment: /^\s*[^\#]*\#/,
-    indentation: /\S/,
-    longUrlComment: /^\s*\#\s*http[^\s]+$/,
-    camelCase: /^[A-Z][a-zA-Z\d]*$/,
-    trailingSemicolon: /;\r?$/,
-    configStatement: /coffeelint:\s*(disable|enable)(?:=([\w\s,]*))?/
-  };
-
-  extend = function() {
-    var destination, k, source, sources, v, _i, _len;
-
-    destination = arguments[0], sources = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
-    for (_i = 0, _len = sources.length; _i < _len; _i++) {
-      source = sources[_i];
-      for (k in source) {
-        v = source[k];
-        destination[k] = v;
-      }
-    }
-    return destination;
-  };
-
-  defaults = function(source, defaults) {
-    return extend({}, defaults, source);
-  };
-
-  createError = function(rule, attrs) {
-    var level;
-
+    block_config = {
+      enable: {},
+      disable: {}
+    };
+  }
+  errors.sort(function(a, b) {
+    return a.lineNumber - b.lineNumber;
+  });
+  all_errors = errors;
+  errors = [];
+  disabled = disabled_initially;
+  next_line = 0;
+  for (i = _k = 0, _ref3 = source.split('\n').length; 0 <= _ref3 ? _k < _ref3 : _k > _ref3; i = 0 <= _ref3 ? ++_k : --_k) {
+    for (cmd in block_config) {
+      rules = block_config[cmd][i];
+      if (rules != null) {
+        ({
+          'disable': function() {
+            return disabled = disabled.concat(rules);
+          },
+          'enable': function() {
+            difference(disabled, rules);
+            if (rules.length === 0) {
+              return disabled = disabled_initially;
+            }
+          }
+        })[cmd]();
+      }
+    }
+    while (next_line === i && all_errors.length > 0) {
+      next_line = all_errors[0].lineNumber - 1;
+      e = all_errors[0];
+      if (e.lineNumber === i + 1 || (e.lineNumber == null)) {
+        e = all_errors.shift();
+        if (_ref4 = e.rule, __indexOf.call(disabled, _ref4) < 0) {
+          errors.push(e);
+        }
+      }
+    }
+  }
+  return errors;
+};
+
+
+},{"./../package.json":1,"./ast_linter.coffee":2,"./lexical_linter.coffee":5,"./line_linter.coffee":6,"./rules.coffee":7,"./rules/arrow_spacing.coffee":8,"./rules/camel_case_classes.coffee":9,"./rules/colon_assignment_spacing.coffee":10,"./rules/cyclomatic_complexity.coffee":11,"./rules/duplicate_key.coffee":12,"./rules/empty_constructor_needs_parens.coffee":13,"./rules/indentation.coffee":14,"./rules/line_endings.coffee":15,"./rules/max_line_length.coffee":16,"./rules/missing_fat_arrows.coffee":17,"./rules/newlines_after_classes.coffee":18,"./rules/no_backticks.coffee":19,"./rules/no_empty_param_list.coffee":20,"./rules/no_implicit_braces.coffee":21,"./rules/no_implicit_parens.coffee":22,"./rules/no_plusplus.coffee":23,"./rules/no_stand_alone_at.coffee":24,"./rules/no_tabs.coffee":25,"./rules/no_throwing_strings.coffee":26,"./rules/no_trailing_semicolons.coffee":27,"./rules/no_trailing_whitespace.coffee":28,"./rules/no_unnecessary_fat_arrows.coffee":29,"./rules/non_empty_constructor_needs_parens.coffee":30,"./rules/space_operators.coffee":31}],5:[function(_dereq_,module,exports){
+var BaseLinter, LexicalLinter, TokenApi,
+  __hasProp = {}.hasOwnProperty,
+  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+  __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
+
+TokenApi = (function() {
+  function TokenApi(CoffeeScript, source, config, tokensByLine) {
+    this.config = config;
+    this.tokensByLine = tokensByLine;
+    this.tokens = CoffeeScript.tokens(source);
+    this.lines = source.split('\n');
+    this.tokensByLine = {};
+  }
+
+  TokenApi.prototype.i = 0;
+
+  TokenApi.prototype.peek = function(n) {
+    if (n == null) {
+      n = 1;
+    }
+    return this.tokens[this.i + n] || null;
+  };
+
+  return TokenApi;
+
+})();
+
+BaseLinter = _dereq_('./base_linter.coffee');
+
+module.exports = LexicalLinter = (function(_super) {
+  __extends(LexicalLinter, _super);
+
+  function LexicalLinter(source, config, rules, CoffeeScript) {
+    LexicalLinter.__super__.constructor.call(this, source, config, rules);
+    this.tokenApi = new TokenApi(CoffeeScript, source, this.config, this.tokensByLine);
+    this.tokensByLine = this.tokenApi.tokensByLine;
+  }
+
+  LexicalLinter.prototype.acceptRule = function(rule) {
+    return typeof rule.lintToken === 'function';
+  };
+
+  LexicalLinter.prototype.lint = function() {
+    var error, errors, i, token, _i, _j, _len, _len1, _ref, _ref1;
+    errors = [];
+    _ref = this.tokenApi.tokens;
+    for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
+      token = _ref[i];
+      this.tokenApi.i = i;
+      _ref1 = this.lintToken(token);
+      for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
+        error = _ref1[_j];
+        errors.push(error);
+      }
+    }
+    return errors;
+  };
+
+  LexicalLinter.prototype.lintToken = function(token) {
+    var errors, lineNumber, rule, type, v, value, _base, _i, _len, _ref, _ref1;
+    type = token[0], value = token[1], lineNumber = token[2];
+    if (typeof lineNumber === "object") {
+      if (type === 'OUTDENT' || type === 'INDENT') {
+        lineNumber = lineNumber.last_line;
+      } else {
+        lineNumber = lineNumber.first_line;
+      }
+    }
+    if ((_base = this.tokensByLine)[lineNumber] == null) {
+      _base[lineNumber] = [];
+    }
+    this.tokensByLine[lineNumber].push(token);
+    this.lineNumber = lineNumber || this.lineNumber || 0;
+    this.tokenApi.lineNumber = this.lineNumber;
+    errors = [];
+    _ref = this.rules;
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      rule = _ref[_i];
+      if (!(_ref1 = token[0], __indexOf.call(rule.tokens, _ref1) >= 0)) {
+        continue;
+      }
+      v = this.normalizeResult(rule, rule.lintToken(token, this.tokenApi));
+      if (v != null) {
+        errors.push(v);
+      }
+    }
+    return errors;
+  };
+
+  LexicalLinter.prototype.createError = function(ruleName, attrs) {
     if (attrs == null) {
       attrs = {};
     }
-    level = attrs.level;
-    if (level !== IGNORE && level !== WARN && level !== ERROR) {
-      throw new Error("unknown level " + level);
-    }
-    if (level === ERROR || level === WARN) {
-      attrs.rule = rule;
-      return defaults(attrs, RULES[rule]);
+    attrs.lineNumber = this.lineNumber + 1;
+    attrs.line = this.tokenApi.lines[this.lineNumber];
+    return LexicalLinter.__super__.createError.call(this, ruleName, attrs);
+  };
+
+  return LexicalLinter;
+
+})(BaseLinter);
+
+
+},{"./base_linter.coffee":3}],6:[function(_dereq_,module,exports){
+var BaseLinter, LineApi, LineLinter, configStatement,
+  __hasProp = {}.hasOwnProperty,
+  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+LineApi = (function() {
+  function LineApi(source, config, tokensByLine, literate) {
+    this.config = config;
+    this.tokensByLine = tokensByLine;
+    this.literate = literate;
+    this.line = null;
+    this.lines = source.split('\n');
+    this.lineCount = this.lines.length;
+    this.context = {
+      "class": {
+        inClass: false,
+        lastUnemptyLineInClass: null,
+        classIndents: null
+      }
+    };
+  }
+
+  LineApi.prototype.lineNumber = 0;
+
+  LineApi.prototype.isLiterate = function() {
+    return this.literate;
+  };
+
+  LineApi.prototype.maintainClassContext = function(line) {
+    if (this.context["class"].inClass) {
+      if (this.lineHasToken('INDENT')) {
+        this.context["class"].classIndents++;
+      } else if (this.lineHasToken('OUTDENT')) {
+        this.context["class"].classIndents--;
+        if (this.context["class"].classIndents === 0) {
+          this.context["class"].inClass = false;
+          this.context["class"].classIndents = null;
+        }
+      }
+      if (this.context["class"].inClass && !line.match(/^\s*$/)) {
+        this.context["class"].lastUnemptyLineInClass = this.lineNumber;
+      }
+    } else {
+      if (!line.match(/\\s*/)) {
+        this.context["class"].lastUnemptyLineInClass = null;
+      }
+      if (this.lineHasToken('CLASS')) {
+        this.context["class"].inClass = true;
+        this.context["class"].lastUnemptyLineInClass = this.lineNumber;
+        this.context["class"].classIndents = 0;
+      }
+    }
+    return null;
+  };
+
+  LineApi.prototype.isLastLine = function() {
+    return this.lineNumber === this.lineCount - 1;
+  };
+
+  LineApi.prototype.lineHasToken = function(tokenType, lineNumber) {
+    var token, tokens, _i, _len;
+    if (tokenType == null) {
+      tokenType = null;
+    }
+    if (lineNumber == null) {
+      lineNumber = null;
+    }
+    lineNumber = lineNumber != null ? lineNumber : this.lineNumber;
+    if (tokenType == null) {
+      return this.tokensByLine[lineNumber] != null;
+    } else {
+      tokens = this.tokensByLine[lineNumber];
+      if (tokens == null) {
+        return null;
+      }
+      for (_i = 0, _len = tokens.length; _i < _len; _i++) {
+        token = tokens[_i];
+        if (token[0] === tokenType) {
+          return true;
+        }
+      }
+      return false;
+    }
+  };
+
+  LineApi.prototype.getLineTokens = function() {
+    return this.tokensByLine[this.lineNumber] || [];
+  };
+
+  return LineApi;
+
+})();
+
+BaseLinter = _dereq_('./base_linter.coffee');
+
+configStatement = /coffeelint:\s*(disable|enable)(?:=([\w\s,]*))?/;
+
+module.exports = LineLinter = (function(_super) {
+  __extends(LineLinter, _super);
+
+  LineLinter.configStatement = configStatement;
+
+  function LineLinter(source, config, rules, tokensByLine, literate) {
+    if (literate == null) {
+      literate = false;
+    }
+    LineLinter.__super__.constructor.call(this, source, config, rules);
+    this.lineApi = new LineApi(source, config, tokensByLine, literate);
+    this.block_config = {
+      enable: {},
+      disable: {}
+    };
+  }
+
+  LineLinter.prototype.acceptRule = function(rule) {
+    return typeof rule.lintLine === 'function';
+  };
+
+  LineLinter.prototype.lint = function() {
+    var error, errors, line, lineNumber, _i, _j, _len, _len1, _ref, _ref1;
+    errors = [];
+    _ref = this.lineApi.lines;
+    for (lineNumber = _i = 0, _len = _ref.length; _i < _len; lineNumber = ++_i) {
+      line = _ref[lineNumber];
+      this.lineApi.lineNumber = this.lineNumber = lineNumber;
+      this.lineApi.maintainClassContext(line);
+      this.collectInlineConfig(line);
+      _ref1 = this.lintLine(line);
+      for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
+        error = _ref1[_j];
+        errors.push(error);
+      }
+    }
+    return errors;
+  };
+
+  LineLinter.prototype.lintLine = function(line) {
+    var errors, rule, v, _i, _len, _ref;
+    errors = [];
+    _ref = this.rules;
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      rule = _ref[_i];
+      v = this.normalizeResult(rule, rule.lintLine(line, this.lineApi));
+      if (v != null) {
+        errors.push(v);
+      }
+    }
+    return errors;
+  };
+
+  LineLinter.prototype.collectInlineConfig = function(line) {
+    var cmd, r, result, rules, _i, _len, _ref;
+    result = configStatement.exec(line);
+    if (result != null) {
+      cmd = result[1];
+      rules = [];
+      if (result[2] != null) {
+        _ref = result[2].split(',');
+        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+          r = _ref[_i];
+          rules.push(r.replace(/^\s+|\s+$/g, ""));
+        }
+      }
+      this.block_config[cmd][this.lineNumber] = rules;
+    }
+    return null;
+  };
+
+  LineLinter.prototype.createError = function(rule, attrs) {
+    var _ref;
+    if (attrs == null) {
+      attrs = {};
+    }
+    attrs.lineNumber = this.lineNumber + 1;
+    attrs.level = (_ref = this.config[rule]) != null ? _ref.level : void 0;
+    return LineLinter.__super__.createError.call(this, rule, attrs);
+  };
+
+  return LineLinter;
+
+})(BaseLinter);
+
+
+},{"./base_linter.coffee":3}],7:[function(_dereq_,module,exports){
+var ERROR, IGNORE, WARN;
+
+ERROR = 'error';
+
+WARN = 'warn';
+
+IGNORE = 'ignore';
+
+module.exports = {
+  coffeescript_error: {
+    level: ERROR,
+    message: ''
+  }
+};
+
+
+},{}],8:[function(_dereq_,module,exports){
+var ArrowSpacing;
+
+module.exports = ArrowSpacing = (function() {
+  function ArrowSpacing() {}
+
+  ArrowSpacing.prototype.rule = {
+    name: 'arrow_spacing',
+    level: 'ignore',
+    message: 'Function arrow (->) must be spaced properly',
+    description: "<p>This rule checks to see that there is spacing before and after\nthe arrow operator that declares a function. This rule is disabled\nby default.</p> <p>Note that if arrow_spacing is enabled, and you\npass an empty function as a parameter, arrow_spacing will accept\neither a space or no space in-between the arrow operator and the\nparenthesis</p>\n<pre><code># Both of this will not trigger an error,\n# even with arrow_spacing enabled.\nx(-> 3)\nx( -> 3)\n\n# However, this will trigger an error\nx((a,b)-> 3)\n</code>\n</pre>"
+  };
+
+  ArrowSpacing.prototype.tokens = ['->'];
+
+  ArrowSpacing.prototype.lintToken = function(token, tokenApi) {
+    var pp;
+    pp = tokenApi.peek(-1);
+    if (!(((token.spaced != null) || (token.newLine != null) || this.atEof(tokenApi)) && (((pp.spaced != null) || pp[0] === 'TERMINATOR') || (pp.generated != null) || pp[0] === "INDENT" || (pp[1] === "(" && (pp.generated == null))))) {
+      return true;
     } else {
       return null;
@@ -189,943 +840,1188 @@
   };
 
-  block_config = {
-    enable: {},
-    disable: {}
-  };
-
-  LineLinter = (function() {
-    function LineLinter(source, config, tokensByLine) {
-      this.source = source;
-      this.config = config;
-      this.line = null;
-      this.lineNumber = 0;
-      this.tokensByLine = tokensByLine;
-      this.lines = this.source.split('\n');
-      this.lineCount = this.lines.length;
-      this.context = {
-        "class": {
-          inClass: false,
-          lastUnemptyLineInClass: null,
-          classIndents: null
-        }
+  ArrowSpacing.prototype.atEof = function(tokenApi) {
+    var i, token, tokens, _i, _len, _ref, _ref1;
+    tokens = tokenApi.tokens, i = tokenApi.i;
+    _ref = tokens.slice(i + 1);
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      token = _ref[_i];
+      if (!(token.generated || ((_ref1 = token[0]) === 'OUTDENT' || _ref1 === 'TERMINATOR'))) {
+        return false;
+      }
+    }
+    return true;
+  };
+
+  return ArrowSpacing;
+
+})();
+
+
+},{}],9:[function(_dereq_,module,exports){
+var CamelCaseClasses, regexes;
+
+regexes = {
+  camelCase: /^[A-Z][a-zA-Z\d]*$/
+};
+
+module.exports = CamelCaseClasses = (function() {
+  function CamelCaseClasses() {}
+
+  CamelCaseClasses.prototype.rule = {
+    name: 'camel_case_classes',
+    level: 'error',
+    message: 'Class names should be camel cased',
+    description: "This rule mandates that all class names are CamelCased. Camel\ncasing class names is a generally accepted way of distinguishing\nconstructor functions - which require the 'new' prefix to behave\nproperly - from plain old functions.\n<pre>\n<code># Good!\nclass BoaConstrictor\n\n# Bad!\nclass boaConstrictor\n</code>\n</pre>\nThis rule is enabled by default."
+  };
+
+  CamelCaseClasses.prototype.tokens = ['CLASS'];
+
+  CamelCaseClasses.prototype.lintToken = function(token, tokenApi) {
+    var className, offset, _ref, _ref1, _ref2;
+    if ((token.newLine != null) || ((_ref = tokenApi.peek()[0]) === 'INDENT' || _ref === 'EXTENDS')) {
+      return null;
+    }
+    className = null;
+    offset = 1;
+    while (!className) {
+      if (((_ref1 = tokenApi.peek(offset + 1)) != null ? _ref1[0] : void 0) === '.') {
+        offset += 2;
+      } else if (((_ref2 = tokenApi.peek(offset)) != null ? _ref2[0] : void 0) === '@') {
+        offset += 1;
+      } else {
+        className = tokenApi.peek(offset)[1];
+      }
+    }
+    if (!regexes.camelCase.test(className)) {
+      return {
+        context: "class name: " + className
       };
     }
-
-    LineLinter.prototype.lint = function() {
-      var error, errors, line, lineNumber, _i, _len, _ref;
-
-      errors = [];
-      _ref = this.lines;
-      for (lineNumber = _i = 0, _len = _ref.length; _i < _len; lineNumber = ++_i) {
-        line = _ref[lineNumber];
-        this.lineNumber = lineNumber;
-        this.line = line;
-        this.maintainClassContext();
-        error = this.lintLine();
-        if (error) {
-          errors.push(error);
-        }
-      }
-      return errors;
+  };
+
+  return CamelCaseClasses;
+
+})();
+
+
+},{}],10:[function(_dereq_,module,exports){
+var ColonAssignmentSpacing;
+
+module.exports = ColonAssignmentSpacing = (function() {
+  function ColonAssignmentSpacing() {}
+
+  ColonAssignmentSpacing.prototype.rule = {
+    name: 'colon_assignment_spacing',
+    level: 'ignore',
+    message: 'Colon assignment without proper spacing',
+    spacing: {
+      left: 0,
+      right: 0
+    },
+    description: "<p>This rule checks to see that there is spacing before and\nafter the colon in a colon assignment (i.e., classes, objects).\nThe spacing amount is specified by\nspacing.left and spacing.right, respectively.\nA zero value means no spacing required.\n</p>\n<pre><code>\n#\n# If spacing.left and spacing.right is 1\n#\n\n# Good\nobject = {spacing : true}\nclass Dog\n  canBark : true\n\n# Bad\nobject = {spacing: true}\nclass Cat\n  canBark: false\n</code></pre>"
+  };
+
+  ColonAssignmentSpacing.prototype.tokens = [':'];
+
+  ColonAssignmentSpacing.prototype.lintToken = function(token, tokenApi) {
+    var checkSpacing, getSpaceFromToken, isLeftSpaced, isRightSpaced, leftSpacing, nextToken, previousToken, rightSpacing, spacingAllowances, _ref, _ref1;
+    spacingAllowances = tokenApi.config[this.rule.name].spacing;
+    previousToken = tokenApi.peek(-1);
+    nextToken = tokenApi.peek(1);
+    getSpaceFromToken = function(direction) {
+      switch (direction) {
+        case 'left':
+          return token[2].first_column - previousToken[2].last_column - 1;
+        case 'right':
+          return nextToken[2].first_column - token[2].first_column - 1;
+      }
     };
-
-    LineLinter.prototype.lintLine = function() {
-      return this.checkTabs() || this.checkTrailingWhitespace() || this.checkLineLength() || this.checkTrailingSemicolon() || this.checkLineEndings() || this.checkComments() || this.checkNewlinesAfterClasses();
+    checkSpacing = function(direction) {
+      var isSpaced, spacing;
+      spacing = getSpaceFromToken(direction);
+      isSpaced = spacing < 0 ? true : spacing === parseInt(spacingAllowances[direction]);
+      return [isSpaced, spacing];
     };
-
-    LineLinter.prototype.checkTabs = function() {
-      var indentation;
-
-      indentation = this.line.split(regexes.indentation)[0];
-      if (this.lineHasToken() && __indexOf.call(indentation, '\t') >= 0) {
-        return this.createLineError('no_tabs');
-      } else {
-        return null;
-      }
-    };
-
-    LineLinter.prototype.checkTrailingWhitespace = function() {
-      var line, str, token, tokens, _i, _len, _ref, _ref1;
-
-      if (regexes.trailingWhitespace.test(this.line)) {
-        if (!((_ref = this.config['no_trailing_whitespace']) != null ? _ref.allowed_in_comments : void 0)) {
-          return this.createLineError('no_trailing_whitespace');
-        }
-        line = this.line;
-        tokens = this.tokensByLine[this.lineNumber];
-        if (!tokens) {
-          return null;
-        }
-        _ref1 = (function() {
-          var _j, _len, _results;
-
-          _results = [];
-          for (_j = 0, _len = tokens.length; _j < _len; _j++) {
-            token = tokens[_j];
-            if (token[0] === 'STRING') {
-              _results.push(token[1]);
-            }
-          }
-          return _results;
-        })();
-        for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
-          str = _ref1[_i];
-          line = line.replace(str, 'STRING');
-        }
-        if (!regexes.lineHasComment.test(line)) {
-          return this.createLineError('no_trailing_whitespace');
-        } else {
-          return null;
-        }
-      } else {
-        return null;
-      }
-    };
-
-    LineLinter.prototype.checkLineLength = function() {
-      var attrs, max, rule, _ref;
-
-      rule = 'max_line_length';
-      max = (_ref = this.config[rule]) != null ? _ref.value : void 0;
-      if (max && max < this.line.length && !regexes.longUrlComment.test(this.line)) {
-        attrs = {
-          context: "Length is " + this.line.length + ", max is " + max
-        };
-        return this.createLineError(rule, attrs);
-      } else {
-        return null;
-      }
-    };
-
-    LineLinter.prototype.checkTrailingSemicolon = function() {
-      var first, hasNewLine, hasSemicolon, last, _i, _ref;
-
-      hasSemicolon = regexes.trailingSemicolon.test(this.line);
-      _ref = this.getLineTokens(), first = 2 <= _ref.length ? __slice.call(_ref, 0, _i = _ref.length - 1) : (_i = 0, []), last = _ref[_i++];
-      hasNewLine = last && (last.newLine != null);
-      if (hasSemicolon && !hasNewLine && this.lineHasToken()) {
-        return this.createLineError('no_trailing_semicolons');
-      } else {
-        return null;
-      }
-    };
-
-    LineLinter.prototype.checkLineEndings = function() {
-      var ending, lastChar, rule, valid, _ref;
-
-      rule = 'line_endings';
-      ending = (_ref = this.config[rule]) != null ? _ref.value : void 0;
-      if (!ending || this.isLastLine() || !this.line) {
-        return null;
-      }
-      lastChar = this.line[this.line.length - 1];
-      valid = (function() {
-        if (ending === 'windows') {
-          return lastChar === '\r';
-        } else if (ending === 'unix') {
-          return lastChar !== '\r';
-        } else {
-          throw new Error("unknown line ending type: " + ending);
-        }
-      })();
-      if (!valid) {
-        return this.createLineError(rule, {
-          context: "Expected " + ending
-        });
-      } else {
-        return null;
-      }
-    };
-
-    LineLinter.prototype.checkComments = function() {
-      var cmd, r, result, rules, _i, _len, _ref;
-
-      result = regexes.configStatement.exec(this.line);
-      if (result != null) {
-        cmd = result[1];
-        rules = [];
-        if (result[2] != null) {
-          _ref = result[2].split(',');
-          for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-            r = _ref[_i];
-            rules.push(r.replace(/^\s+|\s+$/g, ""));
-          }
-        }
-        block_config[cmd][this.lineNumber] = rules;
-      }
+    _ref = checkSpacing('left'), isLeftSpaced = _ref[0], leftSpacing = _ref[1];
+    _ref1 = checkSpacing('right'), isRightSpaced = _ref1[0], rightSpacing = _ref1[1];
+    if (isLeftSpaced && isRightSpaced) {
       return null;
-    };
-
-    LineLinter.prototype.checkNewlinesAfterClasses = function() {
-      var ending, got, rule;
-
-      rule = 'newlines_after_classes';
-      ending = this.config[rule].value;
-      if (!ending || this.isLastLine()) {
-        return null;
-      }
-      if (!this.context["class"].inClass && (this.context["class"].lastUnemptyLineInClass != null) && ((this.lineNumber - 1) - this.context["class"].lastUnemptyLineInClass) !== ending) {
-        got = (this.lineNumber - 1) - this.context["class"].lastUnemptyLineInClass;
-        return this.createLineError(rule, {
-          context: "Expected " + ending + " got " + got
-        });
-      }
-      return null;
-    };
-
-    LineLinter.prototype.createLineError = function(rule, attrs) {
-      var _ref;
-
-      if (attrs == null) {
-        attrs = {};
-      }
-      attrs.lineNumber = this.lineNumber + 1;
-      attrs.level = (_ref = this.config[rule]) != null ? _ref.level : void 0;
-      return createError(rule, attrs);
-    };
-
-    LineLinter.prototype.isLastLine = function() {
-      return this.lineNumber === this.lineCount - 1;
-    };
-
-    LineLinter.prototype.lineHasToken = function(tokenType, lineNumber) {
-      var token, tokens, _i, _len;
-
-      if (tokenType == null) {
-        tokenType = null;
-      }
-      if (lineNumber == null) {
-        lineNumber = null;
-      }
-      lineNumber = lineNumber != null ? lineNumber : this.lineNumber;
-      if (tokenType == null) {
-        return this.tokensByLine[lineNumber] != null;
-      } else {
-        tokens = this.tokensByLine[lineNumber];
-        if (tokens == null) {
-          return null;
-        }
-        for (_i = 0, _len = tokens.length; _i < _len; _i++) {
-          token = tokens[_i];
-          if (token[0] === tokenType) {
-            return true;
-          }
-        }
-        return false;
-      }
-    };
-
-    LineLinter.prototype.getLineTokens = function() {
-      return this.tokensByLine[this.lineNumber] || [];
-    };
-
-    LineLinter.prototype.maintainClassContext = function() {
-      if (this.context["class"].inClass) {
-        if (this.lineHasToken('INDENT')) {
-          this.context["class"].classIndents++;
-        } else if (this.lineHasToken('OUTDENT')) {
-          this.context["class"].classIndents--;
-          if (this.context["class"].classIndents === 0) {
-            this.context["class"].inClass = false;
-            this.context["class"].classIndents = null;
-          }
-        }
-        if (this.context["class"].inClass && !this.line.match(/^\s*$/)) {
-          this.context["class"].lastUnemptyLineInClass = this.lineNumber;
-        }
-      } else {
-        if (!this.line.match(/\\s*/)) {
-          this.context["class"].lastUnemptyLineInClass = null;
-        }
-        if (this.lineHasToken('CLASS')) {
-          this.context["class"].inClass = true;
-          this.context["class"].lastUnemptyLineInClass = this.lineNumber;
-          this.context["class"].classIndents = 0;
-        }
-      }
-      return null;
-    };
-
-    return LineLinter;
-
-  })();
-
-  LexicalLinter = (function() {
-    function LexicalLinter(source, config) {
-      this.source = source;
-      this.tokens = CoffeeScript.tokens(source);
-      this.config = config;
-      this.i = 0;
-      this.tokensByLine = {};
-      this.arrayTokens = [];
-      this.parenTokens = [];
-      this.callTokens = [];
-      this.lines = source.split('\n');
-      this.braceScopes = [];
-    }
-
-    LexicalLinter.prototype.lint = function() {
-      var error, errors, i, token, _i, _len, _ref;
-
-      errors = [];
-      _ref = this.tokens;
-      for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
-        token = _ref[i];
-        this.i = i;
-        error = this.lintToken(token);
-        if (error) {
-          errors.push(error);
-        }
-      }
-      return errors;
-    };
-
-    LexicalLinter.prototype.lintToken = function(token) {
-      var lineNumber, type, value, _base, _ref;
-
-      type = token[0], value = token[1], lineNumber = token[2];
-      if (typeof lineNumber === "object") {
-        if (type === 'OUTDENT' || type === 'INDENT') {
-          lineNumber = lineNumber.last_line;
-        } else {
-          lineNumber = lineNumber.first_line;
-        }
-      }
-      if ((_ref = (_base = this.tokensByLine)[lineNumber]) == null) {
-        _base[lineNumber] = [];
-      }
-      this.tokensByLine[lineNumber].push(token);
-      this.lineNumber = lineNumber || this.lineNumber || 0;
-      switch (type) {
-        case "->":
-          return this.lintArrowSpacing(token);
-        case "INDENT":
-          return this.lintIndentation(token);
-        case "CLASS":
-          return this.lintClass(token);
-        case "UNARY":
-          return this.lintUnary(token);
-        case "{":
-        case "}":
-          return this.lintBrace(token);
-        case "IDENTIFIER":
-          return this.lintIdentifier(token);
-        case "++":
-        case "--":
-          return this.lintIncrement(token);
-        case "THROW":
-          return this.lintThrow(token);
-        case "[":
-        case "]":
-          return this.lintArray(token);
-        case "(":
-        case ")":
-          return this.lintParens(token);
-        case "JS":
-          return this.lintJavascript(token);
-        case "CALL_START":
-        case "CALL_END":
-          return this.lintCall(token);
-        case "PARAM_START":
-          return this.lintParam(token);
-        case "@":
-          return this.lintStandaloneAt(token);
-        case "+":
-        case "-":
-          return this.lintPlus(token);
-        case "=":
-        case "MATH":
-        case "COMPARE":
-        case "LOGIC":
-        case "COMPOUND_ASSIGN":
-          return this.lintMath(token);
-        default:
-          return null;
-      }
-    };
-
-    LexicalLinter.prototype.lintUnary = function(token) {
-      var expectedCallStart, expectedIdentifier, identifierIndex;
-
-      if (token[1] === 'new') {
-        identifierIndex = 1;
-        while (true) {
-          expectedIdentifier = this.peek(identifierIndex);
-          expectedCallStart = this.peek(identifierIndex + 1);
-          if ((expectedIdentifier != null ? expectedIdentifier[0] : void 0) === 'IDENTIFIER') {
-            if ((expectedCallStart != null ? expectedCallStart[0] : void 0) === '.') {
-              identifierIndex += 2;
-              continue;
-            }
-          }
-          break;
-        }
-        if ((expectedIdentifier != null ? expectedIdentifier[0] : void 0) === 'IDENTIFIER' && (expectedCallStart != null)) {
-          if (expectedCallStart[0] === 'CALL_START') {
-            if (expectedCallStart.generated) {
-              return this.createLexError('non_empty_constructor_needs_parens');
-            }
-          } else {
-            return this.createLexError('empty_constructor_needs_parens');
-          }
-        }
-      }
-    };
-
-    LexicalLinter.prototype.lintArray = function(token) {
-      if (token[0] === '[') {
-        this.arrayTokens.push(token);
-      } else if (token[0] === ']') {
-        this.arrayTokens.pop();
-      }
-      return null;
-    };
-
-    LexicalLinter.prototype.lintParens = function(token) {
-      var i, n1, n2, p1;
-
-      if (token[0] === '(') {
-        p1 = this.peek(-1);
-        n1 = this.peek(1);
-        n2 = this.peek(2);
-        i = n1 && n2 && n1[0] === 'STRING' && n2[0] === '+';
-        token.isInterpolation = i;
-        this.parenTokens.push(token);
-      } else {
-        this.parenTokens.pop();
-      }
-      return null;
-    };
-
-    LexicalLinter.prototype.isInInterpolation = function() {
-      var t, _i, _len, _ref;
-
-      _ref = this.parenTokens;
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        t = _ref[_i];
-        if (t.isInterpolation) {
-          return true;
-        }
-      }
-      return false;
-    };
-
-    LexicalLinter.prototype.isInExtendedRegex = function() {
-      var t, _i, _len, _ref;
-
-      _ref = this.callTokens;
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        t = _ref[_i];
-        if (t.isRegex) {
-          return true;
-        }
-      }
-      return false;
-    };
-
-    LexicalLinter.prototype.lintPlus = function(token) {
-      var isUnary, p, unaries, _ref;
-
-      if (this.isInInterpolation() || this.isInExtendedRegex()) {
-        return null;
-      }
-      p = this.peek(-1);
-      unaries = ['TERMINATOR', '(', '=', '-', '+', ',', 'CALL_START', 'INDEX_START', '..', '...', 'COMPARE', 'IF', 'THROW', 'LOGIC', 'POST_IF', ':', '[', 'INDENT', 'COMPOUND_ASSIGN', 'RETURN', 'MATH'];
-      isUnary = !p ? false : (_ref = p[0], __indexOf.call(unaries, _ref) >= 0);
-      if ((isUnary && token.spaced) || (!isUnary && !token.spaced && !token.newLine)) {
-        return this.createLexError('space_operators', {
-          context: token[1]
-        });
-      } else {
-        return null;
-      }
-    };
-
-    LexicalLinter.prototype.lintMath = function(token) {
-      if (!token.spaced && !token.newLine) {
-        return this.createLexError('space_operators', {
-          context: token[1]
-        });
-      } else {
-        return null;
-      }
-    };
-
-    LexicalLinter.prototype.lintCall = function(token) {
-      var p;
-
-      if (token[0] === 'CALL_START') {
-        p = this.peek(-1);
-        token.isRegex = p && p[0] === 'IDENTIFIER' && p[1] === 'RegExp';
-        this.callTokens.push(token);
-        if (token.generated) {
-          return this.createLexError('no_implicit_parens');
-        } else {
-          return null;
-        }
-      } else {
-        this.callTokens.pop();
-        return null;
-      }
-    };
-
-    LexicalLinter.prototype.lintParam = function(token) {
-      var nextType;
-
-      nextType = this.peek()[0];
-      if (nextType === 'PARAM_END') {
-        return this.createLexError('no_empty_param_list');
-      } else {
-        return null;
-      }
-    };
-
-    LexicalLinter.prototype.lintIdentifier = function(token) {
-      var key, nextToken, previousToken;
-
-      key = token[1];
-      if (this.currentScope == null) {
-        return null;
-      }
-      nextToken = this.peek(1);
-      if (nextToken[1] !== ':') {
-        return null;
-      }
-      previousToken = this.peek(-1);
-      if (previousToken[0] === '@') {
-        key = "@" + key;
-      }
-      key = "identifier-" + key;
-      if (this.currentScope[key]) {
-        return this.createLexError('duplicate_key');
-      } else {
-        this.currentScope[key] = token;
-        return null;
-      }
-    };
-
-    LexicalLinter.prototype.lintBrace = function(token) {
-      var i, t;
-
-      if (token[0] === '{') {
-        if (this.currentScope != null) {
-          this.braceScopes.push(this.currentScope);
-        }
-        this.currentScope = {};
-      } else {
-        this.currentScope = this.braceScopes.pop();
-      }
-      if (token.generated && token[0] === '{') {
-        i = -1;
-        while (true) {
-          t = this.peek(i);
-          if ((t == null) || t[0] === 'TERMINATOR') {
-            return this.createLexError('no_implicit_braces');
-          }
-          if (t[0] === 'CLASS') {
-            return null;
-          }
-          i -= 1;
-        }
-      } else {
-        return null;
-      }
-    };
-
-    LexicalLinter.prototype.lintJavascript = function(token) {
-      return this.createLexError('no_backticks');
-    };
-
-    LexicalLinter.prototype.lintThrow = function(token) {
-      var n1, n2, nextIsString, _ref;
-
-      _ref = [this.peek(), this.peek(2)], n1 = _ref[0], n2 = _ref[1];
-      nextIsString = n1[0] === 'STRING' || (n1[0] === '(' && n2[0] === 'STRING');
-      if (nextIsString) {
-        return this.createLexError('no_throwing_strings');
-      }
-    };
-
-    LexicalLinter.prototype.lintIncrement = function(token) {
-      var attrs;
-
-      attrs = {
-        context: "found '" + token[0] + "'"
+    } else {
+      return {
+        context: "Incorrect spacing around column " + token[2].first_column + ".\nExpected left: " + spacingAllowances.left + ", right: " + spacingAllowances.right + ".\nGot left: " + leftSpacing + ", right: " + rightSpacing + "."
       };
-      return this.createLexError('no_plusplus', attrs);
-    };
-
-    LexicalLinter.prototype.lintStandaloneAt = function(token) {
-      var isDot, isIdentifier, isIndexStart, isValidProtoProperty, nextToken, protoProperty, spaced;
-
-      nextToken = this.peek();
-      spaced = token.spaced;
-      isIdentifier = nextToken[0] === 'IDENTIFIER';
-      isIndexStart = nextToken[0] === 'INDEX_START';
-      isDot = nextToken[0] === '.';
-      if (nextToken[0] === '::') {
-        protoProperty = this.peek(2);
-        isValidProtoProperty = protoProperty[0] === 'IDENTIFIER';
-      }
-      if (spaced || (!isIdentifier && !isIndexStart && !isDot && !isValidProtoProperty)) {
-        return this.createLexError('no_stand_alone_at');
-      }
-    };
-
-    LexicalLinter.prototype.lintIndentation = function(token) {
-      var context, currentLine, expected, ignoreIndent, isArrayIndent, isInterpIndent, isMultiline, lineNumber, numIndents, prevNum, previous, previousIndentation, previousLine, previousSymbol, type, _ref;
-
-      type = token[0], numIndents = token[1], lineNumber = token[2];
-      if (token.generated != null) {
-        return null;
-      }
-      previous = this.peek(-2);
-      isInterpIndent = previous && previous[0] === '+';
-      previous = this.peek(-1);
-      isArrayIndent = this.inArray() && (previous != null ? previous.newLine : void 0);
-      previousSymbol = (_ref = this.peek(-1)) != null ? _ref[0] : void 0;
-      isMultiline = previousSymbol === '=' || previousSymbol === ',';
-      ignoreIndent = isInterpIndent || isArrayIndent || isMultiline;
-      if (this.isChainedCall()) {
-        currentLine = this.lines[this.lineNumber];
-        prevNum = 1;
-        while (/^\s*(#|$)/.test(this.lines[this.lineNumber - prevNum])) {
-          prevNum += 1;
-        }
-        previousLine = this.lines[this.lineNumber - prevNum];
-        previousIndentation = previousLine.match(/^(\s*)/)[1].length;
-        numIndents = currentLine.match(/^(\s*)/)[1].length;
-        numIndents -= previousIndentation;
-      }
-      expected = this.config['indentation'].value;
-      if (!ignoreIndent && numIndents !== expected) {
-        context = ("Expected " + expected + " ") + ("got " + numIndents);
-        return this.createLexError('indentation', {
-          context: context
-        });
-      } else {
-        return null;
-      }
-    };
-
-    LexicalLinter.prototype.lintClass = function(token) {
-      var attrs, className, offset, _ref, _ref1, _ref2;
-
-      if ((token.newLine != null) || ((_ref = this.peek()[0]) === 'INDENT' || _ref === 'EXTENDS')) {
-        return null;
-      }
-      className = null;
-      offset = 1;
-      while (!className) {
-        if (((_ref1 = this.peek(offset + 1)) != null ? _ref1[0] : void 0) === '.') {
-          offset += 2;
-        } else if (((_ref2 = this.peek(offset)) != null ? _ref2[0] : void 0) === '@') {
-          offset += 1;
-        } else {
-          className = this.peek(offset)[1];
-        }
-      }
-      if (!regexes.camelCase.test(className)) {
-        attrs = {
-          context: "class name: " + className
-        };
-        return this.createLexError('camel_case_classes', attrs);
-      } else {
-        return null;
-      }
-    };
-
-    LexicalLinter.prototype.lintArrowSpacing = function(token) {
-      var pp;
-
-      pp = this.peek(-1);
-      if (!(((token.spaced != null) || (token.newLine != null) || this.atEof()) && (((pp.spaced != null) || pp[0] === 'TERMINATOR') || (pp.generated != null) || pp[0] === "INDENT" || (pp[1] === "(" && (pp.generated == null))))) {
-        return this.createLexError('arrow_spacing');
-      } else {
-        return null;
-      }
-    };
-
-    LexicalLinter.prototype.createLexError = function(rule, attrs) {
-      if (attrs == null) {
-        attrs = {};
-      }
-      attrs.lineNumber = this.lineNumber + 1;
-      attrs.level = this.config[rule].level;
-      attrs.line = this.lines[this.lineNumber];
-      return createError(rule, attrs);
-    };
-
-    LexicalLinter.prototype.peek = function(n) {
-      if (n == null) {
-        n = 1;
-      }
-      return this.tokens[this.i + n] || null;
-    };
-
-    LexicalLinter.prototype.inArray = function() {
-      return this.arrayTokens.length > 0;
-    };
-
-    LexicalLinter.prototype.atEof = function() {
-      var token, _i, _len, _ref, _ref1;
-
-      _ref = this.tokens.slice(this.i + 1);
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        token = _ref[_i];
-        if (!(token.generated || ((_ref1 = token[0]) === 'OUTDENT' || _ref1 === 'TERMINATOR'))) {
-          return false;
-        }
-      }
-      return true;
-    };
-
-    LexicalLinter.prototype.isChainedCall = function() {
-      var i, lastNewLineIndex, lines, t, token, tokens;
-
-      lines = (function() {
-        var _i, _len, _ref, _results;
-
-        _ref = this.tokens.slice(0, +this.i + 1 || 9e9);
-        _results = [];
-        for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
-          token = _ref[i];
-          if (token.newLine != null) {
-            _results.push(i);
-          }
-        }
-        return _results;
-      }).call(this);
-      lastNewLineIndex = lines ? lines[lines.length - 2] : null;
-      if (lastNewLineIndex == null) {
-        return false;
-      }
-      tokens = [this.tokens[lastNewLineIndex], this.tokens[lastNewLineIndex + 1]];
-      return !!((function() {
-        var _i, _len, _results;
-
-        _results = [];
-        for (_i = 0, _len = tokens.length; _i < _len; _i++) {
-          t = tokens[_i];
-          if (t && t[0] === '.') {
-            _results.push(t);
-          }
-        }
-        return _results;
-      })()).length;
-    };
-
-    return LexicalLinter;
-
-  })();
-
-  ASTLinter = (function() {
-    function ASTLinter(source, config) {
-      this.source = source;
-      this.config = config;
-      this.errors = [];
-    }
-
-    ASTLinter.prototype.lint = function() {
-      var coffeeError;
-
-      try {
-        this.node = CoffeeScript.nodes(this.source);
-      } catch (_error) {
-        coffeeError = _error;
-        this.errors.push(this._parseCoffeeScriptError(coffeeError));
-        return this.errors;
-      }
-      this.lintNode(this.node);
-      return this.errors;
-    };
-
-    ASTLinter.prototype.getComplexity = function(node) {
-      var complexity, name, _ref;
-
-      name = node.constructor.name;
-      complexity = name === 'If' || name === 'While' || name === 'For' || name === 'Try' ? 1 : name === 'Op' && ((_ref = node.operator) === '&&' || _ref === '||') ? 1 : name === 'Switch' ? node.cases.length : 0;
-      return complexity;
-    };
-
-    ASTLinter.prototype.lintNode = function(node, line) {
-      var attrs, complexity, error, name, rule,
-        _this = this;
-
-      name = node.constructor.name;
-      complexity = this.getComplexity(node);
-      node.eachChild(function(childNode) {
+    }
+  };
+
+  return ColonAssignmentSpacing;
+
+})();
+
+
+},{}],11:[function(_dereq_,module,exports){
+var NoTabs;
+
+module.exports = NoTabs = (function() {
+  function NoTabs() {}
+
+  NoTabs.prototype.rule = {
+    name: 'cyclomatic_complexity',
+    value: 10,
+    level: 'ignore',
+    message: 'The cyclomatic complexity is too damn high',
+    description: 'Examine the complexity of your application.'
+  };
+
+  NoTabs.prototype.getComplexity = function(node) {
+    var complexity, name, _ref;
+    name = node.constructor.name;
+    complexity = name === 'If' || name === 'While' || name === 'For' || name === 'Try' ? 1 : name === 'Op' && ((_ref = node.operator) === '&&' || _ref === '||') ? 1 : name === 'Switch' ? node.cases.length : 0;
+    return complexity;
+  };
+
+  NoTabs.prototype.lintAST = function(node, astApi) {
+    this.astApi = astApi;
+    this.lintNode(node);
+    return void 0;
+  };
+
+  NoTabs.prototype.lintNode = function(node, line) {
+    var complexity, error, name, rule;
+    name = node.constructor.name;
+    complexity = this.getComplexity(node);
+    node.eachChild((function(_this) {
+      return function(childNode) {
         var nodeLine;
-
         nodeLine = childNode.locationData.first_line;
         if (childNode) {
           return complexity += _this.lintNode(childNode, nodeLine);
         }
+      };
+    })(this));
+    rule = this.astApi.config[this.rule.name];
+    if (name === 'Code' && complexity >= rule.value) {
+      error = this.astApi.createError({
+        context: complexity + 1,
+        lineNumber: line + 1,
+        lineNumberEnd: node.locationData.last_line + 1
       });
-      rule = this.config.cyclomatic_complexity;
-      if (name === 'Code' && complexity >= rule.value) {
-        attrs = {
-          context: complexity + 1,
-          level: rule.level,
-          lineNumber: line + 1,
-          lineNumberEnd: node.locationData.last_line + 1
-        };
-        error = createError('cyclomatic_complexity', attrs);
-        if (error) {
-          this.errors.push(error);
-        }
-      }
-      return complexity;
-    };
-
-    ASTLinter.prototype._parseCoffeeScriptError = function(coffeeError) {
-      var attrs, lineNumber, match, message, rule;
-
-      rule = RULES['coffeescript_error'];
-      message = coffeeError.toString();
-      lineNumber = -1;
-      if (coffeeError.location != null) {
-        lineNumber = coffeeError.location.first_line + 1;
-      } else {
-        match = /line (\d+)/.exec(message);
-        if ((match != null ? match.length : void 0) > 1) {
-          lineNumber = parseInt(match[1], 10);
-        }
-      }
-      attrs = {
-        message: message,
-        level: rule.level,
-        lineNumber: lineNumber
-      };
-      return createError('coffeescript_error', attrs);
-    };
-
-    return ASTLinter;
-
-  })();
-
-  mergeDefaultConfig = function(userConfig) {
-    var config, rule, ruleConfig;
-
-    config = {};
-    for (rule in RULES) {
-      ruleConfig = RULES[rule];
-      config[rule] = defaults(userConfig[rule], ruleConfig);
-    }
-    return config;
-  };
-
-  coffeelint.invertLiterate = function(source) {
-    var line, newSource, _i, _len, _ref;
-
-    source = CoffeeScript.helpers.invertLiterate(source);
-    newSource = "";
-    _ref = source.split("\n");
-    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-      line = _ref[_i];
-      if (line.match(/^#/)) {
-        line = line.replace(/\s*$/, '');
-      }
-      line = line.replace(/^\s{4}/g, '');
-      newSource += "" + line + "\n";
-    }
-    return newSource;
-  };
-
-  coffeelint.lint = function(source, userConfig, literate) {
-    var all_errors, astErrors, cmd, config, difference, disabled, disabled_initially, e, errors, i, l, lexErrors, lexicalLinter, lineErrors, lineLinter, next_line, r, rules, s, tokensByLine, _i, _j, _k, _len, _len1, _ref, _ref1, _ref2, _ref3, _ref4;
-
-    if (userConfig == null) {
-      userConfig = {};
-    }
-    if (literate == null) {
-      literate = false;
-    }
-    if (literate) {
-      source = this.invertLiterate(source);
-    }
-    config = mergeDefaultConfig(userConfig);
-    disabled_initially = [];
-    _ref = source.split('\n');
-    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-      l = _ref[_i];
-      s = regexes.configStatement.exec(l);
-      if ((s != null ? s.length : void 0) > 2 && __indexOf.call(s, 'enable') >= 0) {
-        _ref1 = s.slice(1);
-        for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
-          r = _ref1[_j];
-          if (r !== 'enable' && r !== 'disable') {
-            if (!(r in config && ((_ref2 = config[r].level) === 'warn' || _ref2 === 'error'))) {
-              disabled_initially.push(r);
-              config[r] = {
-                level: 'error'
-              };
-            }
+      if (error) {
+        this.errors.push(error);
+      }
+    }
+    return complexity;
+  };
+
+  return NoTabs;
+
+})();
+
+
+},{}],12:[function(_dereq_,module,exports){
+var DuplicateKey;
+
+module.exports = DuplicateKey = (function() {
+  DuplicateKey.prototype.rule = {
+    name: 'duplicate_key',
+    level: 'error',
+    message: 'Duplicate key defined in object or class',
+    description: "Prevents defining duplicate keys in object literals and classes"
+  };
+
+  DuplicateKey.prototype.tokens = ['IDENTIFIER', "{", "}"];
+
+  function DuplicateKey() {
+    this.braceScopes = [];
+  }
+
+  DuplicateKey.prototype.lintToken = function(_arg, tokenApi) {
+    var type;
+    type = _arg[0];
+    if (type === "{" || type === "}") {
+      this.lintBrace.apply(this, arguments);
+      return void 0;
+    }
+    if (type === "IDENTIFIER") {
+      return this.lintIdentifier.apply(this, arguments);
+    }
+  };
+
+  DuplicateKey.prototype.lintIdentifier = function(token, tokenApi) {
+    var key, nextToken, previousToken;
+    key = token[1];
+    if (this.currentScope == null) {
+      return null;
+    }
+    nextToken = tokenApi.peek(1);
+    if (nextToken[1] !== ':') {
+      return null;
+    }
+    previousToken = tokenApi.peek(-1);
+    if (previousToken[0] === '@') {
+      key = "@" + key;
+    }
+    key = "identifier-" + key;
+    if (this.currentScope[key]) {
+      return true;
+    } else {
+      this.currentScope[key] = token;
+      return null;
+    }
+  };
+
+  DuplicateKey.prototype.lintBrace = function(token) {
+    if (token[0] === '{') {
+      if (this.currentScope != null) {
+        this.braceScopes.push(this.currentScope);
+      }
+      this.currentScope = {};
+    } else {
+      this.currentScope = this.braceScopes.pop();
+    }
+    return null;
+  };
+
+  return DuplicateKey;
+
+})();
+
+
+},{}],13:[function(_dereq_,module,exports){
+var EmptyConstructorNeedsParens;
+
+module.exports = EmptyConstructorNeedsParens = (function() {
+  function EmptyConstructorNeedsParens() {}
+
+  EmptyConstructorNeedsParens.prototype.rule = {
+    name: 'empty_constructor_needs_parens',
+    level: 'ignore',
+    message: 'Invoking a constructor without parens and without arguments',
+    description: "Requires constructors with no parameters to include the parens"
+  };
+
+  EmptyConstructorNeedsParens.prototype.tokens = ['UNARY'];
+
+  EmptyConstructorNeedsParens.prototype.lintToken = function(token, tokenApi) {
+    var expectedCallStart, expectedIdentifier, identifierIndex;
+    if (token[1] === 'new') {
+      identifierIndex = 1;
+      while (true) {
+        expectedIdentifier = tokenApi.peek(identifierIndex);
+        expectedCallStart = tokenApi.peek(identifierIndex + 1);
+        if ((expectedIdentifier != null ? expectedIdentifier[0] : void 0) === 'IDENTIFIER') {
+          if ((expectedCallStart != null ? expectedCallStart[0] : void 0) === '.') {
+            identifierIndex += 2;
+            continue;
           }
         }
-      }
-    }
-    astErrors = new ASTLinter(source, config).lint();
-    lexicalLinter = new LexicalLinter(source, config);
-    lexErrors = lexicalLinter.lint();
-    tokensByLine = lexicalLinter.tokensByLine;
-    lineLinter = new LineLinter(source, config, tokensByLine);
-    lineErrors = lineLinter.lint();
-    errors = lexErrors.concat(lineErrors, astErrors);
-    errors.sort(function(a, b) {
-      return a.lineNumber - b.lineNumber;
-    });
-    difference = function(a, b) {
-      var j, _ref3, _results;
-
-      j = 0;
+        break;
+      }
+      if ((expectedIdentifier != null ? expectedIdentifier[0] : void 0) === 'IDENTIFIER' && (expectedCallStart != null)) {
+        return this.handleExpectedCallStart(expectedCallStart);
+      }
+    }
+  };
+
+  EmptyConstructorNeedsParens.prototype.handleExpectedCallStart = function(expectedCallStart) {
+    if (expectedCallStart[0] !== 'CALL_START') {
+      return true;
+    }
+  };
+
+  return EmptyConstructorNeedsParens;
+
+})();
+
+
+},{}],14:[function(_dereq_,module,exports){
+var Indentation;
+
+module.exports = Indentation = (function() {
+  Indentation.prototype.rule = {
+    name: 'indentation',
+    value: 2,
+    level: 'error',
+    message: 'Line contains inconsistent indentation',
+    description: "This rule imposes a standard number of spaces to be used for\nindentation. Since whitespace is significant in CoffeeScript, it's\ncritical that a project chooses a standard indentation format and\nstays consistent. Other roads lead to darkness. <pre> <code>#\nEnabling this option will prevent this ugly\n# but otherwise valid CoffeeScript.\ntwoSpaces = () ->\n  fourSpaces = () ->\n      eightSpaces = () ->\n            'this is valid CoffeeScript'\n\n</code>\n</pre>\nTwo space indentation is enabled by default."
+  };
+
+  Indentation.prototype.tokens = ['INDENT', "[", "]"];
+
+  function Indentation() {
+    this.arrayTokens = [];
+  }
+
+  Indentation.prototype.lintToken = function(token, tokenApi) {
+    var currentLine, expected, ignoreIndent, isArrayIndent, isInterpIndent, isMultiline, lineNumber, lines, numIndents, prevNum, previous, previousIndentation, previousLine, previousSymbol, type, _ref;
+    type = token[0], numIndents = token[1], lineNumber = token[2];
+    if (type === "[" || type === "]") {
+      this.lintArray(token);
+      return void 0;
+    }
+    if (token.generated != null) {
+      return null;
+    }
+    previous = tokenApi.peek(-2);
+    isInterpIndent = previous && previous[0] === '+';
+    previous = tokenApi.peek(-1);
+    isArrayIndent = this.inArray() && (previous != null ? previous.newLine : void 0);
+    previousSymbol = (_ref = tokenApi.peek(-1)) != null ? _ref[0] : void 0;
+    isMultiline = previousSymbol === '=' || previousSymbol === ',';
+    ignoreIndent = isInterpIndent || isArrayIndent || isMultiline;
+    if (this.isChainedCall(tokenApi)) {
+      lines = tokenApi.lines, lineNumber = tokenApi.lineNumber;
+      currentLine = lines[lineNumber];
+      prevNum = 1;
+      while (/^\s*(#|$)/.test(lines[lineNumber - prevNum])) {
+        prevNum += 1;
+      }
+      previousLine = lines[lineNumber - prevNum];
+      previousIndentation = previousLine.match(/^(\s*)/)[1].length;
+      numIndents = currentLine.match(/^(\s*)/)[1].length;
+      numIndents -= previousIndentation;
+    }
+    expected = tokenApi.config[this.rule.name].value;
+    if (!ignoreIndent && numIndents !== expected) {
+      return {
+        context: "Expected " + expected + " got " + numIndents
+      };
+    }
+  };
+
+  Indentation.prototype.inArray = function() {
+    return this.arrayTokens.length > 0;
+  };
+
+  Indentation.prototype.lintArray = function(token) {
+    if (token[0] === '[') {
+      this.arrayTokens.push(token);
+    } else if (token[0] === ']') {
+      this.arrayTokens.pop();
+    }
+    return null;
+  };
+
+  Indentation.prototype.isChainedCall = function(tokenApi) {
+    var i, lastNewLineIndex, lines, t, token, tokens;
+    tokens = tokenApi.tokens, i = tokenApi.i;
+    lines = (function() {
+      var _i, _len, _ref, _results;
+      _ref = tokens.slice(0, +i + 1 || 9e9);
       _results = [];
-      while (j < a.length) {
-        if (_ref3 = a[j], __indexOf.call(b, _ref3) >= 0) {
-          _results.push(a.splice(j, 1));
-        } else {
-          _results.push(j++);
+      for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
+        token = _ref[i];
+        if (token.newLine != null) {
+          _results.push(i);
         }
       }
       return _results;
+    })();
+    lastNewLineIndex = lines ? lines[lines.length - 2] : null;
+    if (lastNewLineIndex == null) {
+      return false;
+    }
+    tokens = [tokens[lastNewLineIndex], tokens[lastNewLineIndex + 1]];
+    return !!((function() {
+      var _i, _len, _results;
+      _results = [];
+      for (_i = 0, _len = tokens.length; _i < _len; _i++) {
+        t = tokens[_i];
+        if (t && t[0] === '.') {
+          _results.push(t);
+        }
+      }
+      return _results;
+    })()).length;
+  };
+
+  return Indentation;
+
+})();
+
+
+},{}],15:[function(_dereq_,module,exports){
+var LineEndings;
+
+module.exports = LineEndings = (function() {
+  function LineEndings() {}
+
+  LineEndings.prototype.rule = {
+    name: 'line_endings',
+    level: 'ignore',
+    value: 'unix',
+    message: 'Line contains incorrect line endings',
+    description: "This rule ensures your project uses only <tt>windows</tt> or\n<tt>unix</tt> line endings. This rule is disabled by default."
+  };
+
+  LineEndings.prototype.lintLine = function(line, lineApi) {
+    var ending, lastChar, valid, _ref;
+    ending = (_ref = lineApi.config[this.rule.name]) != null ? _ref.value : void 0;
+    if (!ending || lineApi.isLastLine() || !line) {
+      return null;
+    }
+    lastChar = line[line.length - 1];
+    valid = (function() {
+      if (ending === 'windows') {
+        return lastChar === '\r';
+      } else if (ending === 'unix') {
+        return lastChar !== '\r';
+      } else {
+        throw new Error("unknown line ending type: " + ending);
+      }
+    })();
+    if (!valid) {
+      return {
+        context: "Expected " + ending
+      };
+    } else {
+      return null;
+    }
+  };
+
+  return LineEndings;
+
+})();
+
+
+},{}],16:[function(_dereq_,module,exports){
+var MaxLineLength, regexes;
+
+regexes = {
+  literateComment: /^\#\s/,
+  longUrlComment: /^\s*\#\s*http[^\s]+$/
+};
+
+module.exports = MaxLineLength = (function() {
+  function MaxLineLength() {}
+
+  MaxLineLength.prototype.rule = {
+    name: 'max_line_length',
+    value: 80,
+    level: 'error',
+    limitComments: true,
+    message: 'Line exceeds maximum allowed length',
+    description: "This rule imposes a maximum line length on your code. <a\nhref=\"http://www.python.org/dev/peps/pep-0008/\">Python's style\nguide</a> does a good job explaining why you might want to limit the\nlength of your lines, though this is a matter of taste.\n\nLines can be no longer than eighty characters by default."
+  };
+
+  MaxLineLength.prototype.lintLine = function(line, lineApi) {
+    var limitComments, lineLength, max, _ref, _ref1;
+    max = (_ref = lineApi.config[this.rule.name]) != null ? _ref.value : void 0;
+    limitComments = (_ref1 = lineApi.config[this.rule.name]) != null ? _ref1.limitComments : void 0;
+    lineLength = line.length;
+    if (lineApi.isLiterate() && regexes.literateComment.test(line)) {
+      lineLength -= 2;
+    }
+    if (max && max < lineLength && !regexes.longUrlComment.test(line)) {
+      if (!limitComments) {
+        if (lineApi.getLineTokens().length === 0) {
+          return;
+        }
+      }
+      return {
+        context: "Length is " + lineLength + ", max is " + max
+      };
+    }
+  };
+
+  return MaxLineLength;
+
+})();
+
+
+},{}],17:[function(_dereq_,module,exports){
+var MissingFatArrows, any, isClass, isCode, isFatArrowCode, isObject, isThis, isValue, methodsOfClass, needsFatArrow,
+  __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
+
+isCode = function(node) {
+  return (node != null ? node.constructor.name : void 0) === 'Code';
+};
+
+isClass = function(node) {
+  return node.constructor.name === 'Class';
+};
+
+isValue = function(node) {
+  return node.constructor.name === 'Value';
+};
+
+isObject = function(node) {
+  return node.constructor.name === 'Obj';
+};
+
+isThis = function(node) {
+  return isValue(node) && node.base.value === 'this';
+};
+
+isFatArrowCode = function(node) {
+  return isCode(node) && node.bound;
+};
+
+any = function(arr, test) {
+  return arr.reduce((function(res, elt) {
+    return res || test(elt);
+  }), false);
+};
+
+needsFatArrow = function(node) {
+  return isCode(node) && (any(node.params, function(param) {
+    return param.contains(isThis) != null;
+  }) || (node.body.contains(isThis) != null));
+};
+
+methodsOfClass = function(classNode) {
+  var bodyNodes, returnNode;
+  bodyNodes = classNode.body.expressions;
+  returnNode = bodyNodes[bodyNodes.length - 1];
+  if ((returnNode != null) && isValue(returnNode) && isObject(returnNode.base)) {
+    return returnNode.base.properties.map(function(assignNode) {
+      return assignNode.value;
+    }).filter(isCode);
+  } else {
+    return [];
+  }
+};
+
+module.exports = MissingFatArrows = (function() {
+  function MissingFatArrows() {}
+
+  MissingFatArrows.prototype.rule = {
+    name: 'missing_fat_arrows',
+    level: 'ignore',
+    message: 'Used `this` in a function without a fat arrow',
+    description: "Warns when you use `this` inside a function that wasn't defined\nwith a fat arrow. This rule does not apply to methods defined in a\nclass, since they have `this` bound to the class instance (or the\nclass itself, for class methods).\n\nIt is impossible to statically determine whether a function using\n`this` will be bound with the correct `this` value due to language\nfeatures like `Function.prototype.call` and\n`Function.prototype.bind`, so this rule may produce false positives."
+  };
+
+  MissingFatArrows.prototype.lintAST = function(node, astApi) {
+    this.lintNode(node, astApi);
+    return void 0;
+  };
+
+  MissingFatArrows.prototype.lintNode = function(node, astApi, methods) {
+    var error;
+    if (methods == null) {
+      methods = [];
+    }
+    if ((!isFatArrowCode(node)) && (__indexOf.call(methods, node) < 0) && (needsFatArrow(node))) {
+      error = astApi.createError({
+        lineNumber: node.locationData.first_line + 1
+      });
+      this.errors.push(error);
+    }
+    return node.eachChild((function(_this) {
+      return function(child) {
+        return _this.lintNode(child, astApi, (function() {
+          switch (false) {
+            case !isClass(node):
+              return methodsOfClass(node);
+            case !isCode(node):
+              return [];
+            default:
+              return methods;
+          }
+        })());
+      };
+    })(this));
+  };
+
+  return MissingFatArrows;
+
+})();
+
+
+},{}],18:[function(_dereq_,module,exports){
+var NewlinesAfterClasses;
+
+module.exports = NewlinesAfterClasses = (function() {
+  function NewlinesAfterClasses() {}
+
+  NewlinesAfterClasses.prototype.rule = {
+    name: 'newlines_after_classes',
+    value: 3,
+    level: 'ignore',
+    message: 'Wrong count of newlines between a class and other code',
+    description: "Checks the number of newlines between classes and other code"
+  };
+
+  NewlinesAfterClasses.prototype.lintLine = function(line, lineApi) {
+    var context, ending, got, lineNumber;
+    ending = lineApi.config[this.rule.name].value;
+    if (!ending || lineApi.isLastLine()) {
+      return null;
+    }
+    lineNumber = lineApi.lineNumber, context = lineApi.context;
+    if (!context["class"].inClass && (context["class"].lastUnemptyLineInClass != null) && (lineNumber - context["class"].lastUnemptyLineInClass) !== ending) {
+      got = lineNumber - context["class"].lastUnemptyLineInClass;
+      return {
+        context: "Expected " + ending + " got " + got
+      };
+    }
+    return null;
+  };
+
+  return NewlinesAfterClasses;
+
+})();
+
+
+},{}],19:[function(_dereq_,module,exports){
+var NoBackticks;
+
+module.exports = NoBackticks = (function() {
+  function NoBackticks() {}
+
+  NoBackticks.prototype.rule = {
+    name: 'no_backticks',
+    level: 'error',
+    message: 'Backticks are forbidden',
+    description: "Backticks allow snippets of JavaScript to be embedded in\nCoffeeScript. While some folks consider backticks useful in a few\nniche circumstances, they should be avoided because so none of\nJavaScript's \"bad parts\", like <tt>with</tt> and <tt>eval</tt>,\nsneak into CoffeeScript.\nThis rule is enabled by default."
+  };
+
+  NoBackticks.prototype.tokens = ["JS"];
+
+  NoBackticks.prototype.lintToken = function(token, tokenApi) {
+    return true;
+  };
+
+  return NoBackticks;
+
+})();
+
+
+},{}],20:[function(_dereq_,module,exports){
+var NoEmptyParamList;
+
+module.exports = NoEmptyParamList = (function() {
+  function NoEmptyParamList() {}
+
+  NoEmptyParamList.prototype.rule = {
+    name: 'no_empty_param_list',
+    level: 'ignore',
+    message: 'Empty parameter list is forbidden',
+    description: "This rule prohibits empty parameter lists in function definitions.\n<pre>\n<code># The empty parameter list in here is unnecessary:\nmyFunction = () -&gt;\n\n# We might favor this instead:\nmyFunction = -&gt;\n</code>\n</pre>\nEmpty parameter lists are permitted by default."
+  };
+
+  NoEmptyParamList.prototype.tokens = ["PARAM_START"];
+
+  NoEmptyParamList.prototype.lintToken = function(token, tokenApi) {
+    var nextType;
+    nextType = tokenApi.peek()[0];
+    return nextType === 'PARAM_END';
+  };
+
+  return NoEmptyParamList;
+
+})();
+
+
+},{}],21:[function(_dereq_,module,exports){
+var NoImplicitBraces;
+
+module.exports = NoImplicitBraces = (function() {
+  function NoImplicitBraces() {}
+
+  NoImplicitBraces.prototype.rule = {
+    name: 'no_implicit_braces',
+    level: 'ignore',
+    message: 'Implicit braces are forbidden',
+    strict: true,
+    description: "This rule prohibits implicit braces when declaring object literals.\nImplicit braces can make code more difficult to understand,\nespecially when used in combination with optional parenthesis.\n<pre>\n<code># Do you find this code ambiguous? Is it a\n# function call with three arguments or four?\nmyFunction a, b, 1:2, 3:4\n\n# While the same code written in a more\n# explicit manner has no ambiguity.\nmyFunction(a, b, {1:2, 3:4})\n</code>\n</pre>\nImplicit braces are permitted by default, since their use is\nidiomatic CoffeeScript."
+  };
+
+  NoImplicitBraces.prototype.tokens = ["{"];
+
+  NoImplicitBraces.prototype.lintToken = function(token, tokenApi) {
+    var previousToken;
+    if (token.generated) {
+      if (!tokenApi.config[this.rule.name].strict) {
+        previousToken = tokenApi.peek(-1)[0];
+        if (previousToken === 'INDENT') {
+          return;
+        }
+      }
+      return this.isPartOfClass(tokenApi);
+    }
+  };
+
+  NoImplicitBraces.prototype.isPartOfClass = function(tokenApi) {
+    var i, t;
+    i = -1;
+    while (true) {
+      t = tokenApi.peek(i);
+      if ((t == null) || t[0] === 'TERMINATOR') {
+        return true;
+      }
+      if (t[0] === 'CLASS') {
+        return null;
+      }
+      i -= 1;
+    }
+  };
+
+  return NoImplicitBraces;
+
+})();
+
+
+},{}],22:[function(_dereq_,module,exports){
+var NoImplicitParens;
+
+module.exports = NoImplicitParens = (function() {
+  function NoImplicitParens() {}
+
+  NoImplicitParens.prototype.rule = {
+    name: 'no_implicit_parens',
+    level: 'ignore',
+    message: 'Implicit parens are forbidden',
+    description: "This rule prohibits implicit parens on function calls.\n<pre>\n<code># Some folks don't like this style of coding.\nmyFunction a, b, c\n\n# And would rather it always be written like this:\nmyFunction(a, b, c)\n</code>\n</pre>\nImplicit parens are permitted by default, since their use is\nidiomatic CoffeeScript."
+  };
+
+  NoImplicitParens.prototype.tokens = ["CALL_START"];
+
+  NoImplicitParens.prototype.lintToken = function(token, tokenApi) {
+    return token.generated;
+  };
+
+  return NoImplicitParens;
+
+})();
+
+
+},{}],23:[function(_dereq_,module,exports){
+var NoPlusPlus;
+
+module.exports = NoPlusPlus = (function() {
+  function NoPlusPlus() {}
+
+  NoPlusPlus.prototype.rule = {
+    name: 'no_plusplus',
+    level: 'ignore',
+    message: 'The increment and decrement operators are forbidden',
+    description: "This rule forbids the increment and decrement arithmetic operators.\nSome people believe the <tt>++</tt> and <tt>--</tt> to be cryptic\nand the cause of bugs due to misunderstandings of their precedence\nrules.\nThis rule is disabled by default."
+  };
+
+  NoPlusPlus.prototype.tokens = ["++", "--"];
+
+  NoPlusPlus.prototype.lintToken = function(token, tokenApi) {
+    return {
+      context: "found '" + token[0] + "'"
     };
-    all_errors = errors;
-    errors = [];
-    disabled = disabled_initially;
-    next_line = 0;
-    for (i = _k = 0, _ref3 = source.split('\n').length; 0 <= _ref3 ? _k < _ref3 : _k > _ref3; i = 0 <= _ref3 ? ++_k : --_k) {
-      for (cmd in block_config) {
-        rules = block_config[cmd][i];
-        if (rules != null) {
-          ({
-            'disable': function() {
-              return disabled = disabled.concat(rules);
-            },
-            'enable': function() {
-              difference(disabled, rules);
-              if (rules.length === 0) {
-                return disabled = disabled_initially;
-              }
-            }
-          })[cmd]();
-        }
-      }
-      while (next_line === i && all_errors.length > 0) {
-        next_line = all_errors[0].lineNumber - 1;
-        e = all_errors[0];
-        if (e.lineNumber === i + 1 || (e.lineNumber == null)) {
-          e = all_errors.shift();
-          if (_ref4 = e.rule, __indexOf.call(disabled, _ref4) < 0) {
-            errors.push(e);
+  };
+
+  return NoPlusPlus;
+
+})();
+
+
+},{}],24:[function(_dereq_,module,exports){
+var NoStandAloneAt;
+
+module.exports = NoStandAloneAt = (function() {
+  function NoStandAloneAt() {}
+
+  NoStandAloneAt.prototype.rule = {
+    name: 'no_stand_alone_at',
+    level: 'ignore',
+    message: '@ must not be used stand alone',
+    description: "This rule checks that no stand alone @ are in use, they are\ndiscouraged. Further information in CoffeScript issue <a\nhref=\"https://github.com/jashkenas/coffee-script/issues/1601\">\n#1601</a>"
+  };
+
+  NoStandAloneAt.prototype.tokens = ["@"];
+
+  NoStandAloneAt.prototype.lintToken = function(token, tokenApi) {
+    var isDot, isIdentifier, isIndexStart, isValidProtoProperty, nextToken, protoProperty, spaced;
+    nextToken = tokenApi.peek();
+    spaced = token.spaced;
+    isIdentifier = nextToken[0] === 'IDENTIFIER';
+    isIndexStart = nextToken[0] === 'INDEX_START';
+    isDot = nextToken[0] === '.';
+    if (nextToken[0] === '::') {
+      protoProperty = tokenApi.peek(2);
+      isValidProtoProperty = protoProperty[0] === 'IDENTIFIER';
+    }
+    if (spaced || (!isIdentifier && !isIndexStart && !isDot && !isValidProtoProperty)) {
+      return true;
+    }
+  };
+
+  return NoStandAloneAt;
+
+})();
+
+
+},{}],25:[function(_dereq_,module,exports){
+var NoTabs, indentationRegex,
+  __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
+
+indentationRegex = /\S/;
+
+module.exports = NoTabs = (function() {
+  function NoTabs() {}
+
+  NoTabs.prototype.rule = {
+    name: 'no_tabs',
+    level: 'error',
+    message: 'Line contains tab indentation',
+    description: "This rule forbids tabs in indentation. Enough said. It is enabled by\ndefault."
+  };
+
+  NoTabs.prototype.lintLine = function(line, lineApi) {
+    var indentation;
+    indentation = line.split(indentationRegex)[0];
+    if (lineApi.lineHasToken() && __indexOf.call(indentation, '\t') >= 0) {
+      return true;
+    } else {
+      return null;
+    }
+  };
+
+  return NoTabs;
+
+})();
+
+
+},{}],26:[function(_dereq_,module,exports){
+var NoThrowingStrings;
+
+module.exports = NoThrowingStrings = (function() {
+  function NoThrowingStrings() {}
+
+  NoThrowingStrings.prototype.rule = {
+    name: 'no_throwing_strings',
+    level: 'error',
+    message: 'Throwing strings is forbidden',
+    description: "This rule forbids throwing string literals or interpolations. While\nJavaScript (and CoffeeScript by extension) allow any expression to\nbe thrown, it is best to only throw <a\nhref=\"https://developer.mozilla.org\n/en/JavaScript/Reference/Global_Objects/Error\"> Error</a> objects,\nbecause they contain valuable debugging information like the stack\ntrace. Because of JavaScript's dynamic nature, CoffeeLint cannot\nensure you are always throwing instances of <tt>Error</tt>. It will\nonly catch the simple but real case of throwing literal strings.\n<pre>\n<code># CoffeeLint will catch this:\nthrow \"i made a boo boo\"\n\n# ... but not this:\nthrow getSomeString()\n</code>\n</pre>\nThis rule is enabled by default."
+  };
+
+  NoThrowingStrings.prototype.tokens = ["THROW"];
+
+  NoThrowingStrings.prototype.lintToken = function(token, tokenApi) {
+    var n1, n2, nextIsString, _ref;
+    _ref = [tokenApi.peek(), tokenApi.peek(2)], n1 = _ref[0], n2 = _ref[1];
+    nextIsString = n1[0] === 'STRING' || (n1[0] === '(' && n2[0] === 'STRING');
+    return nextIsString;
+  };
+
+  return NoThrowingStrings;
+
+})();
+
+
+},{}],27:[function(_dereq_,module,exports){
+var NoTrailingSemicolons, regexes,
+  __slice = [].slice;
+
+regexes = {
+  trailingSemicolon: /;\r?$/
+};
+
+module.exports = NoTrailingSemicolons = (function() {
+  function NoTrailingSemicolons() {}
+
+  NoTrailingSemicolons.prototype.rule = {
+    name: 'no_trailing_semicolons',
+    level: 'error',
+    message: 'Line contains a trailing semicolon',
+    description: "This rule prohibits trailing semicolons, since they are needless\ncruft in CoffeeScript.\n<pre>\n<code># This semicolon is meaningful.\nx = '1234'; console.log(x)\n\n# This semicolon is redundant.\nalert('end of line');\n</code>\n</pre>\nTrailing semicolons are forbidden by default."
+  };
+
+  NoTrailingSemicolons.prototype.lintLine = function(line, lineApi) {
+    var first, hasNewLine, hasSemicolon, last, lineTokens, _i, _ref;
+    lineTokens = lineApi.getLineTokens();
+    if (lineTokens.length === 1 && lineTokens[0][0] === 'TERMINATOR') {
+      return;
+    }
+    hasSemicolon = regexes.trailingSemicolon.test(line);
+    _ref = lineApi.getLineTokens(), first = 2 <= _ref.length ? __slice.call(_ref, 0, _i = _ref.length - 1) : (_i = 0, []), last = _ref[_i++];
+    hasNewLine = last && (last.newLine != null);
+    if (hasSemicolon && !hasNewLine && lineApi.lineHasToken() && last[0] !== 'STRING') {
+      return true;
+    }
+  };
+
+  return NoTrailingSemicolons;
+
+})();
+
+
+},{}],28:[function(_dereq_,module,exports){
+var NoTrailingWhitespace, regexes;
+
+regexes = {
+  trailingWhitespace: /[^\s]+[\t ]+\r?$/,
+  onlySpaces: /^[\t ]+\r?$/,
+  lineHasComment: /^\s*[^\#]*\#/
+};
+
+module.exports = NoTrailingWhitespace = (function() {
+  function NoTrailingWhitespace() {}
+
+  NoTrailingWhitespace.prototype.rule = {
+    name: 'no_trailing_whitespace',
+    level: 'error',
+    message: 'Line ends with trailing whitespace',
+    allowed_in_comments: false,
+    allowed_in_empty_lines: true,
+    description: "This rule forbids trailing whitespace in your code, since it is\nneedless cruft. It is enabled by default."
+  };
+
+  NoTrailingWhitespace.prototype.lintLine = function(line, lineApi) {
+    var str, token, tokens, _i, _len, _ref, _ref1, _ref2;
+    if (!((_ref = lineApi.config['no_trailing_whitespace']) != null ? _ref.allowed_in_empty_lines : void 0)) {
+      if (regexes.onlySpaces.test(line)) {
+        return true;
+      }
+    }
+    if (regexes.trailingWhitespace.test(line)) {
+      if (!((_ref1 = lineApi.config['no_trailing_whitespace']) != null ? _ref1.allowed_in_comments : void 0)) {
+        return true;
+      }
+      line = line;
+      tokens = lineApi.tokensByLine[lineApi.lineNumber];
+      if (!tokens) {
+        return null;
+      }
+      _ref2 = (function() {
+        var _j, _len, _results;
+        _results = [];
+        for (_j = 0, _len = tokens.length; _j < _len; _j++) {
+          token = tokens[_j];
+          if (token[0] === 'STRING') {
+            _results.push(token[1]);
           }
         }
-      }
-    }
-    block_config = {
-      'enable': {},
-      'disable': {}
-    };
-    return errors;
-  };
-
-}).call(this);
+        return _results;
+      })();
+      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+        str = _ref2[_i];
+        line = line.replace(str, 'STRING');
+      }
+      if (!regexes.lineHasComment.test(line)) {
+        return true;
+      }
+    }
+  };
+
+  return NoTrailingWhitespace;
+
+})();
+
+
+},{}],29:[function(_dereq_,module,exports){
+var NoUnnecessaryFatArrows, any, isCode, isFatArrowCode, isThis, needsFatArrow;
+
+isCode = function(node) {
+  return node.constructor.name === 'Code';
+};
+
+isFatArrowCode = function(node) {
+  return isCode(node) && node.bound;
+};
+
+isThis = function(node) {
+  return node.constructor.name === 'Value' && node.base.value === 'this';
+};
+
+any = function(arr, test) {
+  return arr.reduce((function(res, elt) {
+    return res || test(elt);
+  }), false);
+};
+
+needsFatArrow = function(node) {
+  return isCode(node) && (any(node.params, function(param) {
+    return param.contains(isThis) != null;
+  }) || (node.body.contains(isThis) != null) || (node.body.contains(function(child) {
+    return isFatArrowCode(child) && needsFatArrow(child);
+  }) != null));
+};
+
+module.exports = NoUnnecessaryFatArrows = (function() {
+  function NoUnnecessaryFatArrows() {}
+
+  NoUnnecessaryFatArrows.prototype.rule = {
+    name: 'no_unnecessary_fat_arrows',
+    level: 'warn',
+    message: 'Unnecessary fat arrow',
+    description: "Disallows defining functions with fat arrows when `this`\nis not used within the function."
+  };
+
+  NoUnnecessaryFatArrows.prototype.lintAST = function(node, astApi) {
+    this.lintNode(node, astApi);
+    return void 0;
+  };
+
+  NoUnnecessaryFatArrows.prototype.lintNode = function(node, astApi) {
+    var error;
+    if ((isFatArrowCode(node)) && (!needsFatArrow(node))) {
+      error = astApi.createError({
+        lineNumber: node.locationData.first_line + 1
+      });
+      this.errors.push(error);
+    }
+    return node.eachChild((function(_this) {
+      return function(child) {
+        return _this.lintNode(child, astApi);
+      };
+    })(this));
+  };
+
+  return NoUnnecessaryFatArrows;
+
+})();
+
+
+},{}],30:[function(_dereq_,module,exports){
+var NonEmptyConstructorNeedsParens, ParentClass,
+  __hasProp = {}.hasOwnProperty,
+  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+ParentClass = _dereq_('./empty_constructor_needs_parens.coffee');
+
+module.exports = NonEmptyConstructorNeedsParens = (function(_super) {
+  __extends(NonEmptyConstructorNeedsParens, _super);
+
+  function NonEmptyConstructorNeedsParens() {
+    return NonEmptyConstructorNeedsParens.__super__.constructor.apply(this, arguments);
+  }
+
+  NonEmptyConstructorNeedsParens.prototype.rule = {
+    name: 'non_empty_constructor_needs_parens',
+    level: 'ignore',
+    message: 'Invoking a constructor without parens and with arguments',
+    description: "Requires constructors with parameters to include the parens"
+  };
+
+  NonEmptyConstructorNeedsParens.prototype.handleExpectedCallStart = function(expectedCallStart) {
+    if (expectedCallStart[0] === 'CALL_START' && expectedCallStart.generated) {
+      return true;
+    }
+  };
+
+  return NonEmptyConstructorNeedsParens;
+
+})(ParentClass);
+
+
+},{"./empty_constructor_needs_parens.coffee":13}],31:[function(_dereq_,module,exports){
+var SpaceOperators,
+  __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
+
+module.exports = SpaceOperators = (function() {
+  SpaceOperators.prototype.rule = {
+    name: 'space_operators',
+    level: 'ignore',
+    message: 'Operators must be spaced properly',
+    description: "This rule enforces that operators have space around them."
+  };
+
+  SpaceOperators.prototype.tokens = ["+", "-", "=", "MATH", "COMPARE", "LOGIC", "COMPOUND_ASSIGN", "(", ")", "CALL_START", "CALL_END"];
+
+  function SpaceOperators() {
+    this.callTokens = [];
+    this.parenTokens = [];
+  }
+
+  SpaceOperators.prototype.lintToken = function(_arg, tokenApi) {
+    var type;
+    type = _arg[0];
+    if (type === "CALL_START" || type === "CALL_END") {
+      this.lintCall.apply(this, arguments);
+      return void 0;
+    }
+    if (type === "(" || type === ")") {
+      this.lintParens.apply(this, arguments);
+      return void 0;
+    }
+    if (type === "+" || type === "-") {
+      return this.lintPlus.apply(this, arguments);
+    } else {
+      return this.lintMath.apply(this, arguments);
+    }
+  };
+
+  SpaceOperators.prototype.lintPlus = function(token, tokenApi) {
+    var isUnary, p, unaries, _ref;
+    if (this.isInInterpolation() || this.isInExtendedRegex()) {
+      return null;
+    }
+    p = tokenApi.peek(-1);
+    unaries = ['TERMINATOR', '(', '=', '-', '+', ',', 'CALL_START', 'INDEX_START', '..', '...', 'COMPARE', 'IF', 'THROW', 'LOGIC', 'POST_IF', ':', '[', 'INDENT', 'COMPOUND_ASSIGN', 'RETURN', 'MATH', 'BY', 'LEADING_WHEN'];
+    isUnary = !p ? false : (_ref = p[0], __indexOf.call(unaries, _ref) >= 0);
+    if ((isUnary && token.spaced) || (!isUnary && !token.spaced && !token.newLine)) {
+      return {
+        context: token[1]
+      };
+    } else {
+      return null;
+    }
+  };
+
+  SpaceOperators.prototype.lintMath = function(token, tokenApi) {
+    if (!token.spaced && !token.newLine) {
+      return {
+        context: token[1]
+      };
+    } else {
+      return null;
+    }
+  };
+
+  SpaceOperators.prototype.isInExtendedRegex = function() {
+    var t, _i, _len, _ref;
+    _ref = this.callTokens;
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      t = _ref[_i];
+      if (t.isRegex) {
+        return true;
+      }
+    }
+    return false;
+  };
+
+  SpaceOperators.prototype.lintCall = function(token, tokenApi) {
+    var p;
+    if (token[0] === 'CALL_START') {
+      p = tokenApi.peek(-1);
+      token.isRegex = p && p[0] === 'IDENTIFIER' && p[1] === 'RegExp';
+      this.callTokens.push(token);
+    } else {
+      this.callTokens.pop();
+    }
+    return null;
+  };
+
+  SpaceOperators.prototype.isInInterpolation = function() {
+    var t, _i, _len, _ref;
+    _ref = this.parenTokens;
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      t = _ref[_i];
+      if (t.isInterpolation) {
+        return true;
+      }
+    }
+    return false;
+  };
+
+  SpaceOperators.prototype.lintParens = function(token, tokenApi) {
+    var i, n1, n2, p1;
+    if (token[0] === '(') {
+      p1 = tokenApi.peek(-1);
+      n1 = tokenApi.peek(1);
+      n2 = tokenApi.peek(2);
+      i = n1 && n2 && n1[0] === 'STRING' && n2[0] === '+';
+      token.isInterpolation = i;
+      this.parenTokens.push(token);
+    } else {
+      this.parenTokens.pop();
+    }
+    return null;
+  };
+
+  return SpaceOperators;
+
+})();
+
+
+},{}]},{},[4])
+(4)
+});
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/lib/commandline.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/lib/commandline.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/lib/commandline.js	(revision 516)
@@ -1,3 +1,2 @@
-// Generated by CoffeeScript 1.6.2
 /*
 CoffeeLint
@@ -9,5 +8,5 @@
 
 (function() {
-  var CSVReporter, CoffeeScript, ErrorReport, JSLintReporter, Reporter, coffeelint, config, data, errorReport, existsFn, findCoffeeScripts, fs, glob, lintFiles, lintSource, optimist, options, path, paths, read, reportAndExit, scripts, stdin, thisdir, _ref, _ref1, _ref2,
+  var CSVReporter, CheckstyleReporter, CoffeeScript, ErrorReport, JSLintReporter, Reporter, coffeelint, config, configfinder, data, errorReport, findCoffeeScripts, fs, getFallbackConfig, glob, lintFiles, lintSource, loadRules, optimist, options, path, paths, read, reportAndExit, scripts, stdin, thisdir, _ref, _ref1, _ref2,
     __slice = [].slice,
     __hasProp = {}.hasOwnProperty,
@@ -24,5 +23,7 @@
   thisdir = path.dirname(fs.realpathSync(__filename));
 
-  coffeelint = require(path.join(thisdir, "..", "lib", "coffeelint"));
+  coffeelint = require(path.join(thisdir, "coffeelint"));
+
+  configfinder = require(path.join(thisdir, "configfinder"));
 
   CoffeeScript = require('coffee-script');
@@ -30,5 +31,4 @@
   read = function(path) {
     var realPath;
-
     realPath = fs.realpathSync(path);
     return fs.readFileSync(realPath).toString();
@@ -37,5 +37,4 @@
   findCoffeeScripts = function(paths) {
     var files, p, _i, _len;
-
     files = [];
     for (_i = 0, _len = paths.length; _i < _len; _i++) {
@@ -66,5 +65,4 @@
     ErrorReport.prototype.getSummary = function() {
       var error, errorCount, errors, pathCount, warningCount, _i, _len, _ref;
-
       pathCount = errorCount = warningCount = 0;
       _ref = this.paths;
@@ -112,5 +110,4 @@
     ErrorReport.prototype._hasLevel = function(path, level) {
       var error, _i, _len, _ref;
-
       _ref = this.paths[path];
       for (_i = 0, _len = _ref.length; _i < _len; _i++) {
@@ -141,5 +138,4 @@
     Reporter.prototype.stylize = function() {
       var map, message, styles;
-
       message = arguments[0], styles = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
       if (!this.colorize) {
@@ -159,5 +155,4 @@
     Reporter.prototype.publish = function() {
       var errors, paths, report;
-
       paths = this.errorReport.paths;
       report = "";
@@ -176,5 +171,4 @@
     Reporter.prototype.reportSummary = function(s) {
       var e, err, file, msg, p, start, w, warn;
-
       start = s.errorCount > 0 ? "" + this.err + " " + (this.stylize("Lint!", 'red', 'bold')) : s.warningCount > 0 ? "" + this.warn + " " + (this.stylize("Warning!", 'yellow', 'bold')) : "" + this.ok + " " + (this.stylize("Ok!", 'green', 'bold'));
       e = s.errorCount;
@@ -190,5 +184,4 @@
     Reporter.prototype.reportPath = function(path, errors) {
       var color, e, hasError, hasWarning, lineEnd, o, output, overall, pathReport, _i, _len, _ref;
-
       _ref = (hasError = this.errorReport.pathHasError(path)) ? [this.err, 'red'] : (hasWarning = this.errorReport.pathHasWarning(path)) ? [this.warn, 'yellow'] : [this.ok, 'green'], overall = _ref[0], color = _ref[1];
       pathReport = "";
@@ -242,5 +235,4 @@
     CSVReporter.prototype.publish = function() {
       var e, errors, f, header, _ref1, _results;
-
       header = ["path", "lineNumber", "lineNumberEnd", "level", "message"];
       this.print(header.join(","));
@@ -251,8 +243,10 @@
         _results.push((function() {
           var _i, _len, _ref2, _results1;
-
           _results1 = [];
           for (_i = 0, _len = errors.length; _i < _len; _i++) {
             e = errors[_i];
+            if (e.context) {
+              e.message += " " + e.context + ".";
+            }
             f = [path, e.lineNumber, (_ref2 = e.lineNumberEnd) != null ? _ref2 : e.lineNumberEnd, e.level, e.message];
             _results1.push(this.print(f.join(",")));
@@ -278,5 +272,4 @@
     JSLintReporter.prototype.publish = function() {
       var e, errors, _i, _len, _ref2, _ref3;
-
       this.print("<?xml version=\"1.0\" encoding=\"utf-8\"?><jslint>");
       _ref2 = this.errorReport.paths;
@@ -287,5 +280,5 @@
           for (_i = 0, _len = errors.length; _i < _len; _i++) {
             e = errors[_i];
-            this.print("<issue line=\"" + e.lineNumber + "\"\n        lineEnd=" + ((_ref3 = e.lineNumberEnd) != null ? _ref3 : e.lineNumberEnd) + "\n        reason=\"[" + (this.escape(e.level)) + "] " + (this.escape(e.message)) + "\"\n        evidence=\"" + (this.escape(e.context)) + "\"/>");
+            this.print("<issue line=\"" + e.lineNumber + "\"\n        lineEnd=\"" + ((_ref3 = e.lineNumberEnd) != null ? _ref3 : e.lineNumber) + "\"\n        reason=\"[" + (this.escape(e.level)) + "] " + (this.escape(e.message)) + "\"\n        evidence=\"" + (this.escape(e.context)) + "\"/>");
           }
           this.print("</file>");
@@ -297,5 +290,4 @@
     JSLintReporter.prototype.escape = function(msg) {
       var r, replacements, _i, _len;
-
       msg = "" + msg;
       if (!msg) {
@@ -314,13 +306,55 @@
   })(Reporter);
 
-  lintFiles = function(paths, config) {
-    var errorReport, literate, source, _i, _len;
-
+  CheckstyleReporter = (function(_super) {
+    __extends(CheckstyleReporter, _super);
+
+    function CheckstyleReporter() {
+      _ref2 = CheckstyleReporter.__super__.constructor.apply(this, arguments);
+      return _ref2;
+    }
+
+    CheckstyleReporter.prototype.publish = function() {
+      var context, e, errors, level, _i, _len, _ref3, _ref4;
+      this.print("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
+      this.print("<checkstyle version=\"4.3\">");
+      _ref3 = this.errorReport.paths;
+      for (path in _ref3) {
+        errors = _ref3[path];
+        if (errors.length) {
+          this.print("<file name=\"" + path + "\">");
+          for (_i = 0, _len = errors.length; _i < _len; _i++) {
+            e = errors[_i];
+            level = e.level;
+            if (level === 'warn') {
+              level = 'warning';
+            }
+            context = (_ref4 = e.context) != null ? _ref4 : "";
+            this.print("<error line=\"" + e.lineNumber + "\"\n    severity=\"" + (this.escape(level)) + "\"\n    message=\"" + (this.escape(e.message + '; context: ' + context)) + "\"\n    source=\"coffeelint\"/>");
+          }
+          this.print("</file>");
+        }
+      }
+      return this.print("</checkstyle>");
+    };
+
+    return CheckstyleReporter;
+
+  })(JSLintReporter);
+
+  lintFiles = function(files, config) {
+    var data, errorReport, file, fileConfig, literate, ruleName, source, _i, _len;
     errorReport = new ErrorReport();
-    for (_i = 0, _len = paths.length; _i < _len; _i++) {
-      path = paths[_i];
-      source = read(path);
-      literate = CoffeeScript.helpers.isLiterate(path);
-      errorReport.paths[path] = coffeelint.lint(source, config, literate);
+    for (_i = 0, _len = files.length; _i < _len; _i++) {
+      file = files[_i];
+      source = read(file);
+      literate = CoffeeScript.helpers.isLiterate(file);
+      fileConfig = config ? config : getFallbackConfig(file);
+      for (ruleName in fileConfig) {
+        data = fileConfig[ruleName];
+        if (data.module != null) {
+          loadRules(data.module, ruleName);
+        }
+      }
+      errorReport.paths[file] = coffeelint.lint(source, fileConfig, literate);
     }
     return errorReport;
@@ -328,18 +362,61 @@
 
   lintSource = function(source, config, literate) {
-    var errorReport;
-
+    var data, errorReport, ruleName;
     if (literate == null) {
       literate = false;
     }
     errorReport = new ErrorReport();
+    config || (config = getFallbackConfig());
+    for (ruleName in config) {
+      data = config[ruleName];
+      if (data.module != null) {
+        loadRules(data.module, ruleName);
+      }
+    }
     errorReport.paths["stdin"] = coffeelint.lint(source, config, literate);
     return errorReport;
   };
 
+  getFallbackConfig = function(filename) {
+    if (filename == null) {
+      filename = null;
+    }
+    if (!options.argv.noconfig) {
+      return configfinder.getConfig(filename);
+    }
+  };
+
+  loadRules = function(moduleName, ruleName) {
+    var e, rule, ruleModule, _i, _len, _results;
+    if (ruleName == null) {
+      ruleName = void 0;
+    }
+    try {
+      try {
+        ruleModule = require(moduleName);
+      } catch (_error) {
+        e = _error;
+        ruleModule = require(path.resolve(process.cwd(), moduleName));
+      }
+      if (typeof ruleModule === 'function') {
+        return coffeelint.registerRule(ruleModule, ruleName);
+      } else {
+        _results = [];
+        for (_i = 0, _len = ruleModule.length; _i < _len; _i++) {
+          rule = ruleModule[_i];
+          _results.push(coffeelint.registerRule(rule));
+        }
+        return _results;
+      }
+    } catch (_error) {
+      e = _error;
+      console.error("Error loading " + moduleName);
+      throw e;
+    }
+  };
+
   reportAndExit = function(errorReport, options) {
     var colorize, reporter;
-
-    reporter = options.argv.jslint ? new JSLintReporter(errorReport) : options.argv.csv ? new CSVReporter(errorReport) : (colorize = !options.argv.nocolor, new Reporter(errorReport, colorize));
+    reporter = options.argv.jslint ? new JSLintReporter(errorReport) : options.argv.csv ? new CSVReporter(errorReport) : options.argv.checkstyle ? new CheckstyleReporter(errorReport) : (colorize = !options.argv.nocolor, new Reporter(errorReport, colorize));
     reporter.publish();
     return process.on('exit', function() {
@@ -348,5 +425,5 @@
   };
 
-  options = optimist.usage("Usage: coffeelint [options] source [...]").alias("f", "file").alias("h", "help").alias("v", "version").alias("s", "stdin").alias("q", "quiet").describe("f", "Specify a custom configuration file.").describe("makeconfig", "Prints a default config file").describe("noconfig", "Ignores the environment variable COFFEELINT_CONFIG.").describe("h", "Print help information.").describe("v", "Print current version number.").describe("r", "Recursively lint .coffee files in subdirectories.").describe("csv", "Use the csv reporter.").describe("jslint", "Use the JSLint XML reporter.").describe("nocolor", "Don't colorize the output").describe("s", "Lint the source from stdin").describe("q", "Only print errors.").describe("literate", "Used with --stdin to process as Literate CoffeeScript").boolean("csv").boolean("jslint").boolean("nocolor").boolean("noconfig").boolean("makeconfig").boolean("literate").boolean("r").boolean("s").boolean("q", "Print errors only.");
+  options = optimist.usage("Usage: coffeelint [options] source [...]").alias("f", "file").alias("h", "help").alias("v", "version").alias("s", "stdin").alias("q", "quiet").describe("f", "Specify a custom configuration file.").describe("rules", "Specify a custom rule or directory of rules.").describe("makeconfig", "Prints a default config file").describe("noconfig", "Ignores the environment variable COFFEELINT_CONFIG.").describe("h", "Print help information.").describe("v", "Print current version number.").describe("r", "(not used, but left for backward compatibility)").describe("csv", "Use the csv reporter.").describe("jslint", "Use the JSLint XML reporter.").describe("checkstyle", "Use the checkstyle XML reporter.").describe("nocolor", "Don't colorize the output").describe("s", "Lint the source from stdin").describe("q", "Only print errors.").describe("literate", "Used with --stdin to process as Literate CoffeeScript").boolean("csv").boolean("jslint").boolean("checkstyle").boolean("nocolor").boolean("noconfig").boolean("makeconfig").boolean("literate").boolean("r").boolean("s").boolean("q", "Print errors only.");
 
   if (options.argv.v) {
@@ -366,12 +443,14 @@
     process.exit(1);
   } else {
-    config = {};
+    config = null;
     if (!options.argv.noconfig) {
-      existsFn = (_ref2 = fs.existsSync) != null ? _ref2 : path.existsSync;
       if (options.argv.f) {
         config = JSON.parse(read(options.argv.f));
-      } else if (process.env.COFFEELINT_CONFIG && existsFn(process.env.COFFEELINT_CONFIG)) {
+      } else if (process.env.COFFEELINT_CONFIG && fs.existsSync(process.env.COFFEELINT_CONFIG)) {
         config = JSON.parse(read(process.env.COFFEELINT_CONFIG));
       }
+    }
+    if (options.argv.rules) {
+      loadRules(options.argv.rules);
     }
     if (options.argv.s) {
@@ -385,5 +464,4 @@
       stdin.on('end', function() {
         var errorReport;
-
         errorReport = lintSource(data, config, options.argv.literate);
         return reportAndExit(errorReport, options);
@@ -391,5 +469,5 @@
     } else {
       paths = options.argv._;
-      scripts = options.argv.r ? findCoffeeScripts(paths) : paths;
+      scripts = findCoffeeScripts(paths);
       errorReport = lintFiles(scripts, config, options.argv.literate);
       reportAndExit(errorReport, options);
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/lib/configfinder.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/lib/configfinder.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/lib/configfinder.js	(revision 516)
@@ -0,0 +1,76 @@
+/*
+Helpers for finding CoffeeLint config in standard locations, similar to how
+JSHint does.
+*/
+
+
+(function() {
+  var findFile, findFileResults, fs, loadJSON, loadNpmConfig, path;
+
+  fs = require('fs');
+
+  path = require('path');
+
+  findFileResults = {};
+
+  findFile = function(name, dir) {
+    var filename, parent;
+    dir = dir || process.cwd();
+    filename = path.normalize(path.join(dir, name));
+    if (findFileResults[filename]) {
+      return findFileResults[filename];
+    }
+    parent = path.resolve(dir, "../");
+    if (fs.existsSync(filename)) {
+      return findFileResults[filename] = filename;
+    } else if (dir === parent) {
+      return findFileResults[filename] = null;
+    } else {
+      return findFile(name, parent);
+    }
+  };
+
+  loadNpmConfig = function(dir) {
+    var fp;
+    fp = findFile("package.json", dir);
+    if (fp) {
+      return loadJSON(fp).coffeelintConfig;
+    }
+  };
+
+  loadJSON = function(filename) {
+    var e;
+    try {
+      return JSON.parse(fs.readFileSync(filename).toString());
+    } catch (_error) {
+      e = _error;
+      console.error("Could not load JSON file '%s': %s", filename, e);
+      return null;
+    }
+  };
+
+  exports.getConfig = function(filename) {
+    var dir, envs, home, npmConfig, projConfig;
+    if (filename == null) {
+      filename = null;
+    }
+    if (filename) {
+      dir = path.dirname(path.resolve(filename));
+      npmConfig = loadNpmConfig(dir);
+      if (npmConfig) {
+        return npmConfig;
+      }
+      projConfig = findFile("coffeelint.json", dir);
+      if (projConfig) {
+        return loadJSON(projConfig);
+      }
+    }
+    envs = process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
+    home = path.normalize(path.join(envs, "coffeelint.json"));
+    if (fs.existsSync(home)) {
+      console.log('loaded', home);
+      return loadJSON(home);
+    }
+  };
+
+}).call(this);
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/lib/htmldoc.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/lib/htmldoc.js	(revision 484)
+++ 	(revision )
@@ -1,33 +1,0 @@
-// Generated by CoffeeScript 1.6.2
-(function() {
-  var render, ruleTemplate, rules, _;
-
-  _ = require("underscore");
-
-  rules = (require("./coffeelint")).RULES;
-
-  render = function() {
-    var rule, ruleName, rulesHTML, _i, _len, _ref, _results;
-
-    rulesHTML = "";
-    _ref = _.sortBy(_.keys(rules), (function(s) {
-      return s;
-    }));
-    _results = [];
-    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-      ruleName = _ref[_i];
-      rule = rules[ruleName];
-      rule.name = ruleName;
-      if (!rule.description) {
-        rule.description = "[no description provided]";
-      }
-      _results.push(console.log(ruleTemplate(rule)));
-    }
-    return _results;
-  };
-
-  ruleTemplate = _.template("<tr>\n<td class=\"rule\"><%= name %></td>\n<td class=\"description\">\n    <%= description %>\n    <p><em>default level: <%= level %></em></p>\n</td>\n</tr>");
-
-  render();
-
-}).call(this);
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/.bin/vows
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/.bin/vows	(revision 484)
+++ 	(revision )
@@ -1,1 +1,0 @@
-link ../vows/bin/vows
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/browser.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/browser.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/browser.js	(revision 516)
@@ -1,3 +1,3 @@
-// Generated by CoffeeScript 1.6.2
+// Generated by CoffeeScript 1.6.3
 (function() {
   var CoffeeScript, compile, runScripts,
@@ -11,10 +11,8 @@
 
   CoffeeScript["eval"] = function(code, options) {
-    var _ref;
-
     if (options == null) {
       options = {};
     }
-    if ((_ref = options.bare) == null) {
+    if (options.bare == null) {
       options.bare = true;
     }
@@ -27,4 +25,5 @@
     }
     options.bare = true;
+    options.shiftLine = true;
     return Function(compile(code, options))();
   };
@@ -34,8 +33,7 @@
   }
 
-  if ((typeof btoa !== "undefined" && btoa !== null) && (typeof JSON !== "undefined" && JSON !== null)) {
+  if ((typeof btoa !== "undefined" && btoa !== null) && (typeof JSON !== "undefined" && JSON !== null) && (typeof unescape !== "undefined" && unescape !== null) && (typeof encodeURIComponent !== "undefined" && encodeURIComponent !== null)) {
     compile = function(code, options) {
       var js, v3SourceMap, _ref;
-
       if (options == null) {
         options = {};
@@ -44,5 +42,5 @@
       options.inline = true;
       _ref = CoffeeScript.compile(code, options), js = _ref.js, v3SourceMap = _ref.v3SourceMap;
-      return "" + js + "\n//@ sourceMappingURL=data:application/json;base64," + (btoa(v3SourceMap)) + "\n//@ sourceURL=coffeescript";
+      return "" + js + "\n//@ sourceMappingURL=data:application/json;base64," + (btoa(unescape(encodeURIComponent(v3SourceMap)))) + "\n//@ sourceURL=coffeescript";
     };
   }
@@ -50,10 +48,9 @@
   CoffeeScript.load = function(url, callback, options) {
     var xhr;
-
     if (options == null) {
       options = {};
     }
     options.sourceFiles = [url];
-    xhr = window.ActiveXObject ? new window.ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest();
+    xhr = window.ActiveXObject ? new window.ActiveXObject('Microsoft.XMLHTTP') : new window.XMLHttpRequest();
     xhr.open('GET', url, true);
     if ('overrideMimeType' in xhr) {
@@ -62,5 +59,4 @@
     xhr.onreadystatechange = function() {
       var _ref;
-
       if (xhr.readyState === 4) {
         if ((_ref = xhr.status) === 0 || _ref === 200) {
@@ -79,10 +75,8 @@
   runScripts = function() {
     var coffees, coffeetypes, execute, index, length, s, scripts;
-
-    scripts = document.getElementsByTagName('script');
+    scripts = window.document.getElementsByTagName('script');
     coffeetypes = ['text/coffeescript', 'text/literate-coffeescript'];
     coffees = (function() {
       var _i, _len, _ref, _results;
-
       _results = [];
       for (_i = 0, _len = scripts.length; _i < _len; _i++) {
@@ -98,5 +92,4 @@
     (execute = function() {
       var mediatype, options, script;
-
       script = coffees[index++];
       mediatype = script != null ? script.type : void 0;
@@ -118,7 +111,7 @@
 
   if (window.addEventListener) {
-    addEventListener('DOMContentLoaded', runScripts, false);
+    window.addEventListener('DOMContentLoaded', runScripts, false);
   } else {
-    attachEvent('onload', runScripts);
+    window.attachEvent('onload', runScripts);
   }
 
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/cake.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/cake.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/cake.js	(revision 516)
@@ -1,3 +1,3 @@
-// Generated by CoffeeScript 1.6.2
+// Generated by CoffeeScript 1.6.3
 (function() {
   var CoffeeScript, cakefileDirectory, existsSync, fatalError, fs, helpers, missingTask, oparse, options, optparse, path, printTasks, switches, tasks;
@@ -26,5 +26,4 @@
     task: function(name, description, action) {
       var _ref;
-
       if (!action) {
         _ref = [description, action], action = _ref[0], description = _ref[1];
@@ -49,5 +48,4 @@
   exports.run = function() {
     var arg, args, e, _i, _len, _ref, _results;
-
     global.__originalDirname = fs.realpathSync('.');
     process.chdir(cakefileDirectory(__originalDirname));
@@ -77,5 +75,4 @@
   printTasks = function() {
     var cakefilePath, desc, name, relative, spaces, task;
-
     relative = path.relative || path.resolve;
     cakefilePath = path.join(relative(__originalDirname, process.cwd()), 'Cakefile');
@@ -105,5 +102,4 @@
   cakefileDirectory = function(dir) {
     var parent;
-
     if (existsSync(path.join(dir, 'Cakefile'))) {
       return dir;
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/coffee-script.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/coffee-script.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/coffee-script.js	(revision 516)
@@ -1,5 +1,5 @@
-// Generated by CoffeeScript 1.6.2
+// Generated by CoffeeScript 1.6.3
 (function() {
-  var Lexer, child_process, compile, ext, fork, formatSourcePosition, fs, helpers, lexer, loadFile, parser, patchStackTrace, patched, path, sourcemap, vm, _i, _len, _ref,
+  var Lexer, Module, SourceMap, child_process, compile, ext, findExtension, fork, formatSourcePosition, fs, helpers, lexer, loadFile, parser, patchStackTrace, patched, path, sourceMaps, vm, _i, _len, _ref,
     __hasProp = {}.hasOwnProperty;
 
@@ -18,23 +18,25 @@
   helpers = require('./helpers');
 
-  sourcemap = require('./sourcemap');
-
-  exports.VERSION = '1.6.2';
+  SourceMap = require('./sourcemap');
+
+  exports.VERSION = '1.6.3';
 
   exports.helpers = helpers;
 
   exports.compile = compile = function(code, options) {
-    var answer, currentColumn, currentLine, fragment, fragments, header, js, merge, newLines, sourceMap, _i, _len;
-
+    var answer, currentColumn, currentLine, fragment, fragments, header, js, map, merge, newLines, _i, _len;
     if (options == null) {
       options = {};
     }
-    merge = exports.helpers.merge;
+    merge = helpers.merge;
     if (options.sourceMap) {
-      sourceMap = new sourcemap.SourceMap();
-    }
-    fragments = (parser.parse(lexer.tokenize(code, options))).compileToFragments(options);
+      map = new SourceMap;
+    }
+    fragments = parser.parse(lexer.tokenize(code, options)).compileToFragments(options);
     currentLine = 0;
-    if (options.header || options.inline) {
+    if (options.header) {
+      currentLine += 1;
+    }
+    if (options.shiftLine) {
       currentLine += 1;
     }
@@ -43,7 +45,7 @@
     for (_i = 0, _len = fragments.length; _i < _len; _i++) {
       fragment = fragments[_i];
-      if (sourceMap) {
+      if (options.sourceMap) {
         if (fragment.locationData) {
-          sourceMap.addMapping([fragment.locationData.first_line, fragment.locationData.first_column], [currentLine, currentColumn], {
+          map.add([fragment.locationData.first_line, fragment.locationData.first_column], [currentLine, currentColumn], {
             noReplace: true
           });
@@ -63,8 +65,6 @@
         js: js
       };
-      if (sourceMap) {
-        answer.sourceMap = sourceMap;
-        answer.v3SourceMap = sourcemap.generateV3SourceMap(sourceMap, options, code);
-      }
+      answer.sourceMap = map;
+      answer.v3SourceMap = map.generate(options, code);
       return answer;
     } else {
@@ -86,11 +86,10 @@
 
   exports.run = function(code, options) {
-    var answer, mainModule, _ref;
-
+    var answer, mainModule;
     if (options == null) {
       options = {};
     }
     mainModule = require.main;
-    if ((_ref = options.sourceMap) == null) {
+    if (options.sourceMap == null) {
       options.sourceMap = true;
     }
@@ -101,5 +100,5 @@
       answer = compile(code, options);
       patchStackTrace();
-      mainModule._sourceMaps[mainModule.filename] = answer.sourceMap;
+      sourceMaps[mainModule.filename] = answer.sourceMap;
       return mainModule._compile(answer.js, mainModule.filename);
     } else {
@@ -110,5 +109,4 @@
   exports["eval"] = function(code, options) {
     var Module, Script, js, k, o, r, sandbox, v, _i, _len, _module, _ref, _ref1, _require;
-
     if (options == null) {
       options = {};
@@ -173,12 +171,14 @@
 
   loadFile = function(module, filename) {
-    var raw, stripped;
-
+    var answer, raw, stripped;
     raw = fs.readFileSync(filename, 'utf8');
     stripped = raw.charCodeAt(0) === 0xFEFF ? raw.substring(1) : raw;
-    return module._compile(compile(stripped, {
+    answer = compile(stripped, {
       filename: filename,
+      sourceMap: true,
       literate: helpers.isLiterate(filename)
-    }), filename);
+    });
+    sourceMaps[filename] = answer.sourceMap;
+    return module._compile(answer.js, filename);
   };
 
@@ -189,4 +189,27 @@
       require.extensions[ext] = loadFile;
     }
+    Module = require('module');
+    findExtension = function(filename) {
+      var curExtension, extensions;
+      extensions = path.basename(filename).split('.');
+      if (extensions[0] === '') {
+        extensions.shift();
+      }
+      while (extensions.shift()) {
+        curExtension = '.' + extensions.join('.');
+        if (Module._extensions[curExtension]) {
+          return curExtension;
+        }
+      }
+      return '.js';
+    };
+    Module.prototype.load = function(filename) {
+      var extension;
+      this.filename = filename;
+      this.paths = Module._nodeModulePaths(path.dirname(filename));
+      extension = findExtension(filename);
+      Module._extensions[extension](this, filename);
+      return this.loaded = true;
+    };
   }
 
@@ -195,5 +218,4 @@
     child_process.fork = function(path, args, options) {
       var execPath;
-
       if (args == null) {
         args = [];
@@ -217,5 +239,4 @@
     lex: function() {
       var tag, token;
-
       token = this.tokens[this.pos++];
       if (token) {
@@ -240,5 +261,4 @@
   parser.yy.parseError = function(message, _arg) {
     var token;
-
     token = _arg.token;
     message = "unexpected " + (token === 1 ? 'end of input' : token);
@@ -248,7 +268,8 @@
   patched = false;
 
+  sourceMaps = {};
+
   patchStackTrace = function() {
     var mainModule;
-
     if (patched) {
       return;
@@ -256,15 +277,12 @@
     patched = true;
     mainModule = require.main;
-    mainModule._sourceMaps = {};
     return Error.prepareStackTrace = function(err, stack) {
       var frame, frames, getSourceMapping, sourceFiles, _ref1;
-
       sourceFiles = {};
       getSourceMapping = function(filename, line, column) {
         var answer, sourceMap;
-
-        sourceMap = mainModule._sourceMaps[filename];
+        sourceMap = sourceMaps[filename];
         if (sourceMap) {
-          answer = sourceMap.getSourcePosition([line - 1, column - 1]);
+          answer = sourceMap.sourceLocation([line - 1, column - 1]);
         }
         if (answer) {
@@ -276,5 +294,4 @@
       frames = (function() {
         var _j, _len1, _results;
-
         _results = [];
         for (_j = 0, _len1 = stack.length; _j < _len1; _j++) {
@@ -293,5 +310,4 @@
   formatSourcePosition = function(frame, getSourceMapping) {
     var as, column, fileLocation, fileName, functionName, isConstructor, isMethodCall, line, methodName, source, tp, typeName;
-
     fileName = void 0;
     fileLocation = '';
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/command.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/command.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/command.js	(revision 516)
@@ -1,5 +1,5 @@
-// Generated by CoffeeScript 1.6.2
+// Generated by CoffeeScript 1.6.3
 (function() {
-  var BANNER, CoffeeScript, EventEmitter, SWITCHES, compileJoin, compileOptions, compilePath, compileScript, compileStdio, exec, exists, forkNode, fs, helpers, hidden, joinTimeout, lint, notSources, optionParser, optparse, opts, outputPath, parseOptions, path, printLine, printTokens, printWarn, removeSource, sourceCode, sources, spawn, timeLog, unwatchDir, usage, version, wait, watch, watchDir, watchers, writeJs, _ref;
+  var BANNER, CoffeeScript, EventEmitter, SWITCHES, compileJoin, compileOptions, compilePath, compileScript, compileStdio, exec, exists, forkNode, fs, helpers, hidden, joinTimeout, notSources, optionParser, optparse, opts, outputPath, parseOptions, path, printLine, printTokens, printWarn, removeSource, sourceCode, sources, spawn, timeLog, unwatchDir, usage, useWinPathSep, version, wait, watch, watchDir, watchers, writeJs, _ref;
 
   fs = require('fs');
@@ -18,4 +18,6 @@
 
   exists = fs.exists || path.exists;
+
+  useWinPathSep = path.sep === '\\';
 
   helpers.extend(CoffeeScript, new EventEmitter);
@@ -35,5 +37,5 @@
   BANNER = 'Usage: coffee [options] path/to/script.coffee -- [args]\n\nIf called without options, `coffee` will run your script.';
 
-  SWITCHES = [['-b', '--bare', 'compile without a top-level function wrapper'], ['-c', '--compile', 'compile to JavaScript and save as .js files'], ['-e', '--eval', 'pass a string from the command line as input'], ['-h', '--help', 'display this help message'], ['-i', '--interactive', 'run an interactive CoffeeScript REPL'], ['-j', '--join [FILE]', 'concatenate the source CoffeeScript before compiling'], ['-l', '--lint', 'pipe the compiled JavaScript through JavaScript Lint'], ['-m', '--map', 'generate source map and save as .map files'], ['-n', '--nodes', 'print out the parse tree that the parser produces'], ['--nodejs [ARGS]', 'pass options directly to the "node" binary'], ['-o', '--output [DIR]', 'set the output directory for compiled JavaScript'], ['-p', '--print', 'print out the compiled JavaScript'], ['-s', '--stdio', 'listen for and compile scripts over stdio'], ['-t', '--tokens', 'print out the tokens that the lexer/rewriter produce'], ['-v', '--version', 'display the version number'], ['-w', '--watch', 'watch scripts for changes and rerun commands']];
+  SWITCHES = [['-b', '--bare', 'compile without a top-level function wrapper'], ['-c', '--compile', 'compile to JavaScript and save as .js files'], ['-e', '--eval', 'pass a string from the command line as input'], ['-h', '--help', 'display this help message'], ['-i', '--interactive', 'run an interactive CoffeeScript REPL'], ['-j', '--join [FILE]', 'concatenate the source CoffeeScript before compiling'], ['-m', '--map', 'generate source map and save as .map files'], ['-n', '--nodes', 'print out the parse tree that the parser produces'], ['--nodejs [ARGS]', 'pass options directly to the "node" binary'], ['-o', '--output [DIR]', 'set the output directory for compiled JavaScript'], ['-p', '--print', 'print out the compiled JavaScript'], ['-s', '--stdio', 'listen for and compile scripts over stdio'], ['-l', '--literate', 'treat stdio as literate style coffee-script'], ['-t', '--tokens', 'print out the tokens that the lexer/rewriter produce'], ['-v', '--version', 'display the version number'], ['-w', '--watch', 'watch scripts for changes and rerun commands']];
 
   opts = {};
@@ -51,5 +53,4 @@
   exports.run = function() {
     var literals, source, _i, _len, _results;
-
     parseOptions();
     if (opts.nodejs) {
@@ -103,5 +104,4 @@
         return fs.readdir(source, function(err, files) {
           var file, index, _ref1, _ref2;
-
           if (err && err.code !== 'ENOENT') {
             throw err;
@@ -116,5 +116,4 @@
           [].splice.apply(sources, [index, index - index + 1].concat(_ref1 = (function() {
             var _i, _len, _results;
-
             _results = [];
             for (_i = 0, _len = files.length; _i < _len; _i++) {
@@ -153,5 +152,4 @@
   compileScript = function(file, input, base) {
     var compiled, err, message, o, options, t, task, useColors;
-
     if (base == null) {
       base = null;
@@ -190,6 +188,4 @@
         } else if (o.compile || o.map) {
           return writeJs(base, t.file, t.output, options.jsPath, t.sourceMap);
-        } else if (o.lint) {
-          return lint(t.file, t.output);
         }
       }
@@ -213,5 +209,4 @@
   compileStdio = function() {
     var code, stdin;
-
     code = '';
     stdin = process.openStdin();
@@ -244,5 +239,4 @@
   watch = function(source, base) {
     var compile, compileTimeout, e, prevStats, rewatch, watchErr, watcher;
-
     prevStats = null;
     compileTimeout = null;
@@ -301,5 +295,4 @@
   watchDir = function(source, base) {
     var e, readdirTimeout, watcher;
-
     readdirTimeout = null;
     try {
@@ -309,5 +302,4 @@
           return fs.readdir(source, function(err, files) {
             var file, _i, _len, _results;
-
             if (err) {
               if (err.code !== 'ENOENT') {
@@ -347,9 +339,7 @@
   unwatchDir = function(source, base) {
     var file, prevSources, toRemove, _i, _len;
-
     prevSources = sources.slice(0);
     toRemove = (function() {
       var _i, _len, _results;
-
       _results = [];
       for (_i = 0, _len = sources.length; _i < _len; _i++) {
@@ -375,5 +365,4 @@
   removeSource = function(source, base, removeJs) {
     var index, jsPath;
-
     index = sources.indexOf(source);
     sources.splice(index, 1);
@@ -396,9 +385,8 @@
   outputPath = function(source, base, extension) {
     var baseDir, basename, dir, srcDir;
-
     if (extension == null) {
       extension = ".js";
     }
-    basename = helpers.baseFileName(source, true, path.sep);
+    basename = helpers.baseFileName(source, true, useWinPathSep);
     srcDir = path.dirname(source);
     baseDir = base === '.' ? srcDir : srcDir.substring(base.length);
@@ -409,5 +397,4 @@
   writeJs = function(base, sourcePath, js, jsPath, generatedSourceMap) {
     var compile, jsDir, sourceMapPath;
-
     if (generatedSourceMap == null) {
       generatedSourceMap = null;
@@ -421,5 +408,5 @@
         }
         if (generatedSourceMap) {
-          js = "" + js + "\n/*\n//@ sourceMappingURL=" + (helpers.baseFileName(sourceMapPath, false, path.sep)) + "\n*/\n";
+          js = "" + js + "\n/*\n//@ sourceMappingURL=" + (helpers.baseFileName(sourceMapPath, false, useWinPathSep)) + "\n*/\n";
         }
         fs.writeFile(jsPath, js, function(err) {
@@ -456,24 +443,8 @@
   };
 
-  lint = function(file, js) {
-    var conf, jsl, printIt;
-
-    printIt = function(buffer) {
-      return printLine(file + ':\t' + buffer.toString().trim());
-    };
-    conf = __dirname + '/../../extras/jsl.conf';
-    jsl = spawn('jsl', ['-nologo', '-stdin', '-conf', conf]);
-    jsl.stdout.on('data', printIt);
-    jsl.stderr.on('data', printIt);
-    jsl.stdin.write(js);
-    return jsl.stdin.end();
-  };
-
   printTokens = function(tokens) {
     var strings, tag, token, value;
-
     strings = (function() {
       var _i, _len, _results;
-
       _results = [];
       for (_i = 0, _len = tokens.length; _i < _len; _i++) {
@@ -490,9 +461,8 @@
   parseOptions = function() {
     var i, o, source, _i, _len;
-
     optionParser = new optparse.OptionParser(SWITCHES, BANNER);
     o = opts = optionParser.parse(process.argv.slice(2));
     o.compile || (o.compile = !!o.output);
-    o.run = !(o.compile || o.print || o.lint || o.map);
+    o.run = !(o.compile || o.print || o.map);
     o.print = !!(o.print || (o["eval"] || o.stdio && o.compile));
     sources = o["arguments"];
@@ -505,8 +475,7 @@
   compileOptions = function(filename, base) {
     var answer, cwd, jsDir, jsPath;
-
     answer = {
       filename: filename,
-      literate: helpers.isLiterate(filename),
+      literate: opts.literate || helpers.isLiterate(filename),
       bare: opts.bare,
       header: opts.compile,
@@ -522,11 +491,11 @@
           sourceRoot: path.relative(jsDir, cwd),
           sourceFiles: [path.relative(cwd, filename)],
-          generatedFile: helpers.baseFileName(jsPath, false, path.sep)
+          generatedFile: helpers.baseFileName(jsPath, false, useWinPathSep)
         });
       } else {
         answer = helpers.merge(answer, {
           sourceRoot: "",
-          sourceFiles: [helpers.baseFileName(filename, false, path.sep)],
-          generatedFile: helpers.baseFileName(filename, true, path.sep) + ".js"
+          sourceFiles: [helpers.baseFileName(filename, false, useWinPathSep)],
+          generatedFile: helpers.baseFileName(filename, true, useWinPathSep) + ".js"
         });
       }
@@ -537,5 +506,4 @@
   forkNode = function() {
     var args, nodeArgs;
-
     nodeArgs = opts.nodejs.split(/\s+/);
     args = process.argv.slice(1);
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/grammar.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/grammar.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/grammar.js	(revision 516)
@@ -1,3 +1,3 @@
-// Generated by CoffeeScript 1.6.2
+// Generated by CoffeeScript 1.6.3
 (function() {
   var Parser, alt, alternatives, grammar, name, o, operators, token, tokens, unwrap;
@@ -9,5 +9,4 @@
   o = function(patternString, action, options) {
     var addLocationDataFn, match, patternCount;
-
     patternString = patternString.replace(/\s{2,}/g, ' ');
     patternCount = patternString.split(' ').length;
@@ -352,4 +351,6 @@
       }), o('CATCH Object Block', function() {
         return [LOC(2)(new Value($2)), $3];
+      }), o('CATCH Block', function() {
+        return [null, $2];
       })
     ],
@@ -596,5 +597,4 @@
     grammar[name] = (function() {
       var _i, _j, _len, _len1, _ref, _results;
-
       _results = [];
       for (_i = 0, _len = alternatives.length; _i < _len; _i++) {
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/helpers.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/helpers.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/helpers.js	(revision 516)
@@ -1,3 +1,3 @@
-// Generated by CoffeeScript 1.6.2
+// Generated by CoffeeScript 1.6.3
 (function() {
   var buildLocationData, extend, flatten, last, repeat, _ref;
@@ -9,5 +9,4 @@
   exports.ends = function(string, literal, back) {
     var len;
-
     len = literal.length;
     return literal === string.substr(string.length - len - (back || 0), len);
@@ -16,5 +15,4 @@
   exports.repeat = repeat = function(str, n) {
     var res;
-
     res = '';
     while (n > 0) {
@@ -30,5 +28,4 @@
   exports.compact = function(array) {
     var item, _i, _len, _results;
-
     _results = [];
     for (_i = 0, _len = array.length; _i < _len; _i++) {
@@ -43,5 +40,4 @@
   exports.count = function(string, substr) {
     var num, pos;
-
     num = pos = 0;
     if (!substr.length) {
@@ -60,5 +56,4 @@
   extend = exports.extend = function(object, properties) {
     var key, val;
-
     for (key in properties) {
       val = properties[key];
@@ -70,5 +65,4 @@
   exports.flatten = flatten = function(array) {
     var element, flattened, _i, _len;
-
     flattened = [];
     for (_i = 0, _len = array.length; _i < _len; _i++) {
@@ -85,5 +79,4 @@
   exports.del = function(obj, key) {
     var val;
-
     val = obj[key];
     delete obj[key];
@@ -97,5 +90,4 @@
   exports.some = (_ref = Array.prototype.some) != null ? _ref : function(fn) {
     var e, _i, _len;
-
     for (_i = 0, _len = this.length; _i < _len; _i++) {
       e = this[_i];
@@ -109,9 +101,7 @@
   exports.invertLiterate = function(code) {
     var line, lines, maybe_code;
-
     maybe_code = true;
     lines = (function() {
       var _i, _len, _ref1, _results;
-
       _ref1 = code.split('\n');
       _results = [];
@@ -155,5 +145,4 @@
   exports.locationDataToString = function(obj) {
     var locationData;
-
     if (("2" in obj) && ("first_line" in obj[2])) {
       locationData = obj[2];
@@ -168,13 +157,13 @@
   };
 
-  exports.baseFileName = function(file, stripExt, pathSep) {
-    var parts;
-
+  exports.baseFileName = function(file, stripExt, useWinPathSep) {
+    var parts, pathSep;
     if (stripExt == null) {
       stripExt = false;
     }
-    if (pathSep == null) {
-      pathSep = '/';
-    }
+    if (useWinPathSep == null) {
+      useWinPathSep = false;
+    }
+    pathSep = useWinPathSep ? /\\|\// : /\//;
     parts = file.split(pathSep);
     file = parts[parts.length - 1];
@@ -199,10 +188,9 @@
 
   exports.throwSyntaxError = function(message, location) {
-    var error, _ref1, _ref2;
-
-    if ((_ref1 = location.last_line) == null) {
+    var error;
+    if (location.last_line == null) {
       location.last_line = location.first_line;
     }
-    if ((_ref2 = location.last_column) == null) {
+    if (location.last_column == null) {
       location.last_column = location.first_column;
     }
@@ -214,5 +202,4 @@
   exports.prettyErrorMessage = function(error, fileName, code, useColors) {
     var codeLine, colorize, end, first_column, first_line, last_column, last_line, marker, message, start, _ref1;
-
     if (!error.location) {
       return error.stack || ("" + error);
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/index.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/index.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/index.js	(revision 516)
@@ -1,3 +1,3 @@
-// Generated by CoffeeScript 1.6.2
+// Generated by CoffeeScript 1.6.3
 (function() {
   var key, val, _ref;
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/lexer.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/lexer.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/lexer.js	(revision 516)
@@ -1,10 +1,10 @@
-// Generated by CoffeeScript 1.6.2
+// Generated by CoffeeScript 1.6.3
 (function() {
-  var BOM, BOOL, CALLABLE, CODE, COFFEE_ALIASES, COFFEE_ALIAS_MAP, COFFEE_KEYWORDS, COMMENT, COMPARE, COMPOUND_ASSIGN, HEREDOC, HEREDOC_ILLEGAL, HEREDOC_INDENT, HEREGEX, HEREGEX_OMIT, IDENTIFIER, INDEXABLE, INVERSES, JSTOKEN, JS_FORBIDDEN, JS_KEYWORDS, LINE_BREAK, LINE_CONTINUER, LOGIC, Lexer, MATH, MULTILINER, MULTI_DENT, NOT_REGEX, NOT_SPACED_REGEX, NUMBER, OPERATOR, REGEX, RELATION, RESERVED, Rewriter, SHIFT, SIMPLESTR, STRICT_PROSCRIBED, TRAILING_SPACES, UNARY, WHITESPACE, compact, count, invertLiterate, key, last, locationDataToString, starts, throwSyntaxError, _ref, _ref1,
+  var BOM, BOOL, CALLABLE, CODE, COFFEE_ALIASES, COFFEE_ALIAS_MAP, COFFEE_KEYWORDS, COMMENT, COMPARE, COMPOUND_ASSIGN, HEREDOC, HEREDOC_ILLEGAL, HEREDOC_INDENT, HEREGEX, HEREGEX_OMIT, IDENTIFIER, INDEXABLE, INVERSES, JSTOKEN, JS_FORBIDDEN, JS_KEYWORDS, LINE_BREAK, LINE_CONTINUER, LOGIC, Lexer, MATH, MULTILINER, MULTI_DENT, NOT_REGEX, NOT_SPACED_REGEX, NUMBER, OPERATOR, REGEX, RELATION, RESERVED, Rewriter, SHIFT, SIMPLESTR, STRICT_PROSCRIBED, TRAILING_SPACES, UNARY, WHITESPACE, compact, count, invertLiterate, key, last, locationDataToString, repeat, starts, throwSyntaxError, _ref, _ref1,
     __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
 
   _ref = require('./rewriter'), Rewriter = _ref.Rewriter, INVERSES = _ref.INVERSES;
 
-  _ref1 = require('./helpers'), count = _ref1.count, starts = _ref1.starts, compact = _ref1.compact, last = _ref1.last, invertLiterate = _ref1.invertLiterate, locationDataToString = _ref1.locationDataToString, throwSyntaxError = _ref1.throwSyntaxError;
+  _ref1 = require('./helpers'), count = _ref1.count, starts = _ref1.starts, compact = _ref1.compact, last = _ref1.last, repeat = _ref1.repeat, invertLiterate = _ref1.invertLiterate, locationDataToString = _ref1.locationDataToString, throwSyntaxError = _ref1.throwSyntaxError;
 
   exports.Lexer = Lexer = (function() {
@@ -13,5 +13,4 @@
     Lexer.prototype.tokenize = function(code, opts) {
       var consumed, i, tag, _ref2;
-
       if (opts == null) {
         opts = {};
@@ -60,5 +59,4 @@
     Lexer.prototype.identifierToken = function() {
       var colon, colonOffset, forcedIdentifier, id, idLength, input, match, poppedToken, prev, tag, tagToken, _ref2, _ref3, _ref4;
-
       if (!(match = IDENTIFIER.exec(this.chunk))) {
         return 0;
@@ -143,5 +141,4 @@
     Lexer.prototype.numberToken = function() {
       var binaryLiteral, lexedLength, match, number, octalLiteral;
-
       if (!(match = NUMBER.exec(this.chunk))) {
         return 0;
@@ -159,8 +156,8 @@
       lexedLength = number.length;
       if (octalLiteral = /^0o([0-7]+)/.exec(number)) {
-        number = '0x' + (parseInt(octalLiteral[1], 8)).toString(16);
+        number = '0x' + parseInt(octalLiteral[1], 8).toString(16);
       }
       if (binaryLiteral = /^0b([01]+)/.exec(number)) {
-        number = '0x' + (parseInt(binaryLiteral[1], 2)).toString(16);
+        number = '0x' + parseInt(binaryLiteral[1], 2).toString(16);
       }
       this.token('NUMBER', number, 0, lexedLength);
@@ -170,5 +167,4 @@
     Lexer.prototype.stringToken = function() {
       var match, octalEsc, string;
-
       switch (this.chunk.charAt(0)) {
         case "'":
@@ -203,5 +199,4 @@
     Lexer.prototype.heredocToken = function() {
       var doc, heredoc, match, quote;
-
       if (!(match = HEREDOC.exec(this.chunk))) {
         return 0;
@@ -227,5 +222,4 @@
     Lexer.prototype.commentToken = function() {
       var comment, here, match;
-
       if (!(match = this.chunk.match(COMMENT))) {
         return 0;
@@ -235,5 +229,5 @@
         this.token('HERECOMMENT', this.sanitizeHeredoc(here, {
           herecomment: true,
-          indent: Array(this.indent + 1).join(' ')
+          indent: repeat(' ', this.indent)
         }), 0, comment.length);
       }
@@ -243,5 +237,4 @@
     Lexer.prototype.jsToken = function() {
       var match, script;
-
       if (!(this.chunk.charAt(0) === '`' && (match = JSTOKEN.exec(this.chunk)))) {
         return 0;
@@ -253,5 +246,4 @@
     Lexer.prototype.regexToken = function() {
       var flags, length, match, prev, regex, _ref2, _ref3;
-
       if (this.chunk.charAt(0) !== '/') {
         return 0;
@@ -281,5 +273,4 @@
     Lexer.prototype.heregexToken = function(match) {
       var body, flags, flagsOffset, heregex, plusToken, prev, re, tag, token, tokens, value, _i, _len, _ref2, _ref3, _ref4;
-
       heregex = match[0], body = match[1], flags = match[2];
       if (0 > body.indexOf('#{')) {
@@ -335,5 +326,4 @@
     Lexer.prototype.lineToken = function() {
       var diff, indent, match, noNewlines, size;
-
       if (!(match = MULTI_DENT.exec(this.chunk))) {
         return 0;
@@ -372,5 +362,4 @@
     Lexer.prototype.outdentToken = function(moveOut, noNewlines, outdentLength) {
       var dent, len;
-
       while (moveOut > 0) {
         len = this.indents.length - 1;
@@ -405,5 +394,4 @@
     Lexer.prototype.whitespaceToken = function() {
       var match, nline, prev;
-
       if (!((match = WHITESPACE.exec(this.chunk)) || (nline = this.chunk.charAt(0) === '\n'))) {
         return 0;
@@ -439,5 +427,4 @@
     Lexer.prototype.literalToken = function() {
       var match, prev, tag, value, _ref2, _ref3, _ref4, _ref5;
-
       if (match = OPERATOR.exec(this.chunk)) {
         value = match[0];
@@ -506,5 +493,4 @@
     Lexer.prototype.sanitizeHeredoc = function(doc, options) {
       var attempt, herecomment, indent, match, _ref2;
-
       indent = options.indent, herecomment = options.herecomment;
       if (herecomment) {
@@ -534,5 +520,4 @@
     Lexer.prototype.tagParameters = function() {
       var i, stack, tok, tokens;
-
       if (this.tag() !== ')') {
         return this;
@@ -568,5 +553,4 @@
     Lexer.prototype.balancedString = function(str, end) {
       var continueCount, i, letter, match, prev, stack, _i, _ref2;
-
       continueCount = 0;
       stack = [end];
@@ -604,5 +588,4 @@
     Lexer.prototype.interpolateString = function(str, options) {
       var column, expr, heredoc, i, inner, interpolated, len, letter, lexedLength, line, locationToken, nested, offsetInChunk, pi, plusToken, popped, regex, rparen, strOffset, tag, token, tokens, value, _i, _len, _ref2, _ref3, _ref4;
-
       if (options == null) {
         options = {};
@@ -703,5 +686,4 @@
     Lexer.prototype.pair = function(tag) {
       var size, wanted;
-
       if (tag !== (wanted = last(this.ends))) {
         if ('OUTDENT' !== wanted) {
@@ -717,5 +699,4 @@
     Lexer.prototype.getLineAndColumnFromChunk = function(offset) {
       var column, lineCount, lines, string;
-
       if (offset === 0) {
         return [this.chunkLine, this.chunkColumn];
@@ -730,5 +711,5 @@
       if (lineCount > 0) {
         lines = string.split('\n');
-        column = (last(lines)).length;
+        column = last(lines).length;
       } else {
         column += string.length;
@@ -739,5 +720,4 @@
     Lexer.prototype.makeToken = function(tag, value, offsetInChunk, length) {
       var lastCharacter, locationData, token, _ref2, _ref3;
-
       if (offsetInChunk == null) {
         offsetInChunk = 0;
@@ -756,5 +736,4 @@
     Lexer.prototype.token = function(tag, value, offsetInChunk, length) {
       var token;
-
       token = this.makeToken(tag, value, offsetInChunk, length);
       this.tokens.push(token);
@@ -764,5 +743,4 @@
     Lexer.prototype.tag = function(index, tag) {
       var tok;
-
       return (tok = last(this.tokens, index)) && (tag ? tok[0] = tag : tok[0]);
     };
@@ -770,5 +748,4 @@
     Lexer.prototype.value = function(index, val) {
       var tok;
-
       return (tok = last(this.tokens, index)) && (val ? tok[1] = val : tok[1]);
     };
@@ -776,5 +753,4 @@
     Lexer.prototype.unfinished = function() {
       var _ref2;
-
       return LINE_CONTINUER.test(this.chunk) || ((_ref2 = this.tag()) === '\\' || _ref2 === '.' || _ref2 === '?.' || _ref2 === '?::' || _ref2 === 'UNARY' || _ref2 === 'MATH' || _ref2 === '+' || _ref2 === '-' || _ref2 === 'SHIFT' || _ref2 === 'RELATION' || _ref2 === 'COMPARE' || _ref2 === 'LOGIC' || _ref2 === 'THROW' || _ref2 === 'EXTENDS');
     };
@@ -828,5 +804,4 @@
   COFFEE_ALIASES = (function() {
     var _results;
-
     _results = [];
     for (key in COFFEE_ALIAS_MAP) {
@@ -902,7 +877,7 @@
   BOOL = ['TRUE', 'FALSE'];
 
-  NOT_REGEX = ['NUMBER', 'REGEX', 'BOOL', 'NULL', 'UNDEFINED', '++', '--', ']'];
-
-  NOT_SPACED_REGEX = NOT_REGEX.concat(')', '}', 'THIS', 'IDENTIFIER', 'STRING');
+  NOT_REGEX = ['NUMBER', 'REGEX', 'BOOL', 'NULL', 'UNDEFINED', '++', '--'];
+
+  NOT_SPACED_REGEX = NOT_REGEX.concat(')', '}', 'THIS', 'IDENTIFIER', 'STRING', ']');
 
   CALLABLE = ['IDENTIFIER', 'STRING', 'REGEX', ')', ']', '}', '?', '::', '@', 'THIS', 'SUPER'];
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/nodes.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/nodes.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/nodes.js	(revision 516)
@@ -1,3 +1,3 @@
-// Generated by CoffeeScript 1.6.2
+// Generated by CoffeeScript 1.6.3
 (function() {
   var Access, Arr, Assign, Base, Block, Call, Class, Closure, Code, CodeFragment, Comment, Existence, Extends, For, IDENTIFIER, IDENTIFIER_STR, IS_STRING, If, In, Index, LEVEL_ACCESS, LEVEL_COND, LEVEL_LIST, LEVEL_OP, LEVEL_PAREN, LEVEL_TOP, Literal, METHOD_DEF, NEGATE, NO, Obj, Op, Param, Parens, RESERVED, Range, Return, SIMPLENUM, STRICT_PROSCRIBED, Scope, Slice, Splat, Switch, TAB, THIS, Throw, Try, UTILITIES, Value, While, YES, addLocationDataFn, compact, del, ends, extend, flatten, fragmentsToText, last, locationDataToString, merge, multident, some, starts, throwSyntaxError, unfoldSoak, utility, _ref, _ref1, _ref2, _ref3,
@@ -39,5 +39,4 @@
     function CodeFragment(parent, code) {
       var _ref2;
-
       this.code = "" + code;
       this.locationData = parent != null ? parent.locationData : void 0;
@@ -46,5 +45,5 @@
 
     CodeFragment.prototype.toString = function() {
-      return "" + this.code + [this.locationData ? ": " + locationDataToString(this.locationData) : void 0];
+      return "" + this.code + (this.locationData ? ": " + locationDataToString(this.locationData) : '');
     };
 
@@ -55,8 +54,6 @@
   fragmentsToText = function(fragments) {
     var fragment;
-
     return ((function() {
       var _i, _len, _results;
-
       _results = [];
       for (_i = 0, _len = fragments.length; _i < _len; _i++) {
@@ -77,5 +74,4 @@
     Base.prototype.compileToFragments = function(o, lvl) {
       var node;
-
       o = extend({}, o);
       if (lvl) {
@@ -93,5 +89,4 @@
     Base.prototype.compileClosure = function(o) {
       var jumpNode;
-
       if (jumpNode = this.jumps()) {
         jumpNode.error('cannot use a pure statement in an expression');
@@ -103,5 +98,4 @@
     Base.prototype.cache = function(o, level, reused) {
       var ref, sub;
-
       if (!this.isComplex()) {
         ref = level ? this.compileToFragments(o, level) : this;
@@ -124,5 +118,4 @@
     Base.prototype.makeReturn = function(res) {
       var me;
-
       me = this.unwrapAll();
       if (res) {
@@ -135,5 +128,4 @@
     Base.prototype.contains = function(pred) {
       var node;
-
       node = void 0;
       this.traverseChildren(false, function(n) {
@@ -148,5 +140,4 @@
     Base.prototype.lastNonComment = function(list) {
       var i;
-
       i = list.length;
       while (i--) {
@@ -160,5 +151,4 @@
     Base.prototype.toString = function(idt, name) {
       var tree;
-
       if (idt == null) {
         idt = '';
@@ -179,5 +169,4 @@
     Base.prototype.eachChild = function(func) {
       var attr, child, _i, _j, _len, _len1, _ref2, _ref3;
-
       if (!this.children) {
         return this;
@@ -201,8 +190,9 @@
     Base.prototype.traverseChildren = function(crossScope, func) {
       return this.eachChild(function(child) {
-        if (func(child) === false) {
-          return false;
-        }
-        return child.traverseChildren(crossScope, func);
+        var recur;
+        recur = func(child);
+        if (recur !== false) {
+          return child.traverseChildren(crossScope, func);
+        }
       });
     };
@@ -214,5 +204,4 @@
     Base.prototype.unwrapAll = function() {
       var node;
-
       node = this;
       while (node !== (node = node.unwrap())) {
@@ -261,5 +250,4 @@
     Base.prototype.joinFragmentArrays = function(fragmentsList, joinStr) {
       var answer, fragments, i, _i, _len;
-
       answer = [];
       for (i = _i = 0, _len = fragmentsList.length; _i < _len; i = ++_i) {
@@ -314,5 +302,4 @@
     Block.prototype.isStatement = function(o) {
       var exp, _i, _len, _ref2;
-
       _ref2 = this.expressions;
       for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
@@ -327,5 +314,4 @@
     Block.prototype.jumps = function(o) {
       var exp, _i, _len, _ref2;
-
       _ref2 = this.expressions;
       for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
@@ -339,5 +325,4 @@
     Block.prototype.makeReturn = function(res) {
       var expr, len;
-
       len = this.expressions.length;
       while (len--) {
@@ -367,5 +352,4 @@
     Block.prototype.compileNode = function(o) {
       var answer, compiledNodes, fragments, index, node, top, _i, _len, _ref2;
-
       this.tab = o.indent;
       top = o.level === LEVEL_TOP;
@@ -411,5 +395,4 @@
     Block.prototype.compileRoot = function(o) {
       var exp, fragments, i, name, prelude, preludeExps, rest, _i, _len, _ref2;
-
       o.indent = o.bare ? '' : TAB;
       o.level = LEVEL_TOP;
@@ -425,5 +408,4 @@
         preludeExps = (function() {
           var _j, _len1, _ref3, _results;
-
           _ref3 = this.expressions;
           _results = [];
@@ -456,5 +438,4 @@
     Block.prototype.compileWithDeclarations = function(o) {
       var assigns, declars, exp, fragments, i, post, rest, scope, spaced, _i, _len, _ref2, _ref3, _ref4;
-
       fragments = [];
       post = [];
@@ -495,5 +476,7 @@
             fragments.push(this.makeCode(scope.assignedVariables().join(",\n" + (this.tab + TAB))));
           }
-          fragments.push(this.makeCode(';\n\n'));
+          fragments.push(this.makeCode(";\n" + (this.spaced ? '\n' : '')));
+        } else if (fragments.length && post.length) {
+          fragments.push(this.makeCode("\n"));
         }
       }
@@ -533,5 +516,4 @@
     Literal.prototype.isStatement = function() {
       var _ref2;
-
       return (_ref2 = this.value) === 'break' || _ref2 === 'continue' || _ref2 === 'debugger';
     };
@@ -554,5 +536,4 @@
     Literal.prototype.compileNode = function(o) {
       var answer, code, _ref2;
-
       code = this.value === 'this' ? ((_ref2 = o.scope.method) != null ? _ref2.bound : void 0) ? o.scope.method.context : this.value : this.value.reserved ? "\"" + this.value + "\"" : this.value;
       answer = this.isStatement() ? "" + this.tab + code + ";" : code;
@@ -646,5 +627,4 @@
     Return.prototype.compileToFragments = function(o, level) {
       var expr, _ref4;
-
       expr = (_ref4 = this.expression) != null ? _ref4.makeReturn() : void 0;
       if (expr && !(expr instanceof Return)) {
@@ -657,7 +637,6 @@
     Return.prototype.compileNode = function(o) {
       var answer;
-
       answer = [];
-      answer.push(this.makeCode(this.tab + ("return" + [this.expression ? " " : void 0])));
+      answer.push(this.makeCode(this.tab + ("return" + (this.expression ? " " : ""))));
       if (this.expression) {
         answer = answer.concat(this.expression.compileToFragments(o, LEVEL_PAREN));
@@ -719,5 +698,4 @@
     Value.prototype.isAtomic = function() {
       var node, _i, _len, _ref4;
-
       _ref4 = this.properties.concat(this.base);
       for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
@@ -763,5 +741,4 @@
     Value.prototype.cacheReference = function(o) {
       var base, bref, name, nref;
-
       name = last(this.properties);
       if (this.properties.length < 2 && !this.base.isComplex() && !(name != null ? name.isComplex() : void 0)) {
@@ -786,5 +763,4 @@
     Value.prototype.compileNode = function(o) {
       var fragments, prop, props, _i, _len;
-
       this.base.front = this.front;
       props = this.properties;
@@ -801,17 +777,14 @@
 
     Value.prototype.unfoldSoak = function(o) {
-      var _ref4,
-        _this = this;
-
-      return (_ref4 = this.unfoldedSoak) != null ? _ref4 : this.unfoldedSoak = (function() {
-        var fst, i, ifn, prop, ref, snd, _i, _len, _ref5, _ref6;
-
+      var _this = this;
+      return this.unfoldedSoak != null ? this.unfoldedSoak : this.unfoldedSoak = (function() {
+        var fst, i, ifn, prop, ref, snd, _i, _len, _ref4, _ref5;
         if (ifn = _this.base.unfoldSoak(o)) {
-          (_ref5 = ifn.body.properties).push.apply(_ref5, _this.properties);
+          (_ref4 = ifn.body.properties).push.apply(_ref4, _this.properties);
           return ifn;
         }
-        _ref6 = _this.properties;
-        for (i = _i = 0, _len = _ref6.length; _i < _len; i = ++_i) {
-          prop = _ref6[i];
+        _ref5 = _this.properties;
+        for (i = _i = 0, _len = _ref5.length; _i < _len; i = ++_i) {
+          prop = _ref5[i];
           if (!prop.soak) {
             continue;
@@ -850,6 +823,5 @@
     Comment.prototype.compileNode = function(o, level) {
       var code;
-
-      code = '/*' + multident(this.comment, this.tab) + ("\n" + this.tab + "*/\n");
+      code = "/*" + (multident(this.comment, this.tab)) + (__indexOf.call(this.comment, '\n') >= 0 ? "\n" + this.tab : '') + "*/\n";
       if ((level || o.level) === LEVEL_TOP) {
         code = o.indent + code;
@@ -877,5 +849,4 @@
     Call.prototype.newInstance = function() {
       var base, _ref4;
-
       base = ((_ref4 = this.variable) != null ? _ref4.base : void 0) || this.variable;
       if (base instanceof Call && !base.isNew) {
@@ -889,5 +860,4 @@
     Call.prototype.superReference = function(o) {
       var accesses, method;
-
       method = o.scope.namedMethod();
       if (method != null ? method.klass : void 0) {
@@ -907,5 +877,4 @@
     Call.prototype.superThis = function(o) {
       var method;
-
       method = o.scope.method;
       return (method && !method.klass && method.context) || "this";
@@ -914,5 +883,4 @@
     Call.prototype.unfoldSoak = function(o) {
       var call, ifn, left, list, rite, _i, _len, _ref4, _ref5;
-
       if (this.soak) {
         if (this.variable) {
@@ -965,5 +933,4 @@
     Call.prototype.compileNode = function(o) {
       var arg, argIndex, compiledArgs, compiledArray, fragments, preface, _i, _len, _ref4, _ref5;
-
       if ((_ref4 = this.variable) != null) {
         _ref4.front = this.front;
@@ -1003,5 +970,4 @@
     Call.prototype.compileSplat = function(o, splatArgs) {
       var answer, base, fun, idt, name, ref;
-
       if (this.isSuper) {
         return [].concat(this.makeCode("" + (this.superReference(o)) + ".apply(" + (this.superThis(o)) + ", "), splatArgs, this.makeCode(")"));
@@ -1067,5 +1033,4 @@
     Access.prototype.compileToFragments = function(o) {
       var name;
-
       name = this.name.compileToFragments(o);
       if (IDENTIFIER.test(fragmentsToText(name))) {
@@ -1119,5 +1084,4 @@
     Range.prototype.compileVariables = function(o) {
       var step, _ref4, _ref5, _ref6, _ref7;
-
       o = merge(o, {
         top: true
@@ -1136,5 +1100,4 @@
     Range.prototype.compileNode = function(o) {
       var cond, condPart, from, gt, idx, idxName, known, lt, namedIndex, stepPart, to, varPart, _ref4, _ref5;
-
       if (!this.fromVar) {
         this.compileVariables(o);
@@ -1168,5 +1131,4 @@
     Range.prototype.compileArray = function(o) {
       var args, body, cond, hasArgs, i, idt, post, pre, range, result, vars, _i, _ref4, _ref5, _results;
-
       if (this.fromNum && this.toNum && Math.abs(this.fromNum - this.toNum) <= 20) {
         range = (function() {
@@ -1220,5 +1182,4 @@
     Slice.prototype.compileNode = function(o) {
       var compiled, compiledText, from, fromCompiled, to, toStr, _ref4;
-
       _ref4 = this.range, to = _ref4.to, from = _ref4.from;
       fromCompiled = from && from.compileToFragments(o, LEVEL_PAREN) || [this.makeCode('0')];
@@ -1249,5 +1210,4 @@
     Obj.prototype.compileNode = function(o) {
       var answer, i, idt, indent, join, lastNoncom, node, prop, props, _i, _j, _len, _len1;
-
       props = this.properties;
       if (!props.length) {
@@ -1270,5 +1230,5 @@
         indent = prop instanceof Comment ? '' : idt;
         if (prop instanceof Assign && prop.variable instanceof Value && prop.variable.hasProperties()) {
-          throw new SyntaxError('Invalid object key');
+          prop.variable.error('Invalid object key');
         }
         if (prop instanceof Value && prop["this"]) {
@@ -1300,5 +1260,4 @@
     Obj.prototype.assigns = function(name) {
       var prop, _i, _len, _ref4;
-
       _ref4 = this.properties;
       for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
@@ -1326,5 +1285,4 @@
     Arr.prototype.compileNode = function(o) {
       var answer, compiledObjs, fragments, index, obj, _i, _len;
-
       if (!this.objects.length) {
         return [this.makeCode('[]')];
@@ -1338,5 +1296,4 @@
       compiledObjs = (function() {
         var _i, _len, _ref4, _results;
-
         _ref4 = this.objects;
         _results = [];
@@ -1354,5 +1311,5 @@
         answer.push.apply(answer, fragments);
       }
-      if ((fragmentsToText(answer)).indexOf('\n') >= 0) {
+      if (fragmentsToText(answer).indexOf('\n') >= 0) {
         answer.unshift(this.makeCode("[\n" + o.indent));
         answer.push(this.makeCode("\n" + this.tab + "]"));
@@ -1366,5 +1323,4 @@
     Arr.prototype.assigns = function(name) {
       var obj, _i, _len, _ref4;
-
       _ref4 = this.objects;
       for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
@@ -1396,5 +1352,4 @@
     Class.prototype.determineName = function() {
       var decl, tail;
-
       if (!this.variable) {
         return null;
@@ -1425,5 +1380,4 @@
     Class.prototype.addBoundFunctions = function(o) {
       var bvar, lhs, _i, _len, _ref4;
-
       _ref4 = this.boundFuncs;
       for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
@@ -1436,9 +1390,7 @@
     Class.prototype.addProperties = function(node, name, o) {
       var assign, base, exprs, func, props;
-
       props = node.base.properties.slice(0);
       exprs = (function() {
         var _results;
-
         _results = [];
         while (assign = props.shift()) {
@@ -1484,8 +1436,6 @@
     Class.prototype.walkBody = function(name, o) {
       var _this = this;
-
       return this.traverseChildren(false, function(child) {
         var cont, exps, i, node, _i, _len, _ref4;
-
         cont = true;
         if (child instanceof Class) {
@@ -1509,5 +1459,4 @@
     Class.prototype.hoistDirectivePrologue = function() {
       var expressions, index, node;
-
       index = 0;
       expressions = this.body.expressions;
@@ -1520,5 +1469,4 @@
     Class.prototype.ensureConstructor = function(name, o) {
       var missing, ref, superCall;
-
       missing = !this.ctor;
       this.ctor || (this.ctor = new Code);
@@ -1550,5 +1498,4 @@
     Class.prototype.compileNode = function(o) {
       var call, decl, klass, lname, name, params, _ref4;
-
       decl = this.determineName();
       name = decl || '_Class';
@@ -1591,5 +1538,4 @@
     function Assign(variable, value, context, options) {
       var forbidden, name, _ref4;
-
       this.variable = variable;
       this.value = value;
@@ -1619,5 +1565,4 @@
     Assign.prototype.compileNode = function(o) {
       var answer, compiledName, isValue, match, name, val, varBase, _ref4, _ref5, _ref6, _ref7;
-
       if (isValue = this.variable instanceof Value) {
         if (this.variable.isArray() || this.variable.isObject()) {
@@ -1666,5 +1611,4 @@
     Assign.prototype.compilePatternMatch = function(o) {
       var acc, assigns, code, fragments, i, idx, isObject, ivar, name, obj, objects, olen, ref, rest, splat, top, val, value, vvar, vvarText, _i, _len, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9;
-
       top = o.level === LEVEL_TOP;
       value = this.value;
@@ -1764,5 +1708,4 @@
     Assign.prototype.compileConditional = function(o) {
       var left, right, _ref4;
-
       _ref4 = this.variable.cacheReference(o), left = _ref4[0], right = _ref4[1];
       if (!left.properties.length && left.base instanceof Literal && left.base.value !== "this" && !o.scope.check(left.base.value)) {
@@ -1777,5 +1720,4 @@
     Assign.prototype.compileSplice = function(o) {
       var answer, exclusive, from, fromDecl, fromRef, name, to, valDef, valRef, _ref4, _ref5, _ref6;
-
       _ref4 = this.variable.properties.pop().range, from = _ref4.from, to = _ref4.to, exclusive = _ref4.exclusive;
       name = this.variable.compile(o);
@@ -1835,5 +1777,4 @@
     Code.prototype.compileNode = function(o) {
       var answer, code, exprs, i, idt, lit, p, param, params, ref, splats, uniqs, val, wasEmpty, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref4, _ref5, _ref6, _ref7, _ref8;
-
       o.scope = new Scope(o.scope, this.body, this);
       o.scope.shared = del(o, 'sharedScope');
@@ -1866,5 +1807,4 @@
         splats = new Assign(new Value(new Arr((function() {
           var _k, _len2, _ref6, _results;
-
           _ref6 = this.params;
           _results = [];
@@ -1960,5 +1900,4 @@
     Code.prototype.eachParamName = function(iterator) {
       var param, _i, _len, _ref4, _results;
-
       _ref4 = this.params;
       _results = [];
@@ -1985,5 +1924,4 @@
     function Param(name, value, splat) {
       var _ref4;
-
       this.name = name;
       this.value = value;
@@ -2002,5 +1940,4 @@
     Param.prototype.asReference = function(o) {
       var node;
-
       if (this.reference) {
         return this.reference;
@@ -2028,5 +1965,4 @@
     Param.prototype.eachName = function(iterator, name) {
       var atParam, node, obj, _i, _len, _ref4;
-
       if (name == null) {
         name = this.name;
@@ -2034,5 +1970,4 @@
       atParam = function(obj) {
         var node;
-
         node = obj.properties[0].name;
         if (!node.value.reserved) {
@@ -2097,5 +2032,4 @@
     Splat.compileSplattedArray = function(o, list, apply) {
       var args, base, compiledNode, concatPart, fragments, i, index, node, _i, _len;
-
       index = -1;
       while ((node = list[++index]) && !(node instanceof Splat)) {
@@ -2126,5 +2060,4 @@
       base = (function() {
         var _j, _len1, _ref4, _results;
-
         _ref4 = list.slice(0, index);
         _results = [];
@@ -2174,5 +2107,4 @@
     While.prototype.jumps = function() {
       var expressions, node, _i, _len;
-
       expressions = this.body.expressions;
       if (!expressions.length) {
@@ -2192,10 +2124,9 @@
     While.prototype.compileNode = function(o) {
       var answer, body, rvar, set;
-
       o.indent += TAB;
       set = '';
       body = this.body;
       if (body.isEmpty()) {
-        body = '';
+        body = this.makeCode('');
       } else {
         if (this.returns) {
@@ -2273,5 +2204,4 @@
     Op.prototype.isComplex = function() {
       var _ref4;
-
       return !(this.isUnary() && ((_ref4 = this.operator) === '+' || _ref4 === '-')) || this.first.isComplex();
     };
@@ -2279,5 +2209,4 @@
     Op.prototype.isChainable = function() {
       var _ref4;
-
       return (_ref4 = this.operator) === '<' || _ref4 === '>' || _ref4 === '>=' || _ref4 === '<=' || _ref4 === '===' || _ref4 === '!==';
     };
@@ -2285,5 +2214,4 @@
     Op.prototype.invert = function() {
       var allInvertable, curr, fst, op, _ref4;
-
       if (this.isChainable() && this.first.isChainable()) {
         allInvertable = true;
@@ -2320,5 +2248,4 @@
     Op.prototype.unfoldSoak = function(o) {
       var _ref4;
-
       return ((_ref4 = this.operator) === '++' || _ref4 === '--' || _ref4 === 'delete') && unfoldSoak(o, this, 'first');
     };
@@ -2326,5 +2253,4 @@
     Op.prototype.generateDo = function(exp) {
       var call, func, param, passedParams, ref, _i, _len, _ref4;
-
       passedParams = [];
       func = exp instanceof Assign && (ref = exp.value.unwrap()) instanceof Code ? ref : exp;
@@ -2346,5 +2272,4 @@
     Op.prototype.compileNode = function(o) {
       var answer, isChain, _ref4, _ref5;
-
       isChain = this.isChainable() && this.first.isChainable();
       if (!isChain) {
@@ -2376,5 +2301,4 @@
     Op.prototype.compileChain = function(o) {
       var fragments, fst, shared, _ref4;
-
       _ref4 = this.first.second.cache(o), this.first.second = _ref4[0], shared = _ref4[1];
       fst = this.first.compileToFragments(o, LEVEL_OP);
@@ -2385,6 +2309,5 @@
     Op.prototype.compileExistence = function(o) {
       var fst, ref;
-
-      if (this.first.isComplex()) {
+      if (!o.isExistentialEquals && this.first.isComplex()) {
         ref = new Literal(o.scope.freeVariable('ref'));
         fst = new Parens(new Assign(ref, this.first));
@@ -2400,5 +2323,4 @@
     Op.prototype.compileUnary = function(o) {
       var op, parts, plusMinus;
-
       parts = [];
       op = this.operator;
@@ -2447,5 +2369,4 @@
     In.prototype.compileNode = function(o) {
       var hasSplat, obj, _i, _len, _ref4;
-
       if (this.array instanceof Value && this.array.isArray()) {
         _ref4 = this.array.base.objects;
@@ -2467,5 +2388,4 @@
     In.prototype.compileOrTest = function(o) {
       var cmp, cnj, i, item, ref, sub, tests, _i, _len, _ref4, _ref5, _ref6;
-
       if (this.array.base.objects.length === 0) {
         return [this.makeCode("" + (!!this.negated))];
@@ -2491,8 +2411,7 @@
     In.prototype.compileLoopTest = function(o) {
       var fragments, ref, sub, _ref4;
-
       _ref4 = this.object.cache(o, LEVEL_LIST), sub = _ref4[0], ref = _ref4[1];
       fragments = [].concat(this.makeCode(utility('indexOf') + ".call("), this.array.compileToFragments(o, LEVEL_LIST), this.makeCode(", "), ref, this.makeCode(") " + (this.negated ? '< 0' : '>= 0')));
-      if ((fragmentsToText(sub)) === (fragmentsToText(ref))) {
+      if (fragmentsToText(sub) === fragmentsToText(ref)) {
         return fragments;
       }
@@ -2529,5 +2448,4 @@
     Try.prototype.jumps = function(o) {
       var _ref4;
-
       return this.attempt.jumps(o) || ((_ref4 = this.recovery) != null ? _ref4.jumps(o) : void 0);
     };
@@ -2544,9 +2462,8 @@
 
     Try.prototype.compileNode = function(o) {
-      var catchPart, ensurePart, placeholder, tryPart, _ref4;
-
+      var catchPart, ensurePart, placeholder, tryPart;
       o.indent += TAB;
       tryPart = this.attempt.compileToFragments(o, LEVEL_TOP);
-      catchPart = this.recovery ? (placeholder = new Literal('_error'), this.recovery.unshift(new Assign(this.errorVariable, placeholder)), this.errorVariable = placeholder, (_ref4 = this.errorVariable.value, __indexOf.call(STRICT_PROSCRIBED, _ref4) >= 0) ? this.errorVariable.error("catch variable may not be \"" + this.errorVariable.value + "\"") : void 0, [].concat(this.makeCode(" catch ("), this.errorVariable.compileToFragments(o), this.makeCode(") {\n"), this.recovery.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab + "}"))) : !(this.ensure || this.recovery) ? [this.makeCode(' catch (_error) {}')] : [];
+      catchPart = this.recovery ? (placeholder = new Literal('_error'), this.errorVariable ? this.recovery.unshift(new Assign(this.errorVariable, placeholder)) : void 0, [].concat(this.makeCode(" catch ("), placeholder.compileToFragments(o), this.makeCode(") {\n"), this.recovery.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab + "}"))) : !(this.ensure || this.recovery) ? [this.makeCode(' catch (_error) {}')] : [];
       ensurePart = this.ensure ? [].concat(this.makeCode(" finally {\n"), this.ensure.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab + "}")) : [];
       return [].concat(this.makeCode("" + this.tab + "try {\n"), tryPart, this.makeCode("\n" + this.tab + "}"), catchPart, ensurePart);
@@ -2593,5 +2510,4 @@
     Existence.prototype.compileNode = function(o) {
       var cmp, cnj, code, _ref4;
-
       this.expression.front = this.front;
       code = this.expression.compile(o, LEVEL_OP);
@@ -2628,5 +2544,4 @@
     Parens.prototype.compileNode = function(o) {
       var bare, expr, fragments;
-
       expr = this.body.unwrap();
       if (expr instanceof Value && expr.isAtomic()) {
@@ -2652,5 +2567,4 @@
     function For(body, source) {
       var _ref4;
-
       this.source = source.source, this.guard = source.guard, this.step = source.step, this.name = source.name, this.index = source.index;
       this.body = Block.wrap([body]);
@@ -2671,4 +2585,7 @@
         this.name.error('cannot pattern match over range loops');
       }
+      if (this.own && !this.object) {
+        this.index.error('cannot use own with for-in');
+      }
       this.returns = false;
     }
@@ -2678,5 +2595,4 @@
     For.prototype.compileNode = function(o) {
       var body, bodyFragments, compare, compareDown, declare, declareDown, defPart, defPartFragments, down, forPartFragments, guardPart, idt1, increment, index, ivar, kvar, kvarAssign, lastJumps, lvar, name, namePart, ref, resultPart, returnResult, rvar, scope, source, step, stepNum, stepVar, svar, varPart, _ref4, _ref5;
-
       body = Block.wrap([this.body]);
       lastJumps = (_ref4 = last(body.expressions)) != null ? _ref4.jumps() : void 0;
@@ -2792,5 +2708,4 @@
     For.prototype.pluckDirectCall = function(o, body) {
       var base, defs, expr, fn, idx, ref, val, _i, _len, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9;
-
       defs = [];
       _ref4 = body.expressions;
@@ -2836,5 +2751,4 @@
     Switch.prototype.jumps = function(o) {
       var block, conds, _i, _len, _ref4, _ref5, _ref6;
-
       if (o == null) {
         o = {
@@ -2854,5 +2768,4 @@
     Switch.prototype.makeReturn = function(res) {
       var pair, _i, _len, _ref4, _ref5;
-
       _ref4 = this.cases;
       for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
@@ -2871,5 +2784,4 @@
     Switch.prototype.compileNode = function(o) {
       var block, body, cond, conditions, expr, fragments, i, idt1, idt2, _i, _j, _len, _len1, _ref4, _ref5, _ref6;
-
       idt1 = o.indent + TAB;
       idt2 = o.indent = idt1 + TAB;
@@ -2927,5 +2839,4 @@
     If.prototype.bodyNode = function() {
       var _ref4;
-
       return (_ref4 = this.body) != null ? _ref4.unwrap() : void 0;
     };
@@ -2933,5 +2844,4 @@
     If.prototype.elseBodyNode = function() {
       var _ref4;
-
       return (_ref4 = this.elseBody) != null ? _ref4.unwrap() : void 0;
     };
@@ -2949,5 +2859,4 @@
     If.prototype.isStatement = function(o) {
       var _ref4;
-
       return (o != null ? o.level : void 0) === LEVEL_TOP || this.bodyNode().isStatement(o) || ((_ref4 = this.elseBodyNode()) != null ? _ref4.isStatement(o) : void 0);
     };
@@ -2955,5 +2864,4 @@
     If.prototype.jumps = function(o) {
       var _ref4;
-
       return this.body.jumps(o) || ((_ref4 = this.elseBody) != null ? _ref4.jumps(o) : void 0);
     };
@@ -2986,5 +2894,4 @@
     If.prototype.compileStatement = function(o) {
       var answer, body, child, cond, exeq, ifPart, indent;
-
       child = del(o, 'chainChild');
       exeq = del(o, 'isExistentialEquals');
@@ -3020,5 +2927,4 @@
     If.prototype.compileExpression = function(o) {
       var alt, body, cond, fragments;
-
       cond = this.condition.compileToFragments(o, LEVEL_COND);
       body = this.bodyNode().compileToFragments(o, LEVEL_LIST);
@@ -3043,5 +2949,4 @@
     wrap: function(expressions, statement, noReturn) {
       var args, argumentsNode, call, func, meth;
-
       if (expressions.jumps()) {
         return expressions;
@@ -3079,5 +2984,4 @@
   unfoldSoak = function(o, parent, name) {
     var ifn;
-
     if (!(ifn = parent[name].unfoldSoak(o))) {
       return;
@@ -3132,5 +3036,4 @@
   utility = function(name) {
     var ref;
-
     ref = "__" + name;
     Scope.root.assign(ref, UTILITIES[name]());
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/optparse.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/optparse.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/optparse.js	(revision 516)
@@ -1,5 +1,7 @@
-// Generated by CoffeeScript 1.6.2
+// Generated by CoffeeScript 1.6.3
 (function() {
-  var LONG_FLAG, MULTI_FLAG, OPTIONAL, OptionParser, SHORT_FLAG, buildRule, buildRules, normalizeArguments;
+  var LONG_FLAG, MULTI_FLAG, OPTIONAL, OptionParser, SHORT_FLAG, buildRule, buildRules, normalizeArguments, repeat;
+
+  repeat = require('./helpers').repeat;
 
   exports.OptionParser = OptionParser = (function() {
@@ -11,5 +13,4 @@
     OptionParser.prototype.parse = function(args) {
       var arg, i, isOption, matchedRule, options, originalArgs, pos, rule, seenNonOptionArg, skippingArgument, value, _i, _j, _len, _len1, _ref;
-
       options = {
         "arguments": []
@@ -60,5 +61,4 @@
     OptionParser.prototype.help = function() {
       var letPart, lines, rule, spaces, _i, _len, _ref;
-
       lines = [];
       if (this.banner) {
@@ -69,5 +69,5 @@
         rule = _ref[_i];
         spaces = 15 - rule.longFlag.length;
-        spaces = spaces > 0 ? Array(spaces + 1).join(' ') : '';
+        spaces = spaces > 0 ? repeat(' ', spaces) : '';
         letPart = rule.shortFlag ? rule.shortFlag + ', ' : '    ';
         lines.push('  ' + letPart + rule.longFlag + spaces + rule.description);
@@ -90,5 +90,4 @@
   buildRules = function(rules) {
     var tuple, _i, _len, _results;
-
     _results = [];
     for (_i = 0, _len = rules.length; _i < _len; _i++) {
@@ -104,5 +103,4 @@
   buildRule = function(shortFlag, longFlag, description, options) {
     var match;
-
     if (options == null) {
       options = {};
@@ -122,5 +120,4 @@
   normalizeArguments = function(args) {
     var arg, l, match, result, _i, _j, _len, _len1, _ref;
-
     args = args.slice(0);
     result = [];
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/parser.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/parser.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/parser.js	(revision 516)
@@ -5,5 +5,5 @@
 symbols_: {"error":2,"Root":3,"Body":4,"Block":5,"TERMINATOR":6,"Line":7,"Expression":8,"Statement":9,"Return":10,"Comment":11,"STATEMENT":12,"Value":13,"Invocation":14,"Code":15,"Operation":16,"Assign":17,"If":18,"Try":19,"While":20,"For":21,"Switch":22,"Class":23,"Throw":24,"INDENT":25,"OUTDENT":26,"Identifier":27,"IDENTIFIER":28,"AlphaNumeric":29,"NUMBER":30,"STRING":31,"Literal":32,"JS":33,"REGEX":34,"DEBUGGER":35,"UNDEFINED":36,"NULL":37,"BOOL":38,"Assignable":39,"=":40,"AssignObj":41,"ObjAssignable":42,":":43,"ThisProperty":44,"RETURN":45,"HERECOMMENT":46,"PARAM_START":47,"ParamList":48,"PARAM_END":49,"FuncGlyph":50,"->":51,"=>":52,"OptComma":53,",":54,"Param":55,"ParamVar":56,"...":57,"Array":58,"Object":59,"Splat":60,"SimpleAssignable":61,"Accessor":62,"Parenthetical":63,"Range":64,"This":65,".":66,"?.":67,"::":68,"?::":69,"Index":70,"INDEX_START":71,"IndexValue":72,"INDEX_END":73,"INDEX_SOAK":74,"Slice":75,"{":76,"AssignList":77,"}":78,"CLASS":79,"EXTENDS":80,"OptFuncExist":81,"Arguments":82,"SUPER":83,"FUNC_EXIST":84,"CALL_START":85,"CALL_END":86,"ArgList":87,"THIS":88,"@":89,"[":90,"]":91,"RangeDots":92,"..":93,"Arg":94,"SimpleArgs":95,"TRY":96,"Catch":97,"FINALLY":98,"CATCH":99,"THROW":100,"(":101,")":102,"WhileSource":103,"WHILE":104,"WHEN":105,"UNTIL":106,"Loop":107,"LOOP":108,"ForBody":109,"FOR":110,"ForStart":111,"ForSource":112,"ForVariables":113,"OWN":114,"ForValue":115,"FORIN":116,"FOROF":117,"BY":118,"SWITCH":119,"Whens":120,"ELSE":121,"When":122,"LEADING_WHEN":123,"IfBlock":124,"IF":125,"POST_IF":126,"UNARY":127,"-":128,"+":129,"--":130,"++":131,"?":132,"MATH":133,"SHIFT":134,"COMPARE":135,"LOGIC":136,"RELATION":137,"COMPOUND_ASSIGN":138,"$accept":0,"$end":1},
 terminals_: {2:"error",6:"TERMINATOR",12:"STATEMENT",25:"INDENT",26:"OUTDENT",28:"IDENTIFIER",30:"NUMBER",31:"STRING",33:"JS",34:"REGEX",35:"DEBUGGER",36:"UNDEFINED",37:"NULL",38:"BOOL",40:"=",43:":",45:"RETURN",46:"HERECOMMENT",47:"PARAM_START",49:"PARAM_END",51:"->",52:"=>",54:",",57:"...",66:".",67:"?.",68:"::",69:"?::",71:"INDEX_START",73:"INDEX_END",74:"INDEX_SOAK",76:"{",78:"}",79:"CLASS",80:"EXTENDS",83:"SUPER",84:"FUNC_EXIST",85:"CALL_START",86:"CALL_END",88:"THIS",89:"@",90:"[",91:"]",93:"..",96:"TRY",98:"FINALLY",99:"CATCH",100:"THROW",101:"(",102:")",104:"WHILE",105:"WHEN",106:"UNTIL",108:"LOOP",110:"FOR",114:"OWN",116:"FORIN",117:"FOROF",118:"BY",119:"SWITCH",121:"ELSE",123:"LEADING_WHEN",125:"IF",126:"POST_IF",127:"UNARY",128:"-",129:"+",130:"--",131:"++",132:"?",133:"MATH",134:"SHIFT",135:"COMPARE",136:"LOGIC",137:"RELATION",138:"COMPOUND_ASSIGN"},
-productions_: [0,[3,0],[3,1],[3,2],[4,1],[4,3],[4,2],[7,1],[7,1],[9,1],[9,1],[9,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[5,2],[5,3],[27,1],[29,1],[29,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[17,3],[17,4],[17,5],[41,1],[41,3],[41,5],[41,1],[42,1],[42,1],[42,1],[10,2],[10,1],[11,1],[15,5],[15,2],[50,1],[50,1],[53,0],[53,1],[48,0],[48,1],[48,3],[48,4],[48,6],[55,1],[55,2],[55,3],[56,1],[56,1],[56,1],[56,1],[60,2],[61,1],[61,2],[61,2],[61,1],[39,1],[39,1],[39,1],[13,1],[13,1],[13,1],[13,1],[13,1],[62,2],[62,2],[62,2],[62,2],[62,1],[62,1],[70,3],[70,2],[72,1],[72,1],[59,4],[77,0],[77,1],[77,3],[77,4],[77,6],[23,1],[23,2],[23,3],[23,4],[23,2],[23,3],[23,4],[23,5],[14,3],[14,3],[14,1],[14,2],[81,0],[81,1],[82,2],[82,4],[65,1],[65,1],[44,2],[58,2],[58,4],[92,1],[92,1],[64,5],[75,3],[75,2],[75,2],[75,1],[87,1],[87,3],[87,4],[87,4],[87,6],[94,1],[94,1],[95,1],[95,3],[19,2],[19,3],[19,4],[19,5],[97,3],[97,3],[24,2],[63,3],[63,5],[103,2],[103,4],[103,2],[103,4],[20,2],[20,2],[20,2],[20,1],[107,2],[107,2],[21,2],[21,2],[21,2],[109,2],[109,2],[111,2],[111,3],[115,1],[115,1],[115,1],[115,1],[113,1],[113,3],[112,2],[112,2],[112,4],[112,4],[112,4],[112,6],[112,6],[22,5],[22,7],[22,4],[22,6],[120,1],[120,2],[122,3],[122,4],[124,3],[124,5],[18,1],[18,3],[18,3],[18,3],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,5],[16,4],[16,3]],
+productions_: [0,[3,0],[3,1],[3,2],[4,1],[4,3],[4,2],[7,1],[7,1],[9,1],[9,1],[9,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[5,2],[5,3],[27,1],[29,1],[29,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[17,3],[17,4],[17,5],[41,1],[41,3],[41,5],[41,1],[42,1],[42,1],[42,1],[10,2],[10,1],[11,1],[15,5],[15,2],[50,1],[50,1],[53,0],[53,1],[48,0],[48,1],[48,3],[48,4],[48,6],[55,1],[55,2],[55,3],[56,1],[56,1],[56,1],[56,1],[60,2],[61,1],[61,2],[61,2],[61,1],[39,1],[39,1],[39,1],[13,1],[13,1],[13,1],[13,1],[13,1],[62,2],[62,2],[62,2],[62,2],[62,1],[62,1],[70,3],[70,2],[72,1],[72,1],[59,4],[77,0],[77,1],[77,3],[77,4],[77,6],[23,1],[23,2],[23,3],[23,4],[23,2],[23,3],[23,4],[23,5],[14,3],[14,3],[14,1],[14,2],[81,0],[81,1],[82,2],[82,4],[65,1],[65,1],[44,2],[58,2],[58,4],[92,1],[92,1],[64,5],[75,3],[75,2],[75,2],[75,1],[87,1],[87,3],[87,4],[87,4],[87,6],[94,1],[94,1],[95,1],[95,3],[19,2],[19,3],[19,4],[19,5],[97,3],[97,3],[97,2],[24,2],[63,3],[63,5],[103,2],[103,4],[103,2],[103,4],[20,2],[20,2],[20,2],[20,1],[107,2],[107,2],[21,2],[21,2],[21,2],[109,2],[109,2],[111,2],[111,3],[115,1],[115,1],[115,1],[115,1],[113,1],[113,3],[112,2],[112,2],[112,4],[112,4],[112,4],[112,6],[112,6],[22,5],[22,7],[22,4],[22,6],[120,1],[120,2],[122,3],[122,4],[124,3],[124,5],[18,1],[18,3],[18,3],[18,3],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,5],[16,4],[16,3]],
 performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {
 
@@ -288,48 +288,50 @@
 case 138:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Value($$[$0-1])), $$[$0]]);
 break;
-case 139:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Throw($$[$0]));
-break;
-case 140:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Parens($$[$0-1]));
-break;
-case 141:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Parens($$[$0-2]));
-break;
-case 142:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0]));
-break;
-case 143:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], {
+case 139:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([null, $$[$0]]);
+break;
+case 140:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Throw($$[$0]));
+break;
+case 141:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Parens($$[$0-1]));
+break;
+case 142:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Parens($$[$0-2]));
+break;
+case 143:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0]));
+break;
+case 144:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], {
           guard: $$[$0]
         }));
 break;
-case 144:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0], {
+case 145:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0], {
           invert: true
         }));
 break;
-case 145:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], {
+case 146:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], {
           invert: true,
           guard: $$[$0]
         }));
 break;
-case 146:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].addBody($$[$0]));
-break;
-case 147:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0].addBody(yy.addLocationDataFn(_$[$0-1])(yy.Block.wrap([$$[$0-1]]))));
+case 147:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].addBody($$[$0]));
 break;
 case 148:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0].addBody(yy.addLocationDataFn(_$[$0-1])(yy.Block.wrap([$$[$0-1]]))));
 break;
-case 149:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])($$[$0]);
-break;
-case 150:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('true'))).addBody($$[$0]));
-break;
-case 151:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('true'))).addBody(yy.addLocationDataFn(_$[$0])(yy.Block.wrap([$$[$0]]))));
-break;
-case 152:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0-1], $$[$0]));
+case 149:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0].addBody(yy.addLocationDataFn(_$[$0-1])(yy.Block.wrap([$$[$0-1]]))));
+break;
+case 150:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])($$[$0]);
+break;
+case 151:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('true'))).addBody($$[$0]));
+break;
+case 152:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('true'))).addBody(yy.addLocationDataFn(_$[$0])(yy.Block.wrap([$$[$0]]))));
 break;
 case 153:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0-1], $$[$0]));
 break;
-case 154:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0], $$[$0-1]));
-break;
-case 155:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({
+case 154:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0-1], $$[$0]));
+break;
+case 155:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0], $$[$0-1]));
+break;
+case 156:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({
           source: yy.addLocationDataFn(_$[$0])(new yy.Value($$[$0]))
         });
 break;
-case 156:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])((function () {
+case 157:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])((function () {
         $$[$0].own = $$[$0-1].own;
         $$[$0].name = $$[$0-1][0];
@@ -338,38 +340,38 @@
       }()));
 break;
-case 157:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0]);
-break;
-case 158:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () {
+case 158:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0]);
+break;
+case 159:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () {
         $$[$0].own = true;
         return $$[$0];
       }()));
 break;
-case 159:this.$ = $$[$0];
-break;
 case 160:this.$ = $$[$0];
 break;
-case 161:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
+case 161:this.$ = $$[$0];
 break;
 case 162:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
 break;
-case 163:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);
-break;
-case 164:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([$$[$0-2], $$[$0]]);
-break;
-case 165:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({
+case 163:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
+break;
+case 164:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);
+break;
+case 165:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([$$[$0-2], $$[$0]]);
+break;
+case 166:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({
           source: $$[$0]
         });
 break;
-case 166:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({
+case 167:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({
           source: $$[$0],
           object: true
         });
 break;
-case 167:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({
+case 168:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({
           source: $$[$0-2],
           guard: $$[$0]
         });
 break;
-case 168:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({
+case 169:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({
           source: $$[$0-2],
           guard: $$[$0],
@@ -377,10 +379,10 @@
         });
 break;
-case 169:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({
+case 170:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({
           source: $$[$0-2],
           step: $$[$0]
         });
 break;
-case 170:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({
+case 171:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({
           source: $$[$0-4],
           guard: $$[$0-2],
@@ -388,5 +390,5 @@
         });
 break;
-case 171:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({
+case 172:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({
           source: $$[$0-4],
           step: $$[$0-2],
@@ -394,36 +396,31 @@
         });
 break;
-case 172:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Switch($$[$0-3], $$[$0-1]));
-break;
-case 173:this.$ = yy.addLocationDataFn(_$[$0-6], _$[$0])(new yy.Switch($$[$0-5], $$[$0-3], $$[$0-1]));
-break;
-case 174:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Switch(null, $$[$0-1]));
-break;
-case 175:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])(new yy.Switch(null, $$[$0-3], $$[$0-1]));
-break;
-case 176:this.$ = $$[$0];
-break;
-case 177:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].concat($$[$0]));
-break;
-case 178:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([[$$[$0-1], $$[$0]]]);
-break;
-case 179:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])([[$$[$0-2], $$[$0-1]]]);
-break;
-case 180:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0-1], $$[$0], {
+case 173:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Switch($$[$0-3], $$[$0-1]));
+break;
+case 174:this.$ = yy.addLocationDataFn(_$[$0-6], _$[$0])(new yy.Switch($$[$0-5], $$[$0-3], $$[$0-1]));
+break;
+case 175:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Switch(null, $$[$0-1]));
+break;
+case 176:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])(new yy.Switch(null, $$[$0-3], $$[$0-1]));
+break;
+case 177:this.$ = $$[$0];
+break;
+case 178:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].concat($$[$0]));
+break;
+case 179:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([[$$[$0-1], $$[$0]]]);
+break;
+case 180:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])([[$$[$0-2], $$[$0-1]]]);
+break;
+case 181:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0-1], $$[$0], {
           type: $$[$0-2]
         }));
 break;
-case 181:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])($$[$0-4].addElse(new yy.If($$[$0-1], $$[$0], {
+case 182:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])($$[$0-4].addElse(new yy.If($$[$0-1], $$[$0], {
           type: $$[$0-2]
         })));
 break;
-case 182:this.$ = $$[$0];
-break;
-case 183:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].addElse($$[$0]));
-break;
-case 184:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0], yy.addLocationDataFn(_$[$0-2])(yy.Block.wrap([$$[$0-2]])), {
-          type: $$[$0-1],
-          statement: true
-        }));
+case 183:this.$ = $$[$0];
+break;
+case 184:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].addElse($$[$0]));
 break;
 case 185:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0], yy.addLocationDataFn(_$[$0-2])(yy.Block.wrap([$$[$0-2]])), {
@@ -432,25 +429,28 @@
         }));
 break;
-case 186:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op($$[$0-1], $$[$0]));
-break;
-case 187:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('-', $$[$0]));
-break;
-case 188:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('+', $$[$0]));
-break;
-case 189:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('--', $$[$0]));
-break;
-case 190:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('++', $$[$0]));
-break;
-case 191:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('--', $$[$0-1], null, true));
-break;
-case 192:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('++', $$[$0-1], null, true));
-break;
-case 193:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Existence($$[$0-1]));
-break;
-case 194:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op('+', $$[$0-2], $$[$0]));
-break;
-case 195:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op('-', $$[$0-2], $$[$0]));
-break;
-case 196:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));
+case 186:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0], yy.addLocationDataFn(_$[$0-2])(yy.Block.wrap([$$[$0-2]])), {
+          type: $$[$0-1],
+          statement: true
+        }));
+break;
+case 187:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op($$[$0-1], $$[$0]));
+break;
+case 188:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('-', $$[$0]));
+break;
+case 189:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('+', $$[$0]));
+break;
+case 190:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('--', $$[$0]));
+break;
+case 191:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('++', $$[$0]));
+break;
+case 192:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('--', $$[$0-1], null, true));
+break;
+case 193:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('++', $$[$0-1], null, true));
+break;
+case 194:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Existence($$[$0-1]));
+break;
+case 195:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op('+', $$[$0-2], $$[$0]));
+break;
+case 196:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op('-', $$[$0-2], $$[$0]));
 break;
 case 197:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));
@@ -460,5 +460,7 @@
 case 199:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));
 break;
-case 200:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () {
+case 200:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));
+break;
+case 201:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () {
         if ($$[$0-1].charAt(0) === '!') {
           return new yy.Op($$[$0-1].slice(1), $$[$0-2], $$[$0]).invert();
@@ -468,15 +470,15 @@
       }()));
 break;
-case 201:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign($$[$0-2], $$[$0], $$[$0-1]));
-break;
-case 202:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign($$[$0-4], $$[$0-1], $$[$0-3]));
-break;
-case 203:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Assign($$[$0-3], $$[$0], $$[$0-2]));
-break;
-case 204:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Extends($$[$0-2], $$[$0]));
+case 202:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign($$[$0-2], $$[$0], $$[$0-1]));
+break;
+case 203:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign($$[$0-4], $$[$0-1], $$[$0-3]));
+break;
+case 204:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Assign($$[$0-3], $$[$0], $$[$0-2]));
+break;
+case 205:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Extends($$[$0-2], $$[$0]));
 break;
 }
 },
-table: [{1:[2,1],3:1,4:2,5:3,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[3]},{1:[2,2],6:[1,74]},{6:[1,75]},{1:[2,4],6:[2,4],26:[2,4],102:[2,4]},{4:77,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[1,76],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,7],6:[2,7],26:[2,7],102:[2,7],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,8],6:[2,8],26:[2,8],102:[2,8],103:90,104:[1,65],106:[1,66],109:91,110:[1,68],111:69,126:[1,89]},{1:[2,12],6:[2,12],25:[2,12],26:[2,12],49:[2,12],54:[2,12],57:[2,12],62:93,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],73:[2,12],74:[1,101],78:[2,12],81:92,84:[1,94],85:[2,108],86:[2,12],91:[2,12],93:[2,12],102:[2,12],104:[2,12],105:[2,12],106:[2,12],110:[2,12],118:[2,12],126:[2,12],128:[2,12],129:[2,12],132:[2,12],133:[2,12],134:[2,12],135:[2,12],136:[2,12],137:[2,12]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],49:[2,13],54:[2,13],57:[2,13],62:103,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],73:[2,13],74:[1,101],78:[2,13],81:102,84:[1,94],85:[2,108],86:[2,13],91:[2,13],93:[2,13],102:[2,13],104:[2,13],105:[2,13],106:[2,13],110:[2,13],118:[2,13],126:[2,13],128:[2,13],129:[2,13],132:[2,13],133:[2,13],134:[2,13],135:[2,13],136:[2,13],137:[2,13]},{1:[2,14],6:[2,14],25:[2,14],26:[2,14],49:[2,14],54:[2,14],57:[2,14],73:[2,14],78:[2,14],86:[2,14],91:[2,14],93:[2,14],102:[2,14],104:[2,14],105:[2,14],106:[2,14],110:[2,14],118:[2,14],126:[2,14],128:[2,14],129:[2,14],132:[2,14],133:[2,14],134:[2,14],135:[2,14],136:[2,14],137:[2,14]},{1:[2,15],6:[2,15],25:[2,15],26:[2,15],49:[2,15],54:[2,15],57:[2,15],73:[2,15],78:[2,15],86:[2,15],91:[2,15],93:[2,15],102:[2,15],104:[2,15],105:[2,15],106:[2,15],110:[2,15],118:[2,15],126:[2,15],128:[2,15],129:[2,15],132:[2,15],133:[2,15],134:[2,15],135:[2,15],136:[2,15],137:[2,15]},{1:[2,16],6:[2,16],25:[2,16],26:[2,16],49:[2,16],54:[2,16],57:[2,16],73:[2,16],78:[2,16],86:[2,16],91:[2,16],93:[2,16],102:[2,16],104:[2,16],105:[2,16],106:[2,16],110:[2,16],118:[2,16],126:[2,16],128:[2,16],129:[2,16],132:[2,16],133:[2,16],134:[2,16],135:[2,16],136:[2,16],137:[2,16]},{1:[2,17],6:[2,17],25:[2,17],26:[2,17],49:[2,17],54:[2,17],57:[2,17],73:[2,17],78:[2,17],86:[2,17],91:[2,17],93:[2,17],102:[2,17],104:[2,17],105:[2,17],106:[2,17],110:[2,17],118:[2,17],126:[2,17],128:[2,17],129:[2,17],132:[2,17],133:[2,17],134:[2,17],135:[2,17],136:[2,17],137:[2,17]},{1:[2,18],6:[2,18],25:[2,18],26:[2,18],49:[2,18],54:[2,18],57:[2,18],73:[2,18],78:[2,18],86:[2,18],91:[2,18],93:[2,18],102:[2,18],104:[2,18],105:[2,18],106:[2,18],110:[2,18],118:[2,18],126:[2,18],128:[2,18],129:[2,18],132:[2,18],133:[2,18],134:[2,18],135:[2,18],136:[2,18],137:[2,18]},{1:[2,19],6:[2,19],25:[2,19],26:[2,19],49:[2,19],54:[2,19],57:[2,19],73:[2,19],78:[2,19],86:[2,19],91:[2,19],93:[2,19],102:[2,19],104:[2,19],105:[2,19],106:[2,19],110:[2,19],118:[2,19],126:[2,19],128:[2,19],129:[2,19],132:[2,19],133:[2,19],134:[2,19],135:[2,19],136:[2,19],137:[2,19]},{1:[2,20],6:[2,20],25:[2,20],26:[2,20],49:[2,20],54:[2,20],57:[2,20],73:[2,20],78:[2,20],86:[2,20],91:[2,20],93:[2,20],102:[2,20],104:[2,20],105:[2,20],106:[2,20],110:[2,20],118:[2,20],126:[2,20],128:[2,20],129:[2,20],132:[2,20],133:[2,20],134:[2,20],135:[2,20],136:[2,20],137:[2,20]},{1:[2,21],6:[2,21],25:[2,21],26:[2,21],49:[2,21],54:[2,21],57:[2,21],73:[2,21],78:[2,21],86:[2,21],91:[2,21],93:[2,21],102:[2,21],104:[2,21],105:[2,21],106:[2,21],110:[2,21],118:[2,21],126:[2,21],128:[2,21],129:[2,21],132:[2,21],133:[2,21],134:[2,21],135:[2,21],136:[2,21],137:[2,21]},{1:[2,22],6:[2,22],25:[2,22],26:[2,22],49:[2,22],54:[2,22],57:[2,22],73:[2,22],78:[2,22],86:[2,22],91:[2,22],93:[2,22],102:[2,22],104:[2,22],105:[2,22],106:[2,22],110:[2,22],118:[2,22],126:[2,22],128:[2,22],129:[2,22],132:[2,22],133:[2,22],134:[2,22],135:[2,22],136:[2,22],137:[2,22]},{1:[2,23],6:[2,23],25:[2,23],26:[2,23],49:[2,23],54:[2,23],57:[2,23],73:[2,23],78:[2,23],86:[2,23],91:[2,23],93:[2,23],102:[2,23],104:[2,23],105:[2,23],106:[2,23],110:[2,23],118:[2,23],126:[2,23],128:[2,23],129:[2,23],132:[2,23],133:[2,23],134:[2,23],135:[2,23],136:[2,23],137:[2,23]},{1:[2,9],6:[2,9],26:[2,9],102:[2,9],104:[2,9],106:[2,9],110:[2,9],126:[2,9]},{1:[2,10],6:[2,10],26:[2,10],102:[2,10],104:[2,10],106:[2,10],110:[2,10],126:[2,10]},{1:[2,11],6:[2,11],26:[2,11],102:[2,11],104:[2,11],106:[2,11],110:[2,11],126:[2,11]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],40:[1,104],49:[2,75],54:[2,75],57:[2,75],66:[2,75],67:[2,75],68:[2,75],69:[2,75],71:[2,75],73:[2,75],74:[2,75],78:[2,75],84:[2,75],85:[2,75],86:[2,75],91:[2,75],93:[2,75],102:[2,75],104:[2,75],105:[2,75],106:[2,75],110:[2,75],118:[2,75],126:[2,75],128:[2,75],129:[2,75],132:[2,75],133:[2,75],134:[2,75],135:[2,75],136:[2,75],137:[2,75]},{1:[2,76],6:[2,76],25:[2,76],26:[2,76],49:[2,76],54:[2,76],57:[2,76],66:[2,76],67:[2,76],68:[2,76],69:[2,76],71:[2,76],73:[2,76],74:[2,76],78:[2,76],84:[2,76],85:[2,76],86:[2,76],91:[2,76],93:[2,76],102:[2,76],104:[2,76],105:[2,76],106:[2,76],110:[2,76],118:[2,76],126:[2,76],128:[2,76],129:[2,76],132:[2,76],133:[2,76],134:[2,76],135:[2,76],136:[2,76],137:[2,76]},{1:[2,77],6:[2,77],25:[2,77],26:[2,77],49:[2,77],54:[2,77],57:[2,77],66:[2,77],67:[2,77],68:[2,77],69:[2,77],71:[2,77],73:[2,77],74:[2,77],78:[2,77],84:[2,77],85:[2,77],86:[2,77],91:[2,77],93:[2,77],102:[2,77],104:[2,77],105:[2,77],106:[2,77],110:[2,77],118:[2,77],126:[2,77],128:[2,77],129:[2,77],132:[2,77],133:[2,77],134:[2,77],135:[2,77],136:[2,77],137:[2,77]},{1:[2,78],6:[2,78],25:[2,78],26:[2,78],49:[2,78],54:[2,78],57:[2,78],66:[2,78],67:[2,78],68:[2,78],69:[2,78],71:[2,78],73:[2,78],74:[2,78],78:[2,78],84:[2,78],85:[2,78],86:[2,78],91:[2,78],93:[2,78],102:[2,78],104:[2,78],105:[2,78],106:[2,78],110:[2,78],118:[2,78],126:[2,78],128:[2,78],129:[2,78],132:[2,78],133:[2,78],134:[2,78],135:[2,78],136:[2,78],137:[2,78]},{1:[2,79],6:[2,79],25:[2,79],26:[2,79],49:[2,79],54:[2,79],57:[2,79],66:[2,79],67:[2,79],68:[2,79],69:[2,79],71:[2,79],73:[2,79],74:[2,79],78:[2,79],84:[2,79],85:[2,79],86:[2,79],91:[2,79],93:[2,79],102:[2,79],104:[2,79],105:[2,79],106:[2,79],110:[2,79],118:[2,79],126:[2,79],128:[2,79],129:[2,79],132:[2,79],133:[2,79],134:[2,79],135:[2,79],136:[2,79],137:[2,79]},{1:[2,106],6:[2,106],25:[2,106],26:[2,106],49:[2,106],54:[2,106],57:[2,106],66:[2,106],67:[2,106],68:[2,106],69:[2,106],71:[2,106],73:[2,106],74:[2,106],78:[2,106],82:105,84:[2,106],85:[1,106],86:[2,106],91:[2,106],93:[2,106],102:[2,106],104:[2,106],105:[2,106],106:[2,106],110:[2,106],118:[2,106],126:[2,106],128:[2,106],129:[2,106],132:[2,106],133:[2,106],134:[2,106],135:[2,106],136:[2,106],137:[2,106]},{6:[2,55],25:[2,55],27:110,28:[1,73],44:111,48:107,49:[2,55],54:[2,55],55:108,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{5:116,25:[1,5]},{8:117,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:119,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:120,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{13:122,14:123,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:124,44:63,58:47,59:48,61:121,63:25,64:26,65:27,76:[1,70],83:[1,28],88:[1,58],89:[1,59],90:[1,57],101:[1,56]},{13:122,14:123,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:124,44:63,58:47,59:48,61:125,63:25,64:26,65:27,76:[1,70],83:[1,28],88:[1,58],89:[1,59],90:[1,57],101:[1,56]},{1:[2,72],6:[2,72],25:[2,72],26:[2,72],40:[2,72],49:[2,72],54:[2,72],57:[2,72],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,72],74:[2,72],78:[2,72],80:[1,129],84:[2,72],85:[2,72],86:[2,72],91:[2,72],93:[2,72],102:[2,72],104:[2,72],105:[2,72],106:[2,72],110:[2,72],118:[2,72],126:[2,72],128:[2,72],129:[2,72],130:[1,126],131:[1,127],132:[2,72],133:[2,72],134:[2,72],135:[2,72],136:[2,72],137:[2,72],138:[1,128]},{1:[2,182],6:[2,182],25:[2,182],26:[2,182],49:[2,182],54:[2,182],57:[2,182],73:[2,182],78:[2,182],86:[2,182],91:[2,182],93:[2,182],102:[2,182],104:[2,182],105:[2,182],106:[2,182],110:[2,182],118:[2,182],121:[1,130],126:[2,182],128:[2,182],129:[2,182],132:[2,182],133:[2,182],134:[2,182],135:[2,182],136:[2,182],137:[2,182]},{5:131,25:[1,5]},{5:132,25:[1,5]},{1:[2,149],6:[2,149],25:[2,149],26:[2,149],49:[2,149],54:[2,149],57:[2,149],73:[2,149],78:[2,149],86:[2,149],91:[2,149],93:[2,149],102:[2,149],104:[2,149],105:[2,149],106:[2,149],110:[2,149],118:[2,149],126:[2,149],128:[2,149],129:[2,149],132:[2,149],133:[2,149],134:[2,149],135:[2,149],136:[2,149],137:[2,149]},{5:133,25:[1,5]},{8:134,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,135],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,96],5:136,6:[2,96],13:122,14:123,25:[1,5],26:[2,96],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:124,44:63,49:[2,96],54:[2,96],57:[2,96],58:47,59:48,61:138,63:25,64:26,65:27,73:[2,96],76:[1,70],78:[2,96],80:[1,137],83:[1,28],86:[2,96],88:[1,58],89:[1,59],90:[1,57],91:[2,96],93:[2,96],101:[1,56],102:[2,96],104:[2,96],105:[2,96],106:[2,96],110:[2,96],118:[2,96],126:[2,96],128:[2,96],129:[2,96],132:[2,96],133:[2,96],134:[2,96],135:[2,96],136:[2,96],137:[2,96]},{8:139,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,47],6:[2,47],8:140,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,47],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],102:[2,47],103:39,104:[2,47],106:[2,47],107:40,108:[1,67],109:41,110:[2,47],111:69,119:[1,42],124:37,125:[1,64],126:[2,47],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,48],6:[2,48],25:[2,48],26:[2,48],54:[2,48],78:[2,48],102:[2,48],104:[2,48],106:[2,48],110:[2,48],126:[2,48]},{1:[2,73],6:[2,73],25:[2,73],26:[2,73],40:[2,73],49:[2,73],54:[2,73],57:[2,73],66:[2,73],67:[2,73],68:[2,73],69:[2,73],71:[2,73],73:[2,73],74:[2,73],78:[2,73],84:[2,73],85:[2,73],86:[2,73],91:[2,73],93:[2,73],102:[2,73],104:[2,73],105:[2,73],106:[2,73],110:[2,73],118:[2,73],126:[2,73],128:[2,73],129:[2,73],132:[2,73],133:[2,73],134:[2,73],135:[2,73],136:[2,73],137:[2,73]},{1:[2,74],6:[2,74],25:[2,74],26:[2,74],40:[2,74],49:[2,74],54:[2,74],57:[2,74],66:[2,74],67:[2,74],68:[2,74],69:[2,74],71:[2,74],73:[2,74],74:[2,74],78:[2,74],84:[2,74],85:[2,74],86:[2,74],91:[2,74],93:[2,74],102:[2,74],104:[2,74],105:[2,74],106:[2,74],110:[2,74],118:[2,74],126:[2,74],128:[2,74],129:[2,74],132:[2,74],133:[2,74],134:[2,74],135:[2,74],136:[2,74],137:[2,74]},{1:[2,29],6:[2,29],25:[2,29],26:[2,29],49:[2,29],54:[2,29],57:[2,29],66:[2,29],67:[2,29],68:[2,29],69:[2,29],71:[2,29],73:[2,29],74:[2,29],78:[2,29],84:[2,29],85:[2,29],86:[2,29],91:[2,29],93:[2,29],102:[2,29],104:[2,29],105:[2,29],106:[2,29],110:[2,29],118:[2,29],126:[2,29],128:[2,29],129:[2,29],132:[2,29],133:[2,29],134:[2,29],135:[2,29],136:[2,29],137:[2,29]},{1:[2,30],6:[2,30],25:[2,30],26:[2,30],49:[2,30],54:[2,30],57:[2,30],66:[2,30],67:[2,30],68:[2,30],69:[2,30],71:[2,30],73:[2,30],74:[2,30],78:[2,30],84:[2,30],85:[2,30],86:[2,30],91:[2,30],93:[2,30],102:[2,30],104:[2,30],105:[2,30],106:[2,30],110:[2,30],118:[2,30],126:[2,30],128:[2,30],129:[2,30],132:[2,30],133:[2,30],134:[2,30],135:[2,30],136:[2,30],137:[2,30]},{1:[2,31],6:[2,31],25:[2,31],26:[2,31],49:[2,31],54:[2,31],57:[2,31],66:[2,31],67:[2,31],68:[2,31],69:[2,31],71:[2,31],73:[2,31],74:[2,31],78:[2,31],84:[2,31],85:[2,31],86:[2,31],91:[2,31],93:[2,31],102:[2,31],104:[2,31],105:[2,31],106:[2,31],110:[2,31],118:[2,31],126:[2,31],128:[2,31],129:[2,31],132:[2,31],133:[2,31],134:[2,31],135:[2,31],136:[2,31],137:[2,31]},{1:[2,32],6:[2,32],25:[2,32],26:[2,32],49:[2,32],54:[2,32],57:[2,32],66:[2,32],67:[2,32],68:[2,32],69:[2,32],71:[2,32],73:[2,32],74:[2,32],78:[2,32],84:[2,32],85:[2,32],86:[2,32],91:[2,32],93:[2,32],102:[2,32],104:[2,32],105:[2,32],106:[2,32],110:[2,32],118:[2,32],126:[2,32],128:[2,32],129:[2,32],132:[2,32],133:[2,32],134:[2,32],135:[2,32],136:[2,32],137:[2,32]},{1:[2,33],6:[2,33],25:[2,33],26:[2,33],49:[2,33],54:[2,33],57:[2,33],66:[2,33],67:[2,33],68:[2,33],69:[2,33],71:[2,33],73:[2,33],74:[2,33],78:[2,33],84:[2,33],85:[2,33],86:[2,33],91:[2,33],93:[2,33],102:[2,33],104:[2,33],105:[2,33],106:[2,33],110:[2,33],118:[2,33],126:[2,33],128:[2,33],129:[2,33],132:[2,33],133:[2,33],134:[2,33],135:[2,33],136:[2,33],137:[2,33]},{1:[2,34],6:[2,34],25:[2,34],26:[2,34],49:[2,34],54:[2,34],57:[2,34],66:[2,34],67:[2,34],68:[2,34],69:[2,34],71:[2,34],73:[2,34],74:[2,34],78:[2,34],84:[2,34],85:[2,34],86:[2,34],91:[2,34],93:[2,34],102:[2,34],104:[2,34],105:[2,34],106:[2,34],110:[2,34],118:[2,34],126:[2,34],128:[2,34],129:[2,34],132:[2,34],133:[2,34],134:[2,34],135:[2,34],136:[2,34],137:[2,34]},{1:[2,35],6:[2,35],25:[2,35],26:[2,35],49:[2,35],54:[2,35],57:[2,35],66:[2,35],67:[2,35],68:[2,35],69:[2,35],71:[2,35],73:[2,35],74:[2,35],78:[2,35],84:[2,35],85:[2,35],86:[2,35],91:[2,35],93:[2,35],102:[2,35],104:[2,35],105:[2,35],106:[2,35],110:[2,35],118:[2,35],126:[2,35],128:[2,35],129:[2,35],132:[2,35],133:[2,35],134:[2,35],135:[2,35],136:[2,35],137:[2,35]},{4:141,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,142],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:143,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:145,88:[1,58],89:[1,59],90:[1,57],91:[1,144],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,112],6:[2,112],25:[2,112],26:[2,112],49:[2,112],54:[2,112],57:[2,112],66:[2,112],67:[2,112],68:[2,112],69:[2,112],71:[2,112],73:[2,112],74:[2,112],78:[2,112],84:[2,112],85:[2,112],86:[2,112],91:[2,112],93:[2,112],102:[2,112],104:[2,112],105:[2,112],106:[2,112],110:[2,112],118:[2,112],126:[2,112],128:[2,112],129:[2,112],132:[2,112],133:[2,112],134:[2,112],135:[2,112],136:[2,112],137:[2,112]},{1:[2,113],6:[2,113],25:[2,113],26:[2,113],27:149,28:[1,73],49:[2,113],54:[2,113],57:[2,113],66:[2,113],67:[2,113],68:[2,113],69:[2,113],71:[2,113],73:[2,113],74:[2,113],78:[2,113],84:[2,113],85:[2,113],86:[2,113],91:[2,113],93:[2,113],102:[2,113],104:[2,113],105:[2,113],106:[2,113],110:[2,113],118:[2,113],126:[2,113],128:[2,113],129:[2,113],132:[2,113],133:[2,113],134:[2,113],135:[2,113],136:[2,113],137:[2,113]},{25:[2,51]},{25:[2,52]},{1:[2,68],6:[2,68],25:[2,68],26:[2,68],40:[2,68],49:[2,68],54:[2,68],57:[2,68],66:[2,68],67:[2,68],68:[2,68],69:[2,68],71:[2,68],73:[2,68],74:[2,68],78:[2,68],80:[2,68],84:[2,68],85:[2,68],86:[2,68],91:[2,68],93:[2,68],102:[2,68],104:[2,68],105:[2,68],106:[2,68],110:[2,68],118:[2,68],126:[2,68],128:[2,68],129:[2,68],130:[2,68],131:[2,68],132:[2,68],133:[2,68],134:[2,68],135:[2,68],136:[2,68],137:[2,68],138:[2,68]},{1:[2,71],6:[2,71],25:[2,71],26:[2,71],40:[2,71],49:[2,71],54:[2,71],57:[2,71],66:[2,71],67:[2,71],68:[2,71],69:[2,71],71:[2,71],73:[2,71],74:[2,71],78:[2,71],80:[2,71],84:[2,71],85:[2,71],86:[2,71],91:[2,71],93:[2,71],102:[2,71],104:[2,71],105:[2,71],106:[2,71],110:[2,71],118:[2,71],126:[2,71],128:[2,71],129:[2,71],130:[2,71],131:[2,71],132:[2,71],133:[2,71],134:[2,71],135:[2,71],136:[2,71],137:[2,71],138:[2,71]},{8:150,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:151,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:152,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{5:153,8:154,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{27:159,28:[1,73],44:160,58:161,59:162,64:155,76:[1,70],89:[1,114],90:[1,57],113:156,114:[1,157],115:158},{112:163,116:[1,164],117:[1,165]},{6:[2,91],11:169,25:[2,91],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:167,42:168,44:172,46:[1,46],54:[2,91],77:166,78:[2,91],89:[1,114]},{1:[2,27],6:[2,27],25:[2,27],26:[2,27],43:[2,27],49:[2,27],54:[2,27],57:[2,27],66:[2,27],67:[2,27],68:[2,27],69:[2,27],71:[2,27],73:[2,27],74:[2,27],78:[2,27],84:[2,27],85:[2,27],86:[2,27],91:[2,27],93:[2,27],102:[2,27],104:[2,27],105:[2,27],106:[2,27],110:[2,27],118:[2,27],126:[2,27],128:[2,27],129:[2,27],132:[2,27],133:[2,27],134:[2,27],135:[2,27],136:[2,27],137:[2,27]},{1:[2,28],6:[2,28],25:[2,28],26:[2,28],43:[2,28],49:[2,28],54:[2,28],57:[2,28],66:[2,28],67:[2,28],68:[2,28],69:[2,28],71:[2,28],73:[2,28],74:[2,28],78:[2,28],84:[2,28],85:[2,28],86:[2,28],91:[2,28],93:[2,28],102:[2,28],104:[2,28],105:[2,28],106:[2,28],110:[2,28],118:[2,28],126:[2,28],128:[2,28],129:[2,28],132:[2,28],133:[2,28],134:[2,28],135:[2,28],136:[2,28],137:[2,28]},{1:[2,26],6:[2,26],25:[2,26],26:[2,26],40:[2,26],43:[2,26],49:[2,26],54:[2,26],57:[2,26],66:[2,26],67:[2,26],68:[2,26],69:[2,26],71:[2,26],73:[2,26],74:[2,26],78:[2,26],80:[2,26],84:[2,26],85:[2,26],86:[2,26],91:[2,26],93:[2,26],102:[2,26],104:[2,26],105:[2,26],106:[2,26],110:[2,26],116:[2,26],117:[2,26],118:[2,26],126:[2,26],128:[2,26],129:[2,26],130:[2,26],131:[2,26],132:[2,26],133:[2,26],134:[2,26],135:[2,26],136:[2,26],137:[2,26],138:[2,26]},{1:[2,6],6:[2,6],7:173,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,6],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],102:[2,6],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,3]},{1:[2,24],6:[2,24],25:[2,24],26:[2,24],49:[2,24],54:[2,24],57:[2,24],73:[2,24],78:[2,24],86:[2,24],91:[2,24],93:[2,24],98:[2,24],99:[2,24],102:[2,24],104:[2,24],105:[2,24],106:[2,24],110:[2,24],118:[2,24],121:[2,24],123:[2,24],126:[2,24],128:[2,24],129:[2,24],132:[2,24],133:[2,24],134:[2,24],135:[2,24],136:[2,24],137:[2,24]},{6:[1,74],26:[1,174]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],49:[2,193],54:[2,193],57:[2,193],73:[2,193],78:[2,193],86:[2,193],91:[2,193],93:[2,193],102:[2,193],104:[2,193],105:[2,193],106:[2,193],110:[2,193],118:[2,193],126:[2,193],128:[2,193],129:[2,193],132:[2,193],133:[2,193],134:[2,193],135:[2,193],136:[2,193],137:[2,193]},{8:175,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:176,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:177,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:178,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:179,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:180,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:181,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:182,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,148],6:[2,148],25:[2,148],26:[2,148],49:[2,148],54:[2,148],57:[2,148],73:[2,148],78:[2,148],86:[2,148],91:[2,148],93:[2,148],102:[2,148],104:[2,148],105:[2,148],106:[2,148],110:[2,148],118:[2,148],126:[2,148],128:[2,148],129:[2,148],132:[2,148],133:[2,148],134:[2,148],135:[2,148],136:[2,148],137:[2,148]},{1:[2,153],6:[2,153],25:[2,153],26:[2,153],49:[2,153],54:[2,153],57:[2,153],73:[2,153],78:[2,153],86:[2,153],91:[2,153],93:[2,153],102:[2,153],104:[2,153],105:[2,153],106:[2,153],110:[2,153],118:[2,153],126:[2,153],128:[2,153],129:[2,153],132:[2,153],133:[2,153],134:[2,153],135:[2,153],136:[2,153],137:[2,153]},{8:183,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,147],6:[2,147],25:[2,147],26:[2,147],49:[2,147],54:[2,147],57:[2,147],73:[2,147],78:[2,147],86:[2,147],91:[2,147],93:[2,147],102:[2,147],104:[2,147],105:[2,147],106:[2,147],110:[2,147],118:[2,147],126:[2,147],128:[2,147],129:[2,147],132:[2,147],133:[2,147],134:[2,147],135:[2,147],136:[2,147],137:[2,147]},{1:[2,152],6:[2,152],25:[2,152],26:[2,152],49:[2,152],54:[2,152],57:[2,152],73:[2,152],78:[2,152],86:[2,152],91:[2,152],93:[2,152],102:[2,152],104:[2,152],105:[2,152],106:[2,152],110:[2,152],118:[2,152],126:[2,152],128:[2,152],129:[2,152],132:[2,152],133:[2,152],134:[2,152],135:[2,152],136:[2,152],137:[2,152]},{82:184,85:[1,106]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],40:[2,69],49:[2,69],54:[2,69],57:[2,69],66:[2,69],67:[2,69],68:[2,69],69:[2,69],71:[2,69],73:[2,69],74:[2,69],78:[2,69],80:[2,69],84:[2,69],85:[2,69],86:[2,69],91:[2,69],93:[2,69],102:[2,69],104:[2,69],105:[2,69],106:[2,69],110:[2,69],118:[2,69],126:[2,69],128:[2,69],129:[2,69],130:[2,69],131:[2,69],132:[2,69],133:[2,69],134:[2,69],135:[2,69],136:[2,69],137:[2,69],138:[2,69]},{85:[2,109]},{27:185,28:[1,73]},{27:186,28:[1,73]},{1:[2,84],6:[2,84],25:[2,84],26:[2,84],27:187,28:[1,73],40:[2,84],49:[2,84],54:[2,84],57:[2,84],66:[2,84],67:[2,84],68:[2,84],69:[2,84],71:[2,84],73:[2,84],74:[2,84],78:[2,84],80:[2,84],84:[2,84],85:[2,84],86:[2,84],91:[2,84],93:[2,84],102:[2,84],104:[2,84],105:[2,84],106:[2,84],110:[2,84],118:[2,84],126:[2,84],128:[2,84],129:[2,84],130:[2,84],131:[2,84],132:[2,84],133:[2,84],134:[2,84],135:[2,84],136:[2,84],137:[2,84],138:[2,84]},{27:188,28:[1,73]},{1:[2,85],6:[2,85],25:[2,85],26:[2,85],40:[2,85],49:[2,85],54:[2,85],57:[2,85],66:[2,85],67:[2,85],68:[2,85],69:[2,85],71:[2,85],73:[2,85],74:[2,85],78:[2,85],80:[2,85],84:[2,85],85:[2,85],86:[2,85],91:[2,85],93:[2,85],102:[2,85],104:[2,85],105:[2,85],106:[2,85],110:[2,85],118:[2,85],126:[2,85],128:[2,85],129:[2,85],130:[2,85],131:[2,85],132:[2,85],133:[2,85],134:[2,85],135:[2,85],136:[2,85],137:[2,85],138:[2,85]},{8:190,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],57:[1,194],58:47,59:48,61:36,63:25,64:26,65:27,72:189,75:191,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],92:192,93:[1,193],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{70:195,71:[1,100],74:[1,101]},{82:196,85:[1,106]},{1:[2,70],6:[2,70],25:[2,70],26:[2,70],40:[2,70],49:[2,70],54:[2,70],57:[2,70],66:[2,70],67:[2,70],68:[2,70],69:[2,70],71:[2,70],73:[2,70],74:[2,70],78:[2,70],80:[2,70],84:[2,70],85:[2,70],86:[2,70],91:[2,70],93:[2,70],102:[2,70],104:[2,70],105:[2,70],106:[2,70],110:[2,70],118:[2,70],126:[2,70],128:[2,70],129:[2,70],130:[2,70],131:[2,70],132:[2,70],133:[2,70],134:[2,70],135:[2,70],136:[2,70],137:[2,70],138:[2,70]},{6:[1,198],8:197,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,199],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,107],6:[2,107],25:[2,107],26:[2,107],49:[2,107],54:[2,107],57:[2,107],66:[2,107],67:[2,107],68:[2,107],69:[2,107],71:[2,107],73:[2,107],74:[2,107],78:[2,107],84:[2,107],85:[2,107],86:[2,107],91:[2,107],93:[2,107],102:[2,107],104:[2,107],105:[2,107],106:[2,107],110:[2,107],118:[2,107],126:[2,107],128:[2,107],129:[2,107],132:[2,107],133:[2,107],134:[2,107],135:[2,107],136:[2,107],137:[2,107]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],86:[1,200],87:201,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],49:[1,203],53:205,54:[1,204]},{6:[2,56],25:[2,56],26:[2,56],49:[2,56],54:[2,56]},{6:[2,60],25:[2,60],26:[2,60],40:[1,207],49:[2,60],54:[2,60],57:[1,206]},{6:[2,63],25:[2,63],26:[2,63],40:[2,63],49:[2,63],54:[2,63],57:[2,63]},{6:[2,64],25:[2,64],26:[2,64],40:[2,64],49:[2,64],54:[2,64],57:[2,64]},{6:[2,65],25:[2,65],26:[2,65],40:[2,65],49:[2,65],54:[2,65],57:[2,65]},{6:[2,66],25:[2,66],26:[2,66],40:[2,66],49:[2,66],54:[2,66],57:[2,66]},{27:149,28:[1,73]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:145,88:[1,58],89:[1,59],90:[1,57],91:[1,144],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,50],6:[2,50],25:[2,50],26:[2,50],49:[2,50],54:[2,50],57:[2,50],73:[2,50],78:[2,50],86:[2,50],91:[2,50],93:[2,50],102:[2,50],104:[2,50],105:[2,50],106:[2,50],110:[2,50],118:[2,50],126:[2,50],128:[2,50],129:[2,50],132:[2,50],133:[2,50],134:[2,50],135:[2,50],136:[2,50],137:[2,50]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],49:[2,186],54:[2,186],57:[2,186],73:[2,186],78:[2,186],86:[2,186],91:[2,186],93:[2,186],102:[2,186],103:87,104:[2,186],105:[2,186],106:[2,186],109:88,110:[2,186],111:69,118:[2,186],126:[2,186],128:[2,186],129:[2,186],132:[1,78],133:[2,186],134:[2,186],135:[2,186],136:[2,186],137:[2,186]},{103:90,104:[1,65],106:[1,66],109:91,110:[1,68],111:69,126:[1,89]},{1:[2,187],6:[2,187],25:[2,187],26:[2,187],49:[2,187],54:[2,187],57:[2,187],73:[2,187],78:[2,187],86:[2,187],91:[2,187],93:[2,187],102:[2,187],103:87,104:[2,187],105:[2,187],106:[2,187],109:88,110:[2,187],111:69,118:[2,187],126:[2,187],128:[2,187],129:[2,187],132:[1,78],133:[2,187],134:[2,187],135:[2,187],136:[2,187],137:[2,187]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],49:[2,188],54:[2,188],57:[2,188],73:[2,188],78:[2,188],86:[2,188],91:[2,188],93:[2,188],102:[2,188],103:87,104:[2,188],105:[2,188],106:[2,188],109:88,110:[2,188],111:69,118:[2,188],126:[2,188],128:[2,188],129:[2,188],132:[1,78],133:[2,188],134:[2,188],135:[2,188],136:[2,188],137:[2,188]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],49:[2,189],54:[2,189],57:[2,189],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,189],74:[2,72],78:[2,189],84:[2,72],85:[2,72],86:[2,189],91:[2,189],93:[2,189],102:[2,189],104:[2,189],105:[2,189],106:[2,189],110:[2,189],118:[2,189],126:[2,189],128:[2,189],129:[2,189],132:[2,189],133:[2,189],134:[2,189],135:[2,189],136:[2,189],137:[2,189]},{62:93,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],74:[1,101],81:92,84:[1,94],85:[2,108]},{62:103,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],74:[1,101],81:102,84:[1,94],85:[2,108]},{66:[2,75],67:[2,75],68:[2,75],69:[2,75],71:[2,75],74:[2,75],84:[2,75],85:[2,75]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],49:[2,190],54:[2,190],57:[2,190],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,190],74:[2,72],78:[2,190],84:[2,72],85:[2,72],86:[2,190],91:[2,190],93:[2,190],102:[2,190],104:[2,190],105:[2,190],106:[2,190],110:[2,190],118:[2,190],126:[2,190],128:[2,190],129:[2,190],132:[2,190],133:[2,190],134:[2,190],135:[2,190],136:[2,190],137:[2,190]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],49:[2,191],54:[2,191],57:[2,191],73:[2,191],78:[2,191],86:[2,191],91:[2,191],93:[2,191],102:[2,191],104:[2,191],105:[2,191],106:[2,191],110:[2,191],118:[2,191],126:[2,191],128:[2,191],129:[2,191],132:[2,191],133:[2,191],134:[2,191],135:[2,191],136:[2,191],137:[2,191]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],49:[2,192],54:[2,192],57:[2,192],73:[2,192],78:[2,192],86:[2,192],91:[2,192],93:[2,192],102:[2,192],104:[2,192],105:[2,192],106:[2,192],110:[2,192],118:[2,192],126:[2,192],128:[2,192],129:[2,192],132:[2,192],133:[2,192],134:[2,192],135:[2,192],136:[2,192],137:[2,192]},{6:[1,210],8:208,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,209],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:211,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{5:212,25:[1,5],125:[1,213]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],49:[2,133],54:[2,133],57:[2,133],73:[2,133],78:[2,133],86:[2,133],91:[2,133],93:[2,133],97:214,98:[1,215],99:[1,216],102:[2,133],104:[2,133],105:[2,133],106:[2,133],110:[2,133],118:[2,133],126:[2,133],128:[2,133],129:[2,133],132:[2,133],133:[2,133],134:[2,133],135:[2,133],136:[2,133],137:[2,133]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],49:[2,146],54:[2,146],57:[2,146],73:[2,146],78:[2,146],86:[2,146],91:[2,146],93:[2,146],102:[2,146],104:[2,146],105:[2,146],106:[2,146],110:[2,146],118:[2,146],126:[2,146],128:[2,146],129:[2,146],132:[2,146],133:[2,146],134:[2,146],135:[2,146],136:[2,146],137:[2,146]},{1:[2,154],6:[2,154],25:[2,154],26:[2,154],49:[2,154],54:[2,154],57:[2,154],73:[2,154],78:[2,154],86:[2,154],91:[2,154],93:[2,154],102:[2,154],104:[2,154],105:[2,154],106:[2,154],110:[2,154],118:[2,154],126:[2,154],128:[2,154],129:[2,154],132:[2,154],133:[2,154],134:[2,154],135:[2,154],136:[2,154],137:[2,154]},{25:[1,217],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{120:218,122:219,123:[1,220]},{1:[2,97],6:[2,97],25:[2,97],26:[2,97],49:[2,97],54:[2,97],57:[2,97],73:[2,97],78:[2,97],86:[2,97],91:[2,97],93:[2,97],102:[2,97],104:[2,97],105:[2,97],106:[2,97],110:[2,97],118:[2,97],126:[2,97],128:[2,97],129:[2,97],132:[2,97],133:[2,97],134:[2,97],135:[2,97],136:[2,97],137:[2,97]},{8:221,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,100],5:222,6:[2,100],25:[1,5],26:[2,100],49:[2,100],54:[2,100],57:[2,100],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,100],74:[2,72],78:[2,100],80:[1,223],84:[2,72],85:[2,72],86:[2,100],91:[2,100],93:[2,100],102:[2,100],104:[2,100],105:[2,100],106:[2,100],110:[2,100],118:[2,100],126:[2,100],128:[2,100],129:[2,100],132:[2,100],133:[2,100],134:[2,100],135:[2,100],136:[2,100],137:[2,100]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],49:[2,139],54:[2,139],57:[2,139],73:[2,139],78:[2,139],86:[2,139],91:[2,139],93:[2,139],102:[2,139],103:87,104:[2,139],105:[2,139],106:[2,139],109:88,110:[2,139],111:69,118:[2,139],126:[2,139],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,46],6:[2,46],26:[2,46],102:[2,46],103:87,104:[2,46],106:[2,46],109:88,110:[2,46],111:69,126:[2,46],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,74],102:[1,224]},{4:225,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,129],25:[2,129],54:[2,129],57:[1,227],91:[2,129],92:226,93:[1,193],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,115],6:[2,115],25:[2,115],26:[2,115],40:[2,115],49:[2,115],54:[2,115],57:[2,115],66:[2,115],67:[2,115],68:[2,115],69:[2,115],71:[2,115],73:[2,115],74:[2,115],78:[2,115],84:[2,115],85:[2,115],86:[2,115],91:[2,115],93:[2,115],102:[2,115],104:[2,115],105:[2,115],106:[2,115],110:[2,115],116:[2,115],117:[2,115],118:[2,115],126:[2,115],128:[2,115],129:[2,115],132:[2,115],133:[2,115],134:[2,115],135:[2,115],136:[2,115],137:[2,115]},{6:[2,53],25:[2,53],53:228,54:[1,229],91:[2,53]},{6:[2,124],25:[2,124],26:[2,124],54:[2,124],86:[2,124],91:[2,124]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:230,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,130],25:[2,130],26:[2,130],54:[2,130],86:[2,130],91:[2,130]},{1:[2,114],6:[2,114],25:[2,114],26:[2,114],40:[2,114],43:[2,114],49:[2,114],54:[2,114],57:[2,114],66:[2,114],67:[2,114],68:[2,114],69:[2,114],71:[2,114],73:[2,114],74:[2,114],78:[2,114],80:[2,114],84:[2,114],85:[2,114],86:[2,114],91:[2,114],93:[2,114],102:[2,114],104:[2,114],105:[2,114],106:[2,114],110:[2,114],116:[2,114],117:[2,114],118:[2,114],126:[2,114],128:[2,114],129:[2,114],130:[2,114],131:[2,114],132:[2,114],133:[2,114],134:[2,114],135:[2,114],136:[2,114],137:[2,114],138:[2,114]},{5:231,25:[1,5],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],49:[2,142],54:[2,142],57:[2,142],73:[2,142],78:[2,142],86:[2,142],91:[2,142],93:[2,142],102:[2,142],103:87,104:[1,65],105:[1,232],106:[1,66],109:88,110:[1,68],111:69,118:[2,142],126:[2,142],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],49:[2,144],54:[2,144],57:[2,144],73:[2,144],78:[2,144],86:[2,144],91:[2,144],93:[2,144],102:[2,144],103:87,104:[1,65],105:[1,233],106:[1,66],109:88,110:[1,68],111:69,118:[2,144],126:[2,144],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,150],6:[2,150],25:[2,150],26:[2,150],49:[2,150],54:[2,150],57:[2,150],73:[2,150],78:[2,150],86:[2,150],91:[2,150],93:[2,150],102:[2,150],104:[2,150],105:[2,150],106:[2,150],110:[2,150],118:[2,150],126:[2,150],128:[2,150],129:[2,150],132:[2,150],133:[2,150],134:[2,150],135:[2,150],136:[2,150],137:[2,150]},{1:[2,151],6:[2,151],25:[2,151],26:[2,151],49:[2,151],54:[2,151],57:[2,151],73:[2,151],78:[2,151],86:[2,151],91:[2,151],93:[2,151],102:[2,151],103:87,104:[1,65],105:[2,151],106:[1,66],109:88,110:[1,68],111:69,118:[2,151],126:[2,151],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,155],6:[2,155],25:[2,155],26:[2,155],49:[2,155],54:[2,155],57:[2,155],73:[2,155],78:[2,155],86:[2,155],91:[2,155],93:[2,155],102:[2,155],104:[2,155],105:[2,155],106:[2,155],110:[2,155],118:[2,155],126:[2,155],128:[2,155],129:[2,155],132:[2,155],133:[2,155],134:[2,155],135:[2,155],136:[2,155],137:[2,155]},{116:[2,157],117:[2,157]},{27:159,28:[1,73],44:160,58:161,59:162,76:[1,70],89:[1,114],90:[1,115],113:234,115:158},{54:[1,235],116:[2,163],117:[2,163]},{54:[2,159],116:[2,159],117:[2,159]},{54:[2,160],116:[2,160],117:[2,160]},{54:[2,161],116:[2,161],117:[2,161]},{54:[2,162],116:[2,162],117:[2,162]},{1:[2,156],6:[2,156],25:[2,156],26:[2,156],49:[2,156],54:[2,156],57:[2,156],73:[2,156],78:[2,156],86:[2,156],91:[2,156],93:[2,156],102:[2,156],104:[2,156],105:[2,156],106:[2,156],110:[2,156],118:[2,156],126:[2,156],128:[2,156],129:[2,156],132:[2,156],133:[2,156],134:[2,156],135:[2,156],136:[2,156],137:[2,156]},{8:236,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:237,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],53:238,54:[1,239],78:[2,53]},{6:[2,92],25:[2,92],26:[2,92],54:[2,92],78:[2,92]},{6:[2,39],25:[2,39],26:[2,39],43:[1,240],54:[2,39],78:[2,39]},{6:[2,42],25:[2,42],26:[2,42],54:[2,42],78:[2,42]},{6:[2,43],25:[2,43],26:[2,43],43:[2,43],54:[2,43],78:[2,43]},{6:[2,44],25:[2,44],26:[2,44],43:[2,44],54:[2,44],78:[2,44]},{6:[2,45],25:[2,45],26:[2,45],43:[2,45],54:[2,45],78:[2,45]},{1:[2,5],6:[2,5],26:[2,5],102:[2,5]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],49:[2,25],54:[2,25],57:[2,25],73:[2,25],78:[2,25],86:[2,25],91:[2,25],93:[2,25],98:[2,25],99:[2,25],102:[2,25],104:[2,25],105:[2,25],106:[2,25],110:[2,25],118:[2,25],121:[2,25],123:[2,25],126:[2,25],128:[2,25],129:[2,25],132:[2,25],133:[2,25],134:[2,25],135:[2,25],136:[2,25],137:[2,25]},{1:[2,194],6:[2,194],25:[2,194],26:[2,194],49:[2,194],54:[2,194],57:[2,194],73:[2,194],78:[2,194],86:[2,194],91:[2,194],93:[2,194],102:[2,194],103:87,104:[2,194],105:[2,194],106:[2,194],109:88,110:[2,194],111:69,118:[2,194],126:[2,194],128:[2,194],129:[2,194],132:[1,78],133:[1,81],134:[2,194],135:[2,194],136:[2,194],137:[2,194]},{1:[2,195],6:[2,195],25:[2,195],26:[2,195],49:[2,195],54:[2,195],57:[2,195],73:[2,195],78:[2,195],86:[2,195],91:[2,195],93:[2,195],102:[2,195],103:87,104:[2,195],105:[2,195],106:[2,195],109:88,110:[2,195],111:69,118:[2,195],126:[2,195],128:[2,195],129:[2,195],132:[1,78],133:[1,81],134:[2,195],135:[2,195],136:[2,195],137:[2,195]},{1:[2,196],6:[2,196],25:[2,196],26:[2,196],49:[2,196],54:[2,196],57:[2,196],73:[2,196],78:[2,196],86:[2,196],91:[2,196],93:[2,196],102:[2,196],103:87,104:[2,196],105:[2,196],106:[2,196],109:88,110:[2,196],111:69,118:[2,196],126:[2,196],128:[2,196],129:[2,196],132:[1,78],133:[2,196],134:[2,196],135:[2,196],136:[2,196],137:[2,196]},{1:[2,197],6:[2,197],25:[2,197],26:[2,197],49:[2,197],54:[2,197],57:[2,197],73:[2,197],78:[2,197],86:[2,197],91:[2,197],93:[2,197],102:[2,197],103:87,104:[2,197],105:[2,197],106:[2,197],109:88,110:[2,197],111:69,118:[2,197],126:[2,197],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[2,197],135:[2,197],136:[2,197],137:[2,197]},{1:[2,198],6:[2,198],25:[2,198],26:[2,198],49:[2,198],54:[2,198],57:[2,198],73:[2,198],78:[2,198],86:[2,198],91:[2,198],93:[2,198],102:[2,198],103:87,104:[2,198],105:[2,198],106:[2,198],109:88,110:[2,198],111:69,118:[2,198],126:[2,198],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[2,198],136:[2,198],137:[1,85]},{1:[2,199],6:[2,199],25:[2,199],26:[2,199],49:[2,199],54:[2,199],57:[2,199],73:[2,199],78:[2,199],86:[2,199],91:[2,199],93:[2,199],102:[2,199],103:87,104:[2,199],105:[2,199],106:[2,199],109:88,110:[2,199],111:69,118:[2,199],126:[2,199],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[2,199],137:[1,85]},{1:[2,200],6:[2,200],25:[2,200],26:[2,200],49:[2,200],54:[2,200],57:[2,200],73:[2,200],78:[2,200],86:[2,200],91:[2,200],93:[2,200],102:[2,200],103:87,104:[2,200],105:[2,200],106:[2,200],109:88,110:[2,200],111:69,118:[2,200],126:[2,200],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[2,200],136:[2,200],137:[2,200]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],49:[2,185],54:[2,185],57:[2,185],73:[2,185],78:[2,185],86:[2,185],91:[2,185],93:[2,185],102:[2,185],103:87,104:[1,65],105:[2,185],106:[1,66],109:88,110:[1,68],111:69,118:[2,185],126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],49:[2,184],54:[2,184],57:[2,184],73:[2,184],78:[2,184],86:[2,184],91:[2,184],93:[2,184],102:[2,184],103:87,104:[1,65],105:[2,184],106:[1,66],109:88,110:[1,68],111:69,118:[2,184],126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,104],6:[2,104],25:[2,104],26:[2,104],49:[2,104],54:[2,104],57:[2,104],66:[2,104],67:[2,104],68:[2,104],69:[2,104],71:[2,104],73:[2,104],74:[2,104],78:[2,104],84:[2,104],85:[2,104],86:[2,104],91:[2,104],93:[2,104],102:[2,104],104:[2,104],105:[2,104],106:[2,104],110:[2,104],118:[2,104],126:[2,104],128:[2,104],129:[2,104],132:[2,104],133:[2,104],134:[2,104],135:[2,104],136:[2,104],137:[2,104]},{1:[2,80],6:[2,80],25:[2,80],26:[2,80],40:[2,80],49:[2,80],54:[2,80],57:[2,80],66:[2,80],67:[2,80],68:[2,80],69:[2,80],71:[2,80],73:[2,80],74:[2,80],78:[2,80],80:[2,80],84:[2,80],85:[2,80],86:[2,80],91:[2,80],93:[2,80],102:[2,80],104:[2,80],105:[2,80],106:[2,80],110:[2,80],118:[2,80],126:[2,80],128:[2,80],129:[2,80],130:[2,80],131:[2,80],132:[2,80],133:[2,80],134:[2,80],135:[2,80],136:[2,80],137:[2,80],138:[2,80]},{1:[2,81],6:[2,81],25:[2,81],26:[2,81],40:[2,81],49:[2,81],54:[2,81],57:[2,81],66:[2,81],67:[2,81],68:[2,81],69:[2,81],71:[2,81],73:[2,81],74:[2,81],78:[2,81],80:[2,81],84:[2,81],85:[2,81],86:[2,81],91:[2,81],93:[2,81],102:[2,81],104:[2,81],105:[2,81],106:[2,81],110:[2,81],118:[2,81],126:[2,81],128:[2,81],129:[2,81],130:[2,81],131:[2,81],132:[2,81],133:[2,81],134:[2,81],135:[2,81],136:[2,81],137:[2,81],138:[2,81]},{1:[2,82],6:[2,82],25:[2,82],26:[2,82],40:[2,82],49:[2,82],54:[2,82],57:[2,82],66:[2,82],67:[2,82],68:[2,82],69:[2,82],71:[2,82],73:[2,82],74:[2,82],78:[2,82],80:[2,82],84:[2,82],85:[2,82],86:[2,82],91:[2,82],93:[2,82],102:[2,82],104:[2,82],105:[2,82],106:[2,82],110:[2,82],118:[2,82],126:[2,82],128:[2,82],129:[2,82],130:[2,82],131:[2,82],132:[2,82],133:[2,82],134:[2,82],135:[2,82],136:[2,82],137:[2,82],138:[2,82]},{1:[2,83],6:[2,83],25:[2,83],26:[2,83],40:[2,83],49:[2,83],54:[2,83],57:[2,83],66:[2,83],67:[2,83],68:[2,83],69:[2,83],71:[2,83],73:[2,83],74:[2,83],78:[2,83],80:[2,83],84:[2,83],85:[2,83],86:[2,83],91:[2,83],93:[2,83],102:[2,83],104:[2,83],105:[2,83],106:[2,83],110:[2,83],118:[2,83],126:[2,83],128:[2,83],129:[2,83],130:[2,83],131:[2,83],132:[2,83],133:[2,83],134:[2,83],135:[2,83],136:[2,83],137:[2,83],138:[2,83]},{73:[1,241]},{57:[1,194],73:[2,88],92:242,93:[1,193],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{73:[2,89]},{8:243,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,73:[2,123],76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{12:[2,117],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],73:[2,117],76:[2,117],79:[2,117],83:[2,117],88:[2,117],89:[2,117],90:[2,117],96:[2,117],100:[2,117],101:[2,117],104:[2,117],106:[2,117],108:[2,117],110:[2,117],119:[2,117],125:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117],131:[2,117]},{12:[2,118],28:[2,118],30:[2,118],31:[2,118],33:[2,118],34:[2,118],35:[2,118],36:[2,118],37:[2,118],38:[2,118],45:[2,118],46:[2,118],47:[2,118],51:[2,118],52:[2,118],73:[2,118],76:[2,118],79:[2,118],83:[2,118],88:[2,118],89:[2,118],90:[2,118],96:[2,118],100:[2,118],101:[2,118],104:[2,118],106:[2,118],108:[2,118],110:[2,118],119:[2,118],125:[2,118],127:[2,118],128:[2,118],129:[2,118],130:[2,118],131:[2,118]},{1:[2,87],6:[2,87],25:[2,87],26:[2,87],40:[2,87],49:[2,87],54:[2,87],57:[2,87],66:[2,87],67:[2,87],68:[2,87],69:[2,87],71:[2,87],73:[2,87],74:[2,87],78:[2,87],80:[2,87],84:[2,87],85:[2,87],86:[2,87],91:[2,87],93:[2,87],102:[2,87],104:[2,87],105:[2,87],106:[2,87],110:[2,87],118:[2,87],126:[2,87],128:[2,87],129:[2,87],130:[2,87],131:[2,87],132:[2,87],133:[2,87],134:[2,87],135:[2,87],136:[2,87],137:[2,87],138:[2,87]},{1:[2,105],6:[2,105],25:[2,105],26:[2,105],49:[2,105],54:[2,105],57:[2,105],66:[2,105],67:[2,105],68:[2,105],69:[2,105],71:[2,105],73:[2,105],74:[2,105],78:[2,105],84:[2,105],85:[2,105],86:[2,105],91:[2,105],93:[2,105],102:[2,105],104:[2,105],105:[2,105],106:[2,105],110:[2,105],118:[2,105],126:[2,105],128:[2,105],129:[2,105],132:[2,105],133:[2,105],134:[2,105],135:[2,105],136:[2,105],137:[2,105]},{1:[2,36],6:[2,36],25:[2,36],26:[2,36],49:[2,36],54:[2,36],57:[2,36],73:[2,36],78:[2,36],86:[2,36],91:[2,36],93:[2,36],102:[2,36],103:87,104:[2,36],105:[2,36],106:[2,36],109:88,110:[2,36],111:69,118:[2,36],126:[2,36],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:244,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:245,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,110],6:[2,110],25:[2,110],26:[2,110],49:[2,110],54:[2,110],57:[2,110],66:[2,110],67:[2,110],68:[2,110],69:[2,110],71:[2,110],73:[2,110],74:[2,110],78:[2,110],84:[2,110],85:[2,110],86:[2,110],91:[2,110],93:[2,110],102:[2,110],104:[2,110],105:[2,110],106:[2,110],110:[2,110],118:[2,110],126:[2,110],128:[2,110],129:[2,110],132:[2,110],133:[2,110],134:[2,110],135:[2,110],136:[2,110],137:[2,110]},{6:[2,53],25:[2,53],53:246,54:[1,229],86:[2,53]},{6:[2,129],25:[2,129],26:[2,129],54:[2,129],57:[1,247],86:[2,129],91:[2,129],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{50:248,51:[1,60],52:[1,61]},{6:[2,54],25:[2,54],26:[2,54],27:110,28:[1,73],44:111,55:249,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[1,250],25:[1,251]},{6:[2,61],25:[2,61],26:[2,61],49:[2,61],54:[2,61]},{8:252,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,201],6:[2,201],25:[2,201],26:[2,201],49:[2,201],54:[2,201],57:[2,201],73:[2,201],78:[2,201],86:[2,201],91:[2,201],93:[2,201],102:[2,201],103:87,104:[2,201],105:[2,201],106:[2,201],109:88,110:[2,201],111:69,118:[2,201],126:[2,201],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:253,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:254,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,204],6:[2,204],25:[2,204],26:[2,204],49:[2,204],54:[2,204],57:[2,204],73:[2,204],78:[2,204],86:[2,204],91:[2,204],93:[2,204],102:[2,204],103:87,104:[2,204],105:[2,204],106:[2,204],109:88,110:[2,204],111:69,118:[2,204],126:[2,204],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],49:[2,183],54:[2,183],57:[2,183],73:[2,183],78:[2,183],86:[2,183],91:[2,183],93:[2,183],102:[2,183],104:[2,183],105:[2,183],106:[2,183],110:[2,183],118:[2,183],126:[2,183],128:[2,183],129:[2,183],132:[2,183],133:[2,183],134:[2,183],135:[2,183],136:[2,183],137:[2,183]},{8:255,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],49:[2,134],54:[2,134],57:[2,134],73:[2,134],78:[2,134],86:[2,134],91:[2,134],93:[2,134],98:[1,256],102:[2,134],104:[2,134],105:[2,134],106:[2,134],110:[2,134],118:[2,134],126:[2,134],128:[2,134],129:[2,134],132:[2,134],133:[2,134],134:[2,134],135:[2,134],136:[2,134],137:[2,134]},{5:257,25:[1,5]},{27:258,28:[1,73],59:259,76:[1,70]},{120:260,122:219,123:[1,220]},{26:[1,261],121:[1,262],122:263,123:[1,220]},{26:[2,176],121:[2,176],123:[2,176]},{8:265,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],95:264,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,98],5:266,6:[2,98],25:[1,5],26:[2,98],49:[2,98],54:[2,98],57:[2,98],73:[2,98],78:[2,98],86:[2,98],91:[2,98],93:[2,98],102:[2,98],103:87,104:[1,65],105:[2,98],106:[1,66],109:88,110:[1,68],111:69,118:[2,98],126:[2,98],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,101],6:[2,101],25:[2,101],26:[2,101],49:[2,101],54:[2,101],57:[2,101],73:[2,101],78:[2,101],86:[2,101],91:[2,101],93:[2,101],102:[2,101],104:[2,101],105:[2,101],106:[2,101],110:[2,101],118:[2,101],126:[2,101],128:[2,101],129:[2,101],132:[2,101],133:[2,101],134:[2,101],135:[2,101],136:[2,101],137:[2,101]},{8:267,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],49:[2,140],54:[2,140],57:[2,140],66:[2,140],67:[2,140],68:[2,140],69:[2,140],71:[2,140],73:[2,140],74:[2,140],78:[2,140],84:[2,140],85:[2,140],86:[2,140],91:[2,140],93:[2,140],102:[2,140],104:[2,140],105:[2,140],106:[2,140],110:[2,140],118:[2,140],126:[2,140],128:[2,140],129:[2,140],132:[2,140],133:[2,140],134:[2,140],135:[2,140],136:[2,140],137:[2,140]},{6:[1,74],26:[1,268]},{8:269,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,67],12:[2,118],25:[2,67],28:[2,118],30:[2,118],31:[2,118],33:[2,118],34:[2,118],35:[2,118],36:[2,118],37:[2,118],38:[2,118],45:[2,118],46:[2,118],47:[2,118],51:[2,118],52:[2,118],54:[2,67],76:[2,118],79:[2,118],83:[2,118],88:[2,118],89:[2,118],90:[2,118],91:[2,67],96:[2,118],100:[2,118],101:[2,118],104:[2,118],106:[2,118],108:[2,118],110:[2,118],119:[2,118],125:[2,118],127:[2,118],128:[2,118],129:[2,118],130:[2,118],131:[2,118]},{6:[1,271],25:[1,272],91:[1,270]},{6:[2,54],8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[2,54],26:[2,54],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],86:[2,54],88:[1,58],89:[1,59],90:[1,57],91:[2,54],94:273,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],26:[2,53],53:274,54:[1,229]},{1:[2,180],6:[2,180],25:[2,180],26:[2,180],49:[2,180],54:[2,180],57:[2,180],73:[2,180],78:[2,180],86:[2,180],91:[2,180],93:[2,180],102:[2,180],104:[2,180],105:[2,180],106:[2,180],110:[2,180],118:[2,180],121:[2,180],126:[2,180],128:[2,180],129:[2,180],132:[2,180],133:[2,180],134:[2,180],135:[2,180],136:[2,180],137:[2,180]},{8:275,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:276,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{116:[2,158],117:[2,158]},{27:159,28:[1,73],44:160,58:161,59:162,76:[1,70],89:[1,114],90:[1,115],115:277},{1:[2,165],6:[2,165],25:[2,165],26:[2,165],49:[2,165],54:[2,165],57:[2,165],73:[2,165],78:[2,165],86:[2,165],91:[2,165],93:[2,165],102:[2,165],103:87,104:[2,165],105:[1,278],106:[2,165],109:88,110:[2,165],111:69,118:[1,279],126:[2,165],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],49:[2,166],54:[2,166],57:[2,166],73:[2,166],78:[2,166],86:[2,166],91:[2,166],93:[2,166],102:[2,166],103:87,104:[2,166],105:[1,280],106:[2,166],109:88,110:[2,166],111:69,118:[2,166],126:[2,166],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,282],25:[1,283],78:[1,281]},{6:[2,54],11:169,25:[2,54],26:[2,54],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:284,42:168,44:172,46:[1,46],78:[2,54],89:[1,114]},{8:285,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,286],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,86],6:[2,86],25:[2,86],26:[2,86],40:[2,86],49:[2,86],54:[2,86],57:[2,86],66:[2,86],67:[2,86],68:[2,86],69:[2,86],71:[2,86],73:[2,86],74:[2,86],78:[2,86],80:[2,86],84:[2,86],85:[2,86],86:[2,86],91:[2,86],93:[2,86],102:[2,86],104:[2,86],105:[2,86],106:[2,86],110:[2,86],118:[2,86],126:[2,86],128:[2,86],129:[2,86],130:[2,86],131:[2,86],132:[2,86],133:[2,86],134:[2,86],135:[2,86],136:[2,86],137:[2,86],138:[2,86]},{8:287,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,73:[2,121],76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{73:[2,122],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,37],6:[2,37],25:[2,37],26:[2,37],49:[2,37],54:[2,37],57:[2,37],73:[2,37],78:[2,37],86:[2,37],91:[2,37],93:[2,37],102:[2,37],103:87,104:[2,37],105:[2,37],106:[2,37],109:88,110:[2,37],111:69,118:[2,37],126:[2,37],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{26:[1,288],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,271],25:[1,272],86:[1,289]},{6:[2,67],25:[2,67],26:[2,67],54:[2,67],86:[2,67],91:[2,67]},{5:290,25:[1,5]},{6:[2,57],25:[2,57],26:[2,57],49:[2,57],54:[2,57]},{27:110,28:[1,73],44:111,55:291,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[2,55],25:[2,55],26:[2,55],27:110,28:[1,73],44:111,48:292,54:[2,55],55:108,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[2,62],25:[2,62],26:[2,62],49:[2,62],54:[2,62],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{26:[1,293],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,203],6:[2,203],25:[2,203],26:[2,203],49:[2,203],54:[2,203],57:[2,203],73:[2,203],78:[2,203],86:[2,203],91:[2,203],93:[2,203],102:[2,203],103:87,104:[2,203],105:[2,203],106:[2,203],109:88,110:[2,203],111:69,118:[2,203],126:[2,203],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{5:294,25:[1,5],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{5:295,25:[1,5]},{1:[2,135],6:[2,135],25:[2,135],26:[2,135],49:[2,135],54:[2,135],57:[2,135],73:[2,135],78:[2,135],86:[2,135],91:[2,135],93:[2,135],102:[2,135],104:[2,135],105:[2,135],106:[2,135],110:[2,135],118:[2,135],126:[2,135],128:[2,135],129:[2,135],132:[2,135],133:[2,135],134:[2,135],135:[2,135],136:[2,135],137:[2,135]},{5:296,25:[1,5]},{5:297,25:[1,5]},{26:[1,298],121:[1,299],122:263,123:[1,220]},{1:[2,174],6:[2,174],25:[2,174],26:[2,174],49:[2,174],54:[2,174],57:[2,174],73:[2,174],78:[2,174],86:[2,174],91:[2,174],93:[2,174],102:[2,174],104:[2,174],105:[2,174],106:[2,174],110:[2,174],118:[2,174],126:[2,174],128:[2,174],129:[2,174],132:[2,174],133:[2,174],134:[2,174],135:[2,174],136:[2,174],137:[2,174]},{5:300,25:[1,5]},{26:[2,177],121:[2,177],123:[2,177]},{5:301,25:[1,5],54:[1,302]},{25:[2,131],54:[2,131],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,99],6:[2,99],25:[2,99],26:[2,99],49:[2,99],54:[2,99],57:[2,99],73:[2,99],78:[2,99],86:[2,99],91:[2,99],93:[2,99],102:[2,99],104:[2,99],105:[2,99],106:[2,99],110:[2,99],118:[2,99],126:[2,99],128:[2,99],129:[2,99],132:[2,99],133:[2,99],134:[2,99],135:[2,99],136:[2,99],137:[2,99]},{1:[2,102],5:303,6:[2,102],25:[1,5],26:[2,102],49:[2,102],54:[2,102],57:[2,102],73:[2,102],78:[2,102],86:[2,102],91:[2,102],93:[2,102],102:[2,102],103:87,104:[1,65],105:[2,102],106:[1,66],109:88,110:[1,68],111:69,118:[2,102],126:[2,102],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{102:[1,304]},{91:[1,305],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,116],6:[2,116],25:[2,116],26:[2,116],40:[2,116],49:[2,116],54:[2,116],57:[2,116],66:[2,116],67:[2,116],68:[2,116],69:[2,116],71:[2,116],73:[2,116],74:[2,116],78:[2,116],84:[2,116],85:[2,116],86:[2,116],91:[2,116],93:[2,116],102:[2,116],104:[2,116],105:[2,116],106:[2,116],110:[2,116],116:[2,116],117:[2,116],118:[2,116],126:[2,116],128:[2,116],129:[2,116],132:[2,116],133:[2,116],134:[2,116],135:[2,116],136:[2,116],137:[2,116]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],94:306,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:307,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,125],25:[2,125],26:[2,125],54:[2,125],86:[2,125],91:[2,125]},{6:[1,271],25:[1,272],26:[1,308]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],49:[2,143],54:[2,143],57:[2,143],73:[2,143],78:[2,143],86:[2,143],91:[2,143],93:[2,143],102:[2,143],103:87,104:[1,65],105:[2,143],106:[1,66],109:88,110:[1,68],111:69,118:[2,143],126:[2,143],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],49:[2,145],54:[2,145],57:[2,145],73:[2,145],78:[2,145],86:[2,145],91:[2,145],93:[2,145],102:[2,145],103:87,104:[1,65],105:[2,145],106:[1,66],109:88,110:[1,68],111:69,118:[2,145],126:[2,145],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{116:[2,164],117:[2,164]},{8:309,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:310,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:311,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,90],6:[2,90],25:[2,90],26:[2,90],40:[2,90],49:[2,90],54:[2,90],57:[2,90],66:[2,90],67:[2,90],68:[2,90],69:[2,90],71:[2,90],73:[2,90],74:[2,90],78:[2,90],84:[2,90],85:[2,90],86:[2,90],91:[2,90],93:[2,90],102:[2,90],104:[2,90],105:[2,90],106:[2,90],110:[2,90],116:[2,90],117:[2,90],118:[2,90],126:[2,90],128:[2,90],129:[2,90],132:[2,90],133:[2,90],134:[2,90],135:[2,90],136:[2,90],137:[2,90]},{11:169,27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:312,42:168,44:172,46:[1,46],89:[1,114]},{6:[2,91],11:169,25:[2,91],26:[2,91],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:167,42:168,44:172,46:[1,46],54:[2,91],77:313,89:[1,114]},{6:[2,93],25:[2,93],26:[2,93],54:[2,93],78:[2,93]},{6:[2,40],25:[2,40],26:[2,40],54:[2,40],78:[2,40],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:314,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{73:[2,120],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,38],6:[2,38],25:[2,38],26:[2,38],49:[2,38],54:[2,38],57:[2,38],73:[2,38],78:[2,38],86:[2,38],91:[2,38],93:[2,38],102:[2,38],104:[2,38],105:[2,38],106:[2,38],110:[2,38],118:[2,38],126:[2,38],128:[2,38],129:[2,38],132:[2,38],133:[2,38],134:[2,38],135:[2,38],136:[2,38],137:[2,38]},{1:[2,111],6:[2,111],25:[2,111],26:[2,111],49:[2,111],54:[2,111],57:[2,111],66:[2,111],67:[2,111],68:[2,111],69:[2,111],71:[2,111],73:[2,111],74:[2,111],78:[2,111],84:[2,111],85:[2,111],86:[2,111],91:[2,111],93:[2,111],102:[2,111],104:[2,111],105:[2,111],106:[2,111],110:[2,111],118:[2,111],126:[2,111],128:[2,111],129:[2,111],132:[2,111],133:[2,111],134:[2,111],135:[2,111],136:[2,111],137:[2,111]},{1:[2,49],6:[2,49],25:[2,49],26:[2,49],49:[2,49],54:[2,49],57:[2,49],73:[2,49],78:[2,49],86:[2,49],91:[2,49],93:[2,49],102:[2,49],104:[2,49],105:[2,49],106:[2,49],110:[2,49],118:[2,49],126:[2,49],128:[2,49],129:[2,49],132:[2,49],133:[2,49],134:[2,49],135:[2,49],136:[2,49],137:[2,49]},{6:[2,58],25:[2,58],26:[2,58],49:[2,58],54:[2,58]},{6:[2,53],25:[2,53],26:[2,53],53:315,54:[1,204]},{1:[2,202],6:[2,202],25:[2,202],26:[2,202],49:[2,202],54:[2,202],57:[2,202],73:[2,202],78:[2,202],86:[2,202],91:[2,202],93:[2,202],102:[2,202],104:[2,202],105:[2,202],106:[2,202],110:[2,202],118:[2,202],126:[2,202],128:[2,202],129:[2,202],132:[2,202],133:[2,202],134:[2,202],135:[2,202],136:[2,202],137:[2,202]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],49:[2,181],54:[2,181],57:[2,181],73:[2,181],78:[2,181],86:[2,181],91:[2,181],93:[2,181],102:[2,181],104:[2,181],105:[2,181],106:[2,181],110:[2,181],118:[2,181],121:[2,181],126:[2,181],128:[2,181],129:[2,181],132:[2,181],133:[2,181],134:[2,181],135:[2,181],136:[2,181],137:[2,181]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],49:[2,136],54:[2,136],57:[2,136],73:[2,136],78:[2,136],86:[2,136],91:[2,136],93:[2,136],102:[2,136],104:[2,136],105:[2,136],106:[2,136],110:[2,136],118:[2,136],126:[2,136],128:[2,136],129:[2,136],132:[2,136],133:[2,136],134:[2,136],135:[2,136],136:[2,136],137:[2,136]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],49:[2,137],54:[2,137],57:[2,137],73:[2,137],78:[2,137],86:[2,137],91:[2,137],93:[2,137],98:[2,137],102:[2,137],104:[2,137],105:[2,137],106:[2,137],110:[2,137],118:[2,137],126:[2,137],128:[2,137],129:[2,137],132:[2,137],133:[2,137],134:[2,137],135:[2,137],136:[2,137],137:[2,137]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],49:[2,138],54:[2,138],57:[2,138],73:[2,138],78:[2,138],86:[2,138],91:[2,138],93:[2,138],98:[2,138],102:[2,138],104:[2,138],105:[2,138],106:[2,138],110:[2,138],118:[2,138],126:[2,138],128:[2,138],129:[2,138],132:[2,138],133:[2,138],134:[2,138],135:[2,138],136:[2,138],137:[2,138]},{1:[2,172],6:[2,172],25:[2,172],26:[2,172],49:[2,172],54:[2,172],57:[2,172],73:[2,172],78:[2,172],86:[2,172],91:[2,172],93:[2,172],102:[2,172],104:[2,172],105:[2,172],106:[2,172],110:[2,172],118:[2,172],126:[2,172],128:[2,172],129:[2,172],132:[2,172],133:[2,172],134:[2,172],135:[2,172],136:[2,172],137:[2,172]},{5:316,25:[1,5]},{26:[1,317]},{6:[1,318],26:[2,178],121:[2,178],123:[2,178]},{8:319,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,103],6:[2,103],25:[2,103],26:[2,103],49:[2,103],54:[2,103],57:[2,103],73:[2,103],78:[2,103],86:[2,103],91:[2,103],93:[2,103],102:[2,103],104:[2,103],105:[2,103],106:[2,103],110:[2,103],118:[2,103],126:[2,103],128:[2,103],129:[2,103],132:[2,103],133:[2,103],134:[2,103],135:[2,103],136:[2,103],137:[2,103]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],49:[2,141],54:[2,141],57:[2,141],66:[2,141],67:[2,141],68:[2,141],69:[2,141],71:[2,141],73:[2,141],74:[2,141],78:[2,141],84:[2,141],85:[2,141],86:[2,141],91:[2,141],93:[2,141],102:[2,141],104:[2,141],105:[2,141],106:[2,141],110:[2,141],118:[2,141],126:[2,141],128:[2,141],129:[2,141],132:[2,141],133:[2,141],134:[2,141],135:[2,141],136:[2,141],137:[2,141]},{1:[2,119],6:[2,119],25:[2,119],26:[2,119],49:[2,119],54:[2,119],57:[2,119],66:[2,119],67:[2,119],68:[2,119],69:[2,119],71:[2,119],73:[2,119],74:[2,119],78:[2,119],84:[2,119],85:[2,119],86:[2,119],91:[2,119],93:[2,119],102:[2,119],104:[2,119],105:[2,119],106:[2,119],110:[2,119],118:[2,119],126:[2,119],128:[2,119],129:[2,119],132:[2,119],133:[2,119],134:[2,119],135:[2,119],136:[2,119],137:[2,119]},{6:[2,126],25:[2,126],26:[2,126],54:[2,126],86:[2,126],91:[2,126]},{6:[2,53],25:[2,53],26:[2,53],53:320,54:[1,229]},{6:[2,127],25:[2,127],26:[2,127],54:[2,127],86:[2,127],91:[2,127]},{1:[2,167],6:[2,167],25:[2,167],26:[2,167],49:[2,167],54:[2,167],57:[2,167],73:[2,167],78:[2,167],86:[2,167],91:[2,167],93:[2,167],102:[2,167],103:87,104:[2,167],105:[2,167],106:[2,167],109:88,110:[2,167],111:69,118:[1,321],126:[2,167],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,169],6:[2,169],25:[2,169],26:[2,169],49:[2,169],54:[2,169],57:[2,169],73:[2,169],78:[2,169],86:[2,169],91:[2,169],93:[2,169],102:[2,169],103:87,104:[2,169],105:[1,322],106:[2,169],109:88,110:[2,169],111:69,118:[2,169],126:[2,169],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,168],6:[2,168],25:[2,168],26:[2,168],49:[2,168],54:[2,168],57:[2,168],73:[2,168],78:[2,168],86:[2,168],91:[2,168],93:[2,168],102:[2,168],103:87,104:[2,168],105:[2,168],106:[2,168],109:88,110:[2,168],111:69,118:[2,168],126:[2,168],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[2,94],25:[2,94],26:[2,94],54:[2,94],78:[2,94]},{6:[2,53],25:[2,53],26:[2,53],53:323,54:[1,239]},{26:[1,324],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,250],25:[1,251],26:[1,325]},{26:[1,326]},{1:[2,175],6:[2,175],25:[2,175],26:[2,175],49:[2,175],54:[2,175],57:[2,175],73:[2,175],78:[2,175],86:[2,175],91:[2,175],93:[2,175],102:[2,175],104:[2,175],105:[2,175],106:[2,175],110:[2,175],118:[2,175],126:[2,175],128:[2,175],129:[2,175],132:[2,175],133:[2,175],134:[2,175],135:[2,175],136:[2,175],137:[2,175]},{26:[2,179],121:[2,179],123:[2,179]},{25:[2,132],54:[2,132],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,271],25:[1,272],26:[1,327]},{8:328,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:329,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[1,282],25:[1,283],26:[1,330]},{6:[2,41],25:[2,41],26:[2,41],54:[2,41],78:[2,41]},{6:[2,59],25:[2,59],26:[2,59],49:[2,59],54:[2,59]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],49:[2,173],54:[2,173],57:[2,173],73:[2,173],78:[2,173],86:[2,173],91:[2,173],93:[2,173],102:[2,173],104:[2,173],105:[2,173],106:[2,173],110:[2,173],118:[2,173],126:[2,173],128:[2,173],129:[2,173],132:[2,173],133:[2,173],134:[2,173],135:[2,173],136:[2,173],137:[2,173]},{6:[2,128],25:[2,128],26:[2,128],54:[2,128],86:[2,128],91:[2,128]},{1:[2,170],6:[2,170],25:[2,170],26:[2,170],49:[2,170],54:[2,170],57:[2,170],73:[2,170],78:[2,170],86:[2,170],91:[2,170],93:[2,170],102:[2,170],103:87,104:[2,170],105:[2,170],106:[2,170],109:88,110:[2,170],111:69,118:[2,170],126:[2,170],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,171],6:[2,171],25:[2,171],26:[2,171],49:[2,171],54:[2,171],57:[2,171],73:[2,171],78:[2,171],86:[2,171],91:[2,171],93:[2,171],102:[2,171],103:87,104:[2,171],105:[2,171],106:[2,171],109:88,110:[2,171],111:69,118:[2,171],126:[2,171],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[2,95],25:[2,95],26:[2,95],54:[2,95],78:[2,95]}],
+table: [{1:[2,1],3:1,4:2,5:3,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[3]},{1:[2,2],6:[1,74]},{6:[1,75]},{1:[2,4],6:[2,4],26:[2,4],102:[2,4]},{4:77,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[1,76],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,7],6:[2,7],26:[2,7],102:[2,7],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,8],6:[2,8],26:[2,8],102:[2,8],103:90,104:[1,65],106:[1,66],109:91,110:[1,68],111:69,126:[1,89]},{1:[2,12],6:[2,12],25:[2,12],26:[2,12],49:[2,12],54:[2,12],57:[2,12],62:93,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],73:[2,12],74:[1,101],78:[2,12],81:92,84:[1,94],85:[2,108],86:[2,12],91:[2,12],93:[2,12],102:[2,12],104:[2,12],105:[2,12],106:[2,12],110:[2,12],118:[2,12],126:[2,12],128:[2,12],129:[2,12],132:[2,12],133:[2,12],134:[2,12],135:[2,12],136:[2,12],137:[2,12]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],49:[2,13],54:[2,13],57:[2,13],62:103,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],73:[2,13],74:[1,101],78:[2,13],81:102,84:[1,94],85:[2,108],86:[2,13],91:[2,13],93:[2,13],102:[2,13],104:[2,13],105:[2,13],106:[2,13],110:[2,13],118:[2,13],126:[2,13],128:[2,13],129:[2,13],132:[2,13],133:[2,13],134:[2,13],135:[2,13],136:[2,13],137:[2,13]},{1:[2,14],6:[2,14],25:[2,14],26:[2,14],49:[2,14],54:[2,14],57:[2,14],73:[2,14],78:[2,14],86:[2,14],91:[2,14],93:[2,14],102:[2,14],104:[2,14],105:[2,14],106:[2,14],110:[2,14],118:[2,14],126:[2,14],128:[2,14],129:[2,14],132:[2,14],133:[2,14],134:[2,14],135:[2,14],136:[2,14],137:[2,14]},{1:[2,15],6:[2,15],25:[2,15],26:[2,15],49:[2,15],54:[2,15],57:[2,15],73:[2,15],78:[2,15],86:[2,15],91:[2,15],93:[2,15],102:[2,15],104:[2,15],105:[2,15],106:[2,15],110:[2,15],118:[2,15],126:[2,15],128:[2,15],129:[2,15],132:[2,15],133:[2,15],134:[2,15],135:[2,15],136:[2,15],137:[2,15]},{1:[2,16],6:[2,16],25:[2,16],26:[2,16],49:[2,16],54:[2,16],57:[2,16],73:[2,16],78:[2,16],86:[2,16],91:[2,16],93:[2,16],102:[2,16],104:[2,16],105:[2,16],106:[2,16],110:[2,16],118:[2,16],126:[2,16],128:[2,16],129:[2,16],132:[2,16],133:[2,16],134:[2,16],135:[2,16],136:[2,16],137:[2,16]},{1:[2,17],6:[2,17],25:[2,17],26:[2,17],49:[2,17],54:[2,17],57:[2,17],73:[2,17],78:[2,17],86:[2,17],91:[2,17],93:[2,17],102:[2,17],104:[2,17],105:[2,17],106:[2,17],110:[2,17],118:[2,17],126:[2,17],128:[2,17],129:[2,17],132:[2,17],133:[2,17],134:[2,17],135:[2,17],136:[2,17],137:[2,17]},{1:[2,18],6:[2,18],25:[2,18],26:[2,18],49:[2,18],54:[2,18],57:[2,18],73:[2,18],78:[2,18],86:[2,18],91:[2,18],93:[2,18],102:[2,18],104:[2,18],105:[2,18],106:[2,18],110:[2,18],118:[2,18],126:[2,18],128:[2,18],129:[2,18],132:[2,18],133:[2,18],134:[2,18],135:[2,18],136:[2,18],137:[2,18]},{1:[2,19],6:[2,19],25:[2,19],26:[2,19],49:[2,19],54:[2,19],57:[2,19],73:[2,19],78:[2,19],86:[2,19],91:[2,19],93:[2,19],102:[2,19],104:[2,19],105:[2,19],106:[2,19],110:[2,19],118:[2,19],126:[2,19],128:[2,19],129:[2,19],132:[2,19],133:[2,19],134:[2,19],135:[2,19],136:[2,19],137:[2,19]},{1:[2,20],6:[2,20],25:[2,20],26:[2,20],49:[2,20],54:[2,20],57:[2,20],73:[2,20],78:[2,20],86:[2,20],91:[2,20],93:[2,20],102:[2,20],104:[2,20],105:[2,20],106:[2,20],110:[2,20],118:[2,20],126:[2,20],128:[2,20],129:[2,20],132:[2,20],133:[2,20],134:[2,20],135:[2,20],136:[2,20],137:[2,20]},{1:[2,21],6:[2,21],25:[2,21],26:[2,21],49:[2,21],54:[2,21],57:[2,21],73:[2,21],78:[2,21],86:[2,21],91:[2,21],93:[2,21],102:[2,21],104:[2,21],105:[2,21],106:[2,21],110:[2,21],118:[2,21],126:[2,21],128:[2,21],129:[2,21],132:[2,21],133:[2,21],134:[2,21],135:[2,21],136:[2,21],137:[2,21]},{1:[2,22],6:[2,22],25:[2,22],26:[2,22],49:[2,22],54:[2,22],57:[2,22],73:[2,22],78:[2,22],86:[2,22],91:[2,22],93:[2,22],102:[2,22],104:[2,22],105:[2,22],106:[2,22],110:[2,22],118:[2,22],126:[2,22],128:[2,22],129:[2,22],132:[2,22],133:[2,22],134:[2,22],135:[2,22],136:[2,22],137:[2,22]},{1:[2,23],6:[2,23],25:[2,23],26:[2,23],49:[2,23],54:[2,23],57:[2,23],73:[2,23],78:[2,23],86:[2,23],91:[2,23],93:[2,23],102:[2,23],104:[2,23],105:[2,23],106:[2,23],110:[2,23],118:[2,23],126:[2,23],128:[2,23],129:[2,23],132:[2,23],133:[2,23],134:[2,23],135:[2,23],136:[2,23],137:[2,23]},{1:[2,9],6:[2,9],26:[2,9],102:[2,9],104:[2,9],106:[2,9],110:[2,9],126:[2,9]},{1:[2,10],6:[2,10],26:[2,10],102:[2,10],104:[2,10],106:[2,10],110:[2,10],126:[2,10]},{1:[2,11],6:[2,11],26:[2,11],102:[2,11],104:[2,11],106:[2,11],110:[2,11],126:[2,11]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],40:[1,104],49:[2,75],54:[2,75],57:[2,75],66:[2,75],67:[2,75],68:[2,75],69:[2,75],71:[2,75],73:[2,75],74:[2,75],78:[2,75],84:[2,75],85:[2,75],86:[2,75],91:[2,75],93:[2,75],102:[2,75],104:[2,75],105:[2,75],106:[2,75],110:[2,75],118:[2,75],126:[2,75],128:[2,75],129:[2,75],132:[2,75],133:[2,75],134:[2,75],135:[2,75],136:[2,75],137:[2,75]},{1:[2,76],6:[2,76],25:[2,76],26:[2,76],49:[2,76],54:[2,76],57:[2,76],66:[2,76],67:[2,76],68:[2,76],69:[2,76],71:[2,76],73:[2,76],74:[2,76],78:[2,76],84:[2,76],85:[2,76],86:[2,76],91:[2,76],93:[2,76],102:[2,76],104:[2,76],105:[2,76],106:[2,76],110:[2,76],118:[2,76],126:[2,76],128:[2,76],129:[2,76],132:[2,76],133:[2,76],134:[2,76],135:[2,76],136:[2,76],137:[2,76]},{1:[2,77],6:[2,77],25:[2,77],26:[2,77],49:[2,77],54:[2,77],57:[2,77],66:[2,77],67:[2,77],68:[2,77],69:[2,77],71:[2,77],73:[2,77],74:[2,77],78:[2,77],84:[2,77],85:[2,77],86:[2,77],91:[2,77],93:[2,77],102:[2,77],104:[2,77],105:[2,77],106:[2,77],110:[2,77],118:[2,77],126:[2,77],128:[2,77],129:[2,77],132:[2,77],133:[2,77],134:[2,77],135:[2,77],136:[2,77],137:[2,77]},{1:[2,78],6:[2,78],25:[2,78],26:[2,78],49:[2,78],54:[2,78],57:[2,78],66:[2,78],67:[2,78],68:[2,78],69:[2,78],71:[2,78],73:[2,78],74:[2,78],78:[2,78],84:[2,78],85:[2,78],86:[2,78],91:[2,78],93:[2,78],102:[2,78],104:[2,78],105:[2,78],106:[2,78],110:[2,78],118:[2,78],126:[2,78],128:[2,78],129:[2,78],132:[2,78],133:[2,78],134:[2,78],135:[2,78],136:[2,78],137:[2,78]},{1:[2,79],6:[2,79],25:[2,79],26:[2,79],49:[2,79],54:[2,79],57:[2,79],66:[2,79],67:[2,79],68:[2,79],69:[2,79],71:[2,79],73:[2,79],74:[2,79],78:[2,79],84:[2,79],85:[2,79],86:[2,79],91:[2,79],93:[2,79],102:[2,79],104:[2,79],105:[2,79],106:[2,79],110:[2,79],118:[2,79],126:[2,79],128:[2,79],129:[2,79],132:[2,79],133:[2,79],134:[2,79],135:[2,79],136:[2,79],137:[2,79]},{1:[2,106],6:[2,106],25:[2,106],26:[2,106],49:[2,106],54:[2,106],57:[2,106],66:[2,106],67:[2,106],68:[2,106],69:[2,106],71:[2,106],73:[2,106],74:[2,106],78:[2,106],82:105,84:[2,106],85:[1,106],86:[2,106],91:[2,106],93:[2,106],102:[2,106],104:[2,106],105:[2,106],106:[2,106],110:[2,106],118:[2,106],126:[2,106],128:[2,106],129:[2,106],132:[2,106],133:[2,106],134:[2,106],135:[2,106],136:[2,106],137:[2,106]},{6:[2,55],25:[2,55],27:110,28:[1,73],44:111,48:107,49:[2,55],54:[2,55],55:108,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{5:116,25:[1,5]},{8:117,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:119,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:120,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{13:122,14:123,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:124,44:63,58:47,59:48,61:121,63:25,64:26,65:27,76:[1,70],83:[1,28],88:[1,58],89:[1,59],90:[1,57],101:[1,56]},{13:122,14:123,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:124,44:63,58:47,59:48,61:125,63:25,64:26,65:27,76:[1,70],83:[1,28],88:[1,58],89:[1,59],90:[1,57],101:[1,56]},{1:[2,72],6:[2,72],25:[2,72],26:[2,72],40:[2,72],49:[2,72],54:[2,72],57:[2,72],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,72],74:[2,72],78:[2,72],80:[1,129],84:[2,72],85:[2,72],86:[2,72],91:[2,72],93:[2,72],102:[2,72],104:[2,72],105:[2,72],106:[2,72],110:[2,72],118:[2,72],126:[2,72],128:[2,72],129:[2,72],130:[1,126],131:[1,127],132:[2,72],133:[2,72],134:[2,72],135:[2,72],136:[2,72],137:[2,72],138:[1,128]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],49:[2,183],54:[2,183],57:[2,183],73:[2,183],78:[2,183],86:[2,183],91:[2,183],93:[2,183],102:[2,183],104:[2,183],105:[2,183],106:[2,183],110:[2,183],118:[2,183],121:[1,130],126:[2,183],128:[2,183],129:[2,183],132:[2,183],133:[2,183],134:[2,183],135:[2,183],136:[2,183],137:[2,183]},{5:131,25:[1,5]},{5:132,25:[1,5]},{1:[2,150],6:[2,150],25:[2,150],26:[2,150],49:[2,150],54:[2,150],57:[2,150],73:[2,150],78:[2,150],86:[2,150],91:[2,150],93:[2,150],102:[2,150],104:[2,150],105:[2,150],106:[2,150],110:[2,150],118:[2,150],126:[2,150],128:[2,150],129:[2,150],132:[2,150],133:[2,150],134:[2,150],135:[2,150],136:[2,150],137:[2,150]},{5:133,25:[1,5]},{8:134,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,135],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,96],5:136,6:[2,96],13:122,14:123,25:[1,5],26:[2,96],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:124,44:63,49:[2,96],54:[2,96],57:[2,96],58:47,59:48,61:138,63:25,64:26,65:27,73:[2,96],76:[1,70],78:[2,96],80:[1,137],83:[1,28],86:[2,96],88:[1,58],89:[1,59],90:[1,57],91:[2,96],93:[2,96],101:[1,56],102:[2,96],104:[2,96],105:[2,96],106:[2,96],110:[2,96],118:[2,96],126:[2,96],128:[2,96],129:[2,96],132:[2,96],133:[2,96],134:[2,96],135:[2,96],136:[2,96],137:[2,96]},{8:139,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,47],6:[2,47],8:140,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,47],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],102:[2,47],103:39,104:[2,47],106:[2,47],107:40,108:[1,67],109:41,110:[2,47],111:69,119:[1,42],124:37,125:[1,64],126:[2,47],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,48],6:[2,48],25:[2,48],26:[2,48],54:[2,48],78:[2,48],102:[2,48],104:[2,48],106:[2,48],110:[2,48],126:[2,48]},{1:[2,73],6:[2,73],25:[2,73],26:[2,73],40:[2,73],49:[2,73],54:[2,73],57:[2,73],66:[2,73],67:[2,73],68:[2,73],69:[2,73],71:[2,73],73:[2,73],74:[2,73],78:[2,73],84:[2,73],85:[2,73],86:[2,73],91:[2,73],93:[2,73],102:[2,73],104:[2,73],105:[2,73],106:[2,73],110:[2,73],118:[2,73],126:[2,73],128:[2,73],129:[2,73],132:[2,73],133:[2,73],134:[2,73],135:[2,73],136:[2,73],137:[2,73]},{1:[2,74],6:[2,74],25:[2,74],26:[2,74],40:[2,74],49:[2,74],54:[2,74],57:[2,74],66:[2,74],67:[2,74],68:[2,74],69:[2,74],71:[2,74],73:[2,74],74:[2,74],78:[2,74],84:[2,74],85:[2,74],86:[2,74],91:[2,74],93:[2,74],102:[2,74],104:[2,74],105:[2,74],106:[2,74],110:[2,74],118:[2,74],126:[2,74],128:[2,74],129:[2,74],132:[2,74],133:[2,74],134:[2,74],135:[2,74],136:[2,74],137:[2,74]},{1:[2,29],6:[2,29],25:[2,29],26:[2,29],49:[2,29],54:[2,29],57:[2,29],66:[2,29],67:[2,29],68:[2,29],69:[2,29],71:[2,29],73:[2,29],74:[2,29],78:[2,29],84:[2,29],85:[2,29],86:[2,29],91:[2,29],93:[2,29],102:[2,29],104:[2,29],105:[2,29],106:[2,29],110:[2,29],118:[2,29],126:[2,29],128:[2,29],129:[2,29],132:[2,29],133:[2,29],134:[2,29],135:[2,29],136:[2,29],137:[2,29]},{1:[2,30],6:[2,30],25:[2,30],26:[2,30],49:[2,30],54:[2,30],57:[2,30],66:[2,30],67:[2,30],68:[2,30],69:[2,30],71:[2,30],73:[2,30],74:[2,30],78:[2,30],84:[2,30],85:[2,30],86:[2,30],91:[2,30],93:[2,30],102:[2,30],104:[2,30],105:[2,30],106:[2,30],110:[2,30],118:[2,30],126:[2,30],128:[2,30],129:[2,30],132:[2,30],133:[2,30],134:[2,30],135:[2,30],136:[2,30],137:[2,30]},{1:[2,31],6:[2,31],25:[2,31],26:[2,31],49:[2,31],54:[2,31],57:[2,31],66:[2,31],67:[2,31],68:[2,31],69:[2,31],71:[2,31],73:[2,31],74:[2,31],78:[2,31],84:[2,31],85:[2,31],86:[2,31],91:[2,31],93:[2,31],102:[2,31],104:[2,31],105:[2,31],106:[2,31],110:[2,31],118:[2,31],126:[2,31],128:[2,31],129:[2,31],132:[2,31],133:[2,31],134:[2,31],135:[2,31],136:[2,31],137:[2,31]},{1:[2,32],6:[2,32],25:[2,32],26:[2,32],49:[2,32],54:[2,32],57:[2,32],66:[2,32],67:[2,32],68:[2,32],69:[2,32],71:[2,32],73:[2,32],74:[2,32],78:[2,32],84:[2,32],85:[2,32],86:[2,32],91:[2,32],93:[2,32],102:[2,32],104:[2,32],105:[2,32],106:[2,32],110:[2,32],118:[2,32],126:[2,32],128:[2,32],129:[2,32],132:[2,32],133:[2,32],134:[2,32],135:[2,32],136:[2,32],137:[2,32]},{1:[2,33],6:[2,33],25:[2,33],26:[2,33],49:[2,33],54:[2,33],57:[2,33],66:[2,33],67:[2,33],68:[2,33],69:[2,33],71:[2,33],73:[2,33],74:[2,33],78:[2,33],84:[2,33],85:[2,33],86:[2,33],91:[2,33],93:[2,33],102:[2,33],104:[2,33],105:[2,33],106:[2,33],110:[2,33],118:[2,33],126:[2,33],128:[2,33],129:[2,33],132:[2,33],133:[2,33],134:[2,33],135:[2,33],136:[2,33],137:[2,33]},{1:[2,34],6:[2,34],25:[2,34],26:[2,34],49:[2,34],54:[2,34],57:[2,34],66:[2,34],67:[2,34],68:[2,34],69:[2,34],71:[2,34],73:[2,34],74:[2,34],78:[2,34],84:[2,34],85:[2,34],86:[2,34],91:[2,34],93:[2,34],102:[2,34],104:[2,34],105:[2,34],106:[2,34],110:[2,34],118:[2,34],126:[2,34],128:[2,34],129:[2,34],132:[2,34],133:[2,34],134:[2,34],135:[2,34],136:[2,34],137:[2,34]},{1:[2,35],6:[2,35],25:[2,35],26:[2,35],49:[2,35],54:[2,35],57:[2,35],66:[2,35],67:[2,35],68:[2,35],69:[2,35],71:[2,35],73:[2,35],74:[2,35],78:[2,35],84:[2,35],85:[2,35],86:[2,35],91:[2,35],93:[2,35],102:[2,35],104:[2,35],105:[2,35],106:[2,35],110:[2,35],118:[2,35],126:[2,35],128:[2,35],129:[2,35],132:[2,35],133:[2,35],134:[2,35],135:[2,35],136:[2,35],137:[2,35]},{4:141,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,142],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:143,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:145,88:[1,58],89:[1,59],90:[1,57],91:[1,144],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,112],6:[2,112],25:[2,112],26:[2,112],49:[2,112],54:[2,112],57:[2,112],66:[2,112],67:[2,112],68:[2,112],69:[2,112],71:[2,112],73:[2,112],74:[2,112],78:[2,112],84:[2,112],85:[2,112],86:[2,112],91:[2,112],93:[2,112],102:[2,112],104:[2,112],105:[2,112],106:[2,112],110:[2,112],118:[2,112],126:[2,112],128:[2,112],129:[2,112],132:[2,112],133:[2,112],134:[2,112],135:[2,112],136:[2,112],137:[2,112]},{1:[2,113],6:[2,113],25:[2,113],26:[2,113],27:149,28:[1,73],49:[2,113],54:[2,113],57:[2,113],66:[2,113],67:[2,113],68:[2,113],69:[2,113],71:[2,113],73:[2,113],74:[2,113],78:[2,113],84:[2,113],85:[2,113],86:[2,113],91:[2,113],93:[2,113],102:[2,113],104:[2,113],105:[2,113],106:[2,113],110:[2,113],118:[2,113],126:[2,113],128:[2,113],129:[2,113],132:[2,113],133:[2,113],134:[2,113],135:[2,113],136:[2,113],137:[2,113]},{25:[2,51]},{25:[2,52]},{1:[2,68],6:[2,68],25:[2,68],26:[2,68],40:[2,68],49:[2,68],54:[2,68],57:[2,68],66:[2,68],67:[2,68],68:[2,68],69:[2,68],71:[2,68],73:[2,68],74:[2,68],78:[2,68],80:[2,68],84:[2,68],85:[2,68],86:[2,68],91:[2,68],93:[2,68],102:[2,68],104:[2,68],105:[2,68],106:[2,68],110:[2,68],118:[2,68],126:[2,68],128:[2,68],129:[2,68],130:[2,68],131:[2,68],132:[2,68],133:[2,68],134:[2,68],135:[2,68],136:[2,68],137:[2,68],138:[2,68]},{1:[2,71],6:[2,71],25:[2,71],26:[2,71],40:[2,71],49:[2,71],54:[2,71],57:[2,71],66:[2,71],67:[2,71],68:[2,71],69:[2,71],71:[2,71],73:[2,71],74:[2,71],78:[2,71],80:[2,71],84:[2,71],85:[2,71],86:[2,71],91:[2,71],93:[2,71],102:[2,71],104:[2,71],105:[2,71],106:[2,71],110:[2,71],118:[2,71],126:[2,71],128:[2,71],129:[2,71],130:[2,71],131:[2,71],132:[2,71],133:[2,71],134:[2,71],135:[2,71],136:[2,71],137:[2,71],138:[2,71]},{8:150,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:151,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:152,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{5:153,8:154,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{27:159,28:[1,73],44:160,58:161,59:162,64:155,76:[1,70],89:[1,114],90:[1,57],113:156,114:[1,157],115:158},{112:163,116:[1,164],117:[1,165]},{6:[2,91],11:169,25:[2,91],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:167,42:168,44:172,46:[1,46],54:[2,91],77:166,78:[2,91],89:[1,114]},{1:[2,27],6:[2,27],25:[2,27],26:[2,27],43:[2,27],49:[2,27],54:[2,27],57:[2,27],66:[2,27],67:[2,27],68:[2,27],69:[2,27],71:[2,27],73:[2,27],74:[2,27],78:[2,27],84:[2,27],85:[2,27],86:[2,27],91:[2,27],93:[2,27],102:[2,27],104:[2,27],105:[2,27],106:[2,27],110:[2,27],118:[2,27],126:[2,27],128:[2,27],129:[2,27],132:[2,27],133:[2,27],134:[2,27],135:[2,27],136:[2,27],137:[2,27]},{1:[2,28],6:[2,28],25:[2,28],26:[2,28],43:[2,28],49:[2,28],54:[2,28],57:[2,28],66:[2,28],67:[2,28],68:[2,28],69:[2,28],71:[2,28],73:[2,28],74:[2,28],78:[2,28],84:[2,28],85:[2,28],86:[2,28],91:[2,28],93:[2,28],102:[2,28],104:[2,28],105:[2,28],106:[2,28],110:[2,28],118:[2,28],126:[2,28],128:[2,28],129:[2,28],132:[2,28],133:[2,28],134:[2,28],135:[2,28],136:[2,28],137:[2,28]},{1:[2,26],6:[2,26],25:[2,26],26:[2,26],40:[2,26],43:[2,26],49:[2,26],54:[2,26],57:[2,26],66:[2,26],67:[2,26],68:[2,26],69:[2,26],71:[2,26],73:[2,26],74:[2,26],78:[2,26],80:[2,26],84:[2,26],85:[2,26],86:[2,26],91:[2,26],93:[2,26],102:[2,26],104:[2,26],105:[2,26],106:[2,26],110:[2,26],116:[2,26],117:[2,26],118:[2,26],126:[2,26],128:[2,26],129:[2,26],130:[2,26],131:[2,26],132:[2,26],133:[2,26],134:[2,26],135:[2,26],136:[2,26],137:[2,26],138:[2,26]},{1:[2,6],6:[2,6],7:173,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,6],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],102:[2,6],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,3]},{1:[2,24],6:[2,24],25:[2,24],26:[2,24],49:[2,24],54:[2,24],57:[2,24],73:[2,24],78:[2,24],86:[2,24],91:[2,24],93:[2,24],98:[2,24],99:[2,24],102:[2,24],104:[2,24],105:[2,24],106:[2,24],110:[2,24],118:[2,24],121:[2,24],123:[2,24],126:[2,24],128:[2,24],129:[2,24],132:[2,24],133:[2,24],134:[2,24],135:[2,24],136:[2,24],137:[2,24]},{6:[1,74],26:[1,174]},{1:[2,194],6:[2,194],25:[2,194],26:[2,194],49:[2,194],54:[2,194],57:[2,194],73:[2,194],78:[2,194],86:[2,194],91:[2,194],93:[2,194],102:[2,194],104:[2,194],105:[2,194],106:[2,194],110:[2,194],118:[2,194],126:[2,194],128:[2,194],129:[2,194],132:[2,194],133:[2,194],134:[2,194],135:[2,194],136:[2,194],137:[2,194]},{8:175,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:176,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:177,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:178,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:179,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:180,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:181,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:182,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,149],6:[2,149],25:[2,149],26:[2,149],49:[2,149],54:[2,149],57:[2,149],73:[2,149],78:[2,149],86:[2,149],91:[2,149],93:[2,149],102:[2,149],104:[2,149],105:[2,149],106:[2,149],110:[2,149],118:[2,149],126:[2,149],128:[2,149],129:[2,149],132:[2,149],133:[2,149],134:[2,149],135:[2,149],136:[2,149],137:[2,149]},{1:[2,154],6:[2,154],25:[2,154],26:[2,154],49:[2,154],54:[2,154],57:[2,154],73:[2,154],78:[2,154],86:[2,154],91:[2,154],93:[2,154],102:[2,154],104:[2,154],105:[2,154],106:[2,154],110:[2,154],118:[2,154],126:[2,154],128:[2,154],129:[2,154],132:[2,154],133:[2,154],134:[2,154],135:[2,154],136:[2,154],137:[2,154]},{8:183,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,148],6:[2,148],25:[2,148],26:[2,148],49:[2,148],54:[2,148],57:[2,148],73:[2,148],78:[2,148],86:[2,148],91:[2,148],93:[2,148],102:[2,148],104:[2,148],105:[2,148],106:[2,148],110:[2,148],118:[2,148],126:[2,148],128:[2,148],129:[2,148],132:[2,148],133:[2,148],134:[2,148],135:[2,148],136:[2,148],137:[2,148]},{1:[2,153],6:[2,153],25:[2,153],26:[2,153],49:[2,153],54:[2,153],57:[2,153],73:[2,153],78:[2,153],86:[2,153],91:[2,153],93:[2,153],102:[2,153],104:[2,153],105:[2,153],106:[2,153],110:[2,153],118:[2,153],126:[2,153],128:[2,153],129:[2,153],132:[2,153],133:[2,153],134:[2,153],135:[2,153],136:[2,153],137:[2,153]},{82:184,85:[1,106]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],40:[2,69],49:[2,69],54:[2,69],57:[2,69],66:[2,69],67:[2,69],68:[2,69],69:[2,69],71:[2,69],73:[2,69],74:[2,69],78:[2,69],80:[2,69],84:[2,69],85:[2,69],86:[2,69],91:[2,69],93:[2,69],102:[2,69],104:[2,69],105:[2,69],106:[2,69],110:[2,69],118:[2,69],126:[2,69],128:[2,69],129:[2,69],130:[2,69],131:[2,69],132:[2,69],133:[2,69],134:[2,69],135:[2,69],136:[2,69],137:[2,69],138:[2,69]},{85:[2,109]},{27:185,28:[1,73]},{27:186,28:[1,73]},{1:[2,84],6:[2,84],25:[2,84],26:[2,84],27:187,28:[1,73],40:[2,84],49:[2,84],54:[2,84],57:[2,84],66:[2,84],67:[2,84],68:[2,84],69:[2,84],71:[2,84],73:[2,84],74:[2,84],78:[2,84],80:[2,84],84:[2,84],85:[2,84],86:[2,84],91:[2,84],93:[2,84],102:[2,84],104:[2,84],105:[2,84],106:[2,84],110:[2,84],118:[2,84],126:[2,84],128:[2,84],129:[2,84],130:[2,84],131:[2,84],132:[2,84],133:[2,84],134:[2,84],135:[2,84],136:[2,84],137:[2,84],138:[2,84]},{27:188,28:[1,73]},{1:[2,85],6:[2,85],25:[2,85],26:[2,85],40:[2,85],49:[2,85],54:[2,85],57:[2,85],66:[2,85],67:[2,85],68:[2,85],69:[2,85],71:[2,85],73:[2,85],74:[2,85],78:[2,85],80:[2,85],84:[2,85],85:[2,85],86:[2,85],91:[2,85],93:[2,85],102:[2,85],104:[2,85],105:[2,85],106:[2,85],110:[2,85],118:[2,85],126:[2,85],128:[2,85],129:[2,85],130:[2,85],131:[2,85],132:[2,85],133:[2,85],134:[2,85],135:[2,85],136:[2,85],137:[2,85],138:[2,85]},{8:190,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],57:[1,194],58:47,59:48,61:36,63:25,64:26,65:27,72:189,75:191,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],92:192,93:[1,193],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{70:195,71:[1,100],74:[1,101]},{82:196,85:[1,106]},{1:[2,70],6:[2,70],25:[2,70],26:[2,70],40:[2,70],49:[2,70],54:[2,70],57:[2,70],66:[2,70],67:[2,70],68:[2,70],69:[2,70],71:[2,70],73:[2,70],74:[2,70],78:[2,70],80:[2,70],84:[2,70],85:[2,70],86:[2,70],91:[2,70],93:[2,70],102:[2,70],104:[2,70],105:[2,70],106:[2,70],110:[2,70],118:[2,70],126:[2,70],128:[2,70],129:[2,70],130:[2,70],131:[2,70],132:[2,70],133:[2,70],134:[2,70],135:[2,70],136:[2,70],137:[2,70],138:[2,70]},{6:[1,198],8:197,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,199],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,107],6:[2,107],25:[2,107],26:[2,107],49:[2,107],54:[2,107],57:[2,107],66:[2,107],67:[2,107],68:[2,107],69:[2,107],71:[2,107],73:[2,107],74:[2,107],78:[2,107],84:[2,107],85:[2,107],86:[2,107],91:[2,107],93:[2,107],102:[2,107],104:[2,107],105:[2,107],106:[2,107],110:[2,107],118:[2,107],126:[2,107],128:[2,107],129:[2,107],132:[2,107],133:[2,107],134:[2,107],135:[2,107],136:[2,107],137:[2,107]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],86:[1,200],87:201,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],49:[1,203],53:205,54:[1,204]},{6:[2,56],25:[2,56],26:[2,56],49:[2,56],54:[2,56]},{6:[2,60],25:[2,60],26:[2,60],40:[1,207],49:[2,60],54:[2,60],57:[1,206]},{6:[2,63],25:[2,63],26:[2,63],40:[2,63],49:[2,63],54:[2,63],57:[2,63]},{6:[2,64],25:[2,64],26:[2,64],40:[2,64],49:[2,64],54:[2,64],57:[2,64]},{6:[2,65],25:[2,65],26:[2,65],40:[2,65],49:[2,65],54:[2,65],57:[2,65]},{6:[2,66],25:[2,66],26:[2,66],40:[2,66],49:[2,66],54:[2,66],57:[2,66]},{27:149,28:[1,73]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:145,88:[1,58],89:[1,59],90:[1,57],91:[1,144],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,50],6:[2,50],25:[2,50],26:[2,50],49:[2,50],54:[2,50],57:[2,50],73:[2,50],78:[2,50],86:[2,50],91:[2,50],93:[2,50],102:[2,50],104:[2,50],105:[2,50],106:[2,50],110:[2,50],118:[2,50],126:[2,50],128:[2,50],129:[2,50],132:[2,50],133:[2,50],134:[2,50],135:[2,50],136:[2,50],137:[2,50]},{1:[2,187],6:[2,187],25:[2,187],26:[2,187],49:[2,187],54:[2,187],57:[2,187],73:[2,187],78:[2,187],86:[2,187],91:[2,187],93:[2,187],102:[2,187],103:87,104:[2,187],105:[2,187],106:[2,187],109:88,110:[2,187],111:69,118:[2,187],126:[2,187],128:[2,187],129:[2,187],132:[1,78],133:[2,187],134:[2,187],135:[2,187],136:[2,187],137:[2,187]},{103:90,104:[1,65],106:[1,66],109:91,110:[1,68],111:69,126:[1,89]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],49:[2,188],54:[2,188],57:[2,188],73:[2,188],78:[2,188],86:[2,188],91:[2,188],93:[2,188],102:[2,188],103:87,104:[2,188],105:[2,188],106:[2,188],109:88,110:[2,188],111:69,118:[2,188],126:[2,188],128:[2,188],129:[2,188],132:[1,78],133:[2,188],134:[2,188],135:[2,188],136:[2,188],137:[2,188]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],49:[2,189],54:[2,189],57:[2,189],73:[2,189],78:[2,189],86:[2,189],91:[2,189],93:[2,189],102:[2,189],103:87,104:[2,189],105:[2,189],106:[2,189],109:88,110:[2,189],111:69,118:[2,189],126:[2,189],128:[2,189],129:[2,189],132:[1,78],133:[2,189],134:[2,189],135:[2,189],136:[2,189],137:[2,189]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],49:[2,190],54:[2,190],57:[2,190],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,190],74:[2,72],78:[2,190],84:[2,72],85:[2,72],86:[2,190],91:[2,190],93:[2,190],102:[2,190],104:[2,190],105:[2,190],106:[2,190],110:[2,190],118:[2,190],126:[2,190],128:[2,190],129:[2,190],132:[2,190],133:[2,190],134:[2,190],135:[2,190],136:[2,190],137:[2,190]},{62:93,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],74:[1,101],81:92,84:[1,94],85:[2,108]},{62:103,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],74:[1,101],81:102,84:[1,94],85:[2,108]},{66:[2,75],67:[2,75],68:[2,75],69:[2,75],71:[2,75],74:[2,75],84:[2,75],85:[2,75]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],49:[2,191],54:[2,191],57:[2,191],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,191],74:[2,72],78:[2,191],84:[2,72],85:[2,72],86:[2,191],91:[2,191],93:[2,191],102:[2,191],104:[2,191],105:[2,191],106:[2,191],110:[2,191],118:[2,191],126:[2,191],128:[2,191],129:[2,191],132:[2,191],133:[2,191],134:[2,191],135:[2,191],136:[2,191],137:[2,191]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],49:[2,192],54:[2,192],57:[2,192],73:[2,192],78:[2,192],86:[2,192],91:[2,192],93:[2,192],102:[2,192],104:[2,192],105:[2,192],106:[2,192],110:[2,192],118:[2,192],126:[2,192],128:[2,192],129:[2,192],132:[2,192],133:[2,192],134:[2,192],135:[2,192],136:[2,192],137:[2,192]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],49:[2,193],54:[2,193],57:[2,193],73:[2,193],78:[2,193],86:[2,193],91:[2,193],93:[2,193],102:[2,193],104:[2,193],105:[2,193],106:[2,193],110:[2,193],118:[2,193],126:[2,193],128:[2,193],129:[2,193],132:[2,193],133:[2,193],134:[2,193],135:[2,193],136:[2,193],137:[2,193]},{6:[1,210],8:208,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,209],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:211,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{5:212,25:[1,5],125:[1,213]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],49:[2,133],54:[2,133],57:[2,133],73:[2,133],78:[2,133],86:[2,133],91:[2,133],93:[2,133],97:214,98:[1,215],99:[1,216],102:[2,133],104:[2,133],105:[2,133],106:[2,133],110:[2,133],118:[2,133],126:[2,133],128:[2,133],129:[2,133],132:[2,133],133:[2,133],134:[2,133],135:[2,133],136:[2,133],137:[2,133]},{1:[2,147],6:[2,147],25:[2,147],26:[2,147],49:[2,147],54:[2,147],57:[2,147],73:[2,147],78:[2,147],86:[2,147],91:[2,147],93:[2,147],102:[2,147],104:[2,147],105:[2,147],106:[2,147],110:[2,147],118:[2,147],126:[2,147],128:[2,147],129:[2,147],132:[2,147],133:[2,147],134:[2,147],135:[2,147],136:[2,147],137:[2,147]},{1:[2,155],6:[2,155],25:[2,155],26:[2,155],49:[2,155],54:[2,155],57:[2,155],73:[2,155],78:[2,155],86:[2,155],91:[2,155],93:[2,155],102:[2,155],104:[2,155],105:[2,155],106:[2,155],110:[2,155],118:[2,155],126:[2,155],128:[2,155],129:[2,155],132:[2,155],133:[2,155],134:[2,155],135:[2,155],136:[2,155],137:[2,155]},{25:[1,217],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{120:218,122:219,123:[1,220]},{1:[2,97],6:[2,97],25:[2,97],26:[2,97],49:[2,97],54:[2,97],57:[2,97],73:[2,97],78:[2,97],86:[2,97],91:[2,97],93:[2,97],102:[2,97],104:[2,97],105:[2,97],106:[2,97],110:[2,97],118:[2,97],126:[2,97],128:[2,97],129:[2,97],132:[2,97],133:[2,97],134:[2,97],135:[2,97],136:[2,97],137:[2,97]},{8:221,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,100],5:222,6:[2,100],25:[1,5],26:[2,100],49:[2,100],54:[2,100],57:[2,100],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,100],74:[2,72],78:[2,100],80:[1,223],84:[2,72],85:[2,72],86:[2,100],91:[2,100],93:[2,100],102:[2,100],104:[2,100],105:[2,100],106:[2,100],110:[2,100],118:[2,100],126:[2,100],128:[2,100],129:[2,100],132:[2,100],133:[2,100],134:[2,100],135:[2,100],136:[2,100],137:[2,100]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],49:[2,140],54:[2,140],57:[2,140],73:[2,140],78:[2,140],86:[2,140],91:[2,140],93:[2,140],102:[2,140],103:87,104:[2,140],105:[2,140],106:[2,140],109:88,110:[2,140],111:69,118:[2,140],126:[2,140],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,46],6:[2,46],26:[2,46],102:[2,46],103:87,104:[2,46],106:[2,46],109:88,110:[2,46],111:69,126:[2,46],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,74],102:[1,224]},{4:225,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,129],25:[2,129],54:[2,129],57:[1,227],91:[2,129],92:226,93:[1,193],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,115],6:[2,115],25:[2,115],26:[2,115],40:[2,115],49:[2,115],54:[2,115],57:[2,115],66:[2,115],67:[2,115],68:[2,115],69:[2,115],71:[2,115],73:[2,115],74:[2,115],78:[2,115],84:[2,115],85:[2,115],86:[2,115],91:[2,115],93:[2,115],102:[2,115],104:[2,115],105:[2,115],106:[2,115],110:[2,115],116:[2,115],117:[2,115],118:[2,115],126:[2,115],128:[2,115],129:[2,115],132:[2,115],133:[2,115],134:[2,115],135:[2,115],136:[2,115],137:[2,115]},{6:[2,53],25:[2,53],53:228,54:[1,229],91:[2,53]},{6:[2,124],25:[2,124],26:[2,124],54:[2,124],86:[2,124],91:[2,124]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:230,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,130],25:[2,130],26:[2,130],54:[2,130],86:[2,130],91:[2,130]},{1:[2,114],6:[2,114],25:[2,114],26:[2,114],40:[2,114],43:[2,114],49:[2,114],54:[2,114],57:[2,114],66:[2,114],67:[2,114],68:[2,114],69:[2,114],71:[2,114],73:[2,114],74:[2,114],78:[2,114],80:[2,114],84:[2,114],85:[2,114],86:[2,114],91:[2,114],93:[2,114],102:[2,114],104:[2,114],105:[2,114],106:[2,114],110:[2,114],116:[2,114],117:[2,114],118:[2,114],126:[2,114],128:[2,114],129:[2,114],130:[2,114],131:[2,114],132:[2,114],133:[2,114],134:[2,114],135:[2,114],136:[2,114],137:[2,114],138:[2,114]},{5:231,25:[1,5],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],49:[2,143],54:[2,143],57:[2,143],73:[2,143],78:[2,143],86:[2,143],91:[2,143],93:[2,143],102:[2,143],103:87,104:[1,65],105:[1,232],106:[1,66],109:88,110:[1,68],111:69,118:[2,143],126:[2,143],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],49:[2,145],54:[2,145],57:[2,145],73:[2,145],78:[2,145],86:[2,145],91:[2,145],93:[2,145],102:[2,145],103:87,104:[1,65],105:[1,233],106:[1,66],109:88,110:[1,68],111:69,118:[2,145],126:[2,145],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,151],6:[2,151],25:[2,151],26:[2,151],49:[2,151],54:[2,151],57:[2,151],73:[2,151],78:[2,151],86:[2,151],91:[2,151],93:[2,151],102:[2,151],104:[2,151],105:[2,151],106:[2,151],110:[2,151],118:[2,151],126:[2,151],128:[2,151],129:[2,151],132:[2,151],133:[2,151],134:[2,151],135:[2,151],136:[2,151],137:[2,151]},{1:[2,152],6:[2,152],25:[2,152],26:[2,152],49:[2,152],54:[2,152],57:[2,152],73:[2,152],78:[2,152],86:[2,152],91:[2,152],93:[2,152],102:[2,152],103:87,104:[1,65],105:[2,152],106:[1,66],109:88,110:[1,68],111:69,118:[2,152],126:[2,152],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,156],6:[2,156],25:[2,156],26:[2,156],49:[2,156],54:[2,156],57:[2,156],73:[2,156],78:[2,156],86:[2,156],91:[2,156],93:[2,156],102:[2,156],104:[2,156],105:[2,156],106:[2,156],110:[2,156],118:[2,156],126:[2,156],128:[2,156],129:[2,156],132:[2,156],133:[2,156],134:[2,156],135:[2,156],136:[2,156],137:[2,156]},{116:[2,158],117:[2,158]},{27:159,28:[1,73],44:160,58:161,59:162,76:[1,70],89:[1,114],90:[1,115],113:234,115:158},{54:[1,235],116:[2,164],117:[2,164]},{54:[2,160],116:[2,160],117:[2,160]},{54:[2,161],116:[2,161],117:[2,161]},{54:[2,162],116:[2,162],117:[2,162]},{54:[2,163],116:[2,163],117:[2,163]},{1:[2,157],6:[2,157],25:[2,157],26:[2,157],49:[2,157],54:[2,157],57:[2,157],73:[2,157],78:[2,157],86:[2,157],91:[2,157],93:[2,157],102:[2,157],104:[2,157],105:[2,157],106:[2,157],110:[2,157],118:[2,157],126:[2,157],128:[2,157],129:[2,157],132:[2,157],133:[2,157],134:[2,157],135:[2,157],136:[2,157],137:[2,157]},{8:236,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:237,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],53:238,54:[1,239],78:[2,53]},{6:[2,92],25:[2,92],26:[2,92],54:[2,92],78:[2,92]},{6:[2,39],25:[2,39],26:[2,39],43:[1,240],54:[2,39],78:[2,39]},{6:[2,42],25:[2,42],26:[2,42],54:[2,42],78:[2,42]},{6:[2,43],25:[2,43],26:[2,43],43:[2,43],54:[2,43],78:[2,43]},{6:[2,44],25:[2,44],26:[2,44],43:[2,44],54:[2,44],78:[2,44]},{6:[2,45],25:[2,45],26:[2,45],43:[2,45],54:[2,45],78:[2,45]},{1:[2,5],6:[2,5],26:[2,5],102:[2,5]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],49:[2,25],54:[2,25],57:[2,25],73:[2,25],78:[2,25],86:[2,25],91:[2,25],93:[2,25],98:[2,25],99:[2,25],102:[2,25],104:[2,25],105:[2,25],106:[2,25],110:[2,25],118:[2,25],121:[2,25],123:[2,25],126:[2,25],128:[2,25],129:[2,25],132:[2,25],133:[2,25],134:[2,25],135:[2,25],136:[2,25],137:[2,25]},{1:[2,195],6:[2,195],25:[2,195],26:[2,195],49:[2,195],54:[2,195],57:[2,195],73:[2,195],78:[2,195],86:[2,195],91:[2,195],93:[2,195],102:[2,195],103:87,104:[2,195],105:[2,195],106:[2,195],109:88,110:[2,195],111:69,118:[2,195],126:[2,195],128:[2,195],129:[2,195],132:[1,78],133:[1,81],134:[2,195],135:[2,195],136:[2,195],137:[2,195]},{1:[2,196],6:[2,196],25:[2,196],26:[2,196],49:[2,196],54:[2,196],57:[2,196],73:[2,196],78:[2,196],86:[2,196],91:[2,196],93:[2,196],102:[2,196],103:87,104:[2,196],105:[2,196],106:[2,196],109:88,110:[2,196],111:69,118:[2,196],126:[2,196],128:[2,196],129:[2,196],132:[1,78],133:[1,81],134:[2,196],135:[2,196],136:[2,196],137:[2,196]},{1:[2,197],6:[2,197],25:[2,197],26:[2,197],49:[2,197],54:[2,197],57:[2,197],73:[2,197],78:[2,197],86:[2,197],91:[2,197],93:[2,197],102:[2,197],103:87,104:[2,197],105:[2,197],106:[2,197],109:88,110:[2,197],111:69,118:[2,197],126:[2,197],128:[2,197],129:[2,197],132:[1,78],133:[2,197],134:[2,197],135:[2,197],136:[2,197],137:[2,197]},{1:[2,198],6:[2,198],25:[2,198],26:[2,198],49:[2,198],54:[2,198],57:[2,198],73:[2,198],78:[2,198],86:[2,198],91:[2,198],93:[2,198],102:[2,198],103:87,104:[2,198],105:[2,198],106:[2,198],109:88,110:[2,198],111:69,118:[2,198],126:[2,198],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[2,198],135:[2,198],136:[2,198],137:[2,198]},{1:[2,199],6:[2,199],25:[2,199],26:[2,199],49:[2,199],54:[2,199],57:[2,199],73:[2,199],78:[2,199],86:[2,199],91:[2,199],93:[2,199],102:[2,199],103:87,104:[2,199],105:[2,199],106:[2,199],109:88,110:[2,199],111:69,118:[2,199],126:[2,199],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[2,199],136:[2,199],137:[1,85]},{1:[2,200],6:[2,200],25:[2,200],26:[2,200],49:[2,200],54:[2,200],57:[2,200],73:[2,200],78:[2,200],86:[2,200],91:[2,200],93:[2,200],102:[2,200],103:87,104:[2,200],105:[2,200],106:[2,200],109:88,110:[2,200],111:69,118:[2,200],126:[2,200],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[2,200],137:[1,85]},{1:[2,201],6:[2,201],25:[2,201],26:[2,201],49:[2,201],54:[2,201],57:[2,201],73:[2,201],78:[2,201],86:[2,201],91:[2,201],93:[2,201],102:[2,201],103:87,104:[2,201],105:[2,201],106:[2,201],109:88,110:[2,201],111:69,118:[2,201],126:[2,201],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[2,201],136:[2,201],137:[2,201]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],49:[2,186],54:[2,186],57:[2,186],73:[2,186],78:[2,186],86:[2,186],91:[2,186],93:[2,186],102:[2,186],103:87,104:[1,65],105:[2,186],106:[1,66],109:88,110:[1,68],111:69,118:[2,186],126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],49:[2,185],54:[2,185],57:[2,185],73:[2,185],78:[2,185],86:[2,185],91:[2,185],93:[2,185],102:[2,185],103:87,104:[1,65],105:[2,185],106:[1,66],109:88,110:[1,68],111:69,118:[2,185],126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,104],6:[2,104],25:[2,104],26:[2,104],49:[2,104],54:[2,104],57:[2,104],66:[2,104],67:[2,104],68:[2,104],69:[2,104],71:[2,104],73:[2,104],74:[2,104],78:[2,104],84:[2,104],85:[2,104],86:[2,104],91:[2,104],93:[2,104],102:[2,104],104:[2,104],105:[2,104],106:[2,104],110:[2,104],118:[2,104],126:[2,104],128:[2,104],129:[2,104],132:[2,104],133:[2,104],134:[2,104],135:[2,104],136:[2,104],137:[2,104]},{1:[2,80],6:[2,80],25:[2,80],26:[2,80],40:[2,80],49:[2,80],54:[2,80],57:[2,80],66:[2,80],67:[2,80],68:[2,80],69:[2,80],71:[2,80],73:[2,80],74:[2,80],78:[2,80],80:[2,80],84:[2,80],85:[2,80],86:[2,80],91:[2,80],93:[2,80],102:[2,80],104:[2,80],105:[2,80],106:[2,80],110:[2,80],118:[2,80],126:[2,80],128:[2,80],129:[2,80],130:[2,80],131:[2,80],132:[2,80],133:[2,80],134:[2,80],135:[2,80],136:[2,80],137:[2,80],138:[2,80]},{1:[2,81],6:[2,81],25:[2,81],26:[2,81],40:[2,81],49:[2,81],54:[2,81],57:[2,81],66:[2,81],67:[2,81],68:[2,81],69:[2,81],71:[2,81],73:[2,81],74:[2,81],78:[2,81],80:[2,81],84:[2,81],85:[2,81],86:[2,81],91:[2,81],93:[2,81],102:[2,81],104:[2,81],105:[2,81],106:[2,81],110:[2,81],118:[2,81],126:[2,81],128:[2,81],129:[2,81],130:[2,81],131:[2,81],132:[2,81],133:[2,81],134:[2,81],135:[2,81],136:[2,81],137:[2,81],138:[2,81]},{1:[2,82],6:[2,82],25:[2,82],26:[2,82],40:[2,82],49:[2,82],54:[2,82],57:[2,82],66:[2,82],67:[2,82],68:[2,82],69:[2,82],71:[2,82],73:[2,82],74:[2,82],78:[2,82],80:[2,82],84:[2,82],85:[2,82],86:[2,82],91:[2,82],93:[2,82],102:[2,82],104:[2,82],105:[2,82],106:[2,82],110:[2,82],118:[2,82],126:[2,82],128:[2,82],129:[2,82],130:[2,82],131:[2,82],132:[2,82],133:[2,82],134:[2,82],135:[2,82],136:[2,82],137:[2,82],138:[2,82]},{1:[2,83],6:[2,83],25:[2,83],26:[2,83],40:[2,83],49:[2,83],54:[2,83],57:[2,83],66:[2,83],67:[2,83],68:[2,83],69:[2,83],71:[2,83],73:[2,83],74:[2,83],78:[2,83],80:[2,83],84:[2,83],85:[2,83],86:[2,83],91:[2,83],93:[2,83],102:[2,83],104:[2,83],105:[2,83],106:[2,83],110:[2,83],118:[2,83],126:[2,83],128:[2,83],129:[2,83],130:[2,83],131:[2,83],132:[2,83],133:[2,83],134:[2,83],135:[2,83],136:[2,83],137:[2,83],138:[2,83]},{73:[1,241]},{57:[1,194],73:[2,88],92:242,93:[1,193],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{73:[2,89]},{8:243,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,73:[2,123],76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{12:[2,117],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],73:[2,117],76:[2,117],79:[2,117],83:[2,117],88:[2,117],89:[2,117],90:[2,117],96:[2,117],100:[2,117],101:[2,117],104:[2,117],106:[2,117],108:[2,117],110:[2,117],119:[2,117],125:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117],131:[2,117]},{12:[2,118],28:[2,118],30:[2,118],31:[2,118],33:[2,118],34:[2,118],35:[2,118],36:[2,118],37:[2,118],38:[2,118],45:[2,118],46:[2,118],47:[2,118],51:[2,118],52:[2,118],73:[2,118],76:[2,118],79:[2,118],83:[2,118],88:[2,118],89:[2,118],90:[2,118],96:[2,118],100:[2,118],101:[2,118],104:[2,118],106:[2,118],108:[2,118],110:[2,118],119:[2,118],125:[2,118],127:[2,118],128:[2,118],129:[2,118],130:[2,118],131:[2,118]},{1:[2,87],6:[2,87],25:[2,87],26:[2,87],40:[2,87],49:[2,87],54:[2,87],57:[2,87],66:[2,87],67:[2,87],68:[2,87],69:[2,87],71:[2,87],73:[2,87],74:[2,87],78:[2,87],80:[2,87],84:[2,87],85:[2,87],86:[2,87],91:[2,87],93:[2,87],102:[2,87],104:[2,87],105:[2,87],106:[2,87],110:[2,87],118:[2,87],126:[2,87],128:[2,87],129:[2,87],130:[2,87],131:[2,87],132:[2,87],133:[2,87],134:[2,87],135:[2,87],136:[2,87],137:[2,87],138:[2,87]},{1:[2,105],6:[2,105],25:[2,105],26:[2,105],49:[2,105],54:[2,105],57:[2,105],66:[2,105],67:[2,105],68:[2,105],69:[2,105],71:[2,105],73:[2,105],74:[2,105],78:[2,105],84:[2,105],85:[2,105],86:[2,105],91:[2,105],93:[2,105],102:[2,105],104:[2,105],105:[2,105],106:[2,105],110:[2,105],118:[2,105],126:[2,105],128:[2,105],129:[2,105],132:[2,105],133:[2,105],134:[2,105],135:[2,105],136:[2,105],137:[2,105]},{1:[2,36],6:[2,36],25:[2,36],26:[2,36],49:[2,36],54:[2,36],57:[2,36],73:[2,36],78:[2,36],86:[2,36],91:[2,36],93:[2,36],102:[2,36],103:87,104:[2,36],105:[2,36],106:[2,36],109:88,110:[2,36],111:69,118:[2,36],126:[2,36],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:244,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:245,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,110],6:[2,110],25:[2,110],26:[2,110],49:[2,110],54:[2,110],57:[2,110],66:[2,110],67:[2,110],68:[2,110],69:[2,110],71:[2,110],73:[2,110],74:[2,110],78:[2,110],84:[2,110],85:[2,110],86:[2,110],91:[2,110],93:[2,110],102:[2,110],104:[2,110],105:[2,110],106:[2,110],110:[2,110],118:[2,110],126:[2,110],128:[2,110],129:[2,110],132:[2,110],133:[2,110],134:[2,110],135:[2,110],136:[2,110],137:[2,110]},{6:[2,53],25:[2,53],53:246,54:[1,229],86:[2,53]},{6:[2,129],25:[2,129],26:[2,129],54:[2,129],57:[1,247],86:[2,129],91:[2,129],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{50:248,51:[1,60],52:[1,61]},{6:[2,54],25:[2,54],26:[2,54],27:110,28:[1,73],44:111,55:249,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[1,250],25:[1,251]},{6:[2,61],25:[2,61],26:[2,61],49:[2,61],54:[2,61]},{8:252,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,202],6:[2,202],25:[2,202],26:[2,202],49:[2,202],54:[2,202],57:[2,202],73:[2,202],78:[2,202],86:[2,202],91:[2,202],93:[2,202],102:[2,202],103:87,104:[2,202],105:[2,202],106:[2,202],109:88,110:[2,202],111:69,118:[2,202],126:[2,202],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:253,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:254,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,205],6:[2,205],25:[2,205],26:[2,205],49:[2,205],54:[2,205],57:[2,205],73:[2,205],78:[2,205],86:[2,205],91:[2,205],93:[2,205],102:[2,205],103:87,104:[2,205],105:[2,205],106:[2,205],109:88,110:[2,205],111:69,118:[2,205],126:[2,205],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],49:[2,184],54:[2,184],57:[2,184],73:[2,184],78:[2,184],86:[2,184],91:[2,184],93:[2,184],102:[2,184],104:[2,184],105:[2,184],106:[2,184],110:[2,184],118:[2,184],126:[2,184],128:[2,184],129:[2,184],132:[2,184],133:[2,184],134:[2,184],135:[2,184],136:[2,184],137:[2,184]},{8:255,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],49:[2,134],54:[2,134],57:[2,134],73:[2,134],78:[2,134],86:[2,134],91:[2,134],93:[2,134],98:[1,256],102:[2,134],104:[2,134],105:[2,134],106:[2,134],110:[2,134],118:[2,134],126:[2,134],128:[2,134],129:[2,134],132:[2,134],133:[2,134],134:[2,134],135:[2,134],136:[2,134],137:[2,134]},{5:257,25:[1,5]},{5:260,25:[1,5],27:258,28:[1,73],59:259,76:[1,70]},{120:261,122:219,123:[1,220]},{26:[1,262],121:[1,263],122:264,123:[1,220]},{26:[2,177],121:[2,177],123:[2,177]},{8:266,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],95:265,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,98],5:267,6:[2,98],25:[1,5],26:[2,98],49:[2,98],54:[2,98],57:[2,98],73:[2,98],78:[2,98],86:[2,98],91:[2,98],93:[2,98],102:[2,98],103:87,104:[1,65],105:[2,98],106:[1,66],109:88,110:[1,68],111:69,118:[2,98],126:[2,98],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,101],6:[2,101],25:[2,101],26:[2,101],49:[2,101],54:[2,101],57:[2,101],73:[2,101],78:[2,101],86:[2,101],91:[2,101],93:[2,101],102:[2,101],104:[2,101],105:[2,101],106:[2,101],110:[2,101],118:[2,101],126:[2,101],128:[2,101],129:[2,101],132:[2,101],133:[2,101],134:[2,101],135:[2,101],136:[2,101],137:[2,101]},{8:268,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],49:[2,141],54:[2,141],57:[2,141],66:[2,141],67:[2,141],68:[2,141],69:[2,141],71:[2,141],73:[2,141],74:[2,141],78:[2,141],84:[2,141],85:[2,141],86:[2,141],91:[2,141],93:[2,141],102:[2,141],104:[2,141],105:[2,141],106:[2,141],110:[2,141],118:[2,141],126:[2,141],128:[2,141],129:[2,141],132:[2,141],133:[2,141],134:[2,141],135:[2,141],136:[2,141],137:[2,141]},{6:[1,74],26:[1,269]},{8:270,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,67],12:[2,118],25:[2,67],28:[2,118],30:[2,118],31:[2,118],33:[2,118],34:[2,118],35:[2,118],36:[2,118],37:[2,118],38:[2,118],45:[2,118],46:[2,118],47:[2,118],51:[2,118],52:[2,118],54:[2,67],76:[2,118],79:[2,118],83:[2,118],88:[2,118],89:[2,118],90:[2,118],91:[2,67],96:[2,118],100:[2,118],101:[2,118],104:[2,118],106:[2,118],108:[2,118],110:[2,118],119:[2,118],125:[2,118],127:[2,118],128:[2,118],129:[2,118],130:[2,118],131:[2,118]},{6:[1,272],25:[1,273],91:[1,271]},{6:[2,54],8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[2,54],26:[2,54],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],86:[2,54],88:[1,58],89:[1,59],90:[1,57],91:[2,54],94:274,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],26:[2,53],53:275,54:[1,229]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],49:[2,181],54:[2,181],57:[2,181],73:[2,181],78:[2,181],86:[2,181],91:[2,181],93:[2,181],102:[2,181],104:[2,181],105:[2,181],106:[2,181],110:[2,181],118:[2,181],121:[2,181],126:[2,181],128:[2,181],129:[2,181],132:[2,181],133:[2,181],134:[2,181],135:[2,181],136:[2,181],137:[2,181]},{8:276,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:277,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{116:[2,159],117:[2,159]},{27:159,28:[1,73],44:160,58:161,59:162,76:[1,70],89:[1,114],90:[1,115],115:278},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],49:[2,166],54:[2,166],57:[2,166],73:[2,166],78:[2,166],86:[2,166],91:[2,166],93:[2,166],102:[2,166],103:87,104:[2,166],105:[1,279],106:[2,166],109:88,110:[2,166],111:69,118:[1,280],126:[2,166],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,167],6:[2,167],25:[2,167],26:[2,167],49:[2,167],54:[2,167],57:[2,167],73:[2,167],78:[2,167],86:[2,167],91:[2,167],93:[2,167],102:[2,167],103:87,104:[2,167],105:[1,281],106:[2,167],109:88,110:[2,167],111:69,118:[2,167],126:[2,167],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,283],25:[1,284],78:[1,282]},{6:[2,54],11:169,25:[2,54],26:[2,54],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:285,42:168,44:172,46:[1,46],78:[2,54],89:[1,114]},{8:286,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,287],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,86],6:[2,86],25:[2,86],26:[2,86],40:[2,86],49:[2,86],54:[2,86],57:[2,86],66:[2,86],67:[2,86],68:[2,86],69:[2,86],71:[2,86],73:[2,86],74:[2,86],78:[2,86],80:[2,86],84:[2,86],85:[2,86],86:[2,86],91:[2,86],93:[2,86],102:[2,86],104:[2,86],105:[2,86],106:[2,86],110:[2,86],118:[2,86],126:[2,86],128:[2,86],129:[2,86],130:[2,86],131:[2,86],132:[2,86],133:[2,86],134:[2,86],135:[2,86],136:[2,86],137:[2,86],138:[2,86]},{8:288,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,73:[2,121],76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{73:[2,122],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,37],6:[2,37],25:[2,37],26:[2,37],49:[2,37],54:[2,37],57:[2,37],73:[2,37],78:[2,37],86:[2,37],91:[2,37],93:[2,37],102:[2,37],103:87,104:[2,37],105:[2,37],106:[2,37],109:88,110:[2,37],111:69,118:[2,37],126:[2,37],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{26:[1,289],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,272],25:[1,273],86:[1,290]},{6:[2,67],25:[2,67],26:[2,67],54:[2,67],86:[2,67],91:[2,67]},{5:291,25:[1,5]},{6:[2,57],25:[2,57],26:[2,57],49:[2,57],54:[2,57]},{27:110,28:[1,73],44:111,55:292,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[2,55],25:[2,55],26:[2,55],27:110,28:[1,73],44:111,48:293,54:[2,55],55:108,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[2,62],25:[2,62],26:[2,62],49:[2,62],54:[2,62],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{26:[1,294],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,204],6:[2,204],25:[2,204],26:[2,204],49:[2,204],54:[2,204],57:[2,204],73:[2,204],78:[2,204],86:[2,204],91:[2,204],93:[2,204],102:[2,204],103:87,104:[2,204],105:[2,204],106:[2,204],109:88,110:[2,204],111:69,118:[2,204],126:[2,204],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{5:295,25:[1,5],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{5:296,25:[1,5]},{1:[2,135],6:[2,135],25:[2,135],26:[2,135],49:[2,135],54:[2,135],57:[2,135],73:[2,135],78:[2,135],86:[2,135],91:[2,135],93:[2,135],102:[2,135],104:[2,135],105:[2,135],106:[2,135],110:[2,135],118:[2,135],126:[2,135],128:[2,135],129:[2,135],132:[2,135],133:[2,135],134:[2,135],135:[2,135],136:[2,135],137:[2,135]},{5:297,25:[1,5]},{5:298,25:[1,5]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],49:[2,139],54:[2,139],57:[2,139],73:[2,139],78:[2,139],86:[2,139],91:[2,139],93:[2,139],98:[2,139],102:[2,139],104:[2,139],105:[2,139],106:[2,139],110:[2,139],118:[2,139],126:[2,139],128:[2,139],129:[2,139],132:[2,139],133:[2,139],134:[2,139],135:[2,139],136:[2,139],137:[2,139]},{26:[1,299],121:[1,300],122:264,123:[1,220]},{1:[2,175],6:[2,175],25:[2,175],26:[2,175],49:[2,175],54:[2,175],57:[2,175],73:[2,175],78:[2,175],86:[2,175],91:[2,175],93:[2,175],102:[2,175],104:[2,175],105:[2,175],106:[2,175],110:[2,175],118:[2,175],126:[2,175],128:[2,175],129:[2,175],132:[2,175],133:[2,175],134:[2,175],135:[2,175],136:[2,175],137:[2,175]},{5:301,25:[1,5]},{26:[2,178],121:[2,178],123:[2,178]},{5:302,25:[1,5],54:[1,303]},{25:[2,131],54:[2,131],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,99],6:[2,99],25:[2,99],26:[2,99],49:[2,99],54:[2,99],57:[2,99],73:[2,99],78:[2,99],86:[2,99],91:[2,99],93:[2,99],102:[2,99],104:[2,99],105:[2,99],106:[2,99],110:[2,99],118:[2,99],126:[2,99],128:[2,99],129:[2,99],132:[2,99],133:[2,99],134:[2,99],135:[2,99],136:[2,99],137:[2,99]},{1:[2,102],5:304,6:[2,102],25:[1,5],26:[2,102],49:[2,102],54:[2,102],57:[2,102],73:[2,102],78:[2,102],86:[2,102],91:[2,102],93:[2,102],102:[2,102],103:87,104:[1,65],105:[2,102],106:[1,66],109:88,110:[1,68],111:69,118:[2,102],126:[2,102],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{102:[1,305]},{91:[1,306],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,116],6:[2,116],25:[2,116],26:[2,116],40:[2,116],49:[2,116],54:[2,116],57:[2,116],66:[2,116],67:[2,116],68:[2,116],69:[2,116],71:[2,116],73:[2,116],74:[2,116],78:[2,116],84:[2,116],85:[2,116],86:[2,116],91:[2,116],93:[2,116],102:[2,116],104:[2,116],105:[2,116],106:[2,116],110:[2,116],116:[2,116],117:[2,116],118:[2,116],126:[2,116],128:[2,116],129:[2,116],132:[2,116],133:[2,116],134:[2,116],135:[2,116],136:[2,116],137:[2,116]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],94:307,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:308,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,125],25:[2,125],26:[2,125],54:[2,125],86:[2,125],91:[2,125]},{6:[1,272],25:[1,273],26:[1,309]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],49:[2,144],54:[2,144],57:[2,144],73:[2,144],78:[2,144],86:[2,144],91:[2,144],93:[2,144],102:[2,144],103:87,104:[1,65],105:[2,144],106:[1,66],109:88,110:[1,68],111:69,118:[2,144],126:[2,144],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],49:[2,146],54:[2,146],57:[2,146],73:[2,146],78:[2,146],86:[2,146],91:[2,146],93:[2,146],102:[2,146],103:87,104:[1,65],105:[2,146],106:[1,66],109:88,110:[1,68],111:69,118:[2,146],126:[2,146],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{116:[2,165],117:[2,165]},{8:310,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:311,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:312,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,90],6:[2,90],25:[2,90],26:[2,90],40:[2,90],49:[2,90],54:[2,90],57:[2,90],66:[2,90],67:[2,90],68:[2,90],69:[2,90],71:[2,90],73:[2,90],74:[2,90],78:[2,90],84:[2,90],85:[2,90],86:[2,90],91:[2,90],93:[2,90],102:[2,90],104:[2,90],105:[2,90],106:[2,90],110:[2,90],116:[2,90],117:[2,90],118:[2,90],126:[2,90],128:[2,90],129:[2,90],132:[2,90],133:[2,90],134:[2,90],135:[2,90],136:[2,90],137:[2,90]},{11:169,27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:313,42:168,44:172,46:[1,46],89:[1,114]},{6:[2,91],11:169,25:[2,91],26:[2,91],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:167,42:168,44:172,46:[1,46],54:[2,91],77:314,89:[1,114]},{6:[2,93],25:[2,93],26:[2,93],54:[2,93],78:[2,93]},{6:[2,40],25:[2,40],26:[2,40],54:[2,40],78:[2,40],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:315,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{73:[2,120],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,38],6:[2,38],25:[2,38],26:[2,38],49:[2,38],54:[2,38],57:[2,38],73:[2,38],78:[2,38],86:[2,38],91:[2,38],93:[2,38],102:[2,38],104:[2,38],105:[2,38],106:[2,38],110:[2,38],118:[2,38],126:[2,38],128:[2,38],129:[2,38],132:[2,38],133:[2,38],134:[2,38],135:[2,38],136:[2,38],137:[2,38]},{1:[2,111],6:[2,111],25:[2,111],26:[2,111],49:[2,111],54:[2,111],57:[2,111],66:[2,111],67:[2,111],68:[2,111],69:[2,111],71:[2,111],73:[2,111],74:[2,111],78:[2,111],84:[2,111],85:[2,111],86:[2,111],91:[2,111],93:[2,111],102:[2,111],104:[2,111],105:[2,111],106:[2,111],110:[2,111],118:[2,111],126:[2,111],128:[2,111],129:[2,111],132:[2,111],133:[2,111],134:[2,111],135:[2,111],136:[2,111],137:[2,111]},{1:[2,49],6:[2,49],25:[2,49],26:[2,49],49:[2,49],54:[2,49],57:[2,49],73:[2,49],78:[2,49],86:[2,49],91:[2,49],93:[2,49],102:[2,49],104:[2,49],105:[2,49],106:[2,49],110:[2,49],118:[2,49],126:[2,49],128:[2,49],129:[2,49],132:[2,49],133:[2,49],134:[2,49],135:[2,49],136:[2,49],137:[2,49]},{6:[2,58],25:[2,58],26:[2,58],49:[2,58],54:[2,58]},{6:[2,53],25:[2,53],26:[2,53],53:316,54:[1,204]},{1:[2,203],6:[2,203],25:[2,203],26:[2,203],49:[2,203],54:[2,203],57:[2,203],73:[2,203],78:[2,203],86:[2,203],91:[2,203],93:[2,203],102:[2,203],104:[2,203],105:[2,203],106:[2,203],110:[2,203],118:[2,203],126:[2,203],128:[2,203],129:[2,203],132:[2,203],133:[2,203],134:[2,203],135:[2,203],136:[2,203],137:[2,203]},{1:[2,182],6:[2,182],25:[2,182],26:[2,182],49:[2,182],54:[2,182],57:[2,182],73:[2,182],78:[2,182],86:[2,182],91:[2,182],93:[2,182],102:[2,182],104:[2,182],105:[2,182],106:[2,182],110:[2,182],118:[2,182],121:[2,182],126:[2,182],128:[2,182],129:[2,182],132:[2,182],133:[2,182],134:[2,182],135:[2,182],136:[2,182],137:[2,182]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],49:[2,136],54:[2,136],57:[2,136],73:[2,136],78:[2,136],86:[2,136],91:[2,136],93:[2,136],102:[2,136],104:[2,136],105:[2,136],106:[2,136],110:[2,136],118:[2,136],126:[2,136],128:[2,136],129:[2,136],132:[2,136],133:[2,136],134:[2,136],135:[2,136],136:[2,136],137:[2,136]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],49:[2,137],54:[2,137],57:[2,137],73:[2,137],78:[2,137],86:[2,137],91:[2,137],93:[2,137],98:[2,137],102:[2,137],104:[2,137],105:[2,137],106:[2,137],110:[2,137],118:[2,137],126:[2,137],128:[2,137],129:[2,137],132:[2,137],133:[2,137],134:[2,137],135:[2,137],136:[2,137],137:[2,137]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],49:[2,138],54:[2,138],57:[2,138],73:[2,138],78:[2,138],86:[2,138],91:[2,138],93:[2,138],98:[2,138],102:[2,138],104:[2,138],105:[2,138],106:[2,138],110:[2,138],118:[2,138],126:[2,138],128:[2,138],129:[2,138],132:[2,138],133:[2,138],134:[2,138],135:[2,138],136:[2,138],137:[2,138]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],49:[2,173],54:[2,173],57:[2,173],73:[2,173],78:[2,173],86:[2,173],91:[2,173],93:[2,173],102:[2,173],104:[2,173],105:[2,173],106:[2,173],110:[2,173],118:[2,173],126:[2,173],128:[2,173],129:[2,173],132:[2,173],133:[2,173],134:[2,173],135:[2,173],136:[2,173],137:[2,173]},{5:317,25:[1,5]},{26:[1,318]},{6:[1,319],26:[2,179],121:[2,179],123:[2,179]},{8:320,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,103],6:[2,103],25:[2,103],26:[2,103],49:[2,103],54:[2,103],57:[2,103],73:[2,103],78:[2,103],86:[2,103],91:[2,103],93:[2,103],102:[2,103],104:[2,103],105:[2,103],106:[2,103],110:[2,103],118:[2,103],126:[2,103],128:[2,103],129:[2,103],132:[2,103],133:[2,103],134:[2,103],135:[2,103],136:[2,103],137:[2,103]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],49:[2,142],54:[2,142],57:[2,142],66:[2,142],67:[2,142],68:[2,142],69:[2,142],71:[2,142],73:[2,142],74:[2,142],78:[2,142],84:[2,142],85:[2,142],86:[2,142],91:[2,142],93:[2,142],102:[2,142],104:[2,142],105:[2,142],106:[2,142],110:[2,142],118:[2,142],126:[2,142],128:[2,142],129:[2,142],132:[2,142],133:[2,142],134:[2,142],135:[2,142],136:[2,142],137:[2,142]},{1:[2,119],6:[2,119],25:[2,119],26:[2,119],49:[2,119],54:[2,119],57:[2,119],66:[2,119],67:[2,119],68:[2,119],69:[2,119],71:[2,119],73:[2,119],74:[2,119],78:[2,119],84:[2,119],85:[2,119],86:[2,119],91:[2,119],93:[2,119],102:[2,119],104:[2,119],105:[2,119],106:[2,119],110:[2,119],118:[2,119],126:[2,119],128:[2,119],129:[2,119],132:[2,119],133:[2,119],134:[2,119],135:[2,119],136:[2,119],137:[2,119]},{6:[2,126],25:[2,126],26:[2,126],54:[2,126],86:[2,126],91:[2,126]},{6:[2,53],25:[2,53],26:[2,53],53:321,54:[1,229]},{6:[2,127],25:[2,127],26:[2,127],54:[2,127],86:[2,127],91:[2,127]},{1:[2,168],6:[2,168],25:[2,168],26:[2,168],49:[2,168],54:[2,168],57:[2,168],73:[2,168],78:[2,168],86:[2,168],91:[2,168],93:[2,168],102:[2,168],103:87,104:[2,168],105:[2,168],106:[2,168],109:88,110:[2,168],111:69,118:[1,322],126:[2,168],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,170],6:[2,170],25:[2,170],26:[2,170],49:[2,170],54:[2,170],57:[2,170],73:[2,170],78:[2,170],86:[2,170],91:[2,170],93:[2,170],102:[2,170],103:87,104:[2,170],105:[1,323],106:[2,170],109:88,110:[2,170],111:69,118:[2,170],126:[2,170],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,169],6:[2,169],25:[2,169],26:[2,169],49:[2,169],54:[2,169],57:[2,169],73:[2,169],78:[2,169],86:[2,169],91:[2,169],93:[2,169],102:[2,169],103:87,104:[2,169],105:[2,169],106:[2,169],109:88,110:[2,169],111:69,118:[2,169],126:[2,169],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[2,94],25:[2,94],26:[2,94],54:[2,94],78:[2,94]},{6:[2,53],25:[2,53],26:[2,53],53:324,54:[1,239]},{26:[1,325],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,250],25:[1,251],26:[1,326]},{26:[1,327]},{1:[2,176],6:[2,176],25:[2,176],26:[2,176],49:[2,176],54:[2,176],57:[2,176],73:[2,176],78:[2,176],86:[2,176],91:[2,176],93:[2,176],102:[2,176],104:[2,176],105:[2,176],106:[2,176],110:[2,176],118:[2,176],126:[2,176],128:[2,176],129:[2,176],132:[2,176],133:[2,176],134:[2,176],135:[2,176],136:[2,176],137:[2,176]},{26:[2,180],121:[2,180],123:[2,180]},{25:[2,132],54:[2,132],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,272],25:[1,273],26:[1,328]},{8:329,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:330,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[1,283],25:[1,284],26:[1,331]},{6:[2,41],25:[2,41],26:[2,41],54:[2,41],78:[2,41]},{6:[2,59],25:[2,59],26:[2,59],49:[2,59],54:[2,59]},{1:[2,174],6:[2,174],25:[2,174],26:[2,174],49:[2,174],54:[2,174],57:[2,174],73:[2,174],78:[2,174],86:[2,174],91:[2,174],93:[2,174],102:[2,174],104:[2,174],105:[2,174],106:[2,174],110:[2,174],118:[2,174],126:[2,174],128:[2,174],129:[2,174],132:[2,174],133:[2,174],134:[2,174],135:[2,174],136:[2,174],137:[2,174]},{6:[2,128],25:[2,128],26:[2,128],54:[2,128],86:[2,128],91:[2,128]},{1:[2,171],6:[2,171],25:[2,171],26:[2,171],49:[2,171],54:[2,171],57:[2,171],73:[2,171],78:[2,171],86:[2,171],91:[2,171],93:[2,171],102:[2,171],103:87,104:[2,171],105:[2,171],106:[2,171],109:88,110:[2,171],111:69,118:[2,171],126:[2,171],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,172],6:[2,172],25:[2,172],26:[2,172],49:[2,172],54:[2,172],57:[2,172],73:[2,172],78:[2,172],86:[2,172],91:[2,172],93:[2,172],102:[2,172],103:87,104:[2,172],105:[2,172],106:[2,172],109:88,110:[2,172],111:69,118:[2,172],126:[2,172],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[2,95],25:[2,95],26:[2,95],54:[2,95],78:[2,95]}],
 defaultActions: {60:[2,51],61:[2,52],75:[2,3],94:[2,109],191:[2,89]},
 parseError: function parseError(str, hash) {
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/repl.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/repl.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/repl.js	(revision 516)
@@ -1,5 +1,9 @@
-// Generated by CoffeeScript 1.6.2
+// Generated by CoffeeScript 1.6.3
 (function() {
-  var CoffeeScript, addMultilineHandler, merge, nodeREPL, prettyErrorMessage, replDefaults, vm, _ref;
+  var CoffeeScript, addHistory, addMultilineHandler, fs, merge, nodeREPL, path, prettyErrorMessage, replDefaults, vm, _ref;
+
+  fs = require('fs');
+
+  path = require('path');
 
   vm = require('vm');
@@ -13,7 +17,8 @@
   replDefaults = {
     prompt: 'coffee> ',
+    historyFile: process.env.HOME ? path.join(process.env.HOME, '.coffee_history') : void 0,
+    historyMaxInputSize: 10240,
     "eval": function(input, context, filename, cb) {
       var Assign, Block, Literal, Value, ast, err, js, _ref1;
-
       input = input.replace(/\uFF00/g, '\n');
       input = input.replace(/^\(([\s\S]*)\n\)$/m, '$1');
@@ -36,5 +41,4 @@
   addMultilineHandler = function(repl) {
     var inputStream, multiline, nodeLineListener, outputStream, rli;
-
     rli = repl.rli, inputStream = repl.inputStream, outputStream = repl.outputStream;
     multiline = {
@@ -89,8 +93,45 @@
   };
 
+  addHistory = function(repl, filename, maxSize) {
+    var buffer, fd, lastLine, readFd, size, stat;
+    lastLine = null;
+    try {
+      stat = fs.statSync(filename);
+      size = Math.min(maxSize, stat.size);
+      readFd = fs.openSync(filename, 'r');
+      buffer = new Buffer(size);
+      fs.readSync(readFd, buffer, 0, size, stat.size - size);
+      repl.rli.history = buffer.toString().split('\n').reverse();
+      if (stat.size > maxSize) {
+        repl.rli.history.pop();
+      }
+      if (repl.rli.history[0] === '') {
+        repl.rli.history.shift();
+      }
+      repl.rli.historyIndex = -1;
+      lastLine = repl.rli.history[0];
+    } catch (_error) {}
+    fd = fs.openSync(filename, 'a');
+    repl.rli.addListener('line', function(code) {
+      if (code && code.length && code !== '.history' && lastLine !== code) {
+        fs.write(fd, "" + code + "\n");
+        return lastLine = code;
+      }
+    });
+    repl.rli.on('exit', function() {
+      return fs.close(fd);
+    });
+    return repl.commands['.history'] = {
+      help: 'Show command history',
+      action: function() {
+        repl.outputStream.write("" + (repl.rli.history.slice(0).reverse().join('\n')) + "\n");
+        return repl.displayPrompt();
+      }
+    };
+  };
+
   module.exports = {
     start: function(opts) {
       var build, major, minor, repl, _ref1;
-
       if (opts == null) {
         opts = {};
@@ -109,4 +150,7 @@
       });
       addMultilineHandler(repl);
+      if (opts.historyFile) {
+        addHistory(repl, opts.historyFile, opts.historyMaxInputSize);
+      }
       return repl;
     }
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/rewriter.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/rewriter.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/rewriter.js	(revision 516)
@@ -1,5 +1,5 @@
-// Generated by CoffeeScript 1.6.2
+// Generated by CoffeeScript 1.6.3
 (function() {
-  var BALANCED_PAIRS, EXPRESSION_CLOSE, EXPRESSION_END, EXPRESSION_START, IMPLICIT_BLOCK, IMPLICIT_CALL, IMPLICIT_END, IMPLICIT_FUNC, IMPLICIT_UNSPACED_CALL, INVERSES, LINEBREAKS, SINGLE_CLOSERS, SINGLE_LINERS, generate, left, rite, _i, _len, _ref,
+  var BALANCED_PAIRS, EXPRESSION_CLOSE, EXPRESSION_END, EXPRESSION_START, IMPLICIT_CALL, IMPLICIT_END, IMPLICIT_FUNC, IMPLICIT_UNSPACED_CALL, INVERSES, LINEBREAKS, SINGLE_CLOSERS, SINGLE_LINERS, generate, left, rite, _i, _len, _ref,
     __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
     __slice = [].slice;
@@ -7,5 +7,4 @@
   generate = function(tag, value) {
     var tok;
-
     tok = [tag, value];
     tok.generated = true;
@@ -31,5 +30,4 @@
     Rewriter.prototype.scanTokens = function(block) {
       var i, token, tokens;
-
       tokens = this.tokens;
       i = 0;
@@ -42,5 +40,4 @@
     Rewriter.prototype.detectEnd = function(i, condition, action) {
       var levels, token, tokens, _ref, _ref1;
-
       tokens = this.tokens;
       levels = 0;
@@ -64,5 +61,4 @@
     Rewriter.prototype.removeLeadingNewlines = function() {
       var i, tag, _i, _len, _ref;
-
       _ref = this.tokens;
       for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
@@ -80,5 +76,4 @@
       return this.scanTokens(function(token, i, tokens) {
         var _ref;
-
         if (!(token[0] === 'TERMINATOR' && (_ref = this.tag(i + 1), __indexOf.call(EXPRESSION_CLOSE, _ref) >= 0))) {
           return 1;
@@ -91,8 +86,6 @@
     Rewriter.prototype.closeOpenCalls = function() {
       var action, condition;
-
       condition = function(token, i) {
         var _ref;
-
         return ((_ref = token[0]) === ')' || _ref === 'CALL_END') || token[0] === 'OUTDENT' && this.tag(i - 1) === ')';
       };
@@ -110,8 +103,6 @@
     Rewriter.prototype.closeOpenIndexes = function() {
       var action, condition;
-
       condition = function(token, i) {
         var _ref;
-
         return (_ref = token[0]) === ']' || _ref === 'INDEX_END';
       };
@@ -129,5 +120,4 @@
     Rewriter.prototype.matchTags = function() {
       var fuzz, i, j, pattern, _i, _ref, _ref1;
-
       i = arguments[0], pattern = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
       fuzz = 0;
@@ -155,5 +145,4 @@
     Rewriter.prototype.findTagsBackwards = function(i, tags) {
       var backStack, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;
-
       backStack = [];
       while (i >= 0 && (backStack.length || (_ref2 = this.tag(i), __indexOf.call(tags, _ref2) < 0) && ((_ref3 = this.tag(i), __indexOf.call(EXPRESSION_START, _ref3) < 0) || this.tokens[i].generated) && (_ref4 = this.tag(i), __indexOf.call(LINEBREAKS, _ref4) < 0))) {
@@ -171,9 +160,7 @@
     Rewriter.prototype.addImplicitBracesAndParens = function() {
       var stack;
-
       stack = [];
       return this.scanTokens(function(token, i, tokens) {
         var endImplicitCall, endImplicitObject, forward, inImplicit, inImplicitCall, inImplicitControl, inImplicitObject, nextTag, offset, prevTag, s, sameLine, stackIdx, stackTag, stackTop, startIdx, startImplicitCall, startImplicitObject, startsLine, tag, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;
-
         tag = token[0];
         prevTag = (i > 0 ? tokens[i - 1] : [])[0];
@@ -188,25 +175,20 @@
         inImplicit = function() {
           var _ref, _ref1;
-
           return (_ref = stackTop()) != null ? (_ref1 = _ref[2]) != null ? _ref1.ours : void 0 : void 0;
         };
         inImplicitCall = function() {
           var _ref;
-
           return inImplicit() && ((_ref = stackTop()) != null ? _ref[0] : void 0) === '(';
         };
         inImplicitObject = function() {
           var _ref;
-
           return inImplicit() && ((_ref = stackTop()) != null ? _ref[0] : void 0) === '{';
         };
         inImplicitControl = function() {
           var _ref;
-
           return inImplicit && ((_ref = stackTop()) != null ? _ref[0] : void 0) === 'CONTROL';
         };
         startImplicitCall = function(j) {
           var idx;
-
           idx = j != null ? j : i;
           stack.push([
@@ -227,5 +209,4 @@
         startImplicitObject = function(j, startsLine) {
           var idx;
-
           if (startsLine == null) {
             startsLine = true;
@@ -293,5 +274,5 @@
           return forward(2);
         }
-        if (this.matchTags(i, IMPLICIT_FUNC, 'INDENT', null, ':') && !this.findTagsBackwards(i, ['CLASS', 'EXTENDS', 'IF', 'CATCH', 'SWITCH', 'LEADING_WHEN', 'FOR', 'WHILE', 'UNTIL'])) {
+        if (__indexOf.call(IMPLICIT_FUNC, tag) >= 0 && this.matchTags(i + 1, 'INDENT', null, ':') && !this.findTagsBackwards(i, ['CLASS', 'EXTENDS', 'IF', 'CATCH', 'SWITCH', 'LEADING_WHEN', 'FOR', 'WHILE', 'UNTIL'])) {
           startImplicitCall(i + 1);
           stack.push(['INDENT', i + 2]);
@@ -351,5 +332,4 @@
       return this.scanTokens(function(token, i, tokens) {
         var column, line, nextLocation, prevLocation, _ref, _ref1;
-
         if (token[2]) {
           return 1;
@@ -377,10 +357,8 @@
     Rewriter.prototype.addImplicitIndentation = function() {
       var action, condition, indent, outdent, starter;
-
       starter = indent = outdent = null;
       condition = function(token, i) {
-        var _ref;
-
-        return token[1] !== ';' && (_ref = token[0], __indexOf.call(SINGLE_CLOSERS, _ref) >= 0) && !(token[0] === 'ELSE' && (starter !== 'IF' && starter !== 'THEN'));
+        var _ref, _ref1;
+        return token[1] !== ';' && (_ref = token[0], __indexOf.call(SINGLE_CLOSERS, _ref) >= 0) && !(token[0] === 'ELSE' && starter !== 'THEN') && !(((_ref1 = token[0]) === 'CATCH' || _ref1 === 'FINALLY') && (starter === '->' || starter === '=>'));
       };
       action = function(token, i) {
@@ -388,6 +366,5 @@
       };
       return this.scanTokens(function(token, i, tokens) {
-        var tag, _ref, _ref1;
-
+        var j, tag, _i, _ref, _ref1;
         tag = token[0];
         if (tag === 'TERMINATOR' && this.tag(i + 1) === 'THEN') {
@@ -399,7 +376,12 @@
           return 2;
         }
-        if (tag === 'CATCH' && ((_ref = this.tag(i + 2)) === 'OUTDENT' || _ref === 'TERMINATOR' || _ref === 'FINALLY')) {
-          tokens.splice.apply(tokens, [i + 2, 0].concat(__slice.call(this.indentation())));
-          return 4;
+        if (tag === 'CATCH') {
+          for (j = _i = 1; _i <= 2; j = ++_i) {
+            if (!((_ref = this.tag(i + j)) === 'OUTDENT' || _ref === 'TERMINATOR' || _ref === 'FINALLY')) {
+              continue;
+            }
+            tokens.splice.apply(tokens, [i + j, 0].concat(__slice.call(this.indentation())));
+            return 2 + j;
+          }
         }
         if (__indexOf.call(SINGLE_LINERS, tag) >= 0 && this.tag(i + 1) !== 'INDENT' && !(tag === 'ELSE' && this.tag(i + 1) === 'IF')) {
@@ -422,9 +404,7 @@
     Rewriter.prototype.tagPostfixConditionals = function() {
       var action, condition, original;
-
       original = null;
       condition = function(token, i) {
         var prevTag, tag;
-
         tag = token[0];
         prevTag = this.tokens[i - 1][0];
@@ -448,5 +428,4 @@
     Rewriter.prototype.indentation = function(implicit) {
       var indent, outdent;
-
       if (implicit == null) {
         implicit = false;
@@ -467,5 +446,4 @@
     Rewriter.prototype.tag = function(i) {
       var _ref;
-
       return (_ref = this.tokens[i]) != null ? _ref[0] : void 0;
     };
@@ -497,6 +475,4 @@
   IMPLICIT_UNSPACED_CALL = ['+', '-'];
 
-  IMPLICIT_BLOCK = ['->', '=>', '{', '[', ','];
-
   IMPLICIT_END = ['POST_IF', 'FOR', 'WHILE', 'UNTIL', 'WHEN', 'BY', 'LOOP', 'TERMINATOR'];
 
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/scope.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/scope.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/scope.js	(revision 516)
@@ -1,3 +1,3 @@
-// Generated by CoffeeScript 1.6.2
+// Generated by CoffeeScript 1.6.3
 (function() {
   var Scope, extend, last, _ref;
@@ -40,5 +40,4 @@
     Scope.prototype.namedMethod = function() {
       var _ref1;
-
       if (((_ref1 = this.method) != null ? _ref1.name : void 0) || !this.parent) {
         return this.method;
@@ -64,5 +63,4 @@
     Scope.prototype.check = function(name) {
       var _ref1;
-
       return !!(this.type(name) || ((_ref1 = this.parent) != null ? _ref1.check(name) : void 0));
     };
@@ -78,5 +76,4 @@
     Scope.prototype.type = function(name) {
       var v, _i, _len, _ref1;
-
       _ref1 = this.variables;
       for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
@@ -91,5 +88,4 @@
     Scope.prototype.freeVariable = function(name, reserve) {
       var index, temp;
-
       if (reserve == null) {
         reserve = true;
@@ -119,5 +115,4 @@
     Scope.prototype.declaredVariables = function() {
       var realVars, tempVars, v, _i, _len, _ref1;
-
       realVars = [];
       tempVars = [];
@@ -134,5 +129,4 @@
     Scope.prototype.assignedVariables = function() {
       var v, _i, _len, _ref1, _results;
-
       _ref1 = this.variables;
       _results = [];
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/sourcemap.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/sourcemap.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/lib/coffee-script/sourcemap.js	(revision 516)
@@ -1,115 +1,154 @@
-// Generated by CoffeeScript 1.6.2
+// Generated by CoffeeScript 1.6.3
 (function() {
-  var BASE64_CHARS, LineMapping, MAX_BASE64_VALUE, VLQ_CONTINUATION_BIT, VLQ_SHIFT, VLQ_VALUE_MASK, decodeBase64Char, encodeBase64Char;
+  var LineMap, SourceMap;
 
-  LineMapping = (function() {
-    function LineMapping(generatedLine) {
-      this.generatedLine = generatedLine;
-      this.columnMap = {};
-      this.columnMappings = [];
+  LineMap = (function() {
+    function LineMap(line) {
+      this.line = line;
+      this.columns = [];
     }
 
-    LineMapping.prototype.addMapping = function(generatedColumn, _arg, options) {
+    LineMap.prototype.add = function(column, _arg, options) {
       var sourceColumn, sourceLine;
-
       sourceLine = _arg[0], sourceColumn = _arg[1];
       if (options == null) {
         options = {};
       }
-      if (this.columnMap[generatedColumn] && options.noReplace) {
+      if (this.columns[column] && options.noReplace) {
         return;
       }
-      this.columnMap[generatedColumn] = {
-        generatedLine: this.generatedLine,
-        generatedColumn: generatedColumn,
+      return this.columns[column] = {
+        line: this.line,
+        column: column,
         sourceLine: sourceLine,
         sourceColumn: sourceColumn
       };
-      this.columnMappings.push(this.columnMap[generatedColumn]);
-      return this.columnMappings.sort(function(a, b) {
-        return a.generatedColumn - b.generatedColumn;
-      });
     };
 
-    LineMapping.prototype.getSourcePosition = function(generatedColumn) {
-      var answer, columnMapping, lastColumnMapping, _i, _len, _ref;
-
-      answer = null;
-      lastColumnMapping = null;
-      _ref = this.columnMappings;
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        columnMapping = _ref[_i];
-        if (columnMapping.generatedColumn > generatedColumn) {
-          break;
-        } else {
-          lastColumnMapping = columnMapping;
-        }
+    LineMap.prototype.sourceLocation = function(column) {
+      var mapping;
+      while (!((mapping = this.columns[column]) || (column <= 0))) {
+        column--;
       }
-      if (lastColumnMapping) {
-        return answer = [lastColumnMapping.sourceLine, lastColumnMapping.sourceColumn];
-      }
+      return mapping && [mapping.sourceLine, mapping.sourceColumn];
     };
 
-    return LineMapping;
+    return LineMap;
 
   })();
 
-  exports.SourceMap = (function() {
+  SourceMap = (function() {
+    var BASE64_CHARS, VLQ_CONTINUATION_BIT, VLQ_SHIFT, VLQ_VALUE_MASK;
+
     function SourceMap() {
-      this.generatedLines = [];
+      this.lines = [];
     }
 
-    SourceMap.prototype.addMapping = function(sourceLocation, generatedLocation, options) {
-      var generatedColumn, generatedLine, lineMapping;
-
+    SourceMap.prototype.add = function(sourceLocation, generatedLocation, options) {
+      var column, line, lineMap, _base;
       if (options == null) {
         options = {};
       }
-      generatedLine = generatedLocation[0], generatedColumn = generatedLocation[1];
-      lineMapping = this.generatedLines[generatedLine];
-      if (!lineMapping) {
-        lineMapping = this.generatedLines[generatedLine] = new LineMapping(generatedLine);
-      }
-      return lineMapping.addMapping(generatedColumn, sourceLocation, options);
+      line = generatedLocation[0], column = generatedLocation[1];
+      lineMap = ((_base = this.lines)[line] || (_base[line] = new LineMap(line)));
+      return lineMap.add(column, sourceLocation, options);
     };
 
-    SourceMap.prototype.getSourcePosition = function(_arg) {
-      var answer, generatedColumn, generatedLine, lineMapping;
+    SourceMap.prototype.sourceLocation = function(_arg) {
+      var column, line, lineMap;
+      line = _arg[0], column = _arg[1];
+      while (!((lineMap = this.lines[line]) || (line <= 0))) {
+        line--;
+      }
+      return lineMap && lineMap.sourceLocation(column);
+    };
 
-      generatedLine = _arg[0], generatedColumn = _arg[1];
-      answer = null;
-      lineMapping = this.generatedLines[generatedLine];
-      if (!lineMapping) {
+    SourceMap.prototype.generate = function(options, code) {
+      var buffer, lastColumn, lastSourceColumn, lastSourceLine, lineMap, lineNumber, mapping, needComma, v3, writingline, _i, _j, _len, _len1, _ref, _ref1;
+      if (options == null) {
+        options = {};
+      }
+      if (code == null) {
+        code = null;
+      }
+      writingline = 0;
+      lastColumn = 0;
+      lastSourceLine = 0;
+      lastSourceColumn = 0;
+      needComma = false;
+      buffer = "";
+      _ref = this.lines;
+      for (lineNumber = _i = 0, _len = _ref.length; _i < _len; lineNumber = ++_i) {
+        lineMap = _ref[lineNumber];
+        if (lineMap) {
+          _ref1 = lineMap.columns;
+          for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
+            mapping = _ref1[_j];
+            if (!(mapping)) {
+              continue;
+            }
+            while (writingline < mapping.line) {
+              lastColumn = 0;
+              needComma = false;
+              buffer += ";";
+              writingline++;
+            }
+            if (needComma) {
+              buffer += ",";
+              needComma = false;
+            }
+            buffer += this.encodeVlq(mapping.column - lastColumn);
+            lastColumn = mapping.column;
+            buffer += this.encodeVlq(0);
+            buffer += this.encodeVlq(mapping.sourceLine - lastSourceLine);
+            lastSourceLine = mapping.sourceLine;
+            buffer += this.encodeVlq(mapping.sourceColumn - lastSourceColumn);
+            lastSourceColumn = mapping.sourceColumn;
+            needComma = true;
+          }
+        }
+      }
+      v3 = {
+        version: 3,
+        file: options.generatedFile || '',
+        sourceRoot: options.sourceRoot || '',
+        sources: options.sourceFiles || [''],
+        names: [],
+        mappings: buffer
+      };
+      if (options.inline) {
+        v3.sourcesContent = [code];
+      }
+      return JSON.stringify(v3, null, 2);
+    };
 
-      } else {
-        answer = lineMapping.getSourcePosition(generatedColumn);
+    VLQ_SHIFT = 5;
+
+    VLQ_CONTINUATION_BIT = 1 << VLQ_SHIFT;
+
+    VLQ_VALUE_MASK = VLQ_CONTINUATION_BIT - 1;
+
+    SourceMap.prototype.encodeVlq = function(value) {
+      var answer, nextChunk, signBit, valueToEncode;
+      answer = '';
+      signBit = value < 0 ? 1 : 0;
+      valueToEncode = (Math.abs(value) << 1) + signBit;
+      while (valueToEncode || !answer) {
+        nextChunk = valueToEncode & VLQ_VALUE_MASK;
+        valueToEncode = valueToEncode >> VLQ_SHIFT;
+        if (valueToEncode) {
+          nextChunk |= VLQ_CONTINUATION_BIT;
+        }
+        answer += this.encodeBase64(nextChunk);
       }
       return answer;
     };
 
-    SourceMap.prototype.forEachMapping = function(fn) {
-      var columnMapping, generatedLineNumber, lineMapping, _i, _len, _ref, _results;
+    BASE64_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
 
-      _ref = this.generatedLines;
-      _results = [];
-      for (generatedLineNumber = _i = 0, _len = _ref.length; _i < _len; generatedLineNumber = ++_i) {
-        lineMapping = _ref[generatedLineNumber];
-        if (lineMapping) {
-          _results.push((function() {
-            var _j, _len1, _ref1, _results1;
-
-            _ref1 = lineMapping.columnMappings;
-            _results1 = [];
-            for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
-              columnMapping = _ref1[_j];
-              _results1.push(fn(columnMapping));
-            }
-            return _results1;
-          })());
-        } else {
-          _results.push(void 0);
-        }
-      }
-      return _results;
+    SourceMap.prototype.encodeBase64 = function(value) {
+      return BASE64_CHARS[value] || (function() {
+        throw new Error("Cannot Base64 encode value: " + value);
+      })();
     };
 
@@ -118,131 +157,5 @@
   })();
 
-  exports.generateV3SourceMap = function(sourceMap, options, code) {
-    var answer, generatedFile, lastGeneratedColumnWritten, lastSourceColumnWritten, lastSourceLineWritten, mappings, needComma, sourceFiles, sourceRoot, writingGeneratedLine;
-
-    if (options == null) {
-      options = {};
-    }
-    sourceRoot = options.sourceRoot || "";
-    sourceFiles = options.sourceFiles || [""];
-    generatedFile = options.generatedFile || "";
-    writingGeneratedLine = 0;
-    lastGeneratedColumnWritten = 0;
-    lastSourceLineWritten = 0;
-    lastSourceColumnWritten = 0;
-    needComma = false;
-    mappings = "";
-    sourceMap.forEachMapping(function(mapping) {
-      while (writingGeneratedLine < mapping.generatedLine) {
-        lastGeneratedColumnWritten = 0;
-        needComma = false;
-        mappings += ";";
-        writingGeneratedLine++;
-      }
-      if (needComma) {
-        mappings += ",";
-        needComma = false;
-      }
-      mappings += exports.vlqEncodeValue(mapping.generatedColumn - lastGeneratedColumnWritten);
-      lastGeneratedColumnWritten = mapping.generatedColumn;
-      mappings += exports.vlqEncodeValue(0);
-      mappings += exports.vlqEncodeValue(mapping.sourceLine - lastSourceLineWritten);
-      lastSourceLineWritten = mapping.sourceLine;
-      mappings += exports.vlqEncodeValue(mapping.sourceColumn - lastSourceColumnWritten);
-      lastSourceColumnWritten = mapping.sourceColumn;
-      return needComma = true;
-    });
-    answer = {
-      version: 3,
-      file: generatedFile,
-      sourceRoot: sourceRoot,
-      sources: sourceFiles,
-      names: [],
-      mappings: mappings
-    };
-    if (options.inline) {
-      answer.sourcesContent = [code];
-    }
-    return JSON.stringify(answer, null, 2);
-  };
-
-  exports.loadV3SourceMap = function(sourceMap) {
-    return todo();
-  };
-
-  BASE64_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
-
-  MAX_BASE64_VALUE = BASE64_CHARS.length - 1;
-
-  encodeBase64Char = function(value) {
-    if (value > MAX_BASE64_VALUE) {
-      throw new Error("Cannot encode value " + value + " > " + MAX_BASE64_VALUE);
-    } else if (value < 0) {
-      throw new Error("Cannot encode value " + value + " < 0");
-    }
-    return BASE64_CHARS[value];
-  };
-
-  decodeBase64Char = function(char) {
-    var value;
-
-    value = BASE64_CHARS.indexOf(char);
-    if (value === -1) {
-      throw new Error("Invalid Base 64 character: " + char);
-    }
-    return value;
-  };
-
-  VLQ_SHIFT = 5;
-
-  VLQ_CONTINUATION_BIT = 1 << VLQ_SHIFT;
-
-  VLQ_VALUE_MASK = VLQ_CONTINUATION_BIT - 1;
-
-  exports.vlqEncodeValue = function(value) {
-    var answer, nextVlqChunk, signBit, valueToEncode;
-
-    signBit = value < 0 ? 1 : 0;
-    valueToEncode = (Math.abs(value) << 1) + signBit;
-    answer = "";
-    while (valueToEncode || !answer) {
-      nextVlqChunk = valueToEncode & VLQ_VALUE_MASK;
-      valueToEncode = valueToEncode >> VLQ_SHIFT;
-      if (valueToEncode) {
-        nextVlqChunk |= VLQ_CONTINUATION_BIT;
-      }
-      answer += encodeBase64Char(nextVlqChunk);
-    }
-    return answer;
-  };
-
-  exports.vlqDecodeValue = function(str, offset) {
-    var consumed, continuationShift, done, nextChunkValue, nextVlqChunk, position, signBit, value;
-
-    if (offset == null) {
-      offset = 0;
-    }
-    position = offset;
-    done = false;
-    value = 0;
-    continuationShift = 0;
-    while (!done) {
-      nextVlqChunk = decodeBase64Char(str[position]);
-      position += 1;
-      nextChunkValue = nextVlqChunk & VLQ_VALUE_MASK;
-      value += nextChunkValue << continuationShift;
-      if (!(nextVlqChunk & VLQ_CONTINUATION_BIT)) {
-        done = true;
-      }
-      continuationShift += VLQ_SHIFT;
-    }
-    consumed = position - offset;
-    signBit = value & 1;
-    value = value >> 1;
-    if (signBit) {
-      value = -value;
-    }
-    return [value, consumed];
-  };
+  module.exports = SourceMap;
 
 }).call(this);
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/package.json
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/package.json	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/coffee-script/package.json	(revision 516)
@@ -11,5 +11,5 @@
     "name": "Jeremy Ashkenas"
   },
-  "version": "1.6.2",
+  "version": "1.6.3",
   "licenses": [
     {
@@ -46,9 +46,5 @@
   "readme": "\n            {\n         }   }   {\n        {   {  }  }\n         }   }{  {\n        {  }{  }  }                    _____       __  __\n       ( }{ }{  { )                   / ____|     / _|/ _|\n     .- { { }  { }} -.               | |     ___ | |_| |_ ___  ___\n    (  ( } { } { } }  )              | |    / _ \\|  _|  _/ _ \\/ _ \\\n    |`-..________ ..-'|              | |___| (_) | | | ||  __/  __/\n    |                 |               \\_____\\___/|_| |_| \\___|\\___|\n    |                 ;--.\n    |                (__  \\            _____           _       _\n    |                 | )  )          / ____|         (_)     | |\n    |                 |/  /          | (___   ___ _ __ _ _ __ | |_\n    |                 (  /            \\___ \\ / __| '__| | '_ \\| __|\n    |                 |/              ____) | (__| |  | | |_) | |_\n    |                 |              |_____/ \\___|_|  |_| .__/ \\__|\n     `-.._________..-'                                  | |\n                                                        |_|\n\n\n  CoffeeScript is a little language that compiles into JavaScript.\n\n  Install Node.js, and then the CoffeeScript compiler:\n  sudo bin/cake install\n\n  Or, if you have the Node Package Manager installed:\n  npm install -g coffee-script\n  (Leave off the -g if you don't wish to install globally.)\n\n  Execute a script:\n  coffee /path/to/script.coffee\n\n  Compile a script:\n  coffee -c /path/to/script.coffee\n\n  For documentation, usage, and examples, see:\n  http://coffeescript.org/\n\n  To suggest a feature, report a bug, or general discussion:\n  http://github.com/jashkenas/coffee-script/issues/\n\n  If you'd like to chat, drop by #coffeescript on Freenode IRC,\n  or on webchat.freenode.net.\n\n  The source repository:\n  git://github.com/jashkenas/coffee-script.git\n\n  All contributors are listed here:\n  http://github.com/jashkenas/coffee-script/contributors\n",
   "readmeFilename": "README",
-  "_id": "coffee-script@1.6.2",
-  "dist": {
-    "shasum": "800f724d18d1103902711ce5345000261f2a2c3b"
-  },
-  "_from": "coffee-script@1.6.2",
-  "_resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.6.2.tgz"
+  "_id": "coffee-script@1.6.3",
+  "_from": "coffee-script@1.6.x"
 }
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/README.md
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/README.md	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/README.md	(revision 516)
@@ -1,3 +1,5 @@
 # Glob
+
+Match files using the patterns the shell uses, like stars and stuff.
 
 This is a glob implementation in JavaScript.  It uses the `minimatch`
@@ -58,5 +60,5 @@
 Perform an asynchronous glob search.
 
-## glob.sync(pattern, [options]
+## glob.sync(pattern, [options])
 
 * `pattern` {String} Pattern to be matched
@@ -98,4 +100,14 @@
   is no way at this time to continue a glob search after aborting, but
   you can re-use the statCache to avoid having to duplicate syscalls.
+* `statCache` Collection of all the stat results the glob search
+  performed.
+* `cache` Convenience object.  Each field has the following possible
+  values:
+  * `false` - Path does not exist
+  * `true` - Path exists
+  * `1` - Path exists, and is not a directory
+  * `2` - Path exists, and is a directory
+  * `[file, entries, ...]` - Path exists, is a directory, and the
+    array value is the results of `fs.readdir`
 
 ### Events
@@ -129,4 +141,7 @@
   onto.  Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix
   systems, and `C:\` or some such on Windows.)
+* `dot` Include `.dot` files in normal matches and `globstar` matches.
+  Note that an explicit dot in a portion of the pattern will always
+  match dot files.
 * `nomount` By default, a pattern starting with a forward-slash will be
   "mounted" onto the root setting, so that a valid filesystem path is
@@ -147,4 +162,6 @@
   in search of other matches.  Set the `strict` option to raise an error
   in these cases.
+* `cache` See `cache` property above.  Pass in a previously generated
+  cache object to save some fs calls.
 * `statCache` A cache of results of filesystem information, to prevent
   unnecessary stat calls.  While it should not normally be necessary to
@@ -187,6 +204,5 @@
 and bash 4.1, where `**` only has special significance if it is the only
 thing in a path part.  That is, `a/**/b` will match `a/x/y/b`, but
-`a/**b` will not.  **Note that this is different from the way that `**` is
-handled by ruby's `Dir` class.**
+`a/**b` will not.
 
 If an escaped pattern has no matches, and the `nonull` flag is set,
@@ -227,7 +243,8 @@
 and readdir calls that it makes, in order to cut down on system
 overhead.  However, this also makes it even more susceptible to races,
-especially if the statCache object is reused between glob calls.
-
-Users are thus advised not to use a glob result as a
-guarantee of filesystem state in the face of rapid changes.
-For the vast majority of operations, this is never a problem.
+especially if the cache or statCache objects are reused between glob
+calls.
+
+Users are thus advised not to use a glob result as a guarantee of
+filesystem state in the face of rapid changes.  For the vast majority
+of operations, this is never a problem.
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/glob.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/glob.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/glob.js	(revision 516)
@@ -23,5 +23,5 @@
 //   else // not globstar
 //     for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)
-//       Test ENTRY against pattern[n+1]
+//       Test ENTRY against pattern[n]
 //       If fails, continue
 //       If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])
@@ -37,5 +37,5 @@
 module.exports = glob
 
-var fs = require("graceful-fs")
+var fs = require("fs")
 , minimatch = require("minimatch")
 , Minimatch = minimatch.Minimatch
@@ -77,4 +77,5 @@
 }
 
+this._processingEmitQueue = false
 
 glob.Glob = Glob
@@ -85,8 +86,12 @@
   }
 
+  if (typeof options === "function") {
+    cb = options
+    options = null
+  }
+
   if (typeof cb === "function") {
     this.on("error", cb)
     this.on("end", function (matches) {
-      // console.error("cb with matches", matches)
       cb(null, matches)
     })
@@ -95,9 +100,14 @@
   options = options || {}
 
+  this._endEmitted = false
   this.EOF = {}
   this._emitQueue = []
 
+  this.paused = false
+  this._processingEmitQueue = false
+
   this.maxDepth = options.maxDepth || 1000
   this.maxLength = options.maxLength || Infinity
+  this.cache = options.cache || {}
   this.statCache = options.statCache || {}
 
@@ -112,4 +122,6 @@
   this.root = options.root || path.resolve(this.cwd, "/")
   this.root = path.resolve(this.root)
+  if (process.platform === "win32")
+    this.root = this.root.replace(/\\/g, "/")
 
   this.nomount = !!options.nomount
@@ -127,4 +139,5 @@
   }
 
+  this.strict = options.strict !== false
   this.dot = !!options.dot
   this.mark = !!options.mark
@@ -135,5 +148,9 @@
   this.nocase = !!options.nocase
   this.stat = !!options.stat
+
   this.debug = !!options.debug || !!options.globDebug
+  if (this.debug)
+    this.log = console.error
+
   this.silent = !!options.silent
 
@@ -144,4 +161,8 @@
   this.error = null
   this.aborted = false
+
+  // list of all the patterns that ** has resolved do, so
+  // we can avoid visiting multiple times.
+  this._globstars = {}
 
   EE.call(this)
@@ -165,4 +186,6 @@
 }
 
+Glob.prototype.log = function () {}
+
 Glob.prototype._finish = function () {
   assert(this instanceof Glob)
@@ -173,5 +196,5 @@
   for (var i = 0, l = this.matches.length; i < l; i ++) {
     var matches = this.matches[i]
-    if (this.debug) console.error("matches[%d] =", i, matches)
+    this.log("matches[%d] =", i, matches)
     // do like the shell, and spit out the literal glob
     if (!matches) {
@@ -199,20 +222,8 @@
   if (this.mark) {
     // at *some* point we statted all of these
-    all = all.map(function (m) {
-      var sc = this.statCache[m]
-      if (!sc)
-        return m
-      var isDir = (Array.isArray(sc) || sc === 2)
-      if (isDir && m.slice(-1) !== "/") {
-        return m + "/"
-      }
-      if (!isDir && m.slice(-1) === "/") {
-        return m.replace(/\/+$/, "")
-      }
-      return m
-    }, this)
-  }
-
-  if (this.debug) console.error("emitting end", all)
+    all = all.map(this._mark, this)
+  }
+
+  this.log("emitting end", all)
 
   this.EOF = this.found = all
@@ -228,4 +239,25 @@
 function alphasort (a, b) {
   return a > b ? 1 : a < b ? -1 : 0
+}
+
+Glob.prototype._mark = function (p) {
+  var c = this.cache[p]
+  var m = p
+  if (c) {
+    var isDir = c === 2 || Array.isArray(c)
+    var slash = p.slice(-1) === '/'
+
+    if (isDir && !slash)
+      m += '/'
+    else if (!isDir && slash)
+      m = m.slice(0, -1)
+
+    if (m !== p) {
+      this.statCache[m] = this.statCache[p]
+      this.cache[m] = this.cache[p]
+    }
+  }
+
+  return m
 }
 
@@ -254,4 +286,5 @@
 
 Glob.prototype.emitMatch = function (m) {
+  this.log('emitMatch', m)
   this._emitQueue.push(m)
   this._processEmitQueue()
@@ -259,18 +292,60 @@
 
 Glob.prototype._processEmitQueue = function (m) {
+  this.log("pEQ paused=%j processing=%j m=%j", this.paused,
+           this._processingEmitQueue, m)
+  var done = false
   while (!this._processingEmitQueue &&
          !this.paused) {
     this._processingEmitQueue = true
     var m = this._emitQueue.shift()
+    this.log(">processEmitQueue", m === this.EOF ? ":EOF:" : m)
     if (!m) {
+      this.log(">processEmitQueue, falsey m")
       this._processingEmitQueue = false
       break
     }
-    if (this.debug) {
-      console.error('emit!', m === this.EOF ? "end" : "match")
-    }
-    this.emit(m === this.EOF ? "end" : "match", m)
-    this._processingEmitQueue = false
-  }
+
+    if (m === this.EOF || !(this.mark && !this.stat)) {
+      this.log("peq: unmarked, or eof")
+      next.call(this, 0, false)
+    } else if (this.statCache[m]) {
+      var sc = this.statCache[m]
+      var exists
+      if (sc)
+        exists = sc.isDirectory() ? 2 : 1
+      this.log("peq: stat cached")
+      next.call(this, exists, exists === 2)
+    } else {
+      this.log("peq: _stat, then next")
+      this._stat(m, next)
+    }
+
+    function next(exists, isDir) {
+      this.log("next", m, exists, isDir)
+      var ev = m === this.EOF ? "end" : "match"
+
+      // "end" can only happen once.
+      assert(!this._endEmitted)
+      if (ev === "end")
+        this._endEmitted = true
+
+      if (exists) {
+        // Doesn't mean it necessarily doesn't exist, it's possible
+        // we just didn't check because we don't care that much, or
+        // this is EOF anyway.
+        if (isDir && !m.match(/\/$/)) {
+          m = m + "/"
+        } else if (!isDir && m.match(/\/$/)) {
+          m = m.replace(/\/+$/, "")
+        }
+      }
+      this.log("emit", ev, m)
+      this.emit(ev, m)
+      this._processingEmitQueue = false
+      if (done && m !== this.EOF && !this.paused)
+        this._processEmitQueue()
+    }
+  }
+  done = true
 }
 
@@ -316,7 +391,15 @@
         // nothing more to do, either way.
         if (exists) {
-          if (prefix.charAt(0) === "/" && !this.nomount) {
-            prefix = path.join(this.root, prefix)
+          if (prefix && isAbsolute(prefix) && !this.nomount) {
+            if (prefix.charAt(0) === "/") {
+              prefix = path.join(this.root, prefix)
+            } else {
+              prefix = path.resolve(this.root, prefix)
+            }
           }
+
+          if (process.platform === "win32")
+            prefix = prefix.replace(/\\/g, "/")
+
           this.matches[index] = this.matches[index] || {}
           this.matches[index][prefix] = true
@@ -345,10 +428,20 @@
   var read
   if (prefix === null) read = "."
-  else if (isAbsolute(prefix)) {
-    read = prefix = path.resolve("/", prefix)
-    if (this.debug) console.error('absolute: ', prefix, this.root, pattern)
-  } else read = prefix
-
-  if (this.debug) console.error('readdir(%j)', read, this.cwd, this.root)
+  else if (isAbsolute(prefix) || isAbsolute(pattern.join("/"))) {
+    if (!prefix || !isAbsolute(prefix)) {
+      prefix = path.join("/", prefix)
+    }
+    read = prefix = path.resolve(prefix)
+
+    // if (process.platform === "win32")
+    //   read = prefix = prefix.replace(/^[a-zA-Z]:|\\/g, "/")
+
+    this.log('absolute: ', prefix, this.root, pattern, read)
+  } else {
+    read = prefix
+  }
+
+  this.log('readdir(%j)', read, this.cwd, this.root)
+
   return this._readdir(read, function (er, entries) {
     if (er) {
@@ -371,4 +464,14 @@
       }, this)
 
+      s = s.filter(function (pattern) {
+        var key = gsKey(pattern)
+        var seen = !this._globstars[key]
+        this._globstars[key] = true
+        return seen
+      }, this)
+
+      if (!s.length)
+        return cb()
+
       // now asyncForEach over this
       var l = s.length
@@ -389,17 +492,11 @@
     // dot is set.  Stuff like @(.foo|.bar) isn't allowed.
     var pn = pattern[n]
-    if (typeof pn === "string") {
-      var found = entries.indexOf(pn) !== -1
-      entries = found ? entries[pn] : []
-    } else {
-      var rawGlob = pattern[n]._glob
-      , dotOk = this.dot || rawGlob.charAt(0) === "."
-
-      entries = entries.filter(function (e) {
-        return (e.charAt(0) !== "." || dotOk) &&
-               (typeof pattern[n] === "string" && e === pattern[n] ||
-                e.match(pattern[n]))
-      })
-    }
+    var rawGlob = pattern[n]._glob
+    , dotOk = this.dot || rawGlob.charAt(0) === "."
+
+    entries = entries.filter(function (e) {
+      return (e.charAt(0) !== "." || dotOk) &&
+             e.match(pattern[n])
+    })
 
     // If n === pattern.length - 1, then there's no need for the extra stat
@@ -418,4 +515,7 @@
         }
 
+        if (process.platform === "win32")
+          e = e.replace(/\\/g, "/")
+
         this.matches[index] = this.matches[index] || {}
         this.matches[index][e] = true
@@ -443,4 +543,10 @@
 }
 
+function gsKey (pattern) {
+  return '**' + pattern.map(function (p) {
+    return (p === minimatch.GLOBSTAR) ? '**' : (''+p)
+  }).join('/')
+}
+
 Glob.prototype._stat = function (f, cb) {
   assert(this instanceof Glob)
@@ -451,5 +557,5 @@
     abs = path.resolve(this.cwd, f)
   }
-  if (this.debug) console.error('stat', [this.cwd, f, '=', abs])
+
   if (f.length > this.maxLength) {
     var er = new Error("Path name too long")
@@ -459,6 +565,8 @@
   }
 
-  if (this.statCache.hasOwnProperty(f)) {
-    var exists = this.statCache[f]
+  this.log('stat', [this.cwd, f, '=', abs])
+
+  if (!this.stat && this.cache.hasOwnProperty(f)) {
+    var exists = this.cache[f]
     , isDir = exists && (Array.isArray(exists) || exists === 2)
     if (this.sync) return cb.call(this, !!exists, isDir)
@@ -466,6 +574,7 @@
   }
 
-  if (this.sync) {
-    var er, stat
+  var stat = this.statCache[abs]
+  if (this.sync || stat) {
+    var er
     try {
       stat = fs.statSync(abs)
@@ -482,10 +591,25 @@
   var exists
   assert(this instanceof Glob)
+
+  if (abs.slice(-1) === "/" && stat && !stat.isDirectory()) {
+    this.log("should be ENOTDIR, fake it")
+
+    er = new Error("ENOTDIR, not a directory '" + abs + "'")
+    er.path = abs
+    er.code = "ENOTDIR"
+    stat = null
+  }
+
+  var emit = !this.statCache[abs]
+  this.statCache[abs] = stat
+
   if (er || !stat) {
     exists = false
   } else {
     exists = stat.isDirectory() ? 2 : 1
-  }
-  this.statCache[f] = this.statCache[f] || exists
+    if (emit)
+      this.emit('stat', f, stat)
+  }
+  this.cache[f] = this.cache[f] || exists
   cb.call(this, !!exists, exists === 2)
 }
@@ -502,5 +626,4 @@
   }
 
-  if (this.debug) console.error('readdir', [this.cwd, f, abs])
   if (f.length > this.maxLength) {
     var er = new Error("Path name too long")
@@ -510,6 +633,7 @@
   }
 
-  if (this.statCache.hasOwnProperty(f)) {
-    var c = this.statCache[f]
+  this.log('readdir', [this.cwd, f, abs])
+  if (this.cache.hasOwnProperty(f)) {
+    var c = this.cache[f]
     if (Array.isArray(c)) {
       if (this.sync) return cb.call(this, null, c)
@@ -523,5 +647,5 @@
       er.path = f
       er.code = code
-      if (this.debug) console.error(f, er)
+      this.log(f, er)
       if (this.sync) return cb.call(this, er)
       return process.nextTick(cb.bind(this, er))
@@ -549,5 +673,5 @@
   assert(this instanceof Glob)
   if (entries && !er) {
-    this.statCache[f] = entries
+    this.cache[f] = entries
     // if we haven't asked to stat everything for suresies, then just
     // assume that everything in there exists, so we can avoid
@@ -558,5 +682,5 @@
         if (f === "/") e = f + e
         else e = f + "/" + e
-        this.statCache[e] = true
+        this.cache[e] = true
       }, this)
     }
@@ -568,5 +692,5 @@
   if (er) switch (er.code) {
     case "ENOTDIR": // totally normal. means it *does* exist.
-      this.statCache[f] = 1
+      this.cache[f] = 1
       return cb.call(this, er)
     case "ENOENT": // not terribly unusual
@@ -574,8 +698,8 @@
     case "ENAMETOOLONG":
     case "UNKNOWN":
-      this.statCache[f] = false
+      this.cache[f] = false
       return cb.call(this, er)
     default: // some unusual error.  Treat as failure.
-      this.statCache[f] = false
+      this.cache[f] = false
       if (this.strict) this.emit("error", er)
       if (!this.silent) console.error("glob error", er)
@@ -591,5 +715,5 @@
   // from node's lib/path.js
   var splitDeviceRe =
-        /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?([\\\/])?/
+      /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/
     , result = splitDeviceRe.exec(p)
     , device = result[1] || ''
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/inherits/LICENSE
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/inherits/LICENSE	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/inherits/LICENSE	(revision 516)
@@ -0,0 +1,16 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/inherits/README.md
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/inherits/README.md	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/inherits/README.md	(revision 516)
@@ -1,51 +1,42 @@
-A dead simple way to do inheritance in JS.
+Browser-friendly inheritance fully compatible with standard node.js
+[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).
 
-    var inherits = require("inherits")
+This package exports standard `inherits` from node.js `util` module in
+node environment, but also provides alternative browser-friendly
+implementation through [browser
+field](https://gist.github.com/shtylman/4339901). Alternative
+implementation is a literal copy of standard one located in standalone
+module to avoid requiring of `util`. It also has a shim for old
+browsers with no `Object.create` support.
 
-    function Animal () {
-      this.alive = true
-    }
-    Animal.prototype.say = function (what) {
-      console.log(what)
-    }
+While keeping you sure you are using standard `inherits`
+implementation in node.js environment, it allows bundlers such as
+[browserify](https://github.com/substack/node-browserify) to not
+include full `util` package to your client code if all you need is
+just `inherits` function. It worth, because browser shim for `util`
+package is large and `inherits` is often the single function you need
+from it.
 
-    inherits(Dog, Animal)
-    function Dog () {
-      Dog.super.apply(this)
-    }
-    Dog.prototype.sniff = function () {
-      this.say("sniff sniff")
-    }
-    Dog.prototype.bark = function () {
-      this.say("woof woof")
-    }
+It's recommended to use this package instead of
+`require('util').inherits` for any code that has chances to be used
+not only in node.js but in browser too.
 
-    inherits(Chihuahua, Dog)
-    function Chihuahua () {
-      Chihuahua.super.apply(this)
-    }
-    Chihuahua.prototype.bark = function () {
-      this.say("yip yip")
-    }
+## usage
 
-    // also works
-    function Cat () {
-      Cat.super.apply(this)
-    }
-    Cat.prototype.hiss = function () {
-      this.say("CHSKKSS!!")
-    }
-    inherits(Cat, Animal, {
-      meow: function () { this.say("miao miao") }
-    })
-    Cat.prototype.purr = function () {
-      this.say("purr purr")
-    }
+```js
+var inherits = require('inherits');
+// then use exactly as the standard one
+```
 
+## note on version ~1.0
 
-    var c = new Chihuahua
-    assert(c instanceof Chihuahua)
-    assert(c instanceof Dog)
-    assert(c instanceof Animal)
+Version ~1.0 had completely different motivation and is not compatible
+neither with 2.0 nor with standard node.js `inherits`.
 
-The actual function is laughably small.  10-lines small.
+If you are using version ~1.0 and planning to switch to ~2.0, be
+careful:
+
+* new version uses `super_` instead of `super` for referencing
+  superclass
+* new version overwrites current prototype while old one preserves any
+  existing fields on it
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/inherits/inherits.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/inherits/inherits.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/inherits/inherits.js	(revision 516)
@@ -1,29 +1,1 @@
-module.exports = inherits
-
-function inherits (c, p, proto) {
-  proto = proto || {}
-  var e = {}
-  ;[c.prototype, proto].forEach(function (s) {
-    Object.getOwnPropertyNames(s).forEach(function (k) {
-      e[k] = Object.getOwnPropertyDescriptor(s, k)
-    })
-  })
-  c.prototype = Object.create(p.prototype, e)
-  c.super = p
-}
-
-//function Child () {
-//  Child.super.call(this)
-//  console.error([this
-//                ,this.constructor
-//                ,this.constructor === Child
-//                ,this.constructor.super === Parent
-//                ,Object.getPrototypeOf(this) === Child.prototype
-//                ,Object.getPrototypeOf(Object.getPrototypeOf(this))
-//                 === Parent.prototype
-//                ,this instanceof Child
-//                ,this instanceof Parent])
-//}
-//function Parent () {}
-//inherits(Child, Parent)
-//new Child
+module.exports = require('util').inherits
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/inherits/inherits_browser.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/inherits/inherits_browser.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/inherits/inherits_browser.js	(revision 516)
@@ -0,0 +1,23 @@
+if (typeof Object.create === 'function') {
+  // implementation from standard node.js 'util' module
+  module.exports = function inherits(ctor, superCtor) {
+    ctor.super_ = superCtor
+    ctor.prototype = Object.create(superCtor.prototype, {
+      constructor: {
+        value: ctor,
+        enumerable: false,
+        writable: true,
+        configurable: true
+      }
+    });
+  };
+} else {
+  // old school shim for old browsers
+  module.exports = function inherits(ctor, superCtor) {
+    ctor.super_ = superCtor
+    var TempCtor = function () {}
+    TempCtor.prototype = superCtor.prototype
+    ctor.prototype = new TempCtor()
+    ctor.prototype.constructor = ctor
+  }
+}
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/inherits/package.json
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/inherits/package.json	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/inherits/package.json	(revision 516)
@@ -1,6 +1,6 @@
 {
   "name": "inherits",
-  "description": "A tiny simple way to do classic inheritance in js",
-  "version": "1.0.0",
+  "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()",
+  "version": "2.0.1",
   "keywords": [
     "inheritance",
@@ -8,17 +8,20 @@
     "klass",
     "oop",
-    "object-oriented"
+    "object-oriented",
+    "inherits",
+    "browser",
+    "browserify"
   ],
   "main": "./inherits.js",
+  "browser": "./inherits_browser.js",
   "repository": {
     "type": "git",
-    "url": "https://github.com/isaacs/inherits"
+    "url": "git://github.com/isaacs/inherits"
   },
-  "author": {
-    "name": "Isaac Z. Schlueter",
-    "email": "i@izs.me",
-    "url": "http://blog.izs.me/"
+  "license": "ISC",
+  "scripts": {
+    "test": "node test"
   },
-  "readme": "A dead simple way to do inheritance in JS.\n\n    var inherits = require(\"inherits\")\n\n    function Animal () {\n      this.alive = true\n    }\n    Animal.prototype.say = function (what) {\n      console.log(what)\n    }\n\n    inherits(Dog, Animal)\n    function Dog () {\n      Dog.super.apply(this)\n    }\n    Dog.prototype.sniff = function () {\n      this.say(\"sniff sniff\")\n    }\n    Dog.prototype.bark = function () {\n      this.say(\"woof woof\")\n    }\n\n    inherits(Chihuahua, Dog)\n    function Chihuahua () {\n      Chihuahua.super.apply(this)\n    }\n    Chihuahua.prototype.bark = function () {\n      this.say(\"yip yip\")\n    }\n\n    // also works\n    function Cat () {\n      Cat.super.apply(this)\n    }\n    Cat.prototype.hiss = function () {\n      this.say(\"CHSKKSS!!\")\n    }\n    inherits(Cat, Animal, {\n      meow: function () { this.say(\"miao miao\") }\n    })\n    Cat.prototype.purr = function () {\n      this.say(\"purr purr\")\n    }\n\n\n    var c = new Chihuahua\n    assert(c instanceof Chihuahua)\n    assert(c instanceof Dog)\n    assert(c instanceof Animal)\n\nThe actual function is laughably small.  10-lines small.\n",
+  "readme": "Browser-friendly inheritance fully compatible with standard node.js\n[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).\n\nThis package exports standard `inherits` from node.js `util` module in\nnode environment, but also provides alternative browser-friendly\nimplementation through [browser\nfield](https://gist.github.com/shtylman/4339901). Alternative\nimplementation is a literal copy of standard one located in standalone\nmodule to avoid requiring of `util`. It also has a shim for old\nbrowsers with no `Object.create` support.\n\nWhile keeping you sure you are using standard `inherits`\nimplementation in node.js environment, it allows bundlers such as\n[browserify](https://github.com/substack/node-browserify) to not\ninclude full `util` package to your client code if all you need is\njust `inherits` function. It worth, because browser shim for `util`\npackage is large and `inherits` is often the single function you need\nfrom it.\n\nIt's recommended to use this package instead of\n`require('util').inherits` for any code that has chances to be used\nnot only in node.js but in browser too.\n\n## usage\n\n```js\nvar inherits = require('inherits');\n// then use exactly as the standard one\n```\n\n## note on version ~1.0\n\nVersion ~1.0 had completely different motivation and is not compatible\nneither with 2.0 nor with standard node.js `inherits`.\n\nIf you are using version ~1.0 and planning to switch to ~2.0, be\ncareful:\n\n* new version uses `super_` instead of `super` for referencing\n  superclass\n* new version overwrites current prototype while old one preserves any\n  existing fields on it\n",
   "readmeFilename": "README.md",
   "bugs": {
@@ -26,9 +29,5 @@
   },
   "homepage": "https://github.com/isaacs/inherits",
-  "_id": "inherits@1.0.0",
-  "dist": {
-    "shasum": "26467026b3b86de1c6f72f00d9a31b1c97077a92"
-  },
-  "_from": "inherits@1",
-  "_resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.0.tgz"
+  "_id": "inherits@2.0.1",
+  "_from": "inherits@2"
 }
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/inherits/test.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/inherits/test.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/inherits/test.js	(revision 516)
@@ -0,0 +1,25 @@
+var inherits = require('./inherits.js')
+var assert = require('assert')
+
+function test(c) {
+  assert(c.constructor === Child)
+  assert(c.constructor.super_ === Parent)
+  assert(Object.getPrototypeOf(c) === Child.prototype)
+  assert(Object.getPrototypeOf(Object.getPrototypeOf(c)) === Parent.prototype)
+  assert(c instanceof Child)
+  assert(c instanceof Parent)
+}
+
+function Child() {
+  Parent.call(this)
+  test(this)
+}
+
+function Parent() {}
+
+inherits(Child, Parent)
+
+var c = new Child
+test(c)
+
+console.log('ok')
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/.npmignore
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/.npmignore	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/.npmignore	(revision 516)
@@ -0,0 +1,1 @@
+node_modules
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/.travis.yml
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/.travis.yml	(revision 484)
+++ 	(revision )
@@ -1,4 +1,0 @@
-language: node_js
-node_js:
-  - 0.4
-  - 0.6
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/README.md
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/README.md	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/README.md	(revision 516)
@@ -20,4 +20,5 @@
 minimatch("bar.foo", "*.foo") // true!
 minimatch("bar.foo", "*.bar") // false!
+minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy!
 ```
 
@@ -36,42 +37,4 @@
 * `man 3 fnmatch`
 * `man 5 gitignore`
-
-### Comparisons to other fnmatch/glob implementations
-
-While strict compliance with the existing standards is a worthwhile
-goal, some discrepancies exist between minimatch and other
-implementations, and are intentional.
-
-If the pattern starts with a `!` character, then it is negated.  Set the
-`nonegate` flag to suppress this behavior, and treat leading `!`
-characters normally.  This is perhaps relevant if you wish to start the
-pattern with a negative extglob pattern like `!(a|B)`.  Multiple `!`
-characters at the start of a pattern will negate the pattern multiple
-times.
-
-If a pattern starts with `#`, then it is treated as a comment, and
-will not match anything.  Use `\#` to match a literal `#` at the
-start of a line, or set the `nocomment` flag to suppress this behavior.
-
-The double-star character `**` is supported by default, unless the
-`noglobstar` flag is set.  This is supported in the manner of bsdglob
-and bash 4.1, where `**` only has special significance if it is the only
-thing in a path part.  That is, `a/**/b` will match `a/x/y/b`, but
-`a/**b` will not.  **Note that this is different from the way that `**` is
-handled by ruby's `Dir` class.**
-
-If an escaped pattern has no matches, and the `nonull` flag is set,
-then minimatch.match returns the pattern as-provided, rather than
-interpreting the character escapes.  For example,
-`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
-`"*a?"`.  This is akin to setting the `nullglob` option in bash, except
-that it does not resolve escaped pattern characters.
-
-If brace expansion is not disabled, then it is performed before any
-other interpretation of the glob pattern.  Thus, a pattern like
-`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
-**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
-checked for validity.  Since those two are valid, matching proceeds.
-
 
 ## Minimatch Class
@@ -217,2 +180,39 @@
 Returns from negate expressions the same as if they were not negated.
 (Ie, true on a hit, false on a miss.)
+
+
+## Comparisons to other fnmatch/glob implementations
+
+While strict compliance with the existing standards is a worthwhile
+goal, some discrepancies exist between minimatch and other
+implementations, and are intentional.
+
+If the pattern starts with a `!` character, then it is negated.  Set the
+`nonegate` flag to suppress this behavior, and treat leading `!`
+characters normally.  This is perhaps relevant if you wish to start the
+pattern with a negative extglob pattern like `!(a|B)`.  Multiple `!`
+characters at the start of a pattern will negate the pattern multiple
+times.
+
+If a pattern starts with `#`, then it is treated as a comment, and
+will not match anything.  Use `\#` to match a literal `#` at the
+start of a line, or set the `nocomment` flag to suppress this behavior.
+
+The double-star character `**` is supported by default, unless the
+`noglobstar` flag is set.  This is supported in the manner of bsdglob
+and bash 4.1, where `**` only has special significance if it is the only
+thing in a path part.  That is, `a/**/b` will match `a/x/y/b`, but
+`a/**b` will not.
+
+If an escaped pattern has no matches, and the `nonull` flag is set,
+then minimatch.match returns the pattern as-provided, rather than
+interpreting the character escapes.  For example,
+`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
+`"*a?"`.  This is akin to setting the `nullglob` option in bash, except
+that it does not resolve escaped pattern characters.
+
+If brace expansion is not disabled, then it is performed before any
+other interpretation of the glob pattern.  Thus, a pattern like
+`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
+**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
+checked for validity.  Since those two are valid, matching proceeds.
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/minimatch.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/minimatch.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/minimatch.js	(revision 516)
@@ -69,15 +69,4 @@
 var slashSplit = /\/+/
 
-minimatch.monkeyPatch = monkeyPatch
-function monkeyPatch () {
-  var desc = Object.getOwnPropertyDescriptor(String.prototype, "match")
-  var orig = desc.value
-  desc.value = function (p) {
-    if (p instanceof Minimatch) return p.match(this)
-    return orig.call(this, p)
-  }
-  Object.defineProperty(String.prototype, desc)
-}
-
 minimatch.filter = filter
 function filter (pattern, options) {
@@ -179,4 +168,6 @@
 }
 
+Minimatch.prototype.debug = function() {}
+
 Minimatch.prototype.make = make
 function make () {
@@ -203,5 +194,7 @@
   var set = this.globSet = this.braceExpand()
 
-  if (options.debug) console.error(this.pattern, set)
+  if (options.debug) this.debug = console.error
+
+  this.debug(this.pattern, set)
 
   // step 3: now we have a set, so turn each one into a series of path-portion
@@ -214,5 +207,5 @@
   })
 
-  if (options.debug) console.error(this.pattern, set)
+  this.debug(this.pattern, set)
 
   // glob --> regexps
@@ -221,5 +214,5 @@
   }, this)
 
-  if (options.debug) console.error(this.pattern, set)
+  this.debug(this.pattern, set)
 
   // filter out everything that didn't compile properly.
@@ -228,5 +221,5 @@
   })
 
-  if (options.debug) console.error(this.pattern, set)
+  this.debug(this.pattern, set)
 
   this.set = set
@@ -303,9 +296,9 @@
   // and then prepend it to everything we find.
   if (pattern.charAt(0) !== "{") {
-    // console.error(pattern)
+    this.debug(pattern)
     var prefix = null
     for (var i = 0, l = pattern.length; i < l; i ++) {
       var c = pattern.charAt(i)
-      // console.error(i, c)
+      this.debug(i, c)
       if (c === "\\") {
         escaping = !escaping
@@ -318,9 +311,9 @@
     // actually no sets, all { were escaped.
     if (prefix === null) {
-      // console.error("no sets")
+      this.debug("no sets")
       return [pattern]
     }
 
-    var tail = braceExpand(pattern.substr(i), options)
+   var tail = braceExpand.call(this, pattern.substr(i), options)
     return tail.map(function (t) {
       return prefix + t
@@ -337,6 +330,6 @@
   var numset = pattern.match(/^\{(-?[0-9]+)\.\.(-?[0-9]+)\}/)
   if (numset) {
-    // console.error("numset", numset[1], numset[2])
-    var suf = braceExpand(pattern.substr(numset[0].length), options)
+    this.debug("numset", numset[1], numset[2])
+    var suf = braceExpand.call(this, pattern.substr(numset[0].length), options)
       , start = +numset[1]
       , end = +numset[2]
@@ -370,8 +363,8 @@
   }
 
-  // console.error("Entering for")
+  this.debug("Entering for")
   FOR: for (i = 1, l = pattern.length; i < l; i ++) {
     var c = pattern.charAt(i)
-    // console.error("", i, c)
+    this.debug("", i, c)
 
     if (escaping) {
@@ -421,20 +414,20 @@
   // and need to escape the leading brace
   if (depth !== 0) {
-    // console.error("didn't close", pattern)
-    return braceExpand("\\" + pattern, options)
+    this.debug("didn't close", pattern)
+    return braceExpand.call(this, "\\" + pattern, options)
   }
 
   // x{y,z} -> ["xy", "xz"]
-  // console.error("set", set)
-  // console.error("suffix", pattern.substr(i))
-  var suf = braceExpand(pattern.substr(i), options)
+  this.debug("set", set)
+  this.debug("suffix", pattern.substr(i))
+  var suf = braceExpand.call(this, pattern.substr(i), options)
   // ["b", "c{d,e}","{f,g}h"] ->
   //   [["b"], ["cd", "ce"], ["fh", "gh"]]
   var addBraces = set.length === 1
-  // console.error("set pre-expanded", set)
+  this.debug("set pre-expanded", set)
   set = set.map(function (p) {
-    return braceExpand(p, options)
-  })
-  // console.error("set expanded", set)
+    return braceExpand.call(this, p, options)
+  }, this)
+  this.debug("set expanded", set)
 
 
@@ -482,5 +475,5 @@
 
   var re = ""
-    , hasMagic = false
+    , hasMagic = !!options.nocase
     , escaping = false
     // ? => one single character
@@ -497,4 +490,5 @@
       : options.dot ? "(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))"
       : "(?!\\.)"
+    , self = this
 
   function clearStateChar () {
@@ -515,4 +509,5 @@
           break
       }
+      self.debug('clearStateChar %j %j', stateChar, re)
       stateChar = false
     }
@@ -523,7 +518,5 @@
       ; i ++ ) {
 
-    if (options.debug) {
-      console.error("%s\t%s %s %j", pattern, i, re, c)
-    }
+    this.debug("%s\t%s %s %j", pattern, i, re, c)
 
     // skip over any that are escaped.
@@ -552,11 +545,10 @@
       case "@":
       case "!":
-        if (options.debug) {
-          console.error("%s\t%s %s %j <-- stateChar", pattern, i, re, c)
-        }
+        this.debug("%s\t%s %s %j <-- stateChar", pattern, i, re, c)
 
         // all of those are literals inside a class, except that
         // the glob [!a] means [^a] in regexp
         if (inClass) {
+          this.debug('  in class')
           if (c === "!" && i === classStart + 1) c = "^"
           re += c
@@ -567,4 +559,5 @@
         // that there was something like ** or +? in there.
         // Handle the stateChar, then proceed with this one.
+        self.debug('call clearStateChar %j', stateChar)
         clearStateChar()
         stateChar = c
@@ -592,4 +585,5 @@
         // negation is (?:(?!js)[^/]*)
         re += stateChar === "!" ? "(?:(?!" : "(?:"
+        this.debug('plType %j %j', stateChar, re)
         stateChar = false
         continue
@@ -601,4 +595,5 @@
         }
 
+        clearStateChar()
         hasMagic = true
         re += ")"
@@ -624,4 +619,5 @@
         }
 
+        clearStateChar()
         re += "|"
         continue
@@ -716,5 +712,5 @@
     })
 
-    // console.error("tail=%j\n   %s", tail, tail)
+    this.debug("tail=%j\n   %s", tail, tail)
     var t = pl.type === "*" ? star
           : pl.type === "?" ? qmark
@@ -805,5 +801,5 @@
   // must match entire pattern
   // ending in a * or ** will make it less strict.
-  re = "^" + re + "$"
+  re = "^(?:" + re + ")$"
 
   // can match anything, as long as it's not this.
@@ -830,5 +826,5 @@
 Minimatch.prototype.match = match
 function match (f, partial) {
-  // console.error("match", f, this.pattern)
+  this.debug("match", f, this.pattern)
   // short-circuit in the case of busted things.
   // comments, etc.
@@ -848,7 +844,5 @@
   // treat the test path as a set of pathparts.
   f = f.split(slashSplit)
-  if (options.debug) {
-    console.error(this.pattern, "split", f)
-  }
+  this.debug(this.pattern, "split", f)
 
   // just ONE of the pattern sets in this.set needs to match
@@ -858,9 +852,14 @@
 
   var set = this.set
-  // console.error(this.pattern, "set", set)
+  this.debug(this.pattern, "set", set)
+
+  var splitFile = path.basename(f.join("/")).split("/")
 
   for (var i = 0, l = set.length; i < l; i ++) {
-    var pattern = set[i]
-    var hit = this.matchOne(f, pattern, partial)
+    var pattern = set[i], file = f
+    if (options.matchBase && pattern.length === 1) {
+      file = splitFile
+    }
+    var hit = this.matchOne(file, pattern, partial)
     if (hit) {
       if (options.flipNegate) return true
@@ -883,18 +882,10 @@
   var options = this.options
 
-  if (options.debug) {
-    console.error("matchOne",
-                  { "this": this
-                  , file: file
-                  , pattern: pattern })
-  }
-
-  if (options.matchBase && pattern.length === 1) {
-    file = path.basename(file.join("/")).split("/")
-  }
-
-  if (options.debug) {
-    console.error("matchOne", file.length, pattern.length)
-  }
+  this.debug("matchOne",
+              { "this": this
+              , file: file
+              , pattern: pattern })
+
+  this.debug("matchOne", file.length, pattern.length)
 
   for ( var fi = 0
@@ -905,13 +896,9 @@
       ; fi ++, pi ++ ) {
 
-    if (options.debug) {
-      console.error("matchOne loop")
-    }
+    this.debug("matchOne loop")
     var p = pattern[pi]
       , f = file[fi]
 
-    if (options.debug) {
-      console.error(pattern, p, f)
-    }
+    this.debug(pattern, p, f)
 
     // should be impossible.
@@ -920,6 +907,5 @@
 
     if (p === GLOBSTAR) {
-      if (options.debug)
-        console.error('GLOBSTAR', [pattern, p, f])
+      this.debug('GLOBSTAR', [pattern, p, f])
 
       // "**"
@@ -948,6 +934,5 @@
         , pr = pi + 1
       if (pr === pl) {
-        if (options.debug)
-          console.error('** at the end')
+        this.debug('** at the end')
         // a ** at the end will just swallow the rest.
         // We have found a match.
@@ -967,13 +952,10 @@
         var swallowee = file[fr]
 
-        if (options.debug) {
-          console.error('\nglobstar while',
-                        file, fr, pattern, pr, swallowee)
-        }
+        this.debug('\nglobstar while',
+                    file, fr, pattern, pr, swallowee)
 
         // XXX remove this slice.  Just pass the start index.
         if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
-          if (options.debug)
-            console.error('globstar found match!', fr, fl, swallowee)
+          this.debug('globstar found match!', fr, fl, swallowee)
           // found a match.
           return true
@@ -983,12 +965,10 @@
           if (swallowee === "." || swallowee === ".." ||
               (!options.dot && swallowee.charAt(0) === ".")) {
-            if (options.debug)
-              console.error("dot detected!", file, fr, pattern, pr)
+            this.debug("dot detected!", file, fr, pattern, pr)
             break WHILE
           }
 
           // ** swallows a segment, and continue.
-          if (options.debug)
-            console.error('globstar swallow a segment, and continue')
+          this.debug('globstar swallow a segment, and continue')
           fr ++
         }
@@ -999,5 +979,5 @@
       if (partial) {
         // ran out of file
-        // console.error("\n>>> no match, partial?", file, fr, pattern, pr)
+        this.debug("\n>>> no match, partial?", file, fr, pattern, pr)
         if (fr === fl) return true
       }
@@ -1015,12 +995,8 @@
         hit = f === p
       }
-      if (options.debug) {
-        console.error("string match", p, f, hit)
-      }
+      this.debug("string match", p, f, hit)
     } else {
       hit = f.match(p)
-      if (options.debug) {
-        console.error("pattern match", p, f, hit)
-      }
+      this.debug("pattern match", p, f, hit)
     }
 
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/AUTHORS
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/AUTHORS	(revision 484)
+++ 	(revision )
@@ -1,8 +1,0 @@
-# Authors, sorted by whether or not they are me
-Isaac Z. Schlueter <i@izs.me>
-Carlos Brito Lage <carlos@carloslage.net>
-Marko Mikulicic <marko.mikulicic@isti.cnr.it>
-Trent Mick <trentm@gmail.com>
-Kevin O'Hara <kevinohara80@gmail.com>
-Marco Rogers <marco.rogers@gmail.com>
-Jesse Dailey <jesse.dailey@gmail.com>
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS	(revision 516)
@@ -0,0 +1,14 @@
+# Authors, sorted by whether or not they are me
+Isaac Z. Schlueter <i@izs.me>
+Brian Cottingham <spiffytech@gmail.com>
+Carlos Brito Lage <carlos@carloslage.net>
+Jesse Dailey <jesse.dailey@gmail.com>
+Kevin O'Hara <kevinohara80@gmail.com>
+Marco Rogers <marco.rogers@gmail.com>
+Mark Cavage <mcavage@gmail.com>
+Marko Mikulicic <marko.mikulicic@isti.cnr.it>
+Nathan Rajlich <nathan@tootallnate.net>
+Satheesh Natesan <snateshan@myspace-inc.com>
+Trent Mick <trentm@gmail.com>
+ashleybrener <ashley@starlogik.com>
+n4kz <n4kz@n4kz.com>
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md	(revision 516)
@@ -27,5 +27,6 @@
 ## Options
 
-* `max` The maximum number of items.  Not setting this is kind of
+* `max` The maximum size of the cache, checked by applying the length
+  function to all values in the cache.  Not setting this is kind of
   silly, since that's the whole purpose of this lib, but it defaults
   to `Infinity`.
@@ -45,2 +46,52 @@
   to immediately put it back in, you'll have to do that in a
   `nextTick` or `setTimeout` callback or it won't do anything.
+* `stale` By default, if you set a `maxAge`, it'll only actually pull
+  stale items out of the cache when you `get(key)`.  (That is, it's
+  not pre-emptively doing a `setTimeout` or anything.)  If you set
+  `stale:true`, it'll return the stale value before deleting it.  If
+  you don't set this, then it'll return `undefined` when you try to
+  get a stale entry, as if it had already been deleted.
+
+## API
+
+* `set(key, value)`
+* `get(key) => value`
+
+    Both of these will update the "recently used"-ness of the key.
+    They do what you think.
+
+* `peek(key)`
+
+    Returns the key value (or `undefined` if not found) without
+    updating the "recently used"-ness of the key.
+
+    (If you find yourself using this a lot, you *might* be using the
+    wrong sort of data structure, but there are some use cases where
+    it's handy.)
+
+* `del(key)`
+
+    Deletes a key out of the cache.
+
+* `reset()`
+
+    Clear the cache entirely, throwing away all values.
+
+* `has(key)`
+
+    Check if a key is in the cache, without updating the recent-ness
+    or deleting it for being stale.
+
+* `forEach(function(value,key,cache), [thisp])`
+
+    Just like `Array.prototype.forEach`.  Iterates over all the keys
+    in the cache, in order of recent-ness.  (Ie, more recently used
+    items are iterated over first.)
+
+* `keys()`
+
+    Return an array of the keys in the cache.
+
+* `values()`
+
+    Return an array of the values in the cache.
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js	(revision 516)
@@ -15,176 +15,237 @@
 
 function LRUCache (options) {
-  if (!(this instanceof LRUCache)) {
+  if (!(this instanceof LRUCache))
     return new LRUCache(options)
-  }
-
-  var max
-  if (typeof options === 'number') {
-    max = options
-    options = { max: max }
-  }
-  max = options.max
-
-  if (!options) options = {}
-
-  var lengthCalculator = options.length || naiveLength
-
-  if (typeof lengthCalculator !== "function") {
-    lengthCalculator = naiveLength
-  }
-  if (!max || !(typeof max === "number") || max <= 0 ) {
-    // a little bit silly.  maybe this should throw?
-    max = Infinity
-  }
-
-  var maxAge = options.maxAge || null
-
-  var dispose = options.dispose
-
-  var cache = Object.create(null) // hash of items by key
-    , lruList = Object.create(null) // list of items in order of use recency
-    , mru = 0 // most recently used
-    , length = 0 // number of items in the list
-    , itemCount = 0
-
-
-  // resize the cache when the max changes.
-  Object.defineProperty(this, "max",
-    { set : function (mL) {
-        if (!mL || !(typeof mL === "number") || mL <= 0 ) mL = Infinity
-        max = mL
-        // if it gets above double max, trim right away.
-        // otherwise, do it whenever it's convenient.
-        if (length > max) trim()
+
+  if (typeof options === 'number')
+    options = { max: options }
+
+  if (!options)
+    options = {}
+
+  this._max = options.max
+  // Kind of weird to have a default max of Infinity, but oh well.
+  if (!this._max || !(typeof this._max === "number") || this._max <= 0 )
+    this._max = Infinity
+
+  this._lengthCalculator = options.length || naiveLength
+  if (typeof this._lengthCalculator !== "function")
+    this._lengthCalculator = naiveLength
+
+  this._allowStale = options.stale || false
+  this._maxAge = options.maxAge || null
+  this._dispose = options.dispose
+  this.reset()
+}
+
+// resize the cache when the max changes.
+Object.defineProperty(LRUCache.prototype, "max",
+  { set : function (mL) {
+      if (!mL || !(typeof mL === "number") || mL <= 0 ) mL = Infinity
+      this._max = mL
+      if (this._length > this._max) trim(this)
+    }
+  , get : function () { return this._max }
+  , enumerable : true
+  })
+
+// resize the cache when the lengthCalculator changes.
+Object.defineProperty(LRUCache.prototype, "lengthCalculator",
+  { set : function (lC) {
+      if (typeof lC !== "function") {
+        this._lengthCalculator = naiveLength
+        this._length = this._itemCount
+        for (var key in this._cache) {
+          this._cache[key].length = 1
+        }
+      } else {
+        this._lengthCalculator = lC
+        this._length = 0
+        for (var key in this._cache) {
+          this._cache[key].length = this._lengthCalculator(this._cache[key].value)
+          this._length += this._cache[key].length
+        }
       }
-    , get : function () { return max }
-    , enumerable : true
-    })
-
-  // resize the cache when the lengthCalculator changes.
-  Object.defineProperty(this, "lengthCalculator",
-    { set : function (lC) {
-        if (typeof lC !== "function") {
-          lengthCalculator = naiveLength
-          length = itemCount
-          for (var key in cache) {
-            cache[key].length = 1
-          }
-        } else {
-          lengthCalculator = lC
-          length = 0
-          for (var key in cache) {
-            cache[key].length = lengthCalculator(cache[key].value)
-            length += cache[key].length
-          }
-        }
-
-        if (length > max) trim()
-      }
-    , get : function () { return lengthCalculator }
-    , enumerable : true
-    })
-
-  Object.defineProperty(this, "length",
-    { get : function () { return length }
-    , enumerable : true
-    })
-
-
-  Object.defineProperty(this, "itemCount",
-    { get : function () { return itemCount }
-    , enumerable : true
-    })
-
-  this.reset = function () {
-    if (dispose) {
-      for (var k in cache) {
-        dispose(k, cache[k].value)
-      }
-    }
-    cache = {}
-    lruList = {}
-    mru = 0
-    length = 0
-    itemCount = 0
-  }
-
-  // Provided for debugging/dev purposes only. No promises whatsoever that
-  // this API stays stable.
-  this.dump = function () {
-    return cache
-  }
-
-  this.set = function (key, value) {
-    if (hOP(cache, key)) {
-      // dispose of the old one before overwriting
-      if (dispose) dispose(key, cache[key].value)
-      if (maxAge) cache[key].now = Date.now()
-      cache[key].value = value
-      this.get(key)
-      return true
-    }
-
-    var len = lengthCalculator(value)
-    var age = maxAge ? Date.now() : 0
-    var hit = new Entry(key, value, mru++, len, age)
-
-    // oversized objects fall out of cache automatically.
-    if (hit.length > max) {
-      if (dispose) dispose(key, value)
-      return false
-    }
-
-    length += hit.length
-    lruList[hit.lu] = cache[key] = hit
-    itemCount ++
-
-    if (length > max) trim()
+
+      if (this._length > this._max) trim(this)
+    }
+  , get : function () { return this._lengthCalculator }
+  , enumerable : true
+  })
+
+Object.defineProperty(LRUCache.prototype, "length",
+  { get : function () { return this._length }
+  , enumerable : true
+  })
+
+
+Object.defineProperty(LRUCache.prototype, "itemCount",
+  { get : function () { return this._itemCount }
+  , enumerable : true
+  })
+
+LRUCache.prototype.forEach = function (fn, thisp) {
+  thisp = thisp || this
+  var i = 0;
+  for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) {
+    i++
+    var hit = this._lruList[k]
+    if (this._maxAge && (Date.now() - hit.now > this._maxAge)) {
+      del(this, hit)
+      if (!this._allowStale) hit = undefined
+    }
+    if (hit) {
+      fn.call(thisp, hit.value, hit.key, this)
+    }
+  }
+}
+
+LRUCache.prototype.keys = function () {
+  var keys = new Array(this._itemCount)
+  var i = 0
+  for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) {
+    var hit = this._lruList[k]
+    keys[i++] = hit.key
+  }
+  return keys
+}
+
+LRUCache.prototype.values = function () {
+  var values = new Array(this._itemCount)
+  var i = 0
+  for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) {
+    var hit = this._lruList[k]
+    values[i++] = hit.value
+  }
+  return values
+}
+
+LRUCache.prototype.reset = function () {
+  if (this._dispose && this._cache) {
+    for (var k in this._cache) {
+      this._dispose(k, this._cache[k].value)
+    }
+  }
+
+  this._cache = Object.create(null) // hash of items by key
+  this._lruList = Object.create(null) // list of items in order of use recency
+  this._mru = 0 // most recently used
+  this._lru = 0 // least recently used
+  this._length = 0 // number of items in the list
+  this._itemCount = 0
+}
+
+// Provided for debugging/dev purposes only. No promises whatsoever that
+// this API stays stable.
+LRUCache.prototype.dump = function () {
+  return this._cache
+}
+
+LRUCache.prototype.dumpLru = function () {
+  return this._lruList
+}
+
+LRUCache.prototype.set = function (key, value) {
+  if (hOP(this._cache, key)) {
+    // dispose of the old one before overwriting
+    if (this._dispose) this._dispose(key, this._cache[key].value)
+    if (this._maxAge) this._cache[key].now = Date.now()
+    this._cache[key].value = value
+    this.get(key)
     return true
   }
 
-  this.get = function (key) {
-    if (!hOP(cache, key)) return
-    var hit = cache[key]
-    if (maxAge && (Date.now() - hit.now > maxAge)) {
-      this.del(key)
-      return
-    }
-    delete lruList[hit.lu]
-    hit.lu = mru ++
-    lruList[hit.lu] = hit
-    return hit.value
-  }
-
-  this.del = function (key) {
-    if (!hOP(cache, key)) return
-    var hit = cache[key]
-    if (dispose) dispose(key, hit.value)
-    delete cache[key]
-    delete lruList[hit.lu]
-    length -= hit.length
-    itemCount --
-  }
-
-  function trim () {
-    if (length <= max) return
-    for (var k in lruList) {
-      if (length <= max) break;
-      var hit = lruList[k]
-      if (dispose) dispose(hit.key, hit.value)
-      length -= hit.length
-      delete cache[ hit.key ]
-      delete lruList[k]
-    }
+  var len = this._lengthCalculator(value)
+  var age = this._maxAge ? Date.now() : 0
+  var hit = new Entry(key, value, this._mru++, len, age)
+
+  // oversized objects fall out of cache automatically.
+  if (hit.length > this._max) {
+    if (this._dispose) this._dispose(key, value)
+    return false
+  }
+
+  this._length += hit.length
+  this._lruList[hit.lu] = this._cache[key] = hit
+  this._itemCount ++
+
+  if (this._length > this._max) trim(this)
+  return true
+}
+
+LRUCache.prototype.has = function (key) {
+  if (!hOP(this._cache, key)) return false
+  var hit = this._cache[key]
+  if (this._maxAge && (Date.now() - hit.now > this._maxAge)) {
+    return false
+  }
+  return true
+}
+
+LRUCache.prototype.get = function (key) {
+  return get(this, key, true)
+}
+
+LRUCache.prototype.peek = function (key) {
+  return get(this, key, false)
+}
+
+LRUCache.prototype.pop = function () {
+  var hit = this._lruList[this._lru]
+  del(this, hit)
+  return hit || null
+}
+
+LRUCache.prototype.del = function (key) {
+  del(this, this._cache[key])
+}
+
+function get (self, key, doUse) {
+  var hit = self._cache[key]
+  if (hit) {
+    if (self._maxAge && (Date.now() - hit.now > self._maxAge)) {
+      del(self, hit)
+      if (!self._allowStale) hit = undefined
+    } else {
+      if (doUse) use(self, hit)
+    }
+    if (hit) hit = hit.value
+  }
+  return hit
+}
+
+function use (self, hit) {
+  shiftLU(self, hit)
+  hit.lu = self._mru ++
+  self._lruList[hit.lu] = hit
+}
+
+function trim (self) {
+  while (self._lru < self._mru && self._length > self._max)
+    del(self, self._lruList[self._lru])
+}
+
+function shiftLU (self, hit) {
+  delete self._lruList[ hit.lu ]
+  while (self._lru < self._mru && !self._lruList[self._lru]) self._lru ++
+}
+
+function del (self, hit) {
+  if (hit) {
+    if (self._dispose) self._dispose(hit.key, hit.value)
+    self._length -= hit.length
+    self._itemCount --
+    delete self._cache[ hit.key ]
+    shiftLU(self, hit)
   }
 }
 
 // classy, since V8 prefers predictable objects.
-function Entry (key, value, mru, len, age) {
+function Entry (key, value, lu, length, now) {
   this.key = key
   this.value = value
-  this.lu = mru
-  this.length = len
-  this.now = age
+  this.lu = lu
+  this.length = length
+  this.now = now
 }
 
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json	(revision 516)
@@ -2,5 +2,5 @@
   "name": "lru-cache",
   "description": "A cache object that deletes the least-recently-used items.",
-  "version": "2.0.4",
+  "version": "2.5.0",
   "author": {
     "name": "Isaac Z. Schlueter",
@@ -8,5 +8,5 @@
   },
   "scripts": {
-    "test": "tap test"
+    "test": "tap test --gc"
   },
   "main": "lib/lru-cache.js",
@@ -16,5 +16,6 @@
   },
   "devDependencies": {
-    "tap": ""
+    "tap": "",
+    "weak": ""
   },
   "license": {
@@ -22,35 +23,5 @@
     "url": "http://github.com/isaacs/node-lru-cache/raw/master/LICENSE"
   },
-  "contributors": [
-    {
-      "name": "Isaac Z. Schlueter",
-      "email": "i@izs.me"
-    },
-    {
-      "name": "Carlos Brito Lage",
-      "email": "carlos@carloslage.net"
-    },
-    {
-      "name": "Marko Mikulicic",
-      "email": "marko.mikulicic@isti.cnr.it"
-    },
-    {
-      "name": "Trent Mick",
-      "email": "trentm@gmail.com"
-    },
-    {
-      "name": "Kevin O'Hara",
-      "email": "kevinohara80@gmail.com"
-    },
-    {
-      "name": "Marco Rogers",
-      "email": "marco.rogers@gmail.com"
-    },
-    {
-      "name": "Jesse Dailey",
-      "email": "jesse.dailey@gmail.com"
-    }
-  ],
-  "readme": "# lru cache\n\nA cache object that deletes the least-recently-used items.\n\n## Usage:\n\n```javascript\nvar LRU = require(\"lru-cache\")\n  , options = { max: 500\n              , length: function (n) { return n * 2 }\n              , dispose: function (key, n) { n.close() }\n              , maxAge: 1000 * 60 * 60 }\n  , cache = LRU(options)\n  , otherCache = LRU(50) // sets just the max size\n\ncache.set(\"key\", \"value\")\ncache.get(\"key\") // \"value\"\n\ncache.reset()    // empty the cache\n```\n\nIf you put more stuff in it, then items will fall out.\n\nIf you try to put an oversized thing in it, then it'll fall out right\naway.\n\n## Options\n\n* `max` The maximum number of items.  Not setting this is kind of\n  silly, since that's the whole purpose of this lib, but it defaults\n  to `Infinity`.\n* `maxAge` Maximum age in ms.  Items are not pro-actively pruned out\n  as they age, but if you try to get an item that is too old, it'll\n  drop it and return undefined instead of giving it to you.\n* `length` Function that is used to calculate the length of stored\n  items.  If you're storing strings or buffers, then you probably want\n  to do something like `function(n){return n.length}`.  The default is\n  `function(n){return 1}`, which is fine if you want to store `n`\n  like-sized things.\n* `dispose` Function that is called on items when they are dropped\n  from the cache.  This can be handy if you want to close file\n  descriptors or do other cleanup tasks when items are no longer\n  accessible.  Called with `key, value`.  It's called *before*\n  actually removing the item from the internal cache, so if you want\n  to immediately put it back in, you'll have to do that in a\n  `nextTick` or `setTimeout` callback or it won't do anything.\n",
+  "readme": "# lru cache\n\nA cache object that deletes the least-recently-used items.\n\n## Usage:\n\n```javascript\nvar LRU = require(\"lru-cache\")\n  , options = { max: 500\n              , length: function (n) { return n * 2 }\n              , dispose: function (key, n) { n.close() }\n              , maxAge: 1000 * 60 * 60 }\n  , cache = LRU(options)\n  , otherCache = LRU(50) // sets just the max size\n\ncache.set(\"key\", \"value\")\ncache.get(\"key\") // \"value\"\n\ncache.reset()    // empty the cache\n```\n\nIf you put more stuff in it, then items will fall out.\n\nIf you try to put an oversized thing in it, then it'll fall out right\naway.\n\n## Options\n\n* `max` The maximum size of the cache, checked by applying the length\n  function to all values in the cache.  Not setting this is kind of\n  silly, since that's the whole purpose of this lib, but it defaults\n  to `Infinity`.\n* `maxAge` Maximum age in ms.  Items are not pro-actively pruned out\n  as they age, but if you try to get an item that is too old, it'll\n  drop it and return undefined instead of giving it to you.\n* `length` Function that is used to calculate the length of stored\n  items.  If you're storing strings or buffers, then you probably want\n  to do something like `function(n){return n.length}`.  The default is\n  `function(n){return 1}`, which is fine if you want to store `n`\n  like-sized things.\n* `dispose` Function that is called on items when they are dropped\n  from the cache.  This can be handy if you want to close file\n  descriptors or do other cleanup tasks when items are no longer\n  accessible.  Called with `key, value`.  It's called *before*\n  actually removing the item from the internal cache, so if you want\n  to immediately put it back in, you'll have to do that in a\n  `nextTick` or `setTimeout` callback or it won't do anything.\n* `stale` By default, if you set a `maxAge`, it'll only actually pull\n  stale items out of the cache when you `get(key)`.  (That is, it's\n  not pre-emptively doing a `setTimeout` or anything.)  If you set\n  `stale:true`, it'll return the stale value before deleting it.  If\n  you don't set this, then it'll return `undefined` when you try to\n  get a stale entry, as if it had already been deleted.\n\n## API\n\n* `set(key, value)`\n* `get(key) => value`\n\n    Both of these will update the \"recently used\"-ness of the key.\n    They do what you think.\n\n* `peek(key)`\n\n    Returns the key value (or `undefined` if not found) without\n    updating the \"recently used\"-ness of the key.\n\n    (If you find yourself using this a lot, you *might* be using the\n    wrong sort of data structure, but there are some use cases where\n    it's handy.)\n\n* `del(key)`\n\n    Deletes a key out of the cache.\n\n* `reset()`\n\n    Clear the cache entirely, throwing away all values.\n\n* `has(key)`\n\n    Check if a key is in the cache, without updating the recent-ness\n    or deleting it for being stale.\n\n* `forEach(function(value,key,cache), [thisp])`\n\n    Just like `Array.prototype.forEach`.  Iterates over all the keys\n    in the cache, in order of recent-ness.  (Ie, more recently used\n    items are iterated over first.)\n\n* `keys()`\n\n    Return an array of the keys in the cache.\n\n* `values()`\n\n    Return an array of the values in the cache.\n",
   "readmeFilename": "README.md",
   "bugs": {
@@ -58,9 +29,5 @@
   },
   "homepage": "https://github.com/isaacs/node-lru-cache",
-  "_id": "lru-cache@2.0.4",
-  "dist": {
-    "shasum": "65a440a9ccba331dd1a4cabc937c22dba39bb105"
-  },
-  "_from": "lru-cache@2.0.4",
-  "_resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.0.4.tgz"
+  "_id": "lru-cache@2.5.0",
+  "_from": "lru-cache@2"
 }
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js	(revision 516)
@@ -266,2 +266,104 @@
   t.end()
 })
+
+test("has()", function(t) {
+  var cache = new LRU({
+    max: 1,
+    maxAge: 10
+  })
+
+  cache.set('foo', 'bar')
+  t.equal(cache.has('foo'), true)
+  cache.set('blu', 'baz')
+  t.equal(cache.has('foo'), false)
+  t.equal(cache.has('blu'), true)
+  setTimeout(function() {
+    t.equal(cache.has('blu'), false)
+    t.end()
+  }, 15)
+})
+
+test("stale", function(t) {
+  var cache = new LRU({
+    maxAge: 10,
+    stale: true
+  })
+
+  cache.set('foo', 'bar')
+  t.equal(cache.get('foo'), 'bar')
+  t.equal(cache.has('foo'), true)
+  setTimeout(function() {
+    t.equal(cache.has('foo'), false)
+    t.equal(cache.get('foo'), 'bar')
+    t.equal(cache.get('foo'), undefined)
+    t.end()
+  }, 15)
+})
+
+test("lru update via set", function(t) {
+  var cache = LRU({ max: 2 });
+
+  cache.set('foo', 1);
+  cache.set('bar', 2);
+  cache.del('bar');
+  cache.set('baz', 3);
+  cache.set('qux', 4);
+
+  t.equal(cache.get('foo'), undefined)
+  t.equal(cache.get('bar'), undefined)
+  t.equal(cache.get('baz'), 3)
+  t.equal(cache.get('qux'), 4)
+  t.end()
+})
+
+test("least recently set w/ peek", function (t) {
+  var cache = new LRU(2)
+  cache.set("a", "A")
+  cache.set("b", "B")
+  t.equal(cache.peek("a"), "A")
+  cache.set("c", "C")
+  t.equal(cache.get("c"), "C")
+  t.equal(cache.get("b"), "B")
+  t.equal(cache.get("a"), undefined)
+  t.end()
+})
+
+test("pop the least used item", function (t) {
+  var cache = new LRU(3)
+  , last
+
+  cache.set("a", "A")
+  cache.set("b", "B")
+  cache.set("c", "C")
+
+  t.equal(cache.length, 3)
+  t.equal(cache.max, 3)
+
+  // Ensure we pop a, c, b
+  cache.get("b", "B")
+
+  last = cache.pop()
+  t.equal(last.key, "a")
+  t.equal(last.value, "A")
+  t.equal(cache.length, 2)
+  t.equal(cache.max, 3)
+
+  last = cache.pop()
+  t.equal(last.key, "c")
+  t.equal(last.value, "C")
+  t.equal(cache.length, 1)
+  t.equal(cache.max, 3)
+
+  last = cache.pop()
+  t.equal(last.key, "b")
+  t.equal(last.value, "B")
+  t.equal(cache.length, 0)
+  t.equal(cache.max, 3)
+
+  last = cache.pop()
+  t.equal(last, null)
+  t.equal(cache.length, 0)
+  t.equal(cache.max, 3)
+
+  t.end()
+})
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js	(revision 516)
@@ -0,0 +1,52 @@
+var test = require('tap').test
+var LRU = require('../')
+
+test('forEach', function (t) {
+  var l = new LRU(5)
+  for (var i = 0; i < 10; i ++) {
+    l.set(i.toString(), i.toString(2))
+  }
+
+  var i = 9
+  l.forEach(function (val, key, cache) {
+    t.equal(cache, l)
+    t.equal(key, i.toString())
+    t.equal(val, i.toString(2))
+    i -= 1
+  })
+
+  // get in order of most recently used
+  l.get(6)
+  l.get(8)
+
+  var order = [ 8, 6, 9, 7, 5 ]
+  var i = 0
+
+  l.forEach(function (val, key, cache) {
+    var j = order[i ++]
+    t.equal(cache, l)
+    t.equal(key, j.toString())
+    t.equal(val, j.toString(2))
+  })
+
+  t.end()
+})
+
+test('keys() and values()', function (t) {
+  var l = new LRU(5)
+  for (var i = 0; i < 10; i ++) {
+    l.set(i.toString(), i.toString(2))
+  }
+
+  t.similar(l.keys(), ['9', '8', '7', '6', '5'])
+  t.similar(l.values(), ['1001', '1000', '111', '110', '101'])
+
+  // get in order of most recently used
+  l.get(6)
+  l.get(8)
+
+  t.similar(l.keys(), ['8', '6', '9', '7', '5'])
+  t.similar(l.values(), ['1000', '110', '1001', '111', '101'])
+
+  t.end()
+})
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js	(revision 516)
@@ -0,0 +1,50 @@
+#!/usr/bin/env node --expose_gc
+
+var weak = require('weak');
+var test = require('tap').test
+var LRU = require('../')
+var l = new LRU({ max: 10 })
+var refs = 0
+function X() {
+  refs ++
+  weak(this, deref)
+}
+
+function deref() {
+  refs --
+}
+
+test('no leaks', function (t) {
+  // fill up the cache
+  for (var i = 0; i < 100; i++) {
+    l.set(i, new X);
+    // throw some gets in there, too.
+    if (i % 2 === 0)
+      l.get(i / 2)
+  }
+
+  gc()
+
+  var start = process.memoryUsage()
+
+  // capture the memory
+  var startRefs = refs
+
+  // do it again, but more
+  for (var i = 0; i < 10000; i++) {
+    l.set(i, new X);
+    // throw some gets in there, too.
+    if (i % 2 === 0)
+      l.get(i / 2)
+  }
+
+  gc()
+
+  var end = process.memoryUsage()
+  t.equal(refs, startRefs, 'no leaky refs')
+
+  console.error('start: %j\n' +
+                'end:   %j', start, end);
+  t.pass();
+  t.end();
+})
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json	(revision 516)
@@ -39,8 +39,4 @@
   "homepage": "https://github.com/isaacs/sigmund",
   "_id": "sigmund@1.0.0",
-  "_from": "sigmund@1.0.0",
-  "dist": {
-    "shasum": "4d1a782fdcf140509fd8ea166574e0665819b881"
-  },
-  "_resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
+  "_from": "sigmund@~1.0.0"
 }
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/package.json
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/package.json	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/package.json	(revision 516)
@@ -7,5 +7,5 @@
   "name": "minimatch",
   "description": "a glob matcher in javascript",
-  "version": "0.2.9",
+  "version": "0.2.14",
   "repository": {
     "type": "git",
@@ -14,5 +14,5 @@
   "main": "minimatch.js",
   "scripts": {
-    "test": "tap test"
+    "test": "tap test/*.js"
   },
   "engines": {
@@ -20,5 +20,5 @@
   },
   "dependencies": {
-    "lru-cache": "~2.0.0",
+    "lru-cache": "2",
     "sigmund": "~1.0.0"
   },
@@ -30,5 +30,5 @@
     "url": "http://github.com/isaacs/minimatch/raw/master/LICENSE"
   },
-  "readme": "# minimatch\n\nA minimal matching utility.\n\n[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch)\n\n\nThis is the matching library used internally by npm.\n\nEventually, it will replace the C binding in node-glob.\n\nIt works by converting glob expressions into JavaScript `RegExp`\nobjects.\n\n## Usage\n\n```javascript\nvar minimatch = require(\"minimatch\")\n\nminimatch(\"bar.foo\", \"*.foo\") // true!\nminimatch(\"bar.foo\", \"*.bar\") // false!\n```\n\n## Features\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n\n### Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between minimatch and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated.  Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally.  This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`.  Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything.  Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set.  This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part.  That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.  **Note that this is different from the way that `**` is\nhandled by ruby's `Dir` class.**\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen minimatch.match returns the pattern as-provided, rather than\ninterpreting the character escapes.  For example,\n`minimatch.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`.  This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern.  Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity.  Since those two are valid, matching proceeds.\n\n\n## Minimatch Class\n\nCreate a minimatch object by instanting the `minimatch.Minimatch` class.\n\n```javascript\nvar Minimatch = require(\"minimatch\").Minimatch\nvar mm = new Minimatch(pattern, options)\n```\n\n### Properties\n\n* `pattern` The original pattern the minimatch object represents.\n* `options` The options supplied to the constructor.\n* `set` A 2-dimensional array of regexp or string expressions.\n  Each row in the\n  array corresponds to a brace-expanded pattern.  Each item in the row\n  corresponds to a single path-part.  For example, the pattern\n  `{a,b/c}/d` would expand to a set of patterns like:\n\n        [ [ a, d ]\n        , [ b, c, d ] ]\n\n    If a portion of the pattern doesn't have any \"magic\" in it\n    (that is, it's something like `\"foo\"` rather than `fo*o?`), then it\n    will be left as a string rather than converted to a regular\n    expression.\n\n* `regexp` Created by the `makeRe` method.  A single regular expression\n  expressing the entire pattern.  This is useful in cases where you wish\n  to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.\n* `negate` True if the pattern is negated.\n* `comment` True if the pattern is a comment.\n* `empty` True if the pattern is `\"\"`.\n\n### Methods\n\n* `makeRe` Generate the `regexp` member if necessary, and return it.\n  Will return `false` if the pattern is invalid.\n* `match(fname)` Return true if the filename matches the pattern, or\n  false otherwise.\n* `matchOne(fileArray, patternArray, partial)` Take a `/`-split\n  filename, and match it against a single row in the `regExpSet`.  This\n  method is mainly for internal use, but is exposed so that it can be\n  used by a glob-walker that needs to avoid excessive filesystem calls.\n\nAll other methods are internal, and will be called as necessary.\n\n## Functions\n\nThe top-level exported function has a `cache` property, which is an LRU\ncache set to store 100 items.  So, calling these methods repeatedly\nwith the same pattern and options will use the same Minimatch object,\nsaving the cost of parsing it multiple times.\n\n### minimatch(path, pattern, options)\n\nMain export.  Tests a path against the pattern using the options.\n\n```javascript\nvar isJS = minimatch(file, \"*.js\", { matchBase: true })\n```\n\n### minimatch.filter(pattern, options)\n\nReturns a function that tests its\nsupplied argument, suitable for use with `Array.filter`.  Example:\n\n```javascript\nvar javascripts = fileList.filter(minimatch.filter(\"*.js\", {matchBase: true}))\n```\n\n### minimatch.match(list, pattern, options)\n\nMatch against the list of\nfiles, in the style of fnmatch or glob.  If nothing is matched, and\noptions.nonull is set, then return a list containing the pattern itself.\n\n```javascript\nvar javascripts = minimatch.match(fileList, \"*.js\", {matchBase: true}))\n```\n\n### minimatch.makeRe(pattern, options)\n\nMake a regular expression object from the pattern.\n\n## Options\n\nAll options are `false` by default.\n\n### debug\n\nDump a ton of stuff to stderr.\n\n### nobrace\n\nDo not expand `{a,b}` and `{1..3}` brace sets.\n\n### noglobstar\n\nDisable `**` matching against multiple folder names.\n\n### dot\n\nAllow patterns to match filenames starting with a period, even if\nthe pattern does not explicitly have a period in that spot.\n\nNote that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`\nis set.\n\n### noext\n\nDisable \"extglob\" style patterns like `+(a|b)`.\n\n### nocase\n\nPerform a case-insensitive match.\n\n### nonull\n\nWhen a match is not found by `minimatch.match`, return a list containing\nthe pattern itself.  When set, an empty list is returned if there are\nno matches.\n\n### matchBase\n\nIf set, then patterns without slashes will be matched\nagainst the basename of the path if it contains slashes.  For example,\n`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.\n\n### nocomment\n\nSuppress the behavior of treating `#` at the start of a pattern as a\ncomment.\n\n### nonegate\n\nSuppress the behavior of treating a leading `!` character as negation.\n\n### flipNegate\n\nReturns from negate expressions the same as if they were not negated.\n(Ie, true on a hit, false on a miss.)\n",
+  "readme": "# minimatch\n\nA minimal matching utility.\n\n[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch)\n\n\nThis is the matching library used internally by npm.\n\nEventually, it will replace the C binding in node-glob.\n\nIt works by converting glob expressions into JavaScript `RegExp`\nobjects.\n\n## Usage\n\n```javascript\nvar minimatch = require(\"minimatch\")\n\nminimatch(\"bar.foo\", \"*.foo\") // true!\nminimatch(\"bar.foo\", \"*.bar\") // false!\nminimatch(\"bar.foo\", \"*.+(bar|foo)\", { debug: true }) // true, and noisy!\n```\n\n## Features\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n\n## Minimatch Class\n\nCreate a minimatch object by instanting the `minimatch.Minimatch` class.\n\n```javascript\nvar Minimatch = require(\"minimatch\").Minimatch\nvar mm = new Minimatch(pattern, options)\n```\n\n### Properties\n\n* `pattern` The original pattern the minimatch object represents.\n* `options` The options supplied to the constructor.\n* `set` A 2-dimensional array of regexp or string expressions.\n  Each row in the\n  array corresponds to a brace-expanded pattern.  Each item in the row\n  corresponds to a single path-part.  For example, the pattern\n  `{a,b/c}/d` would expand to a set of patterns like:\n\n        [ [ a, d ]\n        , [ b, c, d ] ]\n\n    If a portion of the pattern doesn't have any \"magic\" in it\n    (that is, it's something like `\"foo\"` rather than `fo*o?`), then it\n    will be left as a string rather than converted to a regular\n    expression.\n\n* `regexp` Created by the `makeRe` method.  A single regular expression\n  expressing the entire pattern.  This is useful in cases where you wish\n  to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.\n* `negate` True if the pattern is negated.\n* `comment` True if the pattern is a comment.\n* `empty` True if the pattern is `\"\"`.\n\n### Methods\n\n* `makeRe` Generate the `regexp` member if necessary, and return it.\n  Will return `false` if the pattern is invalid.\n* `match(fname)` Return true if the filename matches the pattern, or\n  false otherwise.\n* `matchOne(fileArray, patternArray, partial)` Take a `/`-split\n  filename, and match it against a single row in the `regExpSet`.  This\n  method is mainly for internal use, but is exposed so that it can be\n  used by a glob-walker that needs to avoid excessive filesystem calls.\n\nAll other methods are internal, and will be called as necessary.\n\n## Functions\n\nThe top-level exported function has a `cache` property, which is an LRU\ncache set to store 100 items.  So, calling these methods repeatedly\nwith the same pattern and options will use the same Minimatch object,\nsaving the cost of parsing it multiple times.\n\n### minimatch(path, pattern, options)\n\nMain export.  Tests a path against the pattern using the options.\n\n```javascript\nvar isJS = minimatch(file, \"*.js\", { matchBase: true })\n```\n\n### minimatch.filter(pattern, options)\n\nReturns a function that tests its\nsupplied argument, suitable for use with `Array.filter`.  Example:\n\n```javascript\nvar javascripts = fileList.filter(minimatch.filter(\"*.js\", {matchBase: true}))\n```\n\n### minimatch.match(list, pattern, options)\n\nMatch against the list of\nfiles, in the style of fnmatch or glob.  If nothing is matched, and\noptions.nonull is set, then return a list containing the pattern itself.\n\n```javascript\nvar javascripts = minimatch.match(fileList, \"*.js\", {matchBase: true}))\n```\n\n### minimatch.makeRe(pattern, options)\n\nMake a regular expression object from the pattern.\n\n## Options\n\nAll options are `false` by default.\n\n### debug\n\nDump a ton of stuff to stderr.\n\n### nobrace\n\nDo not expand `{a,b}` and `{1..3}` brace sets.\n\n### noglobstar\n\nDisable `**` matching against multiple folder names.\n\n### dot\n\nAllow patterns to match filenames starting with a period, even if\nthe pattern does not explicitly have a period in that spot.\n\nNote that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`\nis set.\n\n### noext\n\nDisable \"extglob\" style patterns like `+(a|b)`.\n\n### nocase\n\nPerform a case-insensitive match.\n\n### nonull\n\nWhen a match is not found by `minimatch.match`, return a list containing\nthe pattern itself.  When set, an empty list is returned if there are\nno matches.\n\n### matchBase\n\nIf set, then patterns without slashes will be matched\nagainst the basename of the path if it contains slashes.  For example,\n`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.\n\n### nocomment\n\nSuppress the behavior of treating `#` at the start of a pattern as a\ncomment.\n\n### nonegate\n\nSuppress the behavior of treating a leading `!` character as negation.\n\n### flipNegate\n\nReturns from negate expressions the same as if they were not negated.\n(Ie, true on a hit, false on a miss.)\n\n\n## Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between minimatch and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated.  Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally.  This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`.  Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything.  Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set.  This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part.  That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen minimatch.match returns the pattern as-provided, rather than\ninterpreting the character escapes.  For example,\n`minimatch.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`.  This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern.  Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity.  Since those two are valid, matching proceeds.\n",
   "readmeFilename": "README.md",
   "bugs": {
@@ -36,9 +36,5 @@
   },
   "homepage": "https://github.com/isaacs/minimatch",
-  "_id": "minimatch@0.2.9",
-  "dist": {
-    "shasum": "451806a2fb9fdc263b5a2d340bda92d62590b4f4"
-  },
-  "_from": "minimatch@0.2.9",
-  "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.9.tgz"
+  "_id": "minimatch@0.2.14",
+  "_from": "minimatch@~0.2.11"
 }
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/test/basic.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/test/basic.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/test/basic.js	(revision 516)
@@ -14,272 +14,374 @@
                         , ".x", ".y" ])
 
+
+var patterns =
+  [ "http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test"
+  , ["a*", ["a", "abc", "abd", "abe"]]
+  , ["X*", ["X*"], {nonull: true}]
+
+  // allow null glob expansion
+  , ["X*", []]
+
+  // isaacs: Slightly different than bash/sh/ksh
+  // \\* is not un-escaped to literal "*" in a failed match,
+  // but it does make it get treated as a literal star
+  , ["\\*", ["\\*"], {nonull: true}]
+  , ["\\**", ["\\**"], {nonull: true}]
+  , ["\\*\\*", ["\\*\\*"], {nonull: true}]
+
+  , ["b*/", ["bdir/"]]
+  , ["c*", ["c", "ca", "cb"]]
+  , ["**", files]
+
+  , ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}]
+  , ["s/\\..*//", ["s/\\..*//"], {nonull: true}]
+
+  , "legendary larry crashes bashes"
+  , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"
+    , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}]
+  , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"
+    , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}]
+
+  , "character classes"
+  , ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]]
+  , ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd",
+     "bdir/", "ca", "cb", "dd", "de"]]
+  , ["a*[^c]", ["abd", "abe"]]
+  , function () { files.push("a-b", "aXb") }
+  , ["a[X-]b", ["a-b", "aXb"]]
+  , function () { files.push(".x", ".y") }
+  , ["[^a-c]*", ["d", "dd", "de"]]
+  , function () { files.push("a*b/", "a*b/ooo") }
+  , ["a\\*b/*", ["a*b/ooo"]]
+  , ["a\\*?/*", ["a*b/ooo"]]
+  , ["*\\\\!*", [], {null: true}, ["echo !7"]]
+  , ["*\\!*", ["echo !7"], null, ["echo !7"]]
+  , ["*.\\*", ["r.*"], null, ["r.*"]]
+  , ["a[b]c", ["abc"]]
+  , ["a[\\b]c", ["abc"]]
+  , ["a?c", ["abc"]]
+  , ["a\\*c", [], {null: true}, ["abc"]]
+  , ["", [""], { null: true }, [""]]
+
+  , "http://www.opensource.apple.com/source/bash/bash-23/" +
+    "bash/tests/glob-test"
+  , function () { files.push("man/", "man/man1/", "man/man1/bash.1") }
+  , ["*/man*/bash.*", ["man/man1/bash.1"]]
+  , ["man/man1/bash.1", ["man/man1/bash.1"]]
+  , ["a***c", ["abc"], null, ["abc"]]
+  , ["a*****?c", ["abc"], null, ["abc"]]
+  , ["?*****??", ["abc"], null, ["abc"]]
+  , ["*****??", ["abc"], null, ["abc"]]
+  , ["?*****?c", ["abc"], null, ["abc"]]
+  , ["?***?****c", ["abc"], null, ["abc"]]
+  , ["?***?****?", ["abc"], null, ["abc"]]
+  , ["?***?****", ["abc"], null, ["abc"]]
+  , ["*******c", ["abc"], null, ["abc"]]
+  , ["*******?", ["abc"], null, ["abc"]]
+  , ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
+  , ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
+  , ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]]
+  , ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
+  , ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]]
+  , ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]]
+  , ["[-abc]", ["-"], null, ["-"]]
+  , ["[abc-]", ["-"], null, ["-"]]
+  , ["\\", ["\\"], null, ["\\"]]
+  , ["[\\\\]", ["\\"], null, ["\\"]]
+  , ["[[]", ["["], null, ["["]]
+  , ["[", ["["], null, ["["]]
+  , ["[*", ["[abc"], null, ["[abc"]]
+  , "a right bracket shall lose its special meaning and\n" +
+    "represent itself in a bracket expression if it occurs\n" +
+    "first in the list.  -- POSIX.2 2.8.3.2"
+  , ["[]]", ["]"], null, ["]"]]
+  , ["[]-]", ["]"], null, ["]"]]
+  , ["[a-\z]", ["p"], null, ["p"]]
+  , ["??**********?****?", [], { null: true }, ["abc"]]
+  , ["??**********?****c", [], { null: true }, ["abc"]]
+  , ["?************c****?****", [], { null: true }, ["abc"]]
+  , ["*c*?**", [], { null: true }, ["abc"]]
+  , ["a*****c*?**", [], { null: true }, ["abc"]]
+  , ["a********???*******", [], { null: true }, ["abc"]]
+  , ["[]", [], { null: true }, ["a"]]
+  , ["[abc", [], { null: true }, ["["]]
+
+  , "nocase tests"
+  , ["XYZ", ["xYz"], { nocase: true, null: true }
+    , ["xYz", "ABC", "IjK"]]
+  , ["ab*", ["ABC"], { nocase: true, null: true }
+    , ["xYz", "ABC", "IjK"]]
+  , ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true }
+    , ["xYz", "ABC", "IjK"]]
+
+  // [ pattern, [matches], MM opts, files, TAP opts]
+  , "onestar/twostar"
+  , ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]]
+  , ["{/?,*}", ["/a", "bb"], {null: true}
+    , ["/a", "/b/b", "/a/b/c", "bb"]]
+
+  , "dots should not match unless requested"
+  , ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]]
+
+  // .. and . can only match patterns starting with .,
+  // even when options.dot is set.
+  , function () {
+      files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"]
+    }
+  , ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}]
+  , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}]
+  , ["a/*/b", ["a/c/b"], {dot:false}]
+  , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}]
+
+
+  // this also tests that changing the options needs
+  // to change the cache key, even if the pattern is
+  // the same!
+  , ["**", ["a/b","a/.d",".a/.d"], { dot: true }
+    , [ ".a/.d", "a/.d", "a/b"]]
+
+  , "paren sets cannot contain slashes"
+  , ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]]
+
+  // brace sets trump all else.
+  //
+  // invalid glob pattern.  fails on bash4 and bsdglob.
+  // however, in this implementation, it's easier just
+  // to do the intuitive thing, and let brace-expansion
+  // actually come before parsing any extglob patterns,
+  // like the documentation seems to say.
+  //
+  // XXX: if anyone complains about this, either fix it
+  // or tell them to grow up and stop complaining.
+  //
+  // bash/bsdglob says this:
+  // , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]]
+  // but we do this instead:
+  , ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]]
+
+  // test partial parsing in the presence of comment/negation chars
+  , ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]]
+  , ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]]
+
+  // like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped.
+  , ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g"
+    , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"]
+    , {}
+    , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]]
+
+
+  // crazy nested {,,} and *(||) tests.
+  , function () {
+      files = [ "a", "b", "c", "d"
+              , "ab", "ac", "ad"
+              , "bc", "cb"
+              , "bc,d", "c,db", "c,d"
+              , "d)", "(b|c", "*(b|c"
+              , "b|c", "b|cc", "cb|c"
+              , "x(a|b|c)", "x(a|c)"
+              , "(a|b|c)", "(a|c)"]
+    }
+  , ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]]
+  , ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]]
+  // a
+  // *(b|c)
+  // *(b|d)
+  , ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]]
+  , ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]]
+
+
+  // test various flag settings.
+  , [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"]
+    , { noext: true } ]
+  , ["a?b", ["x/y/acb", "acb/"], {matchBase: true}
+    , ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ]
+  , ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]]
+
+
+  // begin channelling Boole and deMorgan...
+  , "negation tests"
+  , function () {
+      files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"]
+    }
+
+  // anything that is NOT a* matches.
+  , ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]]
+
+  // anything that IS !a* matches.
+  , ["!a*", ["!ab", "!abc"], {nonegate: true}]
+
+  // anything that IS a* matches
+  , ["!!a*", ["a!b"]]
+
+  // anything that is NOT !a* matches
+  , ["!\\!a*", ["a!b", "d", "e", "\\!a"]]
+
+  // negation nestled within a pattern
+  , function () {
+      files = [ "foo.js"
+              , "foo.bar"
+              // can't match this one without negative lookbehind.
+              , "foo.js.js"
+              , "blar.js"
+              , "foo."
+              , "boo.js.boo" ]
+    }
+  , ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ]
+
+  // https://github.com/isaacs/minimatch/issues/5
+  , function () {
+      files = [ 'a/b/.x/c'
+              , 'a/b/.x/c/d'
+              , 'a/b/.x/c/d/e'
+              , 'a/b/.x'
+              , 'a/b/.x/'
+              , 'a/.x/b'
+              , '.x'
+              , '.x/'
+              , '.x/a'
+              , '.x/a/b'
+              , 'a/.x/b/.x/c'
+              , '.x/.x' ]
+  }
+  , ["**/.x/**", [ '.x/'
+                 , '.x/a'
+                 , '.x/a/b'
+                 , 'a/.x/b'
+                 , 'a/b/.x/'
+                 , 'a/b/.x/c'
+                 , 'a/b/.x/c/d'
+                 , 'a/b/.x/c/d/e' ] ]
+
+  ]
+
+var regexps =
+  [ '/^(?:(?=.)a[^/]*?)$/',
+    '/^(?:(?=.)X[^/]*?)$/',
+    '/^(?:(?=.)X[^/]*?)$/',
+    '/^(?:\\*)$/',
+    '/^(?:(?=.)\\*[^/]*?)$/',
+    '/^(?:\\*\\*)$/',
+    '/^(?:(?=.)b[^/]*?\\/)$/',
+    '/^(?:(?=.)c[^/]*?)$/',
+    '/^(?:(?:(?!(?:\\/|^)\\.).)*?)$/',
+    '/^(?:\\.\\.\\/(?!\\.)(?=.)[^/]*?\\/)$/',
+    '/^(?:s\\/(?=.)\\.\\.[^/]*?\\/)$/',
+    '/^(?:\\/\\^root:\\/\\{s\\/(?=.)\\^[^:][^/]*?:[^:][^/]*?:\\([^:]\\)[^/]*?\\.[^/]*?\\$\\/1\\/)$/',
+    '/^(?:\\/\\^root:\\/\\{s\\/(?=.)\\^[^:][^/]*?:[^:][^/]*?:\\([^:]\\)[^/]*?\\.[^/]*?\\$\\/\u0001\\/)$/',
+    '/^(?:(?!\\.)(?=.)[a-c]b[^/]*?)$/',
+    '/^(?:(?!\\.)(?=.)[a-y][^/]*?[^c])$/',
+    '/^(?:(?=.)a[^/]*?[^c])$/',
+    '/^(?:(?=.)a[X-]b)$/',
+    '/^(?:(?!\\.)(?=.)[^a-c][^/]*?)$/',
+    '/^(?:a\\*b\\/(?!\\.)(?=.)[^/]*?)$/',
+    '/^(?:(?=.)a\\*[^/]\\/(?!\\.)(?=.)[^/]*?)$/',
+    '/^(?:(?!\\.)(?=.)[^/]*?\\\\\\![^/]*?)$/',
+    '/^(?:(?!\\.)(?=.)[^/]*?\\![^/]*?)$/',
+    '/^(?:(?!\\.)(?=.)[^/]*?\\.\\*)$/',
+    '/^(?:(?=.)a[b]c)$/',
+    '/^(?:(?=.)a[b]c)$/',
+    '/^(?:(?=.)a[^/]c)$/',
+    '/^(?:a\\*c)$/',
+    'false',
+    '/^(?:(?!\\.)(?=.)[^/]*?\\/(?=.)man[^/]*?\\/(?=.)bash\\.[^/]*?)$/',
+    '/^(?:man\\/man1\\/bash\\.1)$/',
+    '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?c)$/',
+    '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c)$/',
+    '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/])$/',
+    '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/])$/',
+    '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c)$/',
+    '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c)$/',
+    '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/])$/',
+    '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?)$/',
+    '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c)$/',
+    '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/])$/',
+    '/^(?:(?=.)a[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k)$/',
+    '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k)$/',
+    '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k[^/]*?[^/]*?[^/]*?)$/',
+    '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k)$/',
+    '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k[^/]*?[^/]*?)$/',
+    '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?)$/',
+    '/^(?:(?!\\.)(?=.)[-abc])$/',
+    '/^(?:(?!\\.)(?=.)[abc-])$/',
+    '/^(?:\\\\)$/',
+    '/^(?:(?!\\.)(?=.)[\\\\])$/',
+    '/^(?:(?!\\.)(?=.)[\\[])$/',
+    '/^(?:\\[)$/',
+    '/^(?:(?=.)\\[(?!\\.)(?=.)[^/]*?)$/',
+    '/^(?:(?!\\.)(?=.)[\\]])$/',
+    '/^(?:(?!\\.)(?=.)[\\]-])$/',
+    '/^(?:(?!\\.)(?=.)[a-z])$/',
+    '/^(?:(?!\\.)(?=.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/])$/',
+    '/^(?:(?!\\.)(?=.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c)$/',
+    '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?)$/',
+    '/^(?:(?!\\.)(?=.)[^/]*?c[^/]*?[^/][^/]*?[^/]*?)$/',
+    '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/][^/]*?[^/]*?)$/',
+    '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?)$/',
+    '/^(?:\\[\\])$/',
+    '/^(?:\\[abc)$/',
+    '/^(?:(?=.)XYZ)$/i',
+    '/^(?:(?=.)ab[^/]*?)$/i',
+    '/^(?:(?!\\.)(?=.)[ia][^/][ck])$/i',
+    '/^(?:\\/(?!\\.)(?=.)[^/]*?|(?!\\.)(?=.)[^/]*?)$/',
+    '/^(?:\\/(?!\\.)(?=.)[^/]|(?!\\.)(?=.)[^/]*?)$/',
+    '/^(?:(?:(?!(?:\\/|^)\\.).)*?)$/',
+    '/^(?:a\\/(?!(?:^|\\/)\\.{1,2}(?:$|\\/))(?=.)[^/]*?\\/b)$/',
+    '/^(?:a\\/(?=.)\\.[^/]*?\\/b)$/',
+    '/^(?:a\\/(?!\\.)(?=.)[^/]*?\\/b)$/',
+    '/^(?:a\\/(?=.)\\.[^/]*?\\/b)$/',
+    '/^(?:(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?)$/',
+    '/^(?:(?!\\.)(?=.)[^/]*?\\(a\\/b\\))$/',
+    '/^(?:(?!\\.)(?=.)(?:a|b)*|(?!\\.)(?=.)(?:a|c)*)$/',
+    '/^(?:(?=.)\\[(?=.)\\!a[^/]*?)$/',
+    '/^(?:(?=.)\\[(?=.)#a[^/]*?)$/',
+    '/^(?:(?=.)\\+\\(a\\|[^/]*?\\|c\\\\\\\\\\|d\\\\\\\\\\|e\\\\\\\\\\\\\\\\\\|f\\\\\\\\\\\\\\\\\\|g)$/',
+    '/^(?:(?!\\.)(?=.)(?:a|b)*|(?!\\.)(?=.)(?:a|c)*)$/',
+    '/^(?:a|(?!\\.)(?=.)[^/]*?\\(b\\|c|d\\))$/',
+    '/^(?:a|(?!\\.)(?=.)(?:b|c)*|(?!\\.)(?=.)(?:b|d)*)$/',
+    '/^(?:(?!\\.)(?=.)(?:a|b|c)*|(?!\\.)(?=.)(?:a|c)*)$/',
+    '/^(?:(?!\\.)(?=.)[^/]*?\\(a\\|b\\|c\\)|(?!\\.)(?=.)[^/]*?\\(a\\|c\\))$/',
+    '/^(?:(?=.)a[^/]b)$/',
+    '/^(?:(?=.)#[^/]*?)$/',
+    '/^(?!^(?:(?=.)a[^/]*?)$).*$/',
+    '/^(?:(?=.)\\!a[^/]*?)$/',
+    '/^(?:(?=.)a[^/]*?)$/',
+    '/^(?!^(?:(?=.)\\!a[^/]*?)$).*$/',
+    '/^(?:(?!\\.)(?=.)[^/]*?\\.(?:(?!js)[^/]*?))$/',
+    '/^(?:(?:(?!(?:\\/|^)\\.).)*?\\/\\.x\\/(?:(?!(?:\\/|^)\\.).)*?)$/' ]
+var re = 0;
+
 tap.test("basic tests", function (t) {
   var start = Date.now()
 
   // [ pattern, [matches], MM opts, files, TAP opts]
-  ; [ "http://www.bashcookbook.com/bashinfo" +
-      "/source/bash-1.14.7/tests/glob-test"
-    , ["a*", ["a", "abc", "abd", "abe"]]
-    , ["X*", ["X*"], {nonull: true}]
-
-    // allow null glob expansion
-    , ["X*", []]
-
-    // isaacs: Slightly different than bash/sh/ksh
-    // \\* is not un-escaped to literal "*" in a failed match,
-    // but it does make it get treated as a literal star
-    , ["\\*", ["\\*"], {nonull: true}]
-    , ["\\**", ["\\**"], {nonull: true}]
-    , ["\\*\\*", ["\\*\\*"], {nonull: true}]
-
-    , ["b*/", ["bdir/"]]
-    , ["c*", ["c", "ca", "cb"]]
-    , ["**", files]
-
-    , ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}]
-    , ["s/\\..*//", ["s/\\..*//"], {nonull: true}]
-
-    , "legendary larry crashes bashes"
-    , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"
-      , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}]
-    , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"
-      , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}]
-
-    , "character classes"
-    , ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]]
-    , ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd",
-       "bdir/", "ca", "cb", "dd", "de"]]
-    , ["a*[^c]", ["abd", "abe"]]
-    , function () { files.push("a-b", "aXb") }
-    , ["a[X-]b", ["a-b", "aXb"]]
-    , function () { files.push(".x", ".y") }
-    , ["[^a-c]*", ["d", "dd", "de"]]
-    , function () { files.push("a*b/", "a*b/ooo") }
-    , ["a\\*b/*", ["a*b/ooo"]]
-    , ["a\\*?/*", ["a*b/ooo"]]
-    , ["*\\\\!*", [], {null: true}, ["echo !7"]]
-    , ["*\\!*", ["echo !7"], null, ["echo !7"]]
-    , ["*.\\*", ["r.*"], null, ["r.*"]]
-    , ["a[b]c", ["abc"]]
-    , ["a[\\b]c", ["abc"]]
-    , ["a?c", ["abc"]]
-    , ["a\\*c", [], {null: true}, ["abc"]]
-    , ["", [""], { null: true }, [""]]
-
-    , "http://www.opensource.apple.com/source/bash/bash-23/" +
-      "bash/tests/glob-test"
-    , function () { files.push("man/", "man/man1/", "man/man1/bash.1") }
-    , ["*/man*/bash.*", ["man/man1/bash.1"]]
-    , ["man/man1/bash.1", ["man/man1/bash.1"]]
-    , ["a***c", ["abc"], null, ["abc"]]
-    , ["a*****?c", ["abc"], null, ["abc"]]
-    , ["?*****??", ["abc"], null, ["abc"]]
-    , ["*****??", ["abc"], null, ["abc"]]
-    , ["?*****?c", ["abc"], null, ["abc"]]
-    , ["?***?****c", ["abc"], null, ["abc"]]
-    , ["?***?****?", ["abc"], null, ["abc"]]
-    , ["?***?****", ["abc"], null, ["abc"]]
-    , ["*******c", ["abc"], null, ["abc"]]
-    , ["*******?", ["abc"], null, ["abc"]]
-    , ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
-    , ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
-    , ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]]
-    , ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
-    , ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]]
-    , ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]]
-    , ["[-abc]", ["-"], null, ["-"]]
-    , ["[abc-]", ["-"], null, ["-"]]
-    , ["\\", ["\\"], null, ["\\"]]
-    , ["[\\\\]", ["\\"], null, ["\\"]]
-    , ["[[]", ["["], null, ["["]]
-    , ["[", ["["], null, ["["]]
-    , ["[*", ["[abc"], null, ["[abc"]]
-    , "a right bracket shall lose its special meaning and\n" +
-      "represent itself in a bracket expression if it occurs\n" +
-      "first in the list.  -- POSIX.2 2.8.3.2"
-    , ["[]]", ["]"], null, ["]"]]
-    , ["[]-]", ["]"], null, ["]"]]
-    , ["[a-\z]", ["p"], null, ["p"]]
-    , ["??**********?****?", [], { null: true }, ["abc"]]
-    , ["??**********?****c", [], { null: true }, ["abc"]]
-    , ["?************c****?****", [], { null: true }, ["abc"]]
-    , ["*c*?**", [], { null: true }, ["abc"]]
-    , ["a*****c*?**", [], { null: true }, ["abc"]]
-    , ["a********???*******", [], { null: true }, ["abc"]]
-    , ["[]", [], { null: true }, ["a"]]
-    , ["[abc", [], { null: true }, ["["]]
-
-    , "nocase tests"
-    , ["XYZ", ["xYz"], { nocase: true, null: true }
-      , ["xYz", "ABC", "IjK"]]
-    , ["ab*", ["ABC"], { nocase: true, null: true }
-      , ["xYz", "ABC", "IjK"]]
-    , ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true }
-      , ["xYz", "ABC", "IjK"]]
-
-    // [ pattern, [matches], MM opts, files, TAP opts]
-    , "onestar/twostar"
-    , ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]]
-    , ["{/?,*}", ["/a", "bb"], {null: true}
-      , ["/a", "/b/b", "/a/b/c", "bb"]]
-
-    , "dots should not match unless requested"
-    , ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]]
-
-    // .. and . can only match patterns starting with .,
-    // even when options.dot is set.
-    , function () {
-        files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"]
-      }
-    , ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}]
-    , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}]
-    , ["a/*/b", ["a/c/b"], {dot:false}]
-    , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}]
-
-
-    // this also tests that changing the options needs
-    // to change the cache key, even if the pattern is
-    // the same!
-    , ["**", ["a/b","a/.d",".a/.d"], { dot: true }
-      , [ ".a/.d", "a/.d", "a/b"]]
-
-    , "paren sets cannot contain slashes"
-    , ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]]
-
-    // brace sets trump all else.
-    //
-    // invalid glob pattern.  fails on bash4 and bsdglob.
-    // however, in this implementation, it's easier just
-    // to do the intuitive thing, and let brace-expansion
-    // actually come before parsing any extglob patterns,
-    // like the documentation seems to say.
-    //
-    // XXX: if anyone complains about this, either fix it
-    // or tell them to grow up and stop complaining.
-    //
-    // bash/bsdglob says this:
-    // , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]]
-    // but we do this instead:
-    , ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]]
-
-    // test partial parsing in the presence of comment/negation chars
-    , ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]]
-    , ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]]
-
-    // like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped.
-    , ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g"
-      , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"]
-      , {}
-      , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]]
-
-
-    // crazy nested {,,} and *(||) tests.
-    , function () {
-        files = [ "a", "b", "c", "d"
-                , "ab", "ac", "ad"
-                , "bc", "cb"
-                , "bc,d", "c,db", "c,d"
-                , "d)", "(b|c", "*(b|c"
-                , "b|c", "b|cc", "cb|c"
-                , "x(a|b|c)", "x(a|c)"
-                , "(a|b|c)", "(a|c)"]
-      }
-    , ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]]
-    , ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]]
-    // a
-    // *(b|c)
-    // *(b|d)
-    , ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]]
-    , ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]]
-
-
-    // test various flag settings.
-    , [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"]
-      , { noext: true } ]
-    , ["a?b", ["x/y/acb", "acb/"], {matchBase: true}
-      , ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ]
-    , ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]]
-
-
-    // begin channelling Boole and deMorgan...
-    , "negation tests"
-    , function () {
-        files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"]
-      }
-
-    // anything that is NOT a* matches.
-    , ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]]
-
-    // anything that IS !a* matches.
-    , ["!a*", ["!ab", "!abc"], {nonegate: true}]
-
-    // anything that IS a* matches
-    , ["!!a*", ["a!b"]]
-
-    // anything that is NOT !a* matches
-    , ["!\\!a*", ["a!b", "d", "e", "\\!a"]]
-
-    // negation nestled within a pattern
-    , function () {
-        files = [ "foo.js"
-                , "foo.bar"
-                // can't match this one without negative lookbehind.
-                , "foo.js.js"
-                , "blar.js"
-                , "foo."
-                , "boo.js.boo" ]
-      }
-    , ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ]
-
-    // https://github.com/isaacs/minimatch/issues/5
-    , function () {
-        files = [ 'a/b/.x/c'
-                , 'a/b/.x/c/d'
-                , 'a/b/.x/c/d/e'
-                , 'a/b/.x'
-                , 'a/b/.x/'
-                , 'a/.x/b'
-                , '.x'
-                , '.x/'
-                , '.x/a'
-                , '.x/a/b'
-                , 'a/.x/b/.x/c'
-                , '.x/.x' ]
-    }
-    , ["**/.x/**", [ '.x/'
-                   , '.x/a'
-                   , '.x/a/b'
-                   , 'a/.x/b'
-                   , 'a/b/.x/'
-                   , 'a/b/.x/c'
-                   , 'a/b/.x/c/d'
-                   , 'a/b/.x/c/d/e' ] ]
-
-    ].forEach(function (c) {
-      if (typeof c === "function") return c()
-      if (typeof c === "string") return t.comment(c)
-
-      var pattern = c[0]
-        , expect = c[1].sort(alpha)
-        , options = c[2] || {}
-        , f = c[3] || files
-        , tapOpts = c[4] || {}
-
-      // options.debug = true
-      var m = new mm.Minimatch(pattern, options)
-      var r = m.makeRe()
-      tapOpts.re = String(r) || JSON.stringify(r)
-      tapOpts.files = JSON.stringify(f)
-      tapOpts.pattern = pattern
-      tapOpts.set = m.set
-      tapOpts.negated = m.negate
-
-      var actual = mm.match(f, pattern, options)
-      actual.sort(alpha)
-
-      t.equivalent( actual, expect
-                  , JSON.stringify(pattern) + " " + JSON.stringify(expect)
-                  , tapOpts )
-    })
+  patterns.forEach(function (c) {
+    if (typeof c === "function") return c()
+    if (typeof c === "string") return t.comment(c)
+
+    var pattern = c[0]
+      , expect = c[1].sort(alpha)
+      , options = c[2] || {}
+      , f = c[3] || files
+      , tapOpts = c[4] || {}
+
+    // options.debug = true
+    var m = new mm.Minimatch(pattern, options)
+    var r = m.makeRe()
+    var expectRe = regexps[re++]
+    tapOpts.re = String(r) || JSON.stringify(r)
+    tapOpts.files = JSON.stringify(f)
+    tapOpts.pattern = pattern
+    tapOpts.set = m.set
+    tapOpts.negated = m.negate
+
+    var actual = mm.match(f, pattern, options)
+    actual.sort(alpha)
+
+    t.equivalent( actual, expect
+                , JSON.stringify(pattern) + " " + JSON.stringify(expect)
+                , tapOpts )
+
+    t.equal(tapOpts.re, expectRe, tapOpts)
+  })
 
   t.comment("time=" + (Date.now() - start) + "ms")
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js	(revision 516)
@@ -0,0 +1,8 @@
+var test = require('tap').test
+var minimatch = require('../')
+
+test('extglob ending with statechar', function(t) {
+  t.notOk(minimatch('ax', 'a?(b*)'))
+  t.ok(minimatch('ax', '?(a*|b)'))
+  t.end()
+})
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/package.json
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/package.json	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/package.json	(revision 516)
@@ -7,5 +7,5 @@
   "name": "glob",
   "description": "a little globber",
-  "version": "3.1.14",
+  "version": "3.2.9",
   "repository": {
     "type": "git",
@@ -17,18 +17,18 @@
   },
   "dependencies": {
-    "minimatch": "0.2",
-    "graceful-fs": "~1.1.2",
-    "inherits": "1"
+    "minimatch": "~0.2.11",
+    "inherits": "2"
   },
   "devDependencies": {
-    "tap": "~0.3",
+    "tap": "~0.4.0",
     "mkdirp": "0",
     "rimraf": "1"
   },
   "scripts": {
-    "test": "tap test/*.js"
+    "test": "tap test/*.js",
+    "test-regen": "TEST_REGEN=1 node test/00-setup.js"
   },
   "license": "BSD",
-  "readme": "# Glob\n\nThis is a glob implementation in JavaScript.  It uses the `minimatch`\nlibrary to do its matching.\n\n## Attention: node-glob users!\n\nThe API has changed dramatically between 2.x and 3.x. This library is\nnow 100% JavaScript, and the integer flags have been replaced with an\noptions object.\n\nAlso, there's an event emitter class, proper tests, and all the other\nthings you've come to expect from node modules.\n\nAnd best of all, no compilation!\n\n## Usage\n\n```javascript\nvar glob = require(\"glob\")\n\n// options is optional\nglob(\"**/*.js\", options, function (er, files) {\n  // files is an array of filenames.\n  // If the `nonull` option is set, and nothing\n  // was found, then files is [\"**/*.js\"]\n  // er is an error object or null.\n})\n```\n\n## Features\n\nPlease see the [minimatch\ndocumentation](https://github.com/isaacs/minimatch) for more details.\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n* [minimatch documentation](https://github.com/isaacs/minimatch)\n\n## glob(pattern, [options], cb)\n\n* `pattern` {String} Pattern to be matched\n* `options` {Object}\n* `cb` {Function}\n  * `err` {Error | null}\n  * `matches` {Array<String>} filenames found matching the pattern\n\nPerform an asynchronous glob search.\n\n## glob.sync(pattern, [options]\n\n* `pattern` {String} Pattern to be matched\n* `options` {Object}\n* return: {Array<String>} filenames found matching the pattern\n\nPerform a synchronous glob search.\n\n## Class: glob.Glob\n\nCreate a Glob object by instanting the `glob.Glob` class.\n\n```javascript\nvar Glob = require(\"glob\").Glob\nvar mg = new Glob(pattern, options, cb)\n```\n\nIt's an EventEmitter, and starts walking the filesystem to find matches\nimmediately.\n\n### new glob.Glob(pattern, [options], [cb])\n\n* `pattern` {String} pattern to search for\n* `options` {Object}\n* `cb` {Function} Called when an error occurs, or matches are found\n  * `err` {Error | null}\n  * `matches` {Array<String>} filenames found matching the pattern\n\nNote that if the `sync` flag is set in the options, then matches will\nbe immediately available on the `g.found` member.\n\n### Properties\n\n* `minimatch` The minimatch object that the glob uses.\n* `options` The options object passed in.\n* `error` The error encountered.  When an error is encountered, the\n  glob object is in an undefined state, and should be discarded.\n* `aborted` Boolean which is set to true when calling `abort()`.  There\n  is no way at this time to continue a glob search after aborting, but\n  you can re-use the statCache to avoid having to duplicate syscalls.\n\n### Events\n\n* `end` When the matching is finished, this is emitted with all the\n  matches found.  If the `nonull` option is set, and no match was found,\n  then the `matches` list contains the original pattern.  The matches\n  are sorted, unless the `nosort` flag is set.\n* `match` Every time a match is found, this is emitted with the matched.\n* `error` Emitted when an unexpected error is encountered, or whenever\n  any fs error occurs if `options.strict` is set.\n* `abort` When `abort()` is called, this event is raised.\n\n### Methods\n\n* `abort` Stop the search.\n\n### Options\n\nAll the options that can be passed to Minimatch can also be passed to\nGlob to change pattern matching behavior.  Also, some have been added,\nor have glob-specific ramifications.\n\nAll options are false by default, unless otherwise noted.\n\nAll options are added to the glob object, as well.\n\n* `cwd` The current working directory in which to search.  Defaults\n  to `process.cwd()`.\n* `root` The place where patterns starting with `/` will be mounted\n  onto.  Defaults to `path.resolve(options.cwd, \"/\")` (`/` on Unix\n  systems, and `C:\\` or some such on Windows.)\n* `nomount` By default, a pattern starting with a forward-slash will be\n  \"mounted\" onto the root setting, so that a valid filesystem path is\n  returned.  Set this flag to disable that behavior.\n* `mark` Add a `/` character to directory matches.  Note that this\n  requires additional stat calls.\n* `nosort` Don't sort the results.\n* `stat` Set to true to stat *all* results.  This reduces performance\n  somewhat, and is completely unnecessary, unless `readdir` is presumed\n  to be an untrustworthy indicator of file existence.  It will cause\n  ELOOP to be triggered one level sooner in the case of cyclical\n  symbolic links.\n* `silent` When an unusual error is encountered\n  when attempting to read a directory, a warning will be printed to\n  stderr.  Set the `silent` option to true to suppress these warnings.\n* `strict` When an unusual error is encountered\n  when attempting to read a directory, the process will just continue on\n  in search of other matches.  Set the `strict` option to raise an error\n  in these cases.\n* `statCache` A cache of results of filesystem information, to prevent\n  unnecessary stat calls.  While it should not normally be necessary to\n  set this, you may pass the statCache from one glob() call to the\n  options object of another, if you know that the filesystem will not\n  change between calls.  (See \"Race Conditions\" below.)\n* `sync` Perform a synchronous glob search.\n* `nounique` In some cases, brace-expanded patterns can result in the\n  same file showing up multiple times in the result set.  By default,\n  this implementation prevents duplicates in the result set.\n  Set this flag to disable that behavior.\n* `nonull` Set to never return an empty set, instead returning a set\n  containing the pattern itself.  This is the default in glob(3).\n* `nocase` Perform a case-insensitive match.  Note that case-insensitive\n  filesystems will sometimes result in glob returning results that are\n  case-insensitively matched anyway, since readdir and stat will not\n  raise an error.\n* `debug` Set to enable debug logging in minimatch and glob.\n* `globDebug` Set to enable debug logging in glob, but not minimatch.\n\n## Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between node-glob and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated.  Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally.  This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`.  Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything.  Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set.  This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part.  That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.  **Note that this is different from the way that `**` is\nhandled by ruby's `Dir` class.**\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen glob returns the pattern as-provided, rather than\ninterpreting the character escapes.  For example,\n`glob.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`.  This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern.  Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity.  Since those two are valid, matching proceeds.\n\n## Windows\n\n**Please only use forward-slashes in glob expressions.**\n\nThough windows uses either `/` or `\\` as its path separator, only `/`\ncharacters are used by this glob implementation.  You must use\nforward-slashes **only** in glob expressions.  Back-slashes will always\nbe interpreted as escape characters, not path separators.\n\nResults from absolute patterns such as `/foo/*` are mounted onto the\nroot setting using `path.join`.  On windows, this will by default result\nin `/foo/*` matching `C:\\foo\\bar.txt`.\n\n## Race Conditions\n\nGlob searching, by its very nature, is susceptible to race conditions,\nsince it relies on directory walking and such.\n\nAs a result, it is possible that a file that exists when glob looks for\nit may have been deleted or modified by the time it returns the result.\n\nAs part of its internal implementation, this program caches all stat\nand readdir calls that it makes, in order to cut down on system\noverhead.  However, this also makes it even more susceptible to races,\nespecially if the statCache object is reused between glob calls.\n\nUsers are thus advised not to use a glob result as a\nguarantee of filesystem state in the face of rapid changes.\nFor the vast majority of operations, this is never a problem.\n",
+  "readme": "# Glob\n\nMatch files using the patterns the shell uses, like stars and stuff.\n\nThis is a glob implementation in JavaScript.  It uses the `minimatch`\nlibrary to do its matching.\n\n## Attention: node-glob users!\n\nThe API has changed dramatically between 2.x and 3.x. This library is\nnow 100% JavaScript, and the integer flags have been replaced with an\noptions object.\n\nAlso, there's an event emitter class, proper tests, and all the other\nthings you've come to expect from node modules.\n\nAnd best of all, no compilation!\n\n## Usage\n\n```javascript\nvar glob = require(\"glob\")\n\n// options is optional\nglob(\"**/*.js\", options, function (er, files) {\n  // files is an array of filenames.\n  // If the `nonull` option is set, and nothing\n  // was found, then files is [\"**/*.js\"]\n  // er is an error object or null.\n})\n```\n\n## Features\n\nPlease see the [minimatch\ndocumentation](https://github.com/isaacs/minimatch) for more details.\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n* [minimatch documentation](https://github.com/isaacs/minimatch)\n\n## glob(pattern, [options], cb)\n\n* `pattern` {String} Pattern to be matched\n* `options` {Object}\n* `cb` {Function}\n  * `err` {Error | null}\n  * `matches` {Array<String>} filenames found matching the pattern\n\nPerform an asynchronous glob search.\n\n## glob.sync(pattern, [options])\n\n* `pattern` {String} Pattern to be matched\n* `options` {Object}\n* return: {Array<String>} filenames found matching the pattern\n\nPerform a synchronous glob search.\n\n## Class: glob.Glob\n\nCreate a Glob object by instanting the `glob.Glob` class.\n\n```javascript\nvar Glob = require(\"glob\").Glob\nvar mg = new Glob(pattern, options, cb)\n```\n\nIt's an EventEmitter, and starts walking the filesystem to find matches\nimmediately.\n\n### new glob.Glob(pattern, [options], [cb])\n\n* `pattern` {String} pattern to search for\n* `options` {Object}\n* `cb` {Function} Called when an error occurs, or matches are found\n  * `err` {Error | null}\n  * `matches` {Array<String>} filenames found matching the pattern\n\nNote that if the `sync` flag is set in the options, then matches will\nbe immediately available on the `g.found` member.\n\n### Properties\n\n* `minimatch` The minimatch object that the glob uses.\n* `options` The options object passed in.\n* `error` The error encountered.  When an error is encountered, the\n  glob object is in an undefined state, and should be discarded.\n* `aborted` Boolean which is set to true when calling `abort()`.  There\n  is no way at this time to continue a glob search after aborting, but\n  you can re-use the statCache to avoid having to duplicate syscalls.\n* `statCache` Collection of all the stat results the glob search\n  performed.\n* `cache` Convenience object.  Each field has the following possible\n  values:\n  * `false` - Path does not exist\n  * `true` - Path exists\n  * `1` - Path exists, and is not a directory\n  * `2` - Path exists, and is a directory\n  * `[file, entries, ...]` - Path exists, is a directory, and the\n    array value is the results of `fs.readdir`\n\n### Events\n\n* `end` When the matching is finished, this is emitted with all the\n  matches found.  If the `nonull` option is set, and no match was found,\n  then the `matches` list contains the original pattern.  The matches\n  are sorted, unless the `nosort` flag is set.\n* `match` Every time a match is found, this is emitted with the matched.\n* `error` Emitted when an unexpected error is encountered, or whenever\n  any fs error occurs if `options.strict` is set.\n* `abort` When `abort()` is called, this event is raised.\n\n### Methods\n\n* `abort` Stop the search.\n\n### Options\n\nAll the options that can be passed to Minimatch can also be passed to\nGlob to change pattern matching behavior.  Also, some have been added,\nor have glob-specific ramifications.\n\nAll options are false by default, unless otherwise noted.\n\nAll options are added to the glob object, as well.\n\n* `cwd` The current working directory in which to search.  Defaults\n  to `process.cwd()`.\n* `root` The place where patterns starting with `/` will be mounted\n  onto.  Defaults to `path.resolve(options.cwd, \"/\")` (`/` on Unix\n  systems, and `C:\\` or some such on Windows.)\n* `dot` Include `.dot` files in normal matches and `globstar` matches.\n  Note that an explicit dot in a portion of the pattern will always\n  match dot files.\n* `nomount` By default, a pattern starting with a forward-slash will be\n  \"mounted\" onto the root setting, so that a valid filesystem path is\n  returned.  Set this flag to disable that behavior.\n* `mark` Add a `/` character to directory matches.  Note that this\n  requires additional stat calls.\n* `nosort` Don't sort the results.\n* `stat` Set to true to stat *all* results.  This reduces performance\n  somewhat, and is completely unnecessary, unless `readdir` is presumed\n  to be an untrustworthy indicator of file existence.  It will cause\n  ELOOP to be triggered one level sooner in the case of cyclical\n  symbolic links.\n* `silent` When an unusual error is encountered\n  when attempting to read a directory, a warning will be printed to\n  stderr.  Set the `silent` option to true to suppress these warnings.\n* `strict` When an unusual error is encountered\n  when attempting to read a directory, the process will just continue on\n  in search of other matches.  Set the `strict` option to raise an error\n  in these cases.\n* `cache` See `cache` property above.  Pass in a previously generated\n  cache object to save some fs calls.\n* `statCache` A cache of results of filesystem information, to prevent\n  unnecessary stat calls.  While it should not normally be necessary to\n  set this, you may pass the statCache from one glob() call to the\n  options object of another, if you know that the filesystem will not\n  change between calls.  (See \"Race Conditions\" below.)\n* `sync` Perform a synchronous glob search.\n* `nounique` In some cases, brace-expanded patterns can result in the\n  same file showing up multiple times in the result set.  By default,\n  this implementation prevents duplicates in the result set.\n  Set this flag to disable that behavior.\n* `nonull` Set to never return an empty set, instead returning a set\n  containing the pattern itself.  This is the default in glob(3).\n* `nocase` Perform a case-insensitive match.  Note that case-insensitive\n  filesystems will sometimes result in glob returning results that are\n  case-insensitively matched anyway, since readdir and stat will not\n  raise an error.\n* `debug` Set to enable debug logging in minimatch and glob.\n* `globDebug` Set to enable debug logging in glob, but not minimatch.\n\n## Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between node-glob and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated.  Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally.  This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`.  Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything.  Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set.  This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part.  That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen glob returns the pattern as-provided, rather than\ninterpreting the character escapes.  For example,\n`glob.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`.  This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern.  Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity.  Since those two are valid, matching proceeds.\n\n## Windows\n\n**Please only use forward-slashes in glob expressions.**\n\nThough windows uses either `/` or `\\` as its path separator, only `/`\ncharacters are used by this glob implementation.  You must use\nforward-slashes **only** in glob expressions.  Back-slashes will always\nbe interpreted as escape characters, not path separators.\n\nResults from absolute patterns such as `/foo/*` are mounted onto the\nroot setting using `path.join`.  On windows, this will by default result\nin `/foo/*` matching `C:\\foo\\bar.txt`.\n\n## Race Conditions\n\nGlob searching, by its very nature, is susceptible to race conditions,\nsince it relies on directory walking and such.\n\nAs a result, it is possible that a file that exists when glob looks for\nit may have been deleted or modified by the time it returns the result.\n\nAs part of its internal implementation, this program caches all stat\nand readdir calls that it makes, in order to cut down on system\noverhead.  However, this also makes it even more susceptible to races,\nespecially if the cache or statCache objects are reused between glob\ncalls.\n\nUsers are thus advised not to use a glob result as a guarantee of\nfilesystem state in the face of rapid changes.  For the vast majority\nof operations, this is never a problem.\n",
   "readmeFilename": "README.md",
   "bugs": {
@@ -36,9 +36,5 @@
   },
   "homepage": "https://github.com/isaacs/node-glob",
-  "_id": "glob@3.1.14",
-  "dist": {
-    "shasum": "d76e8de8f257e1f7409dac971bfd2436b0e444dd"
-  },
-  "_from": "glob@3.1.14",
-  "_resolved": "https://registry.npmjs.org/glob/-/glob-3.1.14.tgz"
+  "_id": "glob@3.2.9",
+  "_from": "glob@>=3.1.9"
 }
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/00-setup.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/00-setup.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/00-setup.js	(revision 516)
@@ -49,13 +49,128 @@
 })
 
-tap.test("symlinky", function (t) {
-  var d = path.dirname(symlinkTo)
-  console.error("mkdirp", d)
-  mkdirp(d, 0755, function (er) {
-    t.ifError(er)
-    fs.symlink(symlinkFrom, symlinkTo, function (er) {
-      t.ifError(er, "make symlink")
+if (process.platform !== "win32") {
+  tap.test("symlinky", function (t) {
+    var d = path.dirname(symlinkTo)
+    console.error("mkdirp", d)
+    mkdirp(d, 0755, function (er) {
+      t.ifError(er)
+      fs.symlink(symlinkFrom, symlinkTo, "dir", function (er) {
+        t.ifError(er, "make symlink")
+        t.end()
+      })
+    })
+  })
+}
+
+;["foo","bar","baz","asdf","quux","qwer","rewq"].forEach(function (w) {
+  w = "/tmp/glob-test/" + w
+  tap.test("create " + w, function (t) {
+    mkdirp(w, function (er) {
+      if (er)
+        throw er
+      t.pass(w)
       t.end()
     })
   })
 })
+
+
+// generate the bash pattern test-fixtures if possible
+if (process.platform === "win32" || !process.env.TEST_REGEN) {
+  console.error("Windows, or TEST_REGEN unset.  Using cached fixtures.")
+  return
+}
+
+var spawn = require("child_process").spawn;
+var globs =
+  // put more patterns here.
+  // anything that would be directly in / should be in /tmp/glob-test
+  ["test/a/*/+(c|g)/./d"
+  ,"test/a/**/[cg]/../[cg]"
+  ,"test/a/{b,c,d,e,f}/**/g"
+  ,"test/a/b/**"
+  ,"test/**/g"
+  ,"test/a/abc{fed,def}/g/h"
+  ,"test/a/abc{fed/g,def}/**/"
+  ,"test/a/abc{fed/g,def}/**///**/"
+  ,"test/**/a/**/"
+  ,"test/+(a|b|c)/a{/,bc*}/**"
+  ,"test/*/*/*/f"
+  ,"test/**/f"
+  ,"test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**"
+  ,"{./*/*,/tmp/glob-test/*}"
+  ,"{/tmp/glob-test/*,*}" // evil owl face!  how you taunt me!
+  ,"test/a/!(symlink)/**"
+  ]
+var bashOutput = {}
+var fs = require("fs")
+
+globs.forEach(function (pattern) {
+  tap.test("generate fixture " + pattern, function (t) {
+    var cmd = "shopt -s globstar && " +
+              "shopt -s extglob && " +
+              "shopt -s nullglob && " +
+              // "shopt >&2; " +
+              "eval \'for i in " + pattern + "; do echo $i; done\'"
+    var cp = spawn("bash", ["-c", cmd], { cwd: path.dirname(__dirname) })
+    var out = []
+    cp.stdout.on("data", function (c) {
+      out.push(c)
+    })
+    cp.stderr.pipe(process.stderr)
+    cp.on("close", function (code) {
+      out = flatten(out)
+      if (!out)
+        out = []
+      else
+        out = cleanResults(out.split(/\r*\n/))
+
+      bashOutput[pattern] = out
+      t.notOk(code, "bash test should finish nicely")
+      t.end()
+    })
+  })
+})
+
+tap.test("save fixtures", function (t) {
+  var fname = path.resolve(__dirname, "bash-results.json")
+  var data = JSON.stringify(bashOutput, null, 2) + "\n"
+  fs.writeFile(fname, data, function (er) {
+    t.ifError(er)
+    t.end()
+  })
+})
+
+function cleanResults (m) {
+  // normalize discrepancies in ordering, duplication,
+  // and ending slashes.
+  return m.map(function (m) {
+    return m.replace(/\/+/g, "/").replace(/\/$/, "")
+  }).sort(alphasort).reduce(function (set, f) {
+    if (f !== set[set.length - 1]) set.push(f)
+    return set
+  }, []).sort(alphasort).map(function (f) {
+    // de-windows
+    return (process.platform !== 'win32') ? f
+           : f.replace(/^[a-zA-Z]:\\\\/, '/').replace(/\\/g, '/')
+  })
+}
+
+function flatten (chunks) {
+  var s = 0
+  chunks.forEach(function (c) { s += c.length })
+  var out = new Buffer(s)
+  s = 0
+  chunks.forEach(function (c) {
+    c.copy(out, s)
+    s += c.length
+  })
+
+  return out.toString().trim()
+}
+
+function alphasort (a, b) {
+  a = a.toLowerCase()
+  b = b.toLowerCase()
+  return a > b ? 1 : a < b ? -1 : 0
+}
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/bash-comparison.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/bash-comparison.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/bash-comparison.js	(revision 516)
@@ -3,23 +3,6 @@
 var tap = require("tap")
 , child_process = require("child_process")
-
-// put more patterns here.
-, globs =
-  ["test/a/*/+(c|g)/./d"
-  ,"test/a/**/[cg]/../[cg]"
-  ,"test/a/{b,c,d,e,f}/**/g"
-  ,"test/a/b/**"
-  ,"test/**/g"
-  ,"test/a/abc{fed,def}/g/h"
-  ,"test/a/abc{fed/g,def}/**/"
-  ,"test/a/abc{fed/g,def}/**///**/"
-  ,"test/**/a/**/"
-  ,"test/+(a|b|c)/a{/,bc*}/**"
-  ,"test/*/*/*/f"
-  ,"test/**/f"
-  ,"test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**"
-  ,"{./*/*,/usr/local/*}"
-  ,"{/*,*}" // evil owl face!  how you taunt me!
-  ]
+, bashResults = require("./bash-results.json")
+, globs = Object.keys(bashResults)
 , glob = require("../")
 , path = require("path")
@@ -36,83 +19,45 @@
 
 globs.forEach(function (pattern) {
-  var echoOutput
+  var expect = bashResults[pattern]
+  // anything regarding the symlink thing will fail on windows, so just skip it
+  if (process.platform === "win32" &&
+      expect.some(function (m) {
+        return /\/symlink\//.test(m)
+      }))
+    return
+
   tap.test(pattern, function (t) {
-    var bashPattern = pattern
-    , cmd = "shopt -s globstar && " +
-            "shopt -s extglob && " +
-            "shopt -s nullglob && " +
-            // "shopt >&2; " +
-            "eval \'for i in " + bashPattern + "; do echo $i; done\'"
-    , cp = child_process.spawn("bash", ["-c",cmd])
-    , out = []
-    , globResult
-    cp.stdout.on("data", function (c) {
-      out.push(c)
+    glob(pattern, function (er, matches) {
+      if (er)
+        throw er
+
+      // sort and unmark, just to match the shell results
+      matches = cleanResults(matches)
+
+      t.deepEqual(matches, expect, pattern)
+      t.end()
     })
-    cp.stderr.on("data", function (c) {
-      process.stderr.write(c)
-    })
-    cp.on("close", function () {
-      echoOutput = flatten(out)
-      if (!echoOutput) echoOutput = []
-      else {
-        echoOutput = echoOutput.split(/\r*\n/).map(function (m) {
-          // Bash is a oddly inconsistent with slashes in the
-          // the results.  This implementation is a bit more
-          // normalized.  Account for this in the test results.
-          return m.replace(/\/+/g, "/").replace(/\/$/, "")
-        }).sort(alphasort).reduce(function (set, f) {
-          if (f !== set[set.length - 1]) set.push(f)
-          return set
-        }, []).sort(alphasort)
-      }
-      next()
-    })
-
-    glob(pattern, function (er, matches) {
-      // sort and unpark, just to match the shell results
-      matches = matches.map(function (m) {
-        return m.replace(/\/+/g, "/").replace(/\/$/, "")
-      }).sort(alphasort).reduce(function (set, f) {
-        if (f !== set[set.length - 1]) set.push(f)
-        return set
-      }, []).sort(alphasort)
-
-      t.ifError(er, pattern + " should not error")
-      globResult = matches
-      next()
-    })
-
-    function next () {
-      if (!echoOutput || !globResult) return
-
-      t.deepEqual(globResult, echoOutput, "should match shell")
-      t.end()
-    }
   })
 
   tap.test(pattern + " sync", function (t) {
-    var matches = glob.sync(pattern).map(function (m) {
-        return m.replace(/\/+/g, "/").replace(/\/$/, "")
-      }).sort(alphasort).reduce(function (set, f) {
-        if (f !== set[set.length - 1]) set.push(f)
-        return set
-      }, []).sort(alphasort)
+    var matches = cleanResults(glob.sync(pattern))
 
-    t.deepEqual(matches, echoOutput, "should match shell")
+    t.deepEqual(matches, expect, "should match shell")
     t.end()
   })
 })
 
-function flatten (chunks) {
-  var s = 0
-  chunks.forEach(function (c) { s += c.length })
-  var out = new Buffer(s)
-  s = 0
-  chunks.forEach(function (c) {
-    c.copy(out, s)
-    s += c.length
+function cleanResults (m) {
+  // normalize discrepancies in ordering, duplication,
+  // and ending slashes.
+  return m.map(function (m) {
+    return m.replace(/\/+/g, "/").replace(/\/$/, "")
+  }).sort(alphasort).reduce(function (set, f) {
+    if (f !== set[set.length - 1]) set.push(f)
+    return set
+  }, []).sort(alphasort).map(function (f) {
+    // de-windows
+    return (process.platform !== 'win32') ? f
+           : f.replace(/^[a-zA-Z]:[\/\\]+/, '/').replace(/[\\\/]+/g, '/')
   })
-
-  return out.toString().trim()
 }
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/bash-results.json
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/bash-results.json	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/bash-results.json	(revision 516)
@@ -0,0 +1,351 @@
+{
+  "test/a/*/+(c|g)/./d": [
+    "test/a/b/c/./d"
+  ],
+  "test/a/**/[cg]/../[cg]": [
+    "test/a/abcdef/g/../g",
+    "test/a/abcfed/g/../g",
+    "test/a/b/c/../c",
+    "test/a/c/../c",
+    "test/a/c/d/c/../c",
+    "test/a/symlink/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c"
+  ],
+  "test/a/{b,c,d,e,f}/**/g": [],
+  "test/a/b/**": [
+    "test/a/b",
+    "test/a/b/c",
+    "test/a/b/c/d"
+  ],
+  "test/**/g": [
+    "test/a/abcdef/g",
+    "test/a/abcfed/g"
+  ],
+  "test/a/abc{fed,def}/g/h": [
+    "test/a/abcdef/g/h",
+    "test/a/abcfed/g/h"
+  ],
+  "test/a/abc{fed/g,def}/**/": [
+    "test/a/abcdef",
+    "test/a/abcdef/g",
+    "test/a/abcfed/g"
+  ],
+  "test/a/abc{fed/g,def}/**///**/": [
+    "test/a/abcdef",
+    "test/a/abcdef/g",
+    "test/a/abcfed/g"
+  ],
+  "test/**/a/**/": [
+    "test/a",
+    "test/a/abcdef",
+    "test/a/abcdef/g",
+    "test/a/abcfed",
+    "test/a/abcfed/g",
+    "test/a/b",
+    "test/a/b/c",
+    "test/a/bc",
+    "test/a/bc/e",
+    "test/a/c",
+    "test/a/c/d",
+    "test/a/c/d/c",
+    "test/a/cb",
+    "test/a/cb/e",
+    "test/a/symlink",
+    "test/a/symlink/a",
+    "test/a/symlink/a/b",
+    "test/a/symlink/a/b/c",
+    "test/a/symlink/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b"
+  ],
+  "test/+(a|b|c)/a{/,bc*}/**": [
+    "test/a/abcdef",
+    "test/a/abcdef/g",
+    "test/a/abcdef/g/h",
+    "test/a/abcfed",
+    "test/a/abcfed/g",
+    "test/a/abcfed/g/h"
+  ],
+  "test/*/*/*/f": [
+    "test/a/bc/e/f",
+    "test/a/cb/e/f"
+  ],
+  "test/**/f": [
+    "test/a/bc/e/f",
+    "test/a/cb/e/f"
+  ],
+  "test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**": [
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
+    "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c"
+  ],
+  "{./*/*,/tmp/glob-test/*}": [
+    "./examples/g.js",
+    "./examples/usr-local.js",
+    "./node_modules/inherits",
+    "./node_modules/minimatch",
+    "./node_modules/mkdirp",
+    "./node_modules/rimraf",
+    "./node_modules/tap",
+    "./test/00-setup.js",
+    "./test/a",
+    "./test/bash-comparison.js",
+    "./test/bash-results.json",
+    "./test/cwd-test.js",
+    "./test/globstar-match.js",
+    "./test/mark.js",
+    "./test/new-glob-optional-options.js",
+    "./test/nocase-nomagic.js",
+    "./test/pause-resume.js",
+    "./test/readme-issue.js",
+    "./test/root-nomount.js",
+    "./test/root.js",
+    "./test/stat.js",
+    "./test/zz-cleanup.js",
+    "/tmp/glob-test/asdf",
+    "/tmp/glob-test/bar",
+    "/tmp/glob-test/baz",
+    "/tmp/glob-test/foo",
+    "/tmp/glob-test/quux",
+    "/tmp/glob-test/qwer",
+    "/tmp/glob-test/rewq"
+  ],
+  "{/tmp/glob-test/*,*}": [
+    "/tmp/glob-test/asdf",
+    "/tmp/glob-test/bar",
+    "/tmp/glob-test/baz",
+    "/tmp/glob-test/foo",
+    "/tmp/glob-test/quux",
+    "/tmp/glob-test/qwer",
+    "/tmp/glob-test/rewq",
+    "examples",
+    "glob.js",
+    "LICENSE",
+    "node_modules",
+    "package.json",
+    "README.md",
+    "test"
+  ],
+  "test/a/!(symlink)/**": [
+    "test/a/abcdef",
+    "test/a/abcdef/g",
+    "test/a/abcdef/g/h",
+    "test/a/abcfed",
+    "test/a/abcfed/g",
+    "test/a/abcfed/g/h",
+    "test/a/b",
+    "test/a/b/c",
+    "test/a/b/c/d",
+    "test/a/bc",
+    "test/a/bc/e",
+    "test/a/bc/e/f",
+    "test/a/c",
+    "test/a/c/d",
+    "test/a/c/d/c",
+    "test/a/c/d/c/b",
+    "test/a/cb",
+    "test/a/cb/e",
+    "test/a/cb/e/f"
+  ]
+}
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/globstar-match.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/globstar-match.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/globstar-match.js	(revision 516)
@@ -0,0 +1,19 @@
+var Glob = require("../glob.js").Glob
+var test = require('tap').test
+
+test('globstar should not have dupe matches', function(t) {
+  var pattern = 'a/**/[gh]'
+  var g = new Glob(pattern, { cwd: __dirname })
+  var matches = []
+  g.on('match', function(m) {
+    console.error('match %j', m)
+    matches.push(m)
+  })
+  g.on('end', function(set) {
+    console.error('set', set)
+    matches = matches.sort()
+    set = set.sort()
+    t.same(matches, set, 'should have same set of matches')
+    t.end()
+  })
+})
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/mark.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/mark.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/mark.js	(revision 516)
@@ -2,4 +2,40 @@
 var glob = require('../')
 process.chdir(__dirname)
+
+// expose timing issues
+var lag = 5
+glob.Glob.prototype._stat = function(o) { return function(f, cb) {
+  var args = arguments
+  setTimeout(function() {
+    o.call(this, f, cb)
+  }.bind(this), lag += 5)
+}}(glob.Glob.prototype._stat)
+
+
+test("mark, with **", function (t) {
+  glob("a/*b*/**", {mark: true}, function (er, results) {
+    if (er)
+      throw er
+    var expect =
+      [ 'a/abcdef/',
+        'a/abcdef/g/',
+        'a/abcdef/g/h',
+        'a/abcfed/',
+        'a/abcfed/g/',
+        'a/abcfed/g/h',
+        'a/b/',
+        'a/b/c/',
+        'a/b/c/d',
+        'a/bc/',
+        'a/bc/e/',
+        'a/bc/e/f',
+        'a/cb/',
+        'a/cb/e/',
+        'a/cb/e/f' ]
+
+    t.same(results, expect)
+    t.end()
+  })
+})
 
 test("mark, no / on pattern", function (t) {
@@ -7,12 +43,18 @@
     if (er)
       throw er
-    t.same(results, [ 'a/abcdef/',
-                      'a/abcfed/',
-                      'a/b/',
-                      'a/bc/',
-                      'a/c/',
-                      'a/cb/',
-                      'a/symlink/' ])
+    var expect = [ 'a/abcdef/',
+                   'a/abcfed/',
+                   'a/b/',
+                   'a/bc/',
+                   'a/c/',
+                   'a/cb/' ]
+
+    if (process.platform !== "win32")
+      expect.push('a/symlink/')
+
+    t.same(results, expect)
     t.end()
+  }).on('match', function(m) {
+    t.similar(m, /\/$/)
   })
 })
@@ -22,12 +64,17 @@
     if (er)
       throw er
-    t.same(results, [ 'a/abcdef',
-                      'a/abcfed',
-                      'a/b',
-                      'a/bc',
-                      'a/c',
-                      'a/cb',
-                      'a/symlink' ])
+    var expect = [ 'a/abcdef',
+                   'a/abcfed',
+                   'a/b',
+                   'a/bc',
+                   'a/c',
+                   'a/cb' ]
+
+    if (process.platform !== "win32")
+      expect.push('a/symlink')
+    t.same(results, expect)
     t.end()
+  }).on('match', function(m) {
+    t.similar(m, /[^\/]$/)
   })
 })
@@ -37,12 +84,16 @@
     if (er)
       throw er
-    t.same(results, [ 'a/abcdef/',
-                      'a/abcfed/',
-                      'a/b/',
-                      'a/bc/',
-                      'a/c/',
-                      'a/cb/',
-                      'a/symlink/' ])
+    var expect = [ 'a/abcdef/',
+                    'a/abcfed/',
+                    'a/b/',
+                    'a/bc/',
+                    'a/c/',
+                    'a/cb/' ]
+    if (process.platform !== "win32")
+      expect.push('a/symlink/')
+    t.same(results, expect)
     t.end()
+  }).on('match', function(m) {
+    t.similar(m, /\/$/)
   })
 })
@@ -52,12 +103,16 @@
     if (er)
       throw er
-    t.same(results, [ 'a/abcdef/',
-                      'a/abcfed/',
-                      'a/b/',
-                      'a/bc/',
-                      'a/c/',
-                      'a/cb/',
-                      'a/symlink/' ])
+    var expect = [ 'a/abcdef/',
+                   'a/abcfed/',
+                   'a/b/',
+                   'a/bc/',
+                   'a/c/',
+                   'a/cb/' ]
+    if (process.platform !== "win32")
+      expect.push('a/symlink/')
+    t.same(results, expect)
     t.end()
+  }).on('match', function(m) {
+    t.similar(m, /\/$/)
   })
 })
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/new-glob-optional-options.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/new-glob-optional-options.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/new-glob-optional-options.js	(revision 516)
@@ -0,0 +1,10 @@
+var Glob = require('../glob.js').Glob;
+var test = require('tap').test;
+
+test('new glob, with cb, and no options', function (t) {
+  new Glob(__filename, function(er, results) {
+    if (er) throw er;
+    t.same(results, [__filename]);
+    t.end();
+  });
+});
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/nocase-nomagic.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/nocase-nomagic.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/nocase-nomagic.js	(revision 516)
@@ -0,0 +1,113 @@
+var fs = require('fs');
+var test = require('tap').test;
+var glob = require('../');
+
+test('mock fs', function(t) {
+  var stat = fs.stat
+  var statSync = fs.statSync
+  var readdir = fs.readdir
+  var readdirSync = fs.readdirSync
+
+  function fakeStat(path) {
+    var ret
+    switch (path.toLowerCase()) {
+      case '/tmp': case '/tmp/':
+        ret = { isDirectory: function() { return true } }
+        break
+      case '/tmp/a':
+        ret = { isDirectory: function() { return false } }
+        break
+    }
+    return ret
+  }
+
+  fs.stat = function(path, cb) {
+    var f = fakeStat(path);
+    if (f) {
+      process.nextTick(function() {
+        cb(null, f)
+      })
+    } else {
+      stat.call(fs, path, cb)
+    }
+  }
+
+  fs.statSync = function(path) {
+    return fakeStat(path) || statSync.call(fs, path)
+  }
+
+  function fakeReaddir(path) {
+    var ret
+    switch (path.toLowerCase()) {
+      case '/tmp': case '/tmp/':
+        ret = [ 'a', 'A' ]
+        break
+      case '/':
+        ret = ['tmp', 'tMp', 'tMP', 'TMP']
+    }
+    return ret
+  }
+
+  fs.readdir = function(path, cb) {
+    var f = fakeReaddir(path)
+    if (f)
+      process.nextTick(function() {
+        cb(null, f)
+      })
+    else
+      readdir.call(fs, path, cb)
+  }
+
+  fs.readdirSync = function(path) {
+    return fakeReaddir(path) || readdirSync.call(fs, path)
+  }
+
+  t.pass('mocked')
+  t.end()
+})
+
+test('nocase, nomagic', function(t) {
+  var n = 2
+  var want = [ '/TMP/A',
+               '/TMP/a',
+               '/tMP/A',
+               '/tMP/a',
+               '/tMp/A',
+               '/tMp/a',
+               '/tmp/A',
+               '/tmp/a' ]
+  glob('/tmp/a', { nocase: true }, function(er, res) {
+    if (er)
+      throw er
+    t.same(res.sort(), want)
+    if (--n === 0) t.end()
+  })
+  glob('/tmp/A', { nocase: true }, function(er, res) {
+    if (er)
+      throw er
+    t.same(res.sort(), want)
+    if (--n === 0) t.end()
+  })
+})
+
+test('nocase, with some magic', function(t) {
+  t.plan(2)
+  var want = [ '/TMP/A',
+               '/TMP/a',
+               '/tMP/A',
+               '/tMP/a',
+               '/tMp/A',
+               '/tMp/a',
+               '/tmp/A',
+               '/tmp/a' ]
+  glob('/tmp/*', { nocase: true }, function(er, res) {
+    if (er)
+      throw er
+    t.same(res.sort(), want)
+  })
+  glob('/tmp/*', { nocase: true }, function(er, res) {
+    if (er)
+      throw er
+    t.same(res.sort(), want)
+  })
+})
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/pause-resume.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/pause-resume.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/pause-resume.js	(revision 516)
@@ -4,4 +4,6 @@
 // just some gnarly pattern with lots of matches
 , pattern = "test/a/!(symlink)/**"
+, bashResults = require("./bash-results.json")
+, patterns = Object.keys(bashResults)
 , glob = require("../")
 , Glob = glob.Glob
@@ -26,46 +28,10 @@
     if (f !== set[set.length - 1]) set.push(f)
     return set
-  }, []).sort(alphasort)
+  }, []).sort(alphasort).map(function (f) {
+    // de-windows
+    return (process.platform !== 'win32') ? f
+           : f.replace(/^[a-zA-Z]:\\\\/, '/').replace(/\\/g, '/')
+  })
 }
-
-function flatten (chunks) {
-  var s = 0
-  chunks.forEach(function (c) { s += c.length })
-  var out = new Buffer(s)
-  s = 0
-  chunks.forEach(function (c) {
-    c.copy(out, s)
-    s += c.length
-  })
-
-  return out.toString().trim()
-}
-var bashResults
-tap.test("get bash output", function (t) {
-  var bashPattern = pattern
-  , cmd = "shopt -s globstar && " +
-          "shopt -s extglob && " +
-          "shopt -s nullglob && " +
-          // "shopt >&2; " +
-          "eval \'for i in " + bashPattern + "; do echo $i; done\'"
-  , cp = child_process.spawn("bash", ["-c",cmd])
-  , out = []
-  , globResult
-  cp.stdout.on("data", function (c) {
-    out.push(c)
-  })
-  cp.stderr.on("data", function (c) {
-    process.stderr.write(c)
-  })
-  cp.on("close", function () {
-    bashResults = flatten(out)
-    if (!bashResults) return t.fail("Didn't get results from bash")
-    else {
-      bashResults = cleanResults(bashResults.split(/\r*\n/))
-    }
-    t.ok(bashResults.length, "got some results")
-    t.end()
-  })
-})
 
 var globResults = []
@@ -74,4 +40,5 @@
   , paused = false
   , res = []
+  , expect = bashResults[pattern]
 
   g.on("pause", function () {
@@ -98,5 +65,5 @@
       "end event matches should be the same as match events")
 
-    t.deepEqual(matches, bashResults,
+    t.deepEqual(matches, expect,
       "glob matches should be the same as bash results")
 
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/readme-issue.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/readme-issue.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/readme-issue.js	(revision 516)
@@ -0,0 +1,36 @@
+var test = require("tap").test
+var glob = require("../")
+
+var mkdirp = require("mkdirp")
+var fs = require("fs")
+var rimraf = require("rimraf")
+var dir = __dirname + "/package"
+
+test("setup", function (t) {
+  mkdirp.sync(dir)
+  fs.writeFileSync(dir + "/package.json", "{}", "ascii")
+  fs.writeFileSync(dir + "/README", "x", "ascii")
+  t.pass("setup done")
+  t.end()
+})
+
+test("glob", function (t) {
+  var opt = {
+    cwd: dir,
+    nocase: true,
+    mark: true
+  }
+
+  glob("README?(.*)", opt, function (er, files) {
+    if (er)
+      throw er
+    t.same(files, ["README"])
+    t.end()
+  })
+})
+
+test("cleanup", function (t) {
+  rimraf.sync(dir)
+  t.pass("clean")
+  t.end()
+})
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/root.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/root.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/root.js	(revision 516)
@@ -1,43 +1,46 @@
-var tap = require("tap")
+var t = require("tap")
 
 var origCwd = process.cwd()
 process.chdir(__dirname)
 
-tap.test("changing root and searching for /b*/**", function (t) {
-  var glob = require('../')
-  var path = require('path')
-  t.test('.', function (t) {
-    glob('/b*/**', { globDebug: true, root: '.' }, function (er, matches) {
-      t.ifError(er)
-      t.like(matches, [])
-      t.end()
-    })
-  })
+var glob = require('../')
+var path = require('path')
 
-  t.test('a', function (t) {
-    glob('/b*/**', { globDebug: true, root: path.resolve('a') }, function (er, matches) {
-      t.ifError(er)
-      t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ].map(function (m) {
-        return path.join(path.resolve('a'), m)
-      }))
-      t.end()
-    })
-  })
-
-  t.test('root=a, cwd=a/b', function (t) {
-    glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b') }, function (er, matches) {
-      t.ifError(er)
-      t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ].map(function (m) {
-        return path.join(path.resolve('a'), m)
-      }))
-      t.end()
-    })
-  })
-
-  t.test('cd -', function (t) {
-    process.chdir(origCwd)
+t.test('.', function (t) {
+  glob('/b*/**', { globDebug: true, root: '.' }, function (er, matches) {
+    t.ifError(er)
+    t.like(matches, [])
     t.end()
   })
+})
 
+
+t.test('a', function (t) {
+  console.error("root=" + path.resolve('a'))
+  glob('/b*/**', { globDebug: true, root: path.resolve('a') }, function (er, matches) {
+    t.ifError(er)
+    var wanted = [
+        '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f'
+      ].map(function (m) {
+        return path.join(path.resolve('a'), m).replace(/\\/g, '/')
+      })
+
+    t.like(matches, wanted)
+    t.end()
+  })
+})
+
+t.test('root=a, cwd=a/b', function (t) {
+  glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b') }, function (er, matches) {
+    t.ifError(er)
+    t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ].map(function (m) {
+      return path.join(path.resolve('a'), m).replace(/\\/g, '/')
+    }))
+    t.end()
+  })
+})
+
+t.test('cd -', function (t) {
+  process.chdir(origCwd)
   t.end()
 })
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/stat.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/stat.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/glob/test/stat.js	(revision 516)
@@ -0,0 +1,32 @@
+var glob = require('../')
+var test = require('tap').test
+var path = require('path')
+
+test('stat all the things', function(t) {
+  var g = new glob.Glob('a/*abc*/**', { stat: true, cwd: __dirname })
+  var matches = []
+  g.on('match', function(m) {
+    matches.push(m)
+  })
+  var stats = []
+  g.on('stat', function(m) {
+    stats.push(m)
+  })
+  g.on('end', function(eof) {
+    stats = stats.sort()
+    matches = matches.sort()
+    eof = eof.sort()
+    t.same(stats, matches)
+    t.same(eof, matches)
+    var cache = Object.keys(this.statCache)
+    t.same(cache.map(function (f) {
+      return path.relative(__dirname, f)
+    }).sort(), matches)
+
+    cache.forEach(function(c) {
+      t.equal(typeof this.statCache[c], 'object')
+    }, this)
+
+    t.end()
+  })
+})
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/.travis.yml
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/.travis.yml	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/.travis.yml	(revision 516)
@@ -1,4 +1,4 @@
 language: node_js
 node_js:
-  - 0.6
-  - 0.8
+  - "0.8"
+  - "0.10"
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/README.markdown
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/README.markdown	(revision 484)
+++ 	(revision )
@@ -1,487 +1,0 @@
-optimist
-========
-
-Optimist is a node.js library for option parsing for people who hate option
-parsing. More specifically, this module is for people who like all the --bells
-and -whistlz of program usage but think optstrings are a waste of time.
-
-With optimist, option parsing doesn't have to suck (as much).
-
-[![build status](https://secure.travis-ci.org/substack/node-optimist.png)](http://travis-ci.org/substack/node-optimist)
-
-examples
-========
-
-With Optimist, the options are just a hash! No optstrings attached.
--------------------------------------------------------------------
-
-xup.js:
-
-````javascript
-#!/usr/bin/env node
-var argv = require('optimist').argv;
-
-if (argv.rif - 5 * argv.xup > 7.138) {
-    console.log('Buy more riffiwobbles');
-}
-else {
-    console.log('Sell the xupptumblers');
-}
-````
-
-***
-
-    $ ./xup.js --rif=55 --xup=9.52
-    Buy more riffiwobbles
-    
-    $ ./xup.js --rif 12 --xup 8.1
-    Sell the xupptumblers
-
-![This one's optimistic.](http://substack.net/images/optimistic.png)
-
-But wait! There's more! You can do short options:
--------------------------------------------------
- 
-short.js:
-
-````javascript
-#!/usr/bin/env node
-var argv = require('optimist').argv;
-console.log('(%d,%d)', argv.x, argv.y);
-````
-
-***
-
-    $ ./short.js -x 10 -y 21
-    (10,21)
-
-And booleans, both long and short (and grouped):
-----------------------------------
-
-bool.js:
-
-````javascript
-#!/usr/bin/env node
-var util = require('util');
-var argv = require('optimist').argv;
-
-if (argv.s) {
-    util.print(argv.fr ? 'Le chat dit: ' : 'The cat says: ');
-}
-console.log(
-    (argv.fr ? 'miaou' : 'meow') + (argv.p ? '.' : '')
-);
-````
-
-***
-
-    $ ./bool.js -s
-    The cat says: meow
-    
-    $ ./bool.js -sp
-    The cat says: meow.
-
-    $ ./bool.js -sp --fr
-    Le chat dit: miaou.
-
-And non-hypenated options too! Just use `argv._`!
--------------------------------------------------
- 
-nonopt.js:
-
-````javascript
-#!/usr/bin/env node
-var argv = require('optimist').argv;
-console.log('(%d,%d)', argv.x, argv.y);
-console.log(argv._);
-````
-
-***
-
-    $ ./nonopt.js -x 6.82 -y 3.35 moo
-    (6.82,3.35)
-    [ 'moo' ]
-    
-    $ ./nonopt.js foo -x 0.54 bar -y 1.12 baz
-    (0.54,1.12)
-    [ 'foo', 'bar', 'baz' ]
-
-Plus, Optimist comes with .usage() and .demand()!
--------------------------------------------------
-
-divide.js:
-
-````javascript
-#!/usr/bin/env node
-var argv = require('optimist')
-    .usage('Usage: $0 -x [num] -y [num]')
-    .demand(['x','y'])
-    .argv;
-
-console.log(argv.x / argv.y);
-````
-
-***
- 
-    $ ./divide.js -x 55 -y 11
-    5
-    
-    $ node ./divide.js -x 4.91 -z 2.51
-    Usage: node ./divide.js -x [num] -y [num]
-
-    Options:
-      -x  [required]
-      -y  [required]
-
-    Missing required arguments: y
-
-EVEN MORE HOLY COW
-------------------
-
-default_singles.js:
-
-````javascript
-#!/usr/bin/env node
-var argv = require('optimist')
-    .default('x', 10)
-    .default('y', 10)
-    .argv
-;
-console.log(argv.x + argv.y);
-````
-
-***
-
-    $ ./default_singles.js -x 5
-    15
-
-default_hash.js:
-
-````javascript
-#!/usr/bin/env node
-var argv = require('optimist')
-    .default({ x : 10, y : 10 })
-    .argv
-;
-console.log(argv.x + argv.y);
-````
-
-***
-
-    $ ./default_hash.js -y 7
-    17
-
-And if you really want to get all descriptive about it...
----------------------------------------------------------
-
-boolean_single.js
-
-````javascript
-#!/usr/bin/env node
-var argv = require('optimist')
-    .boolean('v')
-    .argv
-;
-console.dir(argv);
-````
-
-***
-
-    $ ./boolean_single.js -v foo bar baz
-    true
-    [ 'bar', 'baz', 'foo' ]
-
-boolean_double.js
-
-````javascript
-#!/usr/bin/env node
-var argv = require('optimist')
-    .boolean(['x','y','z'])
-    .argv
-;
-console.dir([ argv.x, argv.y, argv.z ]);
-console.dir(argv._);
-````
-
-***
-
-    $ ./boolean_double.js -x -z one two three
-    [ true, false, true ]
-    [ 'one', 'two', 'three' ]
-
-Optimist is here to help...
----------------------------
-
-You can describe parameters for help messages and set aliases. Optimist figures
-out how to format a handy help string automatically.
-
-line_count.js
-
-````javascript
-#!/usr/bin/env node
-var argv = require('optimist')
-    .usage('Count the lines in a file.\nUsage: $0')
-    .demand('f')
-    .alias('f', 'file')
-    .describe('f', 'Load a file')
-    .argv
-;
-
-var fs = require('fs');
-var s = fs.createReadStream(argv.file);
-
-var lines = 0;
-s.on('data', function (buf) {
-    lines += buf.toString().match(/\n/g).length;
-});
-
-s.on('end', function () {
-    console.log(lines);
-});
-````
-
-***
-
-    $ node line_count.js
-    Count the lines in a file.
-    Usage: node ./line_count.js
-
-    Options:
-      -f, --file  Load a file  [required]
-
-    Missing required arguments: f
-
-    $ node line_count.js --file line_count.js 
-    20
-    
-    $ node line_count.js -f line_count.js 
-    20
-
-methods
-=======
-
-By itself,
-
-````javascript
-require('optimist').argv
-`````
-
-will use `process.argv` array to construct the `argv` object.
-
-You can pass in the `process.argv` yourself:
-
-````javascript
-require('optimist')([ '-x', '1', '-y', '2' ]).argv
-````
-
-or use .parse() to do the same thing:
-
-````javascript
-require('optimist').parse([ '-x', '1', '-y', '2' ])
-````
-
-The rest of these methods below come in just before the terminating `.argv`.
-
-.alias(key, alias)
-------------------
-
-Set key names as equivalent such that updates to a key will propagate to aliases
-and vice-versa.
-
-Optionally `.alias()` can take an object that maps keys to aliases.
-
-.default(key, value)
---------------------
-
-Set `argv[key]` to `value` if no option was specified on `process.argv`.
-
-Optionally `.default()` can take an object that maps keys to default values.
-
-.demand(key)
-------------
-
-If `key` is a string, show the usage information and exit if `key` wasn't
-specified in `process.argv`.
-
-If `key` is a number, demand at least as many non-option arguments, which show
-up in `argv._`.
-
-If `key` is an Array, demand each element.
-
-.describe(key, desc)
---------------------
-
-Describe a `key` for the generated usage information.
-
-Optionally `.describe()` can take an object that maps keys to descriptions.
-
-.options(key, opt)
-------------------
-
-Instead of chaining together `.alias().demand().default()`, you can specify
-keys in `opt` for each of the chainable methods.
-
-For example:
-
-````javascript
-var argv = require('optimist')
-    .options('f', {
-        alias : 'file',
-        default : '/etc/passwd',
-    })
-    .argv
-;
-````
-
-is the same as
-
-````javascript
-var argv = require('optimist')
-    .alias('f', 'file')
-    .default('f', '/etc/passwd')
-    .argv
-;
-````
-
-Optionally `.options()` can take an object that maps keys to `opt` parameters.
-
-.usage(message)
----------------
-
-Set a usage message to show which commands to use. Inside `message`, the string
-`$0` will get interpolated to the current script name or node command for the
-present script similar to how `$0` works in bash or perl.
-
-.check(fn)
-----------
-
-Check that certain conditions are met in the provided arguments.
-
-If `fn` throws or returns `false`, show the thrown error, usage information, and
-exit.
-
-.boolean(key)
--------------
-
-Interpret `key` as a boolean. If a non-flag option follows `key` in
-`process.argv`, that string won't get set as the value of `key`.
-
-If `key` never shows up as a flag in `process.arguments`, `argv[key]` will be
-`false`.
-
-If `key` is an Array, interpret all the elements as booleans.
-
-.string(key)
-------------
-
-Tell the parser logic not to interpret `key` as a number or boolean.
-This can be useful if you need to preserve leading zeros in an input.
-
-If `key` is an Array, interpret all the elements as strings.
-
-.wrap(columns)
---------------
-
-Format usage output to wrap at `columns` many columns.
-
-.help()
--------
-
-Return the generated usage string.
-
-.showHelp(fn=console.error)
----------------------------
-
-Print the usage data using `fn` for printing.
-
-.parse(args)
-------------
-
-Parse `args` instead of `process.argv`. Returns the `argv` object.
-
-.argv
------
-
-Get the arguments as a plain old object.
-
-Arguments without a corresponding flag show up in the `argv._` array.
-
-The script name or node command is available at `argv.$0` similarly to how `$0`
-works in bash or perl.
-
-parsing tricks
-==============
-
-stop parsing
-------------
-
-Use `--` to stop parsing flags and stuff the remainder into `argv._`.
-
-    $ node examples/reflect.js -a 1 -b 2 -- -c 3 -d 4
-    { _: [ '-c', '3', '-d', '4' ],
-      '$0': 'node ./examples/reflect.js',
-      a: 1,
-      b: 2 }
-
-negate fields
--------------
-
-If you want to explicity set a field to false instead of just leaving it
-undefined or to override a default you can do `--no-key`.
-
-    $ node examples/reflect.js -a --no-b
-    { _: [],
-      '$0': 'node ./examples/reflect.js',
-      a: true,
-      b: false }
-
-numbers
--------
-
-Every argument that looks like a number (`!isNaN(Number(arg))`) is converted to
-one. This way you can just `net.createConnection(argv.port)` and you can add
-numbers out of `argv` with `+` without having that mean concatenation,
-which is super frustrating.
-
-duplicates
-----------
-
-If you specify a flag multiple times it will get turned into an array containing
-all the values in order.
-
-    $ node examples/reflect.js -x 5 -x 8 -x 0
-    { _: [],
-      '$0': 'node ./examples/reflect.js',
-        x: [ 5, 8, 0 ] }
-
-dot notation
-------------
-
-When you use dots (`.`s) in argument names, an implicit object path is assumed.
-This lets you organize arguments into nested objects.
-
-     $ node examples/reflect.js --foo.bar.baz=33 --foo.quux=5
-     { _: [],
-       '$0': 'node ./examples/reflect.js',
-         foo: { bar: { baz: 33 }, quux: 5 } }
-
-installation
-============
-
-With [npm](http://github.com/isaacs/npm), just do:
-    npm install optimist
- 
-or clone this project on github:
-
-    git clone http://github.com/substack/node-optimist.git
-
-To run the tests with [expresso](http://github.com/visionmedia/expresso),
-just do:
-    
-    expresso
-
-inspired By
-===========
-
-This module is loosely inspired by Perl's
-[Getopt::Casual](http://search.cpan.org/~photo/Getopt-Casual-0.13.1/Casual.pm).
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/index.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/index.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/index.js	(revision 516)
@@ -1,3 +1,4 @@
 var path = require('path');
+var minimist = require('minimist');
 var wordwrap = require('wordwrap');
 
@@ -18,5 +19,5 @@
 
 var exports = module.exports = Argv;
-function Argv (args, cwd) {
+function Argv (processArgs, cwd) {
     var self = {};
     if (!cwd) cwd = process.cwd();
@@ -32,5 +33,5 @@
     ;
     
-    if (process.argv[1] == process.env._) {
+    if (process.env._ != undefined && process.argv[1] == process.env._) {
         self.$0 = process.env._.replace(
             path.dirname(process.execPath) + '/', ''
@@ -38,31 +39,33 @@
     }
     
-    var flags = { bools : {}, strings : {} };
+    var options = {
+        boolean: [],
+        string: [],
+        alias: {},
+        default: []
+    };
     
     self.boolean = function (bools) {
-        if (!Array.isArray(bools)) {
-            bools = [].slice.call(arguments);
-        }
-        
-        bools.forEach(function (name) {
-            flags.bools[name] = true;
-        });
-        
+        options.boolean.push.apply(options.boolean, [].concat(bools));
         return self;
     };
     
     self.string = function (strings) {
-        if (!Array.isArray(strings)) {
-            strings = [].slice.call(arguments);
-        }
-        
-        strings.forEach(function (name) {
-            flags.strings[name] = true;
-        });
-        
-        return self;
-    };
-    
-    var aliases = {};
+        options.string.push.apply(options.string, [].concat(strings));
+        return self;
+    };
+    
+    self.default = function (key, value) {
+        if (typeof key === 'object') {
+            Object.keys(key).forEach(function (k) {
+                self.default(k, key[k]);
+            });
+        }
+        else {
+            options.default[key] = value;
+        }
+        return self;
+    };
+    
     self.alias = function (x, y) {
         if (typeof x === 'object') {
@@ -71,15 +74,7 @@
             });
         }
-        else if (Array.isArray(y)) {
-            y.forEach(function (yy) {
-                self.alias(x, yy);
-            });
-        }
-        else {
-            var zs = (aliases[x] || []).concat(aliases[y] || []).concat(x, y);
-            aliases[x] = zs.filter(function (z) { return z != x });
-            aliases[y] = zs.filter(function (z) { return z != y });
-        }
-        
+        else {
+            options.alias[x] = (options.alias[x] || []).concat(y);
+        }
         return self;
     };
@@ -129,18 +124,4 @@
     };
     
-    var defaults = {};
-    self.default = function (key, value) {
-        if (typeof key === 'object') {
-            Object.keys(key).forEach(function (k) {
-                self.default(k, key[k]);
-            });
-        }
-        else {
-            defaults[key] = value;
-        }
-        
-        return self;
-    };
-    
     var descriptions = {};
     self.describe = function (key, desc) {
@@ -157,5 +138,5 @@
     
     self.parse = function (args) {
-        return Argv(args).argv;
+        return parseArgs(args);
     };
     
@@ -204,5 +185,5 @@
             Object.keys(descriptions)
             .concat(Object.keys(demanded))
-            .concat(Object.keys(defaults))
+            .concat(Object.keys(options.default))
             .reduce(function (acc, key) {
                 if (key !== '_') acc[key] = true;
@@ -218,5 +199,5 @@
         
         var switches = keys.reduce(function (acc, key) {
-            acc[key] = [ key ].concat(aliases[key] || [])
+            acc[key] = [ key ].concat(options.alias[key] || [])
                 .map(function (sw) {
                     return (sw.length > 1 ? '--' : '-') + sw
@@ -255,6 +236,6 @@
             var type = null;
             
-            if (flags.bools[key]) type = '[boolean]';
-            if (flags.strings[key]) type = '[string]';
+            if (options.boolean[key]) type = '[boolean]';
+            if (options.string[key]) type = '[string]';
             
             if (!wrap && dpadding.length > 0) {
@@ -269,6 +250,6 @@
                     : null
                 ,
-                defaults[key] !== undefined
-                    ? '[default: ' + JSON.stringify(defaults[key]) + ']'
+                options.default[key] !== undefined
+                    ? '[default: ' + JSON.stringify(options.default[key]) + ']'
                     : null
                 ,
@@ -299,105 +280,11 @@
     
     Object.defineProperty(self, 'argv', {
-        get : parseArgs,
+        get : function () { return parseArgs(processArgs) },
         enumerable : true,
     });
     
-    function parseArgs () {
-        var argv = { _ : [], $0 : self.$0 };
-        Object.keys(flags.bools).forEach(function (key) {
-            setArg(key, defaults[key] || false);
-        });
-        
-        function setArg (key, val) {
-            var num = Number(val);
-            var value = typeof val !== 'string' || isNaN(num) ? val : num;
-            if (flags.strings[key]) value = val;
-            
-            setKey(argv, key.split('.'), value);
-            
-            (aliases[key] || []).forEach(function (x) {
-                argv[x] = argv[key];
-            });
-        }
-        
-        for (var i = 0; i < args.length; i++) {
-            var arg = args[i];
-            
-            if (arg === '--') {
-                argv._.push.apply(argv._, args.slice(i + 1));
-                break;
-            }
-            else if (arg.match(/^--.+=/)) {
-                var m = arg.match(/^--([^=]+)=(.*)/);
-                setArg(m[1], m[2]);
-            }
-            else if (arg.match(/^--no-.+/)) {
-                var key = arg.match(/^--no-(.+)/)[1];
-                setArg(key, false);
-            }
-            else if (arg.match(/^--.+/)) {
-                var key = arg.match(/^--(.+)/)[1];
-                var next = args[i + 1];
-                if (next !== undefined && !next.match(/^-/)
-                && !flags.bools[key]
-                && (aliases[key] ? !flags.bools[aliases[key]] : true)) {
-                    setArg(key, next);
-                    i++;
-                }
-                else if (/^(true|false)$/.test(next)) {
-                    setArg(key, next === 'true');
-                    i++;
-                }
-                else {
-                    setArg(key, true);
-                }
-            }
-            else if (arg.match(/^-[^-]+/)) {
-                var letters = arg.slice(1,-1).split('');
-                
-                var broken = false;
-                for (var j = 0; j < letters.length; j++) {
-                    if (letters[j+1] && letters[j+1].match(/\W/)) {
-                        setArg(letters[j], arg.slice(j+2));
-                        broken = true;
-                        break;
-                    }
-                    else {
-                        setArg(letters[j], true);
-                    }
-                }
-                
-                if (!broken) {
-                    var key = arg.slice(-1)[0];
-                    
-                    if (args[i+1] && !args[i+1].match(/^-/)
-                    && !flags.bools[key]
-                    && (aliases[key] ? !flags.bools[aliases[key]] : true)) {
-                        setArg(key, args[i+1]);
-                        i++;
-                    }
-                    else if (args[i+1] && /true|false/.test(args[i+1])) {
-                        setArg(key, args[i+1] === 'true');
-                        i++;
-                    }
-                    else {
-                        setArg(key, true);
-                    }
-                }
-            }
-            else {
-                var n = Number(arg);
-                argv._.push(flags.strings['_'] || isNaN(n) ? arg : n);
-            }
-        }
-        
-        Object.keys(defaults).forEach(function (key) {
-            if (!(key in argv)) {
-                argv[key] = defaults[key];
-                if (key in aliases) {
-                    argv[aliases[key]] = defaults[key];
-                }
-            }
-        });
+    function parseArgs (args) {
+        var argv = minimist(args, options);
+        argv.$0 = self.$0;
         
         if (demanded._ && argv._.length < demanded._) {
@@ -455,21 +342,2 @@
     return p.match(/^[.\/]/) ? p : './' + p;
 };
-
-function setKey (obj, keys, value) {
-    var o = obj;
-    keys.slice(0,-1).forEach(function (key) {
-        if (o[key] === undefined) o[key] = {};
-        o = o[key];
-    });
-    
-    var key = keys[keys.length - 1];
-    if (o[key] === undefined || typeof o[key] === 'boolean') {
-        o[key] = value;
-    }
-    else if (Array.isArray(o[key])) {
-        o[key].push(value);
-    }
-    else {
-        o[key] = [ o[key], value ];
-    }
-}
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/.travis.yml
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/.travis.yml	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/.travis.yml	(revision 516)
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+  - "0.8"
+  - "0.10"
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/LICENSE
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/LICENSE	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/LICENSE	(revision 516)
@@ -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.
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/example/parse.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/example/parse.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/example/parse.js	(revision 516)
@@ -0,0 +1,2 @@
+var argv = require('../')(process.argv.slice(2));
+console.dir(argv);
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/index.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/index.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/index.js	(revision 516)
@@ -0,0 +1,187 @@
+module.exports = function (args, opts) {
+    if (!opts) opts = {};
+    
+    var flags = { bools : {}, strings : {} };
+    
+    [].concat(opts['boolean']).filter(Boolean).forEach(function (key) {
+        flags.bools[key] = true;
+    });
+    
+    [].concat(opts.string).filter(Boolean).forEach(function (key) {
+        flags.strings[key] = true;
+    });
+    
+    var aliases = {};
+    Object.keys(opts.alias || {}).forEach(function (key) {
+        aliases[key] = [].concat(opts.alias[key]);
+        aliases[key].forEach(function (x) {
+            aliases[x] = [key].concat(aliases[key].filter(function (y) {
+                return x !== y;
+            }));
+        });
+    });
+    
+    var defaults = opts['default'] || {};
+    
+    var argv = { _ : [] };
+    Object.keys(flags.bools).forEach(function (key) {
+        setArg(key, defaults[key] === undefined ? false : defaults[key]);
+    });
+    
+    var notFlags = [];
+
+    if (args.indexOf('--') !== -1) {
+        notFlags = args.slice(args.indexOf('--')+1);
+        args = args.slice(0, args.indexOf('--'));
+    }
+
+    function setArg (key, val) {
+        var value = !flags.strings[key] && isNumber(val)
+            ? Number(val) : val
+        ;
+        setKey(argv, key.split('.'), value);
+        
+        (aliases[key] || []).forEach(function (x) {
+            setKey(argv, x.split('.'), value);
+        });
+    }
+    
+    for (var i = 0; i < args.length; i++) {
+        var arg = args[i];
+        
+        if (/^--.+=/.test(arg)) {
+            // Using [\s\S] instead of . because js doesn't support the
+            // 'dotall' regex modifier. See:
+            // http://stackoverflow.com/a/1068308/13216
+            var m = arg.match(/^--([^=]+)=([\s\S]*)$/);
+            setArg(m[1], m[2]);
+        }
+        else if (/^--no-.+/.test(arg)) {
+            var key = arg.match(/^--no-(.+)/)[1];
+            setArg(key, false);
+        }
+        else if (/^--.+/.test(arg)) {
+            var key = arg.match(/^--(.+)/)[1];
+            var next = args[i + 1];
+            if (next !== undefined && !/^-/.test(next)
+            && !flags.bools[key]
+            && (aliases[key] ? !flags.bools[aliases[key]] : true)) {
+                setArg(key, next);
+                i++;
+            }
+            else if (/^(true|false)$/.test(next)) {
+                setArg(key, next === 'true');
+                i++;
+            }
+            else {
+                setArg(key, flags.strings[key] ? '' : true);
+            }
+        }
+        else if (/^-[^-]+/.test(arg)) {
+            var letters = arg.slice(1,-1).split('');
+            
+            var broken = false;
+            for (var j = 0; j < letters.length; j++) {
+                var next = arg.slice(j+2);
+                
+                if (next === '-') {
+                    setArg(letters[j], next)
+                    continue;
+                }
+                
+                if (/[A-Za-z]/.test(letters[j])
+                && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) {
+                    setArg(letters[j], next);
+                    broken = true;
+                    break;
+                }
+                
+                if (letters[j+1] && letters[j+1].match(/\W/)) {
+                    setArg(letters[j], arg.slice(j+2));
+                    broken = true;
+                    break;
+                }
+                else {
+                    setArg(letters[j], flags.strings[letters[j]] ? '' : true);
+                }
+            }
+            
+            var key = arg.slice(-1)[0];
+            if (!broken && key !== '-') {
+                if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1])
+                && !flags.bools[key]
+                && (aliases[key] ? !flags.bools[aliases[key]] : true)) {
+                    setArg(key, args[i+1]);
+                    i++;
+                }
+                else if (args[i+1] && /true|false/.test(args[i+1])) {
+                    setArg(key, args[i+1] === 'true');
+                    i++;
+                }
+                else {
+                    setArg(key, flags.strings[key] ? '' : true);
+                }
+            }
+        }
+        else {
+            argv._.push(
+                flags.strings['_'] || !isNumber(arg) ? arg : Number(arg)
+            );
+        }
+    }
+    
+    Object.keys(defaults).forEach(function (key) {
+        if (!hasKey(argv, key.split('.'))) {
+            setKey(argv, key.split('.'), defaults[key]);
+            
+            (aliases[key] || []).forEach(function (x) {
+                setKey(argv, x.split('.'), defaults[key]);
+            });
+        }
+    });
+    
+    notFlags.forEach(function(key) {
+        argv._.push(key);
+    });
+
+    return argv;
+};
+
+function hasKey (obj, keys) {
+    var o = obj;
+    keys.slice(0,-1).forEach(function (key) {
+        o = (o[key] || {});
+    });
+
+    var key = keys[keys.length - 1];
+    return key in o;
+}
+
+function setKey (obj, keys, value) {
+    var o = obj;
+    keys.slice(0,-1).forEach(function (key) {
+        if (o[key] === undefined) o[key] = {};
+        o = o[key];
+    });
+    
+    var key = keys[keys.length - 1];
+    if (o[key] === undefined || typeof o[key] === 'boolean') {
+        o[key] = value;
+    }
+    else if (Array.isArray(o[key])) {
+        o[key].push(value);
+    }
+    else {
+        o[key] = [ o[key], value ];
+    }
+}
+
+function isNumber (x) {
+    if (typeof x === 'number') return true;
+    if (/^0x[0-9a-f]+$/i.test(x)) return true;
+    return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x);
+}
+
+function longest (xs) {
+    return Math.max.apply(null, xs.map(function (x) { return x.length }));
+}
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/package.json
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/package.json	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/package.json	(revision 516)
@@ -0,0 +1,50 @@
+{
+  "name": "minimist",
+  "version": "0.0.8",
+  "description": "parse argument options",
+  "main": "index.js",
+  "devDependencies": {
+    "tape": "~1.0.4",
+    "tap": "~0.4.0"
+  },
+  "scripts": {
+    "test": "tap test/*.js"
+  },
+  "testling": {
+    "files": "test/*.js",
+    "browsers": [
+      "ie/6..latest",
+      "ff/5",
+      "firefox/latest",
+      "chrome/10",
+      "chrome/latest",
+      "safari/5.1",
+      "safari/latest",
+      "opera/12"
+    ]
+  },
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/substack/minimist.git"
+  },
+  "homepage": "https://github.com/substack/minimist",
+  "keywords": [
+    "argv",
+    "getopt",
+    "parser",
+    "optimist"
+  ],
+  "author": {
+    "name": "James Halliday",
+    "email": "mail@substack.net",
+    "url": "http://substack.net"
+  },
+  "license": "MIT",
+  "readme": "# minimist\n\nparse argument options\n\nThis module is the guts of optimist's argument parser without all the\nfanciful decoration.\n\n[![browser support](https://ci.testling.com/substack/minimist.png)](http://ci.testling.com/substack/minimist)\n\n[![build status](https://secure.travis-ci.org/substack/minimist.png)](http://travis-ci.org/substack/minimist)\n\n# example\n\n``` js\nvar argv = require('minimist')(process.argv.slice(2));\nconsole.dir(argv);\n```\n\n```\n$ node example/parse.js -a beep -b boop\n{ _: [], a: 'beep', b: 'boop' }\n```\n\n```\n$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz\n{ _: [ 'foo', 'bar', 'baz' ],\n  x: 3,\n  y: 4,\n  n: 5,\n  a: true,\n  b: true,\n  c: true,\n  beep: 'boop' }\n```\n\n# methods\n\n``` js\nvar parseArgs = require('minimist')\n```\n\n## var argv = parseArgs(args, opts={})\n\nReturn an argument object `argv` populated with the array arguments from `args`.\n\n`argv._` contains all the arguments that didn't have an option associated with\nthem.\n\nNumeric-looking arguments will be returned as numbers unless `opts.string` or\n`opts.boolean` is set for that argument name.\n\nAny arguments after `'--'` will not be parsed and will end up in `argv._`.\n\noptions can be:\n\n* `opts.string` - a string or array of strings argument names to always treat as\nstrings\n* `opts.boolean` - a string or array of strings to always treat as booleans\n* `opts.alias` - an object mapping string names to strings or arrays of string\nargument names to use as aliases\n* `opts.default` - an object mapping string argument names to default values\n\n# install\n\nWith [npm](https://npmjs.org) do:\n\n```\nnpm install minimist\n```\n\n# license\n\nMIT\n",
+  "readmeFilename": "readme.markdown",
+  "bugs": {
+    "url": "https://github.com/substack/minimist/issues"
+  },
+  "_id": "minimist@0.0.8",
+  "_from": "minimist@~0.0.1"
+}
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/readme.markdown
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/readme.markdown	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/readme.markdown	(revision 516)
@@ -0,0 +1,73 @@
+# minimist
+
+parse argument options
+
+This module is the guts of optimist's argument parser without all the
+fanciful decoration.
+
+[![browser support](https://ci.testling.com/substack/minimist.png)](http://ci.testling.com/substack/minimist)
+
+[![build status](https://secure.travis-ci.org/substack/minimist.png)](http://travis-ci.org/substack/minimist)
+
+# example
+
+``` js
+var argv = require('minimist')(process.argv.slice(2));
+console.dir(argv);
+```
+
+```
+$ node example/parse.js -a beep -b boop
+{ _: [], a: 'beep', b: 'boop' }
+```
+
+```
+$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz
+{ _: [ 'foo', 'bar', 'baz' ],
+  x: 3,
+  y: 4,
+  n: 5,
+  a: true,
+  b: true,
+  c: true,
+  beep: 'boop' }
+```
+
+# methods
+
+``` js
+var parseArgs = require('minimist')
+```
+
+## var argv = parseArgs(args, opts={})
+
+Return an argument object `argv` populated with the array arguments from `args`.
+
+`argv._` contains all the arguments that didn't have an option associated with
+them.
+
+Numeric-looking arguments will be returned as numbers unless `opts.string` or
+`opts.boolean` is set for that argument name.
+
+Any arguments after `'--'` will not be parsed and will end up in `argv._`.
+
+options can be:
+
+* `opts.string` - a string or array of strings argument names to always treat as
+strings
+* `opts.boolean` - a string or array of strings to always treat as booleans
+* `opts.alias` - an object mapping string names to strings or arrays of string
+argument names to use as aliases
+* `opts.default` - an object mapping string argument names to default values
+
+# install
+
+With [npm](https://npmjs.org) do:
+
+```
+npm install minimist
+```
+
+# license
+
+MIT
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/dash.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/dash.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/dash.js	(revision 516)
@@ -0,0 +1,24 @@
+var parse = require('../');
+var test = require('tape');
+
+test('-', function (t) {
+    t.plan(5);
+    t.deepEqual(parse([ '-n', '-' ]), { n: '-', _: [] });
+    t.deepEqual(parse([ '-' ]), { _: [ '-' ] });
+    t.deepEqual(parse([ '-f-' ]), { f: '-', _: [] });
+    t.deepEqual(
+        parse([ '-b', '-' ], { boolean: 'b' }),
+        { b: true, _: [ '-' ] }
+    );
+    t.deepEqual(
+        parse([ '-s', '-' ], { string: 's' }),
+        { s: '-', _: [] }
+    );
+});
+
+test('-a -- b', function (t) {
+    t.plan(3);
+    t.deepEqual(parse([ '-a', '--', 'b' ]), { a: true, _: [ 'b' ] });
+    t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] });
+    t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] });
+});
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/default_bool.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/default_bool.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/default_bool.js	(revision 516)
@@ -0,0 +1,20 @@
+var test = require('tape');
+var parse = require('../');
+
+test('boolean default true', function (t) {
+    var argv = parse([], {
+        boolean: 'sometrue',
+        default: { sometrue: true }
+    });
+    t.equal(argv.sometrue, true);
+    t.end();
+});
+
+test('boolean default false', function (t) {
+    var argv = parse([], {
+        boolean: 'somefalse',
+        default: { somefalse: false }
+    });
+    t.equal(argv.somefalse, false);
+    t.end();
+});
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/dotted.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/dotted.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/dotted.js	(revision 516)
@@ -0,0 +1,16 @@
+var parse = require('../');
+var test = require('tape');
+
+test('dotted alias', function (t) {
+    var argv = parse(['--a.b', '22'], {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}});
+    t.equal(argv.a.b, 22);
+    t.equal(argv.aa.bb, 22);
+    t.end();
+});
+
+test('dotted default', function (t) {
+    var argv = parse('', {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}});
+    t.equal(argv.a.b, 11);
+    t.equal(argv.aa.bb, 11);
+    t.end();
+});
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/long.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/long.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/long.js	(revision 516)
@@ -0,0 +1,31 @@
+var test = require('tape');
+var parse = require('../');
+
+test('long opts', function (t) {
+    t.deepEqual(
+        parse([ '--bool' ]),
+        { bool : true, _ : [] },
+        'long boolean'
+    );
+    t.deepEqual(
+        parse([ '--pow', 'xixxle' ]),
+        { pow : 'xixxle', _ : [] },
+        'long capture sp'
+    );
+    t.deepEqual(
+        parse([ '--pow=xixxle' ]),
+        { pow : 'xixxle', _ : [] },
+        'long capture eq'
+    );
+    t.deepEqual(
+        parse([ '--host', 'localhost', '--port', '555' ]),
+        { host : 'localhost', port : 555, _ : [] },
+        'long captures sp'
+    );
+    t.deepEqual(
+        parse([ '--host=localhost', '--port=555' ]),
+        { host : 'localhost', port : 555, _ : [] },
+        'long captures eq'
+    );
+    t.end();
+});
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/parse.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/parse.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/parse.js	(revision 516)
@@ -0,0 +1,318 @@
+var parse = require('../');
+var test = require('tape');
+
+test('parse args', function (t) {
+    t.deepEqual(
+        parse([ '--no-moo' ]),
+        { moo : false, _ : [] },
+        'no'
+    );
+    t.deepEqual(
+        parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]),
+        { v : ['a','b','c'], _ : [] },
+        'multi'
+    );
+    t.end();
+});
+ 
+test('comprehensive', function (t) {
+    t.deepEqual(
+        parse([
+            '--name=meowmers', 'bare', '-cats', 'woo',
+            '-h', 'awesome', '--multi=quux',
+            '--key', 'value',
+            '-b', '--bool', '--no-meep', '--multi=baz',
+            '--', '--not-a-flag', 'eek'
+        ]),
+        {
+            c : true,
+            a : true,
+            t : true,
+            s : 'woo',
+            h : 'awesome',
+            b : true,
+            bool : true,
+            key : 'value',
+            multi : [ 'quux', 'baz' ],
+            meep : false,
+            name : 'meowmers',
+            _ : [ 'bare', '--not-a-flag', 'eek' ]
+        }
+    );
+    t.end();
+});
+
+test('nums', function (t) {
+    var argv = parse([
+        '-x', '1234',
+        '-y', '5.67',
+        '-z', '1e7',
+        '-w', '10f',
+        '--hex', '0xdeadbeef',
+        '789'
+    ]);
+    t.deepEqual(argv, {
+        x : 1234,
+        y : 5.67,
+        z : 1e7,
+        w : '10f',
+        hex : 0xdeadbeef,
+        _ : [ 789 ]
+    });
+    t.deepEqual(typeof argv.x, 'number');
+    t.deepEqual(typeof argv.y, 'number');
+    t.deepEqual(typeof argv.z, 'number');
+    t.deepEqual(typeof argv.w, 'string');
+    t.deepEqual(typeof argv.hex, 'number');
+    t.deepEqual(typeof argv._[0], 'number');
+    t.end();
+});
+
+test('flag boolean', function (t) {
+    var argv = parse([ '-t', 'moo' ], { boolean: 't' });
+    t.deepEqual(argv, { t : true, _ : [ 'moo' ] });
+    t.deepEqual(typeof argv.t, 'boolean');
+    t.end();
+});
+
+test('flag boolean value', function (t) {
+    var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], {
+        boolean: [ 't', 'verbose' ],
+        default: { verbose: true }
+    });
+    
+    t.deepEqual(argv, {
+        verbose: false,
+        t: true,
+        _: ['moo']
+    });
+    
+    t.deepEqual(typeof argv.verbose, 'boolean');
+    t.deepEqual(typeof argv.t, 'boolean');
+    t.end();
+});
+
+test('flag boolean default false', function (t) {
+    var argv = parse(['moo'], {
+        boolean: ['t', 'verbose'],
+        default: { verbose: false, t: false }
+    });
+    
+    t.deepEqual(argv, {
+        verbose: false,
+        t: false,
+        _: ['moo']
+    });
+    
+    t.deepEqual(typeof argv.verbose, 'boolean');
+    t.deepEqual(typeof argv.t, 'boolean');
+    t.end();
+
+});
+
+test('boolean groups', function (t) {
+    var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], {
+        boolean: ['x','y','z']
+    });
+    
+    t.deepEqual(argv, {
+        x : true,
+        y : false,
+        z : true,
+        _ : [ 'one', 'two', 'three' ]
+    });
+    
+    t.deepEqual(typeof argv.x, 'boolean');
+    t.deepEqual(typeof argv.y, 'boolean');
+    t.deepEqual(typeof argv.z, 'boolean');
+    t.end();
+});
+
+test('newlines in params' , function (t) {
+    var args = parse([ '-s', "X\nX" ])
+    t.deepEqual(args, { _ : [], s : "X\nX" });
+    
+    // reproduce in bash:
+    // VALUE="new
+    // line"
+    // node program.js --s="$VALUE"
+    args = parse([ "--s=X\nX" ])
+    t.deepEqual(args, { _ : [], s : "X\nX" });
+    t.end();
+});
+
+test('strings' , function (t) {
+    var s = parse([ '-s', '0001234' ], { string: 's' }).s;
+    t.equal(s, '0001234');
+    t.equal(typeof s, 'string');
+    
+    var x = parse([ '-x', '56' ], { string: 'x' }).x;
+    t.equal(x, '56');
+    t.equal(typeof x, 'string');
+    t.end();
+});
+
+test('stringArgs', function (t) {
+    var s = parse([ '  ', '  ' ], { string: '_' })._;
+    t.same(s.length, 2);
+    t.same(typeof s[0], 'string');
+    t.same(s[0], '  ');
+    t.same(typeof s[1], 'string');
+    t.same(s[1], '  ');
+    t.end();
+});
+
+test('empty strings', function(t) {
+    var s = parse([ '-s' ], { string: 's' }).s;
+    t.equal(s, '');
+    t.equal(typeof s, 'string');
+
+    var str = parse([ '--str' ], { string: 'str' }).str;
+    t.equal(str, '');
+    t.equal(typeof str, 'string');
+
+    var letters = parse([ '-art' ], {
+        string: [ 'a', 't' ]
+    });
+
+    t.equal(letters.a, '');
+    t.equal(letters.r, true);
+    t.equal(letters.t, '');
+
+    t.end();
+});
+
+
+test('slashBreak', function (t) {
+    t.same(
+        parse([ '-I/foo/bar/baz' ]),
+        { I : '/foo/bar/baz', _ : [] }
+    );
+    t.same(
+        parse([ '-xyz/foo/bar/baz' ]),
+        { x : true, y : true, z : '/foo/bar/baz', _ : [] }
+    );
+    t.end();
+});
+
+test('alias', function (t) {
+    var argv = parse([ '-f', '11', '--zoom', '55' ], {
+        alias: { z: 'zoom' }
+    });
+    t.equal(argv.zoom, 55);
+    t.equal(argv.z, argv.zoom);
+    t.equal(argv.f, 11);
+    t.end();
+});
+
+test('multiAlias', function (t) {
+    var argv = parse([ '-f', '11', '--zoom', '55' ], {
+        alias: { z: [ 'zm', 'zoom' ] }
+    });
+    t.equal(argv.zoom, 55);
+    t.equal(argv.z, argv.zoom);
+    t.equal(argv.z, argv.zm);
+    t.equal(argv.f, 11);
+    t.end();
+});
+
+test('nested dotted objects', function (t) {
+    var argv = parse([
+        '--foo.bar', '3', '--foo.baz', '4',
+        '--foo.quux.quibble', '5', '--foo.quux.o_O',
+        '--beep.boop'
+    ]);
+    
+    t.same(argv.foo, {
+        bar : 3,
+        baz : 4,
+        quux : {
+            quibble : 5,
+            o_O : true
+        }
+    });
+    t.same(argv.beep, { boop : true });
+    t.end();
+});
+
+test('boolean and alias with chainable api', function (t) {
+    var aliased = [ '-h', 'derp' ];
+    var regular = [ '--herp',  'derp' ];
+    var opts = {
+        herp: { alias: 'h', boolean: true }
+    };
+    var aliasedArgv = parse(aliased, {
+        boolean: 'herp',
+        alias: { h: 'herp' }
+    });
+    var propertyArgv = parse(regular, {
+        boolean: 'herp',
+        alias: { h: 'herp' }
+    });
+    var expected = {
+        herp: true,
+        h: true,
+        '_': [ 'derp' ]
+    };
+    
+    t.same(aliasedArgv, expected);
+    t.same(propertyArgv, expected); 
+    t.end();
+});
+
+test('boolean and alias with options hash', function (t) {
+    var aliased = [ '-h', 'derp' ];
+    var regular = [ '--herp', 'derp' ];
+    var opts = {
+        alias: { 'h': 'herp' },
+        boolean: 'herp'
+    };
+    var aliasedArgv = parse(aliased, opts);
+    var propertyArgv = parse(regular, opts);
+    var expected = {
+        herp: true,
+        h: true,
+        '_': [ 'derp' ]
+    };
+    t.same(aliasedArgv, expected);
+    t.same(propertyArgv, expected);
+    t.end();
+});
+
+test('boolean and alias using explicit true', function (t) {
+    var aliased = [ '-h', 'true' ];
+    var regular = [ '--herp',  'true' ];
+    var opts = {
+        alias: { h: 'herp' },
+        boolean: 'h'
+    };
+    var aliasedArgv = parse(aliased, opts);
+    var propertyArgv = parse(regular, opts);
+    var expected = {
+        herp: true,
+        h: true,
+        '_': [ ]
+    };
+
+    t.same(aliasedArgv, expected);
+    t.same(propertyArgv, expected); 
+    t.end();
+});
+
+// regression, see https://github.com/substack/node-optimist/issues/71
+test('boolean and --x=true', function(t) {
+    var parsed = parse(['--boool', '--other=true'], {
+        boolean: 'boool'
+    });
+
+    t.same(parsed.boool, true);
+    t.same(parsed.other, 'true');
+
+    parsed = parse(['--boool', '--other=false'], {
+        boolean: 'boool'
+    });
+    
+    t.same(parsed.boool, true);
+    t.same(parsed.other, 'false');
+    t.end();
+});
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/parse_modified.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/parse_modified.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/parse_modified.js	(revision 516)
@@ -0,0 +1,9 @@
+var parse = require('../');
+var test = require('tape');
+
+test('parse with modifier functions' , function (t) {
+    t.plan(1);
+    
+    var argv = parse([ '-b', '123' ], { boolean: 'b' });
+    t.deepEqual(argv, { b: true, _: ['123'] });
+});
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/short.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/short.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/short.js	(revision 516)
@@ -0,0 +1,67 @@
+var parse = require('../');
+var test = require('tape');
+
+test('numeric short args', function (t) {
+    t.plan(2);
+    t.deepEqual(parse([ '-n123' ]), { n: 123, _: [] });
+    t.deepEqual(
+        parse([ '-123', '456' ]),
+        { 1: true, 2: true, 3: 456, _: [] }
+    );
+});
+
+test('short', function (t) {
+    t.deepEqual(
+        parse([ '-b' ]),
+        { b : true, _ : [] },
+        'short boolean'
+    );
+    t.deepEqual(
+        parse([ 'foo', 'bar', 'baz' ]),
+        { _ : [ 'foo', 'bar', 'baz' ] },
+        'bare'
+    );
+    t.deepEqual(
+        parse([ '-cats' ]),
+        { c : true, a : true, t : true, s : true, _ : [] },
+        'group'
+    );
+    t.deepEqual(
+        parse([ '-cats', 'meow' ]),
+        { c : true, a : true, t : true, s : 'meow', _ : [] },
+        'short group next'
+    );
+    t.deepEqual(
+        parse([ '-h', 'localhost' ]),
+        { h : 'localhost', _ : [] },
+        'short capture'
+    );
+    t.deepEqual(
+        parse([ '-h', 'localhost', '-p', '555' ]),
+        { h : 'localhost', p : 555, _ : [] },
+        'short captures'
+    );
+    t.end();
+});
+ 
+test('mixed short bool and capture', function (t) {
+    t.same(
+        parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]),
+        {
+            f : true, p : 555, h : 'localhost',
+            _ : [ 'script.js' ]
+        }
+    );
+    t.end();
+});
+ 
+test('short and long', function (t) {
+    t.deepEqual(
+        parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]),
+        {
+            f : true, p : 555, h : 'localhost',
+            _ : [ 'script.js' ]
+        }
+    );
+    t.end();
+});
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/whitespace.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/whitespace.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/minimist/test/whitespace.js	(revision 516)
@@ -0,0 +1,8 @@
+var parse = require('../');
+var test = require('tape');
+
+test('whitespace should be whitespace' , function (t) {
+    t.plan(1);
+    var x = parse([ '-x', '\t' ]).x;
+    t.equal(x, '\t');
+});
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/wordwrap/package.json
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/wordwrap/package.json	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/node_modules/wordwrap/package.json	(revision 516)
@@ -42,8 +42,4 @@
   "homepage": "https://github.com/substack/node-wordwrap",
   "_id": "wordwrap@0.0.2",
-  "dist": {
-    "shasum": "0e59bfdfda36959a4255195af71166e90abb9a7f"
-  },
-  "_from": "wordwrap@0.0.2",
-  "_resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz"
+  "_from": "wordwrap@~0.0.2"
 }
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/package.json
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/package.json	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/package.json	(revision 516)
@@ -1,18 +1,14 @@
 {
   "name": "optimist",
-  "version": "0.3.5",
+  "version": "0.6.1",
   "description": "Light-weight option parsing with an argv hash. No optstrings attached.",
   "main": "./index.js",
-  "directories": {
-    "lib": ".",
-    "test": "test",
-    "example": "example"
-  },
   "dependencies": {
-    "wordwrap": "~0.0.2"
+    "wordwrap": "~0.0.2",
+    "minimist": "~0.0.1"
   },
   "devDependencies": {
     "hashish": "~0.0.4",
-    "tap": "~0.2.4"
+    "tap": "~0.4.0"
   },
   "scripts": {
@@ -41,15 +37,15 @@
     "node": ">=0.4"
   },
-  "readme": "optimist\n========\n\nOptimist is a node.js library for option parsing for people who hate option\nparsing. More specifically, this module is for people who like all the --bells\nand -whistlz of program usage but think optstrings are a waste of time.\n\nWith optimist, option parsing doesn't have to suck (as much).\n\n[![build status](https://secure.travis-ci.org/substack/node-optimist.png)](http://travis-ci.org/substack/node-optimist)\n\nexamples\n========\n\nWith Optimist, the options are just a hash! No optstrings attached.\n-------------------------------------------------------------------\n\nxup.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist').argv;\n\nif (argv.rif - 5 * argv.xup > 7.138) {\n    console.log('Buy more riffiwobbles');\n}\nelse {\n    console.log('Sell the xupptumblers');\n}\n````\n\n***\n\n    $ ./xup.js --rif=55 --xup=9.52\n    Buy more riffiwobbles\n    \n    $ ./xup.js --rif 12 --xup 8.1\n    Sell the xupptumblers\n\n![This one's optimistic.](http://substack.net/images/optimistic.png)\n\nBut wait! There's more! You can do short options:\n-------------------------------------------------\n \nshort.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist').argv;\nconsole.log('(%d,%d)', argv.x, argv.y);\n````\n\n***\n\n    $ ./short.js -x 10 -y 21\n    (10,21)\n\nAnd booleans, both long and short (and grouped):\n----------------------------------\n\nbool.js:\n\n````javascript\n#!/usr/bin/env node\nvar util = require('util');\nvar argv = require('optimist').argv;\n\nif (argv.s) {\n    util.print(argv.fr ? 'Le chat dit: ' : 'The cat says: ');\n}\nconsole.log(\n    (argv.fr ? 'miaou' : 'meow') + (argv.p ? '.' : '')\n);\n````\n\n***\n\n    $ ./bool.js -s\n    The cat says: meow\n    \n    $ ./bool.js -sp\n    The cat says: meow.\n\n    $ ./bool.js -sp --fr\n    Le chat dit: miaou.\n\nAnd non-hypenated options too! Just use `argv._`!\n-------------------------------------------------\n \nnonopt.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist').argv;\nconsole.log('(%d,%d)', argv.x, argv.y);\nconsole.log(argv._);\n````\n\n***\n\n    $ ./nonopt.js -x 6.82 -y 3.35 moo\n    (6.82,3.35)\n    [ 'moo' ]\n    \n    $ ./nonopt.js foo -x 0.54 bar -y 1.12 baz\n    (0.54,1.12)\n    [ 'foo', 'bar', 'baz' ]\n\nPlus, Optimist comes with .usage() and .demand()!\n-------------------------------------------------\n\ndivide.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .usage('Usage: $0 -x [num] -y [num]')\n    .demand(['x','y'])\n    .argv;\n\nconsole.log(argv.x / argv.y);\n````\n\n***\n \n    $ ./divide.js -x 55 -y 11\n    5\n    \n    $ node ./divide.js -x 4.91 -z 2.51\n    Usage: node ./divide.js -x [num] -y [num]\n\n    Options:\n      -x  [required]\n      -y  [required]\n\n    Missing required arguments: y\n\nEVEN MORE HOLY COW\n------------------\n\ndefault_singles.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .default('x', 10)\n    .default('y', 10)\n    .argv\n;\nconsole.log(argv.x + argv.y);\n````\n\n***\n\n    $ ./default_singles.js -x 5\n    15\n\ndefault_hash.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .default({ x : 10, y : 10 })\n    .argv\n;\nconsole.log(argv.x + argv.y);\n````\n\n***\n\n    $ ./default_hash.js -y 7\n    17\n\nAnd if you really want to get all descriptive about it...\n---------------------------------------------------------\n\nboolean_single.js\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .boolean('v')\n    .argv\n;\nconsole.dir(argv);\n````\n\n***\n\n    $ ./boolean_single.js -v foo bar baz\n    true\n    [ 'bar', 'baz', 'foo' ]\n\nboolean_double.js\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .boolean(['x','y','z'])\n    .argv\n;\nconsole.dir([ argv.x, argv.y, argv.z ]);\nconsole.dir(argv._);\n````\n\n***\n\n    $ ./boolean_double.js -x -z one two three\n    [ true, false, true ]\n    [ 'one', 'two', 'three' ]\n\nOptimist is here to help...\n---------------------------\n\nYou can describe parameters for help messages and set aliases. Optimist figures\nout how to format a handy help string automatically.\n\nline_count.js\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .usage('Count the lines in a file.\\nUsage: $0')\n    .demand('f')\n    .alias('f', 'file')\n    .describe('f', 'Load a file')\n    .argv\n;\n\nvar fs = require('fs');\nvar s = fs.createReadStream(argv.file);\n\nvar lines = 0;\ns.on('data', function (buf) {\n    lines += buf.toString().match(/\\n/g).length;\n});\n\ns.on('end', function () {\n    console.log(lines);\n});\n````\n\n***\n\n    $ node line_count.js\n    Count the lines in a file.\n    Usage: node ./line_count.js\n\n    Options:\n      -f, --file  Load a file  [required]\n\n    Missing required arguments: f\n\n    $ node line_count.js --file line_count.js \n    20\n    \n    $ node line_count.js -f line_count.js \n    20\n\nmethods\n=======\n\nBy itself,\n\n````javascript\nrequire('optimist').argv\n`````\n\nwill use `process.argv` array to construct the `argv` object.\n\nYou can pass in the `process.argv` yourself:\n\n````javascript\nrequire('optimist')([ '-x', '1', '-y', '2' ]).argv\n````\n\nor use .parse() to do the same thing:\n\n````javascript\nrequire('optimist').parse([ '-x', '1', '-y', '2' ])\n````\n\nThe rest of these methods below come in just before the terminating `.argv`.\n\n.alias(key, alias)\n------------------\n\nSet key names as equivalent such that updates to a key will propagate to aliases\nand vice-versa.\n\nOptionally `.alias()` can take an object that maps keys to aliases.\n\n.default(key, value)\n--------------------\n\nSet `argv[key]` to `value` if no option was specified on `process.argv`.\n\nOptionally `.default()` can take an object that maps keys to default values.\n\n.demand(key)\n------------\n\nIf `key` is a string, show the usage information and exit if `key` wasn't\nspecified in `process.argv`.\n\nIf `key` is a number, demand at least as many non-option arguments, which show\nup in `argv._`.\n\nIf `key` is an Array, demand each element.\n\n.describe(key, desc)\n--------------------\n\nDescribe a `key` for the generated usage information.\n\nOptionally `.describe()` can take an object that maps keys to descriptions.\n\n.options(key, opt)\n------------------\n\nInstead of chaining together `.alias().demand().default()`, you can specify\nkeys in `opt` for each of the chainable methods.\n\nFor example:\n\n````javascript\nvar argv = require('optimist')\n    .options('f', {\n        alias : 'file',\n        default : '/etc/passwd',\n    })\n    .argv\n;\n````\n\nis the same as\n\n````javascript\nvar argv = require('optimist')\n    .alias('f', 'file')\n    .default('f', '/etc/passwd')\n    .argv\n;\n````\n\nOptionally `.options()` can take an object that maps keys to `opt` parameters.\n\n.usage(message)\n---------------\n\nSet a usage message to show which commands to use. Inside `message`, the string\n`$0` will get interpolated to the current script name or node command for the\npresent script similar to how `$0` works in bash or perl.\n\n.check(fn)\n----------\n\nCheck that certain conditions are met in the provided arguments.\n\nIf `fn` throws or returns `false`, show the thrown error, usage information, and\nexit.\n\n.boolean(key)\n-------------\n\nInterpret `key` as a boolean. If a non-flag option follows `key` in\n`process.argv`, that string won't get set as the value of `key`.\n\nIf `key` never shows up as a flag in `process.arguments`, `argv[key]` will be\n`false`.\n\nIf `key` is an Array, interpret all the elements as booleans.\n\n.string(key)\n------------\n\nTell the parser logic not to interpret `key` as a number or boolean.\nThis can be useful if you need to preserve leading zeros in an input.\n\nIf `key` is an Array, interpret all the elements as strings.\n\n.wrap(columns)\n--------------\n\nFormat usage output to wrap at `columns` many columns.\n\n.help()\n-------\n\nReturn the generated usage string.\n\n.showHelp(fn=console.error)\n---------------------------\n\nPrint the usage data using `fn` for printing.\n\n.parse(args)\n------------\n\nParse `args` instead of `process.argv`. Returns the `argv` object.\n\n.argv\n-----\n\nGet the arguments as a plain old object.\n\nArguments without a corresponding flag show up in the `argv._` array.\n\nThe script name or node command is available at `argv.$0` similarly to how `$0`\nworks in bash or perl.\n\nparsing tricks\n==============\n\nstop parsing\n------------\n\nUse `--` to stop parsing flags and stuff the remainder into `argv._`.\n\n    $ node examples/reflect.js -a 1 -b 2 -- -c 3 -d 4\n    { _: [ '-c', '3', '-d', '4' ],\n      '$0': 'node ./examples/reflect.js',\n      a: 1,\n      b: 2 }\n\nnegate fields\n-------------\n\nIf you want to explicity set a field to false instead of just leaving it\nundefined or to override a default you can do `--no-key`.\n\n    $ node examples/reflect.js -a --no-b\n    { _: [],\n      '$0': 'node ./examples/reflect.js',\n      a: true,\n      b: false }\n\nnumbers\n-------\n\nEvery argument that looks like a number (`!isNaN(Number(arg))`) is converted to\none. This way you can just `net.createConnection(argv.port)` and you can add\nnumbers out of `argv` with `+` without having that mean concatenation,\nwhich is super frustrating.\n\nduplicates\n----------\n\nIf you specify a flag multiple times it will get turned into an array containing\nall the values in order.\n\n    $ node examples/reflect.js -x 5 -x 8 -x 0\n    { _: [],\n      '$0': 'node ./examples/reflect.js',\n        x: [ 5, 8, 0 ] }\n\ndot notation\n------------\n\nWhen you use dots (`.`s) in argument names, an implicit object path is assumed.\nThis lets you organize arguments into nested objects.\n\n     $ node examples/reflect.js --foo.bar.baz=33 --foo.quux=5\n     { _: [],\n       '$0': 'node ./examples/reflect.js',\n         foo: { bar: { baz: 33 }, quux: 5 } }\n\ninstallation\n============\n\nWith [npm](http://github.com/isaacs/npm), just do:\n    npm install optimist\n \nor clone this project on github:\n\n    git clone http://github.com/substack/node-optimist.git\n\nTo run the tests with [expresso](http://github.com/visionmedia/expresso),\njust do:\n    \n    expresso\n\ninspired By\n===========\n\nThis module is loosely inspired by Perl's\n[Getopt::Casual](http://search.cpan.org/~photo/Getopt-Casual-0.13.1/Casual.pm).\n",
-  "readmeFilename": "README.markdown",
+  "readme": "# DEPRECATION NOTICE\n\nI don't want to maintain this module anymore since I just use\n[minimist](https://npmjs.org/package/minimist), the argument parsing engine,\ndirectly instead nowadays.\n\nSee [yargs](https://github.com/chevex/yargs) for the modern, pirate-themed\nsuccessor to optimist.\n\n[![yarrrrrrrgs!](http://i.imgur.com/4WFGVJ9.png)](https://github.com/chevex/yargs)\n\nYou should also consider [nomnom](https://github.com/harthur/nomnom).\n\noptimist\n========\n\nOptimist is a node.js library for option parsing for people who hate option\nparsing. More specifically, this module is for people who like all the --bells\nand -whistlz of program usage but think optstrings are a waste of time.\n\nWith optimist, option parsing doesn't have to suck (as much).\n\n[![build status](https://secure.travis-ci.org/substack/node-optimist.png)](http://travis-ci.org/substack/node-optimist)\n\nexamples\n========\n\nWith Optimist, the options are just a hash! No optstrings attached.\n-------------------------------------------------------------------\n\nxup.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist').argv;\n\nif (argv.rif - 5 * argv.xup > 7.138) {\n    console.log('Buy more riffiwobbles');\n}\nelse {\n    console.log('Sell the xupptumblers');\n}\n````\n\n***\n\n    $ ./xup.js --rif=55 --xup=9.52\n    Buy more riffiwobbles\n    \n    $ ./xup.js --rif 12 --xup 8.1\n    Sell the xupptumblers\n\n![This one's optimistic.](http://substack.net/images/optimistic.png)\n\nBut wait! There's more! You can do short options:\n-------------------------------------------------\n \nshort.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist').argv;\nconsole.log('(%d,%d)', argv.x, argv.y);\n````\n\n***\n\n    $ ./short.js -x 10 -y 21\n    (10,21)\n\nAnd booleans, both long and short (and grouped):\n----------------------------------\n\nbool.js:\n\n````javascript\n#!/usr/bin/env node\nvar util = require('util');\nvar argv = require('optimist').argv;\n\nif (argv.s) {\n    util.print(argv.fr ? 'Le chat dit: ' : 'The cat says: ');\n}\nconsole.log(\n    (argv.fr ? 'miaou' : 'meow') + (argv.p ? '.' : '')\n);\n````\n\n***\n\n    $ ./bool.js -s\n    The cat says: meow\n    \n    $ ./bool.js -sp\n    The cat says: meow.\n\n    $ ./bool.js -sp --fr\n    Le chat dit: miaou.\n\nAnd non-hypenated options too! Just use `argv._`!\n-------------------------------------------------\n \nnonopt.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist').argv;\nconsole.log('(%d,%d)', argv.x, argv.y);\nconsole.log(argv._);\n````\n\n***\n\n    $ ./nonopt.js -x 6.82 -y 3.35 moo\n    (6.82,3.35)\n    [ 'moo' ]\n    \n    $ ./nonopt.js foo -x 0.54 bar -y 1.12 baz\n    (0.54,1.12)\n    [ 'foo', 'bar', 'baz' ]\n\nPlus, Optimist comes with .usage() and .demand()!\n-------------------------------------------------\n\ndivide.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .usage('Usage: $0 -x [num] -y [num]')\n    .demand(['x','y'])\n    .argv;\n\nconsole.log(argv.x / argv.y);\n````\n\n***\n \n    $ ./divide.js -x 55 -y 11\n    5\n    \n    $ node ./divide.js -x 4.91 -z 2.51\n    Usage: node ./divide.js -x [num] -y [num]\n\n    Options:\n      -x  [required]\n      -y  [required]\n\n    Missing required arguments: y\n\nEVEN MORE HOLY COW\n------------------\n\ndefault_singles.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .default('x', 10)\n    .default('y', 10)\n    .argv\n;\nconsole.log(argv.x + argv.y);\n````\n\n***\n\n    $ ./default_singles.js -x 5\n    15\n\ndefault_hash.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .default({ x : 10, y : 10 })\n    .argv\n;\nconsole.log(argv.x + argv.y);\n````\n\n***\n\n    $ ./default_hash.js -y 7\n    17\n\nAnd if you really want to get all descriptive about it...\n---------------------------------------------------------\n\nboolean_single.js\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .boolean('v')\n    .argv\n;\nconsole.dir(argv);\n````\n\n***\n\n    $ ./boolean_single.js -v foo bar baz\n    true\n    [ 'bar', 'baz', 'foo' ]\n\nboolean_double.js\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .boolean(['x','y','z'])\n    .argv\n;\nconsole.dir([ argv.x, argv.y, argv.z ]);\nconsole.dir(argv._);\n````\n\n***\n\n    $ ./boolean_double.js -x -z one two three\n    [ true, false, true ]\n    [ 'one', 'two', 'three' ]\n\nOptimist is here to help...\n---------------------------\n\nYou can describe parameters for help messages and set aliases. Optimist figures\nout how to format a handy help string automatically.\n\nline_count.js\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n    .usage('Count the lines in a file.\\nUsage: $0')\n    .demand('f')\n    .alias('f', 'file')\n    .describe('f', 'Load a file')\n    .argv\n;\n\nvar fs = require('fs');\nvar s = fs.createReadStream(argv.file);\n\nvar lines = 0;\ns.on('data', function (buf) {\n    lines += buf.toString().match(/\\n/g).length;\n});\n\ns.on('end', function () {\n    console.log(lines);\n});\n````\n\n***\n\n    $ node line_count.js\n    Count the lines in a file.\n    Usage: node ./line_count.js\n\n    Options:\n      -f, --file  Load a file  [required]\n\n    Missing required arguments: f\n\n    $ node line_count.js --file line_count.js \n    20\n    \n    $ node line_count.js -f line_count.js \n    20\n\nmethods\n=======\n\nBy itself,\n\n````javascript\nrequire('optimist').argv\n`````\n\nwill use `process.argv` array to construct the `argv` object.\n\nYou can pass in the `process.argv` yourself:\n\n````javascript\nrequire('optimist')([ '-x', '1', '-y', '2' ]).argv\n````\n\nor use .parse() to do the same thing:\n\n````javascript\nrequire('optimist').parse([ '-x', '1', '-y', '2' ])\n````\n\nThe rest of these methods below come in just before the terminating `.argv`.\n\n.alias(key, alias)\n------------------\n\nSet key names as equivalent such that updates to a key will propagate to aliases\nand vice-versa.\n\nOptionally `.alias()` can take an object that maps keys to aliases.\n\n.default(key, value)\n--------------------\n\nSet `argv[key]` to `value` if no option was specified on `process.argv`.\n\nOptionally `.default()` can take an object that maps keys to default values.\n\n.demand(key)\n------------\n\nIf `key` is a string, show the usage information and exit if `key` wasn't\nspecified in `process.argv`.\n\nIf `key` is a number, demand at least as many non-option arguments, which show\nup in `argv._`.\n\nIf `key` is an Array, demand each element.\n\n.describe(key, desc)\n--------------------\n\nDescribe a `key` for the generated usage information.\n\nOptionally `.describe()` can take an object that maps keys to descriptions.\n\n.options(key, opt)\n------------------\n\nInstead of chaining together `.alias().demand().default()`, you can specify\nkeys in `opt` for each of the chainable methods.\n\nFor example:\n\n````javascript\nvar argv = require('optimist')\n    .options('f', {\n        alias : 'file',\n        default : '/etc/passwd',\n    })\n    .argv\n;\n````\n\nis the same as\n\n````javascript\nvar argv = require('optimist')\n    .alias('f', 'file')\n    .default('f', '/etc/passwd')\n    .argv\n;\n````\n\nOptionally `.options()` can take an object that maps keys to `opt` parameters.\n\n.usage(message)\n---------------\n\nSet a usage message to show which commands to use. Inside `message`, the string\n`$0` will get interpolated to the current script name or node command for the\npresent script similar to how `$0` works in bash or perl.\n\n.check(fn)\n----------\n\nCheck that certain conditions are met in the provided arguments.\n\nIf `fn` throws or returns `false`, show the thrown error, usage information, and\nexit.\n\n.boolean(key)\n-------------\n\nInterpret `key` as a boolean. If a non-flag option follows `key` in\n`process.argv`, that string won't get set as the value of `key`.\n\nIf `key` never shows up as a flag in `process.arguments`, `argv[key]` will be\n`false`.\n\nIf `key` is an Array, interpret all the elements as booleans.\n\n.string(key)\n------------\n\nTell the parser logic not to interpret `key` as a number or boolean.\nThis can be useful if you need to preserve leading zeros in an input.\n\nIf `key` is an Array, interpret all the elements as strings.\n\n.wrap(columns)\n--------------\n\nFormat usage output to wrap at `columns` many columns.\n\n.help()\n-------\n\nReturn the generated usage string.\n\n.showHelp(fn=console.error)\n---------------------------\n\nPrint the usage data using `fn` for printing.\n\n.parse(args)\n------------\n\nParse `args` instead of `process.argv`. Returns the `argv` object.\n\n.argv\n-----\n\nGet the arguments as a plain old object.\n\nArguments without a corresponding flag show up in the `argv._` array.\n\nThe script name or node command is available at `argv.$0` similarly to how `$0`\nworks in bash or perl.\n\nparsing tricks\n==============\n\nstop parsing\n------------\n\nUse `--` to stop parsing flags and stuff the remainder into `argv._`.\n\n    $ node examples/reflect.js -a 1 -b 2 -- -c 3 -d 4\n    { _: [ '-c', '3', '-d', '4' ],\n      '$0': 'node ./examples/reflect.js',\n      a: 1,\n      b: 2 }\n\nnegate fields\n-------------\n\nIf you want to explicity set a field to false instead of just leaving it\nundefined or to override a default you can do `--no-key`.\n\n    $ node examples/reflect.js -a --no-b\n    { _: [],\n      '$0': 'node ./examples/reflect.js',\n      a: true,\n      b: false }\n\nnumbers\n-------\n\nEvery argument that looks like a number (`!isNaN(Number(arg))`) is converted to\none. This way you can just `net.createConnection(argv.port)` and you can add\nnumbers out of `argv` with `+` without having that mean concatenation,\nwhich is super frustrating.\n\nduplicates\n----------\n\nIf you specify a flag multiple times it will get turned into an array containing\nall the values in order.\n\n    $ node examples/reflect.js -x 5 -x 8 -x 0\n    { _: [],\n      '$0': 'node ./examples/reflect.js',\n        x: [ 5, 8, 0 ] }\n\ndot notation\n------------\n\nWhen you use dots (`.`s) in argument names, an implicit object path is assumed.\nThis lets you organize arguments into nested objects.\n\n     $ node examples/reflect.js --foo.bar.baz=33 --foo.quux=5\n     { _: [],\n       '$0': 'node ./examples/reflect.js',\n         foo: { bar: { baz: 33 }, quux: 5 } }\n\nshort numbers\n-------------\n\nShort numeric `head -n5` style argument work too:\n\n    $ node reflect.js -n123 -m456\n    { '3': true,\n      '6': true,\n      _: [],\n      '$0': 'node ./reflect.js',\n      n: 123,\n      m: 456 }\n\ninstallation\n============\n\nWith [npm](http://github.com/isaacs/npm), just do:\n    npm install optimist\n \nor clone this project on github:\n\n    git clone http://github.com/substack/node-optimist.git\n\nTo run the tests with [expresso](http://github.com/visionmedia/expresso),\njust do:\n    \n    expresso\n\ninspired By\n===========\n\nThis module is loosely inspired by Perl's\n[Getopt::Casual](http://search.cpan.org/~photo/Getopt-Casual-0.13.1/Casual.pm).\n",
+  "readmeFilename": "readme.markdown",
   "bugs": {
     "url": "https://github.com/substack/node-optimist/issues"
   },
   "homepage": "https://github.com/substack/node-optimist",
-  "_id": "optimist@0.3.5",
+  "_id": "optimist@0.6.1",
   "dist": {
-    "shasum": "4a95a366d4f292cb5930c16e82ef690885770fa2"
+    "shasum": "6ae855b9e52eb22c5af7b5e570013807be575bc3"
   },
-  "_from": "optimist@0.3.5",
-  "_resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.5.tgz"
+  "_from": "optimist@>=0.2.8",
+  "_resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz"
 }
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/readme.markdown
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/readme.markdown	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/readme.markdown	(revision 516)
@@ -0,0 +1,513 @@
+# DEPRECATION NOTICE
+
+I don't want to maintain this module anymore since I just use
+[minimist](https://npmjs.org/package/minimist), the argument parsing engine,
+directly instead nowadays.
+
+See [yargs](https://github.com/chevex/yargs) for the modern, pirate-themed
+successor to optimist.
+
+[![yarrrrrrrgs!](http://i.imgur.com/4WFGVJ9.png)](https://github.com/chevex/yargs)
+
+You should also consider [nomnom](https://github.com/harthur/nomnom).
+
+optimist
+========
+
+Optimist is a node.js library for option parsing for people who hate option
+parsing. More specifically, this module is for people who like all the --bells
+and -whistlz of program usage but think optstrings are a waste of time.
+
+With optimist, option parsing doesn't have to suck (as much).
+
+[![build status](https://secure.travis-ci.org/substack/node-optimist.png)](http://travis-ci.org/substack/node-optimist)
+
+examples
+========
+
+With Optimist, the options are just a hash! No optstrings attached.
+-------------------------------------------------------------------
+
+xup.js:
+
+````javascript
+#!/usr/bin/env node
+var argv = require('optimist').argv;
+
+if (argv.rif - 5 * argv.xup > 7.138) {
+    console.log('Buy more riffiwobbles');
+}
+else {
+    console.log('Sell the xupptumblers');
+}
+````
+
+***
+
+    $ ./xup.js --rif=55 --xup=9.52
+    Buy more riffiwobbles
+    
+    $ ./xup.js --rif 12 --xup 8.1
+    Sell the xupptumblers
+
+![This one's optimistic.](http://substack.net/images/optimistic.png)
+
+But wait! There's more! You can do short options:
+-------------------------------------------------
+ 
+short.js:
+
+````javascript
+#!/usr/bin/env node
+var argv = require('optimist').argv;
+console.log('(%d,%d)', argv.x, argv.y);
+````
+
+***
+
+    $ ./short.js -x 10 -y 21
+    (10,21)
+
+And booleans, both long and short (and grouped):
+----------------------------------
+
+bool.js:
+
+````javascript
+#!/usr/bin/env node
+var util = require('util');
+var argv = require('optimist').argv;
+
+if (argv.s) {
+    util.print(argv.fr ? 'Le chat dit: ' : 'The cat says: ');
+}
+console.log(
+    (argv.fr ? 'miaou' : 'meow') + (argv.p ? '.' : '')
+);
+````
+
+***
+
+    $ ./bool.js -s
+    The cat says: meow
+    
+    $ ./bool.js -sp
+    The cat says: meow.
+
+    $ ./bool.js -sp --fr
+    Le chat dit: miaou.
+
+And non-hypenated options too! Just use `argv._`!
+-------------------------------------------------
+ 
+nonopt.js:
+
+````javascript
+#!/usr/bin/env node
+var argv = require('optimist').argv;
+console.log('(%d,%d)', argv.x, argv.y);
+console.log(argv._);
+````
+
+***
+
+    $ ./nonopt.js -x 6.82 -y 3.35 moo
+    (6.82,3.35)
+    [ 'moo' ]
+    
+    $ ./nonopt.js foo -x 0.54 bar -y 1.12 baz
+    (0.54,1.12)
+    [ 'foo', 'bar', 'baz' ]
+
+Plus, Optimist comes with .usage() and .demand()!
+-------------------------------------------------
+
+divide.js:
+
+````javascript
+#!/usr/bin/env node
+var argv = require('optimist')
+    .usage('Usage: $0 -x [num] -y [num]')
+    .demand(['x','y'])
+    .argv;
+
+console.log(argv.x / argv.y);
+````
+
+***
+ 
+    $ ./divide.js -x 55 -y 11
+    5
+    
+    $ node ./divide.js -x 4.91 -z 2.51
+    Usage: node ./divide.js -x [num] -y [num]
+
+    Options:
+      -x  [required]
+      -y  [required]
+
+    Missing required arguments: y
+
+EVEN MORE HOLY COW
+------------------
+
+default_singles.js:
+
+````javascript
+#!/usr/bin/env node
+var argv = require('optimist')
+    .default('x', 10)
+    .default('y', 10)
+    .argv
+;
+console.log(argv.x + argv.y);
+````
+
+***
+
+    $ ./default_singles.js -x 5
+    15
+
+default_hash.js:
+
+````javascript
+#!/usr/bin/env node
+var argv = require('optimist')
+    .default({ x : 10, y : 10 })
+    .argv
+;
+console.log(argv.x + argv.y);
+````
+
+***
+
+    $ ./default_hash.js -y 7
+    17
+
+And if you really want to get all descriptive about it...
+---------------------------------------------------------
+
+boolean_single.js
+
+````javascript
+#!/usr/bin/env node
+var argv = require('optimist')
+    .boolean('v')
+    .argv
+;
+console.dir(argv);
+````
+
+***
+
+    $ ./boolean_single.js -v foo bar baz
+    true
+    [ 'bar', 'baz', 'foo' ]
+
+boolean_double.js
+
+````javascript
+#!/usr/bin/env node
+var argv = require('optimist')
+    .boolean(['x','y','z'])
+    .argv
+;
+console.dir([ argv.x, argv.y, argv.z ]);
+console.dir(argv._);
+````
+
+***
+
+    $ ./boolean_double.js -x -z one two three
+    [ true, false, true ]
+    [ 'one', 'two', 'three' ]
+
+Optimist is here to help...
+---------------------------
+
+You can describe parameters for help messages and set aliases. Optimist figures
+out how to format a handy help string automatically.
+
+line_count.js
+
+````javascript
+#!/usr/bin/env node
+var argv = require('optimist')
+    .usage('Count the lines in a file.\nUsage: $0')
+    .demand('f')
+    .alias('f', 'file')
+    .describe('f', 'Load a file')
+    .argv
+;
+
+var fs = require('fs');
+var s = fs.createReadStream(argv.file);
+
+var lines = 0;
+s.on('data', function (buf) {
+    lines += buf.toString().match(/\n/g).length;
+});
+
+s.on('end', function () {
+    console.log(lines);
+});
+````
+
+***
+
+    $ node line_count.js
+    Count the lines in a file.
+    Usage: node ./line_count.js
+
+    Options:
+      -f, --file  Load a file  [required]
+
+    Missing required arguments: f
+
+    $ node line_count.js --file line_count.js 
+    20
+    
+    $ node line_count.js -f line_count.js 
+    20
+
+methods
+=======
+
+By itself,
+
+````javascript
+require('optimist').argv
+`````
+
+will use `process.argv` array to construct the `argv` object.
+
+You can pass in the `process.argv` yourself:
+
+````javascript
+require('optimist')([ '-x', '1', '-y', '2' ]).argv
+````
+
+or use .parse() to do the same thing:
+
+````javascript
+require('optimist').parse([ '-x', '1', '-y', '2' ])
+````
+
+The rest of these methods below come in just before the terminating `.argv`.
+
+.alias(key, alias)
+------------------
+
+Set key names as equivalent such that updates to a key will propagate to aliases
+and vice-versa.
+
+Optionally `.alias()` can take an object that maps keys to aliases.
+
+.default(key, value)
+--------------------
+
+Set `argv[key]` to `value` if no option was specified on `process.argv`.
+
+Optionally `.default()` can take an object that maps keys to default values.
+
+.demand(key)
+------------
+
+If `key` is a string, show the usage information and exit if `key` wasn't
+specified in `process.argv`.
+
+If `key` is a number, demand at least as many non-option arguments, which show
+up in `argv._`.
+
+If `key` is an Array, demand each element.
+
+.describe(key, desc)
+--------------------
+
+Describe a `key` for the generated usage information.
+
+Optionally `.describe()` can take an object that maps keys to descriptions.
+
+.options(key, opt)
+------------------
+
+Instead of chaining together `.alias().demand().default()`, you can specify
+keys in `opt` for each of the chainable methods.
+
+For example:
+
+````javascript
+var argv = require('optimist')
+    .options('f', {
+        alias : 'file',
+        default : '/etc/passwd',
+    })
+    .argv
+;
+````
+
+is the same as
+
+````javascript
+var argv = require('optimist')
+    .alias('f', 'file')
+    .default('f', '/etc/passwd')
+    .argv
+;
+````
+
+Optionally `.options()` can take an object that maps keys to `opt` parameters.
+
+.usage(message)
+---------------
+
+Set a usage message to show which commands to use. Inside `message`, the string
+`$0` will get interpolated to the current script name or node command for the
+present script similar to how `$0` works in bash or perl.
+
+.check(fn)
+----------
+
+Check that certain conditions are met in the provided arguments.
+
+If `fn` throws or returns `false`, show the thrown error, usage information, and
+exit.
+
+.boolean(key)
+-------------
+
+Interpret `key` as a boolean. If a non-flag option follows `key` in
+`process.argv`, that string won't get set as the value of `key`.
+
+If `key` never shows up as a flag in `process.arguments`, `argv[key]` will be
+`false`.
+
+If `key` is an Array, interpret all the elements as booleans.
+
+.string(key)
+------------
+
+Tell the parser logic not to interpret `key` as a number or boolean.
+This can be useful if you need to preserve leading zeros in an input.
+
+If `key` is an Array, interpret all the elements as strings.
+
+.wrap(columns)
+--------------
+
+Format usage output to wrap at `columns` many columns.
+
+.help()
+-------
+
+Return the generated usage string.
+
+.showHelp(fn=console.error)
+---------------------------
+
+Print the usage data using `fn` for printing.
+
+.parse(args)
+------------
+
+Parse `args` instead of `process.argv`. Returns the `argv` object.
+
+.argv
+-----
+
+Get the arguments as a plain old object.
+
+Arguments without a corresponding flag show up in the `argv._` array.
+
+The script name or node command is available at `argv.$0` similarly to how `$0`
+works in bash or perl.
+
+parsing tricks
+==============
+
+stop parsing
+------------
+
+Use `--` to stop parsing flags and stuff the remainder into `argv._`.
+
+    $ node examples/reflect.js -a 1 -b 2 -- -c 3 -d 4
+    { _: [ '-c', '3', '-d', '4' ],
+      '$0': 'node ./examples/reflect.js',
+      a: 1,
+      b: 2 }
+
+negate fields
+-------------
+
+If you want to explicity set a field to false instead of just leaving it
+undefined or to override a default you can do `--no-key`.
+
+    $ node examples/reflect.js -a --no-b
+    { _: [],
+      '$0': 'node ./examples/reflect.js',
+      a: true,
+      b: false }
+
+numbers
+-------
+
+Every argument that looks like a number (`!isNaN(Number(arg))`) is converted to
+one. This way you can just `net.createConnection(argv.port)` and you can add
+numbers out of `argv` with `+` without having that mean concatenation,
+which is super frustrating.
+
+duplicates
+----------
+
+If you specify a flag multiple times it will get turned into an array containing
+all the values in order.
+
+    $ node examples/reflect.js -x 5 -x 8 -x 0
+    { _: [],
+      '$0': 'node ./examples/reflect.js',
+        x: [ 5, 8, 0 ] }
+
+dot notation
+------------
+
+When you use dots (`.`s) in argument names, an implicit object path is assumed.
+This lets you organize arguments into nested objects.
+
+     $ node examples/reflect.js --foo.bar.baz=33 --foo.quux=5
+     { _: [],
+       '$0': 'node ./examples/reflect.js',
+         foo: { bar: { baz: 33 }, quux: 5 } }
+
+short numbers
+-------------
+
+Short numeric `head -n5` style argument work too:
+
+    $ node reflect.js -n123 -m456
+    { '3': true,
+      '6': true,
+      _: [],
+      '$0': 'node ./reflect.js',
+      n: 123,
+      m: 456 }
+
+installation
+============
+
+With [npm](http://github.com/isaacs/npm), just do:
+    npm install optimist
+ 
+or clone this project on github:
+
+    git clone http://github.com/substack/node-optimist.git
+
+To run the tests with [expresso](http://github.com/visionmedia/expresso),
+just do:
+    
+    expresso
+
+inspired By
+===========
+
+This module is loosely inspired by Perl's
+[Getopt::Casual](http://search.cpan.org/~photo/Getopt-Casual-0.13.1/Casual.pm).
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/test/dash.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/test/dash.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/test/dash.js	(revision 516)
@@ -0,0 +1,31 @@
+var optimist = require('../index');
+var test = require('tap').test;
+
+test('-', function (t) {
+    t.plan(5);
+    t.deepEqual(
+        fix(optimist.parse([ '-n', '-' ])),
+        { n: '-', _: [] }
+    );
+    t.deepEqual(
+        fix(optimist.parse([ '-' ])),
+        { _: [ '-' ] }
+    );
+    t.deepEqual(
+        fix(optimist.parse([ '-f-' ])),
+        { f: '-', _: [] }
+    );
+    t.deepEqual(
+        fix(optimist([ '-b', '-' ]).boolean('b').argv),
+        { b: true, _: [ '-' ] }
+    );
+    t.deepEqual(
+        fix(optimist([ '-s', '-' ]).string('s').argv),
+        { s: '-', _: [] }
+    );
+});
+
+function fix (obj) {
+    delete obj.$0;
+    return obj;
+}
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/test/parse.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/test/parse.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/test/parse.js	(revision 516)
@@ -245,4 +245,17 @@
 });
 
+test('newlines in params' , function (t) {
+    var args = optimist.parse([ '-s', "X\nX" ])
+    t.same(args, { _ : [], s : "X\nX", $0 : $0 });
+
+    // reproduce in bash:
+    // VALUE="new
+    // line"
+    // node program.js --s="$VALUE"
+    args = optimist.parse([ "--s=X\nX" ])
+    t.same(args, { _ : [], s : "X\nX", $0 : $0 });
+    t.end();
+});
+
 test('strings' , function (t) {
     var s = optimist([ '-s', '0001234' ]).string('s').argv.s;
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/test/parse_modified.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/test/parse_modified.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/test/parse_modified.js	(revision 516)
@@ -0,0 +1,14 @@
+var optimist = require('../');
+var test = require('tap').test;
+
+test('parse with modifier functions' , function (t) {
+    t.plan(1);
+    
+    var argv = optimist().boolean('b').parse([ '-b', '123' ]);
+    t.deepEqual(fix(argv), { b: true, _: ['123'] });
+});
+
+function fix (obj) {
+    delete obj.$0;
+    return obj;
+}
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/test/short.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/test/short.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/test/short.js	(revision 516)
@@ -0,0 +1,16 @@
+var optimist = require('../index');
+var test = require('tap').test;
+
+test('-n123', function (t) {
+    t.plan(1);
+    var parse = optimist.parse([ '-n123' ]);
+    t.equal(parse.n, 123);
+});
+
+test('-123', function (t) {
+    t.plan(3);
+    var parse = optimist.parse([ '-123', '456' ]);
+    t.equal(parse['1'], true);
+    t.equal(parse['2'], true);
+    t.equal(parse['3'], 456);
+});
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/test/whitespace.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/test/whitespace.js	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/test/whitespace.js	(revision 516)
@@ -0,0 +1,8 @@
+var optimist = require('../');
+var test = require('tap').test;
+
+test('whitespace should be whitespace' , function (t) {
+    t.plan(1);
+    var x = optimist.parse([ '-x', '\t' ]).x;
+    t.equal(x, '\t');
+});
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/x.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/node_modules/optimist/x.js	(revision 484)
+++ 	(revision )
@@ -1,1 +1,0 @@
-console.dir(require('./').argv);
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/npm-shrinkwrap.json
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/npm-shrinkwrap.json	(revision 484)
+++ 	(revision )
@@ -1,50 +1,0 @@
-{
-  "name": "coffeelint",
-  "version": "0.5.7",
-  "dependencies": {
-    "optimist": {
-      "version": "0.3.5",
-      "dependencies": {
-        "wordwrap": {
-          "version": "0.0.2"
-        }
-      }
-    },
-    "coffee-script": {
-      "version": "1.6.2"
-    },
-    "glob": {
-      "version": "3.1.14",
-      "dependencies": {
-        "minimatch": {
-          "version": "0.2.9",
-          "dependencies": {
-            "lru-cache": {
-              "version": "2.0.4"
-            },
-            "sigmund": {
-              "version": "1.0.0"
-            }
-          }
-        },
-        "graceful-fs": {
-          "version": "1.1.14"
-        },
-        "inherits": {
-          "version": "1.0.0"
-        }
-      }
-    },
-    "vows": {
-      "version": "0.7.0",
-      "dependencies": {
-        "eyes": {
-          "version": "0.1.8"
-        },
-        "diff": {
-          "version": "1.0.4"
-        }
-      }
-    }
-  }
-}
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/package.json
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/package.json	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/package.json	(revision 516)
@@ -2,5 +2,5 @@
   "name": "coffeelint",
   "description": "Lint your CoffeeScript",
-  "version": "0.5.7",
+  "version": "1.0.8",
   "homepage": "http://www.coffeelint.org",
   "keywords": [
@@ -14,4 +14,7 @@
   },
   "main": "./lib/coffeelint.js",
+  "engines": {
+    "node": ">=0.8.0"
+  },
   "repository": {
     "type": "git",
@@ -23,5 +26,5 @@
   "dependencies": {
     "optimist": ">=0.2.8",
-    "coffee-script": ">=1.6.0",
+    "coffee-script": "1.6.x",
     "glob": ">=3.1.9"
   },
@@ -37,13 +40,13 @@
   ],
   "scripts": {
-    "pretest": "npm run compile",
+    "pretest": "cake compile",
     "test": "vows --spec test/*.coffee test/*.litcoffee",
     "posttest": "npm run lint",
-    "prepublish": "npm run compile",
-    "install": "[ -e lib/commandline.js ] || npm run compile",
-    "lint": "npm run compile && ./bin/coffeelint -f test/fixtures/coffeelint.json src/*.coffee test/*.coffee test/*.litcoffee",
-    "lint-csv": "npm run compile && ./bin/coffeelint --csv -f test/fixtures/coffeelint.json src/*.coffee test/*.coffee",
-    "lint-jslint": "npm run compile && ./bin/coffeelint --jslint -f test/fixtures/coffeelint.json src/*.coffee test/*.coffee",
-    "compile": "coffee -c -o lib src"
+    "prepublish": "cake prepublish",
+    "publish": "cake publish",
+    "lint": "cake compile && ./bin/coffeelint -f coffeelint.json src/*.coffee test/*.coffee test/*.litcoffee",
+    "lint-csv": "cake compile && ./bin/coffeelint --csv -f coffeelint.json src/*.coffee test/*.coffee",
+    "lint-jslint": "cake compile && ./bin/coffeelint --jslint -f coffeelint.json src/*.coffee test/*.coffee",
+    "compile": "cake compile"
   },
   "readme": "CoffeeLint\n==========\n\nCoffeeLint is a style checker that helps keep CoffeeScript code\nclean and consistent.\n\nFor guides on installing, using and configuring CoffeeLint, head over\n[here](http://www.coffeelint.org).\n\nTo suggest a feature, report a bug, or general discussion, head over\n[here](http://github.com/clutchski/coffeelint/issues/).\n\n[![Build Status](https://secure.travis-ci.org/clutchski/coffeelint.png)](http://travis-ci.org/clutchski/coffeelint)\n",
@@ -52,9 +55,9 @@
     "url": "https://github.com/clutchski/coffeelint/issues"
   },
-  "_id": "coffeelint@0.5.7",
+  "_id": "coffeelint@1.0.8",
   "dist": {
-    "shasum": "4464b58e383f9fd3cd1da521b404301bdbc39e05"
+    "shasum": "24f415956f9b6dc01d1ee428f2bbe2d200eee9a7"
   },
-  "_from": "coffeelint@~0.5",
-  "_resolved": "https://registry.npmjs.org/coffeelint/-/coffeelint-0.5.7.tgz"
+  "_from": "coffeelint@~1.0",
+  "_resolved": "https://registry.npmjs.org/coffeelint/-/coffeelint-1.0.8.tgz"
 }
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/ast_linter.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/ast_linter.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/ast_linter.coffee	(revision 516)
@@ -0,0 +1,62 @@
+BaseLinter = require './base_linter.coffee'
+
+class ASTApi
+    constructor: (@config) ->
+
+# A class that performs static analysis of the abstract
+# syntax tree.
+module.exports = class ASTLinter extends BaseLinter
+
+    constructor : (source, config, rules, @CoffeeScript) ->
+        super source, config, rules
+        @astApi = new ASTApi @config
+
+    # This uses lintAST instead of lintNode because I think it makes it a bit
+    # more clear that the rule needs to walk the AST on its own.
+    acceptRule: (rule) ->
+        return typeof rule.lintAST is 'function'
+
+    lint : () ->
+        errors = []
+        try
+            @node = @CoffeeScript.nodes(@source)
+        catch coffeeError
+            # If for some reason you shut off the 'coffeescript_error' rule err
+            # will be null and should NOT be added to errors
+            err = @_parseCoffeeScriptError(coffeeError)
+            errors.push err if err?
+            return errors
+
+        for rule in @rules
+            @astApi.createError = (attrs = {}) =>
+                @createError rule.rule.name, attrs
+
+            # HACK: Push the local errors object into the plugin. This is a
+            # temporary solution until I have a way for it to really return
+            # multiple errors.
+            rule.errors = errors
+            v = @normalizeResult rule, rule.lintAST(@node, @astApi)
+
+            return v if v?
+        errors
+
+    _parseCoffeeScriptError : (coffeeError) ->
+        rule = @config['coffeescript_error']
+
+        message = coffeeError.toString()
+
+        # Parse the line number
+        lineNumber = -1
+        if coffeeError.location?
+            lineNumber = coffeeError.location.first_line + 1
+        else
+            match = /line (\d+)/.exec message
+            lineNumber = parseInt match[1], 10 if match?.length > 1
+        attrs = {
+            message: message
+            level: rule.level
+            lineNumber: lineNumber
+        }
+        return  @createError 'coffeescript_error', attrs
+
+
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/base_linter.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/base_linter.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/base_linter.coffee	(revision 516)
@@ -0,0 +1,55 @@
+# Patch the source properties onto the destination.
+extend = (destination, sources...) ->
+    for source in sources
+        (destination[k] = v for k, v of source)
+    return destination
+
+# Patch any missing attributes from defaults to source.
+defaults = (source, defaults) ->
+    extend({}, defaults, source)
+
+module.exports = class BaseLinter
+
+    constructor: (@source, @config, rules) ->
+        @setupRules rules
+
+    isObject: (obj) ->
+        obj is Object(obj)
+
+    # Create an error object for the given rule with the given
+    # attributes.
+    createError: (ruleName, attrs = {}) ->
+
+        # Level should default to what's in the config, but can be overridden.
+        attrs.level ?= @config[ruleName].level
+
+        level = attrs.level
+        if level not in ['ignore', 'warn', 'error']
+            throw new Error("unknown level #{level}")
+
+        if level in ['error', 'warn']
+            attrs.rule = ruleName
+            return defaults(attrs, @config[ruleName])
+        else
+            null
+
+    acceptRule: (rule) ->
+        throw new Error "acceptRule needs to be overridden in the subclass"
+
+    # Only rules that have a level of error or warn will even get constructed.
+    setupRules: (rules) ->
+        @rules = []
+        for name, RuleConstructor of rules
+            level = @config[name].level
+            if level in ['error', 'warn']
+                rule = new RuleConstructor this, @config
+                if @acceptRule(rule)
+                    @rules.push rule
+            else if level isnt 'ignore'
+                throw new Error("unknown level #{level}")
+
+    normalizeResult: (p, result) ->
+        if result is true
+            return @createError p.rule.name
+        if @isObject result
+            return @createError p.rule.name, result
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/coffeelint.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/coffeelint.coffee	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/coffeelint.coffee	(revision 516)
@@ -8,21 +8,25 @@
 
 # Coffeelint's namespace.
-coffeelint = {}
-
-if exports?
-    # If we're running in node, export our module and
-    # load dependencies.
-    coffeelint = exports
-    CoffeeScript = require 'coffee-script'
+# Browserify wrapps this file in a UMD that will set window.coffeelint to
+# exports
+coffeelint = exports
+
+if window?
+    # If we're in the browser assume CoffeeScript is already loaded.
+    CoffeeScript = window.CoffeeScript
 else
-    # If we're in the browser, export out module to
-    # global scope. Assume CoffeeScript is already
-    # loaded.
-    this.coffeelint = coffeelint
-    CoffeeScript = this.CoffeeScript
-
+    # By storing this in a variable it prevents browserify from finding this
+    # dependency. If it isn't hidden there is an error attempting to inline
+    # CoffeeScript.  if browserify uses `-i` to ignore the dependency it
+    # creates an empty shim which breaks NodeJS
+    # https://github.com/substack/node-browserify/issues/471
+    cs = 'coffee-script'
+    CoffeeScript = require cs
+
+# Browserify will inline the file at compile time.
+packageJSON = require('./../package.json')
 
 # The current version of Coffeelint.
-coffeelint.VERSION = "0.5.7"
+coffeelint.VERSION = packageJSON.version
 
 
@@ -32,284 +36,5 @@
 IGNORE  = 'ignore'
 
-
-# CoffeeLint's default rule configuration.
-coffeelint.RULES = RULES =
-
-    no_tabs :
-        level : ERROR
-        message : 'Line contains tab indentation'
-        description: """
-            This rule forbids tabs in indentation. Enough said. It is enabled by
-            default.
-            """
-
-    no_trailing_whitespace :
-        level : ERROR
-        message : 'Line ends with trailing whitespace'
-        allowed_in_comments : false
-        description: """
-            This rule forbids trailing whitespace in your code, since it is
-            needless cruft. It is enabled by default.
-            """
-
-    max_line_length :
-        value: 80
-        level : ERROR
-        message : 'Line exceeds maximum allowed length'
-        description: """
-            This rule imposes a maximum line length on your code. <a
-            href="http://www.python.org/dev/peps/pep-0008/">Python's style
-            guide</a> does a good job explaining why you might want to limit the
-            length of your lines, though this is a matter of taste.
-
-            Lines can be no longer than eighty characters by default.
-            """
-
-    camel_case_classes :
-        level : ERROR
-        message : 'Class names should be camel cased'
-        description: """
-            This rule mandates that all class names are camel cased. Camel
-            casing class names is a generally accepted way of distinguishing
-            constructor functions - which require the 'new' prefix to behave
-            properly - from plain old functions.
-            <pre>
-            <code># Good!
-            class BoaConstrictor
-
-            # Bad!
-            class boaConstrictor
-            </code>
-            </pre>
-            This rule is enabled by default.
-            """
-    indentation :
-        value : 2
-        level : ERROR
-        message : 'Line contains inconsistent indentation'
-        description: """
-            This rule imposes a standard number of spaces to be used for
-            indentation. Since whitespace is significant in CoffeeScript, it's
-            critical that a project chooses a standard indentation format and
-            stays consistent. Other roads lead to darkness. <pre> <code>#
-            Enabling this option will prevent this ugly
-            # but otherwise valid CoffeeScript.
-            twoSpaces = () ->
-              fourSpaces = () ->
-                  eightSpaces = () ->
-                        'this is valid CoffeeScript'
-
-            </code>
-            </pre>
-            Two space indentation is enabled by default.
-            """
-
-    no_implicit_braces :
-        level : IGNORE
-        message : 'Implicit braces are forbidden'
-        description: """
-            This rule prohibits implicit braces when declaring object literals.
-            Implicit braces can make code more difficult to understand,
-            especially when used in combination with optional parenthesis.
-            <pre>
-            <code># Do you find this code ambiguous? Is it a
-            # function call with three arguments or four?
-            myFunction a, b, 1:2, 3:4
-
-            # While the same code written in a more
-            # explicit manner has no ambiguity.
-            myFunction(a, b, {1:2, 3:4})
-            </code>
-            </pre>
-            Implicit braces are permitted by default, since their use is
-            idiomatic CoffeeScript.
-            """
-
-    no_trailing_semicolons:
-        level : ERROR
-        message : 'Line contains a trailing semicolon'
-        description: """
-            This rule prohibits trailing semicolons, since they are needless
-            cruft in CoffeeScript.
-            <pre>
-            <code># This semicolon is meaningful.
-            x = '1234'; console.log(x)
-
-            # This semicolon is redundant.
-            alert('end of line');
-            </code>
-            </pre>
-            Trailing semicolons are forbidden by default.
-            """
-
-    no_plusplus:
-        level : IGNORE
-        message : 'The increment and decrement operators are forbidden'
-        description: """
-            This rule forbids the increment and decrement arithmetic operators.
-            Some people believe the <tt>++</tt> and <tt>--</tt> to be cryptic
-            and the cause of bugs due to misunderstandings of their precedence
-            rules.
-            This rule is disabled by default.
-            """
-
-    no_throwing_strings:
-        level : ERROR
-        message : 'Throwing strings is forbidden'
-        description: """
-            This rule forbids throwing string literals or interpolations. While
-            JavaScript (and CoffeeScript by extension) allow any expression to
-            be thrown, it is best to only throw <a
-            href="https://developer.mozilla.org
-            /en/JavaScript/Reference/Global_Objects/Error"> Error</a> objects,
-            because they contain valuable debugging information like the stack
-            trace. Because of JavaScript's dynamic nature, CoffeeLint cannot
-            ensure you are always throwing instances of <tt>Error</tt>. It will
-            only catch the simple but real case of throwing literal strings.
-            <pre>
-            <code># CoffeeLint will catch this:
-            throw "i made a boo boo"
-
-            # ... but not this:
-            throw getSomeString()
-            </code>
-            </pre>
-            This rule is enabled by default.
-            """
-
-    cyclomatic_complexity:
-        value : 10
-        level : IGNORE
-        message : 'The cyclomatic complexity is too damn high'
-
-    no_backticks:
-        level : ERROR
-        message : 'Backticks are forbidden'
-        description: """
-            Backticks allow snippets of JavaScript to be embedded in
-            CoffeeScript. While some folks consider backticks useful in a few
-            niche circumstances, they should be avoided because so none of
-            JavaScript's "bad parts", like <tt>with</tt> and <tt>eval</tt>,
-            sneak into CoffeeScript.
-            This rule is enabled by default.
-            """
-
-    line_endings:
-        level : IGNORE
-        value : 'unix' # or 'windows'
-        message : 'Line contains incorrect line endings'
-        description: """
-            This rule ensures your project uses only <tt>windows</tt> or
-            <tt>unix</tt> line endings. This rule is disabled by default.
-            """
-    no_implicit_parens :
-        level : IGNORE
-        message : 'Implicit parens are forbidden'
-        description: """
-            This rule prohibits implicit parens on function calls.
-            <pre>
-            <code># Some folks don't like this style of coding.
-            myFunction a, b, c
-
-            # And would rather it always be written like this:
-            myFunction(a, b, c)
-            </code>
-            </pre>
-            Implicit parens are permitted by default, since their use is
-            idiomatic CoffeeScript.
-            """
-
-    empty_constructor_needs_parens :
-        level : IGNORE
-        message : 'Invoking a constructor without parens and without arguments'
-
-    non_empty_constructor_needs_parens :
-        level : IGNORE
-        message : 'Invoking a constructor without parens and with arguments'
-
-    no_empty_param_list :
-        level : IGNORE
-        message : 'Empty parameter list is forbidden'
-        description: """
-            This rule prohibits empty parameter lists in function definitions.
-            <pre>
-            <code># The empty parameter list in here is unnecessary:
-            myFunction = () -&gt;
-
-            # We might favor this instead:
-            myFunction = -&gt;
-            </code>
-            </pre>
-            Empty parameter lists are permitted by default.
-            """
-
-
-    space_operators :
-        level : IGNORE
-        message : 'Operators must be spaced properly'
-
-    # I don't know of any legitimate reason to define duplicate keys in an
-    # object. It seems to always be a mistake, it's also a syntax error in
-    # strict mode.
-    # See http://jslinterrors.com/duplicate-key-a/
-    duplicate_key :
-        level : ERROR
-        message : 'Duplicate key defined in object or class'
-
-    newlines_after_classes :
-        value : 3
-        level : IGNORE
-        message : 'Wrong count of newlines between a class and other code'
-
-    no_stand_alone_at :
-        level : IGNORE
-        message : '@ must not be used stand alone'
-        description: """
-            This rule checks that no stand alone @ are in use, they are
-            discouraged. Further information in CoffeScript issue <a
-            href="https://github.com/jashkenas/coffee-script/issues/1601">
-            #1601</a>
-            """
-
-    arrow_spacing :
-        level : IGNORE
-        message : 'Function arrow (->) must be spaced properly'
-        description: """
-            <p>This rule checks to see that there is spacing before and after
-            the arrow operator that declares a function. This rule is disabled
-            by default.</p> <p>Note that if arrow_spacing is enabled, and you
-            pass an empty function as a parameter, arrow_spacing will accept
-            either a space or no space in-between the arrow operator and the
-            parenthesis</p>
-            <pre><code># Both of this will not trigger an error,
-            # even with arrow_spacing enabled.
-            x(-> 3)
-            x( -> 3)
-
-            # However, this will trigger an error
-            x((a,b)-> 3)
-            </code>
-            </pre>
-             """
-
-    coffeescript_error :
-        level : ERROR
-        message : '' # The default coffeescript error is fine.
-
-
-# Some repeatedly used regular expressions.
-regexes =
-    trailingWhitespace : /[^\s]+[\t ]+\r?$/
-    lineHasComment : /^\s*[^\#]*\#/
-    indentation: /\S/
-    longUrlComment: ///
-      ^\s*\# # indentation, up to comment
-      \s*
-      http[^\s]+$ # Link that takes up the rest of the line without spaces.
-    ///
-    camelCase: /^[A-Z][a-zA-Z\d]*$/
-    trailingSemicolon: /;\r?$/
-    configStatement: /coffeelint:\s*(disable|enable)(?:=([\w\s,]*))?/
-
+coffeelint.RULES = RULES = require './rules.coffee'
 
 # Patch the source properties onto the destination.
@@ -323,706 +48,16 @@
     extend({}, defaults, source)
 
-
-# Create an error object for the given rule with the given
-# attributes.
-createError = (rule, attrs = {}) ->
-    level = attrs.level
-    if level not in [IGNORE, WARN, ERROR]
-        throw new Error("unknown level #{level}")
-
-    if level in [ERROR, WARN]
-        attrs.rule = rule
-        return defaults(attrs, RULES[rule])
-    else
-        null
-
-# Store suppressions in the form of { line #: type }
-block_config =
-    enable: {}
-    disable: {}
-
-#
-# A class that performs regex checks on each line of the source.
-#
-class LineLinter
-
-    constructor : (source, config, tokensByLine) ->
-        @source = source
-        @config = config
-        @line = null
-        @lineNumber = 0
-        @tokensByLine = tokensByLine
-        @lines = @source.split('\n')
-        @lineCount = @lines.length
-
-        # maintains some contextual information
-        #   inClass: bool; in class or not
-        #   lastUnemptyLineInClass: null or lineNumber, if the last not-empty
-        #                     line was in a class it holds its number
-        #   classIndents: the number of indents within a class
-        @context = {
-            class: {
-                inClass: false
-                lastUnemptyLineInClass: null
-                classIndents: null
-            }
-        }
-
-    lint : () ->
-        errors = []
-        for line, lineNumber in @lines
-            @lineNumber = lineNumber
-            @line = line
-            @maintainClassContext()
-            error = @lintLine()
-            errors.push(error) if error
-        errors
-
-    # Return an error if the line contained failed a rule, null otherwise.
-    lintLine : () ->
-        return @checkTabs() or
-               @checkTrailingWhitespace() or
-               @checkLineLength() or
-               @checkTrailingSemicolon() or
-               @checkLineEndings() or
-               @checkComments() or
-               @checkNewlinesAfterClasses()
-
-    checkTabs : () ->
-        # Only check lines that have compiled tokens. This helps
-        # us ignore tabs in the middle of multi line strings, heredocs, etc.
-        # since they are all reduced to a single token whose line number
-        # is the start of the expression.
-        indentation = @line.split(regexes.indentation)[0]
-        if @lineHasToken() and '\t' in indentation
-            @createLineError('no_tabs')
+# Helper to remove rules from disabled list
+difference = (a, b) ->
+    j = 0
+    while j < a.length
+        if a[j] in b
+            a.splice(j, 1)
         else
-            null
-
-    checkTrailingWhitespace : () ->
-        if regexes.trailingWhitespace.test(@line)
-            # By default only the regex above is needed.
-            if !@config['no_trailing_whitespace']?.allowed_in_comments
-                return @createLineError('no_trailing_whitespace')
-
-            line = @line
-            tokens = @tokensByLine[@lineNumber]
-
-            # If we're in a block comment there won't be any tokens on this
-            # line. Some previous line holds the token spanning multiple lines.
-            if !tokens
-                return null
-
-            # To avoid confusion when a string might contain a "#", every string
-            # on this line will be removed. before checking for a comment
-            for str in (token[1] for token in tokens when token[0] == 'STRING')
-                line = line.replace(str, 'STRING')
-
-            if !regexes.lineHasComment.test(line)
-                return @createLineError('no_trailing_whitespace')
-            else
-                return null
-        else
-            return null
-
-    checkLineLength : () ->
-        rule = 'max_line_length'
-        max = @config[rule]?.value
-        if max and max < @line.length and not regexes.longUrlComment.test(@line)
-            attrs =
-                context: "Length is #{@line.length}, max is #{max}"
-            @createLineError(rule, attrs)
-        else
-            null
-
-    checkTrailingSemicolon : () ->
-        hasSemicolon = regexes.trailingSemicolon.test(@line)
-        [first..., last] = @getLineTokens()
-        hasNewLine = last and last.newLine?
-        # Don't throw errors when the contents of  multiline strings,
-        # regexes and the like end in ";"
-        if hasSemicolon and not hasNewLine and @lineHasToken()
-            @createLineError('no_trailing_semicolons')
-        else
-            return null
-
-    checkLineEndings : () ->
-        rule = 'line_endings'
-        ending = @config[rule]?.value
-
-        return null if not ending or @isLastLine() or not @line
-
-        lastChar = @line[@line.length - 1]
-        valid = if ending == 'windows'
-            lastChar == '\r'
-        else if ending == 'unix'
-            lastChar != '\r'
-        else
-            throw new Error("unknown line ending type: #{ending}")
-        if not valid
-            return @createLineError(rule, {context:"Expected #{ending}"})
-        else
-            return null
-
-    checkComments : () ->
-        # Check for block config statements enable and disable
-        result = regexes.configStatement.exec(@line)
-        if result?
-            cmd = result[1]
-            rules = []
-            if result[2]?
-                for r in result[2].split(',')
-                    rules.push r.replace(/^\s+|\s+$/g, "")
-            block_config[cmd][@lineNumber] = rules
-        return null
-
-    checkNewlinesAfterClasses : () ->
-        rule = 'newlines_after_classes'
-        ending = @config[rule].value
-
-        return null if not ending or @isLastLine()
-
-        if not @context.class.inClass and
-                @context.class.lastUnemptyLineInClass? and
-                ((@lineNumber - 1) - @context.class.lastUnemptyLineInClass) isnt
-                ending
-            got = (@lineNumber - 1) - @context.class.lastUnemptyLineInClass
-            return @createLineError( rule, {
-                context: "Expected #{ending} got #{got}"
-            } )
-
-        null
-
-    createLineError : (rule, attrs = {}) ->
-        attrs.lineNumber = @lineNumber + 1 # Lines are indexed by zero.
-        attrs.level = @config[rule]?.level
-        createError(rule, attrs)
-
-    isLastLine : () ->
-        return @lineNumber == @lineCount - 1
-
-    # Return true if the given line actually has tokens.
-    # Optional parameter to check for a specific token type and line number.
-    lineHasToken : (tokenType = null, lineNumber = null) ->
-        lineNumber = lineNumber ? @lineNumber
-        unless tokenType?
-            return @tokensByLine[lineNumber]?
-        else
-            tokens = @tokensByLine[lineNumber]
-            return null unless tokens?
-            for token in tokens
-                return true if token[0] == tokenType
-            return false
-
-    # Return tokens for the given line number.
-    getLineTokens : () ->
-        @tokensByLine[@lineNumber] || []
-
-    # maintain the contextual information for class-related stuff
-    maintainClassContext: () ->
-        if @context.class.inClass
-            if @lineHasToken 'INDENT'
-                @context.class.classIndents++
-            else if @lineHasToken 'OUTDENT'
-                @context.class.classIndents--
-                if @context.class.classIndents is 0
-                    @context.class.inClass = false
-                    @context.class.classIndents = null
-
-            if @context.class.inClass and not @line.match( /^\s*$/ )
-                @context.class.lastUnemptyLineInClass = @lineNumber
-        else
-            unless @line.match(/\\s*/)
-                @context.class.lastUnemptyLineInClass = null
-
-            if @lineHasToken 'CLASS'
-                @context.class.inClass = true
-                @context.class.lastUnemptyLineInClass = @lineNumber
-                @context.class.classIndents = 0
-
-        null
-
-#
-# A class that performs checks on the output of CoffeeScript's lexer.
-#
-class LexicalLinter
-
-    constructor : (source, config) ->
-        @source = source
-        @tokens = CoffeeScript.tokens(source)
-        @config = config
-        @i = 0              # The index of the current token we're linting.
-        @tokensByLine = {}  # A map of tokens by line.
-        @arrayTokens = []   # A stack tracking the array token pairs.
-        @parenTokens = []   # A stack tracking the parens token pairs.
-        @callTokens = []    # A stack tracking the call token pairs.
-        @lines = source.split('\n')
-        @braceScopes = []   # A stack tracking keys defined in nexted scopes.
-
-    # Return a list of errors encountered in the given source.
-    lint : () ->
-        errors = []
-
-        for token, i in @tokens
-            @i = i
-            error = @lintToken(token)
-            errors.push(error) if error
-        errors
-
-    # Return an error if the given token fails a lint check, false otherwise.
-    lintToken : (token) ->
-        [type, value, lineNumber] = token
-
-        if typeof lineNumber == "object"
-            if type == 'OUTDENT' or type == 'INDENT'
-                lineNumber = lineNumber.last_line
-            else
-                lineNumber = lineNumber.first_line
-        @tokensByLine[lineNumber] ?= []
-        @tokensByLine[lineNumber].push(token)
-        # CoffeeScript loses line numbers of interpolations and multi-line
-        # regexes, so fake it by using the last line number we know.
-        @lineNumber = lineNumber or @lineNumber or 0
-        # Now lint it.
-        switch type
-            when "->"                     then @lintArrowSpacing(token)
-            when "INDENT"                 then @lintIndentation(token)
-            when "CLASS"                  then @lintClass(token)
-            when "UNARY"                  then @lintUnary(token)
-            when "{","}"                  then @lintBrace(token)
-            when "IDENTIFIER"             then @lintIdentifier(token)
-            when "++", "--"               then @lintIncrement(token)
-            when "THROW"                  then @lintThrow(token)
-            when "[", "]"                 then @lintArray(token)
-            when "(", ")"                 then @lintParens(token)
-            when "JS"                     then @lintJavascript(token)
-            when "CALL_START", "CALL_END" then @lintCall(token)
-            when "PARAM_START"            then @lintParam(token)
-            when "@"                      then @lintStandaloneAt(token)
-            when "+", "-"                 then @lintPlus(token)
-            when "=", "MATH", "COMPARE", "LOGIC", "COMPOUND_ASSIGN"
-                @lintMath(token)
-            else null
-
-    lintUnary: (token) ->
-        if token[1] is 'new'
-            # Find the last chained identifier, e.g. Bar in new foo.bar.Bar().
-            identifierIndex = 1
-            loop
-                expectedIdentifier = @peek(identifierIndex)
-                expectedCallStart  = @peek(identifierIndex + 1)
-                if expectedIdentifier?[0] is 'IDENTIFIER'
-                    if expectedCallStart?[0] is '.'
-                        identifierIndex += 2
-                        continue
-                break
-
-            # The callStart is generated if your parameters are all on the same
-            # line with implicit parens, and if your parameters start on the
-            # next line, but is missing if there are no params and no parens.
-            if expectedIdentifier?[0] is 'IDENTIFIER' and expectedCallStart?
-                if expectedCallStart[0] is 'CALL_START'
-                    if expectedCallStart.generated
-                        @createLexError('non_empty_constructor_needs_parens')
-                else
-                    @createLexError('empty_constructor_needs_parens')
-
-    # Lint the given array token.
-    lintArray : (token) ->
-        # Track the array token pairs
-        if token[0] == '['
-            @arrayTokens.push(token)
-        else if token[0] == ']'
-            @arrayTokens.pop()
-        # Return null, since we're not really linting
-        # anything here.
-        null
-
-    lintParens : (token) ->
-        if token[0] == '('
-            p1 = @peek(-1)
-            n1 = @peek(1)
-            n2 = @peek(2)
-            # String interpolations start with '' + so start the type co-ercion,
-            # so track if we're inside of one. This is most definitely not
-            # 100% true but what else can we do?
-            i = n1 and n2 and n1[0] == 'STRING' and n2[0] == '+'
-            token.isInterpolation = i
-            @parenTokens.push(token)
-        else
-            @parenTokens.pop()
-        # We're not linting, just tracking interpolations.
-        null
-
-    isInInterpolation : () ->
-        for t in @parenTokens
-            return true if t.isInterpolation
-        return false
-
-    isInExtendedRegex : () ->
-        for t in @callTokens
-            return true if t.isRegex
-        return false
-
-    lintPlus : (token) ->
-        # We can't check this inside of interpolations right now, because the
-        # plusses used for the string type co-ercion are marked not spaced.
-        return null if @isInInterpolation() or @isInExtendedRegex()
-
-        p = @peek(-1)
-        unaries = ['TERMINATOR', '(', '=', '-', '+', ',', 'CALL_START',
-                    'INDEX_START', '..', '...', 'COMPARE', 'IF',
-                    'THROW', 'LOGIC', 'POST_IF', ':', '[', 'INDENT',
-                    'COMPOUND_ASSIGN', 'RETURN', 'MATH']
-        isUnary = if not p then false else p[0] in unaries
-        if (isUnary and token.spaced) or
-                    (not isUnary and not token.spaced and not token.newLine)
-            @createLexError('space_operators', {context: token[1]})
-        else
-            null
-
-    lintMath: (token) ->
-        if not token.spaced and not token.newLine
-            @createLexError('space_operators', {context: token[1]})
-        else
-            null
-
-    lintCall : (token) ->
-        if token[0] == 'CALL_START'
-            p = @peek(-1)
-            # Track regex calls, to know (approximately) if we're in an
-            # extended regex.
-            token.isRegex = p and p[0] == 'IDENTIFIER' and p[1] == 'RegExp'
-            @callTokens.push(token)
-            if token.generated
-                return @createLexError('no_implicit_parens')
-            else
-                return null
-        else
-            @callTokens.pop()
-            return null
-
-    lintParam : (token) ->
-        nextType = @peek()[0]
-        if nextType == 'PARAM_END'
-            @createLexError('no_empty_param_list')
-        else
-            null
-
-    lintIdentifier: (token) ->
-        key = token[1]
-
-        # Class names might not be in a scope
-        return null if not @currentScope?
-        nextToken = @peek(1)
-
-        # Exit if this identifier isn't being assigned. A and B
-        # are identifiers, but only A should be examined:
-        # A = B
-        return null if nextToken[1] isnt ':'
-        previousToken = @peek(-1)
-
-        # Assigning "@something" and "something" are not the same thing
-        key = "@#{key}" if previousToken[0] == '@'
-
-        # Added a prefix to not interfere with things like "constructor".
-        key = "identifier-#{key}"
-        if @currentScope[key]
-            @createLexError('duplicate_key')
-        else
-            @currentScope[key] = token
-            null
-
-    lintBrace : (token) ->
-        if token[0] == '{'
-            @braceScopes.push @currentScope if @currentScope?
-            @currentScope = {}
-        else
-            @currentScope = @braceScopes.pop()
-
-        if token.generated and token[0] == '{'
-            # Peek back to the last line break. If there is a class
-            # definition, ignore the generated brace.
-            i = -1
-            loop
-                t = @peek(i)
-                if not t? or t[0] == 'TERMINATOR'
-                    return @createLexError('no_implicit_braces')
-                if t[0] == 'CLASS'
-                    return null
-                i -= 1
-        else
-            return null
-
-    lintJavascript :(token) ->
-        @createLexError('no_backticks')
-
-    lintThrow : (token) ->
-        [n1, n2] = [@peek(), @peek(2)]
-        # Catch literals and string interpolations, which are wrapped in
-        # parens.
-        nextIsString = n1[0] == 'STRING' or (n1[0] == '(' and n2[0] == 'STRING')
-        @createLexError('no_throwing_strings') if nextIsString
-
-    lintIncrement : (token) ->
-        attrs = {context : "found '#{token[0]}'"}
-        @createLexError('no_plusplus', attrs)
-
-    lintStandaloneAt: (token) ->
-        nextToken = @peek()
-        spaced = token.spaced
-        isIdentifier = nextToken[0] == 'IDENTIFIER'
-        isIndexStart = nextToken[0] == 'INDEX_START'
-        isDot = nextToken[0] == '.'
-
-        # https://github.com/jashkenas/coffee-script/issues/1601
-        # @::foo is valid, but @:: behaves inconsistently and is planned for
-        # removal. Technically @:: is a stand alone ::, but I think it makes
-        # sense to group it into no_stand_alone_at
-        if nextToken[0] == '::'
-            protoProperty = @peek(2)
-            isValidProtoProperty = protoProperty[0] == 'IDENTIFIER'
-
-        if spaced or (not isIdentifier and not isIndexStart and
-        not isDot and not isValidProtoProperty)
-            @createLexError('no_stand_alone_at')
-
-
-    # Return an error if the given indentation token is not correct.
-    lintIndentation : (token) ->
-        [type, numIndents, lineNumber] = token
-
-        return null if token.generated?
-
-        # HACK: CoffeeScript's lexer insert indentation in string
-        # interpolations that start with spaces e.g. "#{ 123 }"
-        # so ignore such cases. Are there other times an indentation
-        # could possibly follow a '+'?
-        previous = @peek(-2)
-        isInterpIndent = previous and previous[0] == '+'
-
-        # Ignore the indentation inside of an array, so that
-        # we can allow things like:
-        #   x = ["foo",
-        #             "bar"]
-        previous = @peek(-1)
-        isArrayIndent = @inArray() and previous?.newLine
-
-        # Ignore indents used to for formatting on multi-line expressions, so
-        # we can allow things like:
-        #   a = b =
-        #     c = d
-        previousSymbol = @peek(-1)?[0]
-        isMultiline = previousSymbol in ['=', ',']
-
-        # Summarize the indentation conditions we'd like to ignore
-        ignoreIndent = isInterpIndent or isArrayIndent or isMultiline
-
-        # Compensate for indentation in function invocations that span multiple
-        # lines, which can be ignored.
-        if @isChainedCall()
-            currentLine = @lines[@lineNumber]
-            prevNum = 1
-
-            # keep going back until we are not at a comment or a blank line
-            prevNum += 1 while (/^\s*(#|$)/.test(@lines[@lineNumber - prevNum]))
-            previousLine = @lines[@lineNumber - prevNum]
-
-            previousIndentation = previousLine.match(/^(\s*)/)[1].length
-            # I don't know why, but when inside a function, you make a chained
-            # call and define an inline callback as a parameter, the body of
-            # that callback gets the indentation reported higher than it really
-            # is. See issue #88
-            # NOTE: Adding this line moved the cyclomatic complexity over the
-            # limit, I'm not sure why
-            numIndents = currentLine.match(/^(\s*)/)[1].length
-            numIndents -= previousIndentation
-
-
-        # Now check the indentation.
-        expected = @config['indentation'].value
-        if not ignoreIndent and numIndents != expected
-            context = "Expected #{expected} " +
-                      "got #{numIndents}"
-            @createLexError('indentation', {context})
-        else
-            null
-
-    lintClass : (token) ->
-        # TODO: you can do some crazy shit in CoffeeScript, like
-        # class func().ClassName. Don't allow that.
-
-        # Don't try to lint the names of anonymous classes.
-        return null if token.newLine? or @peek()[0] in ['INDENT', 'EXTENDS']
-
-        # It's common to assign a class to a global namespace, e.g.
-        # exports.MyClassName, so loop through the next tokens until
-        # we find the real identifier.
-        className = null
-        offset = 1
-        until className
-            if @peek(offset + 1)?[0] == '.'
-                offset += 2
-            else if @peek(offset)?[0] == '@'
-                offset += 1
-            else
-                className = @peek(offset)[1]
-
-        # Now check for the error.
-        if not regexes.camelCase.test(className)
-            attrs = {context: "class name: #{className}"}
-            @createLexError('camel_case_classes', attrs)
-        else
-            null
-
-    lintArrowSpacing : (token) ->
-        # Throw error unless the following happens.
-        #
-        # We will take a look at the previous token to see
-        # 1. That the token is properly spaced
-        # 2. Wasn't generated by the CoffeeScript compiler
-        # 3. That it is just indentation
-        # 4. If the function declaration has no parameters
-        # e.g. x(-> 3)
-        #      x( -> 3)
-        #
-        # or a statement is wrapped in parentheses
-        # e.g. (-> true)()
-        #
-        # we will accept either having a space or not having a space there.
-
-        pp = @peek(-1)
-        unless (token.spaced? or token.newLine? or @atEof()) and
-               # Throw error unless the previous token...
-               ((pp.spaced? or pp[0] is 'TERMINATOR') or #1
-                pp.generated? or #2
-                pp[0] is "INDENT" or #3
-                (pp[1] is "(" and not pp.generated?)) #4
-            @createLexError('arrow_spacing')
-        else
-            null
-
-    createLexError : (rule, attrs = {}) ->
-        attrs.lineNumber = @lineNumber + 1
-        attrs.level = @config[rule].level
-        attrs.line = @lines[@lineNumber]
-        createError(rule, attrs)
-
-    # Return the token n places away from the current token.
-    peek : (n = 1) ->
-        @tokens[@i + n] || null
-
-    # Return true if the current token is inside of an array.
-    inArray : () ->
-        return @arrayTokens.length > 0
-
-    # Are there any more meaningful tokens following the current one?
-    atEof: ->
-        for token in @tokens.slice(@i + 1)
-            unless token.generated or token[0] in ['OUTDENT', 'TERMINATOR']
-                return false
-        true
-
-    # Return true if the current token is part of a property access
-    # that is split across lines, for example:
-    #   $('body')
-    #       .addClass('foo')
-    #       .removeClass('bar')
-    isChainedCall : () ->
-        # Get the index of the second most recent new line.
-        lines = (i for token, i in @tokens[..@i] when token.newLine?)
-
-        lastNewLineIndex = if lines then lines[lines.length - 2] else null
-
-        # Bail out if there is no such token.
-        return false if not lastNewLineIndex?
-
-        # Otherwise, figure out if that token or the next is an attribute
-        # look-up.
-        tokens = [@tokens[lastNewLineIndex], @tokens[lastNewLineIndex + 1]]
-
-        return !!(t for t in tokens when t and t[0] == '.').length
-
-
-# A class that performs static analysis of the abstract
-# syntax tree.
-class ASTLinter
-
-    constructor : (source, config) ->
-        @source = source
-        @config = config
-        @errors = []
-
-    lint : () ->
-        try
-            @node = CoffeeScript.nodes(@source)
-        catch coffeeError
-            @errors.push @_parseCoffeeScriptError(coffeeError)
-            return @errors
-        @lintNode(@node)
-        @errors
-
-    # returns the "complexity" value of the current node.
-    getComplexity : (node) ->
-        name = node.constructor.name
-        complexity = if name in ['If', 'While', 'For', 'Try']
-            1
-        else if name == 'Op' and node.operator in ['&&', '||']
-            1
-        else if name == 'Switch'
-            node.cases.length
-        else
-            0
-        return complexity
-
-    # Lint the AST node and return it's cyclomatic complexity.
-    lintNode : (node, line) ->
-
-        # Get the complexity of the current node.
-        name = node.constructor.name
-        complexity = @getComplexity(node)
-
-        # Add the complexity of all child's nodes to this one.
-        node.eachChild (childNode) =>
-            nodeLine = childNode.locationData.first_line
-            complexity += @lintNode(childNode, nodeLine) if childNode
-
-        # If the current node is a function, and it's over our limit, add an
-        # error to the list.
-        rule = @config.cyclomatic_complexity
-
-        if name == 'Code' and complexity >= rule.value
-            attrs = {
-                context: complexity + 1
-                level: rule.level
-                lineNumber: line + 1
-                lineNumberEnd: node.locationData.last_line + 1
-            }
-            error = createError 'cyclomatic_complexity', attrs
-            @errors.push error if error
-
-        # Return the complexity for the benefit of parent nodes.
-        return complexity
-
-    _parseCoffeeScriptError : (coffeeError) ->
-        rule = RULES['coffeescript_error']
-
-        message = coffeeError.toString()
-
-        # Parse the line number
-        lineNumber = -1
-        if coffeeError.location?
-            lineNumber = coffeeError.location.first_line + 1
-        else
-            match = /line (\d+)/.exec message
-            lineNumber = parseInt match[1], 10 if match?.length > 1
-        attrs = {
-            message: message
-            level: rule.level
-            lineNumber: lineNumber
-        }
-        return  createError 'coffeescript_error', attrs
-
-
+            j++
+
+LineLinter = require './line_linter.coffee'
+LexicalLinter = require './lexical_linter.coffee'
+ASTLinter = require './ast_linter.coffee'
 
 # Merge default and user configuration.
@@ -1031,4 +66,6 @@
     for rule, ruleConfig of RULES
         config[rule] = defaults(userConfig[rule], ruleConfig)
+
+
     return config
 
@@ -1050,4 +87,69 @@
     newSource
 
+_rules = {}
+coffeelint.registerRule = (RuleConstructor, ruleName = undefined) ->
+    p = new RuleConstructor
+
+    name = p?.rule?.name or "(unknown)"
+    e = (msg) -> throw new Error "Invalid rule: #{name} #{msg}"
+    unless p.rule?
+        e "Rules must provide rule attribute with a default configuration."
+
+    e "Rule defaults require a name" unless p.rule.name?
+
+    if ruleName? and ruleName isnt p.rule.name
+        e "Mismatched rule name: #{ruleName}"
+
+    e "Rule defaults require a message" unless p.rule.message?
+    e "Rule defaults require a description" unless p.rule.description?
+    unless p.rule.level in [ 'ignore', 'warn', 'error' ]
+        e "Default level must be 'ignore', 'warn', or 'error'"
+
+    if typeof p.lintToken is 'function'
+        e "'tokens' is required for 'lintToken'" unless p.tokens
+    else if typeof p.lintLine  isnt 'function' and
+            typeof p.lintAST isnt 'function'
+        e "Rules must implement lintToken, lintLine, or lintAST"
+
+    # Capture the default options for the new rule.
+    RULES[p.rule.name] = p.rule
+    _rules[p.rule.name] = RuleConstructor
+
+# These all need to be explicitly listed so they get picked up by browserify.
+coffeelint.registerRule require './rules/arrow_spacing.coffee'
+coffeelint.registerRule require './rules/no_tabs.coffee'
+coffeelint.registerRule require './rules/no_trailing_whitespace.coffee'
+coffeelint.registerRule require './rules/max_line_length.coffee'
+coffeelint.registerRule require './rules/line_endings.coffee'
+coffeelint.registerRule require './rules/no_trailing_semicolons.coffee'
+coffeelint.registerRule require './rules/indentation.coffee'
+coffeelint.registerRule require './rules/camel_case_classes.coffee'
+coffeelint.registerRule require './rules/colon_assignment_spacing.coffee'
+coffeelint.registerRule require './rules/no_implicit_braces.coffee'
+coffeelint.registerRule require './rules/no_plusplus.coffee'
+coffeelint.registerRule require './rules/no_throwing_strings.coffee'
+coffeelint.registerRule require './rules/no_backticks.coffee'
+coffeelint.registerRule require './rules/no_implicit_parens.coffee'
+coffeelint.registerRule require './rules/no_empty_param_list.coffee'
+coffeelint.registerRule require './rules/no_stand_alone_at.coffee'
+coffeelint.registerRule require './rules/space_operators.coffee'
+coffeelint.registerRule require './rules/duplicate_key.coffee'
+coffeelint.registerRule require './rules/empty_constructor_needs_parens.coffee'
+coffeelint.registerRule require './rules/cyclomatic_complexity.coffee'
+coffeelint.registerRule require './rules/newlines_after_classes.coffee'
+coffeelint.registerRule require './rules/no_unnecessary_fat_arrows.coffee'
+coffeelint.registerRule require './rules/missing_fat_arrows.coffee'
+coffeelint.registerRule(
+    require './rules/non_empty_constructor_needs_parens.coffee'
+)
+
+hasSyntaxError = (source) ->
+    try
+        # If there are syntax errors this will abort the lexical and line
+        # linters.
+        CoffeeScript.tokens(source)
+        return false
+    return true
+
 # Check the source against the given configuration and return an array
 # of any errors found. An error is an object with the following
@@ -1070,5 +172,5 @@
     disabled_initially = []
     for l in source.split('\n')
-        s = regexes.configStatement.exec(l)
+        s = LineLinter.configStatement.exec(l)
         if s?.length > 2 and 'enable' in s
             for r in s[1..]
@@ -1079,27 +181,30 @@
 
     # Do AST linting first so all compile errors are caught.
-    astErrors = new ASTLinter(source, config).lint()
-
-    # Do lexical linting.
-    lexicalLinter = new LexicalLinter(source, config)
-    lexErrors = lexicalLinter.lint()
-
-    # Do line linting.
-    tokensByLine = lexicalLinter.tokensByLine
-    lineLinter = new LineLinter(source, config, tokensByLine)
-    lineErrors = lineLinter.lint()
+    astErrors = new ASTLinter(source, config, _rules, CoffeeScript).lint()
+    errors = [].concat(astErrors)
+
+    # only do further checks if the syntax is okay, otherwise they just fail
+    # with syntax error exceptions
+    unless hasSyntaxError(source)
+        # Do lexical linting.
+        lexicalLinter = new LexicalLinter(source, config, _rules, CoffeeScript)
+        lexErrors = lexicalLinter.lint()
+        errors = errors.concat(lexErrors)
+
+        # Do line linting.
+        tokensByLine = lexicalLinter.tokensByLine
+        lineLinter = new LineLinter(source, config, _rules, tokensByLine,
+            literate)
+        lineErrors = lineLinter.lint()
+        errors = errors.concat(lineErrors)
+        block_config = lineLinter.block_config
+    else
+        # default this so it knows what to do
+        block_config =
+            enable : {}
+            disable : {}
 
     # Sort by line number and return.
-    errors = lexErrors.concat(lineErrors, astErrors)
     errors.sort((a, b) -> a.lineNumber - b.lineNumber)
-
-    # Helper to remove rules from disabled list
-    difference = (a, b) ->
-        j = 0
-        while j < a.length
-            if a[j] in b
-                a.splice(j, 1)
-            else
-                j++
 
     # Disable/enable rules for inline blocks
@@ -1126,7 +231,3 @@
                 errors.push e unless e.rule in disabled
 
-    block_config =
-      'enable': {}
-      'disable': {}
-
     errors
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/commandline.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/commandline.coffee	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/commandline.coffee	(revision 516)
@@ -12,5 +12,6 @@
 optimist = require("optimist")
 thisdir = path.dirname(fs.realpathSync(__filename))
-coffeelint = require(path.join(thisdir, "..", "lib", "coffeelint"))
+coffeelint = require(path.join(thisdir, "coffeelint"))
+configfinder = require(path.join(thisdir, "configfinder"))
 CoffeeScript = require 'coffee-script'
 
@@ -160,4 +161,7 @@
         for path, errors of @errorReport.paths
             for e in errors
+                # Having the context is useful for the cyclomatic_complexity
+                # rule and critical for the undefined_variables rule.
+                e.message += " #{e.context}." if e.context
                 f = [
                     path
@@ -181,5 +185,5 @@
                     @print """
                     <issue line="#{e.lineNumber}"
-                            lineEnd=#{e.lineNumberEnd ? e.lineNumberEnd}
+                            lineEnd="#{e.lineNumberEnd ? e.lineNumber}"
                             reason="[#{@escape(e.level)}] #{@escape(e.message)}"
                             evidence="#{@escape(e.context)}"/>
@@ -209,12 +213,45 @@
         msg
 
+class CheckstyleReporter extends JSLintReporter
+
+    publish : () ->
+        @print "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+        @print "<checkstyle version=\"4.3\">"
+
+        for path, errors of @errorReport.paths
+            if errors.length
+                @print "<file name=\"#{path}\">"
+
+                for e in errors
+                    level = e.level
+                    level = 'warning' if level is 'warn'
+
+                    # context is optional, this avoids generating the string
+                    # "context: undefined"
+                    context = e.context ? ""
+                    @print """
+                    <error line="#{e.lineNumber}"
+                        severity="#{@escape(level)}"
+                        message="#{@escape(e.message+'; context: '+context)}"
+                        source="coffeelint"/>
+                    """
+                @print "</file>"
+
+        @print "</checkstyle>"
+
 # Return an error report from linting the given paths.
-lintFiles = (paths, config) ->
+lintFiles = (files, config) ->
     errorReport = new ErrorReport()
-    for path in paths
-        source = read(path)
-        literate = CoffeeScript.helpers.isLiterate path
-
-        errorReport.paths[path] = coffeelint.lint(source, config, literate)
+    for file in files
+        source = read(file)
+        literate = CoffeeScript.helpers.isLiterate file
+
+        fileConfig = if config then config else getFallbackConfig(file)
+
+        for ruleName, data of fileConfig
+            if data.module?
+                loadRules(data.module, ruleName)
+
+        errorReport.paths[file] = coffeelint.lint(source, fileConfig, literate)
     return errorReport
 
@@ -222,6 +259,41 @@
 lintSource = (source, config, literate = false) ->
     errorReport = new ErrorReport()
+    config or= getFallbackConfig()
+
+    for ruleName, data of config
+        if data.module?
+            loadRules(data.module, ruleName)
+
     errorReport.paths["stdin"] = coffeelint.lint(source, config, literate)
     return errorReport
+
+# Get fallback configuration. With the -F flag found configs in standard places
+# will be used for each file being linted. Standard places are package.json or
+# coffeelint.json in a project's root folder or the user's home folder.
+getFallbackConfig = (filename = null) ->
+    unless options.argv.noconfig
+        configfinder.getConfig(filename)
+
+# moduleName is a NodeJS module, or a path to a module NodeJS can load.
+loadRules = (moduleName, ruleName = undefined) ->
+    try
+        try
+            ruleModule = require moduleName
+        catch e
+            # Maybe the user used a relative path from the command line. This
+            # doesn't make much sense from a config file, but seems natural
+            # with the --rules option.
+            ruleModule = require path.resolve(process.cwd(), moduleName)
+
+        # Most rules can export as a single constructor function
+        if typeof ruleModule is 'function'
+            coffeelint.registerRule ruleModule, ruleName
+        else
+            # Or it can export an array of rules to load.
+            for rule in ruleModule
+                coffeelint.registerRule rule
+    catch e
+        console.error "Error loading #{moduleName}"
+        throw e
 
 # Publish the error report and exit with the appropriate status.
@@ -231,4 +303,6 @@
     else if options.argv.csv
         new CSVReporter(errorReport)
+    else if options.argv.checkstyle
+        new CheckstyleReporter(errorReport)
     else
         colorize = not options.argv.nocolor
@@ -248,4 +322,5 @@
             .alias("q", "quiet")
             .describe("f", "Specify a custom configuration file.")
+            .describe("rules", "Specify a custom rule or directory of rules.")
             .describe("makeconfig", "Prints a default config file")
             .describe("noconfig",
@@ -253,7 +328,8 @@
             .describe("h", "Print help information.")
             .describe("v", "Print current version number.")
-            .describe("r", "Recursively lint .coffee files in subdirectories.")
+            .describe("r", "(not used, but left for backward compatibility)")
             .describe("csv", "Use the csv reporter.")
             .describe("jslint", "Use the JSLint XML reporter.")
+            .describe("checkstyle", "Use the checkstyle XML reporter.")
             .describe("nocolor", "Don't colorize the output")
             .describe("s", "Lint the source from stdin")
@@ -263,4 +339,5 @@
             .boolean("csv")
             .boolean("jslint")
+            .boolean("checkstyle")
             .boolean("nocolor")
             .boolean("noconfig")
@@ -286,13 +363,13 @@
 else
     # Load configuration.
-    config = {}
+    config = null
     unless options.argv.noconfig
-        # path.existsSync was moved to fs.existsSync node 0.6 -> 0.8
-        existsFn = fs.existsSync ? path.existsSync
         if options.argv.f
             config = JSON.parse read options.argv.f
         else if (process.env.COFFEELINT_CONFIG and
-        existsFn process.env.COFFEELINT_CONFIG)
+        fs.existsSync(process.env.COFFEELINT_CONFIG))
             config = JSON.parse(read(process.env.COFFEELINT_CONFIG))
+
+    loadRules(options.argv.rules) if options.argv.rules
 
     if options.argv.s
@@ -308,5 +385,5 @@
         # Find scripts to lint.
         paths = options.argv._
-        scripts = if options.argv.r then findCoffeeScripts(paths) else paths
+        scripts = findCoffeeScripts(paths)
 
         # Lint the code.
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/configfinder.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/configfinder.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/configfinder.coffee	(revision 516)
@@ -0,0 +1,54 @@
+###
+Helpers for finding CoffeeLint config in standard locations, similar to how
+JSHint does.
+###
+
+fs = require 'fs'
+path = require 'path'
+
+# Cache for findFile
+findFileResults = {}
+
+# Searches for a file with a specified name starting with 'dir' and going all
+# the way up either until it finds the file or hits the root.
+findFile = (name, dir) ->
+    dir = dir or process.cwd()
+    filename = path.normalize(path.join(dir, name))
+    return findFileResults[filename]  if findFileResults[filename]
+    parent = path.resolve(dir, "../")
+    if fs.existsSync(filename)
+        findFileResults[filename] = filename
+    else if dir is parent
+        findFileResults[filename] = null
+    else
+        findFile name, parent
+
+# Possibly find CoffeeLint configuration within a package.json file.
+loadNpmConfig = (dir) ->
+    fp = findFile("package.json", dir)
+    loadJSON(fp).coffeelintConfig  if fp
+
+# Parse a JSON file gracefully.
+loadJSON = (filename) ->
+    try
+        JSON.parse(fs.readFileSync(filename).toString())
+    catch e
+        console.error "Could not load JSON file '%s': %s", filename, e
+        null
+
+# Tries to find a configuration file in either project directory (if file is
+# given), as either the package.json's 'coffeelintConfig' property, or a project
+# specific 'coffeelint.json' or a global 'coffeelint.json' in the home
+# directory.
+exports.getConfig = (filename = null) ->
+    if filename
+        dir = path.dirname(path.resolve(filename))
+        npmConfig = loadNpmConfig(dir)
+        return npmConfig  if npmConfig
+        projConfig = findFile("coffeelint.json", dir)
+        return loadJSON(projConfig)  if projConfig
+    envs = process.env.HOME or process.env.HOMEPATH or process.env.USERPROFILE
+    home = path.normalize(path.join(envs, "coffeelint.json"))
+    if fs.existsSync(home)
+        console.log 'loaded', home
+        return loadJSON(home)
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/lexical_linter.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/lexical_linter.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/lexical_linter.coffee	(revision 516)
@@ -0,0 +1,73 @@
+
+class TokenApi
+    constructor: (CoffeeScript, source, @config, @tokensByLine) ->
+        @tokens = CoffeeScript.tokens(source)
+        @lines = source.split('\n')
+        @tokensByLine = {}  # A map of tokens by line.
+
+    i: 0              # The index of the current token we're linting.
+
+    # Return the token n places away from the current token.
+    peek : (n = 1) ->
+        @tokens[@i + n] || null
+
+
+BaseLinter = require './base_linter.coffee'
+
+#
+# A class that performs checks on the output of CoffeeScript's lexer.
+#
+module.exports = class LexicalLinter extends BaseLinter
+
+    constructor : (source, config, rules, CoffeeScript) ->
+        super source, config, rules
+
+        @tokenApi = new TokenApi CoffeeScript, source, @config, @tokensByLine
+        # This needs to be available on the LexicalLinter so it can be passed
+        # to the LineLinter when this finishes running.
+        @tokensByLine = @tokenApi.tokensByLine
+
+    acceptRule: (rule) ->
+        return typeof rule.lintToken is 'function'
+
+    # Return a list of errors encountered in the given source.
+    lint : () ->
+        errors = []
+
+        for token, i in @tokenApi.tokens
+            @tokenApi.i = i
+            errors.push(error) for error in @lintToken(token)
+        errors
+
+
+    # Return an error if the given token fails a lint check, false otherwise.
+    lintToken : (token) ->
+        [type, value, lineNumber] = token
+
+        if typeof lineNumber == "object"
+            if type == 'OUTDENT' or type == 'INDENT'
+                lineNumber = lineNumber.last_line
+            else
+                lineNumber = lineNumber.first_line
+        @tokensByLine[lineNumber] ?= []
+        @tokensByLine[lineNumber].push(token)
+        # CoffeeScript loses line numbers of interpolations and multi-line
+        # regexes, so fake it by using the last line number we know.
+        @lineNumber = lineNumber or @lineNumber or 0
+
+        @tokenApi.lineNumber = @lineNumber
+
+        # Multiple rules might run against the same token to build context.
+        # Every every rule should run even if something has already produced an
+        # error for the same token.
+        errors = []
+        for rule in @rules when token[0] in rule.tokens
+            v = @normalizeResult rule, rule.lintToken(token, @tokenApi)
+            errors.push v if v?
+        errors
+
+    createError : (ruleName, attrs = {}) ->
+        attrs.lineNumber = @lineNumber + 1
+        attrs.line = @tokenApi.lines[@lineNumber]
+        super ruleName, attrs
+
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/line_linter.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/line_linter.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/line_linter.coffee	(revision 516)
@@ -0,0 +1,136 @@
+
+class LineApi
+    constructor: (source, @config, @tokensByLine, @literate) ->
+        @line = null
+        @lines = source.split('\n')
+        @lineCount = @lines.length
+
+        # maintains some contextual information
+        #   inClass: bool; in class or not
+        #   lastUnemptyLineInClass: null or lineNumber, if the last not-empty
+        #                     line was in a class it holds its number
+        #   classIndents: the number of indents within a class
+        @context = {
+            class: {
+                inClass : false
+                lastUnemptyLineInClass : null
+                classIndents : null
+            }
+        }
+
+    lineNumber: 0
+
+    isLiterate: -> @literate
+
+    # maintain the contextual information for class-related stuff
+    maintainClassContext : (line) ->
+        if @context.class.inClass
+            if @lineHasToken 'INDENT'
+                @context.class.classIndents++
+            else if @lineHasToken 'OUTDENT'
+                @context.class.classIndents--
+                if @context.class.classIndents is 0
+                    @context.class.inClass = false
+                    @context.class.classIndents = null
+
+            if @context.class.inClass and not line.match( /^\s*$/ )
+                @context.class.lastUnemptyLineInClass = @lineNumber
+        else
+            unless line.match(/\\s*/)
+                @context.class.lastUnemptyLineInClass = null
+
+            if @lineHasToken 'CLASS'
+                @context.class.inClass = true
+                @context.class.lastUnemptyLineInClass = @lineNumber
+                @context.class.classIndents = 0
+
+        null
+
+    isLastLine : () ->
+        return @lineNumber == @lineCount - 1
+
+    # Return true if the given line actually has tokens.
+    # Optional parameter to check for a specific token type and line number.
+    lineHasToken : (tokenType = null, lineNumber = null) ->
+        lineNumber = lineNumber ? @lineNumber
+        unless tokenType?
+            return @tokensByLine[lineNumber]?
+        else
+            tokens = @tokensByLine[lineNumber]
+            return null unless tokens?
+            for token in tokens
+                return true if token[0] == tokenType
+            return false
+
+    # Return tokens for the given line number.
+    getLineTokens : () ->
+        @tokensByLine[@lineNumber] || []
+
+
+BaseLinter = require './base_linter.coffee'
+
+# Some repeatedly used regular expressions.
+configStatement = /coffeelint:\s*(disable|enable)(?:=([\w\s,]*))?/
+
+#
+# A class that performs regex checks on each line of the source.
+#
+module.exports = class LineLinter extends BaseLinter
+
+    # This is exposed here so coffeelint.coffee can reuse it
+    @configStatement: configStatement
+
+    constructor : (source, config, rules, tokensByLine, literate = false) ->
+        super source, config, rules
+
+        @lineApi = new LineApi source, config, tokensByLine, literate
+
+        # Store suppressions in the form of { line #: type }
+        @block_config =
+            enable : {}
+            disable : {}
+
+    acceptRule: (rule) ->
+        return typeof rule.lintLine is 'function'
+
+    lint : () ->
+        errors = []
+        for line, lineNumber in @lineApi.lines
+            @lineApi.lineNumber = @lineNumber = lineNumber
+
+            @lineApi.maintainClassContext line
+            @collectInlineConfig line
+
+            errors.push(error) for error in @lintLine(line)
+        errors
+
+    # Return an error if the line contained failed a rule, null otherwise.
+    lintLine : (line) ->
+
+        # Multiple rules might run against the same line to build context.
+        # Every every rule should run even if something has already produced an
+        # error for the same token.
+        errors = []
+        for rule in @rules
+            v = @normalizeResult rule, rule.lintLine(line, @lineApi)
+            errors.push v if v?
+        errors
+
+    collectInlineConfig : (line) ->
+        # Check for block config statements enable and disable
+        result = configStatement.exec(line)
+        if result?
+            cmd = result[1]
+            rules = []
+            if result[2]?
+                for r in result[2].split(',')
+                    rules.push r.replace(/^\s+|\s+$/g, "")
+            @block_config[cmd][@lineNumber] = rules
+        return null
+
+
+    createError: (rule, attrs = {}) ->
+        attrs.lineNumber = @lineNumber + 1 # Lines are indexed by zero.
+        attrs.level = @config[rule]?.level
+        super rule, attrs
+
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules.coffee	(revision 516)
@@ -0,0 +1,12 @@
+
+# CoffeeLint error levels.
+ERROR   = 'error'
+WARN    = 'warn'
+IGNORE  = 'ignore'
+
+# CoffeeLint's default rule configuration.
+module.exports =
+
+    coffeescript_error :
+        level : ERROR
+        message : '' # The default coffeescript error is fine.
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/arrow_spacing.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/arrow_spacing.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/arrow_spacing.coffee	(revision 516)
@@ -0,0 +1,61 @@
+
+module.exports = class ArrowSpacing
+
+    rule:
+        name: 'arrow_spacing'
+        level : 'ignore'
+        message : 'Function arrow (->) must be spaced properly'
+        description: """
+            <p>This rule checks to see that there is spacing before and after
+            the arrow operator that declares a function. This rule is disabled
+            by default.</p> <p>Note that if arrow_spacing is enabled, and you
+            pass an empty function as a parameter, arrow_spacing will accept
+            either a space or no space in-between the arrow operator and the
+            parenthesis</p>
+            <pre><code># Both of this will not trigger an error,
+            # even with arrow_spacing enabled.
+            x(-> 3)
+            x( -> 3)
+
+            # However, this will trigger an error
+            x((a,b)-> 3)
+            </code>
+            </pre>
+             """
+
+    tokens: [ '->' ]
+
+    lintToken : (token, tokenApi) ->
+        # Throw error unless the following happens.
+        #
+        # We will take a look at the previous token to see
+        # 1. That the token is properly spaced
+        # 2. Wasn't generated by the CoffeeScript compiler
+        # 3. That it is just indentation
+        # 4. If the function declaration has no parameters
+        # e.g. x(-> 3)
+        #      x( -> 3)
+        #
+        # or a statement is wrapped in parentheses
+        # e.g. (-> true)()
+        #
+        # we will accept either having a space or not having a space there.
+
+        pp = tokenApi.peek(-1)
+        unless (token.spaced? or token.newLine? or @atEof(tokenApi)) and
+               # Throw error unless the previous token...
+               ((pp.spaced? or pp[0] is 'TERMINATOR') or #1
+                pp.generated? or #2
+                pp[0] is "INDENT" or #3
+                (pp[1] is "(" and not pp.generated?)) #4
+            true
+        else
+            null
+
+    # Are there any more meaningful tokens following the current one?
+    atEof: (tokenApi) ->
+        {tokens, i } = tokenApi
+        for token in tokens.slice(i + 1)
+            unless token.generated or token[0] in ['OUTDENT', 'TERMINATOR']
+                return false
+        true
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/camel_case_classes.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/camel_case_classes.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/camel_case_classes.coffee	(revision 516)
@@ -0,0 +1,52 @@
+
+regexes =
+    camelCase : /^[A-Z][a-zA-Z\d]*$/
+
+module.exports = class CamelCaseClasses
+
+    rule:
+        name: 'camel_case_classes'
+        level : 'error'
+        message : 'Class names should be camel cased'
+        description: """
+            This rule mandates that all class names are CamelCased. Camel
+            casing class names is a generally accepted way of distinguishing
+            constructor functions - which require the 'new' prefix to behave
+            properly - from plain old functions.
+            <pre>
+            <code># Good!
+            class BoaConstrictor
+
+            # Bad!
+            class boaConstrictor
+            </code>
+            </pre>
+            This rule is enabled by default.
+            """
+
+    tokens: [ 'CLASS' ]
+
+    lintToken: (token, tokenApi) ->
+        # TODO: you can do some crazy shit in CoffeeScript, like
+        # class func().ClassName. Don't allow that.
+
+        # Don't try to lint the names of anonymous classes.
+        if token.newLine? or tokenApi.peek()[0] in ['INDENT', 'EXTENDS']
+            return null
+
+        # It's common to assign a class to a global namespace, e.g.
+        # exports.MyClassName, so loop through the next tokens until
+        # we find the real identifier.
+        className = null
+        offset = 1
+        until className
+            if tokenApi.peek(offset + 1)?[0] == '.'
+                offset += 2
+            else if tokenApi.peek(offset)?[0] == '@'
+                offset += 1
+            else
+                className = tokenApi.peek(offset)[1]
+
+        # Now check for the error.
+        if not regexes.camelCase.test(className)
+            return {context: "class name: #{className}"}
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/colon_assignment_spacing.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/colon_assignment_spacing.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/colon_assignment_spacing.coffee	(revision 516)
@@ -0,0 +1,65 @@
+module.exports = class ColonAssignmentSpacing
+
+    rule :
+        name : 'colon_assignment_spacing'
+        level : 'ignore'
+        message :'Colon assignment without proper spacing'
+        spacing :
+            left : 0
+            right : 0
+        description : """
+            <p>This rule checks to see that there is spacing before and
+            after the colon in a colon assignment (i.e., classes, objects).
+            The spacing amount is specified by
+            spacing.left and spacing.right, respectively.
+            A zero value means no spacing required.
+            </p>
+            <pre><code>
+            #
+            # If spacing.left and spacing.right is 1
+            #
+
+            # Good
+            object = {spacing : true}
+            class Dog
+              canBark : true
+
+            # Bad
+            object = {spacing: true}
+            class Cat
+              canBark: false
+            </code></pre>
+            """
+
+    tokens : [':']
+
+    lintToken : (token, tokenApi) ->
+        spacingAllowances = tokenApi.config[@rule.name].spacing
+        previousToken = tokenApi.peek -1
+        nextToken = tokenApi.peek 1
+
+        getSpaceFromToken = (direction) ->
+            switch direction
+                when 'left'
+                    token[2].first_column - previousToken[2].last_column - 1
+                when 'right'
+                    nextToken[2].first_column - token[2].first_column - 1
+
+        checkSpacing = (direction) ->
+            spacing = getSpaceFromToken direction
+            # when spacing is negative, the neighboring token is a newline
+            isSpaced = if spacing < 0 then true else spacing is parseInt spacingAllowances[direction]
+            [isSpaced, spacing]
+
+        [isLeftSpaced, leftSpacing] = checkSpacing 'left'
+        [isRightSpaced, rightSpacing] = checkSpacing 'right'
+
+        if isLeftSpaced and isRightSpaced
+            null
+        else
+            context :
+                """
+                Incorrect spacing around column #{token[2].first_column}.
+                Expected left: #{spacingAllowances.left}, right: #{spacingAllowances.right}.
+                Got left: #{leftSpacing}, right: #{rightSpacing}.
+                """
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/cyclomatic_complexity.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/cyclomatic_complexity.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/cyclomatic_complexity.coffee	(revision 516)
@@ -0,0 +1,52 @@
+module.exports = class NoTabs
+
+    rule:
+        name: 'cyclomatic_complexity'
+        value : 10
+        level : 'ignore'
+        message : 'The cyclomatic complexity is too damn high'
+        description : 'Examine the complexity of your application.'
+
+    # returns the "complexity" value of the current node.
+    getComplexity : (node) ->
+        name = node.constructor.name
+        complexity = if name in ['If', 'While', 'For', 'Try']
+            1
+        else if name == 'Op' and node.operator in ['&&', '||']
+            1
+        else if name == 'Switch'
+            node.cases.length
+        else
+            0
+        return complexity
+
+    lintAST : (node, @astApi) ->
+        @lintNode node
+        undefined
+
+    # Lint the AST node and return its cyclomatic complexity.
+    lintNode : (node, line) ->
+
+        # Get the complexity of the current node.
+        name = node.constructor.name
+        complexity = @getComplexity(node)
+
+        # Add the complexity of all child's nodes to this one.
+        node.eachChild (childNode) =>
+            nodeLine = childNode.locationData.first_line
+            complexity += @lintNode(childNode, nodeLine) if childNode
+
+        rule = @astApi.config[@rule.name]
+
+        # If the current node is a function, and it's over our limit, add an
+        # error to the list.
+        if name == 'Code' and complexity >= rule.value
+            error = @astApi.createError {
+                context: complexity + 1
+                lineNumber: line + 1
+                lineNumberEnd: node.locationData.last_line + 1
+            }
+            @errors.push error if error
+
+        # Return the complexity for the benefit of parent nodes.
+        return complexity
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/duplicate_key.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/duplicate_key.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/duplicate_key.coffee	(revision 516)
@@ -0,0 +1,60 @@
+
+module.exports = class DuplicateKey
+
+    rule:
+        # I don't know of any legitimate reason to define duplicate keys in an
+        # object. It seems to always be a mistake, it's also a syntax error in
+        # strict mode.
+        # See http://jslinterrors.com/duplicate-key-a/
+        name: 'duplicate_key'
+        level: 'error'
+        message: 'Duplicate key defined in object or class'
+        description:
+            "Prevents defining duplicate keys in object literals and classes"
+
+    tokens: [ 'IDENTIFIER', "{","}" ]
+
+    constructor: ->
+        @braceScopes = []   # A stack tracking keys defined in nexted scopes.
+
+    lintToken : ([type], tokenApi) ->
+
+        if type in [ "{","}" ]
+            @lintBrace arguments...
+            return undefined
+
+        if type is "IDENTIFIER"
+            @lintIdentifier arguments...
+
+    lintIdentifier : (token, tokenApi) ->
+        key = token[1]
+
+        # Class names might not be in a scope
+        return null if not @currentScope?
+        nextToken = tokenApi.peek(1)
+
+        # Exit if this identifier isn't being assigned. A and B
+        # are identifiers, but only A should be examined:
+        # A = B
+        return null if nextToken[1] isnt ':'
+        previousToken = tokenApi.peek(-1)
+
+        # Assigning "@something" and "something" are not the same thing
+        key = "@#{key}" if previousToken[0] == '@'
+
+        # Added a prefix to not interfere with things like "constructor".
+        key = "identifier-#{key}"
+        if @currentScope[key]
+            return true
+        else
+            @currentScope[key] = token
+            null
+
+    lintBrace : (token) ->
+        if token[0] == '{'
+            @braceScopes.push @currentScope if @currentScope?
+            @currentScope = {}
+        else
+            @currentScope = @braceScopes.pop()
+
+        return null
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/empty_constructor_needs_parens.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/empty_constructor_needs_parens.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/empty_constructor_needs_parens.coffee	(revision 516)
@@ -0,0 +1,35 @@
+
+module.exports = class EmptyConstructorNeedsParens
+
+    rule:
+        name: 'empty_constructor_needs_parens'
+        level: 'ignore'
+        message: 'Invoking a constructor without parens and without arguments'
+        description:
+            "Requires constructors with no parameters to include the parens"
+
+    tokens: [ 'UNARY' ]
+
+    # Return an error if the given indentation token is not correct.
+    lintToken: (token, tokenApi) ->
+        if token[1] is 'new'
+            # Find the last chained identifier, e.g. Bar in new foo.bar.Bar().
+            identifierIndex = 1
+            loop
+                expectedIdentifier = tokenApi.peek(identifierIndex)
+                expectedCallStart  = tokenApi.peek(identifierIndex + 1)
+                if expectedIdentifier?[0] is 'IDENTIFIER'
+                    if expectedCallStart?[0] is '.'
+                        identifierIndex += 2
+                        continue
+                break
+
+            # The callStart is generated if your parameters are all on the same
+            # line with implicit parens, and if your parameters start on the
+            # next line, but is missing if there are no params and no parens.
+            if expectedIdentifier?[0] is 'IDENTIFIER' and expectedCallStart?
+                return @handleExpectedCallStart expectedCallStart
+
+    handleExpectedCallStart: (expectedCallStart) ->
+        if expectedCallStart[0] isnt 'CALL_START'
+            return true
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/indentation.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/indentation.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/indentation.coffee	(revision 516)
@@ -0,0 +1,129 @@
+
+module.exports = class Indentation
+
+    rule:
+        name: 'indentation'
+        value : 2
+        level : 'error'
+        message : 'Line contains inconsistent indentation'
+        description: """
+            This rule imposes a standard number of spaces to be used for
+            indentation. Since whitespace is significant in CoffeeScript, it's
+            critical that a project chooses a standard indentation format and
+            stays consistent. Other roads lead to darkness. <pre> <code>#
+            Enabling this option will prevent this ugly
+            # but otherwise valid CoffeeScript.
+            twoSpaces = () ->
+              fourSpaces = () ->
+                  eightSpaces = () ->
+                        'this is valid CoffeeScript'
+
+            </code>
+            </pre>
+            Two space indentation is enabled by default.
+            """
+
+
+    tokens: [ 'INDENT', "[", "]" ]
+
+    constructor: ->
+        @arrayTokens = []   # A stack tracking the array token pairs.
+
+    # Return an error if the given indentation token is not correct.
+    lintToken: (token, tokenApi) ->
+        [type, numIndents, lineNumber] = token
+
+        if type in [ "[", "]" ]
+            @lintArray(token)
+            return undefined
+
+        return null if token.generated?
+
+        # HACK: CoffeeScript's lexer insert indentation in string
+        # interpolations that start with spaces e.g. "#{ 123 }"
+        # so ignore such cases. Are there other times an indentation
+        # could possibly follow a '+'?
+        previous = tokenApi.peek(-2)
+        isInterpIndent = previous and previous[0] == '+'
+
+        # Ignore the indentation inside of an array, so that
+        # we can allow things like:
+        #   x = ["foo",
+        #             "bar"]
+        previous = tokenApi.peek(-1)
+        isArrayIndent = @inArray() and previous?.newLine
+
+        # Ignore indents used to for formatting on multi-line expressions, so
+        # we can allow things like:
+        #   a = b =
+        #     c = d
+        previousSymbol = tokenApi.peek(-1)?[0]
+        isMultiline = previousSymbol in ['=', ',']
+
+        # Summarize the indentation conditions we'd like to ignore
+        ignoreIndent = isInterpIndent or isArrayIndent or isMultiline
+
+        # Compensate for indentation in function invocations that span multiple
+        # lines, which can be ignored.
+        if @isChainedCall tokenApi
+            { lines, lineNumber } = tokenApi
+            currentLine = lines[lineNumber]
+            prevNum = 1
+
+            # keep going back until we are not at a comment or a blank line
+            prevNum += 1 while (/^\s*(#|$)/.test(lines[lineNumber - prevNum]))
+            previousLine = lines[lineNumber - prevNum]
+
+            previousIndentation = previousLine.match(/^(\s*)/)[1].length
+            # I don't know why, but when inside a function, you make a chained
+            # call and define an inline callback as a parameter, the body of
+            # that callback gets the indentation reported higher than it really
+            # is. See issue #88
+            # NOTE: Adding this line moved the cyclomatic complexity over the
+            # limit, I'm not sure why
+            numIndents = currentLine.match(/^(\s*)/)[1].length
+            numIndents -= previousIndentation
+
+
+        # Now check the indentation.
+        expected = tokenApi.config[@rule.name].value
+        if not ignoreIndent and numIndents != expected
+            return {
+                context: "Expected #{expected} got #{numIndents}"
+            }
+    # Return true if the current token is inside of an array.
+    inArray : () ->
+        return @arrayTokens.length > 0
+
+    # Lint the given array token.
+    lintArray : (token) ->
+        # Track the array token pairs
+        if token[0] == '['
+            @arrayTokens.push(token)
+        else if token[0] == ']'
+            @arrayTokens.pop()
+        # Return null, since we're not really linting
+        # anything here.
+        null
+
+    # Return true if the current token is part of a property access
+    # that is split across lines, for example:
+    #   $('body')
+    #       .addClass('foo')
+    #       .removeClass('bar')
+    isChainedCall: (tokenApi) ->
+        { tokens, i } = tokenApi
+        # Get the index of the second most recent new line.
+        lines = (i for token, i in tokens[..i] when token.newLine?)
+
+        lastNewLineIndex = if lines then lines[lines.length - 2] else null
+
+        # Bail out if there is no such token.
+        return false if not lastNewLineIndex?
+
+        # Otherwise, figure out if that token or the next is an attribute
+        # look-up.
+        tokens = [tokens[lastNewLineIndex], tokens[lastNewLineIndex + 1]]
+
+        return !!(t for t in tokens when t and t[0] == '.').length
+
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/line_endings.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/line_endings.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/line_endings.coffee	(revision 516)
@@ -0,0 +1,30 @@
+
+
+module.exports = class LineEndings
+
+    rule:
+        name: 'line_endings'
+        level : 'ignore'
+        value : 'unix' # or 'windows'
+        message : 'Line contains incorrect line endings'
+        description: """
+            This rule ensures your project uses only <tt>windows</tt> or
+            <tt>unix</tt> line endings. This rule is disabled by default.
+            """
+
+    lintLine: (line, lineApi) ->
+        ending = lineApi.config[@rule.name]?.value
+
+        return null if not ending or lineApi.isLastLine() or not line
+
+        lastChar = line[line.length - 1]
+        valid = if ending == 'windows'
+            lastChar == '\r'
+        else if ending == 'unix'
+            lastChar != '\r'
+        else
+            throw new Error("unknown line ending type: #{ending}")
+        if not valid
+            return {context:"Expected #{ending}"}
+        else
+            return null
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/max_line_length.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/max_line_length.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/max_line_length.coffee	(revision 516)
@@ -0,0 +1,46 @@
+
+regexes =
+    literateComment: ///
+        ^
+        \#\s # This is prefixed on MarkDown lines.
+    ///
+    longUrlComment : ///
+      ^\s*\# # indentation, up to comment
+      \s*
+      http[^\s]+$ # Link that takes up the rest of the line without spaces.
+    ///
+
+module.exports = class MaxLineLength
+
+    rule:
+        name: 'max_line_length'
+        value: 80
+        level : 'error'
+        limitComments: true
+        message : 'Line exceeds maximum allowed length'
+        description: """
+            This rule imposes a maximum line length on your code. <a
+            href="http://www.python.org/dev/peps/pep-0008/">Python's style
+            guide</a> does a good job explaining why you might want to limit the
+            length of your lines, though this is a matter of taste.
+
+            Lines can be no longer than eighty characters by default.
+            """
+
+    lintLine: (line, lineApi) ->
+        max = lineApi.config[@rule.name]?.value
+        limitComments = lineApi.config[@rule.name]?.limitComments
+
+        lineLength = line.length
+        if lineApi.isLiterate() and regexes.literateComment.test(line)
+            lineLength -= 2
+
+        if max and max < lineLength and not regexes.longUrlComment.test(line)
+
+            unless limitComments
+                if lineApi.getLineTokens().length is 0
+                    return
+
+            return {
+                context: "Length is #{lineLength}, max is #{max}"
+            }
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/missing_fat_arrows.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/missing_fat_arrows.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/missing_fat_arrows.coffee	(revision 516)
@@ -0,0 +1,63 @@
+isCode = (node) -> node?.constructor.name is 'Code'
+isClass = (node) -> node.constructor.name is 'Class'
+isValue = (node) -> node.constructor.name is 'Value'
+isObject = (node) -> node.constructor.name is 'Obj'
+isThis = (node) -> isValue(node) and node.base.value is 'this'
+isFatArrowCode = (node) -> isCode(node) and node.bound
+
+any = (arr, test) -> arr.reduce ((res, elt) -> res or test elt), false
+
+needsFatArrow = (node) ->
+    isCode(node) and (
+        any(node.params, (param) -> param.contains(isThis)?) or
+        node.body.contains(isThis)?
+      )
+
+methodsOfClass = (classNode) ->
+    bodyNodes = classNode.body.expressions
+    returnNode = bodyNodes[bodyNodes.length - 1]
+    if returnNode? and isValue(returnNode) and isObject(returnNode.base)
+        returnNode.base.properties
+            .map((assignNode) -> assignNode.value)
+            .filter(isCode)
+    else []
+
+module.exports = class MissingFatArrows
+
+    rule:
+        name: 'missing_fat_arrows'
+        level: 'ignore'
+        message: 'Used `this` in a function without a fat arrow'
+        description: """
+            Warns when you use `this` inside a function that wasn't defined
+            with a fat arrow. This rule does not apply to methods defined in a
+            class, since they have `this` bound to the class instance (or the
+            class itself, for class methods).
+
+            It is impossible to statically determine whether a function using
+            `this` will be bound with the correct `this` value due to language
+            features like `Function.prototype.call` and
+            `Function.prototype.bind`, so this rule may produce false positives.
+            """
+
+    lintAST: (node, astApi) ->
+        @lintNode node, astApi
+        undefined
+
+    lintNode: (node, astApi, methods = []) ->
+        if (not isFatArrowCode node) and
+                # Ignore any nodes we know to be methods
+                (node not in methods) and
+                (needsFatArrow node)
+            error = astApi.createError
+                lineNumber: node.locationData.first_line + 1
+            @errors.push error
+
+        node.eachChild (child) => @lintNode child, astApi,
+            switch
+                when isClass node then methodsOfClass node
+                # Once we've hit a function, we know we can't be in the top
+                # level of a method anymore, so we can safely reset the methods
+                # to empty to save work.
+                when isCode node then []
+                else methods
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/newlines_after_classes.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/newlines_after_classes.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/newlines_after_classes.coffee	(revision 516)
@@ -0,0 +1,26 @@
+
+module.exports = class NewlinesAfterClasses
+
+    rule:
+        name: 'newlines_after_classes'
+        value : 3
+        level : 'ignore'
+        message : 'Wrong count of newlines between a class and other code'
+        description: "Checks the number of newlines between classes and other
+        code"
+
+    lintLine: (line, lineApi) ->
+        ending = lineApi.config[@rule.name].value
+
+        return null if not ending or lineApi.isLastLine()
+
+        { lineNumber, context } = lineApi
+        if not context.class.inClass and
+                context.class.lastUnemptyLineInClass? and
+                (lineNumber - context.class.lastUnemptyLineInClass) isnt
+                ending
+            got = lineNumber - context.class.lastUnemptyLineInClass
+            return  { context: "Expected #{ending} got #{got}" }
+
+        null
+
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_backticks.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_backticks.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_backticks.coffee	(revision 516)
@@ -0,0 +1,20 @@
+
+module.exports = class NoBackticks
+
+    rule:
+        name: 'no_backticks'
+        level : 'error'
+        message : 'Backticks are forbidden'
+        description: """
+            Backticks allow snippets of JavaScript to be embedded in
+            CoffeeScript. While some folks consider backticks useful in a few
+            niche circumstances, they should be avoided because so none of
+            JavaScript's "bad parts", like <tt>with</tt> and <tt>eval</tt>,
+            sneak into CoffeeScript.
+            This rule is enabled by default.
+            """
+
+    tokens: [ "JS" ]
+
+    lintToken : (token, tokenApi) ->
+        true
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_empty_param_list.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_empty_param_list.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_empty_param_list.coffee	(revision 516)
@@ -0,0 +1,27 @@
+
+
+module.exports = class NoEmptyParamList
+
+    rule:
+        name: 'no_empty_param_list'
+        level : 'ignore'
+        message : 'Empty parameter list is forbidden'
+        description: """
+            This rule prohibits empty parameter lists in function definitions.
+            <pre>
+            <code># The empty parameter list in here is unnecessary:
+            myFunction = () -&gt;
+
+            # We might favor this instead:
+            myFunction = -&gt;
+            </code>
+            </pre>
+            Empty parameter lists are permitted by default.
+            """
+
+    tokens: [ "PARAM_START" ]
+
+    lintToken : (token, tokenApi) ->
+        nextType = tokenApi.peek()[0]
+        return nextType is 'PARAM_END'
+
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_implicit_braces.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_implicit_braces.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_implicit_braces.coffee	(revision 516)
@@ -0,0 +1,52 @@
+
+module.exports = class NoImplicitBraces
+
+    rule:
+        name: 'no_implicit_braces'
+        level : 'ignore'
+        message : 'Implicit braces are forbidden'
+        strict: true
+        description: """
+            This rule prohibits implicit braces when declaring object literals.
+            Implicit braces can make code more difficult to understand,
+            especially when used in combination with optional parenthesis.
+            <pre>
+            <code># Do you find this code ambiguous? Is it a
+            # function call with three arguments or four?
+            myFunction a, b, 1:2, 3:4
+
+            # While the same code written in a more
+            # explicit manner has no ambiguity.
+            myFunction(a, b, {1:2, 3:4})
+            </code>
+            </pre>
+            Implicit braces are permitted by default, since their use is
+            idiomatic CoffeeScript.
+            """
+
+    tokens: [ "{" ]
+
+    lintToken: (token, tokenApi) ->
+        if token.generated
+
+            # If strict mode is turned off it allows implicit braces when the
+            # object is declared over multiple lines.
+            unless tokenApi.config[@rule.name].strict
+                [ previousToken ] = tokenApi.peek(-1)
+                if  previousToken is 'INDENT'
+                    return
+
+            @isPartOfClass(tokenApi)
+
+
+    isPartOfClass: (tokenApi) ->
+            # Peek back to the last line break. If there is a class
+            # definition, ignore the generated brace.
+            i = -1
+            loop
+                t = tokenApi.peek(i)
+                if not t? or t[0] == 'TERMINATOR'
+                    return true
+                if t[0] == 'CLASS'
+                    return null
+                i -= 1
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_implicit_parens.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_implicit_parens.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_implicit_parens.coffee	(revision 516)
@@ -0,0 +1,27 @@
+
+module.exports = class NoImplicitParens
+
+    rule:
+        name: 'no_implicit_parens'
+        level : 'ignore'
+        message : 'Implicit parens are forbidden'
+        description: """
+            This rule prohibits implicit parens on function calls.
+            <pre>
+            <code># Some folks don't like this style of coding.
+            myFunction a, b, c
+
+            # And would rather it always be written like this:
+            myFunction(a, b, c)
+            </code>
+            </pre>
+            Implicit parens are permitted by default, since their use is
+            idiomatic CoffeeScript.
+            """
+
+
+    tokens: [ "CALL_START" ]
+
+    lintToken : (token, tokenApi) ->
+        return token.generated
+
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_plusplus.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_plusplus.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_plusplus.coffee	(revision 516)
@@ -0,0 +1,19 @@
+
+module.exports = class NoPlusPlus
+
+    rule:
+        name: 'no_plusplus'
+        level : 'ignore'
+        message : 'The increment and decrement operators are forbidden'
+        description: """
+            This rule forbids the increment and decrement arithmetic operators.
+            Some people believe the <tt>++</tt> and <tt>--</tt> to be cryptic
+            and the cause of bugs due to misunderstandings of their precedence
+            rules.
+            This rule is disabled by default.
+            """
+
+    tokens: [ "++", "--" ]
+
+    lintToken : (token, tokenApi) ->
+        return {context : "found '#{token[0]}'"}
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_stand_alone_at.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_stand_alone_at.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_stand_alone_at.coffee	(revision 516)
@@ -0,0 +1,38 @@
+
+module.exports = class NoStandAloneAt
+
+    rule:
+        name: 'no_stand_alone_at'
+        level : 'ignore'
+        message : '@ must not be used stand alone'
+        description: """
+            This rule checks that no stand alone @ are in use, they are
+            discouraged. Further information in CoffeScript issue <a
+            href="https://github.com/jashkenas/coffee-script/issues/1601">
+            #1601</a>
+            """
+
+
+    tokens: [ "@" ]
+
+    lintToken : (token, tokenApi) ->
+        nextToken = tokenApi.peek()
+        spaced = token.spaced
+        isIdentifier = nextToken[0] == 'IDENTIFIER'
+        isIndexStart = nextToken[0] == 'INDEX_START'
+        isDot = nextToken[0] == '.'
+
+        # https://github.com/jashkenas/coffee-script/issues/1601
+        # @::foo is valid, but @:: behaves inconsistently and is planned for
+        # removal. Technically @:: is a stand alone ::, but I think it makes
+        # sense to group it into no_stand_alone_at
+        if nextToken[0] == '::'
+            protoProperty = tokenApi.peek(2)
+            isValidProtoProperty = protoProperty[0] == 'IDENTIFIER'
+
+        if spaced or (not isIdentifier and not isIndexStart and
+        not isDot and not isValidProtoProperty)
+            return true
+
+
+
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_tabs.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_tabs.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_tabs.coffee	(revision 516)
@@ -0,0 +1,22 @@
+
+indentationRegex = /\S/
+module.exports = class NoTabs
+    rule:
+        name: 'no_tabs'
+        level : 'error'
+        message : 'Line contains tab indentation'
+        description: """
+            This rule forbids tabs in indentation. Enough said. It is enabled by
+            default.
+            """
+
+    lintLine: (line, lineApi) ->
+        # Only check lines that have compiled tokens. This helps
+        # us ignore tabs in the middle of multi line strings, heredocs, etc.
+        # since they are all reduced to a single token whose line number
+        # is the start of the expression.
+        indentation = line.split(indentationRegex)[0]
+        if lineApi.lineHasToken() and '\t' in indentation
+            true
+        else
+            null
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_throwing_strings.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_throwing_strings.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_throwing_strings.coffee	(revision 516)
@@ -0,0 +1,36 @@
+
+module.exports = class NoThrowingStrings
+
+    rule:
+        name: 'no_throwing_strings'
+        level : 'error'
+        message : 'Throwing strings is forbidden'
+        description: """
+            This rule forbids throwing string literals or interpolations. While
+            JavaScript (and CoffeeScript by extension) allow any expression to
+            be thrown, it is best to only throw <a
+            href="https://developer.mozilla.org
+            /en/JavaScript/Reference/Global_Objects/Error"> Error</a> objects,
+            because they contain valuable debugging information like the stack
+            trace. Because of JavaScript's dynamic nature, CoffeeLint cannot
+            ensure you are always throwing instances of <tt>Error</tt>. It will
+            only catch the simple but real case of throwing literal strings.
+            <pre>
+            <code># CoffeeLint will catch this:
+            throw "i made a boo boo"
+
+            # ... but not this:
+            throw getSomeString()
+            </code>
+            </pre>
+            This rule is enabled by default.
+            """
+
+    tokens: [ "THROW" ]
+
+    lintToken : (token, tokenApi) ->
+        [n1, n2] = [tokenApi.peek(), tokenApi.peek(2)]
+        # Catch literals and string interpolations, which are wrapped in
+        # parens.
+        nextIsString = n1[0] == 'STRING' or (n1[0] == '(' and n2[0] == 'STRING')
+        return nextIsString
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_trailing_semicolons.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_trailing_semicolons.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_trailing_semicolons.coffee	(revision 516)
@@ -0,0 +1,42 @@
+
+regexes =
+    trailingSemicolon : /;\r?$/
+
+module.exports = class NoTrailingSemicolons
+
+    rule:
+        name: 'no_trailing_semicolons'
+        level : 'error'
+        message : 'Line contains a trailing semicolon'
+        description: """
+            This rule prohibits trailing semicolons, since they are needless
+            cruft in CoffeeScript.
+            <pre>
+            <code># This semicolon is meaningful.
+            x = '1234'; console.log(x)
+
+            # This semicolon is redundant.
+            alert('end of line');
+            </code>
+            </pre>
+            Trailing semicolons are forbidden by default.
+            """
+
+
+    lintLine: (line, lineApi) ->
+
+        # The TERMINATOR token is extended through to the next token. As a
+        # result a line with a comment DOES have a token: the TERMINATOR from
+        # the last line of code.
+        lineTokens = lineApi.getLineTokens()
+        if lineTokens.length is 1 and lineTokens[0][0] is 'TERMINATOR'
+            return
+
+        hasSemicolon = regexes.trailingSemicolon.test(line)
+        [first..., last] = lineApi.getLineTokens()
+        hasNewLine = last and last.newLine?
+        # Don't throw errors when the contents of  multiline strings,
+        # regexes and the like end in ";"
+        if hasSemicolon and not hasNewLine and lineApi.lineHasToken() and
+                last[0] isnt 'STRING'
+            return true
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_trailing_whitespace.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_trailing_whitespace.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_trailing_whitespace.coffee	(revision 516)
@@ -0,0 +1,44 @@
+
+regexes =
+    trailingWhitespace : /[^\s]+[\t ]+\r?$/
+    onlySpaces: /^[\t ]+\r?$/
+    lineHasComment : /^\s*[^\#]*\#/
+
+module.exports = class NoTrailingWhitespace
+
+    rule:
+        name: 'no_trailing_whitespace'
+        level : 'error'
+        message : 'Line ends with trailing whitespace'
+        allowed_in_comments : false
+        allowed_in_empty_lines: true
+        description: """
+            This rule forbids trailing whitespace in your code, since it is
+            needless cruft. It is enabled by default.
+            """
+
+    lintLine: (line, lineApi) ->
+        unless lineApi.config['no_trailing_whitespace']?.allowed_in_empty_lines
+            if regexes.onlySpaces.test(line)
+                return true
+
+        if regexes.trailingWhitespace.test(line)
+            # By default only the regex above is needed.
+            unless lineApi.config['no_trailing_whitespace']?.allowed_in_comments
+                return true
+
+            line = line
+            tokens = lineApi.tokensByLine[lineApi.lineNumber]
+
+            # If we're in a block comment there won't be any tokens on this
+            # line. Some previous line holds the token spanning multiple lines.
+            if !tokens
+                return null
+
+            # To avoid confusion when a string might contain a "#", every string
+            # on this line will be removed. before checking for a comment
+            for str in (token[1] for token in tokens when token[0] == 'STRING')
+                line = line.replace(str, 'STRING')
+
+            if !regexes.lineHasComment.test(line)
+                return true
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_unnecessary_fat_arrows.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_unnecessary_fat_arrows.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/no_unnecessary_fat_arrows.coffee	(revision 516)
@@ -0,0 +1,36 @@
+isCode = (node) -> node.constructor.name is 'Code'
+isFatArrowCode = (node) -> isCode(node) and node.bound
+isThis = (node) ->
+    node.constructor.name is 'Value' and node.base.value is 'this'
+
+any = (arr, test) -> arr.reduce ((res, elt) -> res or test elt), false
+
+needsFatArrow = (node) ->
+    isCode(node) and (
+        any(node.params, (param) -> param.contains(isThis)?) or
+        node.body.contains(isThis)? or
+        node.body.contains((child) ->
+            isFatArrowCode(child) and needsFatArrow(child))?
+    )
+
+module.exports = class NoUnnecessaryFatArrows
+
+    rule:
+        name: 'no_unnecessary_fat_arrows'
+        level: 'warn'
+        message: 'Unnecessary fat arrow'
+        description: """
+            Disallows defining functions with fat arrows when `this`
+            is not used within the function.
+            """
+
+    lintAST: (node, astApi) ->
+        @lintNode node, astApi
+        undefined
+
+    lintNode: (node, astApi) ->
+        if (isFatArrowCode node) and (not needsFatArrow node)
+            error = astApi.createError
+                lineNumber: node.locationData.first_line + 1
+            @errors.push error
+        node.eachChild (child) => @lintNode child, astApi
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/non_empty_constructor_needs_parens.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/non_empty_constructor_needs_parens.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/non_empty_constructor_needs_parens.coffee	(revision 516)
@@ -0,0 +1,15 @@
+
+ParentClass = require './empty_constructor_needs_parens.coffee'
+
+module.exports = class NonEmptyConstructorNeedsParens extends ParentClass
+
+    rule:
+        name: 'non_empty_constructor_needs_parens'
+        level: 'ignore'
+        message: 'Invoking a constructor without parens and with arguments'
+        description:
+            "Requires constructors with parameters to include the parens"
+
+    handleExpectedCallStart: (expectedCallStart) ->
+        if expectedCallStart[0] is 'CALL_START' and expectedCallStart.generated
+            return true
Index: Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/space_operators.coffee
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/space_operators.coffee	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/node_modules/coffeelint/src/rules/space_operators.coffee	(revision 516)
@@ -0,0 +1,93 @@
+
+module.exports = class SpaceOperators
+
+    rule:
+        name: 'space_operators'
+        level : 'ignore'
+        message : 'Operators must be spaced properly'
+        description: "This rule enforces that operators have space around them."
+
+    tokens: [ "+", "-", "=", "MATH", "COMPARE", "LOGIC", "COMPOUND_ASSIGN",
+        "(", ")", "CALL_START", "CALL_END" ]
+
+    constructor: ->
+        @callTokens = []    # A stack tracking the call token pairs.
+        @parenTokens = []   # A stack tracking the parens token pairs.
+
+    lintToken : ([type], tokenApi) ->
+
+        # These just keep track of state
+        if type in [ "CALL_START", "CALL_END" ]
+            @lintCall arguments...
+            return undefined
+        if type in [ "(", ")" ]
+            @lintParens arguments...
+            return undefined
+
+
+        # These may return errors
+        if type in [ "+", "-" ]
+            @lintPlus arguments...
+        else
+            @lintMath arguments...
+
+    lintPlus: (token, tokenApi) ->
+        # We can't check this inside of interpolations right now, because the
+        # plusses used for the string type co-ercion are marked not spaced.
+        if @isInInterpolation() or @isInExtendedRegex()
+            return null
+
+        p = tokenApi.peek(-1)
+        unaries = ['TERMINATOR', '(', '=', '-', '+', ',', 'CALL_START',
+                    'INDEX_START', '..', '...', 'COMPARE', 'IF',
+                    'THROW', 'LOGIC', 'POST_IF', ':', '[', 'INDENT',
+                    'COMPOUND_ASSIGN', 'RETURN', 'MATH', 'BY', 'LEADING_WHEN']
+        isUnary = if not p then false else p[0] in unaries
+        if (isUnary and token.spaced) or
+                    (not isUnary and not token.spaced and not token.newLine)
+            return {context: token[1]}
+        else
+            null
+
+    lintMath: (token, tokenApi) ->
+        if not token.spaced and not token.newLine
+            return {context: token[1]}
+        else
+            null
+
+    isInExtendedRegex : () ->
+        for t in @callTokens
+            return true if t.isRegex
+        return false
+
+    lintCall : (token, tokenApi) ->
+        if token[0] == 'CALL_START'
+            p = tokenApi.peek(-1)
+            # Track regex calls, to know (approximately) if we're in an
+            # extended regex.
+            token.isRegex = p and p[0] == 'IDENTIFIER' and p[1] == 'RegExp'
+            @callTokens.push(token)
+        else
+            @callTokens.pop()
+        return null
+
+    isInInterpolation : () ->
+        for t in @parenTokens
+            return true if t.isInterpolation
+        return false
+
+    lintParens : (token, tokenApi) ->
+        if token[0] == '('
+            p1 = tokenApi.peek(-1)
+            n1 = tokenApi.peek(1)
+            n2 = tokenApi.peek(2)
+            # String interpolations start with '' + so start the type co-ercion,
+            # so track if we're inside of one. This is most definitely not
+            # 100% true but what else can we do?
+            i = n1 and n2 and n1[0] == 'STRING' and n2[0] == '+'
+            token.isInterpolation = i
+            @parenTokens.push(token)
+        else
+            @parenTokens.pop()
+        # We're not linting, just tracking interpolations.
+        null
Index: Dev/trunk/node_modules/grunt-coffeelint/package.json
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/package.json	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/package.json	(revision 516)
@@ -2,5 +2,5 @@
   "name": "grunt-coffeelint",
   "description": "Lint your Coffee",
-  "version": "0.0.7",
+  "version": "0.0.8",
   "homepage": "https://github.com/vojtajina/grunt-coffeelint",
   "author": {
@@ -40,5 +40,5 @@
   },
   "scripts": {
-    "test": "grunt test"
+    "test": "grunt default"
   },
   "peerDependencies": {
@@ -46,5 +46,5 @@
   },
   "dependencies": {
-    "coffeelint": "~0.5"
+    "coffeelint": "~1.0"
   },
   "devDependencies": {
@@ -56,11 +56,11 @@
     "gruntplugin"
   ],
-  "readme": "[![build status](https://secure.travis-ci.org/vojtajina/grunt-coffeelint.png)](http://travis-ci.org/vojtajina/grunt-coffeelint)\n# grunt-coffeelint\n\n**Lint your CoffeeScript by [CoffeeLint].**\n\n## Installation\n\nInstall npm package, next to your project's `Gruntfile.js` file:\n\n    npm install grunt-coffeelint\n\nAdd this line to your project's `Gruntfile.js`:\n\n    grunt.loadNpmTasks('grunt-coffeelint');\n\n\n## Configuration\n\n`coffeelint` is a multitask, so you can use it similary to `lint`, `watch` etc...\n\n````javascript\ngrunt.initConfig({\n    ...\n    coffeelint: {\n      app: ['app/*.coffee', 'scripts/*.coffee']\n      }\n    },\n    ...\n});\n````\n\n### Options per target\n\n````javascript\ngrunt.initConfig({\n    ...\n    coffeelint: {\n      app: ['app/*.coffee', 'scripts/*.coffee'],\n      tests: {\n        files: {\n          src: ['tests/*.coffee']\n        },\n        options: {\n          'no_trailing_whitespace': {\n            'level': 'error'\n          }\n        }\n      }\n    },\n    ...\n});\n````\n\n### Global - default options\n\n````javascript\ngrunt.initConfig({\n    ...\n    coffeelint: {\n      options: {\n        'no_trailing_whitespace': {\n          'level': 'error'\n        }\n      }\n    },\n    ...\n});\n````\n\nFor available options see [example configuration] or [coffeelint homepage].\n\n\n[CoffeeLint]: http://www.coffeelint.org/\n[coffeelint homepage]: http://www.coffeelint.org/\n[example configuration]: https://raw.github.com/clutchski/coffeelint/master/examples/coffeelint.json\n",
+  "readme": "[![build status](https://secure.travis-ci.org/vojtajina/grunt-coffeelint.png)](http://travis-ci.org/vojtajina/grunt-coffeelint)\n# grunt-coffeelint\n\n**Lint your CoffeeScript by [CoffeeLint].**\n\n## Installation\n\nInstall npm package, next to your project's `Gruntfile.js` file:\n\n    npm install grunt-coffeelint\n\nAdd this line to your project's `Gruntfile.js`:\n\n    grunt.loadNpmTasks('grunt-coffeelint');\n\n## Options\n\nA few additional options are supported:\n\n### force\nType: `Boolean`\nDefault value: `false`\n\nSet `force` to `true` to report CoffeeLint errors but not fail the task.\n\n## Configuration\n\n`coffeelint` is a multitask, so you can use it similary to `lint`, `watch` etc...\n\n````javascript\ngrunt.initConfig({\n    ...\n    coffeelint: {\n      app: ['app/*.coffee', 'scripts/*.coffee']\n      }\n    },\n    ...\n});\n````\n\n### Options per target\n\n````javascript\ngrunt.initConfig({\n    ...\n    coffeelint: {\n      app: ['app/*.coffee', 'scripts/*.coffee'],\n      tests: {\n        files: {\n          src: ['tests/*.coffee']\n        },\n        options: {\n          'no_trailing_whitespace': {\n            'level': 'error'\n          }\n        }\n      }\n    },\n    ...\n});\n````\n\n### Global - default options\n\n````javascript\ngrunt.initConfig({\n    ...\n    coffeelint: {\n      options: {\n        'no_trailing_whitespace': {\n          'level': 'error'\n        }\n      }\n    },\n    ...\n});\n````\n\nFor available options see [coffeelint homepage].\n\n[CoffeeLint]: http://www.coffeelint.org/\n[coffeelint homepage]: http://www.coffeelint.org/\n",
   "readmeFilename": "README.md",
-  "_id": "grunt-coffeelint@0.0.7",
+  "_id": "grunt-coffeelint@0.0.8",
   "dist": {
-    "shasum": "b782bf05aeb462dce2e566116849d369a1f19f4f"
+    "shasum": "149d6c5e8dd78b88a513b94daa274d5e6736fa52"
   },
-  "_from": "grunt-coffeelint@0.0.7",
-  "_resolved": "https://registry.npmjs.org/grunt-coffeelint/-/grunt-coffeelint-0.0.7.tgz"
+  "_from": "grunt-coffeelint@0.0.8",
+  "_resolved": "https://registry.npmjs.org/grunt-coffeelint/-/grunt-coffeelint-0.0.8.tgz"
 }
Index: Dev/trunk/node_modules/grunt-coffeelint/tasks/coffeelint.js
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/tasks/coffeelint.js	(revision 484)
+++ Dev/trunk/node_modules/grunt-coffeelint/tasks/coffeelint.js	(revision 516)
@@ -4,13 +4,23 @@
   grunt.registerMultiTask('coffeelint', 'Validate files with CoffeeLint', function() {
 
+    var errorCount = 0;
+    var warnCount = 0;
     var files = this.filesSrc;
     var options = this.options();
-    var errorCount = 0;
-    var warnCount = 0;
+
+    if (options.configFile != undefined) {
+      var config = grunt.file.readJSON(options.configFile);
+      options.configFile = undefined;
+      for (var key in options) {
+          config[key] = options[key];
+      }
+      options = config;
+    }
 
     files.forEach(function(file) {
       grunt.verbose.writeln('Linting ' + file + '...');
 
-      var errors = coffeelint.lint(grunt.file.read(file), options);
+      var literate = !!file.match(/\.(litcoffee|coffee\.md)$/i);
+      var errors = coffeelint.lint(grunt.file.read(file), options, literate);
 
       if (!errors.length) {
@@ -40,11 +50,10 @@
     });
 
-    if (errorCount) {
+    if (errorCount && !options.force) {
       return false;
     }
 
-    if (!warnCount) {
-      grunt.log.ok(files.length + ' file' + (files.length === 1 ? '' : 's') +
-          ' lint free.');
+    if (!warnCount && !errorCount) {
+      grunt.log.ok(files.length + ' file' + (files.length === 1 ? '' : 's') + ' lint free.');
     }
   });
Index: Dev/trunk/node_modules/grunt-coffeelint/tasks/coffeelint.js.orig
===================================================================
--- Dev/trunk/node_modules/grunt-coffeelint/tasks/coffeelint.js.orig	(revision 516)
+++ Dev/trunk/node_modules/grunt-coffeelint/tasks/coffeelint.js.orig	(revision 516)
@@ -0,0 +1,77 @@
+module.exports = function(grunt) {
+  var coffeelint = require('coffeelint');
+
+  grunt.registerMultiTask('coffeelint', 'Validate files with CoffeeLint', function() {
+
+<<<<<<< HEAD
+=======
+    var files = this.filesSrc;
+    var options = this.options({
+      force: false,
+      growl: false
+    });
+>>>>>>> Added support for Growl notification
+    var errorCount = 0;
+    var warnCount = 0;
+    var files = this.filesSrc;
+    var options = this.options();
+
+    if (options.configFile != undefined) {
+      var config = grunt.file.readJSON(options.configFile);
+      options.configFile = undefined;
+      for (var key in options) {
+          config[key] = options[key];
+      }
+      options = config;
+    }
+
+    var growl;
+    if (options.growl) {
+      growl = require('growl');
+    }
+
+    files.forEach(function(file) {
+      grunt.verbose.writeln('Linting ' + file + '...');
+
+      var literate = !!file.match(/\.(litcoffee|coffee\.md)$/i);
+      var errors = coffeelint.lint(grunt.file.read(file), options, literate);
+
+      if (!errors.length) {
+        return grunt.verbose.ok();
+      }
+
+      errors.forEach(function(error) {
+        var status, message;
+
+        if (error.level === 'error') {
+          errorCount += 1;
+          status = "[error]".red;
+        } else if (error.level === 'warn') {
+          warnCount += 1;
+          status = "[warn]".yellow;
+        } else {
+          return;
+        }
+
+        message = file + ':' + error.lineNumber + ' ' + error.message +
+            ' (' + error.rule + ')';
+
+        grunt.log.writeln(status + ' ' + message);
+        grunt.event.emit('coffeelint:' + error.level, error.level, message);
+        grunt.event.emit('coffeelint:any', error.level, message);
+
+        if (options.growl) {
+          growl(message, {title: "Coffeelint "+error.level, sticky: true});
+        }
+      });
+    });
+
+    if (errorCount && !options.force) {
+      return false;
+    }
+
+    if (!warnCount && !errorCount) {
+      grunt.log.ok(files.length + ' file' + (files.length === 1 ? '' : 's') + ' lint free.');
+    }
+  });
+};
