[CB-984] [weinre] weinre broken with node 0.8

    https://issues.apache.org/jira/browse/CB-984

* swapped grunt for wr
* updated pre-req versions (esp express)
* changes for path/fs.existsSync()
* print node version info verbosely at startup
diff --git a/.wr b/.wr
deleted file mode 100644
index 797e61e..0000000
--- a/.wr
+++ /dev/null
@@ -1,35 +0,0 @@
-# ---
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-# ---
-
---stdoutcolor blue
---stderrcolor red
-
-ant -f weinre.build/build.xml
-
-weinre.build/build.xml
-weinre.build/build.properties
-weinre.build/scripts
-weinre.doc
-weinre.server/interfaces
-weinre.server/lib
-weinre.server/README.md
-weinre.server/weinre
-weinre.server/weinre-hot
-weinre.web
-
diff --git a/README.md b/README.md
index 1640426..625c63c 100644
--- a/README.md
+++ b/README.md
@@ -124,8 +124,9 @@
 
 ### other fun development-time hacks ###
 
-If you have the [wr tool](https://github.com/pmuellr/wr) installed, there is
-a `.wr` file available to run the development builds.
+If you have the [grunt tool](https://github.com/cowboy/grunt) installed, there is
+a `grunt.js` file available to run the development builds when a source file
+changes.
 
 The build is growl-enabled, so you can see a quick message when the build 
 completes, as long as the `USE_GROWL` property is set in the 
@@ -136,8 +137,8 @@
 weinre server generated by the development build, whenever a weinre build
 completes.
 
-Putting this altogether, you can open two terminal windows, run `wr` in the 
-`weinre.build` directory to have a development build run whenever you change 
+Putting this altogether, you can open two terminal windows, run `grunt` in the 
+main directory to have a development build run whenever you change 
 the source, and then run `weinre-hot` in the `weinre.server` directory to have 
 the weinre server restart whenever a build completes, getting a growl 
 notification at that time.
@@ -163,6 +164,7 @@
 
 * edit the file `weinre.build/vendor.properties` as appropriate
 * run: `cd weinre.build`
+* run: `rm -rf vendor`
 * run: `ant -f update.vendor.xml`
 
 To update the files in `weinre.server/node_modules`:
@@ -171,4 +173,5 @@
 * run a build (see above), so that the file `weinre.server/package.json` file is created
 from the template you edited above
 * run: `cd weinre.server`
+* run: `rm -rf node_modules`
 * run: `npm install`
\ No newline at end of file
diff --git a/grunt.js b/grunt.js
new file mode 100644
index 0000000..0876003
--- /dev/null
+++ b/grunt.js
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// open "http://search.npmjs.org/#/grunt" ; sudo npm -g install grunt
+
+var child_process = require("child_process")
+
+//------------------------------------------------------------------------------
+// list of source files to watch
+//------------------------------------------------------------------------------
+var sourceFiles = [
+    "grunt.js",
+    
+    "weinre.build/*.sh", 
+    "weinre.build/*.properties", 
+    "weinre.build/*.xml", 
+    "weinre.build/*.template", 
+    "weinre.build/scripts/**/*", 
+    
+    "weinre.doc/**/*",
+    
+    "weinre.server/interfaces/**/*",
+    "weinre.server/lib/**/*",
+    "weinre.server/package.json",
+    "weinre.server/README.md",
+
+    "weinre.web/**/*"
+]
+
+//------------------------------------------------------------------------------
+var gruntConfig = {
+    watch: {
+        make: {
+            files: sourceFiles,
+            tasks: ["runAnt"]
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+module.exports = function(grunt) {
+    grunt.initConfig(gruntConfig)
+    
+    grunt.registerTask("default", "watch")
+    grunt.registerTask("runAnt", "run ant", function(){task_runAnt(this, grunt)})
+}
+
+//------------------------------------------------------------------------------
+// run "make"
+//------------------------------------------------------------------------------
+function task_runAnt(task, grunt) {
+    var done = task.async()
+    var make = child_process.spawn('ant', ['-f', 'weinre.build/build.xml'])
+    
+    make.stdout.on("data", function(data) {
+        grunt.log.write("" + data)
+    })
+    
+    make.stderr.on("data", function(data) {
+        grunt.log.error("" + data)
+    })
+    
+    make.on("exit", function(code) {
+        if (code === 0) return done(true)
+        
+        grunt.log.writeln("error running ant", code)
+        return done(false)
+    })
+}
+
diff --git a/weinre.build/package.json.template b/weinre.build/package.json.template
index 5b482b3..15d21e0 100644
--- a/weinre.build/package.json.template
+++ b/weinre.build/package.json.template
@@ -21,10 +21,10 @@
     },
   "dependencies":
     {
-      "coffee-script": "1.2.0",
-      "express":       "2.5.7",
-      "nopt":          "1.0.10",
-      "underscore":    "1.3.1"
+      "coffee-script": "1.3.x",
+      "express":       "2.5.x",
+      "nopt":          "1.0.x",
+      "underscore":    "1.3.x"
     },
   "main" :             "./lib/weinre",
   "bin":
diff --git a/weinre.doc/ChangeLog.body.html b/weinre.doc/ChangeLog.body.html
index b5167a7..1d2e0ad 100644
--- a/weinre.doc/ChangeLog.body.html
+++ b/weinre.doc/ChangeLog.body.html
@@ -45,6 +45,8 @@
 <li><a href="https://issues.apache.org/jira/browse/CB-294">CB-294</a>  - various exceptions thrown in the target in WeinreTargetEventsImpl.connectionCreated()
 <li><a href="https://issues.apache.org/jira/browse/CB-315">CB-315</a>  - generate valid Apache release artifact names
 <li><a href="https://issues.apache.org/jira/browse/CB-540">CB-540</a>  - ability to easily navigate to particular place in DOM via bookmarks/jump to selector
+<li><a href="https://issues.apache.org/jira/browse/CB-873">CB-873</a>  - setTimeout() and setInterval() usage with string arguments is busted
+<li><a href="https://issues.apache.org/jira/browse/CB-984">CB-984</a>  - cannot install weinre with Node 0.8.0
 </ul>
 
 <!-- ======================================================================= -->
diff --git a/weinre.server/lib/cli.coffee b/weinre.server/lib/cli.coffee
index f34ddeb..390d280 100644
--- a/weinre.server/lib/cli.coffee
+++ b/weinre.server/lib/cli.coffee
@@ -104,7 +104,7 @@
     properties = {}
     
     fileName = replaceTilde '~/.weinre/server.properties'
-    return properties if !path.existsSync(fileName)
+    return properties if !utils.fileExistsSync(fileName)
     
     contents = fs.readFileSync(fileName, 'utf8')
     lines    = contents.split('\n')
diff --git a/weinre.server/lib/serviceManager.coffee b/weinre.server/lib/serviceManager.coffee
index 2a9f6c8..ade070f 100644
--- a/weinre.server/lib/serviceManager.coffee
+++ b/weinre.server/lib/serviceManager.coffee
@@ -83,7 +83,7 @@
     jsonName = "#{name}.json"
     fileName = path.join utils.options.staticWebDir, 'interfaces', jsonName
     
-    return null if !path.existsSync(fileName) 
+    return null if !utils.fileExistsSync(fileName) 
     
     contents = fs.readFileSync(fileName, 'utf8')
     
diff --git a/weinre.server/lib/utils.coffee b/weinre.server/lib/utils.coffee
index 2225d22..ee5a72b 100644
--- a/weinre.server/lib/utils.coffee
+++ b/weinre.server/lib/utils.coffee
@@ -17,6 +17,7 @@
 # under the License.
 #-------------------------------------------------------------------------------
 
+fs   = require 'fs'
 path = require 'path'
 
 utils = exports
@@ -123,6 +124,28 @@
     aClass
 
 #-------------------------------------------------------------------------------
+utils.alignLeft = (string, length) ->
+    while string.length < length
+        string = "#{string} "
+        
+    string
+
+#-------------------------------------------------------------------------------
+utils.alignRight = (string, length) ->
+    while string.length < length
+        string = " #{string}"
+
+    string
+
+#-------------------------------------------------------------------------------
+utils.fileExistsSync = (name) ->
+    
+    if fs.existsSync
+        return fs.existsSync name
+        
+    return path.existsSync(name)
+
+#-------------------------------------------------------------------------------
 Error.prepareStackTrace = (error, structuredStackTrace) ->
     result = []
     result.push "---------------------------------------------------------"
@@ -154,8 +177,8 @@
         file = path.basename(file)
         line = "#{line}"
         
-        file = alignRight(file, longestFile)
-        line = alignLeft( line, longestLine)
+        file = utils.alignRight(file, longestFile)
+        line = utils.alignLeft( line, longestLine)
         
         funcName = func.displayName ||
                    func.name || 
@@ -171,17 +194,3 @@
         result.push "   #{file}:#{line} - #{funcName}()"
         
     result.join "\n"
-
-#-------------------------------------------------------------------------------
-alignLeft = (string, length) ->
-    while string.length < length
-        string = "#{string} "
-        
-    string
-
-#-------------------------------------------------------------------------------
-alignRight = (string, length) ->
-    while string.length < length
-        string = " #{string}"
-
-    string
diff --git a/weinre.server/lib/weinre.coffee b/weinre.server/lib/weinre.coffee
index 6027d05..8b7945d 100644
--- a/weinre.server/lib/weinre.coffee
+++ b/weinre.server/lib/weinre.coffee
@@ -22,6 +22,7 @@
 dns  = require 'dns'
 path = require 'path'
 
+_       = require 'underscore'
 express = require 'express'
 
 utils              = require './utils'
@@ -63,12 +64,22 @@
     
     utils.logVerbose "pid:                 #{process.pid}"
     utils.logVerbose "version:             #{getVersion()}"
-    utils.logVerbose "option httpPort:     #{options.httpPort}"
-    utils.logVerbose "option boundHost:    #{options.boundHost}"
-    utils.logVerbose "option verbose:      #{options.verbose}"
-    utils.logVerbose "option debug:        #{options.debug}"
-    utils.logVerbose "option readTimeout:  #{options.readTimeout}"
-    utils.logVerbose "option deathTimeout: #{options.deathTimeout}"
+    utils.logVerbose "node versions:"
+    
+    names   = _.keys(process.versions)
+    reducer = (memo, name) -> Math.max(memo, name.length)
+    nameLen = _.reduce(names, reducer, 0)
+    
+    for name in names
+        utils.logVerbose "   #{utils.alignLeft(name, nameLen)}: #{process.versions[name]}"
+    
+    utils.logVerbose "options:"
+    utils.logVerbose "   httpPort:     #{options.httpPort}"
+    utils.logVerbose "   boundHost:    #{options.boundHost}"
+    utils.logVerbose "   verbose:      #{options.verbose}"
+    utils.logVerbose "   debug:        #{options.debug}"
+    utils.logVerbose "   readTimeout:  #{options.readTimeout}"
+    utils.logVerbose "   deathTimeout: #{options.deathTimeout}"
 
     utils.setOptions options
 
@@ -157,7 +168,7 @@
 #-------------------------------------------------------------------------------
 getStaticWebDir = () ->
     webDir = path.normalize path.join(__dirname,'../web')
-    return webDir if path.existsSync webDir
+    return webDir if utils.fileExistsSync webDir
     
     utils.exit 'unable to find static files to serve in #{webDir}; did you do a build?'
     
diff --git a/weinre.server/node_modules/.bin/cake b/weinre.server/node_modules/.bin/cake
index d95f32a..0b37b91 120000
--- a/weinre.server/node_modules/.bin/cake
+++ b/weinre.server/node_modules/.bin/cake
@@ -1 +1 @@
-../coffee-script/bin/cake
\ No newline at end of file
+/Users/pmuellr/Projects/incubator-cordova-weinre/weinre.server/node_modules/coffee-script/bin/cake
\ No newline at end of file
diff --git a/weinre.server/node_modules/.bin/coffee b/weinre.server/node_modules/.bin/coffee
index b57f275..70a193a 120000
--- a/weinre.server/node_modules/.bin/coffee
+++ b/weinre.server/node_modules/.bin/coffee
@@ -1 +1 @@
-../coffee-script/bin/coffee
\ No newline at end of file
+/Users/pmuellr/Projects/incubator-cordova-weinre/weinre.server/node_modules/coffee-script/bin/coffee
\ No newline at end of file
diff --git a/weinre.server/node_modules/.bin/express b/weinre.server/node_modules/.bin/express
index b741d99..57a31fa 120000
--- a/weinre.server/node_modules/.bin/express
+++ b/weinre.server/node_modules/.bin/express
@@ -1 +1 @@
-../express/bin/express
\ No newline at end of file
+/Users/pmuellr/Projects/incubator-cordova-weinre/weinre.server/node_modules/express/bin/express
\ No newline at end of file
diff --git a/weinre.server/node_modules/.bin/nopt b/weinre.server/node_modules/.bin/nopt
index 6b6566e..f50226a 120000
--- a/weinre.server/node_modules/.bin/nopt
+++ b/weinre.server/node_modules/.bin/nopt
@@ -1 +1 @@
-../nopt/bin/nopt.js
\ No newline at end of file
+/Users/pmuellr/Projects/incubator-cordova-weinre/weinre.server/node_modules/nopt/bin/nopt.js
\ No newline at end of file
diff --git a/weinre.server/node_modules/coffee-script/CNAME b/weinre.server/node_modules/coffee-script/CNAME
new file mode 100644
index 0000000..faadabe
--- /dev/null
+++ b/weinre.server/node_modules/coffee-script/CNAME
@@ -0,0 +1 @@
+coffeescript.org
\ No newline at end of file
diff --git a/weinre.server/node_modules/coffee-script/LICENSE b/weinre.server/node_modules/coffee-script/LICENSE
index 8cb3cfd..dbe6b4e 100644
--- a/weinre.server/node_modules/coffee-script/LICENSE
+++ b/weinre.server/node_modules/coffee-script/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2011 Jeremy Ashkenas
+Copyright (c) 2009-2012 Jeremy Ashkenas
 
 Permission is hereby granted, free of charge, to any person
 obtaining a copy of this software and associated documentation
diff --git a/weinre.server/node_modules/coffee-script/lib/coffee-script/browser.js b/weinre.server/node_modules/coffee-script/lib/coffee-script/browser.js
index ec2e479..825cbf3 100644
--- a/weinre.server/node_modules/coffee-script/lib/coffee-script/browser.js
+++ b/weinre.server/node_modules/coffee-script/lib/coffee-script/browser.js
@@ -1,3 +1,4 @@
+// Generated by CoffeeScript 1.3.3
 (function() {
   var CoffeeScript, runScripts;
 
@@ -5,23 +6,36 @@
 
   CoffeeScript.require = require;
 
-  CoffeeScript.eval = function(code, options) {
+  CoffeeScript["eval"] = function(code, options) {
+    var _ref;
+    if (options == null) {
+      options = {};
+    }
+    if ((_ref = options.bare) == null) {
+      options.bare = true;
+    }
     return eval(CoffeeScript.compile(code, options));
   };
 
   CoffeeScript.run = function(code, options) {
-    if (options == null) options = {};
+    if (options == null) {
+      options = {};
+    }
     options.bare = true;
     return Function(CoffeeScript.compile(code, options))();
   };
 
-  if (typeof window === "undefined" || window === null) return;
+  if (typeof window === "undefined" || window === null) {
+    return;
+  }
 
   CoffeeScript.load = function(url, callback) {
     var xhr;
     xhr = new (window.ActiveXObject || XMLHttpRequest)('Microsoft.XMLHTTP');
     xhr.open('GET', url, true);
-    if ('overrideMimeType' in xhr) xhr.overrideMimeType('text/plain');
+    if ('overrideMimeType' in xhr) {
+      xhr.overrideMimeType('text/plain');
+    }
     xhr.onreadystatechange = function() {
       var _ref;
       if (xhr.readyState === 4) {
@@ -30,7 +44,9 @@
         } else {
           throw new Error("Could not load " + url);
         }
-        if (callback) return callback();
+        if (callback) {
+          return callback();
+        }
       }
     };
     return xhr.send(null);
@@ -44,7 +60,9 @@
       _results = [];
       for (_i = 0, _len = scripts.length; _i < _len; _i++) {
         s = scripts[_i];
-        if (s.type === 'text/coffeescript') _results.push(s);
+        if (s.type === 'text/coffeescript') {
+          _results.push(s);
+        }
       }
       return _results;
     })();
diff --git a/weinre.server/node_modules/coffee-script/lib/coffee-script/cake.js b/weinre.server/node_modules/coffee-script/lib/coffee-script/cake.js
index 986d5cc..1523418 100644
--- a/weinre.server/node_modules/coffee-script/lib/coffee-script/cake.js
+++ b/weinre.server/node_modules/coffee-script/lib/coffee-script/cake.js
@@ -1,3 +1,4 @@
+// Generated by CoffeeScript 1.3.3
 (function() {
   var CoffeeScript, cakefileDirectory, fatalError, fs, helpers, missingTask, oparse, options, optparse, path, printTasks, switches, tasks;
 
@@ -35,7 +36,9 @@
       return switches.push([letter, flag, description]);
     },
     invoke: function(name) {
-      if (!tasks[name]) missingTask(name);
+      if (!tasks[name]) {
+        missingTask(name);
+      }
       return tasks[name].action(options);
     }
   });
@@ -49,13 +52,15 @@
       filename: 'Cakefile'
     });
     oparse = new optparse.OptionParser(switches);
-    if (!args.length) return printTasks();
+    if (!args.length) {
+      return printTasks();
+    }
     try {
       options = oparse.parse(args);
     } catch (e) {
       return fatalError("" + e);
     }
-    _ref = options.arguments;
+    _ref = options["arguments"];
     _results = [];
     for (_i = 0, _len = _ref.length; _i < _len; _i++) {
       arg = _ref[_i];
@@ -65,8 +70,9 @@
   };
 
   printTasks = function() {
-    var cakefilePath, desc, name, spaces, task;
-    cakefilePath = path.join(path.relative(__originalDirname, process.cwd()), 'Cakefile');
+    var cakefilePath, desc, name, relative, spaces, task;
+    relative = path.relative || path.resolve;
+    cakefilePath = path.join(relative(__originalDirname, process.cwd()), 'Cakefile');
     console.log("" + cakefilePath + " defines the following tasks:\n");
     for (name in tasks) {
       task = tasks[name];
@@ -75,7 +81,9 @@
       desc = task.description ? "# " + task.description : '';
       console.log("cake " + name + spaces + " " + desc);
     }
-    if (switches.length) return console.log(oparse.help());
+    if (switches.length) {
+      return console.log(oparse.help());
+    }
   };
 
   fatalError = function(message) {
@@ -90,9 +98,13 @@
 
   cakefileDirectory = function(dir) {
     var parent;
-    if (path.existsSync(path.join(dir, 'Cakefile'))) return dir;
+    if (path.existsSync(path.join(dir, 'Cakefile'))) {
+      return dir;
+    }
     parent = path.normalize(path.join(dir, '..'));
-    if (parent !== dir) return cakefileDirectory(parent);
+    if (parent !== dir) {
+      return cakefileDirectory(parent);
+    }
     throw new Error("Cakefile not found in " + (process.cwd()));
   };
 
diff --git a/weinre.server/node_modules/coffee-script/lib/coffee-script/coffee-script.js b/weinre.server/node_modules/coffee-script/lib/coffee-script/coffee-script.js
index fd410ba..c43fa49 100644
--- a/weinre.server/node_modules/coffee-script/lib/coffee-script/coffee-script.js
+++ b/weinre.server/node_modules/coffee-script/lib/coffee-script/coffee-script.js
@@ -1,6 +1,7 @@
+// Generated by CoffeeScript 1.3.3
 (function() {
   var Lexer, RESERVED, compile, fs, lexer, parser, path, vm, _ref,
-    __hasProp = Object.prototype.hasOwnProperty;
+    __hasProp = {}.hasOwnProperty;
 
   fs = require('fs');
 
@@ -26,24 +27,31 @@
     });
   }
 
-  exports.VERSION = '1.2.0';
+  exports.VERSION = '1.3.3';
 
   exports.RESERVED = RESERVED;
 
   exports.helpers = require('./helpers');
 
   exports.compile = compile = function(code, options) {
-    var merge;
-    if (options == null) options = {};
+    var header, js, merge;
+    if (options == null) {
+      options = {};
+    }
     merge = exports.helpers.merge;
     try {
-      return (parser.parse(lexer.tokenize(code))).compile(merge({}, options));
+      js = (parser.parse(lexer.tokenize(code))).compile(options);
+      if (!options.header) {
+        return js;
+      }
     } catch (err) {
       if (options.filename) {
         err.message = "In " + options.filename + ", " + err.message;
       }
       throw err;
     }
+    header = "Generated by CoffeeScript " + this.VERSION;
+    return "// " + header + "\n" + js;
   };
 
   exports.tokens = function(code, options) {
@@ -60,10 +68,13 @@
 
   exports.run = function(code, options) {
     var mainModule;
+    if (options == null) {
+      options = {};
+    }
     mainModule = require.main;
     mainModule.filename = process.argv[1] = options.filename ? fs.realpathSync(options.filename) : '.';
     mainModule.moduleCache && (mainModule.moduleCache = {});
-    mainModule.paths = require('module')._nodeModulePaths(path.dirname(options.filename));
+    mainModule.paths = require('module')._nodeModulePaths(path.dirname(fs.realpathSync(options.filename)));
     if (path.extname(mainModule.filename) !== '.coffee' || require.extensions) {
       return mainModule._compile(compile(code, options), mainModule.filename);
     } else {
@@ -71,10 +82,14 @@
     }
   };
 
-  exports.eval = function(code, options) {
-    var Module, Script, js, k, o, r, sandbox, v, _i, _len, _module, _ref2, _ref3, _require;
-    if (options == null) options = {};
-    if (!(code = code.trim())) return;
+  exports["eval"] = function(code, options) {
+    var Module, Script, js, k, o, r, sandbox, v, _i, _len, _module, _ref1, _ref2, _require;
+    if (options == null) {
+      options = {};
+    }
+    if (!(code = code.trim())) {
+      return;
+    }
     Script = vm.Script;
     if (Script) {
       if (options.sandbox != null) {
@@ -82,10 +97,10 @@
           sandbox = options.sandbox;
         } else {
           sandbox = Script.createContext();
-          _ref2 = options.sandbox;
-          for (k in _ref2) {
-            if (!__hasProp.call(_ref2, k)) continue;
-            v = _ref2[k];
+          _ref1 = options.sandbox;
+          for (k in _ref1) {
+            if (!__hasProp.call(_ref1, k)) continue;
+            v = _ref1[k];
             sandbox[k] = v;
           }
         }
@@ -102,10 +117,12 @@
           return Module._load(path, _module, true);
         };
         _module.filename = sandbox.__filename;
-        _ref3 = Object.getOwnPropertyNames(require);
-        for (_i = 0, _len = _ref3.length; _i < _len; _i++) {
-          r = _ref3[_i];
-          if (r !== 'paths') _require[r] = require[r];
+        _ref2 = Object.getOwnPropertyNames(require);
+        for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+          r = _ref2[_i];
+          if (r !== 'paths') {
+            _require[r] = require[r];
+          }
         }
         _require.paths = _module.paths = Module._nodeModulePaths(process.cwd());
         _require.resolve = function(request) {
@@ -132,8 +149,8 @@
 
   parser.lexer = {
     lex: function() {
-      var tag, _ref2;
-      _ref2 = this.tokens[this.pos++] || [''], tag = _ref2[0], this.yytext = _ref2[1], this.yylineno = _ref2[2];
+      var tag, _ref1;
+      _ref1 = this.tokens[this.pos++] || [''], tag = _ref1[0], this.yytext = _ref1[1], this.yylineno = _ref1[2];
       return tag;
     },
     setInput: function(tokens) {
diff --git a/weinre.server/node_modules/coffee-script/lib/coffee-script/command.js b/weinre.server/node_modules/coffee-script/lib/coffee-script/command.js
index da330b3..e02da9f 100644
--- a/weinre.server/node_modules/coffee-script/lib/coffee-script/command.js
+++ b/weinre.server/node_modules/coffee-script/lib/coffee-script/command.js
@@ -1,5 +1,6 @@
+// Generated by CoffeeScript 1.3.3
 (function() {
-  var BANNER, CoffeeScript, EventEmitter, SWITCHES, compileJoin, compileOptions, compilePath, compileScript, compileStdio, exec, forkNode, fs, helpers, joinTimeout, lint, loadRequires, 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, forkNode, fs, helpers, hidden, joinTimeout, lint, loadRequires, notSources, optionParser, optparse, opts, outputPath, parseOptions, path, printLine, printTokens, printWarn, removeSource, sourceCode, sources, spawn, timeLog, unwatchDir, usage, version, wait, watch, watchDir, watchers, writeJs, _ref;
 
   fs = require('fs');
 
@@ -25,7 +26,11 @@
     return process.stderr.write(line + '\n');
   };
 
-  BANNER = 'Usage: coffee [options] path/to/script.coffee\n\nIf called without options, `coffee` will run your script.';
+  hidden = function(file) {
+    return /^\.|~$/.test(file);
+  };
+
+  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'], ['-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'], ['-r', '--require [FILE*]', 'require a library before executing your script'], ['-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']];
 
@@ -42,21 +47,37 @@
   optionParser = null;
 
   exports.run = function() {
-    var source, _i, _len, _results;
+    var literals, source, _i, _len, _results;
     parseOptions();
-    if (opts.nodejs) return forkNode();
-    if (opts.help) return usage();
-    if (opts.version) return version();
-    if (opts.require) loadRequires();
-    if (opts.interactive) return require('./repl');
-    if (opts.watch && !fs.watch) {
-      printWarn("The --watch feature depends on Node v0.6.0+. You are running " + process.version + ".");
+    if (opts.nodejs) {
+      return forkNode();
     }
-    if (opts.stdio) return compileStdio();
-    if (opts.eval) return compileScript(null, sources[0]);
-    if (!sources.length) return require('./repl');
-    if (opts.run) opts.literals = sources.splice(1).concat(opts.literals);
-    process.argv = process.argv.slice(0, 2).concat(opts.literals);
+    if (opts.help) {
+      return usage();
+    }
+    if (opts.version) {
+      return version();
+    }
+    if (opts.require) {
+      loadRequires();
+    }
+    if (opts.interactive) {
+      return require('./repl');
+    }
+    if (opts.watch && !fs.watch) {
+      return printWarn("The --watch feature depends on Node v0.6.0+. You are running " + process.version + ".");
+    }
+    if (opts.stdio) {
+      return compileStdio();
+    }
+    if (opts["eval"]) {
+      return compileScript(null, sources[0]);
+    }
+    if (!sources.length) {
+      return require('./repl');
+    }
+    literals = opts.run ? sources.splice(1) : [];
+    process.argv = process.argv.slice(0, 2).concat(literals);
     process.argv[0] = 'coffee';
     process.execPath = require.main.filename;
     _results = [];
@@ -69,7 +90,9 @@
 
   compilePath = function(source, topLevel, base) {
     return fs.stat(source, function(err, stats) {
-      if (err && err.code !== 'ENOENT') throw err;
+      if (err && err.code !== 'ENOENT') {
+        throw err;
+      }
       if ((err != null ? err.code : void 0) === 'ENOENT') {
         if (topLevel && source.slice(-7) !== '.coffee') {
           source = sources[sources.indexOf(source)] = "" + source + ".coffee";
@@ -82,31 +105,48 @@
         return;
       }
       if (stats.isDirectory()) {
-        if (opts.watch) watchDir(source, base);
+        if (opts.watch) {
+          watchDir(source, base);
+        }
         return fs.readdir(source, function(err, files) {
-          var file, index, _i, _len, _ref2, _results;
-          if (err && err.code !== 'ENOENT') throw err;
-          if ((err != null ? err.code : void 0) === 'ENOENT') return;
-          files = files.map(function(file) {
-            return path.join(source, file);
-          });
+          var file, index, _ref1, _ref2;
+          if (err && err.code !== 'ENOENT') {
+            throw err;
+          }
+          if ((err != null ? err.code : void 0) === 'ENOENT') {
+            return;
+          }
           index = sources.indexOf(source);
-          [].splice.apply(sources, [index, index - index + 1].concat(files)), files;
+          files = files.filter(function(file) {
+            return !hidden(file);
+          });
+          [].splice.apply(sources, [index, index - index + 1].concat(_ref1 = (function() {
+            var _i, _len, _results;
+            _results = [];
+            for (_i = 0, _len = files.length; _i < _len; _i++) {
+              file = files[_i];
+              _results.push(path.join(source, file));
+            }
+            return _results;
+          })())), _ref1;
           [].splice.apply(sourceCode, [index, index - index + 1].concat(_ref2 = files.map(function() {
             return null;
           }))), _ref2;
-          _results = [];
-          for (_i = 0, _len = files.length; _i < _len; _i++) {
-            file = files[_i];
-            _results.push(compilePath(file, false, base));
-          }
-          return _results;
+          return files.forEach(function(file) {
+            return compilePath(path.join(source, file), false, base);
+          });
         });
       } else if (topLevel || path.extname(source) === '.coffee') {
-        if (opts.watch) watch(source, base);
+        if (opts.watch) {
+          watch(source, base);
+        }
         return fs.readFile(source, function(err, code) {
-          if (err && err.code !== 'ENOENT') throw err;
-          if ((err != null ? err.code : void 0) === 'ENOENT') return;
+          if (err && err.code !== 'ENOENT') {
+            throw err;
+          }
+          if ((err != null ? err.code : void 0) === 'ENOENT') {
+            return;
+          }
           return compileScript(source, code.toString(), base);
         });
       } else {
@@ -149,8 +189,12 @@
       }
     } catch (err) {
       CoffeeScript.emit('failure', err, task);
-      if (CoffeeScript.listeners('failure').length) return;
-      if (o.watch) return printLine(err.message);
+      if (CoffeeScript.listeners('failure').length) {
+        return;
+      }
+      if (o.watch) {
+        return printLine(err.message + '\x07');
+      }
       printWarn(err instanceof Error && err.stack || ("ERROR: " + err));
       return process.exit(1);
     }
@@ -161,7 +205,9 @@
     code = '';
     stdin = process.openStdin();
     stdin.on('data', function(buffer) {
-      if (buffer) return code += buffer.toString();
+      if (buffer) {
+        return code += buffer.toString();
+      }
     });
     return stdin.on('end', function() {
       return compileScript(null, code);
@@ -171,7 +217,9 @@
   joinTimeout = null;
 
   compileJoin = function() {
-    if (!opts.join) return;
+    if (!opts.join) {
+      return;
+    }
     if (!sourceCode.some(function(code) {
       return code === null;
     })) {
@@ -183,26 +231,33 @@
   };
 
   loadRequires = function() {
-    var realFilename, req, _i, _len, _ref2;
+    var realFilename, req, _i, _len, _ref1;
     realFilename = module.filename;
     module.filename = '.';
-    _ref2 = opts.require;
-    for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-      req = _ref2[_i];
+    _ref1 = opts.require;
+    for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
+      req = _ref1[_i];
       require(req);
     }
     return module.filename = realFilename;
   };
 
   watch = function(source, base) {
-    var callback, compile, compileTimeout, prevStats, watchErr, watcher;
+    var compile, compileTimeout, prevStats, rewatch, watchErr, watcher;
     prevStats = null;
     compileTimeout = null;
     watchErr = function(e) {
       if (e.code === 'ENOENT') {
-        if (sources.indexOf(source) === -1) return;
-        removeSource(source, base, true);
-        return compileJoin();
+        if (sources.indexOf(source) === -1) {
+          return;
+        }
+        try {
+          rewatch();
+          return compile();
+        } catch (e) {
+          removeSource(source, base, true);
+          return compileJoin();
+        }
       } else {
         throw e;
       }
@@ -211,42 +266,34 @@
       clearTimeout(compileTimeout);
       return compileTimeout = wait(25, function() {
         return fs.stat(source, function(err, stats) {
-          if (err) return watchErr(err);
-          if (prevStats && (stats.size === prevStats.size && stats.mtime.getTime() === prevStats.mtime.getTime())) {
-            return;
+          if (err) {
+            return watchErr(err);
+          }
+          if (prevStats && stats.size === prevStats.size && stats.mtime.getTime() === prevStats.mtime.getTime()) {
+            return rewatch();
           }
           prevStats = stats;
           return fs.readFile(source, function(err, code) {
-            if (err) return watchErr(err);
-            return compileScript(source, code.toString(), base);
+            if (err) {
+              return watchErr(err);
+            }
+            compileScript(source, code.toString(), base);
+            return rewatch();
           });
         });
       });
     };
-    watchErr = function(e) {
-      if (e.code !== 'ENOENT') throw e;
-      removeSource(source, base, true);
-      return compileJoin();
-    };
     try {
-      return watcher = fs.watch(source, callback = function(event) {
-        if (event === 'change') {
-          return compile();
-        } else if (event === 'rename') {
-          watcher.close();
-          return wait(250, function() {
-            compile();
-            try {
-              return watcher = fs.watch(source, callback);
-            } catch (e) {
-              return watchErr(e);
-            }
-          });
-        }
-      });
+      watcher = fs.watch(source, compile);
     } catch (e) {
-      return watchErr(e);
+      watchErr(e);
     }
+    return rewatch = function() {
+      if (watcher != null) {
+        watcher.close();
+      }
+      return watcher = fs.watch(source, compile);
+    };
   };
 
   watchDir = function(source, base) {
@@ -259,17 +306,19 @@
           return fs.readdir(source, function(err, files) {
             var file, _i, _len, _results;
             if (err) {
-              if (err.code !== 'ENOENT') throw err;
+              if (err.code !== 'ENOENT') {
+                throw err;
+              }
               watcher.close();
               return unwatchDir(source, base);
             }
-            files = files.map(function(file) {
-              return path.join(source, file);
-            });
             _results = [];
             for (_i = 0, _len = files.length; _i < _len; _i++) {
               file = files[_i];
-              if (!(!notSources[file])) continue;
+              if (!(!hidden(file) && !notSources[file])) {
+                continue;
+              }
+              file = path.join(source, file);
               if (sources.some(function(s) {
                 return s.indexOf(file) >= 0;
               })) {
@@ -284,19 +333,23 @@
         });
       });
     } catch (e) {
-      if (e.code !== 'ENOENT') throw e;
+      if (e.code !== 'ENOENT') {
+        throw e;
+      }
     }
   };
 
   unwatchDir = function(source, base) {
     var file, prevSources, toRemove, _i, _len;
-    prevSources = sources.slice();
+    prevSources = sources.slice(0);
     toRemove = (function() {
       var _i, _len, _results;
       _results = [];
       for (_i = 0, _len = sources.length; _i < _len; _i++) {
         file = sources[_i];
-        if (file.indexOf(source) >= 0) _results.push(file);
+        if (file.indexOf(source) >= 0) {
+          _results.push(file);
+        }
       }
       return _results;
     })();
@@ -322,7 +375,9 @@
       return path.exists(jsPath, function(exists) {
         if (exists) {
           return fs.unlink(jsPath, function(err) {
-            if (err && err.code !== 'ENOENT') throw err;
+            if (err && err.code !== 'ENOENT') {
+              throw err;
+            }
             return timeLog("removed " + source);
           });
         }
@@ -344,7 +399,9 @@
     jsPath = outputPath(source, base);
     jsDir = path.dirname(jsPath);
     compile = function() {
-      if (js.length <= 0) js = ' ';
+      if (js.length <= 0) {
+        js = ' ';
+      }
       return fs.writeFile(jsPath, js, function(err) {
         if (err) {
           return printLine(err.message);
@@ -386,11 +443,11 @@
   printTokens = function(tokens) {
     var strings, tag, token, value;
     strings = (function() {
-      var _i, _len, _ref2, _results;
+      var _i, _len, _ref1, _results;
       _results = [];
       for (_i = 0, _len = tokens.length; _i < _len; _i++) {
         token = tokens[_i];
-        _ref2 = [token[0], token[1].toString().replace(/\n/, '\\n')], tag = _ref2[0], value = _ref2[1];
+        _ref1 = [token[0], token[1].toString().replace(/\n/, '\\n')], tag = _ref1[0], value = _ref1[1];
         _results.push("[" + tag + " " + value + "]");
       }
       return _results;
@@ -399,14 +456,14 @@
   };
 
   parseOptions = function() {
-    var i, o, source, _len;
+    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.print = !!(o.print || (o.eval || o.stdio && o.compile));
-    sources = o.arguments;
-    for (i = 0, _len = sources.length; i < _len; i++) {
+    o.print = !!(o.print || (o["eval"] || o.stdio && o.compile));
+    sources = o["arguments"];
+    for (i = _i = 0, _len = sources.length; _i < _len; i = ++_i) {
       source = sources[i];
       sourceCode[i] = null;
     }
@@ -415,7 +472,8 @@
   compileOptions = function(filename) {
     return {
       filename: filename,
-      bare: opts.bare
+      bare: opts.bare,
+      header: opts.compile
     };
   };
 
diff --git a/weinre.server/node_modules/coffee-script/lib/coffee-script/grammar.js b/weinre.server/node_modules/coffee-script/lib/coffee-script/grammar.js
index 2424fc7..5662138 100644
--- a/weinre.server/node_modules/coffee-script/lib/coffee-script/grammar.js
+++ b/weinre.server/node_modules/coffee-script/lib/coffee-script/grammar.js
@@ -1,3 +1,4 @@
+// Generated by CoffeeScript 1.3.3
 (function() {
   var Parser, alt, alternatives, grammar, name, o, operators, token, tokens, unwrap;
 
@@ -8,7 +9,9 @@
   o = function(patternString, action, options) {
     var match;
     patternString = patternString.replace(/\s{2,}/g, ' ');
-    if (!action) return [patternString, '$$ = $1;', options];
+    if (!action) {
+      return [patternString, '$$ = $1;', options];
+    }
     action = (match = unwrap.exec(action)) ? match[1] : "(" + action + "())";
     action = action.replace(/\bnew /g, '$&yy.');
     action = action.replace(/\b(?:Block\.wrap|extend)\b/g, 'yy.$&');
@@ -61,11 +64,12 @@
         return new Literal($1);
       }), o('DEBUGGER', function() {
         return new Literal($1);
+      }), o('UNDEFINED', function() {
+        return new Undefined;
+      }), o('NULL', function() {
+        return new Null;
       }), o('BOOL', function() {
-        var val;
-        val = new Literal($1);
-        if ($1 === 'undefined') val.isUndefined = true;
-        return val;
+        return new Bool($1);
       })
     ],
     Assign: [
@@ -122,6 +126,10 @@
         return [$1];
       }), o('ParamList , Param', function() {
         return $1.concat($3);
+      }), o('ParamList OptComma TERMINATOR Param', function() {
+        return $1.concat($4);
+      }), o('ParamList OptComma INDENT ParamList OptComma OUTDENT', function() {
+        return $1.concat($4);
       })
     ],
     Param: [
@@ -291,6 +299,8 @@
         return new Range($1, null, $2);
       }), o('RangeDots Expression', function() {
         return new Range(null, $2, $1);
+      }), o('RangeDots', function() {
+        return new Range(null, null, $1);
       })
     ],
     ArgList: [
@@ -406,7 +416,7 @@
       })
     ],
     ForValue: [
-      o('Identifier'), o('Array', function() {
+      o('Identifier'), o('ThisProperty'), o('Array', function() {
         return new Value($1);
       }), o('Object', function() {
         return new Value($1);
@@ -559,23 +569,27 @@
     ]
   };
 
-  operators = [['left', '.', '?.', '::'], ['left', 'CALL_START', 'CALL_END'], ['nonassoc', '++', '--'], ['left', '?'], ['right', 'UNARY'], ['left', 'MATH'], ['left', '+', '-'], ['left', 'SHIFT'], ['left', 'RELATION'], ['left', 'COMPARE'], ['left', 'LOGIC'], ['nonassoc', 'INDENT', 'OUTDENT'], ['right', '=', ':', 'COMPOUND_ASSIGN', 'RETURN', 'THROW', 'EXTENDS'], ['right', 'FORIN', 'FOROF', 'BY', 'WHEN'], ['right', 'IF', 'ELSE', 'FOR', 'DO', 'WHILE', 'UNTIL', 'LOOP', 'SUPER', 'CLASS'], ['right', 'POST_IF']];
+  operators = [['left', '.', '?.', '::'], ['left', 'CALL_START', 'CALL_END'], ['nonassoc', '++', '--'], ['left', '?'], ['right', 'UNARY'], ['left', 'MATH'], ['left', '+', '-'], ['left', 'SHIFT'], ['left', 'RELATION'], ['left', 'COMPARE'], ['left', 'LOGIC'], ['nonassoc', 'INDENT', 'OUTDENT'], ['right', '=', ':', 'COMPOUND_ASSIGN', 'RETURN', 'THROW', 'EXTENDS'], ['right', 'FORIN', 'FOROF', 'BY', 'WHEN'], ['right', 'IF', 'ELSE', 'FOR', 'WHILE', 'UNTIL', 'LOOP', 'SUPER', 'CLASS'], ['right', 'POST_IF']];
 
   tokens = [];
 
   for (name in grammar) {
     alternatives = grammar[name];
     grammar[name] = (function() {
-      var _i, _j, _len, _len2, _ref, _results;
+      var _i, _j, _len, _len1, _ref, _results;
       _results = [];
       for (_i = 0, _len = alternatives.length; _i < _len; _i++) {
         alt = alternatives[_i];
         _ref = alt[0].split(' ');
-        for (_j = 0, _len2 = _ref.length; _j < _len2; _j++) {
+        for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
           token = _ref[_j];
-          if (!grammar[token]) tokens.push(token);
+          if (!grammar[token]) {
+            tokens.push(token);
+          }
         }
-        if (name === 'Root') alt[1] = "return " + alt[1];
+        if (name === 'Root') {
+          alt[1] = "return " + alt[1];
+        }
         _results.push(alt);
       }
       return _results;
diff --git a/weinre.server/node_modules/coffee-script/lib/coffee-script/helpers.js b/weinre.server/node_modules/coffee-script/lib/coffee-script/helpers.js
index 038f781..b0a997b 100644
--- a/weinre.server/node_modules/coffee-script/lib/coffee-script/helpers.js
+++ b/weinre.server/node_modules/coffee-script/lib/coffee-script/helpers.js
@@ -1,3 +1,4 @@
+// Generated by CoffeeScript 1.3.3
 (function() {
   var extend, flatten;
 
@@ -16,7 +17,9 @@
     _results = [];
     for (_i = 0, _len = array.length; _i < _len; _i++) {
       item = array[_i];
-      if (item) _results.push(item);
+      if (item) {
+        _results.push(item);
+      }
     }
     return _results;
   };
@@ -24,7 +27,9 @@
   exports.count = function(string, substr) {
     var num, pos;
     num = pos = 0;
-    if (!substr.length) return 1 / 0;
+    if (!substr.length) {
+      return 1 / 0;
+    }
     while (pos = 1 + string.indexOf(substr, pos)) {
       num++;
     }
diff --git a/weinre.server/node_modules/coffee-script/lib/coffee-script/index.js b/weinre.server/node_modules/coffee-script/lib/coffee-script/index.js
index 5e6eba9..d344c41 100644
--- a/weinre.server/node_modules/coffee-script/lib/coffee-script/index.js
+++ b/weinre.server/node_modules/coffee-script/lib/coffee-script/index.js
@@ -1,3 +1,4 @@
+// Generated by CoffeeScript 1.3.3
 (function() {
   var key, val, _ref;
 
diff --git a/weinre.server/node_modules/coffee-script/lib/coffee-script/lexer.js b/weinre.server/node_modules/coffee-script/lib/coffee-script/lexer.js
index 1dd3b04..f80a443 100644
--- a/weinre.server/node_modules/coffee-script/lib/coffee-script/lexer.js
+++ b/weinre.server/node_modules/coffee-script/lib/coffee-script/lexer.js
@@ -1,10 +1,11 @@
+// Generated by CoffeeScript 1.3.3
 (function() {
-  var 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, TRAILING_SPACES, UNARY, WHITESPACE, compact, count, key, last, starts, _ref, _ref2,
-    __indexOf = Array.prototype.indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
+  var 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, key, last, starts, _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;
 
-  _ref2 = require('./helpers'), count = _ref2.count, starts = _ref2.starts, compact = _ref2.compact, last = _ref2.last;
+  _ref1 = require('./helpers'), count = _ref1.count, starts = _ref1.starts, compact = _ref1.compact, last = _ref1.last;
 
   exports.Lexer = Lexer = (function() {
 
@@ -12,8 +13,12 @@
 
     Lexer.prototype.tokenize = function(code, opts) {
       var i, tag;
-      if (opts == null) opts = {};
-      if (WHITESPACE.test(code)) code = "\n" + code;
+      if (opts == null) {
+        opts = {};
+      }
+      if (WHITESPACE.test(code)) {
+        code = "\n" + code;
+      }
       code = code.replace(/\r/g, '').replace(TRAILING_SPACES, '');
       this.code = code;
       this.line = opts.line || 0;
@@ -28,24 +33,30 @@
         i += this.identifierToken() || this.commentToken() || this.whitespaceToken() || this.lineToken() || this.heredocToken() || this.stringToken() || this.numberToken() || this.regexToken() || this.jsToken() || this.literalToken();
       }
       this.closeIndentation();
-      if (tag = this.ends.pop()) this.error("missing " + tag);
-      if (opts.rewrite === false) return this.tokens;
+      if (tag = this.ends.pop()) {
+        this.error("missing " + tag);
+      }
+      if (opts.rewrite === false) {
+        return this.tokens;
+      }
       return (new Rewriter).rewrite(this.tokens);
     };
 
     Lexer.prototype.identifierToken = function() {
-      var colon, forcedIdentifier, id, input, match, prev, tag, _ref3, _ref4;
-      if (!(match = IDENTIFIER.exec(this.chunk))) return 0;
+      var colon, forcedIdentifier, id, input, match, prev, tag, _ref2, _ref3;
+      if (!(match = IDENTIFIER.exec(this.chunk))) {
+        return 0;
+      }
       input = match[0], id = match[1], colon = match[2];
       if (id === 'own' && this.tag() === 'FOR') {
         this.token('OWN', id);
         return id.length;
       }
-      forcedIdentifier = colon || (prev = last(this.tokens)) && (((_ref3 = prev[0]) === '.' || _ref3 === '?.' || _ref3 === '::') || !prev.spaced && prev[0] === '@');
+      forcedIdentifier = colon || (prev = last(this.tokens)) && (((_ref2 = prev[0]) === '.' || _ref2 === '?.' || _ref2 === '::') || !prev.spaced && prev[0] === '@');
       tag = 'IDENTIFIER';
       if (!forcedIdentifier && (__indexOf.call(JS_KEYWORDS, id) >= 0 || __indexOf.call(COFFEE_KEYWORDS, id) >= 0)) {
         tag = id.toUpperCase();
-        if (tag === 'WHEN' && (_ref4 = this.tag(), __indexOf.call(LINE_BREAK, _ref4) >= 0)) {
+        if (tag === 'WHEN' && (_ref3 = this.tag(), __indexOf.call(LINE_BREAK, _ref3) >= 0)) {
           tag = 'LEADING_WHEN';
         } else if (tag === 'FOR') {
           this.seenFor = true;
@@ -66,7 +77,7 @@
           }
         }
       }
-      if (__indexOf.call(['eval', 'arguments'].concat(JS_FORBIDDEN), id) >= 0) {
+      if (__indexOf.call(JS_FORBIDDEN, id) >= 0) {
         if (forcedIdentifier) {
           tag = 'IDENTIFIER';
           id = new String(id);
@@ -76,7 +87,9 @@
         }
       }
       if (!forcedIdentifier) {
-        if (__indexOf.call(COFFEE_ALIASES, id) >= 0) id = COFFEE_ALIAS_MAP[id];
+        if (__indexOf.call(COFFEE_ALIASES, id) >= 0) {
+          id = COFFEE_ALIAS_MAP[id];
+        }
         tag = (function() {
           switch (id) {
             case '!':
@@ -89,8 +102,6 @@
               return 'LOGIC';
             case 'true':
             case 'false':
-            case 'null':
-            case 'undefined':
               return 'BOOL';
             case 'break':
             case 'continue':
@@ -101,31 +112,51 @@
         })();
       }
       this.token(tag, id);
-      if (colon) this.token(':', ':');
+      if (colon) {
+        this.token(':', ':');
+      }
       return input.length;
     };
 
     Lexer.prototype.numberToken = function() {
-      var binaryLiteral, lexedLength, match, number;
-      if (!(match = NUMBER.exec(this.chunk))) return 0;
+      var binaryLiteral, lexedLength, match, number, octalLiteral;
+      if (!(match = NUMBER.exec(this.chunk))) {
+        return 0;
+      }
       number = match[0];
+      if (/^0[BOX]/.test(number)) {
+        this.error("radix prefix '" + number + "' must be lowercase");
+      } else if (/E/.test(number) && !/^0x/.test(number)) {
+        this.error("exponential notation '" + number + "' must be indicated with a lowercase 'e'");
+      } else if (/^0\d*[89]/.test(number)) {
+        this.error("decimal literal '" + number + "' must not be prefixed with '0'");
+      } else if (/^0\d+/.test(number)) {
+        this.error("octal literal '" + number + "' must be prefixed with '0o'");
+      }
       lexedLength = number.length;
-      if (binaryLiteral = /0b([01]+)/.exec(number)) {
-        number = (parseInt(binaryLiteral[1], 2)).toString();
+      if (octalLiteral = /^0o([0-7]+)/.exec(number)) {
+        number = '0x' + (parseInt(octalLiteral[1], 8)).toString(16);
+      }
+      if (binaryLiteral = /^0b([01]+)/.exec(number)) {
+        number = '0x' + (parseInt(binaryLiteral[1], 2)).toString(16);
       }
       this.token('NUMBER', number);
       return lexedLength;
     };
 
     Lexer.prototype.stringToken = function() {
-      var match, string;
+      var match, octalEsc, string;
       switch (this.chunk.charAt(0)) {
         case "'":
-          if (!(match = SIMPLESTR.exec(this.chunk))) return 0;
+          if (!(match = SIMPLESTR.exec(this.chunk))) {
+            return 0;
+          }
           this.token('STRING', (string = match[0]).replace(MULTILINER, '\\\n'));
           break;
         case '"':
-          if (!(string = this.balancedString(this.chunk, '"'))) return 0;
+          if (!(string = this.balancedString(this.chunk, '"'))) {
+            return 0;
+          }
           if (0 < string.indexOf('#{', 1)) {
             this.interpolateString(string.slice(1, -1));
           } else {
@@ -135,13 +166,18 @@
         default:
           return 0;
       }
+      if (octalEsc = /^(?:\\.|[^\\])*\\(?:0[0-7]|[1-7])/.test(string)) {
+        this.error("octal escape sequences " + string + " are not allowed");
+      }
       this.line += count(string, '\n');
       return string.length;
     };
 
     Lexer.prototype.heredocToken = function() {
       var doc, heredoc, match, quote;
-      if (!(match = HEREDOC.exec(this.chunk))) return 0;
+      if (!(match = HEREDOC.exec(this.chunk))) {
+        return 0;
+      }
       heredoc = match[0];
       quote = heredoc.charAt(0);
       doc = this.sanitizeHeredoc(match[2], {
@@ -161,14 +197,15 @@
 
     Lexer.prototype.commentToken = function() {
       var comment, here, match;
-      if (!(match = this.chunk.match(COMMENT))) return 0;
+      if (!(match = this.chunk.match(COMMENT))) {
+        return 0;
+      }
       comment = match[0], here = match[1];
       if (here) {
         this.token('HERECOMMENT', this.sanitizeHeredoc(here, {
           herecomment: true,
           indent: Array(this.indent + 1).join(' ')
         }));
-        this.token('TERMINATOR', '\n');
       }
       this.line += count(comment, '\n');
       return comment.length;
@@ -184,29 +221,35 @@
     };
 
     Lexer.prototype.regexToken = function() {
-      var flags, length, match, prev, regex, _ref3, _ref4;
-      if (this.chunk.charAt(0) !== '/') return 0;
+      var flags, length, match, prev, regex, _ref2, _ref3;
+      if (this.chunk.charAt(0) !== '/') {
+        return 0;
+      }
       if (match = HEREGEX.exec(this.chunk)) {
         length = this.heregexToken(match);
         this.line += count(match[0], '\n');
         return length;
       }
       prev = last(this.tokens);
-      if (prev && (_ref3 = prev[0], __indexOf.call((prev.spaced ? NOT_REGEX : NOT_SPACED_REGEX), _ref3) >= 0)) {
+      if (prev && (_ref2 = prev[0], __indexOf.call((prev.spaced ? NOT_REGEX : NOT_SPACED_REGEX), _ref2) >= 0)) {
         return 0;
       }
-      if (!(match = REGEX.exec(this.chunk))) return 0;
-      _ref4 = match, match = _ref4[0], regex = _ref4[1], flags = _ref4[2];
+      if (!(match = REGEX.exec(this.chunk))) {
+        return 0;
+      }
+      _ref3 = match, match = _ref3[0], regex = _ref3[1], flags = _ref3[2];
       if (regex.slice(0, 2) === '/*') {
         this.error('regular expressions cannot begin with `*`');
       }
-      if (regex === '//') regex = '/(?:)/';
+      if (regex === '//') {
+        regex = '/(?:)/';
+      }
       this.token('REGEX', "" + regex + flags);
       return match.length;
     };
 
     Lexer.prototype.heregexToken = function(match) {
-      var body, flags, heregex, re, tag, tokens, value, _i, _len, _ref3, _ref4, _ref5, _ref6;
+      var body, flags, heregex, re, tag, tokens, value, _i, _len, _ref2, _ref3, _ref4, _ref5;
       heregex = match[0], body = match[1], flags = match[2];
       if (0 > body.indexOf('#{')) {
         re = body.replace(HEREGEX_OMIT, '').replace(/\//g, '\\/');
@@ -219,33 +262,39 @@
       this.token('IDENTIFIER', 'RegExp');
       this.tokens.push(['CALL_START', '(']);
       tokens = [];
-      _ref3 = this.interpolateString(body, {
+      _ref2 = this.interpolateString(body, {
         regex: true
       });
-      for (_i = 0, _len = _ref3.length; _i < _len; _i++) {
-        _ref4 = _ref3[_i], tag = _ref4[0], value = _ref4[1];
+      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+        _ref3 = _ref2[_i], tag = _ref3[0], value = _ref3[1];
         if (tag === 'TOKENS') {
           tokens.push.apply(tokens, value);
         } else {
-          if (!(value = value.replace(HEREGEX_OMIT, ''))) continue;
+          if (!(value = value.replace(HEREGEX_OMIT, ''))) {
+            continue;
+          }
           value = value.replace(/\\/g, '\\\\');
           tokens.push(['STRING', this.makeString(value, '"', true)]);
         }
         tokens.push(['+', '+']);
       }
       tokens.pop();
-      if (((_ref5 = tokens[0]) != null ? _ref5[0] : void 0) !== 'STRING') {
+      if (((_ref4 = tokens[0]) != null ? _ref4[0] : void 0) !== 'STRING') {
         this.tokens.push(['STRING', '""'], ['+', '+']);
       }
-      (_ref6 = this.tokens).push.apply(_ref6, tokens);
-      if (flags) this.tokens.push([',', ','], ['STRING', '"' + flags + '"']);
+      (_ref5 = this.tokens).push.apply(_ref5, tokens);
+      if (flags) {
+        this.tokens.push([',', ','], ['STRING', '"' + flags + '"']);
+      }
       this.token(')', ')');
       return heregex.length;
     };
 
     Lexer.prototype.lineToken = function() {
       var diff, indent, match, noNewlines, prev, size;
-      if (!(match = MULTI_DENT.exec(this.chunk))) return 0;
+      if (!(match = MULTI_DENT.exec(this.chunk))) {
+        return 0;
+      }
       indent = match[0];
       this.line += count(indent, '\n');
       this.seenFor = false;
@@ -299,7 +348,9 @@
           this.token('OUTDENT', dent);
         }
       }
-      if (dent) this.outdebt -= moveOut;
+      if (dent) {
+        this.outdebt -= moveOut;
+      }
       while (this.value() === ';') {
         this.tokens.pop();
       }
@@ -315,7 +366,9 @@
         return 0;
       }
       prev = last(this.tokens);
-      if (prev) prev[match ? 'spaced' : 'newLine'] = true;
+      if (prev) {
+        prev[match ? 'spaced' : 'newLine'] = true;
+      }
       if (match) {
         return match[0].length;
       } else {
@@ -327,30 +380,36 @@
       while (this.value() === ';') {
         this.tokens.pop();
       }
-      if (this.tag() !== 'TERMINATOR') this.token('TERMINATOR', '\n');
+      if (this.tag() !== 'TERMINATOR') {
+        this.token('TERMINATOR', '\n');
+      }
       return this;
     };
 
     Lexer.prototype.suppressNewlines = function() {
-      if (this.value() === '\\') this.tokens.pop();
+      if (this.value() === '\\') {
+        this.tokens.pop();
+      }
       return this;
     };
 
     Lexer.prototype.literalToken = function() {
-      var match, prev, tag, value, _ref3, _ref4, _ref5, _ref6;
+      var match, prev, tag, value, _ref2, _ref3, _ref4, _ref5;
       if (match = OPERATOR.exec(this.chunk)) {
         value = match[0];
-        if (CODE.test(value)) this.tagParameters();
+        if (CODE.test(value)) {
+          this.tagParameters();
+        }
       } else {
         value = this.chunk.charAt(0);
       }
       tag = value;
       prev = last(this.tokens);
       if (value === '=' && prev) {
-        if (!prev[1].reserved && (_ref3 = prev[1], __indexOf.call(JS_FORBIDDEN, _ref3) >= 0)) {
+        if (!prev[1].reserved && (_ref2 = prev[1], __indexOf.call(JS_FORBIDDEN, _ref2) >= 0)) {
           this.error("reserved word \"" + (this.value()) + "\" can't be assigned");
         }
-        if ((_ref4 = prev[1]) === '||' || _ref4 === '&&') {
+        if ((_ref3 = prev[1]) === '||' || _ref3 === '&&') {
           prev[0] = 'COMPOUND_ASSIGN';
           prev[1] += '=';
           return value.length;
@@ -372,10 +431,12 @@
       } else if (__indexOf.call(LOGIC, value) >= 0 || value === '?' && (prev != null ? prev.spaced : void 0)) {
         tag = 'LOGIC';
       } else if (prev && !prev.spaced) {
-        if (value === '(' && (_ref5 = prev[0], __indexOf.call(CALLABLE, _ref5) >= 0)) {
-          if (prev[0] === '?') prev[0] = 'FUNC_EXIST';
+        if (value === '(' && (_ref4 = prev[0], __indexOf.call(CALLABLE, _ref4) >= 0)) {
+          if (prev[0] === '?') {
+            prev[0] = 'FUNC_EXIST';
+          }
           tag = 'CALL_START';
-        } else if (value === '[' && (_ref6 = prev[0], __indexOf.call(INDEXABLE, _ref6) >= 0)) {
+        } else if (value === '[' && (_ref5 = prev[0], __indexOf.call(INDEXABLE, _ref5) >= 0)) {
           tag = 'INDEX_START';
           switch (prev[0]) {
             case '?':
@@ -399,29 +460,37 @@
     };
 
     Lexer.prototype.sanitizeHeredoc = function(doc, options) {
-      var attempt, herecomment, indent, match, _ref3;
+      var attempt, herecomment, indent, match, _ref2;
       indent = options.indent, herecomment = options.herecomment;
       if (herecomment) {
         if (HEREDOC_ILLEGAL.test(doc)) {
           this.error("block comment cannot contain \"*/\", starting");
         }
-        if (doc.indexOf('\n') <= 0) return doc;
+        if (doc.indexOf('\n') <= 0) {
+          return doc;
+        }
       } else {
         while (match = HEREDOC_INDENT.exec(doc)) {
           attempt = match[1];
-          if (indent === null || (0 < (_ref3 = attempt.length) && _ref3 < indent.length)) {
+          if (indent === null || (0 < (_ref2 = attempt.length) && _ref2 < indent.length)) {
             indent = attempt;
           }
         }
       }
-      if (indent) doc = doc.replace(RegExp("\\n" + indent, "g"), '\n');
-      if (!herecomment) doc = doc.replace(/^\n/, '');
+      if (indent) {
+        doc = doc.replace(RegExp("\\n" + indent, "g"), '\n');
+      }
+      if (!herecomment) {
+        doc = doc.replace(/^\n/, '');
+      }
       return doc;
     };
 
     Lexer.prototype.tagParameters = function() {
       var i, stack, tok, tokens;
-      if (this.tag() !== ')') return this;
+      if (this.tag() !== ')') {
+        return this;
+      }
       stack = [];
       tokens = this.tokens;
       i = tokens.length;
@@ -451,23 +520,30 @@
     };
 
     Lexer.prototype.balancedString = function(str, end) {
-      var i, letter, match, prev, stack, _ref3;
+      var continueCount, i, letter, match, prev, stack, _i, _ref2;
+      continueCount = 0;
       stack = [end];
-      for (i = 1, _ref3 = str.length; 1 <= _ref3 ? i < _ref3 : i > _ref3; 1 <= _ref3 ? i++ : i--) {
+      for (i = _i = 1, _ref2 = str.length; 1 <= _ref2 ? _i < _ref2 : _i > _ref2; i = 1 <= _ref2 ? ++_i : --_i) {
+        if (continueCount) {
+          --continueCount;
+          continue;
+        }
         switch (letter = str.charAt(i)) {
           case '\\':
-            i++;
+            ++continueCount;
             continue;
           case end:
             stack.pop();
-            if (!stack.length) return str.slice(0, i + 1);
+            if (!stack.length) {
+              return str.slice(0, i + 1 || 9e9);
+            }
             end = stack[stack.length - 1];
             continue;
         }
         if (end === '}' && (letter === '"' || letter === "'")) {
           stack.push(end = letter);
         } else if (end === '}' && letter === '/' && (match = HEREGEX.exec(str.slice(i)) || REGEX.exec(str.slice(i)))) {
-          i += match[0].length - 1;
+          continueCount += match[0].length - 1;
         } else if (end === '}' && letter === '{') {
           stack.push(end = '}');
         } else if (end === '"' && prev === '#' && letter === '{') {
@@ -479,8 +555,10 @@
     };
 
     Lexer.prototype.interpolateString = function(str, options) {
-      var expr, heredoc, i, inner, interpolated, len, letter, nested, pi, regex, tag, tokens, value, _len, _ref3, _ref4, _ref5;
-      if (options == null) options = {};
+      var expr, heredoc, i, inner, interpolated, len, letter, nested, pi, regex, tag, tokens, value, _i, _len, _ref2, _ref3, _ref4;
+      if (options == null) {
+        options = {};
+      }
       heredoc = options.heredoc, regex = options.regex;
       tokens = [];
       pi = 0;
@@ -493,7 +571,9 @@
         if (!(letter === '#' && str.charAt(i + 1) === '{' && (expr = this.balancedString(str.slice(i + 1), '}')))) {
           continue;
         }
-        if (pi < i) tokens.push(['NEOSTRING', str.slice(pi, i)]);
+        if (pi < i) {
+          tokens.push(['NEOSTRING', str.slice(pi, i)]);
+        }
         inner = expr.slice(1, -1);
         if (inner.length) {
           nested = new Lexer().tokenize(inner, {
@@ -501,7 +581,7 @@
             rewrite: false
           });
           nested.pop();
-          if (((_ref3 = nested[0]) != null ? _ref3[0] : void 0) === 'TERMINATOR') {
+          if (((_ref2 = nested[0]) != null ? _ref2[0] : void 0) === 'TERMINATOR') {
             nested.shift();
           }
           if (len = nested.length) {
@@ -515,28 +595,44 @@
         i += expr.length;
         pi = i + 1;
       }
-      if ((i > pi && pi < str.length)) tokens.push(['NEOSTRING', str.slice(pi)]);
-      if (regex) return tokens;
-      if (!tokens.length) return this.token('STRING', '""');
-      if (tokens[0][0] !== 'NEOSTRING') tokens.unshift(['', '']);
-      if (interpolated = tokens.length > 1) this.token('(', '(');
-      for (i = 0, _len = tokens.length; i < _len; i++) {
-        _ref4 = tokens[i], tag = _ref4[0], value = _ref4[1];
-        if (i) this.token('+', '+');
+      if ((i > pi && pi < str.length)) {
+        tokens.push(['NEOSTRING', str.slice(pi)]);
+      }
+      if (regex) {
+        return tokens;
+      }
+      if (!tokens.length) {
+        return this.token('STRING', '""');
+      }
+      if (tokens[0][0] !== 'NEOSTRING') {
+        tokens.unshift(['', '']);
+      }
+      if (interpolated = tokens.length > 1) {
+        this.token('(', '(');
+      }
+      for (i = _i = 0, _len = tokens.length; _i < _len; i = ++_i) {
+        _ref3 = tokens[i], tag = _ref3[0], value = _ref3[1];
+        if (i) {
+          this.token('+', '+');
+        }
         if (tag === 'TOKENS') {
-          (_ref5 = this.tokens).push.apply(_ref5, value);
+          (_ref4 = this.tokens).push.apply(_ref4, value);
         } else {
           this.token('STRING', this.makeString(value, '"', heredoc));
         }
       }
-      if (interpolated) this.token(')', ')');
+      if (interpolated) {
+        this.token(')', ')');
+      }
       return tokens;
     };
 
     Lexer.prototype.pair = function(tag) {
       var size, wanted;
       if (tag !== (wanted = last(this.ends))) {
-        if ('OUTDENT' !== wanted) this.error("unmatched " + tag);
+        if ('OUTDENT' !== wanted) {
+          this.error("unmatched " + tag);
+        }
         this.indent -= size = last(this.indents);
         this.outdentToken(size, true);
         return this.pair(tag);
@@ -559,8 +655,8 @@
     };
 
     Lexer.prototype.unfinished = function() {
-      var _ref3;
-      return LINE_CONTINUER.test(this.chunk) || ((_ref3 = this.tag()) === '\\' || _ref3 === '.' || _ref3 === '?.' || _ref3 === 'UNARY' || _ref3 === 'MATH' || _ref3 === '+' || _ref3 === '-' || _ref3 === 'SHIFT' || _ref3 === 'RELATION' || _ref3 === 'COMPARE' || _ref3 === 'LOGIC' || _ref3 === 'COMPOUND_ASSIGN' || _ref3 === 'THROW' || _ref3 === 'EXTENDS');
+      var _ref2;
+      return LINE_CONTINUER.test(this.chunk) || ((_ref2 = this.tag()) === '\\' || _ref2 === '.' || _ref2 === '?.' || _ref2 === 'UNARY' || _ref2 === 'MATH' || _ref2 === '+' || _ref2 === '-' || _ref2 === 'SHIFT' || _ref2 === 'RELATION' || _ref2 === 'COMPARE' || _ref2 === 'LOGIC' || _ref2 === 'THROW' || _ref2 === 'EXTENDS');
     };
 
     Lexer.prototype.escapeLines = function(str, heredoc) {
@@ -568,7 +664,9 @@
     };
 
     Lexer.prototype.makeString = function(body, quote, heredoc) {
-      if (!body) return quote + quote;
+      if (!body) {
+        return quote + quote;
+      }
       body = body.replace(/\\([\s\S])/g, function(match, contents) {
         if (contents === '\n' || contents === quote) {
           return contents;
@@ -615,15 +713,19 @@
 
   COFFEE_KEYWORDS = COFFEE_KEYWORDS.concat(COFFEE_ALIASES);
 
-  RESERVED = ['case', 'default', 'function', 'var', 'void', 'with', 'const', 'let', 'enum', 'export', 'import', 'native', '__hasProp', '__extends', '__slice', '__bind', '__indexOf'];
+  RESERVED = ['case', 'default', 'function', 'var', 'void', 'with', 'const', 'let', 'enum', 'export', 'import', 'native', '__hasProp', '__extends', '__slice', '__bind', '__indexOf', 'implements', 'interface', 'let', 'package', 'private', 'protected', 'public', 'static', 'yield'];
 
-  JS_FORBIDDEN = JS_KEYWORDS.concat(RESERVED);
+  STRICT_PROSCRIBED = ['arguments', 'eval'];
 
-  exports.RESERVED = RESERVED.concat(JS_KEYWORDS).concat(COFFEE_KEYWORDS);
+  JS_FORBIDDEN = JS_KEYWORDS.concat(RESERVED).concat(STRICT_PROSCRIBED);
+
+  exports.RESERVED = RESERVED.concat(JS_KEYWORDS).concat(COFFEE_KEYWORDS).concat(STRICT_PROSCRIBED);
+
+  exports.STRICT_PROSCRIBED = STRICT_PROSCRIBED;
 
   IDENTIFIER = /^([$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)([^\n\S]*:(?!:))?/;
 
-  NUMBER = /^0x[\da-f]+|^0b[01]+|^\d*\.?\d+(?:e[+-]?\d+)?/i;
+  NUMBER = /^0b[01]+|^0o[0-7]+|^0x[\da-f]+|^\d*\.?\d+(?:e[+-]?\d+)?/i;
 
   HEREDOC = /^("""|''')([\s\S]*?)(?:\n[^\n\S]*)?\1/;
 
@@ -671,15 +773,15 @@
 
   RELATION = ['IN', 'OF', 'INSTANCEOF'];
 
-  BOOL = ['TRUE', 'FALSE', 'NULL', 'UNDEFINED'];
+  BOOL = ['TRUE', 'FALSE'];
 
-  NOT_REGEX = ['NUMBER', 'REGEX', 'BOOL', '++', '--', ']'];
+  NOT_REGEX = ['NUMBER', 'REGEX', 'BOOL', 'NULL', 'UNDEFINED', '++', '--', ']'];
 
   NOT_SPACED_REGEX = NOT_REGEX.concat(')', '}', 'THIS', 'IDENTIFIER', 'STRING');
 
   CALLABLE = ['IDENTIFIER', 'STRING', 'REGEX', ')', ']', '}', '?', '::', '@', 'THIS', 'SUPER'];
 
-  INDEXABLE = CALLABLE.concat('NUMBER', 'BOOL');
+  INDEXABLE = CALLABLE.concat('NUMBER', 'BOOL', 'NULL', 'UNDEFINED');
 
   LINE_BREAK = ['INDENT', 'OUTDENT', 'TERMINATOR'];
 
diff --git a/weinre.server/node_modules/coffee-script/lib/coffee-script/nodes.js b/weinre.server/node_modules/coffee-script/lib/coffee-script/nodes.js
index 1941298..799b68e 100644
--- a/weinre.server/node_modules/coffee-script/lib/coffee-script/nodes.js
+++ b/weinre.server/node_modules/coffee-script/lib/coffee-script/nodes.js
@@ -1,14 +1,15 @@
+// Generated by CoffeeScript 1.3.3
 (function() {
-  var Access, Arr, Assign, Base, Block, Call, Class, Closure, Code, 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, Scope, Slice, Splat, Switch, TAB, THIS, Throw, Try, UTILITIES, Value, While, YES, compact, del, ends, extend, flatten, last, merge, multident, starts, unfoldSoak, utility, _ref,
-    __hasProp = Object.prototype.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 = Array.prototype.indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
+  var Access, Arr, Assign, Base, Block, Call, Class, Closure, Code, 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, compact, del, ends, extend, flatten, last, merge, multident, starts, unfoldSoak, utility, _ref, _ref1,
+    __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; };
 
   Scope = require('./scope').Scope;
 
-  RESERVED = require('./lexer').RESERVED;
+  _ref = require('./lexer'), RESERVED = _ref.RESERVED, STRICT_PROSCRIBED = _ref.STRICT_PROSCRIBED;
 
-  _ref = require('./helpers'), compact = _ref.compact, flatten = _ref.flatten, extend = _ref.extend, merge = _ref.merge, del = _ref.del, starts = _ref.starts, ends = _ref.ends, last = _ref.last;
+  _ref1 = require('./helpers'), compact = _ref1.compact, flatten = _ref1.flatten, extend = _ref1.extend, merge = _ref1.merge, del = _ref1.del, starts = _ref1.starts, ends = _ref1.ends, last = _ref1.last;
 
   exports.extend = extend;
 
@@ -36,7 +37,9 @@
     Base.prototype.compile = function(o, lvl) {
       var node;
       o = extend({}, o);
-      if (lvl) o.level = lvl;
+      if (lvl) {
+        o.level = lvl;
+      }
       node = this.unfoldSoak(o) || this;
       node.tab = o.indent;
       if (o.level === LEVEL_TOP || !node.isStatement(o)) {
@@ -111,17 +114,25 @@
       var i;
       i = list.length;
       while (i--) {
-        if (!(list[i] instanceof Comment)) return list[i];
+        if (!(list[i] instanceof Comment)) {
+          return list[i];
+        }
       }
       return null;
     };
 
     Base.prototype.toString = function(idt, name) {
       var tree;
-      if (idt == null) idt = '';
-      if (name == null) name = this.constructor.name;
+      if (idt == null) {
+        idt = '';
+      }
+      if (name == null) {
+        name = this.constructor.name;
+      }
       tree = '\n' + idt + name;
-      if (this.soak) tree += '?';
+      if (this.soak) {
+        tree += '?';
+      }
       this.eachChild(function(node) {
         return tree += node.toString(idt + TAB);
       });
@@ -129,16 +140,20 @@
     };
 
     Base.prototype.eachChild = function(func) {
-      var attr, child, _i, _j, _len, _len2, _ref2, _ref3;
-      if (!this.children) return this;
+      var attr, child, _i, _j, _len, _len1, _ref2, _ref3;
+      if (!this.children) {
+        return this;
+      }
       _ref2 = this.children;
       for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
         attr = _ref2[_i];
         if (this[attr]) {
           _ref3 = flatten([this[attr]]);
-          for (_j = 0, _len2 = _ref3.length; _j < _len2; _j++) {
+          for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {
             child = _ref3[_j];
-            if (func(child) === false) return this;
+            if (func(child) === false) {
+              return this;
+            }
           }
         }
       }
@@ -147,7 +162,9 @@
 
     Base.prototype.traverseChildren = function(crossScope, func) {
       return this.eachChild(function(child) {
-        if (func(child) === false) return false;
+        if (func(child) === false) {
+          return false;
+        }
         return child.traverseChildren(crossScope, func);
       });
     };
@@ -228,7 +245,9 @@
       _ref2 = this.expressions;
       for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
         exp = _ref2[_i];
-        if (exp.isStatement(o)) return true;
+        if (exp.isStatement(o)) {
+          return true;
+        }
       }
       return false;
     };
@@ -238,7 +257,9 @@
       _ref2 = this.expressions;
       for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
         exp = _ref2[_i];
-        if (exp.jumps(o)) return exp;
+        if (exp.jumps(o)) {
+          return exp;
+        }
       }
     };
 
@@ -259,7 +280,9 @@
     };
 
     Block.prototype.compile = function(o, level) {
-      if (o == null) o = {};
+      if (o == null) {
+        o = {};
+      }
       if (o.scope) {
         return Block.__super__.compile.call(this, o, level);
       } else {
@@ -282,7 +305,13 @@
         } else if (top) {
           node.front = true;
           code = node.compile(o);
-          codes.push(node.isStatement(o) ? code : "" + this.tab + code + ";");
+          if (!node.isStatement(o)) {
+            code = "" + this.tab + code + ";";
+            if (node instanceof Literal) {
+              code = "" + code + "\n";
+            }
+          }
+          codes.push(code);
         } else {
           codes.push(node.compile(o, LEVEL_LIST));
         }
@@ -311,12 +340,14 @@
       prelude = "";
       if (!o.bare) {
         preludeExps = (function() {
-          var _len, _ref2, _results;
+          var _i, _len, _ref2, _results;
           _ref2 = this.expressions;
           _results = [];
-          for (i = 0, _len = _ref2.length; i < _len; i++) {
+          for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
             exp = _ref2[i];
-            if (!(exp.unwrap() instanceof Comment)) break;
+            if (!(exp.unwrap() instanceof Comment)) {
+              break;
+            }
             _results.push(exp);
           }
           return _results;
@@ -331,18 +362,22 @@
         this.expressions = rest;
       }
       code = this.compileWithDeclarations(o);
-      if (o.bare) return code;
+      if (o.bare) {
+        return code;
+      }
       return "" + prelude + "(function() {\n" + code + "\n}).call(this);\n";
     };
 
     Block.prototype.compileWithDeclarations = function(o) {
-      var assigns, code, declars, exp, i, post, rest, scope, spaced, _len, _ref2, _ref3, _ref4;
+      var assigns, code, declars, exp, i, post, rest, scope, spaced, _i, _len, _ref2, _ref3, _ref4;
       code = post = '';
       _ref2 = this.expressions;
-      for (i = 0, _len = _ref2.length; i < _len; i++) {
+      for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
         exp = _ref2[i];
         exp = exp.unwrap();
-        if (!(exp instanceof Comment || exp instanceof Literal)) break;
+        if (!(exp instanceof Comment || exp instanceof Literal)) {
+          break;
+        }
       }
       o = merge(o, {
         level: LEVEL_TOP
@@ -359,11 +394,17 @@
         declars = o.scope.hasDeclarations();
         assigns = scope.hasAssignments;
         if (declars || assigns) {
-          if (i) code += '\n';
+          if (i) {
+            code += '\n';
+          }
           code += "" + this.tab + "var ";
-          if (declars) code += scope.declaredVariables().join(', ');
+          if (declars) {
+            code += scope.declaredVariables().join(', ');
+          }
           if (assigns) {
-            if (declars) code += ",\n" + (this.tab + TAB);
+            if (declars) {
+              code += ",\n" + (this.tab + TAB);
+            }
             code += scope.assignedVariables().join(",\n" + (this.tab + TAB));
           }
           code += ';\n';
@@ -373,7 +414,9 @@
     };
 
     Block.wrap = function(nodes) {
-      if (nodes.length === 1 && nodes[0] instanceof Block) return nodes[0];
+      if (nodes.length === 1 && nodes[0] instanceof Block) {
+        return nodes[0];
+      }
       return new Block(nodes);
     };
 
@@ -416,12 +459,14 @@
       if (this.value === 'break' && !((o != null ? o.loop : void 0) || (o != null ? o.block : void 0))) {
         return this;
       }
-      if (this.value === 'continue' && !(o != null ? o.loop : void 0)) return this;
+      if (this.value === 'continue' && !(o != null ? o.loop : void 0)) {
+        return this;
+      }
     };
 
     Literal.prototype.compileNode = function(o) {
-      var code, _ref2, _ref3;
-      code = this.isUndefined ? o.level >= LEVEL_ACCESS ? '(void 0)' : 'void 0' : this.value === 'this' ? ((_ref2 = o.scope.method) != null ? _ref2.bound : void 0) ? o.scope.method.context : this.value : this.value.reserved && ((_ref3 = "" + this.value) !== 'eval' && _ref3 !== 'arguments') ? "\"" + this.value + "\"" : this.value;
+      var 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;
       if (this.isStatement()) {
         return "" + this.tab + code + ";";
       } else {
@@ -437,12 +482,78 @@
 
   })(Base);
 
+  exports.Undefined = (function(_super) {
+
+    __extends(Undefined, _super);
+
+    function Undefined() {
+      return Undefined.__super__.constructor.apply(this, arguments);
+    }
+
+    Undefined.prototype.isAssignable = NO;
+
+    Undefined.prototype.isComplex = NO;
+
+    Undefined.prototype.compileNode = function(o) {
+      if (o.level >= LEVEL_ACCESS) {
+        return '(void 0)';
+      } else {
+        return 'void 0';
+      }
+    };
+
+    return Undefined;
+
+  })(Base);
+
+  exports.Null = (function(_super) {
+
+    __extends(Null, _super);
+
+    function Null() {
+      return Null.__super__.constructor.apply(this, arguments);
+    }
+
+    Null.prototype.isAssignable = NO;
+
+    Null.prototype.isComplex = NO;
+
+    Null.prototype.compileNode = function() {
+      return "null";
+    };
+
+    return Null;
+
+  })(Base);
+
+  exports.Bool = (function(_super) {
+
+    __extends(Bool, _super);
+
+    Bool.prototype.isAssignable = NO;
+
+    Bool.prototype.isComplex = NO;
+
+    Bool.prototype.compileNode = function() {
+      return this.val;
+    };
+
+    function Bool(val) {
+      this.val = val;
+    }
+
+    return Bool;
+
+  })(Base);
+
   exports.Return = Return = (function(_super) {
 
     __extends(Return, _super);
 
     function Return(expr) {
-      if (expr && !expr.unwrap().isUndefined) this.expression = expr;
+      if (expr && !expr.unwrap().isUndefined) {
+        this.expression = expr;
+      }
     }
 
     Return.prototype.children = ['expression'];
@@ -476,10 +587,14 @@
     __extends(Value, _super);
 
     function Value(base, props, tag) {
-      if (!props && base instanceof Value) return base;
+      if (!props && base instanceof Value) {
+        return base;
+      }
       this.base = base;
       this.properties = props || [];
-      if (tag) this[tag] = true;
+      if (tag) {
+        this[tag] = true;
+      }
       return this;
     }
 
@@ -510,12 +625,18 @@
       return this.base instanceof Literal && SIMPLENUM.test(this.base.value);
     };
 
+    Value.prototype.isString = function() {
+      return this.base instanceof Literal && IS_STRING.test(this.base.value);
+    };
+
     Value.prototype.isAtomic = function() {
       var node, _i, _len, _ref2;
       _ref2 = this.properties.concat(this.base);
       for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
         node = _ref2[_i];
-        if (node.soak || node instanceof Call) return false;
+        if (node.soak || node instanceof Call) {
+          return false;
+        }
       }
       return true;
     };
@@ -533,7 +654,9 @@
     };
 
     Value.prototype.isObject = function(onlyGenerated) {
-      if (this.properties.length) return false;
+      if (this.properties.length) {
+        return false;
+      }
       return (this.base instanceof Obj) && (!onlyGenerated || this.base.generated);
     };
 
@@ -560,7 +683,9 @@
         bref = new Literal(o.scope.freeVariable('base'));
         base = new Value(new Parens(new Assign(bref, base)));
       }
-      if (!name) return [base, bref];
+      if (!name) {
+        return [base, bref];
+      }
       if (name.isComplex()) {
         nref = new Literal(o.scope.freeVariable('name'));
         name = new Index(new Assign(nref, name.index));
@@ -587,17 +712,21 @@
     Value.prototype.unfoldSoak = function(o) {
       var result,
         _this = this;
-      if (this.unfoldedSoak != null) return this.unfoldedSoak;
+      if (this.unfoldedSoak != null) {
+        return this.unfoldedSoak;
+      }
       result = (function() {
-        var fst, i, ifn, prop, ref, snd, _len, _ref2;
+        var fst, i, ifn, prop, ref, snd, _i, _len, _ref2;
         if (ifn = _this.base.unfoldSoak(o)) {
           Array.prototype.push.apply(ifn.body.properties, _this.properties);
           return ifn;
         }
         _ref2 = _this.properties;
-        for (i = 0, _len = _ref2.length; i < _len; i++) {
+        for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
           prop = _ref2[i];
-          if (!prop.soak) continue;
+          if (!prop.soak) {
+            continue;
+          }
           prop.soak = false;
           fst = new Value(_this.base, _this.properties.slice(0, i));
           snd = new Value(_this.base, _this.properties.slice(i));
@@ -633,8 +762,10 @@
 
     Comment.prototype.compileNode = function(o, level) {
       var code;
-      code = '/*' + multident(this.comment, this.tab) + ("\n" + this.tab + "*/");
-      if ((level || o.level) === LEVEL_TOP) code = o.indent + code;
+      code = '/*' + multident(this.comment, this.tab) + ("\n" + this.tab + "*/\n");
+      if ((level || o.level) === LEVEL_TOP) {
+        code = o.indent + code;
+      }
       return code;
     };
 
@@ -669,15 +800,19 @@
 
     Call.prototype.superReference = function(o) {
       var accesses, method, name;
-      method = o.scope.method;
-      if (!method) throw SyntaxError('cannot call super outside of a function.');
+      method = o.scope.namedMethod();
+      if (!method) {
+        throw SyntaxError('cannot call super outside of a function.');
+      }
       name = method.name;
       if (name == null) {
         throw SyntaxError('cannot call super on an anonymous function.');
       }
       if (method.klass) {
         accesses = [new Access(new Literal('__super__'))];
-        if (method.static) accesses.push(new Access(new Literal('constructor')));
+        if (method["static"]) {
+          accesses.push(new Access(new Literal('constructor')));
+        }
         accesses.push(new Access(new Literal(name)));
         return (new Value(new Literal(method.klass), accesses)).compile(o);
       } else {
@@ -685,11 +820,19 @@
       }
     };
 
+    Call.prototype.superThis = function(o) {
+      var method;
+      method = o.scope.method;
+      return (method && !method.klass && method.context) || "this";
+    };
+
     Call.prototype.unfoldSoak = function(o) {
       var call, ifn, left, list, rite, _i, _len, _ref2, _ref3;
       if (this.soak) {
         if (this.variable) {
-          if (ifn = unfoldSoak(o, this, 'variable')) return ifn;
+          if (ifn = unfoldSoak(o, this, 'variable')) {
+            return ifn;
+          }
           _ref2 = new Value(this.variable).cacheReference(o), left = _ref2[0], rite = _ref2[1];
         } else {
           left = new Literal(this.superReference(o));
@@ -710,9 +853,13 @@
           call = call.variable;
           continue;
         }
-        if (!(call.variable instanceof Value)) break;
+        if (!(call.variable instanceof Value)) {
+          break;
+        }
         list.push(call);
-        if (!((call = call.variable.base) instanceof Call)) break;
+        if (!((call = call.variable.base) instanceof Call)) {
+          break;
+        }
       }
       _ref3 = list.reverse();
       for (_i = 0, _len = _ref3.length; _i < _len; _i++) {
@@ -730,7 +877,7 @@
     };
 
     Call.prototype.filterImplicitObjects = function(list) {
-      var node, nodes, obj, prop, properties, _i, _j, _len, _len2, _ref2;
+      var node, nodes, obj, prop, properties, _i, _j, _len, _len1, _ref2;
       nodes = [];
       for (_i = 0, _len = list.length; _i < _len; _i++) {
         node = list[_i];
@@ -740,10 +887,12 @@
         }
         obj = null;
         _ref2 = node.base.properties;
-        for (_j = 0, _len2 = _ref2.length; _j < _len2; _j++) {
+        for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
           prop = _ref2[_j];
           if (prop instanceof Assign || prop instanceof Comment) {
-            if (!obj) nodes.push(obj = new Obj(properties = [], true));
+            if (!obj) {
+              nodes.push(obj = new Obj(properties = [], true));
+            }
             properties.push(prop);
           } else {
             nodes.push(prop);
@@ -756,7 +905,9 @@
 
     Call.prototype.compileNode = function(o) {
       var arg, args, code, _ref2;
-      if ((_ref2 = this.variable) != null) _ref2.front = this.front;
+      if ((_ref2 = this.variable) != null) {
+        _ref2.front = this.front;
+      }
       if (code = Splat.compileSplattedArray(o, this.args, true)) {
         return this.compileSplat(o, code);
       }
@@ -771,24 +922,24 @@
         return _results;
       })()).join(', ');
       if (this.isSuper) {
-        return this.superReference(o) + (".call(this" + (args && ', ' + args) + ")");
+        return this.superReference(o) + (".call(" + (this.superThis(o)) + (args && ', ' + args) + ")");
       } else {
         return (this.isNew ? 'new ' : '') + this.variable.compile(o, LEVEL_ACCESS) + ("(" + args + ")");
       }
     };
 
     Call.prototype.compileSuper = function(args, o) {
-      return "" + (this.superReference(o)) + ".call(this" + (args.length ? ', ' : '') + args + ")";
+      return "" + (this.superReference(o)) + ".call(" + (this.superThis(o)) + (args.length ? ', ' : '') + args + ")";
     };
 
     Call.prototype.compileSplat = function(o, splatArgs) {
       var base, fun, idt, name, ref;
       if (this.isSuper) {
-        return "" + (this.superReference(o)) + ".apply(this, " + splatArgs + ")";
+        return "" + (this.superReference(o)) + ".apply(" + (this.superThis(o)) + ", " + splatArgs + ")";
       }
       if (this.isNew) {
         idt = this.tab + TAB;
-        return "(function(func, args, ctor) {\n" + idt + "ctor.prototype = func.prototype;\n" + idt + "var child = new ctor, result = func.apply(child, args);\n" + idt + "return typeof result === \"object\" ? result : child;\n" + this.tab + "})(" + (this.variable.compile(o, LEVEL_LIST)) + ", " + splatArgs + ", function() {})";
+        return "(function(func, args, ctor) {\n" + idt + "ctor.prototype = func.prototype;\n" + idt + "var child = new ctor, result = func.apply(child, args), t = typeof result;\n" + idt + "return t == \"object\" || t == \"function\" ? result || child : child;\n" + this.tab + "})(" + (this.variable.compile(o, LEVEL_LIST)) + ", " + splatArgs + ", function(){})";
       }
       base = new Value(this.variable);
       if ((name = base.properties.pop()) && base.isComplex()) {
@@ -796,7 +947,9 @@
         fun = "(" + ref + " = " + (base.compile(o, LEVEL_LIST)) + ")" + (name.compile(o));
       } else {
         fun = base.compile(o, LEVEL_ACCESS);
-        if (SIMPLENUM.test(fun)) fun = "(" + fun + ")";
+        if (SIMPLENUM.test(fun)) {
+          fun = "(" + fun + ")";
+        }
         if (name) {
           ref = fun;
           fun += name.compile(o);
@@ -904,21 +1057,39 @@
         _ref4 = step.cache(o, LEVEL_LIST), this.step = _ref4[0], this.stepVar = _ref4[1];
       }
       _ref5 = [this.fromVar.match(SIMPLENUM), this.toVar.match(SIMPLENUM)], this.fromNum = _ref5[0], this.toNum = _ref5[1];
-      if (this.stepVar) return this.stepNum = this.stepVar.match(SIMPLENUM);
+      if (this.stepVar) {
+        return this.stepNum = this.stepVar.match(SIMPLENUM);
+      }
     };
 
     Range.prototype.compileNode = function(o) {
-      var cond, condPart, from, gt, idx, known, lt, stepPart, to, varPart, _ref2, _ref3;
-      if (!this.fromVar) this.compileVariables(o);
-      if (!o.index) return this.compileArray(o);
+      var cond, condPart, from, gt, idx, idxName, known, lt, namedIndex, stepPart, to, varPart, _ref2, _ref3;
+      if (!this.fromVar) {
+        this.compileVariables(o);
+      }
+      if (!o.index) {
+        return this.compileArray(o);
+      }
       known = this.fromNum && this.toNum;
       idx = del(o, 'index');
+      idxName = del(o, 'name');
+      namedIndex = idxName && idxName !== idx;
       varPart = "" + idx + " = " + this.fromC;
-      if (this.toC !== this.toVar) varPart += ", " + this.toC;
-      if (this.step !== this.stepVar) varPart += ", " + this.step;
+      if (this.toC !== this.toVar) {
+        varPart += ", " + this.toC;
+      }
+      if (this.step !== this.stepVar) {
+        varPart += ", " + this.step;
+      }
       _ref2 = ["" + idx + " <" + this.equals, "" + idx + " >" + this.equals], lt = _ref2[0], gt = _ref2[1];
       condPart = this.stepNum ? +this.stepNum > 0 ? "" + lt + " " + this.toVar : "" + gt + " " + this.toVar : known ? ((_ref3 = [+this.fromNum, +this.toNum], from = _ref3[0], to = _ref3[1], _ref3), from <= to ? "" + lt + " " + to : "" + gt + " " + to) : (cond = "" + this.fromVar + " <= " + this.toVar, "" + cond + " ? " + lt + " " + this.toVar + " : " + gt + " " + this.toVar);
-      stepPart = this.stepVar ? "" + idx + " += " + this.stepVar : known ? from <= to ? "" + idx + "++" : "" + idx + "--" : "" + cond + " ? " + idx + "++ : " + idx + "--";
+      stepPart = this.stepVar ? "" + idx + " += " + this.stepVar : known ? namedIndex ? from <= to ? "++" + idx : "--" + idx : from <= to ? "" + idx + "++" : "" + idx + "--" : namedIndex ? "" + cond + " ? ++" + idx + " : --" + idx : "" + cond + " ? " + idx + "++ : " + idx + "--";
+      if (namedIndex) {
+        varPart = "" + idxName + " = " + varPart;
+      }
+      if (namedIndex) {
+        stepPart = "" + idxName + " = " + stepPart;
+      }
       return "" + varPart + "; " + condPart + "; " + stepPart;
     };
 
@@ -930,7 +1101,9 @@
           for (var _i = _ref2 = +this.fromNum, _ref3 = +this.toNum; _ref2 <= _ref3 ? _i <= _ref3 : _i >= _ref3; _ref2 <= _ref3 ? _i++ : _i--){ _results.push(_i); }
           return _results;
         }).apply(this);
-        if (this.exclusive) range.pop();
+        if (this.exclusive) {
+          range.pop();
+        }
         return "[" + (range.join(', ')) + "]";
       }
       idt = this.tab + TAB;
@@ -951,7 +1124,9 @@
           return n instanceof Literal && n.value === 'arguments' && !n.asKey;
         }) : void 0;
       };
-      if (hasArgs(this.from) || hasArgs(this.to)) args = ', arguments';
+      if (hasArgs(this.from) || hasArgs(this.to)) {
+        args = ', arguments';
+      }
       return "(function() {" + pre + "\n" + idt + "for (" + body + ")" + post + "}).apply(this" + (args != null ? args : '') + ")";
     };
 
@@ -974,9 +1149,9 @@
       var compiled, from, fromStr, to, toStr, _ref2;
       _ref2 = this.range, to = _ref2.to, from = _ref2.from;
       fromStr = from && from.compile(o, LEVEL_PAREN) || '0';
-      compiled = to && to.compile(o, LEVEL_ACCESS);
+      compiled = to && to.compile(o, LEVEL_PAREN);
       if (to && !(!this.range.exclusive && +compiled === -1)) {
-        toStr = ', ' + (this.range.exclusive ? compiled : SIMPLENUM.test(compiled) ? (+compiled + 1).toString() : "" + compiled + " + 1 || 9e9");
+        toStr = ', ' + (this.range.exclusive ? compiled : SIMPLENUM.test(compiled) ? "" + (+compiled + 1) : (compiled = to.compile(o, LEVEL_ACCESS), "" + compiled + " + 1 || 9e9"));
       }
       return ".slice(" + fromStr + (toStr || '') + ")";
     };
@@ -997,12 +1172,29 @@
     Obj.prototype.children = ['properties'];
 
     Obj.prototype.compileNode = function(o) {
-      var i, idt, indent, join, lastNoncom, node, obj, prop, props, _i, _len;
+      var i, idt, indent, join, lastNoncom, node, obj, prop, propName, propNames, props, _i, _j, _len, _len1, _ref2;
       props = this.properties;
-      if (!props.length) return (this.front ? '({})' : '{}');
+      propNames = [];
+      _ref2 = this.properties;
+      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+        prop = _ref2[_i];
+        if (prop.isComplex()) {
+          prop = prop.variable;
+        }
+        if (prop != null) {
+          propName = prop.unwrapAll().value.toString();
+          if (__indexOf.call(propNames, propName) >= 0) {
+            throw SyntaxError("multiple object literal properties named \"" + propName + "\"");
+          }
+          propNames.push(propName);
+        }
+      }
+      if (!props.length) {
+        return (this.front ? '({})' : '{}');
+      }
       if (this.generated) {
-        for (_i = 0, _len = props.length; _i < _len; _i++) {
-          node = props[_i];
+        for (_j = 0, _len1 = props.length; _j < _len1; _j++) {
+          node = props[_j];
           if (node instanceof Value) {
             throw new Error('cannot have an implicit value in an implicit object');
           }
@@ -1011,9 +1203,9 @@
       idt = o.indent += TAB;
       lastNoncom = this.lastNonComment(this.properties);
       props = (function() {
-        var _len2, _results;
+        var _k, _len2, _results;
         _results = [];
-        for (i = 0, _len2 = props.length; i < _len2; i++) {
+        for (i = _k = 0, _len2 = props.length; _k < _len2; i = ++_k) {
           prop = props[i];
           join = i === props.length - 1 ? '' : prop === lastNoncom || prop instanceof Comment ? '\n' : ',\n';
           indent = prop instanceof Comment ? '' : idt;
@@ -1021,7 +1213,9 @@
             prop = new Assign(prop.properties[0].name, prop, 'object');
           }
           if (!(prop instanceof Comment)) {
-            if (!(prop instanceof Assign)) prop = new Assign(prop, prop, 'object');
+            if (!(prop instanceof Assign)) {
+              prop = new Assign(prop, prop, 'object');
+            }
             (prop.variable.base || prop.variable).asKey = true;
           }
           _results.push(indent + prop.compile(o, LEVEL_TOP) + join);
@@ -1042,7 +1236,9 @@
       _ref2 = this.properties;
       for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
         prop = _ref2[_i];
-        if (prop.assigns(name)) return true;
+        if (prop.assigns(name)) {
+          return true;
+        }
       }
       return false;
     };
@@ -1065,10 +1261,14 @@
 
     Arr.prototype.compileNode = function(o) {
       var code, obj, objs;
-      if (!this.objects.length) return '[]';
+      if (!this.objects.length) {
+        return '[]';
+      }
       o.indent += TAB;
       objs = this.filterImplicitObjects(this.objects);
-      if (code = Splat.compileSplattedArray(o, objs)) return code;
+      if (code = Splat.compileSplattedArray(o, objs)) {
+        return code;
+      }
       code = ((function() {
         var _i, _len, _results;
         _results = [];
@@ -1090,7 +1290,9 @@
       _ref2 = this.objects;
       for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
         obj = _ref2[_i];
-        if (obj.assigns(name)) return true;
+        if (obj.assigns(name)) {
+          return true;
+        }
       }
       return false;
     };
@@ -1115,19 +1317,28 @@
 
     Class.prototype.determineName = function() {
       var decl, tail;
-      if (!this.variable) return null;
+      if (!this.variable) {
+        return null;
+      }
       decl = (tail = last(this.variable.properties)) ? tail instanceof Access && tail.name.value : this.variable.base.value;
+      if (__indexOf.call(STRICT_PROSCRIBED, decl) >= 0) {
+        throw SyntaxError("variable name may not be " + decl);
+      }
       return decl && (decl = IDENTIFIER.test(decl) && decl);
     };
 
     Class.prototype.setContext = function(name) {
       return this.body.traverseChildren(false, function(node) {
-        if (node.classBody) return false;
+        if (node.classBody) {
+          return false;
+        }
         if (node instanceof Literal && node.value === 'this') {
           return node.value = name;
         } else if (node instanceof Code) {
           node.klass = name;
-          if (node.bound) return node.context = name;
+          if (node.bound) {
+            return node.context = name;
+          }
         }
       });
     };
@@ -1172,8 +1383,10 @@
               }
             } else {
               if (assign.variable["this"]) {
-                func.static = true;
-                if (func.bound) func.context = name;
+                func["static"] = true;
+                if (func.bound) {
+                  func.context = name;
+                }
               } else {
                 assign.variable = new Value(new Literal(name), [new Access(new Literal('prototype')), new Access(base)]);
                 if (func instanceof Code && func.bound) {
@@ -1193,11 +1406,13 @@
     Class.prototype.walkBody = function(name, o) {
       var _this = this;
       return this.traverseChildren(false, function(child) {
-        var exps, i, node, _len, _ref2;
-        if (child instanceof Class) return false;
+        var exps, i, node, _i, _len, _ref2;
+        if (child instanceof Class) {
+          return false;
+        }
         if (child instanceof Block) {
           _ref2 = exps = child.expressions;
-          for (i = 0, _len = _ref2.length; i < _len; i++) {
+          for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
             node = _ref2[i];
             if (node instanceof Value && node.isObject(true)) {
               exps[i] = _this.addProperties(node, name, o);
@@ -1208,6 +1423,16 @@
       });
     };
 
+    Class.prototype.hoistDirectivePrologue = function() {
+      var expressions, index, node;
+      index = 0;
+      expressions = this.body.expressions;
+      while ((node = expressions[index]) && node instanceof Comment || node instanceof Value && node.isString()) {
+        ++index;
+      }
+      return this.directives = expressions.splice(0, index);
+    };
+
     Class.prototype.ensureConstructor = function(name) {
       if (!this.ctor) {
         this.ctor = new Code;
@@ -1217,6 +1442,7 @@
         if (this.externalCtor) {
           this.ctor.body.push(new Literal("" + this.externalCtor + ".apply(this, arguments)"));
         }
+        this.ctor.body.makeReturn();
         this.body.expressions.unshift(this.ctor);
       }
       this.ctor.ctor = this.ctor.name = name;
@@ -1225,27 +1451,36 @@
     };
 
     Class.prototype.compileNode = function(o) {
-      var call, decl, klass, lname, name;
+      var call, decl, klass, lname, name, params, _ref2;
       decl = this.determineName();
-      name = decl || this.name || '_Class';
-      if (name.reserved) name = "_" + name;
+      name = decl || '_Class';
+      if (name.reserved) {
+        name = "_" + name;
+      }
       lname = new Literal(name);
+      this.hoistDirectivePrologue();
       this.setContext(name);
       this.walkBody(name, o);
       this.ensureConstructor(name);
       this.body.spaced = true;
-      if (!(this.ctor instanceof Code)) this.body.expressions.unshift(this.ctor);
+      if (!(this.ctor instanceof Code)) {
+        this.body.expressions.unshift(this.ctor);
+      }
       this.body.expressions.push(lname);
+      (_ref2 = this.body.expressions).unshift.apply(_ref2, this.directives);
       this.addBoundFunctions(o);
       call = Closure.wrap(this.body);
       if (this.parent) {
         this.superClass = new Literal(o.scope.freeVariable('super', false));
         this.body.expressions.unshift(new Extends(lname, this.superClass));
         call.args.push(this.parent);
-        call.variable.params.push(new Param(this.superClass));
+        params = call.variable.params || call.variable.base.params;
+        params.push(new Param(this.superClass));
       }
       klass = new Parens(call, true);
-      if (this.variable) klass = new Assign(this.variable, klass);
+      if (this.variable) {
+        klass = new Assign(this.variable, klass);
+      }
       return klass.compile(o);
     };
 
@@ -1258,11 +1493,16 @@
     __extends(Assign, _super);
 
     function Assign(variable, value, context, options) {
+      var forbidden, name, _ref2;
       this.variable = variable;
       this.value = value;
       this.context = context;
       this.param = options && options.param;
       this.subpattern = options && options.subpattern;
+      forbidden = (_ref2 = (name = this.variable.unwrapAll().value), __indexOf.call(STRICT_PROSCRIBED, _ref2) >= 0);
+      if (forbidden && this.context !== 'object') {
+        throw SyntaxError("variable name may not be \"" + name + "\"");
+      }
     }
 
     Assign.prototype.children = ['variable', 'value'];
@@ -1285,7 +1525,9 @@
         if (this.variable.isArray() || this.variable.isObject()) {
           return this.compilePatternMatch(o);
         }
-        if (this.variable.isSplice()) return this.compileSplice(o);
+        if (this.variable.isSplice()) {
+          return this.compileSplice(o);
+        }
         if ((_ref2 = this.context) === '||=' || _ref2 === '&&=' || _ref2 === '?=') {
           return this.compileConditional(o);
         }
@@ -1304,11 +1546,15 @@
         }
       }
       if (this.value instanceof Code && (match = METHOD_DEF.exec(name))) {
-        if (match[1]) this.value.klass = match[1];
+        if (match[1]) {
+          this.value.klass = match[1];
+        }
         this.value.name = (_ref3 = (_ref4 = (_ref5 = match[2]) != null ? _ref5 : match[3]) != null ? _ref4 : match[4]) != null ? _ref3 : match[5];
       }
       val = this.value.compile(o, LEVEL_LIST);
-      if (this.context === 'object') return "" + name + ": " + val;
+      if (this.context === 'object') {
+        return "" + name + ": " + val;
+      }
       val = name + (" " + (this.context || '=') + " ") + val;
       if (o.level <= LEVEL_LIST) {
         return val;
@@ -1318,7 +1564,7 @@
     };
 
     Assign.prototype.compilePatternMatch = function(o) {
-      var acc, assigns, code, i, idx, isObject, ivar, name, obj, objects, olen, ref, rest, splat, top, val, value, vvar, _len, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8;
+      var acc, assigns, code, i, idx, isObject, ivar, name, obj, objects, olen, ref, rest, splat, top, val, value, vvar, _i, _len, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8;
       top = o.level === LEVEL_TOP;
       value = this.value;
       objects = this.variable.base.objects;
@@ -1344,7 +1590,7 @@
         acc = IDENTIFIER.test(idx.unwrap().value || 0);
         value = new Value(value);
         value.properties.push(new (acc ? Access : Index)(idx));
-        if (_ref5 = obj.unwrap().value, __indexOf.call(['arguments', 'eval'].concat(RESERVED), _ref5) >= 0) {
+        if (_ref5 = obj.unwrap().value, __indexOf.call(RESERVED, _ref5) >= 0) {
           throw new SyntaxError("assignment to a reserved word: " + (obj.compile(o)) + " = " + (value.compile(o)));
         }
         return new Assign(obj, value, null, {
@@ -1358,7 +1604,7 @@
         assigns.push("" + (ref = o.scope.freeVariable('ref')) + " = " + vvar);
         vvar = ref;
       }
-      for (i = 0, _len = objects.length; i < _len; i++) {
+      for (i = _i = 0, _len = objects.length; _i < _len; i = ++_i) {
         obj = objects[i];
         idx = i;
         if (isObject) {
@@ -1398,7 +1644,7 @@
           }
           val = new Value(new Literal(vvar), [new (acc ? Access : Index)(idx)]);
         }
-        if ((name != null) && __indexOf.call(['arguments', 'eval'].concat(RESERVED), name) >= 0) {
+        if ((name != null) && __indexOf.call(RESERVED, name) >= 0) {
           throw new SyntaxError("assignment to a reserved word: " + (obj.compile(o)) + " = " + (val.compile(o)));
         }
         assigns.push(new Assign(obj, val, null, {
@@ -1406,7 +1652,9 @@
           subpattern: true
         }).compile(o, LEVEL_LIST));
       }
-      if (!(top || this.subpattern)) assigns.push(vvar);
+      if (!(top || this.subpattern)) {
+        assigns.push(vvar);
+      }
       code = assigns.join(', ');
       if (o.level < LEVEL_LIST) {
         return code;
@@ -1416,10 +1664,15 @@
     };
 
     Assign.prototype.compileConditional = function(o) {
-      var left, rite, _ref2;
-      _ref2 = this.variable.cacheReference(o), left = _ref2[0], rite = _ref2[1];
-      if (__indexOf.call(this.context, "?") >= 0) o.isExistentialEquals = true;
-      return new Op(this.context.slice(0, -1), left, new Assign(rite, this.value, '=')).compile(o);
+      var left, right, _ref2;
+      _ref2 = this.variable.cacheReference(o), left = _ref2[0], right = _ref2[1];
+      if (!left.properties.length && left.base instanceof Literal && left.base.value !== "this" && !o.scope.check(left.base.value)) {
+        throw new Error("the variable \"" + left.base.value + "\" can't be assigned with " + this.context + " because it has not been defined.");
+      }
+      if (__indexOf.call(this.context, "?") >= 0) {
+        o.isExistentialEquals = true;
+      }
+      return new Op(this.context.slice(0, -1), left, new Assign(right, this.value, '=')).compile(o);
     };
 
     Assign.prototype.compileSplice = function(o) {
@@ -1430,10 +1683,14 @@
       if (to) {
         if ((from != null ? from.isSimpleNumber() : void 0) && to.isSimpleNumber()) {
           to = +to.compile(o) - +fromRef;
-          if (!exclusive) to += 1;
+          if (!exclusive) {
+            to += 1;
+          }
         } else {
           to = to.compile(o, LEVEL_ACCESS) + ' - ' + fromRef;
-          if (!exclusive) to += ' + 1';
+          if (!exclusive) {
+            to += ' + 1';
+          }
         }
       } else {
         to = "9e9";
@@ -1459,7 +1716,9 @@
       this.params = params || [];
       this.body = body || new Block;
       this.bound = tag === 'boundfunc';
-      if (this.bound) this.context = '_this';
+      if (this.bound) {
+        this.context = '_this';
+      }
     }
 
     Code.prototype.children = ['params', 'body'];
@@ -1471,40 +1730,57 @@
     Code.prototype.jumps = NO;
 
     Code.prototype.compileNode = function(o) {
-      var code, exprs, i, idt, lit, p, param, ref, splats, v, val, vars, wasEmpty, _i, _j, _k, _len, _len2, _len3, _len4, _ref2, _ref3, _ref4, _ref5, _ref6;
+      var code, exprs, i, idt, lit, name, p, param, params, ref, splats, uniqs, val, wasEmpty, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _len5, _m, _n, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8;
       o.scope = new Scope(o.scope, this.body, this);
       o.scope.shared = del(o, 'sharedScope');
       o.indent += TAB;
       delete o.bare;
-      vars = [];
+      delete o.isExistentialEquals;
+      params = [];
       exprs = [];
-      _ref2 = this.params;
+      _ref2 = this.paramNames();
       for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-        param = _ref2[_i];
-        if (!param.splat) continue;
-        _ref3 = this.params;
-        for (_j = 0, _len2 = _ref3.length; _j < _len2; _j++) {
-          p = _ref3[_j];
-          if (p.name.value) o.scope.add(p.name.value, 'var', true);
+        name = _ref2[_i];
+        if (!o.scope.check(name)) {
+          o.scope.parameter(name);
+        }
+      }
+      _ref3 = this.params;
+      for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {
+        param = _ref3[_j];
+        if (!param.splat) {
+          continue;
+        }
+        _ref4 = this.params;
+        for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) {
+          p = _ref4[_k].name;
+          if (p["this"]) {
+            p = p.properties[0].name;
+          }
+          if (p.value) {
+            o.scope.add(p.value, 'var', true);
+          }
         }
         splats = new Assign(new Value(new Arr((function() {
-          var _k, _len3, _ref4, _results;
-          _ref4 = this.params;
+          var _l, _len3, _ref5, _results;
+          _ref5 = this.params;
           _results = [];
-          for (_k = 0, _len3 = _ref4.length; _k < _len3; _k++) {
-            p = _ref4[_k];
+          for (_l = 0, _len3 = _ref5.length; _l < _len3; _l++) {
+            p = _ref5[_l];
             _results.push(p.asReference(o));
           }
           return _results;
         }).call(this))), new Value(new Literal('arguments')));
         break;
       }
-      _ref4 = this.params;
-      for (_k = 0, _len3 = _ref4.length; _k < _len3; _k++) {
-        param = _ref4[_k];
+      _ref5 = this.params;
+      for (_l = 0, _len3 = _ref5.length; _l < _len3; _l++) {
+        param = _ref5[_l];
         if (param.isComplex()) {
           val = ref = param.asReference(o);
-          if (param.value) val = new Op('?', ref, param.value);
+          if (param.value) {
+            val = new Op('?', ref, param.value);
+          }
           exprs.push(new Assign(new Value(param.name), val, '=', {
             param: true
           }));
@@ -1516,36 +1792,53 @@
             exprs.push(new If(lit, val));
           }
         }
-        if (!splats) vars.push(ref);
-      }
-      wasEmpty = this.body.isEmpty();
-      if (splats) exprs.unshift(splats);
-      if (exprs.length) {
-        (_ref5 = this.body.expressions).unshift.apply(_ref5, exprs);
-      }
-      if (!splats) {
-        for (i = 0, _len4 = vars.length; i < _len4; i++) {
-          v = vars[i];
-          o.scope.parameter(vars[i] = v.compile(o));
+        if (!splats) {
+          params.push(ref);
         }
       }
-      if (!(wasEmpty || this.noReturn)) this.body.makeReturn();
+      wasEmpty = this.body.isEmpty();
+      if (splats) {
+        exprs.unshift(splats);
+      }
+      if (exprs.length) {
+        (_ref6 = this.body.expressions).unshift.apply(_ref6, exprs);
+      }
+      for (i = _m = 0, _len4 = params.length; _m < _len4; i = ++_m) {
+        p = params[i];
+        o.scope.parameter(params[i] = p.compile(o));
+      }
+      uniqs = [];
+      _ref7 = this.paramNames();
+      for (_n = 0, _len5 = _ref7.length; _n < _len5; _n++) {
+        name = _ref7[_n];
+        if (__indexOf.call(uniqs, name) >= 0) {
+          throw SyntaxError("multiple parameters named '" + name + "'");
+        }
+        uniqs.push(name);
+      }
+      if (!(wasEmpty || this.noReturn)) {
+        this.body.makeReturn();
+      }
       if (this.bound) {
-        if ((_ref6 = o.scope.parent.method) != null ? _ref6.bound : void 0) {
+        if ((_ref8 = o.scope.parent.method) != null ? _ref8.bound : void 0) {
           this.bound = this.context = o.scope.parent.method.context;
-        } else if (!this.static) {
+        } else if (!this["static"]) {
           o.scope.parent.assign('_this', 'this');
         }
       }
       idt = o.indent;
       code = 'function';
-      if (this.ctor) code += ' ' + this.name;
-      code += '(' + vars.join(', ') + ') {';
+      if (this.ctor) {
+        code += ' ' + this.name;
+      }
+      code += '(' + params.join(', ') + ') {';
       if (!this.body.isEmpty()) {
         code += "\n" + (this.body.compileWithDeclarations(o)) + "\n" + this.tab;
       }
       code += '}';
-      if (this.ctor) return this.tab + code;
+      if (this.ctor) {
+        return this.tab + code;
+      }
       if (this.front || (o.level >= LEVEL_ACCESS)) {
         return "(" + code + ")";
       } else {
@@ -1553,6 +1846,17 @@
       }
     };
 
+    Code.prototype.paramNames = function() {
+      var names, param, _i, _len, _ref2;
+      names = [];
+      _ref2 = this.params;
+      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+        param = _ref2[_i];
+        names.push.apply(names, param.names());
+      }
+      return names;
+    };
+
     Code.prototype.traverseChildren = function(crossScope, func) {
       if (crossScope) {
         return Code.__super__.traverseChildren.call(this, crossScope, func);
@@ -1568,9 +1872,13 @@
     __extends(Param, _super);
 
     function Param(name, value, splat) {
+      var _ref2;
       this.name = name;
       this.value = value;
       this.splat = splat;
+      if (_ref2 = (name = this.name.unwrapAll().value), __indexOf.call(STRICT_PROSCRIBED, _ref2) >= 0) {
+        throw SyntaxError("parameter name \"" + name + "\" is not allowed");
+      }
     }
 
     Param.prototype.children = ['name', 'value'];
@@ -1581,16 +1889,22 @@
 
     Param.prototype.asReference = function(o) {
       var node;
-      if (this.reference) return this.reference;
+      if (this.reference) {
+        return this.reference;
+      }
       node = this.name;
       if (node["this"]) {
         node = node.properties[0].name;
-        if (node.value.reserved) node = new Literal('_' + node.value);
+        if (node.value.reserved) {
+          node = new Literal(o.scope.freeVariable(node.value));
+        }
       } else if (node.isComplex()) {
         node = new Literal(o.scope.freeVariable('arg'));
       }
       node = new Value(node);
-      if (this.splat) node = new Splat(node);
+      if (this.splat) {
+        node = new Splat(node);
+      }
       return this.reference = node;
     };
 
@@ -1598,6 +1912,49 @@
       return this.name.isComplex();
     };
 
+    Param.prototype.names = function(name) {
+      var atParam, names, obj, _i, _len, _ref2;
+      if (name == null) {
+        name = this.name;
+      }
+      atParam = function(obj) {
+        var value;
+        value = obj.properties[0].name.value;
+        if (value.reserved) {
+          return [];
+        } else {
+          return [value];
+        }
+      };
+      if (name instanceof Literal) {
+        return [name.value];
+      }
+      if (name instanceof Value) {
+        return atParam(name);
+      }
+      names = [];
+      _ref2 = name.objects;
+      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+        obj = _ref2[_i];
+        if (obj instanceof Assign) {
+          names.push(obj.value.unwrap().value);
+        } else if (obj instanceof Splat) {
+          names.push(obj.name.unwrap().value);
+        } else if (obj instanceof Value) {
+          if (obj.isArray() || obj.isObject()) {
+            names.push.apply(names, this.names(obj.base));
+          } else if (obj["this"]) {
+            names.push.apply(names, atParam(obj));
+          } else {
+            names.push(obj.base.value);
+          }
+        } else {
+          throw SyntaxError("illegal parameter " + (obj.compile()));
+        }
+      }
+      return names;
+    };
+
     return Param;
 
   })(Base);
@@ -1631,19 +1988,23 @@
     };
 
     Splat.compileSplattedArray = function(o, list, apply) {
-      var args, base, code, i, index, node, _len;
+      var args, base, code, i, index, node, _i, _len;
       index = -1;
       while ((node = list[++index]) && !(node instanceof Splat)) {
         continue;
       }
-      if (index >= list.length) return '';
+      if (index >= list.length) {
+        return '';
+      }
       if (list.length === 1) {
         code = list[0].compile(o, LEVEL_LIST);
-        if (apply) return code;
+        if (apply) {
+          return code;
+        }
         return "" + (utility('slice')) + ".call(" + code + ")";
       }
       args = list.slice(index);
-      for (i = 0, _len = args.length; i < _len; i++) {
+      for (i = _i = 0, _len = args.length; _i < _len; i = ++_i) {
         node = args[i];
         code = node.compile(o, LEVEL_LIST);
         args[i] = node instanceof Splat ? "" + (utility('slice')) + ".call(" + code + ")" : "[" + code + "]";
@@ -1652,11 +2013,11 @@
         return args[0] + (".concat(" + (args.slice(1).join(', ')) + ")");
       }
       base = (function() {
-        var _i, _len2, _ref2, _results;
+        var _j, _len1, _ref2, _results;
         _ref2 = list.slice(0, index);
         _results = [];
-        for (_i = 0, _len2 = _ref2.length; _i < _len2; _i++) {
-          node = _ref2[_i];
+        for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
+          node = _ref2[_j];
           _results.push(node.compile(o, LEVEL_LIST));
         }
         return _results;
@@ -1700,12 +2061,16 @@
     While.prototype.jumps = function() {
       var expressions, node, _i, _len;
       expressions = this.body.expressions;
-      if (!expressions.length) return false;
+      if (!expressions.length) {
+        return false;
+      }
       for (_i = 0, _len = expressions.length; _i < _len; _i++) {
         node = expressions[_i];
         if (node.jumps({
           loop: true
-        })) return node;
+        })) {
+          return node;
+        }
       }
       return false;
     };
@@ -1726,13 +2091,17 @@
           if (body.expressions.length > 1) {
             body.expressions.unshift(new If((new Parens(this.guard)).invert(), new Literal("continue")));
           } else {
-            if (this.guard) body = Block.wrap([new If(this.guard, body)]);
+            if (this.guard) {
+              body = Block.wrap([new If(this.guard, body)]);
+            }
           }
         }
         body = "\n" + (body.compile(o, LEVEL_TOP)) + "\n" + this.tab;
       }
       code = set + this.tab + ("while (" + (this.condition.compile(o, LEVEL_PAREN)) + ") {" + body + "}");
-      if (this.returns) code += "\n" + this.tab + "return " + rvar + ";";
+      if (this.returns) {
+        code += "\n" + this.tab + "return " + rvar + ";";
+      }
       return code;
     };
 
@@ -1746,12 +2115,11 @@
     __extends(Op, _super);
 
     function Op(op, first, second, flip) {
-      var call;
-      if (op === 'in') return new In(first, second);
+      if (op === 'in') {
+        return new In(first, second);
+      }
       if (op === 'do') {
-        call = new Call(first, first.params || []);
-        call["do"] = true;
-        return call;
+        return this.generateDo(first);
       }
       if (op === 'new') {
         if (first instanceof Call && !first["do"] && !first.isNew) {
@@ -1806,7 +2174,9 @@
           allInvertable && (allInvertable = curr.operator in INVERSIONS);
           curr = curr.first;
         }
-        if (!allInvertable) return new Parens(this).invert();
+        if (!allInvertable) {
+          return new Parens(this).invert();
+        }
         curr = this;
         while (curr && curr.operator) {
           curr.invert = !curr.invert;
@@ -1816,7 +2186,9 @@
         return this;
       } else if (op = INVERSIONS[this.operator]) {
         this.operator = op;
-        if (this.first.unwrap() instanceof Op) this.first.invert();
+        if (this.first.unwrap() instanceof Op) {
+          this.first.invert();
+        }
         return this;
       } else if (this.second) {
         return new Parens(this).invert();
@@ -1832,13 +2204,46 @@
       return ((_ref2 = this.operator) === '++' || _ref2 === '--' || _ref2 === 'delete') && unfoldSoak(o, this, 'first');
     };
 
+    Op.prototype.generateDo = function(exp) {
+      var call, func, param, passedParams, ref, _i, _len, _ref2;
+      passedParams = [];
+      func = exp instanceof Assign && (ref = exp.value.unwrap()) instanceof Code ? ref : exp;
+      _ref2 = func.params || [];
+      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+        param = _ref2[_i];
+        if (param.value) {
+          passedParams.push(param.value);
+          delete param.value;
+        } else {
+          passedParams.push(param);
+        }
+      }
+      call = new Call(exp, passedParams);
+      call["do"] = true;
+      return call;
+    };
+
     Op.prototype.compileNode = function(o) {
-      var code, isChain;
+      var code, isChain, _ref2, _ref3;
       isChain = this.isChainable() && this.first.isChainable();
-      if (!isChain) this.first.front = this.front;
-      if (this.isUnary()) return this.compileUnary(o);
-      if (isChain) return this.compileChain(o);
-      if (this.operator === '?') return this.compileExistence(o);
+      if (!isChain) {
+        this.first.front = this.front;
+      }
+      if (this.operator === 'delete' && o.scope.check(this.first.unwrapAll().value)) {
+        throw SyntaxError('delete operand may not be argument or var');
+      }
+      if (((_ref2 = this.operator) === '--' || _ref2 === '++') && (_ref3 = this.first.unwrapAll().value, __indexOf.call(STRICT_PROSCRIBED, _ref3) >= 0)) {
+        throw SyntaxError('prefix increment/decrement may not have eval or arguments operand');
+      }
+      if (this.isUnary()) {
+        return this.compileUnary(o);
+      }
+      if (isChain) {
+        return this.compileChain(o);
+      }
+      if (this.operator === '?') {
+        return this.compileExistence(o);
+      }
       code = this.first.compile(o, LEVEL_OP) + ' ' + this.operator + ' ' + this.second.compile(o, LEVEL_OP);
       if (o.level <= LEVEL_OP) {
         return code;
@@ -1857,7 +2262,7 @@
 
     Op.prototype.compileExistence = function(o) {
       var fst, ref;
-      if (this.first.isComplex() && o.level > LEVEL_TOP) {
+      if (this.first.isComplex()) {
         ref = new Literal(o.scope.freeVariable('ref'));
         fst = new Parens(new Assign(ref, this.first));
       } else {
@@ -1871,6 +2276,9 @@
 
     Op.prototype.compileUnary = function(o) {
       var op, parts, plusMinus;
+      if (o.level >= LEVEL_ACCESS) {
+        return (new Parens(this)).compile(o);
+      }
       parts = [op = this.operator];
       plusMinus = op === '+' || op === '-';
       if ((op === 'new' || op === 'typeof' || op === 'delete') || plusMinus && this.first instanceof Op && this.first.operator === op) {
@@ -1880,7 +2288,9 @@
         this.first = new Parens(this.first);
       }
       parts.push(this.first.compile(o, LEVEL_OP));
-      if (this.flip) parts.reverse();
+      if (this.flip) {
+        parts.reverse();
+      }
       return parts.join('');
     };
 
@@ -1911,25 +2321,31 @@
         _ref2 = this.array.base.objects;
         for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
           obj = _ref2[_i];
-          if (!(obj instanceof Splat)) continue;
+          if (!(obj instanceof Splat)) {
+            continue;
+          }
           hasSplat = true;
           break;
         }
-        if (!hasSplat) return this.compileOrTest(o);
+        if (!hasSplat) {
+          return this.compileOrTest(o);
+        }
       }
       return this.compileLoopTest(o);
     };
 
     In.prototype.compileOrTest = function(o) {
       var cmp, cnj, i, item, ref, sub, tests, _ref2, _ref3;
-      if (this.array.base.objects.length === 0) return "" + (!!this.negated);
+      if (this.array.base.objects.length === 0) {
+        return "" + (!!this.negated);
+      }
       _ref2 = this.object.cache(o, LEVEL_OP), sub = _ref2[0], ref = _ref2[1];
       _ref3 = this.negated ? [' !== ', ' && '] : [' === ', ' || '], cmp = _ref3[0], cnj = _ref3[1];
       tests = (function() {
-        var _len, _ref4, _results;
+        var _i, _len, _ref4, _results;
         _ref4 = this.array.base.objects;
         _results = [];
-        for (i = 0, _len = _ref4.length; i < _len; i++) {
+        for (i = _i = 0, _len = _ref4.length; _i < _len; i = ++_i) {
           item = _ref4[i];
           _results.push((i ? ref : sub) + cmp + item.compile(o, LEVEL_ACCESS));
         }
@@ -1947,7 +2363,9 @@
       var code, ref, sub, _ref2;
       _ref2 = this.object.cache(o, LEVEL_LIST), sub = _ref2[0], ref = _ref2[1];
       code = utility('indexOf') + (".call(" + (this.array.compile(o, LEVEL_LIST)) + ", " + ref + ") ") + (this.negated ? '< 0' : '>= 0');
-      if (sub === ref) return code;
+      if (sub === ref) {
+        return code;
+      }
       code = sub + ', ' + code;
       if (o.level < LEVEL_LIST) {
         return code;
@@ -1985,8 +2403,12 @@
     };
 
     Try.prototype.makeReturn = function(res) {
-      if (this.attempt) this.attempt = this.attempt.makeReturn(res);
-      if (this.recovery) this.recovery = this.recovery.makeReturn(res);
+      if (this.attempt) {
+        this.attempt = this.attempt.makeReturn(res);
+      }
+      if (this.recovery) {
+        this.recovery = this.recovery.makeReturn(res);
+      }
       return this;
     };
 
@@ -1995,7 +2417,20 @@
       o.indent += TAB;
       errorPart = this.error ? " (" + (this.error.compile(o)) + ") " : ' ';
       tryPart = this.attempt.compile(o, LEVEL_TOP);
-      catchPart = this.recovery ? (!o.scope.check(this.error.value) ? o.scope.add(this.error.value, 'param') : void 0, " catch" + errorPart + "{\n" + (this.recovery.compile(o, LEVEL_TOP)) + "\n" + this.tab + "}") : !(this.ensure || this.recovery) ? ' catch (_error) {}' : void 0;
+      catchPart = (function() {
+        var _ref2;
+        if (this.recovery) {
+          if (_ref2 = this.error.value, __indexOf.call(STRICT_PROSCRIBED, _ref2) >= 0) {
+            throw SyntaxError("catch variable may not be \"" + this.error.value + "\"");
+          }
+          if (!o.scope.check(this.error.value)) {
+            o.scope.add(this.error.value, 'param');
+          }
+          return " catch" + errorPart + "{\n" + (this.recovery.compile(o, LEVEL_TOP)) + "\n" + this.tab + "}";
+        } else if (!(this.ensure || this.recovery)) {
+          return ' catch (_error) {}';
+        }
+      }).call(this);
       ensurePart = this.ensure ? " finally {\n" + (this.ensure.compile(o, LEVEL_TOP)) + "\n" + this.tab + "}" : '';
       return "" + this.tab + "try {\n" + tryPart + "\n" + this.tab + "}" + (catchPart || '') + ensurePart;
     };
@@ -2129,28 +2564,34 @@
     For.prototype.children = ['body', 'source', 'guard', 'step'];
 
     For.prototype.compileNode = function(o) {
-      var body, defPart, forPart, forVarPart, guardPart, idt1, index, ivar, lastJumps, lvar, name, namePart, ref, resultPart, returnResult, rvar, scope, source, stepPart, stepvar, svar, varPart, _ref2;
+      var body, defPart, forPart, forVarPart, guardPart, idt1, index, ivar, kvar, kvarAssign, lastJumps, lvar, name, namePart, ref, resultPart, returnResult, rvar, scope, source, stepPart, stepvar, svar, varPart, _ref2;
       body = Block.wrap([this.body]);
       lastJumps = (_ref2 = last(body.expressions)) != null ? _ref2.jumps() : void 0;
-      if (lastJumps && lastJumps instanceof Return) this.returns = false;
+      if (lastJumps && lastJumps instanceof Return) {
+        this.returns = false;
+      }
       source = this.range ? this.source.base : this.source;
       scope = o.scope;
       name = this.name && this.name.compile(o, LEVEL_LIST);
       index = this.index && this.index.compile(o, LEVEL_LIST);
       if (name && !this.pattern) {
-        scope.find(name, {
-          immediate: true
-        });
+        scope.find(name);
       }
       if (index) {
-        scope.find(index, {
-          immediate: true
-        });
+        scope.find(index);
       }
-      if (this.returns) rvar = scope.freeVariable('results');
-      ivar = (this.range ? name : index) || scope.freeVariable('i');
-      if (this.step && !this.range) stepvar = scope.freeVariable("step");
-      if (this.pattern) name = ivar;
+      if (this.returns) {
+        rvar = scope.freeVariable('results');
+      }
+      ivar = (this.object && index) || scope.freeVariable('i');
+      kvar = (this.range && name) || index || ivar;
+      kvarAssign = kvar !== ivar ? "" + kvar + " = " : "";
+      if (this.step && !this.range) {
+        stepvar = scope.freeVariable("step");
+      }
+      if (this.pattern) {
+        name = ivar;
+      }
       varPart = '';
       guardPart = '';
       defPart = '';
@@ -2158,6 +2599,7 @@
       if (this.range) {
         forPart = source.compile(merge(o, {
           index: ivar,
+          name: name,
           step: this.step
         }));
       } else {
@@ -2167,12 +2609,15 @@
           svar = ref;
         }
         if (name && !this.pattern) {
-          namePart = "" + name + " = " + svar + "[" + ivar + "]";
+          namePart = "" + name + " = " + svar + "[" + kvar + "]";
         }
         if (!this.object) {
           lvar = scope.freeVariable('len');
-          forVarPart = ("" + ivar + " = 0, " + lvar + " = " + svar + ".length") + (this.step ? ", " + stepvar + " = " + (this.step.compile(o, LEVEL_OP)) : '');
-          stepPart = this.step ? "" + ivar + " += " + stepvar : "" + ivar + "++";
+          forVarPart = "" + kvarAssign + ivar + " = 0, " + lvar + " = " + svar + ".length";
+          if (this.step) {
+            forVarPart += ", " + stepvar + " = " + (this.step.compile(o, LEVEL_OP));
+          }
+          stepPart = "" + kvarAssign + (this.step ? "" + ivar + " += " + stepvar : (kvar !== ivar ? "++" + ivar : "" + ivar + "++"));
           forPart = "" + forVarPart + "; " + ivar + " < " + lvar + "; " + stepPart;
         }
       }
@@ -2185,35 +2630,43 @@
         if (body.expressions.length > 1) {
           body.expressions.unshift(new If((new Parens(this.guard)).invert(), new Literal("continue")));
         } else {
-          if (this.guard) body = Block.wrap([new If(this.guard, body)]);
+          if (this.guard) {
+            body = Block.wrap([new If(this.guard, body)]);
+          }
         }
       }
       if (this.pattern) {
-        body.expressions.unshift(new Assign(this.name, new Literal("" + svar + "[" + ivar + "]")));
+        body.expressions.unshift(new Assign(this.name, new Literal("" + svar + "[" + kvar + "]")));
       }
       defPart += this.pluckDirectCall(o, body);
-      if (namePart) varPart = "\n" + idt1 + namePart + ";";
+      if (namePart) {
+        varPart = "\n" + idt1 + namePart + ";";
+      }
       if (this.object) {
-        forPart = "" + ivar + " in " + svar;
+        forPart = "" + kvar + " in " + svar;
         if (this.own) {
-          guardPart = "\n" + idt1 + "if (!" + (utility('hasProp')) + ".call(" + svar + ", " + ivar + ")) continue;";
+          guardPart = "\n" + idt1 + "if (!" + (utility('hasProp')) + ".call(" + svar + ", " + kvar + ")) continue;";
         }
       }
       body = body.compile(merge(o, {
         indent: idt1
       }), LEVEL_TOP);
-      if (body) body = '\n' + body + '\n';
+      if (body) {
+        body = '\n' + body + '\n';
+      }
       return "" + defPart + (resultPart || '') + this.tab + "for (" + forPart + ") {" + guardPart + varPart + body + this.tab + "}" + (returnResult || '');
     };
 
     For.prototype.pluckDirectCall = function(o, body) {
-      var base, defs, expr, fn, idx, ref, val, _len, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7;
+      var base, defs, expr, fn, idx, ref, val, _i, _len, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7;
       defs = '';
       _ref2 = body.expressions;
-      for (idx = 0, _len = _ref2.length; idx < _len; idx++) {
+      for (idx = _i = 0, _len = _ref2.length; _i < _len; idx = ++_i) {
         expr = _ref2[idx];
         expr = expr.unwrapAll();
-        if (!(expr instanceof Call)) continue;
+        if (!(expr instanceof Call)) {
+          continue;
+        }
         val = expr.variable.unwrapAll();
         if (!((val instanceof Code) || (val instanceof Value && ((_ref3 = val.base) != null ? _ref3.unwrapAll() : void 0) instanceof Code && val.properties.length === 1 && ((_ref4 = (_ref5 = val.properties[0].name) != null ? _ref5.value : void 0) === 'call' || _ref4 === 'apply')))) {
           continue;
@@ -2221,7 +2674,9 @@
         fn = ((_ref6 = val.base) != null ? _ref6.unwrapAll() : void 0) || val;
         ref = new Literal(o.scope.freeVariable('fn'));
         base = new Value(ref);
-        if (val.base) _ref7 = [base, val], val.base = _ref7[0], base = _ref7[1];
+        if (val.base) {
+          _ref7 = [base, val], val.base = _ref7[0], base = _ref7[1];
+        }
         body.expressions[idx] = new Call(base, expr.args);
         defs += this.tab + new Assign(ref, fn).compile(o, LEVEL_TOP) + ';\n';
       }
@@ -2256,7 +2711,9 @@
       _ref2 = this.cases;
       for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
         _ref3 = _ref2[_i], conds = _ref3[0], block = _ref3[1];
-        if (block.jumps(o)) return block;
+        if (block.jumps(o)) {
+          return block;
+        }
       }
       return (_ref4 = this.otherwise) != null ? _ref4.jumps(o) : void 0;
     };
@@ -2271,26 +2728,34 @@
       if (res) {
         this.otherwise || (this.otherwise = new Block([new Literal('void 0')]));
       }
-      if ((_ref3 = this.otherwise) != null) _ref3.makeReturn(res);
+      if ((_ref3 = this.otherwise) != null) {
+        _ref3.makeReturn(res);
+      }
       return this;
     };
 
     Switch.prototype.compileNode = function(o) {
-      var block, body, code, cond, conditions, expr, i, idt1, idt2, _i, _len, _len2, _ref2, _ref3, _ref4, _ref5;
+      var block, body, code, cond, conditions, expr, i, idt1, idt2, _i, _j, _len, _len1, _ref2, _ref3, _ref4, _ref5;
       idt1 = o.indent + TAB;
       idt2 = o.indent = idt1 + TAB;
       code = this.tab + ("switch (" + (((_ref2 = this.subject) != null ? _ref2.compile(o, LEVEL_PAREN) : void 0) || false) + ") {\n");
       _ref3 = this.cases;
-      for (i = 0, _len = _ref3.length; i < _len; i++) {
+      for (i = _i = 0, _len = _ref3.length; _i < _len; i = ++_i) {
         _ref4 = _ref3[i], conditions = _ref4[0], block = _ref4[1];
         _ref5 = flatten([conditions]);
-        for (_i = 0, _len2 = _ref5.length; _i < _len2; _i++) {
-          cond = _ref5[_i];
-          if (!this.subject) cond = cond.invert();
+        for (_j = 0, _len1 = _ref5.length; _j < _len1; _j++) {
+          cond = _ref5[_j];
+          if (!this.subject) {
+            cond = cond.invert();
+          }
           code += idt1 + ("case " + (cond.compile(o, LEVEL_PAREN)) + ":\n");
         }
-        if (body = block.compile(o, LEVEL_TOP)) code += body + '\n';
-        if (i === this.cases.length - 1 && !this.otherwise) break;
+        if (body = block.compile(o, LEVEL_TOP)) {
+          code += body + '\n';
+        }
+        if (i === this.cases.length - 1 && !this.otherwise) {
+          break;
+        }
         expr = this.lastNonComment(block.expressions);
         if (expr instanceof Return || (expr instanceof Literal && expr.jumps() && expr.value !== 'debugger')) {
           continue;
@@ -2313,7 +2778,9 @@
 
     function If(condition, body, options) {
       this.body = body;
-      if (options == null) options = {};
+      if (options == null) {
+        options = {};
+      }
       this.condition = options.type === 'unless' ? condition.invert() : condition;
       this.elseBody = null;
       this.isChain = false;
@@ -2378,7 +2845,7 @@
     };
 
     If.prototype.compileStatement = function(o) {
-      var body, bodyc, child, cond, exeq, ifPart, _ref2;
+      var body, child, cond, exeq, ifPart;
       child = del(o, 'chainChild');
       exeq = del(o, 'isExistentialEquals');
       if (exeq) {
@@ -2389,14 +2856,13 @@
       cond = this.condition.compile(o, LEVEL_PAREN);
       o.indent += TAB;
       body = this.ensureBlock(this.body);
-      bodyc = body.compile(o);
-      if (1 === ((_ref2 = body.expressions) != null ? _ref2.length : void 0) && !this.elseBody && !child && bodyc && cond && -1 === (bodyc.indexOf('\n')) && 80 > cond.length + bodyc.length) {
-        return "" + this.tab + "if (" + cond + ") " + (bodyc.replace(/^\s+/, ''));
+      ifPart = "if (" + cond + ") {\n" + (body.compile(o)) + "\n" + this.tab + "}";
+      if (!child) {
+        ifPart = this.tab + ifPart;
       }
-      if (bodyc) bodyc = "\n" + bodyc + "\n" + this.tab;
-      ifPart = "if (" + cond + ") {" + bodyc + "}";
-      if (!child) ifPart = this.tab + ifPart;
-      if (!this.elseBody) return ifPart;
+      if (!this.elseBody) {
+        return ifPart;
+      }
       return ifPart + ' else ' + (this.isChain ? (o.indent = this.tab, o.chainChild = true, this.elseBody.unwrap().compile(o, LEVEL_TOP)) : "{\n" + (this.elseBody.compile(o, LEVEL_TOP)) + "\n" + this.tab + "}");
     };
 
@@ -2424,13 +2890,17 @@
   Closure = {
     wrap: function(expressions, statement, noReturn) {
       var args, call, func, mentionsArgs, meth;
-      if (expressions.jumps()) return expressions;
+      if (expressions.jumps()) {
+        return expressions;
+      }
       func = new Code([], Block.wrap([expressions]));
       args = [];
       if ((mentionsArgs = expressions.contains(this.literalArgs)) || expressions.contains(this.literalThis)) {
         meth = new Literal(mentionsArgs ? 'apply' : 'call');
         args = [new Literal('this')];
-        if (mentionsArgs) args.push(new Literal('arguments'));
+        if (mentionsArgs) {
+          args.push(new Literal('arguments'));
+        }
         func = new Value(func, [new Access(meth)]);
       }
       func.noReturn = noReturn;
@@ -2445,13 +2915,15 @@
       return node instanceof Literal && node.value === 'arguments' && !node.asKey;
     },
     literalThis: function(node) {
-      return (node instanceof Literal && node.value === 'this' && !node.asKey) || (node instanceof Code && node.bound);
+      return (node instanceof Literal && node.value === 'this' && !node.asKey) || (node instanceof Code && node.bound) || (node instanceof Call && node.isSuper);
     }
   };
 
   unfoldSoak = function(o, parent, name) {
     var ifn;
-    if (!(ifn = parent[name].unfoldSoak(o))) return;
+    if (!(ifn = parent[name].unfoldSoak(o))) {
+      return;
+    }
     parent[name] = ifn.body;
     ifn.body = new Value(parent);
     return ifn;
@@ -2459,19 +2931,19 @@
 
   UTILITIES = {
     "extends": function() {
-      return "function(child, parent) { for (var key in parent) { if (" + (utility('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; }";
+      return "function(child, parent) { for (var key in parent) { if (" + (utility('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; }";
     },
     bind: function() {
       return 'function(fn, me){ return function(){ return fn.apply(me, arguments); }; }';
     },
     indexOf: function() {
-      return "Array.prototype.indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }";
+      return "[].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }";
     },
     hasProp: function() {
-      return 'Object.prototype.hasOwnProperty';
+      return '{}.hasOwnProperty';
     },
     slice: function() {
-      return 'Array.prototype.slice';
+      return '[].slice';
     }
   };
 
diff --git a/weinre.server/node_modules/coffee-script/lib/coffee-script/optparse.js b/weinre.server/node_modules/coffee-script/lib/coffee-script/optparse.js
index 5e0114c..d7fda40 100644
--- a/weinre.server/node_modules/coffee-script/lib/coffee-script/optparse.js
+++ b/weinre.server/node_modules/coffee-script/lib/coffee-script/optparse.js
@@ -1,3 +1,4 @@
+// Generated by CoffeeScript 1.3.3
 (function() {
   var LONG_FLAG, MULTI_FLAG, OPTIONAL, OptionParser, SHORT_FLAG, buildRule, buildRules, normalizeArguments;
 
@@ -9,39 +10,48 @@
     }
 
     OptionParser.prototype.parse = function(args) {
-      var arg, i, isOption, matchedRule, options, originalArgs, pos, rule, value, _i, _len, _len2, _ref;
+      var arg, i, isOption, matchedRule, options, originalArgs, pos, rule, seenNonOptionArg, skippingArgument, value, _i, _j, _len, _len1, _ref;
       options = {
-        arguments: [],
-        literals: []
+        "arguments": []
       };
+      skippingArgument = false;
       originalArgs = args;
       args = normalizeArguments(args);
-      for (i = 0, _len = args.length; i < _len; i++) {
+      for (i = _i = 0, _len = args.length; _i < _len; i = ++_i) {
         arg = args[i];
+        if (skippingArgument) {
+          skippingArgument = false;
+          continue;
+        }
         if (arg === '--') {
           pos = originalArgs.indexOf('--');
-          options.arguments = [originalArgs[1 + pos]];
-          options.literals = originalArgs.slice(2 + pos);
+          options["arguments"] = options["arguments"].concat(originalArgs.slice(pos + 1));
           break;
         }
         isOption = !!(arg.match(LONG_FLAG) || arg.match(SHORT_FLAG));
-        matchedRule = false;
-        _ref = this.rules;
-        for (_i = 0, _len2 = _ref.length; _i < _len2; _i++) {
-          rule = _ref[_i];
-          if (rule.shortFlag === arg || rule.longFlag === arg) {
-            value = rule.hasArgument ? args[i += 1] : true;
-            options[rule.name] = rule.isList ? (options[rule.name] || []).concat(value) : value;
-            matchedRule = true;
-            break;
+        seenNonOptionArg = options["arguments"].length > 0;
+        if (!seenNonOptionArg) {
+          matchedRule = false;
+          _ref = this.rules;
+          for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
+            rule = _ref[_j];
+            if (rule.shortFlag === arg || rule.longFlag === arg) {
+              value = true;
+              if (rule.hasArgument) {
+                skippingArgument = true;
+                value = args[i + 1];
+              }
+              options[rule.name] = rule.isList ? (options[rule.name] || []).concat(value) : value;
+              matchedRule = true;
+              break;
+            }
+          }
+          if (isOption && !matchedRule) {
+            throw new Error("unrecognized option: " + arg);
           }
         }
-        if (isOption && !matchedRule) {
-          throw new Error("unrecognized option: " + arg);
-        }
-        if (!isOption) {
-          options.arguments = originalArgs.slice(originalArgs.indexOf(arg));
-          break;
+        if (seenNonOptionArg || !isOption) {
+          options["arguments"].push(arg);
         }
       }
       return options;
@@ -50,7 +60,9 @@
     OptionParser.prototype.help = function() {
       var letPart, lines, rule, spaces, _i, _len, _ref;
       lines = [];
-      if (this.banner) lines.unshift("" + this.banner + "\n");
+      if (this.banner) {
+        lines.unshift("" + this.banner + "\n");
+      }
       _ref = this.rules;
       for (_i = 0, _len = _ref.length; _i < _len; _i++) {
         rule = _ref[_i];
@@ -66,9 +78,9 @@
 
   })();
 
-  LONG_FLAG = /^(--\w[\w\-]+)/;
+  LONG_FLAG = /^(--\w[\w\-]*)/;
 
-  SHORT_FLAG = /^(-\w)/;
+  SHORT_FLAG = /^(-\w)$/;
 
   MULTI_FLAG = /^-(\w{2,})/;
 
@@ -79,7 +91,9 @@
     _results = [];
     for (_i = 0, _len = rules.length; _i < _len; _i++) {
       tuple = rules[_i];
-      if (tuple.length < 3) tuple.unshift(null);
+      if (tuple.length < 3) {
+        tuple.unshift(null);
+      }
       _results.push(buildRule.apply(null, tuple));
     }
     return _results;
@@ -87,7 +101,9 @@
 
   buildRule = function(shortFlag, longFlag, description, options) {
     var match;
-    if (options == null) options = {};
+    if (options == null) {
+      options = {};
+    }
     match = longFlag.match(OPTIONAL);
     longFlag = longFlag.match(LONG_FLAG)[1];
     return {
@@ -101,14 +117,14 @@
   };
 
   normalizeArguments = function(args) {
-    var arg, l, match, result, _i, _j, _len, _len2, _ref;
+    var arg, l, match, result, _i, _j, _len, _len1, _ref;
     args = args.slice(0);
     result = [];
     for (_i = 0, _len = args.length; _i < _len; _i++) {
       arg = args[_i];
       if (match = arg.match(MULTI_FLAG)) {
         _ref = match[1].split('');
-        for (_j = 0, _len2 = _ref.length; _j < _len2; _j++) {
+        for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
           l = _ref[_j];
           result.push('-' + l);
         }
diff --git a/weinre.server/node_modules/coffee-script/lib/coffee-script/parser.js b/weinre.server/node_modules/coffee-script/lib/coffee-script/parser.js
index 198b563..f049903 100755
--- a/weinre.server/node_modules/coffee-script/lib/coffee-script/parser.js
+++ b/weinre.server/node_modules/coffee-script/lib/coffee-script/parser.js
@@ -2,9 +2,9 @@
 var parser = (function(){
 var parser = {trace: function trace() { },
 yy: {},
-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,"BOOL":36,"Assignable":37,"=":38,"AssignObj":39,"ObjAssignable":40,":":41,"ThisProperty":42,"RETURN":43,"HERECOMMENT":44,"PARAM_START":45,"ParamList":46,"PARAM_END":47,"FuncGlyph":48,"->":49,"=>":50,"OptComma":51,",":52,"Param":53,"ParamVar":54,"...":55,"Array":56,"Object":57,"Splat":58,"SimpleAssignable":59,"Accessor":60,"Parenthetical":61,"Range":62,"This":63,".":64,"?.":65,"::":66,"Index":67,"INDEX_START":68,"IndexValue":69,"INDEX_END":70,"INDEX_SOAK":71,"Slice":72,"{":73,"AssignList":74,"}":75,"CLASS":76,"EXTENDS":77,"OptFuncExist":78,"Arguments":79,"SUPER":80,"FUNC_EXIST":81,"CALL_START":82,"CALL_END":83,"ArgList":84,"THIS":85,"@":86,"[":87,"]":88,"RangeDots":89,"..":90,"Arg":91,"SimpleArgs":92,"TRY":93,"Catch":94,"FINALLY":95,"CATCH":96,"THROW":97,"(":98,")":99,"WhileSource":100,"WHILE":101,"WHEN":102,"UNTIL":103,"Loop":104,"LOOP":105,"ForBody":106,"FOR":107,"ForStart":108,"ForSource":109,"ForVariables":110,"OWN":111,"ForValue":112,"FORIN":113,"FOROF":114,"BY":115,"SWITCH":116,"Whens":117,"ELSE":118,"When":119,"LEADING_WHEN":120,"IfBlock":121,"IF":122,"POST_IF":123,"UNARY":124,"-":125,"+":126,"--":127,"++":128,"?":129,"MATH":130,"SHIFT":131,"COMPARE":132,"LOGIC":133,"RELATION":134,"COMPOUND_ASSIGN":135,"$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:"BOOL",38:"=",41:":",43:"RETURN",44:"HERECOMMENT",45:"PARAM_START",47:"PARAM_END",49:"->",50:"=>",52:",",55:"...",64:".",65:"?.",66:"::",68:"INDEX_START",70:"INDEX_END",71:"INDEX_SOAK",73:"{",75:"}",76:"CLASS",77:"EXTENDS",80:"SUPER",81:"FUNC_EXIST",82:"CALL_START",83:"CALL_END",85:"THIS",86:"@",87:"[",88:"]",90:"..",93:"TRY",95:"FINALLY",96:"CATCH",97:"THROW",98:"(",99:")",101:"WHILE",102:"WHEN",103:"UNTIL",105:"LOOP",107:"FOR",111:"OWN",113:"FORIN",114:"FOROF",115:"BY",116:"SWITCH",118:"ELSE",120:"LEADING_WHEN",122:"IF",123:"POST_IF",124:"UNARY",125:"-",126:"+",127:"--",128:"++",129:"?",130:"MATH",131:"SHIFT",132:"COMPARE",133:"LOGIC",134:"RELATION",135:"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],[17,3],[17,4],[17,5],[39,1],[39,3],[39,5],[39,1],[40,1],[40,1],[40,1],[10,2],[10,1],[11,1],[15,5],[15,2],[48,1],[48,1],[51,0],[51,1],[46,0],[46,1],[46,3],[53,1],[53,2],[53,3],[54,1],[54,1],[54,1],[54,1],[58,2],[59,1],[59,2],[59,2],[59,1],[37,1],[37,1],[37,1],[13,1],[13,1],[13,1],[13,1],[13,1],[60,2],[60,2],[60,2],[60,1],[60,1],[67,3],[67,2],[69,1],[69,1],[57,4],[74,0],[74,1],[74,3],[74,4],[74,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],[78,0],[78,1],[79,2],[79,4],[63,1],[63,1],[42,2],[56,2],[56,4],[89,1],[89,1],[62,5],[72,3],[72,2],[72,2],[84,1],[84,3],[84,4],[84,4],[84,6],[91,1],[91,1],[92,1],[92,3],[19,2],[19,3],[19,4],[19,5],[94,3],[24,2],[61,3],[61,5],[100,2],[100,4],[100,2],[100,4],[20,2],[20,2],[20,2],[20,1],[104,2],[104,2],[21,2],[21,2],[21,2],[106,2],[106,2],[108,2],[108,3],[112,1],[112,1],[112,1],[110,1],[110,3],[109,2],[109,2],[109,4],[109,4],[109,4],[109,6],[109,6],[22,5],[22,7],[22,4],[22,6],[117,1],[117,2],[119,3],[119,4],[121,3],[121,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,3]],
+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,"Index":69,"INDEX_START":70,"IndexValue":71,"INDEX_END":72,"INDEX_SOAK":73,"Slice":74,"{":75,"AssignList":76,"}":77,"CLASS":78,"EXTENDS":79,"OptFuncExist":80,"Arguments":81,"SUPER":82,"FUNC_EXIST":83,"CALL_START":84,"CALL_END":85,"ArgList":86,"THIS":87,"@":88,"[":89,"]":90,"RangeDots":91,"..":92,"Arg":93,"SimpleArgs":94,"TRY":95,"Catch":96,"FINALLY":97,"CATCH":98,"THROW":99,"(":100,")":101,"WhileSource":102,"WHILE":103,"WHEN":104,"UNTIL":105,"Loop":106,"LOOP":107,"ForBody":108,"FOR":109,"ForStart":110,"ForSource":111,"ForVariables":112,"OWN":113,"ForValue":114,"FORIN":115,"FOROF":116,"BY":117,"SWITCH":118,"Whens":119,"ELSE":120,"When":121,"LEADING_WHEN":122,"IfBlock":123,"IF":124,"POST_IF":125,"UNARY":126,"-":127,"+":128,"--":129,"++":130,"?":131,"MATH":132,"SHIFT":133,"COMPARE":134,"LOGIC":135,"RELATION":136,"COMPOUND_ASSIGN":137,"$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:"::",70:"INDEX_START",72:"INDEX_END",73:"INDEX_SOAK",75:"{",77:"}",78:"CLASS",79:"EXTENDS",82:"SUPER",83:"FUNC_EXIST",84:"CALL_START",85:"CALL_END",87:"THIS",88:"@",89:"[",90:"]",92:"..",95:"TRY",97:"FINALLY",98:"CATCH",99:"THROW",100:"(",101:")",103:"WHILE",104:"WHEN",105:"UNTIL",107:"LOOP",109:"FOR",113:"OWN",115:"FORIN",116:"FOROF",117:"BY",118:"SWITCH",120:"ELSE",122:"LEADING_WHEN",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"},
+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,1],[62,1],[69,3],[69,2],[71,1],[71,1],[59,4],[76,0],[76,1],[76,3],[76,4],[76,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],[80,0],[80,1],[81,2],[81,4],[65,1],[65,1],[44,2],[58,2],[58,4],[91,1],[91,1],[64,5],[74,3],[74,2],[74,2],[74,1],[86,1],[86,3],[86,4],[86,4],[86,6],[93,1],[93,1],[94,1],[94,3],[19,2],[19,3],[19,4],[19,5],[96,3],[24,2],[63,3],[63,5],[102,2],[102,4],[102,2],[102,4],[20,2],[20,2],[20,2],[20,1],[106,2],[106,2],[21,2],[21,2],[21,2],[108,2],[108,2],[110,2],[110,3],[114,1],[114,1],[114,1],[114,1],[112,1],[112,3],[111,2],[111,2],[111,4],[111,4],[111,4],[111,6],[111,6],[22,5],[22,7],[22,4],[22,6],[119,1],[119,2],[121,3],[121,4],[123,3],[123,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,3]],
 performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {
 
 var $0 = $$.length - 1;
@@ -73,90 +73,85 @@
 break;
 case 32:this.$ = new yy.Literal($$[$0]);
 break;
-case 33:this.$ = (function () {
-        var val;
-        val = new yy.Literal($$[$0]);
-        if ($$[$0] === 'undefined') val.isUndefined = true;
-        return val;
-      }());
+case 33:this.$ = new yy.Undefined;
 break;
-case 34:this.$ = new yy.Assign($$[$0-2], $$[$0]);
+case 34:this.$ = new yy.Null;
 break;
-case 35:this.$ = new yy.Assign($$[$0-3], $$[$0]);
+case 35:this.$ = new yy.Bool($$[$0]);
 break;
-case 36:this.$ = new yy.Assign($$[$0-4], $$[$0-1]);
+case 36:this.$ = new yy.Assign($$[$0-2], $$[$0]);
 break;
-case 37:this.$ = new yy.Value($$[$0]);
+case 37:this.$ = new yy.Assign($$[$0-3], $$[$0]);
 break;
-case 38:this.$ = new yy.Assign(new yy.Value($$[$0-2]), $$[$0], 'object');
+case 38:this.$ = new yy.Assign($$[$0-4], $$[$0-1]);
 break;
-case 39:this.$ = new yy.Assign(new yy.Value($$[$0-4]), $$[$0-1], 'object');
+case 39:this.$ = new yy.Value($$[$0]);
 break;
-case 40:this.$ = $$[$0];
+case 40:this.$ = new yy.Assign(new yy.Value($$[$0-2]), $$[$0], 'object');
 break;
-case 41:this.$ = $$[$0];
+case 41:this.$ = new yy.Assign(new yy.Value($$[$0-4]), $$[$0-1], 'object');
 break;
 case 42:this.$ = $$[$0];
 break;
 case 43:this.$ = $$[$0];
 break;
-case 44:this.$ = new yy.Return($$[$0]);
+case 44:this.$ = $$[$0];
 break;
-case 45:this.$ = new yy.Return;
+case 45:this.$ = $$[$0];
 break;
-case 46:this.$ = new yy.Comment($$[$0]);
+case 46:this.$ = new yy.Return($$[$0]);
 break;
-case 47:this.$ = new yy.Code($$[$0-3], $$[$0], $$[$0-1]);
+case 47:this.$ = new yy.Return;
 break;
-case 48:this.$ = new yy.Code([], $$[$0], $$[$0-1]);
+case 48:this.$ = new yy.Comment($$[$0]);
 break;
-case 49:this.$ = 'func';
+case 49:this.$ = new yy.Code($$[$0-3], $$[$0], $$[$0-1]);
 break;
-case 50:this.$ = 'boundfunc';
+case 50:this.$ = new yy.Code([], $$[$0], $$[$0-1]);
 break;
-case 51:this.$ = $$[$0];
+case 51:this.$ = 'func';
 break;
-case 52:this.$ = $$[$0];
+case 52:this.$ = 'boundfunc';
 break;
-case 53:this.$ = [];
+case 53:this.$ = $$[$0];
 break;
-case 54:this.$ = [$$[$0]];
+case 54:this.$ = $$[$0];
 break;
-case 55:this.$ = $$[$0-2].concat($$[$0]);
+case 55:this.$ = [];
 break;
-case 56:this.$ = new yy.Param($$[$0]);
+case 56:this.$ = [$$[$0]];
 break;
-case 57:this.$ = new yy.Param($$[$0-1], null, true);
+case 57:this.$ = $$[$0-2].concat($$[$0]);
 break;
-case 58:this.$ = new yy.Param($$[$0-2], $$[$0]);
+case 58:this.$ = $$[$0-3].concat($$[$0]);
 break;
-case 59:this.$ = $$[$0];
+case 59:this.$ = $$[$0-5].concat($$[$0-2]);
 break;
-case 60:this.$ = $$[$0];
+case 60:this.$ = new yy.Param($$[$0]);
 break;
-case 61:this.$ = $$[$0];
+case 61:this.$ = new yy.Param($$[$0-1], null, true);
 break;
-case 62:this.$ = $$[$0];
+case 62:this.$ = new yy.Param($$[$0-2], $$[$0]);
 break;
-case 63:this.$ = new yy.Splat($$[$0-1]);
+case 63:this.$ = $$[$0];
 break;
-case 64:this.$ = new yy.Value($$[$0]);
+case 64:this.$ = $$[$0];
 break;
-case 65:this.$ = $$[$0-1].add($$[$0]);
+case 65:this.$ = $$[$0];
 break;
-case 66:this.$ = new yy.Value($$[$0-1], [].concat($$[$0]));
+case 66:this.$ = $$[$0];
 break;
-case 67:this.$ = $$[$0];
+case 67:this.$ = new yy.Splat($$[$0-1]);
 break;
-case 68:this.$ = $$[$0];
+case 68:this.$ = new yy.Value($$[$0]);
 break;
-case 69:this.$ = new yy.Value($$[$0]);
+case 69:this.$ = $$[$0-1].add($$[$0]);
 break;
-case 70:this.$ = new yy.Value($$[$0]);
+case 70:this.$ = new yy.Value($$[$0-1], [].concat($$[$0]));
 break;
 case 71:this.$ = $$[$0];
 break;
-case 72:this.$ = new yy.Value($$[$0]);
+case 72:this.$ = $$[$0];
 break;
 case 73:this.$ = new yy.Value($$[$0]);
 break;
@@ -164,291 +159,303 @@
 break;
 case 75:this.$ = $$[$0];
 break;
-case 76:this.$ = new yy.Access($$[$0]);
+case 76:this.$ = new yy.Value($$[$0]);
 break;
-case 77:this.$ = new yy.Access($$[$0], 'soak');
+case 77:this.$ = new yy.Value($$[$0]);
 break;
-case 78:this.$ = [new yy.Access(new yy.Literal('prototype')), new yy.Access($$[$0])];
+case 78:this.$ = new yy.Value($$[$0]);
 break;
-case 79:this.$ = new yy.Access(new yy.Literal('prototype'));
+case 79:this.$ = $$[$0];
 break;
-case 80:this.$ = $$[$0];
+case 80:this.$ = new yy.Access($$[$0]);
 break;
-case 81:this.$ = $$[$0-1];
+case 81:this.$ = new yy.Access($$[$0], 'soak');
 break;
-case 82:this.$ = yy.extend($$[$0], {
+case 82:this.$ = [new yy.Access(new yy.Literal('prototype')), new yy.Access($$[$0])];
+break;
+case 83:this.$ = new yy.Access(new yy.Literal('prototype'));
+break;
+case 84:this.$ = $$[$0];
+break;
+case 85:this.$ = $$[$0-1];
+break;
+case 86:this.$ = yy.extend($$[$0], {
           soak: true
         });
 break;
-case 83:this.$ = new yy.Index($$[$0]);
+case 87:this.$ = new yy.Index($$[$0]);
 break;
-case 84:this.$ = new yy.Slice($$[$0]);
+case 88:this.$ = new yy.Slice($$[$0]);
 break;
-case 85:this.$ = new yy.Obj($$[$0-2], $$[$0-3].generated);
+case 89:this.$ = new yy.Obj($$[$0-2], $$[$0-3].generated);
 break;
-case 86:this.$ = [];
+case 90:this.$ = [];
 break;
-case 87:this.$ = [$$[$0]];
+case 91:this.$ = [$$[$0]];
 break;
-case 88:this.$ = $$[$0-2].concat($$[$0]);
+case 92:this.$ = $$[$0-2].concat($$[$0]);
 break;
-case 89:this.$ = $$[$0-3].concat($$[$0]);
+case 93:this.$ = $$[$0-3].concat($$[$0]);
 break;
-case 90:this.$ = $$[$0-5].concat($$[$0-2]);
+case 94:this.$ = $$[$0-5].concat($$[$0-2]);
 break;
-case 91:this.$ = new yy.Class;
+case 95:this.$ = new yy.Class;
 break;
-case 92:this.$ = new yy.Class(null, null, $$[$0]);
+case 96:this.$ = new yy.Class(null, null, $$[$0]);
 break;
-case 93:this.$ = new yy.Class(null, $$[$0]);
+case 97:this.$ = new yy.Class(null, $$[$0]);
 break;
-case 94:this.$ = new yy.Class(null, $$[$0-1], $$[$0]);
+case 98:this.$ = new yy.Class(null, $$[$0-1], $$[$0]);
 break;
-case 95:this.$ = new yy.Class($$[$0]);
+case 99:this.$ = new yy.Class($$[$0]);
 break;
-case 96:this.$ = new yy.Class($$[$0-1], null, $$[$0]);
+case 100:this.$ = new yy.Class($$[$0-1], null, $$[$0]);
 break;
-case 97:this.$ = new yy.Class($$[$0-2], $$[$0]);
+case 101:this.$ = new yy.Class($$[$0-2], $$[$0]);
 break;
-case 98:this.$ = new yy.Class($$[$0-3], $$[$0-1], $$[$0]);
+case 102:this.$ = new yy.Class($$[$0-3], $$[$0-1], $$[$0]);
 break;
-case 99:this.$ = new yy.Call($$[$0-2], $$[$0], $$[$0-1]);
+case 103:this.$ = new yy.Call($$[$0-2], $$[$0], $$[$0-1]);
 break;
-case 100:this.$ = new yy.Call($$[$0-2], $$[$0], $$[$0-1]);
+case 104:this.$ = new yy.Call($$[$0-2], $$[$0], $$[$0-1]);
 break;
-case 101:this.$ = new yy.Call('super', [new yy.Splat(new yy.Literal('arguments'))]);
+case 105:this.$ = new yy.Call('super', [new yy.Splat(new yy.Literal('arguments'))]);
 break;
-case 102:this.$ = new yy.Call('super', $$[$0]);
+case 106:this.$ = new yy.Call('super', $$[$0]);
 break;
-case 103:this.$ = false;
+case 107:this.$ = false;
 break;
-case 104:this.$ = true;
+case 108:this.$ = true;
 break;
-case 105:this.$ = [];
+case 109:this.$ = [];
 break;
-case 106:this.$ = $$[$0-2];
+case 110:this.$ = $$[$0-2];
 break;
-case 107:this.$ = new yy.Value(new yy.Literal('this'));
+case 111:this.$ = new yy.Value(new yy.Literal('this'));
 break;
-case 108:this.$ = new yy.Value(new yy.Literal('this'));
+case 112:this.$ = new yy.Value(new yy.Literal('this'));
 break;
-case 109:this.$ = new yy.Value(new yy.Literal('this'), [new yy.Access($$[$0])], 'this');
+case 113:this.$ = new yy.Value(new yy.Literal('this'), [new yy.Access($$[$0])], 'this');
 break;
-case 110:this.$ = new yy.Arr([]);
+case 114:this.$ = new yy.Arr([]);
 break;
-case 111:this.$ = new yy.Arr($$[$0-2]);
+case 115:this.$ = new yy.Arr($$[$0-2]);
 break;
-case 112:this.$ = 'inclusive';
+case 116:this.$ = 'inclusive';
 break;
-case 113:this.$ = 'exclusive';
+case 117:this.$ = 'exclusive';
 break;
-case 114:this.$ = new yy.Range($$[$0-3], $$[$0-1], $$[$0-2]);
+case 118:this.$ = new yy.Range($$[$0-3], $$[$0-1], $$[$0-2]);
 break;
-case 115:this.$ = new yy.Range($$[$0-2], $$[$0], $$[$0-1]);
+case 119:this.$ = new yy.Range($$[$0-2], $$[$0], $$[$0-1]);
 break;
-case 116:this.$ = new yy.Range($$[$0-1], null, $$[$0]);
+case 120:this.$ = new yy.Range($$[$0-1], null, $$[$0]);
 break;
-case 117:this.$ = new yy.Range(null, $$[$0], $$[$0-1]);
+case 121:this.$ = new yy.Range(null, $$[$0], $$[$0-1]);
 break;
-case 118:this.$ = [$$[$0]];
+case 122:this.$ = new yy.Range(null, null, $$[$0]);
 break;
-case 119:this.$ = $$[$0-2].concat($$[$0]);
+case 123:this.$ = [$$[$0]];
 break;
-case 120:this.$ = $$[$0-3].concat($$[$0]);
+case 124:this.$ = $$[$0-2].concat($$[$0]);
 break;
-case 121:this.$ = $$[$0-2];
+case 125:this.$ = $$[$0-3].concat($$[$0]);
 break;
-case 122:this.$ = $$[$0-5].concat($$[$0-2]);
+case 126:this.$ = $$[$0-2];
 break;
-case 123:this.$ = $$[$0];
+case 127:this.$ = $$[$0-5].concat($$[$0-2]);
 break;
-case 124:this.$ = $$[$0];
+case 128:this.$ = $$[$0];
 break;
-case 125:this.$ = $$[$0];
+case 129:this.$ = $$[$0];
 break;
-case 126:this.$ = [].concat($$[$0-2], $$[$0]);
+case 130:this.$ = $$[$0];
 break;
-case 127:this.$ = new yy.Try($$[$0]);
+case 131:this.$ = [].concat($$[$0-2], $$[$0]);
 break;
-case 128:this.$ = new yy.Try($$[$0-1], $$[$0][0], $$[$0][1]);
+case 132:this.$ = new yy.Try($$[$0]);
 break;
-case 129:this.$ = new yy.Try($$[$0-2], null, null, $$[$0]);
+case 133:this.$ = new yy.Try($$[$0-1], $$[$0][0], $$[$0][1]);
 break;
-case 130:this.$ = new yy.Try($$[$0-3], $$[$0-2][0], $$[$0-2][1], $$[$0]);
+case 134:this.$ = new yy.Try($$[$0-2], null, null, $$[$0]);
 break;
-case 131:this.$ = [$$[$0-1], $$[$0]];
+case 135:this.$ = new yy.Try($$[$0-3], $$[$0-2][0], $$[$0-2][1], $$[$0]);
 break;
-case 132:this.$ = new yy.Throw($$[$0]);
+case 136:this.$ = [$$[$0-1], $$[$0]];
 break;
-case 133:this.$ = new yy.Parens($$[$0-1]);
+case 137:this.$ = new yy.Throw($$[$0]);
 break;
-case 134:this.$ = new yy.Parens($$[$0-2]);
+case 138:this.$ = new yy.Parens($$[$0-1]);
 break;
-case 135:this.$ = new yy.While($$[$0]);
+case 139:this.$ = new yy.Parens($$[$0-2]);
 break;
-case 136:this.$ = new yy.While($$[$0-2], {
+case 140:this.$ = new yy.While($$[$0]);
+break;
+case 141:this.$ = new yy.While($$[$0-2], {
           guard: $$[$0]
         });
 break;
-case 137:this.$ = new yy.While($$[$0], {
+case 142:this.$ = new yy.While($$[$0], {
           invert: true
         });
 break;
-case 138:this.$ = new yy.While($$[$0-2], {
+case 143:this.$ = new yy.While($$[$0-2], {
           invert: true,
           guard: $$[$0]
         });
 break;
-case 139:this.$ = $$[$0-1].addBody($$[$0]);
+case 144:this.$ = $$[$0-1].addBody($$[$0]);
 break;
-case 140:this.$ = $$[$0].addBody(yy.Block.wrap([$$[$0-1]]));
+case 145:this.$ = $$[$0].addBody(yy.Block.wrap([$$[$0-1]]));
 break;
-case 141:this.$ = $$[$0].addBody(yy.Block.wrap([$$[$0-1]]));
+case 146:this.$ = $$[$0].addBody(yy.Block.wrap([$$[$0-1]]));
 break;
-case 142:this.$ = $$[$0];
+case 147:this.$ = $$[$0];
 break;
-case 143:this.$ = new yy.While(new yy.Literal('true')).addBody($$[$0]);
+case 148:this.$ = new yy.While(new yy.Literal('true')).addBody($$[$0]);
 break;
-case 144:this.$ = new yy.While(new yy.Literal('true')).addBody(yy.Block.wrap([$$[$0]]));
+case 149:this.$ = new yy.While(new yy.Literal('true')).addBody(yy.Block.wrap([$$[$0]]));
 break;
-case 145:this.$ = new yy.For($$[$0-1], $$[$0]);
+case 150:this.$ = new yy.For($$[$0-1], $$[$0]);
 break;
-case 146:this.$ = new yy.For($$[$0-1], $$[$0]);
+case 151:this.$ = new yy.For($$[$0-1], $$[$0]);
 break;
-case 147:this.$ = new yy.For($$[$0], $$[$0-1]);
+case 152:this.$ = new yy.For($$[$0], $$[$0-1]);
 break;
-case 148:this.$ = {
+case 153:this.$ = {
           source: new yy.Value($$[$0])
         };
 break;
-case 149:this.$ = (function () {
+case 154:this.$ = (function () {
         $$[$0].own = $$[$0-1].own;
         $$[$0].name = $$[$0-1][0];
         $$[$0].index = $$[$0-1][1];
         return $$[$0];
       }());
 break;
-case 150:this.$ = $$[$0];
+case 155:this.$ = $$[$0];
 break;
-case 151:this.$ = (function () {
+case 156:this.$ = (function () {
         $$[$0].own = true;
         return $$[$0];
       }());
 break;
-case 152:this.$ = $$[$0];
+case 157:this.$ = $$[$0];
 break;
-case 153:this.$ = new yy.Value($$[$0]);
+case 158:this.$ = $$[$0];
 break;
-case 154:this.$ = new yy.Value($$[$0]);
+case 159:this.$ = new yy.Value($$[$0]);
 break;
-case 155:this.$ = [$$[$0]];
+case 160:this.$ = new yy.Value($$[$0]);
 break;
-case 156:this.$ = [$$[$0-2], $$[$0]];
+case 161:this.$ = [$$[$0]];
 break;
-case 157:this.$ = {
+case 162:this.$ = [$$[$0-2], $$[$0]];
+break;
+case 163:this.$ = {
           source: $$[$0]
         };
 break;
-case 158:this.$ = {
+case 164:this.$ = {
           source: $$[$0],
           object: true
         };
 break;
-case 159:this.$ = {
+case 165:this.$ = {
           source: $$[$0-2],
           guard: $$[$0]
         };
 break;
-case 160:this.$ = {
+case 166:this.$ = {
           source: $$[$0-2],
           guard: $$[$0],
           object: true
         };
 break;
-case 161:this.$ = {
+case 167:this.$ = {
           source: $$[$0-2],
           step: $$[$0]
         };
 break;
-case 162:this.$ = {
+case 168:this.$ = {
           source: $$[$0-4],
           guard: $$[$0-2],
           step: $$[$0]
         };
 break;
-case 163:this.$ = {
+case 169:this.$ = {
           source: $$[$0-4],
           step: $$[$0-2],
           guard: $$[$0]
         };
 break;
-case 164:this.$ = new yy.Switch($$[$0-3], $$[$0-1]);
+case 170:this.$ = new yy.Switch($$[$0-3], $$[$0-1]);
 break;
-case 165:this.$ = new yy.Switch($$[$0-5], $$[$0-3], $$[$0-1]);
+case 171:this.$ = new yy.Switch($$[$0-5], $$[$0-3], $$[$0-1]);
 break;
-case 166:this.$ = new yy.Switch(null, $$[$0-1]);
+case 172:this.$ = new yy.Switch(null, $$[$0-1]);
 break;
-case 167:this.$ = new yy.Switch(null, $$[$0-3], $$[$0-1]);
-break;
-case 168:this.$ = $$[$0];
-break;
-case 169:this.$ = $$[$0-1].concat($$[$0]);
-break;
-case 170:this.$ = [[$$[$0-1], $$[$0]]];
-break;
-case 171:this.$ = [[$$[$0-2], $$[$0-1]]];
-break;
-case 172:this.$ = new yy.If($$[$0-1], $$[$0], {
-          type: $$[$0-2]
-        });
-break;
-case 173:this.$ = $$[$0-4].addElse(new yy.If($$[$0-1], $$[$0], {
-          type: $$[$0-2]
-        }));
+case 173:this.$ = new yy.Switch(null, $$[$0-3], $$[$0-1]);
 break;
 case 174:this.$ = $$[$0];
 break;
-case 175:this.$ = $$[$0-2].addElse($$[$0]);
+case 175:this.$ = $$[$0-1].concat($$[$0]);
 break;
-case 176:this.$ = new yy.If($$[$0], yy.Block.wrap([$$[$0-2]]), {
+case 176:this.$ = [[$$[$0-1], $$[$0]]];
+break;
+case 177:this.$ = [[$$[$0-2], $$[$0-1]]];
+break;
+case 178:this.$ = new yy.If($$[$0-1], $$[$0], {
+          type: $$[$0-2]
+        });
+break;
+case 179:this.$ = $$[$0-4].addElse(new yy.If($$[$0-1], $$[$0], {
+          type: $$[$0-2]
+        }));
+break;
+case 180:this.$ = $$[$0];
+break;
+case 181:this.$ = $$[$0-2].addElse($$[$0]);
+break;
+case 182:this.$ = new yy.If($$[$0], yy.Block.wrap([$$[$0-2]]), {
           type: $$[$0-1],
           statement: true
         });
 break;
-case 177:this.$ = new yy.If($$[$0], yy.Block.wrap([$$[$0-2]]), {
+case 183:this.$ = new yy.If($$[$0], yy.Block.wrap([$$[$0-2]]), {
           type: $$[$0-1],
           statement: true
         });
 break;
-case 178:this.$ = new yy.Op($$[$0-1], $$[$0]);
+case 184:this.$ = new yy.Op($$[$0-1], $$[$0]);
 break;
-case 179:this.$ = new yy.Op('-', $$[$0]);
+case 185:this.$ = new yy.Op('-', $$[$0]);
 break;
-case 180:this.$ = new yy.Op('+', $$[$0]);
+case 186:this.$ = new yy.Op('+', $$[$0]);
 break;
-case 181:this.$ = new yy.Op('--', $$[$0]);
+case 187:this.$ = new yy.Op('--', $$[$0]);
 break;
-case 182:this.$ = new yy.Op('++', $$[$0]);
+case 188:this.$ = new yy.Op('++', $$[$0]);
 break;
-case 183:this.$ = new yy.Op('--', $$[$0-1], null, true);
+case 189:this.$ = new yy.Op('--', $$[$0-1], null, true);
 break;
-case 184:this.$ = new yy.Op('++', $$[$0-1], null, true);
+case 190:this.$ = new yy.Op('++', $$[$0-1], null, true);
 break;
-case 185:this.$ = new yy.Existence($$[$0-1]);
+case 191:this.$ = new yy.Existence($$[$0-1]);
 break;
-case 186:this.$ = new yy.Op('+', $$[$0-2], $$[$0]);
+case 192:this.$ = new yy.Op('+', $$[$0-2], $$[$0]);
 break;
-case 187:this.$ = new yy.Op('-', $$[$0-2], $$[$0]);
+case 193:this.$ = new yy.Op('-', $$[$0-2], $$[$0]);
 break;
-case 188:this.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
+case 194:this.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
 break;
-case 189:this.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
+case 195:this.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
 break;
-case 190:this.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
+case 196:this.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
 break;
-case 191:this.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
+case 197:this.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
 break;
-case 192:this.$ = (function () {
+case 198:this.$ = (function () {
         if ($$[$0-1].charAt(0) === '!') {
           return new yy.Op($$[$0-1].slice(1), $$[$0-2], $$[$0]).invert();
         } else {
@@ -456,16 +463,16 @@
         }
       }());
 break;
-case 193:this.$ = new yy.Assign($$[$0-2], $$[$0], $$[$0-1]);
+case 199:this.$ = new yy.Assign($$[$0-2], $$[$0], $$[$0-1]);
 break;
-case 194:this.$ = new yy.Assign($$[$0-4], $$[$0-1], $$[$0-3]);
+case 200:this.$ = new yy.Assign($$[$0-4], $$[$0-1], $$[$0-3]);
 break;
-case 195:this.$ = new yy.Extends($$[$0-2], $$[$0]);
+case 201:this.$ = 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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[3]},{1:[2,2],6:[1,72]},{6:[1,73]},{1:[2,4],6:[2,4],26:[2,4],99:[2,4]},{4:75,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,74],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,7],6:[2,7],26:[2,7],99:[2,7],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,8],6:[2,8],26:[2,8],99:[2,8],100:88,101:[1,63],103:[1,64],106:89,107:[1,66],108:67,123:[1,87]},{1:[2,12],6:[2,12],25:[2,12],26:[2,12],47:[2,12],52:[2,12],55:[2,12],60:91,64:[1,93],65:[1,94],66:[1,95],67:96,68:[1,97],70:[2,12],71:[1,98],75:[2,12],78:90,81:[1,92],82:[2,103],83:[2,12],88:[2,12],90:[2,12],99:[2,12],101:[2,12],102:[2,12],103:[2,12],107:[2,12],115:[2,12],123:[2,12],125:[2,12],126:[2,12],129:[2,12],130:[2,12],131:[2,12],132:[2,12],133:[2,12],134:[2,12]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],47:[2,13],52:[2,13],55:[2,13],60:100,64:[1,93],65:[1,94],66:[1,95],67:96,68:[1,97],70:[2,13],71:[1,98],75:[2,13],78:99,81:[1,92],82:[2,103],83:[2,13],88:[2,13],90:[2,13],99:[2,13],101:[2,13],102:[2,13],103:[2,13],107:[2,13],115:[2,13],123:[2,13],125:[2,13],126:[2,13],129:[2,13],130:[2,13],131:[2,13],132:[2,13],133:[2,13],134:[2,13]},{1:[2,14],6:[2,14],25:[2,14],26:[2,14],47:[2,14],52:[2,14],55:[2,14],70:[2,14],75:[2,14],83:[2,14],88:[2,14],90:[2,14],99:[2,14],101:[2,14],102:[2,14],103:[2,14],107:[2,14],115:[2,14],123:[2,14],125:[2,14],126:[2,14],129:[2,14],130:[2,14],131:[2,14],132:[2,14],133:[2,14],134:[2,14]},{1:[2,15],6:[2,15],25:[2,15],26:[2,15],47:[2,15],52:[2,15],55:[2,15],70:[2,15],75:[2,15],83:[2,15],88:[2,15],90:[2,15],99:[2,15],101:[2,15],102:[2,15],103:[2,15],107:[2,15],115:[2,15],123:[2,15],125:[2,15],126:[2,15],129:[2,15],130:[2,15],131:[2,15],132:[2,15],133:[2,15],134:[2,15]},{1:[2,16],6:[2,16],25:[2,16],26:[2,16],47:[2,16],52:[2,16],55:[2,16],70:[2,16],75:[2,16],83:[2,16],88:[2,16],90:[2,16],99:[2,16],101:[2,16],102:[2,16],103:[2,16],107:[2,16],115:[2,16],123:[2,16],125:[2,16],126:[2,16],129:[2,16],130:[2,16],131:[2,16],132:[2,16],133:[2,16],134:[2,16]},{1:[2,17],6:[2,17],25:[2,17],26:[2,17],47:[2,17],52:[2,17],55:[2,17],70:[2,17],75:[2,17],83:[2,17],88:[2,17],90:[2,17],99:[2,17],101:[2,17],102:[2,17],103:[2,17],107:[2,17],115:[2,17],123:[2,17],125:[2,17],126:[2,17],129:[2,17],130:[2,17],131:[2,17],132:[2,17],133:[2,17],134:[2,17]},{1:[2,18],6:[2,18],25:[2,18],26:[2,18],47:[2,18],52:[2,18],55:[2,18],70:[2,18],75:[2,18],83:[2,18],88:[2,18],90:[2,18],99:[2,18],101:[2,18],102:[2,18],103:[2,18],107:[2,18],115:[2,18],123:[2,18],125:[2,18],126:[2,18],129:[2,18],130:[2,18],131:[2,18],132:[2,18],133:[2,18],134:[2,18]},{1:[2,19],6:[2,19],25:[2,19],26:[2,19],47:[2,19],52:[2,19],55:[2,19],70:[2,19],75:[2,19],83:[2,19],88:[2,19],90:[2,19],99:[2,19],101:[2,19],102:[2,19],103:[2,19],107:[2,19],115:[2,19],123:[2,19],125:[2,19],126:[2,19],129:[2,19],130:[2,19],131:[2,19],132:[2,19],133:[2,19],134:[2,19]},{1:[2,20],6:[2,20],25:[2,20],26:[2,20],47:[2,20],52:[2,20],55:[2,20],70:[2,20],75:[2,20],83:[2,20],88:[2,20],90:[2,20],99:[2,20],101:[2,20],102:[2,20],103:[2,20],107:[2,20],115:[2,20],123:[2,20],125:[2,20],126:[2,20],129:[2,20],130:[2,20],131:[2,20],132:[2,20],133:[2,20],134:[2,20]},{1:[2,21],6:[2,21],25:[2,21],26:[2,21],47:[2,21],52:[2,21],55:[2,21],70:[2,21],75:[2,21],83:[2,21],88:[2,21],90:[2,21],99:[2,21],101:[2,21],102:[2,21],103:[2,21],107:[2,21],115:[2,21],123:[2,21],125:[2,21],126:[2,21],129:[2,21],130:[2,21],131:[2,21],132:[2,21],133:[2,21],134:[2,21]},{1:[2,22],6:[2,22],25:[2,22],26:[2,22],47:[2,22],52:[2,22],55:[2,22],70:[2,22],75:[2,22],83:[2,22],88:[2,22],90:[2,22],99:[2,22],101:[2,22],102:[2,22],103:[2,22],107:[2,22],115:[2,22],123:[2,22],125:[2,22],126:[2,22],129:[2,22],130:[2,22],131:[2,22],132:[2,22],133:[2,22],134:[2,22]},{1:[2,23],6:[2,23],25:[2,23],26:[2,23],47:[2,23],52:[2,23],55:[2,23],70:[2,23],75:[2,23],83:[2,23],88:[2,23],90:[2,23],99:[2,23],101:[2,23],102:[2,23],103:[2,23],107:[2,23],115:[2,23],123:[2,23],125:[2,23],126:[2,23],129:[2,23],130:[2,23],131:[2,23],132:[2,23],133:[2,23],134:[2,23]},{1:[2,9],6:[2,9],26:[2,9],99:[2,9],101:[2,9],103:[2,9],107:[2,9],123:[2,9]},{1:[2,10],6:[2,10],26:[2,10],99:[2,10],101:[2,10],103:[2,10],107:[2,10],123:[2,10]},{1:[2,11],6:[2,11],26:[2,11],99:[2,11],101:[2,11],103:[2,11],107:[2,11],123:[2,11]},{1:[2,71],6:[2,71],25:[2,71],26:[2,71],38:[1,101],47:[2,71],52:[2,71],55:[2,71],64:[2,71],65:[2,71],66:[2,71],68:[2,71],70:[2,71],71:[2,71],75:[2,71],81:[2,71],82:[2,71],83:[2,71],88:[2,71],90:[2,71],99:[2,71],101:[2,71],102:[2,71],103:[2,71],107:[2,71],115:[2,71],123:[2,71],125:[2,71],126:[2,71],129:[2,71],130:[2,71],131:[2,71],132:[2,71],133:[2,71],134:[2,71]},{1:[2,72],6:[2,72],25:[2,72],26:[2,72],47:[2,72],52:[2,72],55:[2,72],64:[2,72],65:[2,72],66:[2,72],68:[2,72],70:[2,72],71:[2,72],75:[2,72],81:[2,72],82:[2,72],83:[2,72],88:[2,72],90:[2,72],99:[2,72],101:[2,72],102:[2,72],103:[2,72],107:[2,72],115:[2,72],123:[2,72],125:[2,72],126:[2,72],129:[2,72],130:[2,72],131:[2,72],132:[2,72],133:[2,72],134:[2,72]},{1:[2,73],6:[2,73],25:[2,73],26:[2,73],47:[2,73],52:[2,73],55:[2,73],64:[2,73],65:[2,73],66:[2,73],68:[2,73],70:[2,73],71:[2,73],75:[2,73],81:[2,73],82:[2,73],83:[2,73],88:[2,73],90:[2,73],99:[2,73],101:[2,73],102:[2,73],103:[2,73],107:[2,73],115:[2,73],123:[2,73],125:[2,73],126:[2,73],129:[2,73],130:[2,73],131:[2,73],132:[2,73],133:[2,73],134:[2,73]},{1:[2,74],6:[2,74],25:[2,74],26:[2,74],47:[2,74],52:[2,74],55:[2,74],64:[2,74],65:[2,74],66:[2,74],68:[2,74],70:[2,74],71:[2,74],75:[2,74],81:[2,74],82:[2,74],83:[2,74],88:[2,74],90:[2,74],99:[2,74],101:[2,74],102:[2,74],103:[2,74],107:[2,74],115:[2,74],123:[2,74],125:[2,74],126:[2,74],129:[2,74],130:[2,74],131:[2,74],132:[2,74],133:[2,74],134:[2,74]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],47:[2,75],52:[2,75],55:[2,75],64:[2,75],65:[2,75],66:[2,75],68:[2,75],70:[2,75],71:[2,75],75:[2,75],81:[2,75],82:[2,75],83:[2,75],88:[2,75],90:[2,75],99:[2,75],101:[2,75],102:[2,75],103:[2,75],107:[2,75],115:[2,75],123:[2,75],125:[2,75],126:[2,75],129:[2,75],130:[2,75],131:[2,75],132:[2,75],133:[2,75],134:[2,75]},{1:[2,101],6:[2,101],25:[2,101],26:[2,101],47:[2,101],52:[2,101],55:[2,101],64:[2,101],65:[2,101],66:[2,101],68:[2,101],70:[2,101],71:[2,101],75:[2,101],79:102,81:[2,101],82:[1,103],83:[2,101],88:[2,101],90:[2,101],99:[2,101],101:[2,101],102:[2,101],103:[2,101],107:[2,101],115:[2,101],123:[2,101],125:[2,101],126:[2,101],129:[2,101],130:[2,101],131:[2,101],132:[2,101],133:[2,101],134:[2,101]},{27:107,28:[1,71],42:108,46:104,47:[2,53],52:[2,53],53:105,54:106,56:109,57:110,73:[1,68],86:[1,111],87:[1,112]},{5:113,25:[1,5]},{8:114,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:116,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:117,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{13:119,14:120,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:121,42:61,56:47,57:48,59:118,61:25,62:26,63:27,73:[1,68],80:[1,28],85:[1,56],86:[1,57],87:[1,55],98:[1,54]},{13:119,14:120,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:121,42:61,56:47,57:48,59:122,61:25,62:26,63:27,73:[1,68],80:[1,28],85:[1,56],86:[1,57],87:[1,55],98:[1,54]},{1:[2,68],6:[2,68],25:[2,68],26:[2,68],38:[2,68],47:[2,68],52:[2,68],55:[2,68],64:[2,68],65:[2,68],66:[2,68],68:[2,68],70:[2,68],71:[2,68],75:[2,68],77:[1,126],81:[2,68],82:[2,68],83:[2,68],88:[2,68],90:[2,68],99:[2,68],101:[2,68],102:[2,68],103:[2,68],107:[2,68],115:[2,68],123:[2,68],125:[2,68],126:[2,68],127:[1,123],128:[1,124],129:[2,68],130:[2,68],131:[2,68],132:[2,68],133:[2,68],134:[2,68],135:[1,125]},{1:[2,174],6:[2,174],25:[2,174],26:[2,174],47:[2,174],52:[2,174],55:[2,174],70:[2,174],75:[2,174],83:[2,174],88:[2,174],90:[2,174],99:[2,174],101:[2,174],102:[2,174],103:[2,174],107:[2,174],115:[2,174],118:[1,127],123:[2,174],125:[2,174],126:[2,174],129:[2,174],130:[2,174],131:[2,174],132:[2,174],133:[2,174],134:[2,174]},{5:128,25:[1,5]},{5:129,25:[1,5]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],47:[2,142],52:[2,142],55:[2,142],70:[2,142],75:[2,142],83:[2,142],88:[2,142],90:[2,142],99:[2,142],101:[2,142],102:[2,142],103:[2,142],107:[2,142],115:[2,142],123:[2,142],125:[2,142],126:[2,142],129:[2,142],130:[2,142],131:[2,142],132:[2,142],133:[2,142],134:[2,142]},{5:130,25:[1,5]},{8:131,9:115,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,132],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,91],5:133,6:[2,91],13:119,14:120,25:[1,5],26:[2,91],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:121,42:61,47:[2,91],52:[2,91],55:[2,91],56:47,57:48,59:135,61:25,62:26,63:27,70:[2,91],73:[1,68],75:[2,91],77:[1,134],80:[1,28],83:[2,91],85:[1,56],86:[1,57],87:[1,55],88:[2,91],90:[2,91],98:[1,54],99:[2,91],101:[2,91],102:[2,91],103:[2,91],107:[2,91],115:[2,91],123:[2,91],125:[2,91],126:[2,91],129:[2,91],130:[2,91],131:[2,91],132:[2,91],133:[2,91],134:[2,91]},{8:136,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,45],6:[2,45],8:137,9:115,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,45],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],99:[2,45],100:39,101:[2,45],103:[2,45],104:40,105:[1,65],106:41,107:[2,45],108:67,116:[1,42],121:37,122:[1,62],123:[2,45],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,46],6:[2,46],25:[2,46],26:[2,46],52:[2,46],75:[2,46],99:[2,46],101:[2,46],103:[2,46],107:[2,46],123:[2,46]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],38:[2,69],47:[2,69],52:[2,69],55:[2,69],64:[2,69],65:[2,69],66:[2,69],68:[2,69],70:[2,69],71:[2,69],75:[2,69],81:[2,69],82:[2,69],83:[2,69],88:[2,69],90:[2,69],99:[2,69],101:[2,69],102:[2,69],103:[2,69],107:[2,69],115:[2,69],123:[2,69],125:[2,69],126:[2,69],129:[2,69],130:[2,69],131:[2,69],132:[2,69],133:[2,69],134:[2,69]},{1:[2,70],6:[2,70],25:[2,70],26:[2,70],38:[2,70],47:[2,70],52:[2,70],55:[2,70],64:[2,70],65:[2,70],66:[2,70],68:[2,70],70:[2,70],71:[2,70],75:[2,70],81:[2,70],82:[2,70],83:[2,70],88:[2,70],90:[2,70],99:[2,70],101:[2,70],102:[2,70],103:[2,70],107:[2,70],115:[2,70],123:[2,70],125:[2,70],126:[2,70],129:[2,70],130:[2,70],131:[2,70],132:[2,70],133:[2,70],134:[2,70]},{1:[2,29],6:[2,29],25:[2,29],26:[2,29],47:[2,29],52:[2,29],55:[2,29],64:[2,29],65:[2,29],66:[2,29],68:[2,29],70:[2,29],71:[2,29],75:[2,29],81:[2,29],82:[2,29],83:[2,29],88:[2,29],90:[2,29],99:[2,29],101:[2,29],102:[2,29],103:[2,29],107:[2,29],115:[2,29],123:[2,29],125:[2,29],126:[2,29],129:[2,29],130:[2,29],131:[2,29],132:[2,29],133:[2,29],134:[2,29]},{1:[2,30],6:[2,30],25:[2,30],26:[2,30],47:[2,30],52:[2,30],55:[2,30],64:[2,30],65:[2,30],66:[2,30],68:[2,30],70:[2,30],71:[2,30],75:[2,30],81:[2,30],82:[2,30],83:[2,30],88:[2,30],90:[2,30],99:[2,30],101:[2,30],102:[2,30],103:[2,30],107:[2,30],115:[2,30],123:[2,30],125:[2,30],126:[2,30],129:[2,30],130:[2,30],131:[2,30],132:[2,30],133:[2,30],134:[2,30]},{1:[2,31],6:[2,31],25:[2,31],26:[2,31],47:[2,31],52:[2,31],55:[2,31],64:[2,31],65:[2,31],66:[2,31],68:[2,31],70:[2,31],71:[2,31],75:[2,31],81:[2,31],82:[2,31],83:[2,31],88:[2,31],90:[2,31],99:[2,31],101:[2,31],102:[2,31],103:[2,31],107:[2,31],115:[2,31],123:[2,31],125:[2,31],126:[2,31],129:[2,31],130:[2,31],131:[2,31],132:[2,31],133:[2,31],134:[2,31]},{1:[2,32],6:[2,32],25:[2,32],26:[2,32],47:[2,32],52:[2,32],55:[2,32],64:[2,32],65:[2,32],66:[2,32],68:[2,32],70:[2,32],71:[2,32],75:[2,32],81:[2,32],82:[2,32],83:[2,32],88:[2,32],90:[2,32],99:[2,32],101:[2,32],102:[2,32],103:[2,32],107:[2,32],115:[2,32],123:[2,32],125:[2,32],126:[2,32],129:[2,32],130:[2,32],131:[2,32],132:[2,32],133:[2,32],134:[2,32]},{1:[2,33],6:[2,33],25:[2,33],26:[2,33],47:[2,33],52:[2,33],55:[2,33],64:[2,33],65:[2,33],66:[2,33],68:[2,33],70:[2,33],71:[2,33],75:[2,33],81:[2,33],82:[2,33],83:[2,33],88:[2,33],90:[2,33],99:[2,33],101:[2,33],102:[2,33],103:[2,33],107:[2,33],115:[2,33],123:[2,33],125:[2,33],126:[2,33],129:[2,33],130:[2,33],131:[2,33],132:[2,33],133:[2,33],134:[2,33]},{4:138,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,139],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:140,9:115,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,144],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,58:145,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],84:142,85:[1,56],86:[1,57],87:[1,55],88:[1,141],91:143,93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,107],6:[2,107],25:[2,107],26:[2,107],47:[2,107],52:[2,107],55:[2,107],64:[2,107],65:[2,107],66:[2,107],68:[2,107],70:[2,107],71:[2,107],75:[2,107],81:[2,107],82:[2,107],83:[2,107],88:[2,107],90:[2,107],99:[2,107],101:[2,107],102:[2,107],103:[2,107],107:[2,107],115:[2,107],123:[2,107],125:[2,107],126:[2,107],129:[2,107],130:[2,107],131:[2,107],132:[2,107],133:[2,107],134:[2,107]},{1:[2,108],6:[2,108],25:[2,108],26:[2,108],27:146,28:[1,71],47:[2,108],52:[2,108],55:[2,108],64:[2,108],65:[2,108],66:[2,108],68:[2,108],70:[2,108],71:[2,108],75:[2,108],81:[2,108],82:[2,108],83:[2,108],88:[2,108],90:[2,108],99:[2,108],101:[2,108],102:[2,108],103:[2,108],107:[2,108],115:[2,108],123:[2,108],125:[2,108],126:[2,108],129:[2,108],130:[2,108],131:[2,108],132:[2,108],133:[2,108],134:[2,108]},{25:[2,49]},{25:[2,50]},{1:[2,64],6:[2,64],25:[2,64],26:[2,64],38:[2,64],47:[2,64],52:[2,64],55:[2,64],64:[2,64],65:[2,64],66:[2,64],68:[2,64],70:[2,64],71:[2,64],75:[2,64],77:[2,64],81:[2,64],82:[2,64],83:[2,64],88:[2,64],90:[2,64],99:[2,64],101:[2,64],102:[2,64],103:[2,64],107:[2,64],115:[2,64],123:[2,64],125:[2,64],126:[2,64],127:[2,64],128:[2,64],129:[2,64],130:[2,64],131:[2,64],132:[2,64],133:[2,64],134:[2,64],135:[2,64]},{1:[2,67],6:[2,67],25:[2,67],26:[2,67],38:[2,67],47:[2,67],52:[2,67],55:[2,67],64:[2,67],65:[2,67],66:[2,67],68:[2,67],70:[2,67],71:[2,67],75:[2,67],77:[2,67],81:[2,67],82:[2,67],83:[2,67],88:[2,67],90:[2,67],99:[2,67],101:[2,67],102:[2,67],103:[2,67],107:[2,67],115:[2,67],123:[2,67],125:[2,67],126:[2,67],127:[2,67],128:[2,67],129:[2,67],130:[2,67],131:[2,67],132:[2,67],133:[2,67],134:[2,67],135:[2,67]},{8:147,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:148,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:149,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{5:150,8:151,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{27:156,28:[1,71],56:157,57:158,62:152,73:[1,68],87:[1,55],110:153,111:[1,154],112:155},{109:159,113:[1,160],114:[1,161]},{6:[2,86],11:165,25:[2,86],27:166,28:[1,71],29:167,30:[1,69],31:[1,70],39:163,40:164,42:168,44:[1,46],52:[2,86],74:162,75:[2,86],86:[1,111]},{1:[2,27],6:[2,27],25:[2,27],26:[2,27],41:[2,27],47:[2,27],52:[2,27],55:[2,27],64:[2,27],65:[2,27],66:[2,27],68:[2,27],70:[2,27],71:[2,27],75:[2,27],81:[2,27],82:[2,27],83:[2,27],88:[2,27],90:[2,27],99:[2,27],101:[2,27],102:[2,27],103:[2,27],107:[2,27],115:[2,27],123:[2,27],125:[2,27],126:[2,27],129:[2,27],130:[2,27],131:[2,27],132:[2,27],133:[2,27],134:[2,27]},{1:[2,28],6:[2,28],25:[2,28],26:[2,28],41:[2,28],47:[2,28],52:[2,28],55:[2,28],64:[2,28],65:[2,28],66:[2,28],68:[2,28],70:[2,28],71:[2,28],75:[2,28],81:[2,28],82:[2,28],83:[2,28],88:[2,28],90:[2,28],99:[2,28],101:[2,28],102:[2,28],103:[2,28],107:[2,28],115:[2,28],123:[2,28],125:[2,28],126:[2,28],129:[2,28],130:[2,28],131:[2,28],132:[2,28],133:[2,28],134:[2,28]},{1:[2,26],6:[2,26],25:[2,26],26:[2,26],38:[2,26],41:[2,26],47:[2,26],52:[2,26],55:[2,26],64:[2,26],65:[2,26],66:[2,26],68:[2,26],70:[2,26],71:[2,26],75:[2,26],77:[2,26],81:[2,26],82:[2,26],83:[2,26],88:[2,26],90:[2,26],99:[2,26],101:[2,26],102:[2,26],103:[2,26],107:[2,26],113:[2,26],114:[2,26],115:[2,26],123:[2,26],125:[2,26],126:[2,26],127:[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]},{1:[2,6],6:[2,6],7:169,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],99:[2,6],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,3]},{1:[2,24],6:[2,24],25:[2,24],26:[2,24],47:[2,24],52:[2,24],55:[2,24],70:[2,24],75:[2,24],83:[2,24],88:[2,24],90:[2,24],95:[2,24],96:[2,24],99:[2,24],101:[2,24],102:[2,24],103:[2,24],107:[2,24],115:[2,24],118:[2,24],120:[2,24],123:[2,24],125:[2,24],126:[2,24],129:[2,24],130:[2,24],131:[2,24],132:[2,24],133:[2,24],134:[2,24]},{6:[1,72],26:[1,170]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],47:[2,185],52:[2,185],55:[2,185],70:[2,185],75:[2,185],83:[2,185],88:[2,185],90:[2,185],99:[2,185],101:[2,185],102:[2,185],103:[2,185],107:[2,185],115:[2,185],123:[2,185],125:[2,185],126:[2,185],129:[2,185],130:[2,185],131:[2,185],132:[2,185],133:[2,185],134:[2,185]},{8:171,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:172,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:173,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:174,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:175,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:176,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:177,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:178,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],47:[2,141],52:[2,141],55:[2,141],70:[2,141],75:[2,141],83:[2,141],88:[2,141],90:[2,141],99:[2,141],101:[2,141],102:[2,141],103:[2,141],107:[2,141],115:[2,141],123:[2,141],125:[2,141],126:[2,141],129:[2,141],130:[2,141],131:[2,141],132:[2,141],133:[2,141],134:[2,141]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],47:[2,146],52:[2,146],55:[2,146],70:[2,146],75:[2,146],83:[2,146],88:[2,146],90:[2,146],99:[2,146],101:[2,146],102:[2,146],103:[2,146],107:[2,146],115:[2,146],123:[2,146],125:[2,146],126:[2,146],129:[2,146],130:[2,146],131:[2,146],132:[2,146],133:[2,146],134:[2,146]},{8:179,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],47:[2,140],52:[2,140],55:[2,140],70:[2,140],75:[2,140],83:[2,140],88:[2,140],90:[2,140],99:[2,140],101:[2,140],102:[2,140],103:[2,140],107:[2,140],115:[2,140],123:[2,140],125:[2,140],126:[2,140],129:[2,140],130:[2,140],131:[2,140],132:[2,140],133:[2,140],134:[2,140]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],47:[2,145],52:[2,145],55:[2,145],70:[2,145],75:[2,145],83:[2,145],88:[2,145],90:[2,145],99:[2,145],101:[2,145],102:[2,145],103:[2,145],107:[2,145],115:[2,145],123:[2,145],125:[2,145],126:[2,145],129:[2,145],130:[2,145],131:[2,145],132:[2,145],133:[2,145],134:[2,145]},{79:180,82:[1,103]},{1:[2,65],6:[2,65],25:[2,65],26:[2,65],38:[2,65],47:[2,65],52:[2,65],55:[2,65],64:[2,65],65:[2,65],66:[2,65],68:[2,65],70:[2,65],71:[2,65],75:[2,65],77:[2,65],81:[2,65],82:[2,65],83:[2,65],88:[2,65],90:[2,65],99:[2,65],101:[2,65],102:[2,65],103:[2,65],107:[2,65],115:[2,65],123:[2,65],125:[2,65],126:[2,65],127:[2,65],128:[2,65],129:[2,65],130:[2,65],131:[2,65],132:[2,65],133:[2,65],134:[2,65],135:[2,65]},{82:[2,104]},{27:181,28:[1,71]},{27:182,28:[1,71]},{1:[2,79],6:[2,79],25:[2,79],26:[2,79],27:183,28:[1,71],38:[2,79],47:[2,79],52:[2,79],55:[2,79],64:[2,79],65:[2,79],66:[2,79],68:[2,79],70:[2,79],71:[2,79],75:[2,79],77:[2,79],81:[2,79],82:[2,79],83:[2,79],88:[2,79],90:[2,79],99:[2,79],101:[2,79],102:[2,79],103:[2,79],107:[2,79],115:[2,79],123:[2,79],125:[2,79],126:[2,79],127:[2,79],128:[2,79],129:[2,79],130:[2,79],131:[2,79],132:[2,79],133:[2,79],134:[2,79],135:[2,79]},{1:[2,80],6:[2,80],25:[2,80],26:[2,80],38:[2,80],47:[2,80],52:[2,80],55:[2,80],64:[2,80],65:[2,80],66:[2,80],68:[2,80],70:[2,80],71:[2,80],75:[2,80],77:[2,80],81:[2,80],82:[2,80],83:[2,80],88:[2,80],90:[2,80],99:[2,80],101:[2,80],102:[2,80],103:[2,80],107:[2,80],115:[2,80],123:[2,80],125:[2,80],126:[2,80],127:[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]},{8:185,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],55:[1,189],56:47,57:48,59:36,61:25,62:26,63:27,69:184,72:186,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],89:187,90:[1,188],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{67:190,68:[1,97],71:[1,98]},{79:191,82:[1,103]},{1:[2,66],6:[2,66],25:[2,66],26:[2,66],38:[2,66],47:[2,66],52:[2,66],55:[2,66],64:[2,66],65:[2,66],66:[2,66],68:[2,66],70:[2,66],71:[2,66],75:[2,66],77:[2,66],81:[2,66],82:[2,66],83:[2,66],88:[2,66],90:[2,66],99:[2,66],101:[2,66],102:[2,66],103:[2,66],107:[2,66],115:[2,66],123:[2,66],125:[2,66],126:[2,66],127:[2,66],128:[2,66],129:[2,66],130:[2,66],131:[2,66],132:[2,66],133:[2,66],134:[2,66],135:[2,66]},{6:[1,193],8:192,9:115,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,194],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,102],6:[2,102],25:[2,102],26:[2,102],47:[2,102],52:[2,102],55:[2,102],64:[2,102],65:[2,102],66:[2,102],68:[2,102],70:[2,102],71:[2,102],75:[2,102],81:[2,102],82:[2,102],83:[2,102],88:[2,102],90:[2,102],99:[2,102],101:[2,102],102:[2,102],103:[2,102],107:[2,102],115:[2,102],123:[2,102],125:[2,102],126:[2,102],129:[2,102],130:[2,102],131:[2,102],132:[2,102],133:[2,102],134:[2,102]},{8:197,9:115,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,144],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,58:145,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],83:[1,195],84:196,85:[1,56],86:[1,57],87:[1,55],91:143,93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{47:[1,198],52:[1,199]},{47:[2,54],52:[2,54]},{38:[1,201],47:[2,56],52:[2,56],55:[1,200]},{38:[2,59],47:[2,59],52:[2,59],55:[2,59]},{38:[2,60],47:[2,60],52:[2,60],55:[2,60]},{38:[2,61],47:[2,61],52:[2,61],55:[2,61]},{38:[2,62],47:[2,62],52:[2,62],55:[2,62]},{27:146,28:[1,71]},{8:197,9:115,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,144],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,58:145,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],84:142,85:[1,56],86:[1,57],87:[1,55],88:[1,141],91:143,93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,48],6:[2,48],25:[2,48],26:[2,48],47:[2,48],52:[2,48],55:[2,48],70:[2,48],75:[2,48],83:[2,48],88:[2,48],90:[2,48],99:[2,48],101:[2,48],102:[2,48],103:[2,48],107:[2,48],115:[2,48],123:[2,48],125:[2,48],126:[2,48],129:[2,48],130:[2,48],131:[2,48],132:[2,48],133:[2,48],134:[2,48]},{1:[2,178],6:[2,178],25:[2,178],26:[2,178],47:[2,178],52:[2,178],55:[2,178],70:[2,178],75:[2,178],83:[2,178],88:[2,178],90:[2,178],99:[2,178],100:85,101:[2,178],102:[2,178],103:[2,178],106:86,107:[2,178],108:67,115:[2,178],123:[2,178],125:[2,178],126:[2,178],129:[1,76],130:[2,178],131:[2,178],132:[2,178],133:[2,178],134:[2,178]},{100:88,101:[1,63],103:[1,64],106:89,107:[1,66],108:67,123:[1,87]},{1:[2,179],6:[2,179],25:[2,179],26:[2,179],47:[2,179],52:[2,179],55:[2,179],70:[2,179],75:[2,179],83:[2,179],88:[2,179],90:[2,179],99:[2,179],100:85,101:[2,179],102:[2,179],103:[2,179],106:86,107:[2,179],108:67,115:[2,179],123:[2,179],125:[2,179],126:[2,179],129:[1,76],130:[2,179],131:[2,179],132:[2,179],133:[2,179],134:[2,179]},{1:[2,180],6:[2,180],25:[2,180],26:[2,180],47:[2,180],52:[2,180],55:[2,180],70:[2,180],75:[2,180],83:[2,180],88:[2,180],90:[2,180],99:[2,180],100:85,101:[2,180],102:[2,180],103:[2,180],106:86,107:[2,180],108:67,115:[2,180],123:[2,180],125:[2,180],126:[2,180],129:[1,76],130:[2,180],131:[2,180],132:[2,180],133:[2,180],134:[2,180]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],47:[2,181],52:[2,181],55:[2,181],64:[2,68],65:[2,68],66:[2,68],68:[2,68],70:[2,181],71:[2,68],75:[2,181],81:[2,68],82:[2,68],83:[2,181],88:[2,181],90:[2,181],99:[2,181],101:[2,181],102:[2,181],103:[2,181],107:[2,181],115:[2,181],123:[2,181],125:[2,181],126:[2,181],129:[2,181],130:[2,181],131:[2,181],132:[2,181],133:[2,181],134:[2,181]},{60:91,64:[1,93],65:[1,94],66:[1,95],67:96,68:[1,97],71:[1,98],78:90,81:[1,92],82:[2,103]},{60:100,64:[1,93],65:[1,94],66:[1,95],67:96,68:[1,97],71:[1,98],78:99,81:[1,92],82:[2,103]},{64:[2,71],65:[2,71],66:[2,71],68:[2,71],71:[2,71],81:[2,71],82:[2,71]},{1:[2,182],6:[2,182],25:[2,182],26:[2,182],47:[2,182],52:[2,182],55:[2,182],64:[2,68],65:[2,68],66:[2,68],68:[2,68],70:[2,182],71:[2,68],75:[2,182],81:[2,68],82:[2,68],83:[2,182],88:[2,182],90:[2,182],99:[2,182],101:[2,182],102:[2,182],103:[2,182],107:[2,182],115:[2,182],123:[2,182],125:[2,182],126:[2,182],129:[2,182],130:[2,182],131:[2,182],132:[2,182],133:[2,182],134:[2,182]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],47:[2,183],52:[2,183],55:[2,183],70:[2,183],75:[2,183],83:[2,183],88:[2,183],90:[2,183],99:[2,183],101:[2,183],102:[2,183],103:[2,183],107:[2,183],115:[2,183],123:[2,183],125:[2,183],126:[2,183],129:[2,183],130:[2,183],131:[2,183],132:[2,183],133:[2,183],134:[2,183]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],47:[2,184],52:[2,184],55:[2,184],70:[2,184],75:[2,184],83:[2,184],88:[2,184],90:[2,184],99:[2,184],101:[2,184],102:[2,184],103:[2,184],107:[2,184],115:[2,184],123:[2,184],125:[2,184],126:[2,184],129:[2,184],130:[2,184],131:[2,184],132:[2,184],133:[2,184],134:[2,184]},{8:202,9:115,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,203],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:204,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{5:205,25:[1,5],122:[1,206]},{1:[2,127],6:[2,127],25:[2,127],26:[2,127],47:[2,127],52:[2,127],55:[2,127],70:[2,127],75:[2,127],83:[2,127],88:[2,127],90:[2,127],94:207,95:[1,208],96:[1,209],99:[2,127],101:[2,127],102:[2,127],103:[2,127],107:[2,127],115:[2,127],123:[2,127],125:[2,127],126:[2,127],129:[2,127],130:[2,127],131:[2,127],132:[2,127],133:[2,127],134:[2,127]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],47:[2,139],52:[2,139],55:[2,139],70:[2,139],75:[2,139],83:[2,139],88:[2,139],90:[2,139],99:[2,139],101:[2,139],102:[2,139],103:[2,139],107:[2,139],115:[2,139],123:[2,139],125:[2,139],126:[2,139],129:[2,139],130:[2,139],131:[2,139],132:[2,139],133:[2,139],134:[2,139]},{1:[2,147],6:[2,147],25:[2,147],26:[2,147],47:[2,147],52:[2,147],55:[2,147],70:[2,147],75:[2,147],83:[2,147],88:[2,147],90:[2,147],99:[2,147],101:[2,147],102:[2,147],103:[2,147],107:[2,147],115:[2,147],123:[2,147],125:[2,147],126:[2,147],129:[2,147],130:[2,147],131:[2,147],132:[2,147],133:[2,147],134:[2,147]},{25:[1,210],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{117:211,119:212,120:[1,213]},{1:[2,92],6:[2,92],25:[2,92],26:[2,92],47:[2,92],52:[2,92],55:[2,92],70:[2,92],75:[2,92],83:[2,92],88:[2,92],90:[2,92],99:[2,92],101:[2,92],102:[2,92],103:[2,92],107:[2,92],115:[2,92],123:[2,92],125:[2,92],126:[2,92],129:[2,92],130:[2,92],131:[2,92],132:[2,92],133:[2,92],134:[2,92]},{8:214,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,95],5:215,6:[2,95],25:[1,5],26:[2,95],47:[2,95],52:[2,95],55:[2,95],64:[2,68],65:[2,68],66:[2,68],68:[2,68],70:[2,95],71:[2,68],75:[2,95],77:[1,216],81:[2,68],82:[2,68],83:[2,95],88:[2,95],90:[2,95],99:[2,95],101:[2,95],102:[2,95],103:[2,95],107:[2,95],115:[2,95],123:[2,95],125:[2,95],126:[2,95],129:[2,95],130:[2,95],131:[2,95],132:[2,95],133:[2,95],134:[2,95]},{1:[2,132],6:[2,132],25:[2,132],26:[2,132],47:[2,132],52:[2,132],55:[2,132],70:[2,132],75:[2,132],83:[2,132],88:[2,132],90:[2,132],99:[2,132],100:85,101:[2,132],102:[2,132],103:[2,132],106:86,107:[2,132],108:67,115:[2,132],123:[2,132],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,44],6:[2,44],26:[2,44],99:[2,44],100:85,101:[2,44],103:[2,44],106:86,107:[2,44],108:67,123:[2,44],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{6:[1,72],99:[1,217]},{4:218,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,123],25:[2,123],52:[2,123],55:[1,220],88:[2,123],89:219,90:[1,188],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,110],6:[2,110],25:[2,110],26:[2,110],38:[2,110],47:[2,110],52:[2,110],55:[2,110],64:[2,110],65:[2,110],66:[2,110],68:[2,110],70:[2,110],71:[2,110],75:[2,110],81:[2,110],82:[2,110],83:[2,110],88:[2,110],90:[2,110],99:[2,110],101:[2,110],102:[2,110],103:[2,110],107:[2,110],113:[2,110],114:[2,110],115:[2,110],123:[2,110],125:[2,110],126:[2,110],129:[2,110],130:[2,110],131:[2,110],132:[2,110],133:[2,110],134:[2,110]},{6:[2,51],25:[2,51],51:221,52:[1,222],88:[2,51]},{6:[2,118],25:[2,118],26:[2,118],52:[2,118],83:[2,118],88:[2,118]},{8:197,9:115,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,144],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,58:145,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],84:223,85:[1,56],86:[1,57],87:[1,55],91:143,93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,124],25:[2,124],26:[2,124],52:[2,124],83:[2,124],88:[2,124]},{1:[2,109],6:[2,109],25:[2,109],26:[2,109],38:[2,109],41:[2,109],47:[2,109],52:[2,109],55:[2,109],64:[2,109],65:[2,109],66:[2,109],68:[2,109],70:[2,109],71:[2,109],75:[2,109],77:[2,109],81:[2,109],82:[2,109],83:[2,109],88:[2,109],90:[2,109],99:[2,109],101:[2,109],102:[2,109],103:[2,109],107:[2,109],115:[2,109],123:[2,109],125:[2,109],126:[2,109],127:[2,109],128:[2,109],129:[2,109],130:[2,109],131:[2,109],132:[2,109],133:[2,109],134:[2,109],135:[2,109]},{5:224,25:[1,5],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,135],6:[2,135],25:[2,135],26:[2,135],47:[2,135],52:[2,135],55:[2,135],70:[2,135],75:[2,135],83:[2,135],88:[2,135],90:[2,135],99:[2,135],100:85,101:[1,63],102:[1,225],103:[1,64],106:86,107:[1,66],108:67,115:[2,135],123:[2,135],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],47:[2,137],52:[2,137],55:[2,137],70:[2,137],75:[2,137],83:[2,137],88:[2,137],90:[2,137],99:[2,137],100:85,101:[1,63],102:[1,226],103:[1,64],106:86,107:[1,66],108:67,115:[2,137],123:[2,137],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],47:[2,143],52:[2,143],55:[2,143],70:[2,143],75:[2,143],83:[2,143],88:[2,143],90:[2,143],99:[2,143],101:[2,143],102:[2,143],103:[2,143],107:[2,143],115:[2,143],123:[2,143],125:[2,143],126:[2,143],129:[2,143],130:[2,143],131:[2,143],132:[2,143],133:[2,143],134:[2,143]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],47:[2,144],52:[2,144],55:[2,144],70:[2,144],75:[2,144],83:[2,144],88:[2,144],90:[2,144],99:[2,144],100:85,101:[1,63],102:[2,144],103:[1,64],106:86,107:[1,66],108:67,115:[2,144],123:[2,144],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,148],6:[2,148],25:[2,148],26:[2,148],47:[2,148],52:[2,148],55:[2,148],70:[2,148],75:[2,148],83:[2,148],88:[2,148],90:[2,148],99:[2,148],101:[2,148],102:[2,148],103:[2,148],107:[2,148],115:[2,148],123:[2,148],125:[2,148],126:[2,148],129:[2,148],130:[2,148],131:[2,148],132:[2,148],133:[2,148],134:[2,148]},{113:[2,150],114:[2,150]},{27:156,28:[1,71],56:157,57:158,73:[1,68],87:[1,112],110:227,112:155},{52:[1,228],113:[2,155],114:[2,155]},{52:[2,152],113:[2,152],114:[2,152]},{52:[2,153],113:[2,153],114:[2,153]},{52:[2,154],113:[2,154],114:[2,154]},{1:[2,149],6:[2,149],25:[2,149],26:[2,149],47:[2,149],52:[2,149],55:[2,149],70:[2,149],75:[2,149],83:[2,149],88:[2,149],90:[2,149],99:[2,149],101:[2,149],102:[2,149],103:[2,149],107:[2,149],115:[2,149],123:[2,149],125:[2,149],126:[2,149],129:[2,149],130:[2,149],131:[2,149],132:[2,149],133:[2,149],134:[2,149]},{8:229,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:230,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,51],25:[2,51],51:231,52:[1,232],75:[2,51]},{6:[2,87],25:[2,87],26:[2,87],52:[2,87],75:[2,87]},{6:[2,37],25:[2,37],26:[2,37],41:[1,233],52:[2,37],75:[2,37]},{6:[2,40],25:[2,40],26:[2,40],52:[2,40],75:[2,40]},{6:[2,41],25:[2,41],26:[2,41],41:[2,41],52:[2,41],75:[2,41]},{6:[2,42],25:[2,42],26:[2,42],41:[2,42],52:[2,42],75:[2,42]},{6:[2,43],25:[2,43],26:[2,43],41:[2,43],52:[2,43],75:[2,43]},{1:[2,5],6:[2,5],26:[2,5],99:[2,5]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],47:[2,25],52:[2,25],55:[2,25],70:[2,25],75:[2,25],83:[2,25],88:[2,25],90:[2,25],95:[2,25],96:[2,25],99:[2,25],101:[2,25],102:[2,25],103:[2,25],107:[2,25],115:[2,25],118:[2,25],120:[2,25],123:[2,25],125:[2,25],126:[2,25],129:[2,25],130:[2,25],131:[2,25],132:[2,25],133:[2,25],134:[2,25]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],47:[2,186],52:[2,186],55:[2,186],70:[2,186],75:[2,186],83:[2,186],88:[2,186],90:[2,186],99:[2,186],100:85,101:[2,186],102:[2,186],103:[2,186],106:86,107:[2,186],108:67,115:[2,186],123:[2,186],125:[2,186],126:[2,186],129:[1,76],130:[1,79],131:[2,186],132:[2,186],133:[2,186],134:[2,186]},{1:[2,187],6:[2,187],25:[2,187],26:[2,187],47:[2,187],52:[2,187],55:[2,187],70:[2,187],75:[2,187],83:[2,187],88:[2,187],90:[2,187],99:[2,187],100:85,101:[2,187],102:[2,187],103:[2,187],106:86,107:[2,187],108:67,115:[2,187],123:[2,187],125:[2,187],126:[2,187],129:[1,76],130:[1,79],131:[2,187],132:[2,187],133:[2,187],134:[2,187]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],47:[2,188],52:[2,188],55:[2,188],70:[2,188],75:[2,188],83:[2,188],88:[2,188],90:[2,188],99:[2,188],100:85,101:[2,188],102:[2,188],103:[2,188],106:86,107:[2,188],108:67,115:[2,188],123:[2,188],125:[2,188],126:[2,188],129:[1,76],130:[2,188],131:[2,188],132:[2,188],133:[2,188],134:[2,188]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],47:[2,189],52:[2,189],55:[2,189],70:[2,189],75:[2,189],83:[2,189],88:[2,189],90:[2,189],99:[2,189],100:85,101:[2,189],102:[2,189],103:[2,189],106:86,107:[2,189],108:67,115:[2,189],123:[2,189],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[2,189],132:[2,189],133:[2,189],134:[2,189]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],47:[2,190],52:[2,190],55:[2,190],70:[2,190],75:[2,190],83:[2,190],88:[2,190],90:[2,190],99:[2,190],100:85,101:[2,190],102:[2,190],103:[2,190],106:86,107:[2,190],108:67,115:[2,190],123:[2,190],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[2,190],133:[2,190],134:[1,83]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],47:[2,191],52:[2,191],55:[2,191],70:[2,191],75:[2,191],83:[2,191],88:[2,191],90:[2,191],99:[2,191],100:85,101:[2,191],102:[2,191],103:[2,191],106:86,107:[2,191],108:67,115:[2,191],123:[2,191],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[2,191],134:[1,83]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],47:[2,192],52:[2,192],55:[2,192],70:[2,192],75:[2,192],83:[2,192],88:[2,192],90:[2,192],99:[2,192],100:85,101:[2,192],102:[2,192],103:[2,192],106:86,107:[2,192],108:67,115:[2,192],123:[2,192],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[2,192],133:[2,192],134:[2,192]},{1:[2,177],6:[2,177],25:[2,177],26:[2,177],47:[2,177],52:[2,177],55:[2,177],70:[2,177],75:[2,177],83:[2,177],88:[2,177],90:[2,177],99:[2,177],100:85,101:[1,63],102:[2,177],103:[1,64],106:86,107:[1,66],108:67,115:[2,177],123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,176],6:[2,176],25:[2,176],26:[2,176],47:[2,176],52:[2,176],55:[2,176],70:[2,176],75:[2,176],83:[2,176],88:[2,176],90:[2,176],99:[2,176],100:85,101:[1,63],102:[2,176],103:[1,64],106:86,107:[1,66],108:67,115:[2,176],123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,99],6:[2,99],25:[2,99],26:[2,99],47:[2,99],52:[2,99],55:[2,99],64:[2,99],65:[2,99],66:[2,99],68:[2,99],70:[2,99],71:[2,99],75:[2,99],81:[2,99],82:[2,99],83:[2,99],88:[2,99],90:[2,99],99:[2,99],101:[2,99],102:[2,99],103:[2,99],107:[2,99],115:[2,99],123:[2,99],125:[2,99],126:[2,99],129:[2,99],130:[2,99],131:[2,99],132:[2,99],133:[2,99],134:[2,99]},{1:[2,76],6:[2,76],25:[2,76],26:[2,76],38:[2,76],47:[2,76],52:[2,76],55:[2,76],64:[2,76],65:[2,76],66:[2,76],68:[2,76],70:[2,76],71:[2,76],75:[2,76],77:[2,76],81:[2,76],82:[2,76],83:[2,76],88:[2,76],90:[2,76],99:[2,76],101:[2,76],102:[2,76],103:[2,76],107:[2,76],115:[2,76],123:[2,76],125:[2,76],126:[2,76],127:[2,76],128:[2,76],129:[2,76],130:[2,76],131:[2,76],132:[2,76],133:[2,76],134:[2,76],135:[2,76]},{1:[2,77],6:[2,77],25:[2,77],26:[2,77],38:[2,77],47:[2,77],52:[2,77],55:[2,77],64:[2,77],65:[2,77],66:[2,77],68:[2,77],70:[2,77],71:[2,77],75:[2,77],77:[2,77],81:[2,77],82:[2,77],83:[2,77],88:[2,77],90:[2,77],99:[2,77],101:[2,77],102:[2,77],103:[2,77],107:[2,77],115:[2,77],123:[2,77],125:[2,77],126:[2,77],127:[2,77],128:[2,77],129:[2,77],130:[2,77],131:[2,77],132:[2,77],133:[2,77],134:[2,77],135:[2,77]},{1:[2,78],6:[2,78],25:[2,78],26:[2,78],38:[2,78],47:[2,78],52:[2,78],55:[2,78],64:[2,78],65:[2,78],66:[2,78],68:[2,78],70:[2,78],71:[2,78],75:[2,78],77:[2,78],81:[2,78],82:[2,78],83:[2,78],88:[2,78],90:[2,78],99:[2,78],101:[2,78],102:[2,78],103:[2,78],107:[2,78],115:[2,78],123:[2,78],125:[2,78],126:[2,78],127:[2,78],128:[2,78],129:[2,78],130:[2,78],131:[2,78],132:[2,78],133:[2,78],134:[2,78],135:[2,78]},{70:[1,234]},{55:[1,189],70:[2,83],89:235,90:[1,188],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{70:[2,84]},{8:236,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{12:[2,112],28:[2,112],30:[2,112],31:[2,112],33:[2,112],34:[2,112],35:[2,112],36:[2,112],43:[2,112],44:[2,112],45:[2,112],49:[2,112],50:[2,112],70:[2,112],73:[2,112],76:[2,112],80:[2,112],85:[2,112],86:[2,112],87:[2,112],93:[2,112],97:[2,112],98:[2,112],101:[2,112],103:[2,112],105:[2,112],107:[2,112],116:[2,112],122:[2,112],124:[2,112],125:[2,112],126:[2,112],127:[2,112],128:[2,112]},{12:[2,113],28:[2,113],30:[2,113],31:[2,113],33:[2,113],34:[2,113],35:[2,113],36:[2,113],43:[2,113],44:[2,113],45:[2,113],49:[2,113],50:[2,113],70:[2,113],73:[2,113],76:[2,113],80:[2,113],85:[2,113],86:[2,113],87:[2,113],93:[2,113],97:[2,113],98:[2,113],101:[2,113],103:[2,113],105:[2,113],107:[2,113],116:[2,113],122:[2,113],124:[2,113],125:[2,113],126:[2,113],127:[2,113],128:[2,113]},{1:[2,82],6:[2,82],25:[2,82],26:[2,82],38:[2,82],47:[2,82],52:[2,82],55:[2,82],64:[2,82],65:[2,82],66:[2,82],68:[2,82],70:[2,82],71:[2,82],75:[2,82],77:[2,82],81:[2,82],82:[2,82],83:[2,82],88:[2,82],90:[2,82],99:[2,82],101:[2,82],102:[2,82],103:[2,82],107:[2,82],115:[2,82],123:[2,82],125:[2,82],126:[2,82],127:[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]},{1:[2,100],6:[2,100],25:[2,100],26:[2,100],47:[2,100],52:[2,100],55:[2,100],64:[2,100],65:[2,100],66:[2,100],68:[2,100],70:[2,100],71:[2,100],75:[2,100],81:[2,100],82:[2,100],83:[2,100],88:[2,100],90:[2,100],99:[2,100],101:[2,100],102:[2,100],103:[2,100],107:[2,100],115:[2,100],123:[2,100],125:[2,100],126:[2,100],129:[2,100],130:[2,100],131:[2,100],132:[2,100],133:[2,100],134:[2,100]},{1:[2,34],6:[2,34],25:[2,34],26:[2,34],47:[2,34],52:[2,34],55:[2,34],70:[2,34],75:[2,34],83:[2,34],88:[2,34],90:[2,34],99:[2,34],100:85,101:[2,34],102:[2,34],103:[2,34],106:86,107:[2,34],108:67,115:[2,34],123:[2,34],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{8:237,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:238,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,105],6:[2,105],25:[2,105],26:[2,105],47:[2,105],52:[2,105],55:[2,105],64:[2,105],65:[2,105],66:[2,105],68:[2,105],70:[2,105],71:[2,105],75:[2,105],81:[2,105],82:[2,105],83:[2,105],88:[2,105],90:[2,105],99:[2,105],101:[2,105],102:[2,105],103:[2,105],107:[2,105],115:[2,105],123:[2,105],125:[2,105],126:[2,105],129:[2,105],130:[2,105],131:[2,105],132:[2,105],133:[2,105],134:[2,105]},{6:[2,51],25:[2,51],51:239,52:[1,222],83:[2,51]},{6:[2,123],25:[2,123],26:[2,123],52:[2,123],55:[1,240],83:[2,123],88:[2,123],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{48:241,49:[1,58],50:[1,59]},{27:107,28:[1,71],42:108,53:242,54:106,56:109,57:110,73:[1,68],86:[1,111],87:[1,112]},{47:[2,57],52:[2,57]},{8:243,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],47:[2,193],52:[2,193],55:[2,193],70:[2,193],75:[2,193],83:[2,193],88:[2,193],90:[2,193],99:[2,193],100:85,101:[2,193],102:[2,193],103:[2,193],106:86,107:[2,193],108:67,115:[2,193],123:[2,193],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{8:244,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,195],6:[2,195],25:[2,195],26:[2,195],47:[2,195],52:[2,195],55:[2,195],70:[2,195],75:[2,195],83:[2,195],88:[2,195],90:[2,195],99:[2,195],100:85,101:[2,195],102:[2,195],103:[2,195],106:86,107:[2,195],108:67,115:[2,195],123:[2,195],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,175],6:[2,175],25:[2,175],26:[2,175],47:[2,175],52:[2,175],55:[2,175],70:[2,175],75:[2,175],83:[2,175],88:[2,175],90:[2,175],99:[2,175],101:[2,175],102:[2,175],103:[2,175],107:[2,175],115:[2,175],123:[2,175],125:[2,175],126:[2,175],129:[2,175],130:[2,175],131:[2,175],132:[2,175],133:[2,175],134:[2,175]},{8:245,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,128],6:[2,128],25:[2,128],26:[2,128],47:[2,128],52:[2,128],55:[2,128],70:[2,128],75:[2,128],83:[2,128],88:[2,128],90:[2,128],95:[1,246],99:[2,128],101:[2,128],102:[2,128],103:[2,128],107:[2,128],115:[2,128],123:[2,128],125:[2,128],126:[2,128],129:[2,128],130:[2,128],131:[2,128],132:[2,128],133:[2,128],134:[2,128]},{5:247,25:[1,5]},{27:248,28:[1,71]},{117:249,119:212,120:[1,213]},{26:[1,250],118:[1,251],119:252,120:[1,213]},{26:[2,168],118:[2,168],120:[2,168]},{8:254,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],92:253,93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,93],5:255,6:[2,93],25:[1,5],26:[2,93],47:[2,93],52:[2,93],55:[2,93],70:[2,93],75:[2,93],83:[2,93],88:[2,93],90:[2,93],99:[2,93],100:85,101:[1,63],102:[2,93],103:[1,64],106:86,107:[1,66],108:67,115:[2,93],123:[2,93],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,96],6:[2,96],25:[2,96],26:[2,96],47:[2,96],52:[2,96],55:[2,96],70:[2,96],75:[2,96],83:[2,96],88:[2,96],90:[2,96],99:[2,96],101:[2,96],102:[2,96],103:[2,96],107:[2,96],115:[2,96],123:[2,96],125:[2,96],126:[2,96],129:[2,96],130:[2,96],131:[2,96],132:[2,96],133:[2,96],134:[2,96]},{8:256,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],47:[2,133],52:[2,133],55:[2,133],64:[2,133],65:[2,133],66:[2,133],68:[2,133],70:[2,133],71:[2,133],75:[2,133],81:[2,133],82:[2,133],83:[2,133],88:[2,133],90:[2,133],99:[2,133],101:[2,133],102:[2,133],103:[2,133],107:[2,133],115:[2,133],123:[2,133],125:[2,133],126:[2,133],129:[2,133],130:[2,133],131:[2,133],132:[2,133],133:[2,133],134:[2,133]},{6:[1,72],26:[1,257]},{8:258,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,63],12:[2,113],25:[2,63],28:[2,113],30:[2,113],31:[2,113],33:[2,113],34:[2,113],35:[2,113],36:[2,113],43:[2,113],44:[2,113],45:[2,113],49:[2,113],50:[2,113],52:[2,63],73:[2,113],76:[2,113],80:[2,113],85:[2,113],86:[2,113],87:[2,113],88:[2,63],93:[2,113],97:[2,113],98:[2,113],101:[2,113],103:[2,113],105:[2,113],107:[2,113],116:[2,113],122:[2,113],124:[2,113],125:[2,113],126:[2,113],127:[2,113],128:[2,113]},{6:[1,260],25:[1,261],88:[1,259]},{6:[2,52],8:197,9:115,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,52],26:[2,52],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,58:145,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],83:[2,52],85:[1,56],86:[1,57],87:[1,55],88:[2,52],91:262,93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,51],25:[2,51],26:[2,51],51:263,52:[1,222]},{1:[2,172],6:[2,172],25:[2,172],26:[2,172],47:[2,172],52:[2,172],55:[2,172],70:[2,172],75:[2,172],83:[2,172],88:[2,172],90:[2,172],99:[2,172],101:[2,172],102:[2,172],103:[2,172],107:[2,172],115:[2,172],118:[2,172],123:[2,172],125:[2,172],126:[2,172],129:[2,172],130:[2,172],131:[2,172],132:[2,172],133:[2,172],134:[2,172]},{8:264,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:265,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{113:[2,151],114:[2,151]},{27:156,28:[1,71],56:157,57:158,73:[1,68],87:[1,112],112:266},{1:[2,157],6:[2,157],25:[2,157],26:[2,157],47:[2,157],52:[2,157],55:[2,157],70:[2,157],75:[2,157],83:[2,157],88:[2,157],90:[2,157],99:[2,157],100:85,101:[2,157],102:[1,267],103:[2,157],106:86,107:[2,157],108:67,115:[1,268],123:[2,157],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,158],6:[2,158],25:[2,158],26:[2,158],47:[2,158],52:[2,158],55:[2,158],70:[2,158],75:[2,158],83:[2,158],88:[2,158],90:[2,158],99:[2,158],100:85,101:[2,158],102:[1,269],103:[2,158],106:86,107:[2,158],108:67,115:[2,158],123:[2,158],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{6:[1,271],25:[1,272],75:[1,270]},{6:[2,52],11:165,25:[2,52],26:[2,52],27:166,28:[1,71],29:167,30:[1,69],31:[1,70],39:273,40:164,42:168,44:[1,46],75:[2,52],86:[1,111]},{8:274,9:115,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,275],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,81],6:[2,81],25:[2,81],26:[2,81],38:[2,81],47:[2,81],52:[2,81],55:[2,81],64:[2,81],65:[2,81],66:[2,81],68:[2,81],70:[2,81],71:[2,81],75:[2,81],77:[2,81],81:[2,81],82:[2,81],83:[2,81],88:[2,81],90:[2,81],99:[2,81],101:[2,81],102:[2,81],103:[2,81],107:[2,81],115:[2,81],123:[2,81],125:[2,81],126:[2,81],127:[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]},{8:276,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,70:[2,116],73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{70:[2,117],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,35],6:[2,35],25:[2,35],26:[2,35],47:[2,35],52:[2,35],55:[2,35],70:[2,35],75:[2,35],83:[2,35],88:[2,35],90:[2,35],99:[2,35],100:85,101:[2,35],102:[2,35],103:[2,35],106:86,107:[2,35],108:67,115:[2,35],123:[2,35],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{26:[1,277],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{6:[1,260],25:[1,261],83:[1,278]},{6:[2,63],25:[2,63],26:[2,63],52:[2,63],83:[2,63],88:[2,63]},{5:279,25:[1,5]},{47:[2,55],52:[2,55]},{47:[2,58],52:[2,58],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{26:[1,280],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{5:281,25:[1,5],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{5:282,25:[1,5]},{1:[2,129],6:[2,129],25:[2,129],26:[2,129],47:[2,129],52:[2,129],55:[2,129],70:[2,129],75:[2,129],83:[2,129],88:[2,129],90:[2,129],99:[2,129],101:[2,129],102:[2,129],103:[2,129],107:[2,129],115:[2,129],123:[2,129],125:[2,129],126:[2,129],129:[2,129],130:[2,129],131:[2,129],132:[2,129],133:[2,129],134:[2,129]},{5:283,25:[1,5]},{26:[1,284],118:[1,285],119:252,120:[1,213]},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],47:[2,166],52:[2,166],55:[2,166],70:[2,166],75:[2,166],83:[2,166],88:[2,166],90:[2,166],99:[2,166],101:[2,166],102:[2,166],103:[2,166],107:[2,166],115:[2,166],123:[2,166],125:[2,166],126:[2,166],129:[2,166],130:[2,166],131:[2,166],132:[2,166],133:[2,166],134:[2,166]},{5:286,25:[1,5]},{26:[2,169],118:[2,169],120:[2,169]},{5:287,25:[1,5],52:[1,288]},{25:[2,125],52:[2,125],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,94],6:[2,94],25:[2,94],26:[2,94],47:[2,94],52:[2,94],55:[2,94],70:[2,94],75:[2,94],83:[2,94],88:[2,94],90:[2,94],99:[2,94],101:[2,94],102:[2,94],103:[2,94],107:[2,94],115:[2,94],123:[2,94],125:[2,94],126:[2,94],129:[2,94],130:[2,94],131:[2,94],132:[2,94],133:[2,94],134:[2,94]},{1:[2,97],5:289,6:[2,97],25:[1,5],26:[2,97],47:[2,97],52:[2,97],55:[2,97],70:[2,97],75:[2,97],83:[2,97],88:[2,97],90:[2,97],99:[2,97],100:85,101:[1,63],102:[2,97],103:[1,64],106:86,107:[1,66],108:67,115:[2,97],123:[2,97],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{99:[1,290]},{88:[1,291],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,111],6:[2,111],25:[2,111],26:[2,111],38:[2,111],47:[2,111],52:[2,111],55:[2,111],64:[2,111],65:[2,111],66:[2,111],68:[2,111],70:[2,111],71:[2,111],75:[2,111],81:[2,111],82:[2,111],83:[2,111],88:[2,111],90:[2,111],99:[2,111],101:[2,111],102:[2,111],103:[2,111],107:[2,111],113:[2,111],114:[2,111],115:[2,111],123:[2,111],125:[2,111],126:[2,111],129:[2,111],130:[2,111],131:[2,111],132:[2,111],133:[2,111],134:[2,111]},{8:197,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,58:145,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],91:292,93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:197,9:115,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,144],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,58:145,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],84:293,85:[1,56],86:[1,57],87:[1,55],91:143,93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,119],25:[2,119],26:[2,119],52:[2,119],83:[2,119],88:[2,119]},{6:[1,260],25:[1,261],26:[1,294]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],47:[2,136],52:[2,136],55:[2,136],70:[2,136],75:[2,136],83:[2,136],88:[2,136],90:[2,136],99:[2,136],100:85,101:[1,63],102:[2,136],103:[1,64],106:86,107:[1,66],108:67,115:[2,136],123:[2,136],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],47:[2,138],52:[2,138],55:[2,138],70:[2,138],75:[2,138],83:[2,138],88:[2,138],90:[2,138],99:[2,138],100:85,101:[1,63],102:[2,138],103:[1,64],106:86,107:[1,66],108:67,115:[2,138],123:[2,138],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{113:[2,156],114:[2,156]},{8:295,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:296,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:297,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,85],6:[2,85],25:[2,85],26:[2,85],38:[2,85],47:[2,85],52:[2,85],55:[2,85],64:[2,85],65:[2,85],66:[2,85],68:[2,85],70:[2,85],71:[2,85],75:[2,85],81:[2,85],82:[2,85],83:[2,85],88:[2,85],90:[2,85],99:[2,85],101:[2,85],102:[2,85],103:[2,85],107:[2,85],113:[2,85],114:[2,85],115:[2,85],123:[2,85],125:[2,85],126:[2,85],129:[2,85],130:[2,85],131:[2,85],132:[2,85],133:[2,85],134:[2,85]},{11:165,27:166,28:[1,71],29:167,30:[1,69],31:[1,70],39:298,40:164,42:168,44:[1,46],86:[1,111]},{6:[2,86],11:165,25:[2,86],26:[2,86],27:166,28:[1,71],29:167,30:[1,69],31:[1,70],39:163,40:164,42:168,44:[1,46],52:[2,86],74:299,86:[1,111]},{6:[2,88],25:[2,88],26:[2,88],52:[2,88],75:[2,88]},{6:[2,38],25:[2,38],26:[2,38],52:[2,38],75:[2,38],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{8:300,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{70:[2,115],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,36],6:[2,36],25:[2,36],26:[2,36],47:[2,36],52:[2,36],55:[2,36],70:[2,36],75:[2,36],83:[2,36],88:[2,36],90:[2,36],99:[2,36],101:[2,36],102:[2,36],103:[2,36],107:[2,36],115:[2,36],123:[2,36],125:[2,36],126:[2,36],129:[2,36],130:[2,36],131:[2,36],132:[2,36],133:[2,36],134:[2,36]},{1:[2,106],6:[2,106],25:[2,106],26:[2,106],47:[2,106],52:[2,106],55:[2,106],64:[2,106],65:[2,106],66:[2,106],68:[2,106],70:[2,106],71:[2,106],75:[2,106],81:[2,106],82:[2,106],83:[2,106],88:[2,106],90:[2,106],99:[2,106],101:[2,106],102:[2,106],103:[2,106],107:[2,106],115:[2,106],123:[2,106],125:[2,106],126:[2,106],129:[2,106],130:[2,106],131:[2,106],132:[2,106],133:[2,106],134:[2,106]},{1:[2,47],6:[2,47],25:[2,47],26:[2,47],47:[2,47],52:[2,47],55:[2,47],70:[2,47],75:[2,47],83:[2,47],88:[2,47],90:[2,47],99:[2,47],101:[2,47],102:[2,47],103:[2,47],107:[2,47],115:[2,47],123:[2,47],125:[2,47],126:[2,47],129:[2,47],130:[2,47],131:[2,47],132:[2,47],133:[2,47],134:[2,47]},{1:[2,194],6:[2,194],25:[2,194],26:[2,194],47:[2,194],52:[2,194],55:[2,194],70:[2,194],75:[2,194],83:[2,194],88:[2,194],90:[2,194],99:[2,194],101:[2,194],102:[2,194],103:[2,194],107:[2,194],115:[2,194],123:[2,194],125:[2,194],126:[2,194],129:[2,194],130:[2,194],131:[2,194],132:[2,194],133:[2,194],134:[2,194]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],47:[2,173],52:[2,173],55:[2,173],70:[2,173],75:[2,173],83:[2,173],88:[2,173],90:[2,173],99:[2,173],101:[2,173],102:[2,173],103:[2,173],107:[2,173],115:[2,173],118:[2,173],123:[2,173],125:[2,173],126:[2,173],129:[2,173],130:[2,173],131:[2,173],132:[2,173],133:[2,173],134:[2,173]},{1:[2,130],6:[2,130],25:[2,130],26:[2,130],47:[2,130],52:[2,130],55:[2,130],70:[2,130],75:[2,130],83:[2,130],88:[2,130],90:[2,130],99:[2,130],101:[2,130],102:[2,130],103:[2,130],107:[2,130],115:[2,130],123:[2,130],125:[2,130],126:[2,130],129:[2,130],130:[2,130],131:[2,130],132:[2,130],133:[2,130],134:[2,130]},{1:[2,131],6:[2,131],25:[2,131],26:[2,131],47:[2,131],52:[2,131],55:[2,131],70:[2,131],75:[2,131],83:[2,131],88:[2,131],90:[2,131],95:[2,131],99:[2,131],101:[2,131],102:[2,131],103:[2,131],107:[2,131],115:[2,131],123:[2,131],125:[2,131],126:[2,131],129:[2,131],130:[2,131],131:[2,131],132:[2,131],133:[2,131],134:[2,131]},{1:[2,164],6:[2,164],25:[2,164],26:[2,164],47:[2,164],52:[2,164],55:[2,164],70:[2,164],75:[2,164],83:[2,164],88:[2,164],90:[2,164],99:[2,164],101:[2,164],102:[2,164],103:[2,164],107:[2,164],115:[2,164],123:[2,164],125:[2,164],126:[2,164],129:[2,164],130:[2,164],131:[2,164],132:[2,164],133:[2,164],134:[2,164]},{5:301,25:[1,5]},{26:[1,302]},{6:[1,303],26:[2,170],118:[2,170],120:[2,170]},{8:304,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,98],6:[2,98],25:[2,98],26:[2,98],47:[2,98],52:[2,98],55:[2,98],70:[2,98],75:[2,98],83:[2,98],88:[2,98],90:[2,98],99:[2,98],101:[2,98],102:[2,98],103:[2,98],107:[2,98],115:[2,98],123:[2,98],125:[2,98],126:[2,98],129:[2,98],130:[2,98],131:[2,98],132:[2,98],133:[2,98],134:[2,98]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],47:[2,134],52:[2,134],55:[2,134],64:[2,134],65:[2,134],66:[2,134],68:[2,134],70:[2,134],71:[2,134],75:[2,134],81:[2,134],82:[2,134],83:[2,134],88:[2,134],90:[2,134],99:[2,134],101:[2,134],102:[2,134],103:[2,134],107:[2,134],115:[2,134],123:[2,134],125:[2,134],126:[2,134],129:[2,134],130:[2,134],131:[2,134],132:[2,134],133:[2,134],134:[2,134]},{1:[2,114],6:[2,114],25:[2,114],26:[2,114],47:[2,114],52:[2,114],55:[2,114],64:[2,114],65:[2,114],66:[2,114],68:[2,114],70:[2,114],71:[2,114],75:[2,114],81:[2,114],82:[2,114],83:[2,114],88:[2,114],90:[2,114],99:[2,114],101:[2,114],102:[2,114],103:[2,114],107:[2,114],115:[2,114],123:[2,114],125:[2,114],126:[2,114],129:[2,114],130:[2,114],131:[2,114],132:[2,114],133:[2,114],134:[2,114]},{6:[2,120],25:[2,120],26:[2,120],52:[2,120],83:[2,120],88:[2,120]},{6:[2,51],25:[2,51],26:[2,51],51:305,52:[1,222]},{6:[2,121],25:[2,121],26:[2,121],52:[2,121],83:[2,121],88:[2,121]},{1:[2,159],6:[2,159],25:[2,159],26:[2,159],47:[2,159],52:[2,159],55:[2,159],70:[2,159],75:[2,159],83:[2,159],88:[2,159],90:[2,159],99:[2,159],100:85,101:[2,159],102:[2,159],103:[2,159],106:86,107:[2,159],108:67,115:[1,306],123:[2,159],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,161],6:[2,161],25:[2,161],26:[2,161],47:[2,161],52:[2,161],55:[2,161],70:[2,161],75:[2,161],83:[2,161],88:[2,161],90:[2,161],99:[2,161],100:85,101:[2,161],102:[1,307],103:[2,161],106:86,107:[2,161],108:67,115:[2,161],123:[2,161],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,160],6:[2,160],25:[2,160],26:[2,160],47:[2,160],52:[2,160],55:[2,160],70:[2,160],75:[2,160],83:[2,160],88:[2,160],90:[2,160],99:[2,160],100:85,101:[2,160],102:[2,160],103:[2,160],106:86,107:[2,160],108:67,115:[2,160],123:[2,160],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{6:[2,89],25:[2,89],26:[2,89],52:[2,89],75:[2,89]},{6:[2,51],25:[2,51],26:[2,51],51:308,52:[1,232]},{26:[1,309],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{26:[1,310]},{1:[2,167],6:[2,167],25:[2,167],26:[2,167],47:[2,167],52:[2,167],55:[2,167],70:[2,167],75:[2,167],83:[2,167],88:[2,167],90:[2,167],99:[2,167],101:[2,167],102:[2,167],103:[2,167],107:[2,167],115:[2,167],123:[2,167],125:[2,167],126:[2,167],129:[2,167],130:[2,167],131:[2,167],132:[2,167],133:[2,167],134:[2,167]},{26:[2,171],118:[2,171],120:[2,171]},{25:[2,126],52:[2,126],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{6:[1,260],25:[1,261],26:[1,311]},{8:312,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:313,9:115,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:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[1,271],25:[1,272],26:[1,314]},{6:[2,39],25:[2,39],26:[2,39],52:[2,39],75:[2,39]},{1:[2,165],6:[2,165],25:[2,165],26:[2,165],47:[2,165],52:[2,165],55:[2,165],70:[2,165],75:[2,165],83:[2,165],88:[2,165],90:[2,165],99:[2,165],101:[2,165],102:[2,165],103:[2,165],107:[2,165],115:[2,165],123:[2,165],125:[2,165],126:[2,165],129:[2,165],130:[2,165],131:[2,165],132:[2,165],133:[2,165],134:[2,165]},{6:[2,122],25:[2,122],26:[2,122],52:[2,122],83:[2,122],88:[2,122]},{1:[2,162],6:[2,162],25:[2,162],26:[2,162],47:[2,162],52:[2,162],55:[2,162],70:[2,162],75:[2,162],83:[2,162],88:[2,162],90:[2,162],99:[2,162],100:85,101:[2,162],102:[2,162],103:[2,162],106:86,107:[2,162],108:67,115:[2,162],123:[2,162],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,163],6:[2,163],25:[2,163],26:[2,163],47:[2,163],52:[2,163],55:[2,163],70:[2,163],75:[2,163],83:[2,163],88:[2,163],90:[2,163],99:[2,163],100:85,101:[2,163],102:[2,163],103:[2,163],106:86,107:[2,163],108:67,115:[2,163],123:[2,163],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{6:[2,90],25:[2,90],26:[2,90],52:[2,90],75:[2,90]}],
-defaultActions: {58:[2,49],59:[2,50],73:[2,3],92:[2,104],186:[2,84]},
+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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[3]},{1:[2,2],6:[1,74]},{6:[1,75]},{1:[2,4],6:[2,4],26:[2,4],101:[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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,7],6:[2,7],26:[2,7],101:[2,7],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,8],6:[2,8],26:[2,8],101:[2,8],102:90,103:[1,65],105:[1,66],108:91,109:[1,68],110:69,125:[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:98,70:[1,99],72:[2,12],73:[1,100],77:[2,12],80:92,83:[1,94],84:[2,107],85:[2,12],90:[2,12],92:[2,12],101:[2,12],103:[2,12],104:[2,12],105:[2,12],109:[2,12],117:[2,12],125:[2,12],127:[2,12],128:[2,12],131:[2,12],132:[2,12],133:[2,12],134:[2,12],135:[2,12],136:[2,12]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],49:[2,13],54:[2,13],57:[2,13],62:102,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],72:[2,13],73:[1,100],77:[2,13],80:101,83:[1,94],84:[2,107],85:[2,13],90:[2,13],92:[2,13],101:[2,13],103:[2,13],104:[2,13],105:[2,13],109:[2,13],117:[2,13],125:[2,13],127:[2,13],128:[2,13],131:[2,13],132:[2,13],133:[2,13],134:[2,13],135:[2,13],136:[2,13]},{1:[2,14],6:[2,14],25:[2,14],26:[2,14],49:[2,14],54:[2,14],57:[2,14],72:[2,14],77:[2,14],85:[2,14],90:[2,14],92:[2,14],101:[2,14],103:[2,14],104:[2,14],105:[2,14],109:[2,14],117:[2,14],125:[2,14],127:[2,14],128:[2,14],131:[2,14],132:[2,14],133:[2,14],134:[2,14],135:[2,14],136:[2,14]},{1:[2,15],6:[2,15],25:[2,15],26:[2,15],49:[2,15],54:[2,15],57:[2,15],72:[2,15],77:[2,15],85:[2,15],90:[2,15],92:[2,15],101:[2,15],103:[2,15],104:[2,15],105:[2,15],109:[2,15],117:[2,15],125:[2,15],127:[2,15],128:[2,15],131:[2,15],132:[2,15],133:[2,15],134:[2,15],135:[2,15],136:[2,15]},{1:[2,16],6:[2,16],25:[2,16],26:[2,16],49:[2,16],54:[2,16],57:[2,16],72:[2,16],77:[2,16],85:[2,16],90:[2,16],92:[2,16],101:[2,16],103:[2,16],104:[2,16],105:[2,16],109:[2,16],117:[2,16],125:[2,16],127:[2,16],128:[2,16],131:[2,16],132:[2,16],133:[2,16],134:[2,16],135:[2,16],136:[2,16]},{1:[2,17],6:[2,17],25:[2,17],26:[2,17],49:[2,17],54:[2,17],57:[2,17],72:[2,17],77:[2,17],85:[2,17],90:[2,17],92:[2,17],101:[2,17],103:[2,17],104:[2,17],105:[2,17],109:[2,17],117:[2,17],125:[2,17],127:[2,17],128:[2,17],131:[2,17],132:[2,17],133:[2,17],134:[2,17],135:[2,17],136:[2,17]},{1:[2,18],6:[2,18],25:[2,18],26:[2,18],49:[2,18],54:[2,18],57:[2,18],72:[2,18],77:[2,18],85:[2,18],90:[2,18],92:[2,18],101:[2,18],103:[2,18],104:[2,18],105:[2,18],109:[2,18],117:[2,18],125:[2,18],127:[2,18],128:[2,18],131:[2,18],132:[2,18],133:[2,18],134:[2,18],135:[2,18],136:[2,18]},{1:[2,19],6:[2,19],25:[2,19],26:[2,19],49:[2,19],54:[2,19],57:[2,19],72:[2,19],77:[2,19],85:[2,19],90:[2,19],92:[2,19],101:[2,19],103:[2,19],104:[2,19],105:[2,19],109:[2,19],117:[2,19],125:[2,19],127:[2,19],128:[2,19],131:[2,19],132:[2,19],133:[2,19],134:[2,19],135:[2,19],136:[2,19]},{1:[2,20],6:[2,20],25:[2,20],26:[2,20],49:[2,20],54:[2,20],57:[2,20],72:[2,20],77:[2,20],85:[2,20],90:[2,20],92:[2,20],101:[2,20],103:[2,20],104:[2,20],105:[2,20],109:[2,20],117:[2,20],125:[2,20],127:[2,20],128:[2,20],131:[2,20],132:[2,20],133:[2,20],134:[2,20],135:[2,20],136:[2,20]},{1:[2,21],6:[2,21],25:[2,21],26:[2,21],49:[2,21],54:[2,21],57:[2,21],72:[2,21],77:[2,21],85:[2,21],90:[2,21],92:[2,21],101:[2,21],103:[2,21],104:[2,21],105:[2,21],109:[2,21],117:[2,21],125:[2,21],127:[2,21],128:[2,21],131:[2,21],132:[2,21],133:[2,21],134:[2,21],135:[2,21],136:[2,21]},{1:[2,22],6:[2,22],25:[2,22],26:[2,22],49:[2,22],54:[2,22],57:[2,22],72:[2,22],77:[2,22],85:[2,22],90:[2,22],92:[2,22],101:[2,22],103:[2,22],104:[2,22],105:[2,22],109:[2,22],117:[2,22],125:[2,22],127:[2,22],128:[2,22],131:[2,22],132:[2,22],133:[2,22],134:[2,22],135:[2,22],136:[2,22]},{1:[2,23],6:[2,23],25:[2,23],26:[2,23],49:[2,23],54:[2,23],57:[2,23],72:[2,23],77:[2,23],85:[2,23],90:[2,23],92:[2,23],101:[2,23],103:[2,23],104:[2,23],105:[2,23],109:[2,23],117:[2,23],125:[2,23],127:[2,23],128:[2,23],131:[2,23],132:[2,23],133:[2,23],134:[2,23],135:[2,23],136:[2,23]},{1:[2,9],6:[2,9],26:[2,9],101:[2,9],103:[2,9],105:[2,9],109:[2,9],125:[2,9]},{1:[2,10],6:[2,10],26:[2,10],101:[2,10],103:[2,10],105:[2,10],109:[2,10],125:[2,10]},{1:[2,11],6:[2,11],26:[2,11],101:[2,11],103:[2,11],105:[2,11],109:[2,11],125:[2,11]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],40:[1,103],49:[2,75],54:[2,75],57:[2,75],66:[2,75],67:[2,75],68:[2,75],70:[2,75],72:[2,75],73:[2,75],77:[2,75],83:[2,75],84:[2,75],85:[2,75],90:[2,75],92:[2,75],101:[2,75],103:[2,75],104:[2,75],105:[2,75],109:[2,75],117:[2,75],125:[2,75],127:[2,75],128:[2,75],131:[2,75],132:[2,75],133:[2,75],134:[2,75],135:[2,75],136:[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],70:[2,76],72:[2,76],73:[2,76],77:[2,76],83:[2,76],84:[2,76],85:[2,76],90:[2,76],92:[2,76],101:[2,76],103:[2,76],104:[2,76],105:[2,76],109:[2,76],117:[2,76],125:[2,76],127:[2,76],128:[2,76],131:[2,76],132:[2,76],133:[2,76],134:[2,76],135:[2,76],136:[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],70:[2,77],72:[2,77],73:[2,77],77:[2,77],83:[2,77],84:[2,77],85:[2,77],90:[2,77],92:[2,77],101:[2,77],103:[2,77],104:[2,77],105:[2,77],109:[2,77],117:[2,77],125:[2,77],127:[2,77],128:[2,77],131:[2,77],132:[2,77],133:[2,77],134:[2,77],135:[2,77],136:[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],70:[2,78],72:[2,78],73:[2,78],77:[2,78],83:[2,78],84:[2,78],85:[2,78],90:[2,78],92:[2,78],101:[2,78],103:[2,78],104:[2,78],105:[2,78],109:[2,78],117:[2,78],125:[2,78],127:[2,78],128:[2,78],131:[2,78],132:[2,78],133:[2,78],134:[2,78],135:[2,78],136:[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],70:[2,79],72:[2,79],73:[2,79],77:[2,79],83:[2,79],84:[2,79],85:[2,79],90:[2,79],92:[2,79],101:[2,79],103:[2,79],104:[2,79],105:[2,79],109:[2,79],117:[2,79],125:[2,79],127:[2,79],128:[2,79],131:[2,79],132:[2,79],133:[2,79],134:[2,79],135:[2,79],136:[2,79]},{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],70:[2,105],72:[2,105],73:[2,105],77:[2,105],81:104,83:[2,105],84:[1,105],85:[2,105],90:[2,105],92:[2,105],101:[2,105],103:[2,105],104:[2,105],105:[2,105],109:[2,105],117:[2,105],125:[2,105],127:[2,105],128:[2,105],131:[2,105],132:[2,105],133:[2,105],134:[2,105],135:[2,105],136:[2,105]},{6:[2,55],25:[2,55],27:109,28:[1,73],44:110,48:106,49:[2,55],54:[2,55],55:107,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{5:115,25:[1,5]},{8:116,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:118,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:119,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{13:121,14:122,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:123,44:63,58:47,59:48,61:120,63:25,64:26,65:27,75:[1,70],82:[1,28],87:[1,58],88:[1,59],89:[1,57],100:[1,56]},{13:121,14:122,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:123,44:63,58:47,59:48,61:124,63:25,64:26,65:27,75:[1,70],82:[1,28],87:[1,58],88:[1,59],89:[1,57],100:[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],70:[2,72],72:[2,72],73:[2,72],77:[2,72],79:[1,128],83:[2,72],84:[2,72],85:[2,72],90:[2,72],92:[2,72],101:[2,72],103:[2,72],104:[2,72],105:[2,72],109:[2,72],117:[2,72],125:[2,72],127:[2,72],128:[2,72],129:[1,125],130:[1,126],131:[2,72],132:[2,72],133:[2,72],134:[2,72],135:[2,72],136:[2,72],137:[1,127]},{1:[2,180],6:[2,180],25:[2,180],26:[2,180],49:[2,180],54:[2,180],57:[2,180],72:[2,180],77:[2,180],85:[2,180],90:[2,180],92:[2,180],101:[2,180],103:[2,180],104:[2,180],105:[2,180],109:[2,180],117:[2,180],120:[1,129],125:[2,180],127:[2,180],128:[2,180],131:[2,180],132:[2,180],133:[2,180],134:[2,180],135:[2,180],136:[2,180]},{5:130,25:[1,5]},{5:131,25:[1,5]},{1:[2,147],6:[2,147],25:[2,147],26:[2,147],49:[2,147],54:[2,147],57:[2,147],72:[2,147],77:[2,147],85:[2,147],90:[2,147],92:[2,147],101:[2,147],103:[2,147],104:[2,147],105:[2,147],109:[2,147],117:[2,147],125:[2,147],127:[2,147],128:[2,147],131:[2,147],132:[2,147],133:[2,147],134:[2,147],135:[2,147],136:[2,147]},{5:132,25:[1,5]},{8:133,9:117,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,134],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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,95],5:135,6:[2,95],13:121,14:122,25:[1,5],26:[2,95],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:123,44:63,49:[2,95],54:[2,95],57:[2,95],58:47,59:48,61:137,63:25,64:26,65:27,72:[2,95],75:[1,70],77:[2,95],79:[1,136],82:[1,28],85:[2,95],87:[1,58],88:[1,59],89:[1,57],90:[2,95],92:[2,95],100:[1,56],101:[2,95],103:[2,95],104:[2,95],105:[2,95],109:[2,95],117:[2,95],125:[2,95],127:[2,95],128:[2,95],131:[2,95],132:[2,95],133:[2,95],134:[2,95],135:[2,95],136:[2,95]},{8:138,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,47],6:[2,47],8:139,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],101:[2,47],102:39,103:[2,47],105:[2,47],106:40,107:[1,67],108:41,109:[2,47],110:69,118:[1,42],123:37,124:[1,64],125:[2,47],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,48],6:[2,48],25:[2,48],26:[2,48],54:[2,48],77:[2,48],101:[2,48],103:[2,48],105:[2,48],109:[2,48],125:[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],70:[2,73],72:[2,73],73:[2,73],77:[2,73],83:[2,73],84:[2,73],85:[2,73],90:[2,73],92:[2,73],101:[2,73],103:[2,73],104:[2,73],105:[2,73],109:[2,73],117:[2,73],125:[2,73],127:[2,73],128:[2,73],131:[2,73],132:[2,73],133:[2,73],134:[2,73],135:[2,73],136:[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],70:[2,74],72:[2,74],73:[2,74],77:[2,74],83:[2,74],84:[2,74],85:[2,74],90:[2,74],92:[2,74],101:[2,74],103:[2,74],104:[2,74],105:[2,74],109:[2,74],117:[2,74],125:[2,74],127:[2,74],128:[2,74],131:[2,74],132:[2,74],133:[2,74],134:[2,74],135:[2,74],136:[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],70:[2,29],72:[2,29],73:[2,29],77:[2,29],83:[2,29],84:[2,29],85:[2,29],90:[2,29],92:[2,29],101:[2,29],103:[2,29],104:[2,29],105:[2,29],109:[2,29],117:[2,29],125:[2,29],127:[2,29],128:[2,29],131:[2,29],132:[2,29],133:[2,29],134:[2,29],135:[2,29],136:[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],70:[2,30],72:[2,30],73:[2,30],77:[2,30],83:[2,30],84:[2,30],85:[2,30],90:[2,30],92:[2,30],101:[2,30],103:[2,30],104:[2,30],105:[2,30],109:[2,30],117:[2,30],125:[2,30],127:[2,30],128:[2,30],131:[2,30],132:[2,30],133:[2,30],134:[2,30],135:[2,30],136:[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],70:[2,31],72:[2,31],73:[2,31],77:[2,31],83:[2,31],84:[2,31],85:[2,31],90:[2,31],92:[2,31],101:[2,31],103:[2,31],104:[2,31],105:[2,31],109:[2,31],117:[2,31],125:[2,31],127:[2,31],128:[2,31],131:[2,31],132:[2,31],133:[2,31],134:[2,31],135:[2,31],136:[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],70:[2,32],72:[2,32],73:[2,32],77:[2,32],83:[2,32],84:[2,32],85:[2,32],90:[2,32],92:[2,32],101:[2,32],103:[2,32],104:[2,32],105:[2,32],109:[2,32],117:[2,32],125:[2,32],127:[2,32],128:[2,32],131:[2,32],132:[2,32],133:[2,32],134:[2,32],135:[2,32],136:[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],70:[2,33],72:[2,33],73:[2,33],77:[2,33],83:[2,33],84:[2,33],85:[2,33],90:[2,33],92:[2,33],101:[2,33],103:[2,33],104:[2,33],105:[2,33],109:[2,33],117:[2,33],125:[2,33],127:[2,33],128:[2,33],131:[2,33],132:[2,33],133:[2,33],134:[2,33],135:[2,33],136:[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],70:[2,34],72:[2,34],73:[2,34],77:[2,34],83:[2,34],84:[2,34],85:[2,34],90:[2,34],92:[2,34],101:[2,34],103:[2,34],104:[2,34],105:[2,34],109:[2,34],117:[2,34],125:[2,34],127:[2,34],128:[2,34],131:[2,34],132:[2,34],133:[2,34],134:[2,34],135:[2,34],136:[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],70:[2,35],72:[2,35],73:[2,35],77:[2,35],83:[2,35],84:[2,35],85:[2,35],90:[2,35],92:[2,35],101:[2,35],103:[2,35],104:[2,35],105:[2,35],109:[2,35],117:[2,35],125:[2,35],127:[2,35],128:[2,35],131:[2,35],132:[2,35],133:[2,35],134:[2,35],135:[2,35],136:[2,35]},{4:140,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,141],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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:142,9:117,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,146],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:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:144,87:[1,58],88:[1,59],89:[1,57],90:[1,143],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{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],70:[2,111],72:[2,111],73:[2,111],77:[2,111],83:[2,111],84:[2,111],85:[2,111],90:[2,111],92:[2,111],101:[2,111],103:[2,111],104:[2,111],105:[2,111],109:[2,111],117:[2,111],125:[2,111],127:[2,111],128:[2,111],131:[2,111],132:[2,111],133:[2,111],134:[2,111],135:[2,111],136:[2,111]},{1:[2,112],6:[2,112],25:[2,112],26:[2,112],27:148,28:[1,73],49:[2,112],54:[2,112],57:[2,112],66:[2,112],67:[2,112],68:[2,112],70:[2,112],72:[2,112],73:[2,112],77:[2,112],83:[2,112],84:[2,112],85:[2,112],90:[2,112],92:[2,112],101:[2,112],103:[2,112],104:[2,112],105:[2,112],109:[2,112],117:[2,112],125:[2,112],127:[2,112],128:[2,112],131:[2,112],132:[2,112],133:[2,112],134:[2,112],135:[2,112],136:[2,112]},{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],70:[2,68],72:[2,68],73:[2,68],77:[2,68],79:[2,68],83:[2,68],84:[2,68],85:[2,68],90:[2,68],92:[2,68],101:[2,68],103:[2,68],104:[2,68],105:[2,68],109:[2,68],117:[2,68],125:[2,68],127:[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]},{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],70:[2,71],72:[2,71],73:[2,71],77:[2,71],79:[2,71],83:[2,71],84:[2,71],85:[2,71],90:[2,71],92:[2,71],101:[2,71],103:[2,71],104:[2,71],105:[2,71],109:[2,71],117:[2,71],125:[2,71],127:[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]},{8:149,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:150,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:151,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{5:152,8:153,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{27:158,28:[1,73],44:159,58:160,59:161,64:154,75:[1,70],88:[1,113],89:[1,57],112:155,113:[1,156],114:157},{111:162,115:[1,163],116:[1,164]},{6:[2,90],11:168,25:[2,90],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:166,42:167,44:171,46:[1,46],54:[2,90],76:165,77:[2,90],88:[1,113]},{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],70:[2,27],72:[2,27],73:[2,27],77:[2,27],83:[2,27],84:[2,27],85:[2,27],90:[2,27],92:[2,27],101:[2,27],103:[2,27],104:[2,27],105:[2,27],109:[2,27],117:[2,27],125:[2,27],127:[2,27],128:[2,27],131:[2,27],132:[2,27],133:[2,27],134:[2,27],135:[2,27],136:[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],70:[2,28],72:[2,28],73:[2,28],77:[2,28],83:[2,28],84:[2,28],85:[2,28],90:[2,28],92:[2,28],101:[2,28],103:[2,28],104:[2,28],105:[2,28],109:[2,28],117:[2,28],125:[2,28],127:[2,28],128:[2,28],131:[2,28],132:[2,28],133:[2,28],134:[2,28],135:[2,28],136:[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],70:[2,26],72:[2,26],73:[2,26],77:[2,26],79:[2,26],83:[2,26],84:[2,26],85:[2,26],90:[2,26],92:[2,26],101:[2,26],103:[2,26],104:[2,26],105:[2,26],109:[2,26],115:[2,26],116:[2,26],117:[2,26],125:[2,26],127:[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]},{1:[2,6],6:[2,6],7:172,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],101:[2,6],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[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],72:[2,24],77:[2,24],85:[2,24],90:[2,24],92:[2,24],97:[2,24],98:[2,24],101:[2,24],103:[2,24],104:[2,24],105:[2,24],109:[2,24],117:[2,24],120:[2,24],122:[2,24],125:[2,24],127:[2,24],128:[2,24],131:[2,24],132:[2,24],133:[2,24],134:[2,24],135:[2,24],136:[2,24]},{6:[1,74],26:[1,173]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],49:[2,191],54:[2,191],57:[2,191],72:[2,191],77:[2,191],85:[2,191],90:[2,191],92:[2,191],101:[2,191],103:[2,191],104:[2,191],105:[2,191],109:[2,191],117:[2,191],125:[2,191],127:[2,191],128:[2,191],131:[2,191],132:[2,191],133:[2,191],134:[2,191],135:[2,191],136:[2,191]},{8:174,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:175,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:176,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:177,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:178,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:179,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:180,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:181,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],49:[2,146],54:[2,146],57:[2,146],72:[2,146],77:[2,146],85:[2,146],90:[2,146],92:[2,146],101:[2,146],103:[2,146],104:[2,146],105:[2,146],109:[2,146],117:[2,146],125:[2,146],127:[2,146],128:[2,146],131:[2,146],132:[2,146],133:[2,146],134:[2,146],135:[2,146],136:[2,146]},{1:[2,151],6:[2,151],25:[2,151],26:[2,151],49:[2,151],54:[2,151],57:[2,151],72:[2,151],77:[2,151],85:[2,151],90:[2,151],92:[2,151],101:[2,151],103:[2,151],104:[2,151],105:[2,151],109:[2,151],117:[2,151],125:[2,151],127:[2,151],128:[2,151],131:[2,151],132:[2,151],133:[2,151],134:[2,151],135:[2,151],136:[2,151]},{8:182,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],49:[2,145],54:[2,145],57:[2,145],72:[2,145],77:[2,145],85:[2,145],90:[2,145],92:[2,145],101:[2,145],103:[2,145],104:[2,145],105:[2,145],109:[2,145],117:[2,145],125:[2,145],127:[2,145],128:[2,145],131:[2,145],132:[2,145],133:[2,145],134:[2,145],135:[2,145],136:[2,145]},{1:[2,150],6:[2,150],25:[2,150],26:[2,150],49:[2,150],54:[2,150],57:[2,150],72:[2,150],77:[2,150],85:[2,150],90:[2,150],92:[2,150],101:[2,150],103:[2,150],104:[2,150],105:[2,150],109:[2,150],117:[2,150],125:[2,150],127:[2,150],128:[2,150],131:[2,150],132:[2,150],133:[2,150],134:[2,150],135:[2,150],136:[2,150]},{81:183,84:[1,105]},{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],70:[2,69],72:[2,69],73:[2,69],77:[2,69],79:[2,69],83:[2,69],84:[2,69],85:[2,69],90:[2,69],92:[2,69],101:[2,69],103:[2,69],104:[2,69],105:[2,69],109:[2,69],117:[2,69],125:[2,69],127:[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]},{84:[2,108]},{27:184,28:[1,73]},{27:185,28:[1,73]},{1:[2,83],6:[2,83],25:[2,83],26:[2,83],27:186,28:[1,73],40:[2,83],49:[2,83],54:[2,83],57:[2,83],66:[2,83],67:[2,83],68:[2,83],70:[2,83],72:[2,83],73:[2,83],77:[2,83],79:[2,83],83:[2,83],84:[2,83],85:[2,83],90:[2,83],92:[2,83],101:[2,83],103:[2,83],104:[2,83],105:[2,83],109:[2,83],117:[2,83],125:[2,83],127:[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]},{1:[2,84],6:[2,84],25:[2,84],26:[2,84],40:[2,84],49:[2,84],54:[2,84],57:[2,84],66:[2,84],67:[2,84],68:[2,84],70:[2,84],72:[2,84],73:[2,84],77:[2,84],79:[2,84],83:[2,84],84:[2,84],85:[2,84],90:[2,84],92:[2,84],101:[2,84],103:[2,84],104:[2,84],105:[2,84],109:[2,84],117:[2,84],125:[2,84],127:[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]},{8:188,9:117,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,192],58:47,59:48,61:36,63:25,64:26,65:27,71:187,74:189,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],91:190,92:[1,191],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{69:193,70:[1,99],73:[1,100]},{81:194,84:[1,105]},{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],70:[2,70],72:[2,70],73:[2,70],77:[2,70],79:[2,70],83:[2,70],84:[2,70],85:[2,70],90:[2,70],92:[2,70],101:[2,70],103:[2,70],104:[2,70],105:[2,70],109:[2,70],117:[2,70],125:[2,70],127:[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]},{6:[1,196],8:195,9:117,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,197],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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{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],70:[2,106],72:[2,106],73:[2,106],77:[2,106],83:[2,106],84:[2,106],85:[2,106],90:[2,106],92:[2,106],101:[2,106],103:[2,106],104:[2,106],105:[2,106],109:[2,106],117:[2,106],125:[2,106],127:[2,106],128:[2,106],131:[2,106],132:[2,106],133:[2,106],134:[2,106],135:[2,106],136:[2,106]},{8:200,9:117,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,146],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:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],85:[1,198],86:199,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],49:[1,201],53:203,54:[1,202]},{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,205],49:[2,60],54:[2,60],57:[1,204]},{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:148,28:[1,73]},{8:200,9:117,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,146],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:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:144,87:[1,58],88:[1,59],89:[1,57],90:[1,143],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,50],6:[2,50],25:[2,50],26:[2,50],49:[2,50],54:[2,50],57:[2,50],72:[2,50],77:[2,50],85:[2,50],90:[2,50],92:[2,50],101:[2,50],103:[2,50],104:[2,50],105:[2,50],109:[2,50],117:[2,50],125:[2,50],127:[2,50],128:[2,50],131:[2,50],132:[2,50],133:[2,50],134:[2,50],135:[2,50],136:[2,50]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],49:[2,184],54:[2,184],57:[2,184],72:[2,184],77:[2,184],85:[2,184],90:[2,184],92:[2,184],101:[2,184],102:87,103:[2,184],104:[2,184],105:[2,184],108:88,109:[2,184],110:69,117:[2,184],125:[2,184],127:[2,184],128:[2,184],131:[1,78],132:[2,184],133:[2,184],134:[2,184],135:[2,184],136:[2,184]},{102:90,103:[1,65],105:[1,66],108:91,109:[1,68],110:69,125:[1,89]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],49:[2,185],54:[2,185],57:[2,185],72:[2,185],77:[2,185],85:[2,185],90:[2,185],92:[2,185],101:[2,185],102:87,103:[2,185],104:[2,185],105:[2,185],108:88,109:[2,185],110:69,117:[2,185],125:[2,185],127:[2,185],128:[2,185],131:[1,78],132:[2,185],133:[2,185],134:[2,185],135:[2,185],136:[2,185]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],49:[2,186],54:[2,186],57:[2,186],72:[2,186],77:[2,186],85:[2,186],90:[2,186],92:[2,186],101:[2,186],102:87,103:[2,186],104:[2,186],105:[2,186],108:88,109:[2,186],110:69,117:[2,186],125:[2,186],127:[2,186],128:[2,186],131:[1,78],132:[2,186],133:[2,186],134:[2,186],135:[2,186],136:[2,186]},{1:[2,187],6:[2,187],25:[2,187],26:[2,187],49:[2,187],54:[2,187],57:[2,187],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,187],73:[2,72],77:[2,187],83:[2,72],84:[2,72],85:[2,187],90:[2,187],92:[2,187],101:[2,187],103:[2,187],104:[2,187],105:[2,187],109:[2,187],117:[2,187],125:[2,187],127:[2,187],128:[2,187],131:[2,187],132:[2,187],133:[2,187],134:[2,187],135:[2,187],136:[2,187]},{62:93,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],73:[1,100],80:92,83:[1,94],84:[2,107]},{62:102,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],73:[1,100],80:101,83:[1,94],84:[2,107]},{66:[2,75],67:[2,75],68:[2,75],70:[2,75],73:[2,75],83:[2,75],84:[2,75]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],49:[2,188],54:[2,188],57:[2,188],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,188],73:[2,72],77:[2,188],83:[2,72],84:[2,72],85:[2,188],90:[2,188],92:[2,188],101:[2,188],103:[2,188],104:[2,188],105:[2,188],109:[2,188],117:[2,188],125:[2,188],127:[2,188],128:[2,188],131:[2,188],132:[2,188],133:[2,188],134:[2,188],135:[2,188],136:[2,188]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],49:[2,189],54:[2,189],57:[2,189],72:[2,189],77:[2,189],85:[2,189],90:[2,189],92:[2,189],101:[2,189],103:[2,189],104:[2,189],105:[2,189],109:[2,189],117:[2,189],125:[2,189],127:[2,189],128:[2,189],131:[2,189],132:[2,189],133:[2,189],134:[2,189],135:[2,189],136:[2,189]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],49:[2,190],54:[2,190],57:[2,190],72:[2,190],77:[2,190],85:[2,190],90:[2,190],92:[2,190],101:[2,190],103:[2,190],104:[2,190],105:[2,190],109:[2,190],117:[2,190],125:[2,190],127:[2,190],128:[2,190],131:[2,190],132:[2,190],133:[2,190],134:[2,190],135:[2,190],136:[2,190]},{8:206,9:117,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,207],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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:208,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{5:209,25:[1,5],124:[1,210]},{1:[2,132],6:[2,132],25:[2,132],26:[2,132],49:[2,132],54:[2,132],57:[2,132],72:[2,132],77:[2,132],85:[2,132],90:[2,132],92:[2,132],96:211,97:[1,212],98:[1,213],101:[2,132],103:[2,132],104:[2,132],105:[2,132],109:[2,132],117:[2,132],125:[2,132],127:[2,132],128:[2,132],131:[2,132],132:[2,132],133:[2,132],134:[2,132],135:[2,132],136:[2,132]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],49:[2,144],54:[2,144],57:[2,144],72:[2,144],77:[2,144],85:[2,144],90:[2,144],92:[2,144],101:[2,144],103:[2,144],104:[2,144],105:[2,144],109:[2,144],117:[2,144],125:[2,144],127:[2,144],128:[2,144],131:[2,144],132:[2,144],133:[2,144],134:[2,144],135:[2,144],136:[2,144]},{1:[2,152],6:[2,152],25:[2,152],26:[2,152],49:[2,152],54:[2,152],57:[2,152],72:[2,152],77:[2,152],85:[2,152],90:[2,152],92:[2,152],101:[2,152],103:[2,152],104:[2,152],105:[2,152],109:[2,152],117:[2,152],125:[2,152],127:[2,152],128:[2,152],131:[2,152],132:[2,152],133:[2,152],134:[2,152],135:[2,152],136:[2,152]},{25:[1,214],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{119:215,121:216,122:[1,217]},{1:[2,96],6:[2,96],25:[2,96],26:[2,96],49:[2,96],54:[2,96],57:[2,96],72:[2,96],77:[2,96],85:[2,96],90:[2,96],92:[2,96],101:[2,96],103:[2,96],104:[2,96],105:[2,96],109:[2,96],117:[2,96],125:[2,96],127:[2,96],128:[2,96],131:[2,96],132:[2,96],133:[2,96],134:[2,96],135:[2,96],136:[2,96]},{8:218,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,99],5:219,6:[2,99],25:[1,5],26:[2,99],49:[2,99],54:[2,99],57:[2,99],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,99],73:[2,72],77:[2,99],79:[1,220],83:[2,72],84:[2,72],85:[2,99],90:[2,99],92:[2,99],101:[2,99],103:[2,99],104:[2,99],105:[2,99],109:[2,99],117:[2,99],125:[2,99],127:[2,99],128:[2,99],131:[2,99],132:[2,99],133:[2,99],134:[2,99],135:[2,99],136:[2,99]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],49:[2,137],54:[2,137],57:[2,137],72:[2,137],77:[2,137],85:[2,137],90:[2,137],92:[2,137],101:[2,137],102:87,103:[2,137],104:[2,137],105:[2,137],108:88,109:[2,137],110:69,117:[2,137],125:[2,137],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,46],6:[2,46],26:[2,46],101:[2,46],102:87,103:[2,46],105:[2,46],108:88,109:[2,46],110:69,125:[2,46],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,74],101:[1,221]},{4:222,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,128],25:[2,128],54:[2,128],57:[1,224],90:[2,128],91:223,92:[1,191],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,114],6:[2,114],25:[2,114],26:[2,114],40:[2,114],49:[2,114],54:[2,114],57:[2,114],66:[2,114],67:[2,114],68:[2,114],70:[2,114],72:[2,114],73:[2,114],77:[2,114],83:[2,114],84:[2,114],85:[2,114],90:[2,114],92:[2,114],101:[2,114],103:[2,114],104:[2,114],105:[2,114],109:[2,114],115:[2,114],116:[2,114],117:[2,114],125:[2,114],127:[2,114],128:[2,114],131:[2,114],132:[2,114],133:[2,114],134:[2,114],135:[2,114],136:[2,114]},{6:[2,53],25:[2,53],53:225,54:[1,226],90:[2,53]},{6:[2,123],25:[2,123],26:[2,123],54:[2,123],85:[2,123],90:[2,123]},{8:200,9:117,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,146],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:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:227,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,129],25:[2,129],26:[2,129],54:[2,129],85:[2,129],90:[2,129]},{1:[2,113],6:[2,113],25:[2,113],26:[2,113],40:[2,113],43:[2,113],49:[2,113],54:[2,113],57:[2,113],66:[2,113],67:[2,113],68:[2,113],70:[2,113],72:[2,113],73:[2,113],77:[2,113],79:[2,113],83:[2,113],84:[2,113],85:[2,113],90:[2,113],92:[2,113],101:[2,113],103:[2,113],104:[2,113],105:[2,113],109:[2,113],115:[2,113],116:[2,113],117:[2,113],125:[2,113],127:[2,113],128:[2,113],129:[2,113],130:[2,113],131:[2,113],132:[2,113],133:[2,113],134:[2,113],135:[2,113],136:[2,113],137:[2,113]},{5:228,25:[1,5],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],49:[2,140],54:[2,140],57:[2,140],72:[2,140],77:[2,140],85:[2,140],90:[2,140],92:[2,140],101:[2,140],102:87,103:[1,65],104:[1,229],105:[1,66],108:88,109:[1,68],110:69,117:[2,140],125:[2,140],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],49:[2,142],54:[2,142],57:[2,142],72:[2,142],77:[2,142],85:[2,142],90:[2,142],92:[2,142],101:[2,142],102:87,103:[1,65],104:[1,230],105:[1,66],108:88,109:[1,68],110:69,117:[2,142],125:[2,142],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,148],6:[2,148],25:[2,148],26:[2,148],49:[2,148],54:[2,148],57:[2,148],72:[2,148],77:[2,148],85:[2,148],90:[2,148],92:[2,148],101:[2,148],103:[2,148],104:[2,148],105:[2,148],109:[2,148],117:[2,148],125:[2,148],127:[2,148],128:[2,148],131:[2,148],132:[2,148],133:[2,148],134:[2,148],135:[2,148],136:[2,148]},{1:[2,149],6:[2,149],25:[2,149],26:[2,149],49:[2,149],54:[2,149],57:[2,149],72:[2,149],77:[2,149],85:[2,149],90:[2,149],92:[2,149],101:[2,149],102:87,103:[1,65],104:[2,149],105:[1,66],108:88,109:[1,68],110:69,117:[2,149],125:[2,149],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,153],6:[2,153],25:[2,153],26:[2,153],49:[2,153],54:[2,153],57:[2,153],72:[2,153],77:[2,153],85:[2,153],90:[2,153],92:[2,153],101:[2,153],103:[2,153],104:[2,153],105:[2,153],109:[2,153],117:[2,153],125:[2,153],127:[2,153],128:[2,153],131:[2,153],132:[2,153],133:[2,153],134:[2,153],135:[2,153],136:[2,153]},{115:[2,155],116:[2,155]},{27:158,28:[1,73],44:159,58:160,59:161,75:[1,70],88:[1,113],89:[1,114],112:231,114:157},{54:[1,232],115:[2,161],116:[2,161]},{54:[2,157],115:[2,157],116:[2,157]},{54:[2,158],115:[2,158],116:[2,158]},{54:[2,159],115:[2,159],116:[2,159]},{54:[2,160],115:[2,160],116:[2,160]},{1:[2,154],6:[2,154],25:[2,154],26:[2,154],49:[2,154],54:[2,154],57:[2,154],72:[2,154],77:[2,154],85:[2,154],90:[2,154],92:[2,154],101:[2,154],103:[2,154],104:[2,154],105:[2,154],109:[2,154],117:[2,154],125:[2,154],127:[2,154],128:[2,154],131:[2,154],132:[2,154],133:[2,154],134:[2,154],135:[2,154],136:[2,154]},{8:233,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:234,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],53:235,54:[1,236],77:[2,53]},{6:[2,91],25:[2,91],26:[2,91],54:[2,91],77:[2,91]},{6:[2,39],25:[2,39],26:[2,39],43:[1,237],54:[2,39],77:[2,39]},{6:[2,42],25:[2,42],26:[2,42],54:[2,42],77:[2,42]},{6:[2,43],25:[2,43],26:[2,43],43:[2,43],54:[2,43],77:[2,43]},{6:[2,44],25:[2,44],26:[2,44],43:[2,44],54:[2,44],77:[2,44]},{6:[2,45],25:[2,45],26:[2,45],43:[2,45],54:[2,45],77:[2,45]},{1:[2,5],6:[2,5],26:[2,5],101:[2,5]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],49:[2,25],54:[2,25],57:[2,25],72:[2,25],77:[2,25],85:[2,25],90:[2,25],92:[2,25],97:[2,25],98:[2,25],101:[2,25],103:[2,25],104:[2,25],105:[2,25],109:[2,25],117:[2,25],120:[2,25],122:[2,25],125:[2,25],127:[2,25],128:[2,25],131:[2,25],132:[2,25],133:[2,25],134:[2,25],135:[2,25],136:[2,25]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],49:[2,192],54:[2,192],57:[2,192],72:[2,192],77:[2,192],85:[2,192],90:[2,192],92:[2,192],101:[2,192],102:87,103:[2,192],104:[2,192],105:[2,192],108:88,109:[2,192],110:69,117:[2,192],125:[2,192],127:[2,192],128:[2,192],131:[1,78],132:[1,81],133:[2,192],134:[2,192],135:[2,192],136:[2,192]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],49:[2,193],54:[2,193],57:[2,193],72:[2,193],77:[2,193],85:[2,193],90:[2,193],92:[2,193],101:[2,193],102:87,103:[2,193],104:[2,193],105:[2,193],108:88,109:[2,193],110:69,117:[2,193],125:[2,193],127:[2,193],128:[2,193],131:[1,78],132:[1,81],133:[2,193],134:[2,193],135:[2,193],136:[2,193]},{1:[2,194],6:[2,194],25:[2,194],26:[2,194],49:[2,194],54:[2,194],57:[2,194],72:[2,194],77:[2,194],85:[2,194],90:[2,194],92:[2,194],101:[2,194],102:87,103:[2,194],104:[2,194],105:[2,194],108:88,109:[2,194],110:69,117:[2,194],125:[2,194],127:[2,194],128:[2,194],131:[1,78],132:[2,194],133:[2,194],134:[2,194],135:[2,194],136:[2,194]},{1:[2,195],6:[2,195],25:[2,195],26:[2,195],49:[2,195],54:[2,195],57:[2,195],72:[2,195],77:[2,195],85:[2,195],90:[2,195],92:[2,195],101:[2,195],102:87,103:[2,195],104:[2,195],105:[2,195],108:88,109:[2,195],110:69,117:[2,195],125:[2,195],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[2,195],134:[2,195],135:[2,195],136:[2,195]},{1:[2,196],6:[2,196],25:[2,196],26:[2,196],49:[2,196],54:[2,196],57:[2,196],72:[2,196],77:[2,196],85:[2,196],90:[2,196],92:[2,196],101:[2,196],102:87,103:[2,196],104:[2,196],105:[2,196],108:88,109:[2,196],110:69,117:[2,196],125:[2,196],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[2,196],135:[2,196],136:[1,85]},{1:[2,197],6:[2,197],25:[2,197],26:[2,197],49:[2,197],54:[2,197],57:[2,197],72:[2,197],77:[2,197],85:[2,197],90:[2,197],92:[2,197],101:[2,197],102:87,103:[2,197],104:[2,197],105:[2,197],108:88,109:[2,197],110:69,117:[2,197],125:[2,197],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[2,197],136:[1,85]},{1:[2,198],6:[2,198],25:[2,198],26:[2,198],49:[2,198],54:[2,198],57:[2,198],72:[2,198],77:[2,198],85:[2,198],90:[2,198],92:[2,198],101:[2,198],102:87,103:[2,198],104:[2,198],105:[2,198],108:88,109:[2,198],110:69,117:[2,198],125:[2,198],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[2,198],135:[2,198],136:[2,198]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],49:[2,183],54:[2,183],57:[2,183],72:[2,183],77:[2,183],85:[2,183],90:[2,183],92:[2,183],101:[2,183],102:87,103:[1,65],104:[2,183],105:[1,66],108:88,109:[1,68],110:69,117:[2,183],125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,182],6:[2,182],25:[2,182],26:[2,182],49:[2,182],54:[2,182],57:[2,182],72:[2,182],77:[2,182],85:[2,182],90:[2,182],92:[2,182],101:[2,182],102:87,103:[1,65],104:[2,182],105:[1,66],108:88,109:[1,68],110:69,117:[2,182],125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,103],6:[2,103],25:[2,103],26:[2,103],49:[2,103],54:[2,103],57:[2,103],66:[2,103],67:[2,103],68:[2,103],70:[2,103],72:[2,103],73:[2,103],77:[2,103],83:[2,103],84:[2,103],85:[2,103],90:[2,103],92:[2,103],101:[2,103],103:[2,103],104:[2,103],105:[2,103],109:[2,103],117:[2,103],125:[2,103],127:[2,103],128:[2,103],131:[2,103],132:[2,103],133:[2,103],134:[2,103],135:[2,103],136:[2,103]},{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],70:[2,80],72:[2,80],73:[2,80],77:[2,80],79:[2,80],83:[2,80],84:[2,80],85:[2,80],90:[2,80],92:[2,80],101:[2,80],103:[2,80],104:[2,80],105:[2,80],109:[2,80],117:[2,80],125:[2,80],127:[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]},{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],70:[2,81],72:[2,81],73:[2,81],77:[2,81],79:[2,81],83:[2,81],84:[2,81],85:[2,81],90:[2,81],92:[2,81],101:[2,81],103:[2,81],104:[2,81],105:[2,81],109:[2,81],117:[2,81],125:[2,81],127:[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]},{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],70:[2,82],72:[2,82],73:[2,82],77:[2,82],79:[2,82],83:[2,82],84:[2,82],85:[2,82],90:[2,82],92:[2,82],101:[2,82],103:[2,82],104:[2,82],105:[2,82],109:[2,82],117:[2,82],125:[2,82],127:[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]},{72:[1,238]},{57:[1,192],72:[2,87],91:239,92:[1,191],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{72:[2,88]},{8:240,9:117,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,72:[2,122],75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{12:[2,116],28:[2,116],30:[2,116],31:[2,116],33:[2,116],34:[2,116],35:[2,116],36:[2,116],37:[2,116],38:[2,116],45:[2,116],46:[2,116],47:[2,116],51:[2,116],52:[2,116],72:[2,116],75:[2,116],78:[2,116],82:[2,116],87:[2,116],88:[2,116],89:[2,116],95:[2,116],99:[2,116],100:[2,116],103:[2,116],105:[2,116],107:[2,116],109:[2,116],118:[2,116],124:[2,116],126:[2,116],127:[2,116],128:[2,116],129:[2,116],130:[2,116]},{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],72:[2,117],75:[2,117],78:[2,117],82:[2,117],87:[2,117],88:[2,117],89:[2,117],95:[2,117],99:[2,117],100:[2,117],103:[2,117],105:[2,117],107:[2,117],109:[2,117],118:[2,117],124:[2,117],126:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117]},{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],70:[2,86],72:[2,86],73:[2,86],77:[2,86],79:[2,86],83:[2,86],84:[2,86],85:[2,86],90:[2,86],92:[2,86],101:[2,86],103:[2,86],104:[2,86],105:[2,86],109:[2,86],117:[2,86],125:[2,86],127:[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]},{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],70:[2,104],72:[2,104],73:[2,104],77:[2,104],83:[2,104],84:[2,104],85:[2,104],90:[2,104],92:[2,104],101:[2,104],103:[2,104],104:[2,104],105:[2,104],109:[2,104],117:[2,104],125:[2,104],127:[2,104],128:[2,104],131:[2,104],132:[2,104],133:[2,104],134:[2,104],135:[2,104],136:[2,104]},{1:[2,36],6:[2,36],25:[2,36],26:[2,36],49:[2,36],54:[2,36],57:[2,36],72:[2,36],77:[2,36],85:[2,36],90:[2,36],92:[2,36],101:[2,36],102:87,103:[2,36],104:[2,36],105:[2,36],108:88,109:[2,36],110:69,117:[2,36],125:[2,36],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:241,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:242,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,109],6:[2,109],25:[2,109],26:[2,109],49:[2,109],54:[2,109],57:[2,109],66:[2,109],67:[2,109],68:[2,109],70:[2,109],72:[2,109],73:[2,109],77:[2,109],83:[2,109],84:[2,109],85:[2,109],90:[2,109],92:[2,109],101:[2,109],103:[2,109],104:[2,109],105:[2,109],109:[2,109],117:[2,109],125:[2,109],127:[2,109],128:[2,109],131:[2,109],132:[2,109],133:[2,109],134:[2,109],135:[2,109],136:[2,109]},{6:[2,53],25:[2,53],53:243,54:[1,226],85:[2,53]},{6:[2,128],25:[2,128],26:[2,128],54:[2,128],57:[1,244],85:[2,128],90:[2,128],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{50:245,51:[1,60],52:[1,61]},{6:[2,54],25:[2,54],26:[2,54],27:109,28:[1,73],44:110,55:246,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[1,247],25:[1,248]},{6:[2,61],25:[2,61],26:[2,61],49:[2,61],54:[2,61]},{8:249,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,199],6:[2,199],25:[2,199],26:[2,199],49:[2,199],54:[2,199],57:[2,199],72:[2,199],77:[2,199],85:[2,199],90:[2,199],92:[2,199],101:[2,199],102:87,103:[2,199],104:[2,199],105:[2,199],108:88,109:[2,199],110:69,117:[2,199],125:[2,199],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:250,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,201],6:[2,201],25:[2,201],26:[2,201],49:[2,201],54:[2,201],57:[2,201],72:[2,201],77:[2,201],85:[2,201],90:[2,201],92:[2,201],101:[2,201],102:87,103:[2,201],104:[2,201],105:[2,201],108:88,109:[2,201],110:69,117:[2,201],125:[2,201],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],49:[2,181],54:[2,181],57:[2,181],72:[2,181],77:[2,181],85:[2,181],90:[2,181],92:[2,181],101:[2,181],103:[2,181],104:[2,181],105:[2,181],109:[2,181],117:[2,181],125:[2,181],127:[2,181],128:[2,181],131:[2,181],132:[2,181],133:[2,181],134:[2,181],135:[2,181],136:[2,181]},{8:251,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],49:[2,133],54:[2,133],57:[2,133],72:[2,133],77:[2,133],85:[2,133],90:[2,133],92:[2,133],97:[1,252],101:[2,133],103:[2,133],104:[2,133],105:[2,133],109:[2,133],117:[2,133],125:[2,133],127:[2,133],128:[2,133],131:[2,133],132:[2,133],133:[2,133],134:[2,133],135:[2,133],136:[2,133]},{5:253,25:[1,5]},{27:254,28:[1,73]},{119:255,121:216,122:[1,217]},{26:[1,256],120:[1,257],121:258,122:[1,217]},{26:[2,174],120:[2,174],122:[2,174]},{8:260,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],94:259,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,97],5:261,6:[2,97],25:[1,5],26:[2,97],49:[2,97],54:[2,97],57:[2,97],72:[2,97],77:[2,97],85:[2,97],90:[2,97],92:[2,97],101:[2,97],102:87,103:[1,65],104:[2,97],105:[1,66],108:88,109:[1,68],110:69,117:[2,97],125:[2,97],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,100],6:[2,100],25:[2,100],26:[2,100],49:[2,100],54:[2,100],57:[2,100],72:[2,100],77:[2,100],85:[2,100],90:[2,100],92:[2,100],101:[2,100],103:[2,100],104:[2,100],105:[2,100],109:[2,100],117:[2,100],125:[2,100],127:[2,100],128:[2,100],131:[2,100],132:[2,100],133:[2,100],134:[2,100],135:[2,100],136:[2,100]},{8:262,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],49:[2,138],54:[2,138],57:[2,138],66:[2,138],67:[2,138],68:[2,138],70:[2,138],72:[2,138],73:[2,138],77:[2,138],83:[2,138],84:[2,138],85:[2,138],90:[2,138],92:[2,138],101:[2,138],103:[2,138],104:[2,138],105:[2,138],109:[2,138],117:[2,138],125:[2,138],127:[2,138],128:[2,138],131:[2,138],132:[2,138],133:[2,138],134:[2,138],135:[2,138],136:[2,138]},{6:[1,74],26:[1,263]},{8:264,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,67],12:[2,117],25:[2,67],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],54:[2,67],75:[2,117],78:[2,117],82:[2,117],87:[2,117],88:[2,117],89:[2,117],90:[2,67],95:[2,117],99:[2,117],100:[2,117],103:[2,117],105:[2,117],107:[2,117],109:[2,117],118:[2,117],124:[2,117],126:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117]},{6:[1,266],25:[1,267],90:[1,265]},{6:[2,54],8:200,9:117,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:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],85:[2,54],87:[1,58],88:[1,59],89:[1,57],90:[2,54],93:268,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],26:[2,53],53:269,54:[1,226]},{1:[2,178],6:[2,178],25:[2,178],26:[2,178],49:[2,178],54:[2,178],57:[2,178],72:[2,178],77:[2,178],85:[2,178],90:[2,178],92:[2,178],101:[2,178],103:[2,178],104:[2,178],105:[2,178],109:[2,178],117:[2,178],120:[2,178],125:[2,178],127:[2,178],128:[2,178],131:[2,178],132:[2,178],133:[2,178],134:[2,178],135:[2,178],136:[2,178]},{8:270,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:271,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{115:[2,156],116:[2,156]},{27:158,28:[1,73],44:159,58:160,59:161,75:[1,70],88:[1,113],89:[1,114],114:272},{1:[2,163],6:[2,163],25:[2,163],26:[2,163],49:[2,163],54:[2,163],57:[2,163],72:[2,163],77:[2,163],85:[2,163],90:[2,163],92:[2,163],101:[2,163],102:87,103:[2,163],104:[1,273],105:[2,163],108:88,109:[2,163],110:69,117:[1,274],125:[2,163],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,164],6:[2,164],25:[2,164],26:[2,164],49:[2,164],54:[2,164],57:[2,164],72:[2,164],77:[2,164],85:[2,164],90:[2,164],92:[2,164],101:[2,164],102:87,103:[2,164],104:[1,275],105:[2,164],108:88,109:[2,164],110:69,117:[2,164],125:[2,164],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,277],25:[1,278],77:[1,276]},{6:[2,54],11:168,25:[2,54],26:[2,54],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:279,42:167,44:171,46:[1,46],77:[2,54],88:[1,113]},{8:280,9:117,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,281],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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{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],70:[2,85],72:[2,85],73:[2,85],77:[2,85],79:[2,85],83:[2,85],84:[2,85],85:[2,85],90:[2,85],92:[2,85],101:[2,85],103:[2,85],104:[2,85],105:[2,85],109:[2,85],117:[2,85],125:[2,85],127:[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]},{8:282,9:117,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,72:[2,120],75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{72:[2,121],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,37],6:[2,37],25:[2,37],26:[2,37],49:[2,37],54:[2,37],57:[2,37],72:[2,37],77:[2,37],85:[2,37],90:[2,37],92:[2,37],101:[2,37],102:87,103:[2,37],104:[2,37],105:[2,37],108:88,109:[2,37],110:69,117:[2,37],125:[2,37],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{26:[1,283],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,266],25:[1,267],85:[1,284]},{6:[2,67],25:[2,67],26:[2,67],54:[2,67],85:[2,67],90:[2,67]},{5:285,25:[1,5]},{6:[2,57],25:[2,57],26:[2,57],49:[2,57],54:[2,57]},{27:109,28:[1,73],44:110,55:286,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[2,55],25:[2,55],26:[2,55],27:109,28:[1,73],44:110,48:287,54:[2,55],55:107,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[2,62],25:[2,62],26:[2,62],49:[2,62],54:[2,62],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{26:[1,288],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{5:289,25:[1,5],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{5:290,25:[1,5]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],49:[2,134],54:[2,134],57:[2,134],72:[2,134],77:[2,134],85:[2,134],90:[2,134],92:[2,134],101:[2,134],103:[2,134],104:[2,134],105:[2,134],109:[2,134],117:[2,134],125:[2,134],127:[2,134],128:[2,134],131:[2,134],132:[2,134],133:[2,134],134:[2,134],135:[2,134],136:[2,134]},{5:291,25:[1,5]},{26:[1,292],120:[1,293],121:258,122:[1,217]},{1:[2,172],6:[2,172],25:[2,172],26:[2,172],49:[2,172],54:[2,172],57:[2,172],72:[2,172],77:[2,172],85:[2,172],90:[2,172],92:[2,172],101:[2,172],103:[2,172],104:[2,172],105:[2,172],109:[2,172],117:[2,172],125:[2,172],127:[2,172],128:[2,172],131:[2,172],132:[2,172],133:[2,172],134:[2,172],135:[2,172],136:[2,172]},{5:294,25:[1,5]},{26:[2,175],120:[2,175],122:[2,175]},{5:295,25:[1,5],54:[1,296]},{25:[2,130],54:[2,130],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,98],6:[2,98],25:[2,98],26:[2,98],49:[2,98],54:[2,98],57:[2,98],72:[2,98],77:[2,98],85:[2,98],90:[2,98],92:[2,98],101:[2,98],103:[2,98],104:[2,98],105:[2,98],109:[2,98],117:[2,98],125:[2,98],127:[2,98],128:[2,98],131:[2,98],132:[2,98],133:[2,98],134:[2,98],135:[2,98],136:[2,98]},{1:[2,101],5:297,6:[2,101],25:[1,5],26:[2,101],49:[2,101],54:[2,101],57:[2,101],72:[2,101],77:[2,101],85:[2,101],90:[2,101],92:[2,101],101:[2,101],102:87,103:[1,65],104:[2,101],105:[1,66],108:88,109:[1,68],110:69,117:[2,101],125:[2,101],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{101:[1,298]},{90:[1,299],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[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],70:[2,115],72:[2,115],73:[2,115],77:[2,115],83:[2,115],84:[2,115],85:[2,115],90:[2,115],92:[2,115],101:[2,115],103:[2,115],104:[2,115],105:[2,115],109:[2,115],115:[2,115],116:[2,115],117:[2,115],125:[2,115],127:[2,115],128:[2,115],131:[2,115],132:[2,115],133:[2,115],134:[2,115],135:[2,115],136:[2,115]},{8:200,9:117,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:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],93:300,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:200,9:117,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,146],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:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:301,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,124],25:[2,124],26:[2,124],54:[2,124],85:[2,124],90:[2,124]},{6:[1,266],25:[1,267],26:[1,302]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],49:[2,141],54:[2,141],57:[2,141],72:[2,141],77:[2,141],85:[2,141],90:[2,141],92:[2,141],101:[2,141],102:87,103:[1,65],104:[2,141],105:[1,66],108:88,109:[1,68],110:69,117:[2,141],125:[2,141],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],49:[2,143],54:[2,143],57:[2,143],72:[2,143],77:[2,143],85:[2,143],90:[2,143],92:[2,143],101:[2,143],102:87,103:[1,65],104:[2,143],105:[1,66],108:88,109:[1,68],110:69,117:[2,143],125:[2,143],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{115:[2,162],116:[2,162]},{8:303,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:304,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:305,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,89],6:[2,89],25:[2,89],26:[2,89],40:[2,89],49:[2,89],54:[2,89],57:[2,89],66:[2,89],67:[2,89],68:[2,89],70:[2,89],72:[2,89],73:[2,89],77:[2,89],83:[2,89],84:[2,89],85:[2,89],90:[2,89],92:[2,89],101:[2,89],103:[2,89],104:[2,89],105:[2,89],109:[2,89],115:[2,89],116:[2,89],117:[2,89],125:[2,89],127:[2,89],128:[2,89],131:[2,89],132:[2,89],133:[2,89],134:[2,89],135:[2,89],136:[2,89]},{11:168,27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:306,42:167,44:171,46:[1,46],88:[1,113]},{6:[2,90],11:168,25:[2,90],26:[2,90],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:166,42:167,44:171,46:[1,46],54:[2,90],76:307,88:[1,113]},{6:[2,92],25:[2,92],26:[2,92],54:[2,92],77:[2,92]},{6:[2,40],25:[2,40],26:[2,40],54:[2,40],77:[2,40],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:308,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{72:[2,119],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,38],6:[2,38],25:[2,38],26:[2,38],49:[2,38],54:[2,38],57:[2,38],72:[2,38],77:[2,38],85:[2,38],90:[2,38],92:[2,38],101:[2,38],103:[2,38],104:[2,38],105:[2,38],109:[2,38],117:[2,38],125:[2,38],127:[2,38],128:[2,38],131:[2,38],132:[2,38],133:[2,38],134:[2,38],135:[2,38],136:[2,38]},{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],70:[2,110],72:[2,110],73:[2,110],77:[2,110],83:[2,110],84:[2,110],85:[2,110],90:[2,110],92:[2,110],101:[2,110],103:[2,110],104:[2,110],105:[2,110],109:[2,110],117:[2,110],125:[2,110],127:[2,110],128:[2,110],131:[2,110],132:[2,110],133:[2,110],134:[2,110],135:[2,110],136:[2,110]},{1:[2,49],6:[2,49],25:[2,49],26:[2,49],49:[2,49],54:[2,49],57:[2,49],72:[2,49],77:[2,49],85:[2,49],90:[2,49],92:[2,49],101:[2,49],103:[2,49],104:[2,49],105:[2,49],109:[2,49],117:[2,49],125:[2,49],127:[2,49],128:[2,49],131:[2,49],132:[2,49],133:[2,49],134:[2,49],135:[2,49],136:[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:309,54:[1,202]},{1:[2,200],6:[2,200],25:[2,200],26:[2,200],49:[2,200],54:[2,200],57:[2,200],72:[2,200],77:[2,200],85:[2,200],90:[2,200],92:[2,200],101:[2,200],103:[2,200],104:[2,200],105:[2,200],109:[2,200],117:[2,200],125:[2,200],127:[2,200],128:[2,200],131:[2,200],132:[2,200],133:[2,200],134:[2,200],135:[2,200],136:[2,200]},{1:[2,179],6:[2,179],25:[2,179],26:[2,179],49:[2,179],54:[2,179],57:[2,179],72:[2,179],77:[2,179],85:[2,179],90:[2,179],92:[2,179],101:[2,179],103:[2,179],104:[2,179],105:[2,179],109:[2,179],117:[2,179],120:[2,179],125:[2,179],127:[2,179],128:[2,179],131:[2,179],132:[2,179],133:[2,179],134:[2,179],135:[2,179],136:[2,179]},{1:[2,135],6:[2,135],25:[2,135],26:[2,135],49:[2,135],54:[2,135],57:[2,135],72:[2,135],77:[2,135],85:[2,135],90:[2,135],92:[2,135],101:[2,135],103:[2,135],104:[2,135],105:[2,135],109:[2,135],117:[2,135],125:[2,135],127:[2,135],128:[2,135],131:[2,135],132:[2,135],133:[2,135],134:[2,135],135:[2,135],136:[2,135]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],49:[2,136],54:[2,136],57:[2,136],72:[2,136],77:[2,136],85:[2,136],90:[2,136],92:[2,136],97:[2,136],101:[2,136],103:[2,136],104:[2,136],105:[2,136],109:[2,136],117:[2,136],125:[2,136],127:[2,136],128:[2,136],131:[2,136],132:[2,136],133:[2,136],134:[2,136],135:[2,136],136:[2,136]},{1:[2,170],6:[2,170],25:[2,170],26:[2,170],49:[2,170],54:[2,170],57:[2,170],72:[2,170],77:[2,170],85:[2,170],90:[2,170],92:[2,170],101:[2,170],103:[2,170],104:[2,170],105:[2,170],109:[2,170],117:[2,170],125:[2,170],127:[2,170],128:[2,170],131:[2,170],132:[2,170],133:[2,170],134:[2,170],135:[2,170],136:[2,170]},{5:310,25:[1,5]},{26:[1,311]},{6:[1,312],26:[2,176],120:[2,176],122:[2,176]},{8:313,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,102],6:[2,102],25:[2,102],26:[2,102],49:[2,102],54:[2,102],57:[2,102],72:[2,102],77:[2,102],85:[2,102],90:[2,102],92:[2,102],101:[2,102],103:[2,102],104:[2,102],105:[2,102],109:[2,102],117:[2,102],125:[2,102],127:[2,102],128:[2,102],131:[2,102],132:[2,102],133:[2,102],134:[2,102],135:[2,102],136:[2,102]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],49:[2,139],54:[2,139],57:[2,139],66:[2,139],67:[2,139],68:[2,139],70:[2,139],72:[2,139],73:[2,139],77:[2,139],83:[2,139],84:[2,139],85:[2,139],90:[2,139],92:[2,139],101:[2,139],103:[2,139],104:[2,139],105:[2,139],109:[2,139],117:[2,139],125:[2,139],127:[2,139],128:[2,139],131:[2,139],132:[2,139],133:[2,139],134:[2,139],135:[2,139],136:[2,139]},{1:[2,118],6:[2,118],25:[2,118],26:[2,118],49:[2,118],54:[2,118],57:[2,118],66:[2,118],67:[2,118],68:[2,118],70:[2,118],72:[2,118],73:[2,118],77:[2,118],83:[2,118],84:[2,118],85:[2,118],90:[2,118],92:[2,118],101:[2,118],103:[2,118],104:[2,118],105:[2,118],109:[2,118],117:[2,118],125:[2,118],127:[2,118],128:[2,118],131:[2,118],132:[2,118],133:[2,118],134:[2,118],135:[2,118],136:[2,118]},{6:[2,125],25:[2,125],26:[2,125],54:[2,125],85:[2,125],90:[2,125]},{6:[2,53],25:[2,53],26:[2,53],53:314,54:[1,226]},{6:[2,126],25:[2,126],26:[2,126],54:[2,126],85:[2,126],90:[2,126]},{1:[2,165],6:[2,165],25:[2,165],26:[2,165],49:[2,165],54:[2,165],57:[2,165],72:[2,165],77:[2,165],85:[2,165],90:[2,165],92:[2,165],101:[2,165],102:87,103:[2,165],104:[2,165],105:[2,165],108:88,109:[2,165],110:69,117:[1,315],125:[2,165],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,167],6:[2,167],25:[2,167],26:[2,167],49:[2,167],54:[2,167],57:[2,167],72:[2,167],77:[2,167],85:[2,167],90:[2,167],92:[2,167],101:[2,167],102:87,103:[2,167],104:[1,316],105:[2,167],108:88,109:[2,167],110:69,117:[2,167],125:[2,167],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],49:[2,166],54:[2,166],57:[2,166],72:[2,166],77:[2,166],85:[2,166],90:[2,166],92:[2,166],101:[2,166],102:87,103:[2,166],104:[2,166],105:[2,166],108:88,109:[2,166],110:69,117:[2,166],125:[2,166],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[2,93],25:[2,93],26:[2,93],54:[2,93],77:[2,93]},{6:[2,53],25:[2,53],26:[2,53],53:317,54:[1,236]},{26:[1,318],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,247],25:[1,248],26:[1,319]},{26:[1,320]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],49:[2,173],54:[2,173],57:[2,173],72:[2,173],77:[2,173],85:[2,173],90:[2,173],92:[2,173],101:[2,173],103:[2,173],104:[2,173],105:[2,173],109:[2,173],117:[2,173],125:[2,173],127:[2,173],128:[2,173],131:[2,173],132:[2,173],133:[2,173],134:[2,173],135:[2,173],136:[2,173]},{26:[2,177],120:[2,177],122:[2,177]},{25:[2,131],54:[2,131],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,266],25:[1,267],26:[1,321]},{8:322,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:323,9:117,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,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[1,277],25:[1,278],26:[1,324]},{6:[2,41],25:[2,41],26:[2,41],54:[2,41],77:[2,41]},{6:[2,59],25:[2,59],26:[2,59],49:[2,59],54:[2,59]},{1:[2,171],6:[2,171],25:[2,171],26:[2,171],49:[2,171],54:[2,171],57:[2,171],72:[2,171],77:[2,171],85:[2,171],90:[2,171],92:[2,171],101:[2,171],103:[2,171],104:[2,171],105:[2,171],109:[2,171],117:[2,171],125:[2,171],127:[2,171],128:[2,171],131:[2,171],132:[2,171],133:[2,171],134:[2,171],135:[2,171],136:[2,171]},{6:[2,127],25:[2,127],26:[2,127],54:[2,127],85:[2,127],90:[2,127]},{1:[2,168],6:[2,168],25:[2,168],26:[2,168],49:[2,168],54:[2,168],57:[2,168],72:[2,168],77:[2,168],85:[2,168],90:[2,168],92:[2,168],101:[2,168],102:87,103:[2,168],104:[2,168],105:[2,168],108:88,109:[2,168],110:69,117:[2,168],125:[2,168],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,169],6:[2,169],25:[2,169],26:[2,169],49:[2,169],54:[2,169],57:[2,169],72:[2,169],77:[2,169],85:[2,169],90:[2,169],92:[2,169],101:[2,169],102:87,103:[2,169],104:[2,169],105:[2,169],108:88,109:[2,169],110:69,117:[2,169],125:[2,169],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[2,94],25:[2,94],26:[2,94],54:[2,94],77:[2,94]}],
+defaultActions: {60:[2,51],61:[2,52],75:[2,3],94:[2,108],189:[2,88]},
 parseError: function parseError(str, hash) {
     throw new Error(str);
 },
@@ -509,7 +516,7 @@
             token = self.symbols_[token] || token;
         }
         return token;
-    };
+    }
 
     var symbol, preErrorSymbol, state, action, a, r, yyval={},p,len,newState, expected;
     while (true) {
@@ -527,6 +534,7 @@
         }
 
         // handle parse error
+        _handle_error:
         if (typeof action === 'undefined' || !action.length || !action[0]) {
 
             if (!recovering) {
@@ -537,7 +545,7 @@
                 }
                 var errStr = '';
                 if (this.lexer.showPosition) {
-                    errStr = 'Parse error on line '+(yylineno+1)+":\n"+this.lexer.showPosition()+'\nExpecting '+expected.join(', ');
+                    errStr = 'Parse error on line '+(yylineno+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+expected.join(', ') + ", got '" + this.terminals_[symbol]+ "'";
                 } else {
                     errStr = 'Parse error on line '+(yylineno+1)+": Unexpected " +
                                   (symbol == 1 /*EOF*/ ? "end of input" :
@@ -652,6 +660,7 @@
 
     return true;
 }};
+undefined
 return parser;
 })();
 if (typeof require !== 'undefined' && typeof exports !== 'undefined') {
diff --git a/weinre.server/node_modules/coffee-script/lib/coffee-script/repl.js b/weinre.server/node_modules/coffee-script/lib/coffee-script/repl.js
index 3368d7c..b4a4765 100644
--- a/weinre.server/node_modules/coffee-script/lib/coffee-script/repl.js
+++ b/weinre.server/node_modules/coffee-script/lib/coffee-script/repl.js
@@ -1,5 +1,10 @@
+// Generated by CoffeeScript 1.3.3
 (function() {
-  var ACCESSOR, CoffeeScript, Module, REPL_PROMPT, REPL_PROMPT_CONTINUATION, SIMPLEVAR, Script, autocomplete, backlog, completeAttribute, completeVariable, enableColours, error, getCompletions, inspect, readline, repl, run, stdin, stdout;
+  var ACCESSOR, CoffeeScript, Module, REPL_PROMPT, REPL_PROMPT_CONTINUATION, REPL_PROMPT_MULTILINE, SIMPLEVAR, Script, autocomplete, backlog, completeAttribute, completeVariable, enableColours, error, getCompletions, inspect, multilineMode, pipedInput, readline, repl, run, stdin, stdout;
+
+  stdin = process.openStdin();
+
+  stdout = process.stdout;
 
   CoffeeScript = require('./coffee-script');
 
@@ -13,6 +18,8 @@
 
   REPL_PROMPT = 'coffee> ';
 
+  REPL_PROMPT_MULTILINE = '------> ';
+
   REPL_PROMPT_CONTINUATION = '......> ';
 
   enableColours = false;
@@ -21,18 +28,91 @@
     enableColours = !process.env.NODE_DISABLE_COLORS;
   }
 
-  stdin = process.openStdin();
-
-  stdout = process.stdout;
-
   error = function(err) {
     return stdout.write((err.stack || err.toString()) + '\n');
   };
 
+  ACCESSOR = /\s*([\w\.]+)(?:\.(\w*))$/;
+
+  SIMPLEVAR = /(\w+)$/i;
+
+  autocomplete = function(text) {
+    return completeAttribute(text) || completeVariable(text) || [[], text];
+  };
+
+  completeAttribute = function(text) {
+    var all, completions, key, match, obj, possibilities, prefix, val;
+    if (match = text.match(ACCESSOR)) {
+      all = match[0], obj = match[1], prefix = match[2];
+      try {
+        val = Script.runInThisContext(obj);
+      } catch (error) {
+        return;
+      }
+      val = Object(val);
+      possibilities = Object.getOwnPropertyNames(val);
+      for (key in val) {
+        if (~possibilities.indexOf(val)) {
+          possibilities.push(key);
+        }
+      }
+      completions = getCompletions(prefix, possibilities);
+      return [completions, prefix];
+    }
+  };
+
+  completeVariable = function(text) {
+    var completions, free, keywords, possibilities, r, vars, _ref;
+    free = (_ref = text.match(SIMPLEVAR)) != null ? _ref[1] : void 0;
+    if (text === "") {
+      free = "";
+    }
+    if (free != null) {
+      vars = Script.runInThisContext('Object.getOwnPropertyNames(Object(this))');
+      keywords = (function() {
+        var _i, _len, _ref1, _results;
+        _ref1 = CoffeeScript.RESERVED;
+        _results = [];
+        for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
+          r = _ref1[_i];
+          if (r.slice(0, 2) !== '__') {
+            _results.push(r);
+          }
+        }
+        return _results;
+      })();
+      possibilities = vars.concat(keywords);
+      completions = getCompletions(free, possibilities);
+      return [completions, free];
+    }
+  };
+
+  getCompletions = function(prefix, candidates) {
+    var el, _i, _len, _results;
+    _results = [];
+    for (_i = 0, _len = candidates.length; _i < _len; _i++) {
+      el = candidates[_i];
+      if (el.indexOf(prefix) === 0) {
+        _results.push(el);
+      }
+    }
+    return _results;
+  };
+
+  process.on('uncaughtException', error);
+
   backlog = '';
 
   run = function(buffer) {
     var code, returnValue, _;
+    buffer = buffer.replace(/(^|[\r\n]+)(\s*)##?(?:[^#\r\n][^\r\n]*|)($|[\r\n])/, "$1$2$3");
+    buffer = buffer.replace(/[\r\n]+$/, "");
+    if (multilineMode) {
+      backlog += "" + buffer + "\n";
+      repl.setPrompt(REPL_PROMPT_CONTINUATION);
+      repl.prompt();
+      return;
+    }
     if (!buffer.toString().trim() && !backlog) {
       repl.prompt();
       return;
@@ -48,86 +128,118 @@
     backlog = '';
     try {
       _ = global._;
-      returnValue = CoffeeScript.eval("_=(" + code + "\n)", {
+      returnValue = CoffeeScript["eval"]("_=(" + code + "\n)", {
         filename: 'repl',
         modulename: 'repl'
       });
-      if (returnValue === void 0) global._ = _;
-      process.stdout.write(inspect(returnValue, false, 2, enableColours) + '\n');
+      if (returnValue === void 0) {
+        global._ = _;
+      }
+      repl.output.write("" + (inspect(returnValue, false, 2, enableColours)) + "\n");
     } catch (err) {
       error(err);
     }
     return repl.prompt();
   };
 
-  ACCESSOR = /\s*([\w\.]+)(?:\.(\w*))$/;
-
-  SIMPLEVAR = /\s*(\w*)$/i;
-
-  autocomplete = function(text) {
-    return completeAttribute(text) || completeVariable(text) || [[], text];
-  };
-
-  completeAttribute = function(text) {
-    var all, completions, match, obj, prefix, val;
-    if (match = text.match(ACCESSOR)) {
-      all = match[0], obj = match[1], prefix = match[2];
-      try {
-        val = Script.runInThisContext(obj);
-      } catch (error) {
+  if (stdin.readable) {
+    pipedInput = '';
+    repl = {
+      prompt: function() {
+        return stdout.write(this._prompt);
+      },
+      setPrompt: function(p) {
+        return this._prompt = p;
+      },
+      input: stdin,
+      output: stdout,
+      on: function() {}
+    };
+    stdin.on('data', function(chunk) {
+      var line, lines, _i, _len, _ref;
+      pipedInput += chunk;
+      if (!/\n/.test(pipedInput)) {
         return;
       }
-      completions = getCompletions(prefix, Object.getOwnPropertyNames(val));
-      return [completions, prefix];
-    }
-  };
-
-  completeVariable = function(text) {
-    var completions, free, keywords, possibilities, r, vars, _ref;
-    free = (_ref = text.match(SIMPLEVAR)) != null ? _ref[1] : void 0;
-    if (free != null) {
-      vars = Script.runInThisContext('Object.getOwnPropertyNames(this)');
-      keywords = (function() {
-        var _i, _len, _ref2, _results;
-        _ref2 = CoffeeScript.RESERVED;
-        _results = [];
-        for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-          r = _ref2[_i];
-          if (r.slice(0, 2) !== '__') _results.push(r);
+      lines = pipedInput.split("\n");
+      pipedInput = lines[lines.length - 1];
+      _ref = lines.slice(0, -1);
+      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+        line = _ref[_i];
+        if (!(line)) {
+          continue;
         }
-        return _results;
-      })();
-      possibilities = vars.concat(keywords);
-      completions = getCompletions(free, possibilities);
-      return [completions, free];
-    }
-  };
-
-  getCompletions = function(prefix, candidates) {
-    var el, _i, _len, _results;
-    _results = [];
-    for (_i = 0, _len = candidates.length; _i < _len; _i++) {
-      el = candidates[_i];
-      if (el.indexOf(prefix) === 0) _results.push(el);
-    }
-    return _results;
-  };
-
-  process.on('uncaughtException', error);
-
-  if (readline.createInterface.length < 3) {
-    repl = readline.createInterface(stdin, autocomplete);
-    stdin.on('data', function(buffer) {
-      return repl.write(buffer);
+        stdout.write("" + line + "\n");
+        run(line);
+      }
+    });
+    stdin.on('end', function() {
+      var line, _i, _len, _ref;
+      _ref = pipedInput.trim().split("\n");
+      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+        line = _ref[_i];
+        if (!(line)) {
+          continue;
+        }
+        stdout.write("" + line + "\n");
+        run(line);
+      }
+      stdout.write('\n');
+      return process.exit(0);
     });
   } else {
-    repl = readline.createInterface(stdin, stdout, autocomplete);
+    if (readline.createInterface.length < 3) {
+      repl = readline.createInterface(stdin, autocomplete);
+      stdin.on('data', function(buffer) {
+        return repl.write(buffer);
+      });
+    } else {
+      repl = readline.createInterface(stdin, stdout, autocomplete);
+    }
   }
 
+  multilineMode = false;
+
+  repl.input.on('keypress', function(char, key) {
+    var cursorPos, newPrompt;
+    if (!(key && key.ctrl && !key.meta && !key.shift && key.name === 'v')) {
+      return;
+    }
+    cursorPos = repl.cursor;
+    repl.output.cursorTo(0);
+    repl.output.clearLine(1);
+    multilineMode = !multilineMode;
+    if (!multilineMode && backlog) {
+      repl._line();
+    }
+    backlog = '';
+    repl.setPrompt((newPrompt = multilineMode ? REPL_PROMPT_MULTILINE : REPL_PROMPT));
+    repl.prompt();
+    return repl.output.cursorTo(newPrompt.length + (repl.cursor = cursorPos));
+  });
+
+  repl.input.on('keypress', function(char, key) {
+    if (!(multilineMode && repl.line)) {
+      return;
+    }
+    if (!(key && key.ctrl && !key.meta && !key.shift && key.name === 'd')) {
+      return;
+    }
+    multilineMode = false;
+    return repl._line();
+  });
+
   repl.on('attemptClose', function() {
+    if (multilineMode) {
+      multilineMode = false;
+      repl.output.cursorTo(0);
+      repl.output.clearLine(1);
+      repl._onLine(repl.line);
+      return;
+    }
     if (backlog) {
       backlog = '';
-      process.stdout.write('\n');
+      repl.output.write('\n');
       repl.setPrompt(REPL_PROMPT);
       return repl.prompt();
     } else {
@@ -136,8 +248,8 @@
   });
 
   repl.on('close', function() {
-    process.stdout.write('\n');
-    return stdin.destroy();
+    repl.output.write('\n');
+    return repl.input.destroy();
   });
 
   repl.on('line', run);
diff --git a/weinre.server/node_modules/coffee-script/lib/coffee-script/rewriter.js b/weinre.server/node_modules/coffee-script/lib/coffee-script/rewriter.js
index b4fdc07..d26133c 100644
--- a/weinre.server/node_modules/coffee-script/lib/coffee-script/rewriter.js
+++ b/weinre.server/node_modules/coffee-script/lib/coffee-script/rewriter.js
@@ -1,7 +1,8 @@
+// Generated by CoffeeScript 1.3.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, left, rite, _i, _len, _ref,
-    __indexOf = Array.prototype.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 = Array.prototype.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; },
+    __slice = [].slice;
 
   exports.Rewriter = (function() {
 
@@ -31,17 +32,19 @@
     };
 
     Rewriter.prototype.detectEnd = function(i, condition, action) {
-      var levels, token, tokens, _ref, _ref2;
+      var levels, token, tokens, _ref, _ref1;
       tokens = this.tokens;
       levels = 0;
       while (token = tokens[i]) {
         if (levels === 0 && condition.call(this, token, i)) {
           return action.call(this, token, i);
         }
-        if (!token || levels < 0) return action.call(this, token, i - 1);
+        if (!token || levels < 0) {
+          return action.call(this, token, i - 1);
+        }
         if (_ref = token[0], __indexOf.call(EXPRESSION_START, _ref) >= 0) {
           levels += 1;
-        } else if (_ref2 = token[0], __indexOf.call(EXPRESSION_END, _ref2) >= 0) {
+        } else if (_ref1 = token[0], __indexOf.call(EXPRESSION_END, _ref1) >= 0) {
           levels -= 1;
         }
         i += 1;
@@ -50,13 +53,17 @@
     };
 
     Rewriter.prototype.removeLeadingNewlines = function() {
-      var i, tag, _len, _ref;
+      var i, tag, _i, _len, _ref;
       _ref = this.tokens;
-      for (i = 0, _len = _ref.length; i < _len; i++) {
+      for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
         tag = _ref[i][0];
-        if (tag !== 'TERMINATOR') break;
+        if (tag !== 'TERMINATOR') {
+          break;
+        }
       }
-      if (i) return this.tokens.splice(0, i);
+      if (i) {
+        return this.tokens.splice(0, i);
+      }
     };
 
     Rewriter.prototype.removeMidExpressionNewlines = function() {
@@ -80,7 +87,9 @@
         return this.tokens[token[0] === 'OUTDENT' ? i - 1 : i][0] = 'CALL_END';
       };
       return this.scanTokens(function(token, i) {
-        if (token[0] === 'CALL_START') this.detectEnd(i + 1, condition, action);
+        if (token[0] === 'CALL_START') {
+          this.detectEnd(i + 1, condition, action);
+        }
         return 1;
       });
     };
@@ -95,34 +104,40 @@
         return token[0] = 'INDEX_END';
       };
       return this.scanTokens(function(token, i) {
-        if (token[0] === 'INDEX_START') this.detectEnd(i + 1, condition, action);
+        if (token[0] === 'INDEX_START') {
+          this.detectEnd(i + 1, condition, action);
+        }
         return 1;
       });
     };
 
     Rewriter.prototype.addImplicitBraces = function() {
-      var action, condition, sameLine, stack, start, startIndent, startsLine;
+      var action, condition, sameLine, stack, start, startIndent, startIndex, startsLine;
       stack = [];
       start = null;
       startsLine = null;
       sameLine = true;
       startIndent = 0;
+      startIndex = 0;
       condition = function(token, i) {
-        var one, tag, three, two, _ref, _ref2;
+        var one, tag, three, two, _ref, _ref1;
         _ref = this.tokens.slice(i + 1, (i + 3) + 1 || 9e9), one = _ref[0], two = _ref[1], three = _ref[2];
-        if ('HERECOMMENT' === (one != null ? one[0] : void 0)) return false;
+        if ('HERECOMMENT' === (one != null ? one[0] : void 0)) {
+          return false;
+        }
         tag = token[0];
-        if (__indexOf.call(LINEBREAKS, tag) >= 0) sameLine = false;
-        return (((tag === 'TERMINATOR' || tag === 'OUTDENT') || (__indexOf.call(IMPLICIT_END, tag) >= 0 && sameLine)) && ((!startsLine && this.tag(i - 1) !== ',') || !((two != null ? two[0] : void 0) === ':' || (one != null ? one[0] : void 0) === '@' && (three != null ? three[0] : void 0) === ':'))) || (tag === ',' && one && ((_ref2 = one[0]) !== 'IDENTIFIER' && _ref2 !== 'NUMBER' && _ref2 !== 'STRING' && _ref2 !== '@' && _ref2 !== 'TERMINATOR' && _ref2 !== 'OUTDENT'));
+        if (__indexOf.call(LINEBREAKS, tag) >= 0) {
+          sameLine = false;
+        }
+        return (((tag === 'TERMINATOR' || tag === 'OUTDENT') || (__indexOf.call(IMPLICIT_END, tag) >= 0 && sameLine && !(i - startIndex === 1))) && ((!startsLine && this.tag(i - 1) !== ',') || !((two != null ? two[0] : void 0) === ':' || (one != null ? one[0] : void 0) === '@' && (three != null ? three[0] : void 0) === ':'))) || (tag === ',' && one && ((_ref1 = one[0]) !== 'IDENTIFIER' && _ref1 !== 'NUMBER' && _ref1 !== 'STRING' && _ref1 !== '@' && _ref1 !== 'TERMINATOR' && _ref1 !== 'OUTDENT'));
       };
       action = function(token, i) {
         var tok;
-        tok = ['}', '}', token[2]];
-        tok.generated = true;
+        tok = this.generate('}', '}', token[2]);
         return this.tokens.splice(i, 0, tok);
       };
       return this.scanTokens(function(token, i, tokens) {
-        var ago, idx, prevTag, tag, tok, value, _ref, _ref2;
+        var ago, idx, prevTag, tag, tok, value, _ref, _ref1;
         if (_ref = (tag = token[0]), __indexOf.call(EXPRESSION_START, _ref) >= 0) {
           stack.push([(tag === 'INDENT' && this.tag(i - 1) === '{' ? '{' : tag), i]);
           return 1;
@@ -131,10 +146,11 @@
           start = stack.pop();
           return 1;
         }
-        if (!(tag === ':' && ((ago = this.tag(i - 2)) === ':' || ((_ref2 = stack[stack.length - 1]) != null ? _ref2[0] : void 0) !== '{'))) {
+        if (!(tag === ':' && ((ago = this.tag(i - 2)) === ':' || ((_ref1 = stack[stack.length - 1]) != null ? _ref1[0] : void 0) !== '{'))) {
           return 1;
         }
         sameLine = true;
+        startIndex = i + 1;
         stack.push(['{']);
         idx = ago === '@' ? i - 2 : i - 1;
         while (this.tag(idx - 2) === 'HERECOMMENT') {
@@ -144,8 +160,7 @@
         startsLine = !prevTag || (__indexOf.call(LINEBREAKS, prevTag) >= 0);
         value = new String('{');
         value.generated = true;
-        tok = ['{', value, token[2]];
-        tok.generated = true;
+        tok = this.generate('{', value, token[2]);
         tokens.splice(idx, 0, tok);
         this.detectEnd(i + 2, condition, action);
         return 2;
@@ -156,9 +171,11 @@
       var action, condition, noCall, seenControl, seenSingle;
       noCall = seenSingle = seenControl = false;
       condition = function(token, i) {
-        var post, tag, _ref, _ref2;
+        var post, tag, _ref, _ref1;
         tag = token[0];
-        if (!seenSingle && token.fromThen) return true;
+        if (!seenSingle && token.fromThen) {
+          return true;
+        }
         if (tag === 'IF' || tag === 'ELSE' || tag === 'CATCH' || tag === '->' || tag === '=>' || tag === 'CLASS') {
           seenSingle = true;
         }
@@ -168,28 +185,38 @@
         if ((tag === '.' || tag === '?.' || tag === '::') && this.tag(i - 1) === 'OUTDENT') {
           return true;
         }
-        return !token.generated && this.tag(i - 1) !== ',' && (__indexOf.call(IMPLICIT_END, tag) >= 0 || (tag === 'INDENT' && !seenControl)) && (tag !== 'INDENT' || (((_ref = this.tag(i - 2)) !== 'CLASS' && _ref !== 'EXTENDS') && (_ref2 = this.tag(i - 1), __indexOf.call(IMPLICIT_BLOCK, _ref2) < 0) && !((post = this.tokens[i + 1]) && post.generated && post[0] === '{')));
+        return !token.generated && this.tag(i - 1) !== ',' && (__indexOf.call(IMPLICIT_END, tag) >= 0 || (tag === 'INDENT' && !seenControl)) && (tag !== 'INDENT' || (((_ref = this.tag(i - 2)) !== 'CLASS' && _ref !== 'EXTENDS') && (_ref1 = this.tag(i - 1), __indexOf.call(IMPLICIT_BLOCK, _ref1) < 0) && !((post = this.tokens[i + 1]) && post.generated && post[0] === '{')));
       };
       action = function(token, i) {
-        return this.tokens.splice(i, 0, ['CALL_END', ')', token[2]]);
+        return this.tokens.splice(i, 0, this.generate('CALL_END', ')', token[2]));
       };
       return this.scanTokens(function(token, i, tokens) {
-        var callObject, current, next, prev, tag, _ref, _ref2, _ref3;
+        var callObject, current, next, prev, tag, _ref, _ref1, _ref2;
         tag = token[0];
-        if (tag === 'CLASS' || tag === 'IF') noCall = true;
+        if (tag === 'CLASS' || tag === 'IF' || tag === 'FOR' || tag === 'WHILE') {
+          noCall = true;
+        }
         _ref = tokens.slice(i - 1, (i + 1) + 1 || 9e9), prev = _ref[0], current = _ref[1], next = _ref[2];
-        callObject = !noCall && tag === 'INDENT' && next && next.generated && next[0] === '{' && prev && (_ref2 = prev[0], __indexOf.call(IMPLICIT_FUNC, _ref2) >= 0);
+        callObject = !noCall && tag === 'INDENT' && next && next.generated && next[0] === '{' && prev && (_ref1 = prev[0], __indexOf.call(IMPLICIT_FUNC, _ref1) >= 0);
         seenSingle = false;
         seenControl = false;
-        if (__indexOf.call(LINEBREAKS, tag) >= 0) noCall = false;
-        if (prev && !prev.spaced && tag === '?') token.call = true;
-        if (token.fromThen) return 1;
-        if (!(callObject || (prev != null ? prev.spaced : void 0) && (prev.call || (_ref3 = prev[0], __indexOf.call(IMPLICIT_FUNC, _ref3) >= 0)) && (__indexOf.call(IMPLICIT_CALL, tag) >= 0 || !(token.spaced || token.newLine) && __indexOf.call(IMPLICIT_UNSPACED_CALL, tag) >= 0))) {
+        if (__indexOf.call(LINEBREAKS, tag) >= 0) {
+          noCall = false;
+        }
+        if (prev && !prev.spaced && tag === '?') {
+          token.call = true;
+        }
+        if (token.fromThen) {
           return 1;
         }
-        tokens.splice(i, 0, ['CALL_START', '(', token[2]]);
+        if (!(callObject || (prev != null ? prev.spaced : void 0) && (prev.call || (_ref2 = prev[0], __indexOf.call(IMPLICIT_FUNC, _ref2) >= 0)) && (__indexOf.call(IMPLICIT_CALL, tag) >= 0 || !(token.spaced || token.newLine) && __indexOf.call(IMPLICIT_UNSPACED_CALL, tag) >= 0))) {
+          return 1;
+        }
+        tokens.splice(i, 0, this.generate('CALL_START', '(', token[2]));
         this.detectEnd(i + 1, condition, action);
-        if (prev[0] === '?') prev[0] = 'FUNC_EXIST';
+        if (prev[0] === '?') {
+          prev[0] = 'FUNC_EXIST';
+        }
         return 2;
       });
     };
@@ -205,7 +232,7 @@
         return this.tokens.splice((this.tag(i - 1) === ',' ? i - 1 : i), 0, outdent);
       };
       return this.scanTokens(function(token, i, tokens) {
-        var tag, _ref, _ref2;
+        var tag, _ref, _ref1;
         tag = token[0];
         if (tag === 'TERMINATOR' && this.tag(i + 1) === 'THEN') {
           tokens.splice(i, 1);
@@ -221,12 +248,15 @@
         }
         if (__indexOf.call(SINGLE_LINERS, tag) >= 0 && this.tag(i + 1) !== 'INDENT' && !(tag === 'ELSE' && this.tag(i + 1) === 'IF')) {
           starter = tag;
-          _ref2 = this.indentation(token), indent = _ref2[0], outdent = _ref2[1];
-          if (starter === 'THEN') indent.fromThen = true;
-          indent.generated = outdent.generated = true;
+          _ref1 = this.indentation(token, true), indent = _ref1[0], outdent = _ref1[1];
+          if (starter === 'THEN') {
+            indent.fromThen = true;
+          }
           tokens.splice(i + 1, 0, indent);
           this.detectEnd(i + 2, condition, action);
-          if (tag === 'THEN') tokens.splice(i, 1);
+          if (tag === 'THEN') {
+            tokens.splice(i, 1);
+          }
           return 1;
         }
         return 1;
@@ -246,15 +276,33 @@
         }
       };
       return this.scanTokens(function(token, i) {
-        if (token[0] !== 'IF') return 1;
+        if (token[0] !== 'IF') {
+          return 1;
+        }
         original = token;
         this.detectEnd(i + 1, condition, action);
         return 1;
       });
     };
 
-    Rewriter.prototype.indentation = function(token) {
-      return [['INDENT', 2, token[2]], ['OUTDENT', 2, token[2]]];
+    Rewriter.prototype.indentation = function(token, implicit) {
+      var indent, outdent;
+      if (implicit == null) {
+        implicit = false;
+      }
+      indent = ['INDENT', 2, token[2]];
+      outdent = ['OUTDENT', 2, token[2]];
+      if (implicit) {
+        indent.generated = outdent.generated = true;
+      }
+      return [indent, outdent];
+    };
+
+    Rewriter.prototype.generate = function(tag, value, line) {
+      var tok;
+      tok = [tag, value, line];
+      tok.generated = true;
+      return tok;
     };
 
     Rewriter.prototype.tag = function(i) {
@@ -284,7 +332,7 @@
 
   IMPLICIT_FUNC = ['IDENTIFIER', 'SUPER', ')', 'CALL_END', ']', 'INDEX_END', '@', 'THIS'];
 
-  IMPLICIT_CALL = ['IDENTIFIER', 'NUMBER', 'STRING', 'JS', 'REGEX', 'NEW', 'PARAM_START', 'CLASS', 'IF', 'TRY', 'SWITCH', 'THIS', 'BOOL', 'UNARY', 'SUPER', '@', '->', '=>', '[', '(', '{', '--', '++'];
+  IMPLICIT_CALL = ['IDENTIFIER', 'NUMBER', 'STRING', 'JS', 'REGEX', 'NEW', 'PARAM_START', 'CLASS', 'IF', 'TRY', 'SWITCH', 'THIS', 'BOOL', 'NULL', 'UNDEFINED', 'UNARY', 'SUPER', '@', '->', '=>', '[', '(', '{', '--', '++'];
 
   IMPLICIT_UNSPACED_CALL = ['+', '-'];
 
diff --git a/weinre.server/node_modules/coffee-script/lib/coffee-script/scope.js b/weinre.server/node_modules/coffee-script/lib/coffee-script/scope.js
index 2162853..3efc4ed 100644
--- a/weinre.server/node_modules/coffee-script/lib/coffee-script/scope.js
+++ b/weinre.server/node_modules/coffee-script/lib/coffee-script/scope.js
@@ -1,3 +1,4 @@
+// Generated by CoffeeScript 1.3.3
 (function() {
   var Scope, extend, last, _ref;
 
@@ -18,11 +19,15 @@
         }
       ];
       this.positions = {};
-      if (!this.parent) Scope.root = this;
+      if (!this.parent) {
+        Scope.root = this;
+      }
     }
 
     Scope.prototype.add = function(name, type, immediate) {
-      if (this.shared && !immediate) return this.parent.add(name, type, immediate);
+      if (this.shared && !immediate) {
+        return this.parent.add(name, type, immediate);
+      }
       if (Object.prototype.hasOwnProperty.call(this.positions, name)) {
         return this.variables[this.positions[name]].type = type;
       } else {
@@ -33,50 +38,65 @@
       }
     };
 
-    Scope.prototype.find = function(name, options) {
-      if (this.check(name, options)) return true;
+    Scope.prototype.namedMethod = function() {
+      if (this.method.name || !this.parent) {
+        return this.method;
+      }
+      return this.parent.namedMethod();
+    };
+
+    Scope.prototype.find = function(name) {
+      if (this.check(name)) {
+        return true;
+      }
       this.add(name, 'var');
       return false;
     };
 
     Scope.prototype.parameter = function(name) {
-      if (this.shared && this.parent.check(name, true)) return;
+      if (this.shared && this.parent.check(name, true)) {
+        return;
+      }
       return this.add(name, 'param');
     };
 
-    Scope.prototype.check = function(name, immediate) {
-      var found, _ref2;
-      found = !!this.type(name);
-      if (found || immediate) return found;
-      return !!((_ref2 = this.parent) != null ? _ref2.check(name) : void 0);
+    Scope.prototype.check = function(name) {
+      var _ref1;
+      return !!(this.type(name) || ((_ref1 = this.parent) != null ? _ref1.check(name) : void 0));
     };
 
     Scope.prototype.temporary = function(name, index) {
       if (name.length > 1) {
-        return '_' + name + (index > 1 ? index : '');
+        return '_' + name + (index > 1 ? index - 1 : '');
       } else {
         return '_' + (index + parseInt(name, 36)).toString(36).replace(/\d/g, 'a');
       }
     };
 
     Scope.prototype.type = function(name) {
-      var v, _i, _len, _ref2;
-      _ref2 = this.variables;
-      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-        v = _ref2[_i];
-        if (v.name === name) return v.type;
+      var v, _i, _len, _ref1;
+      _ref1 = this.variables;
+      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
+        v = _ref1[_i];
+        if (v.name === name) {
+          return v.type;
+        }
       }
       return null;
     };
 
     Scope.prototype.freeVariable = function(name, reserve) {
       var index, temp;
-      if (reserve == null) reserve = true;
+      if (reserve == null) {
+        reserve = true;
+      }
       index = 0;
       while (this.check((temp = this.temporary(name, index)))) {
         index++;
       }
-      if (reserve) this.add(temp, 'var', true);
+      if (reserve) {
+        this.add(temp, 'var', true);
+      }
       return temp;
     };
 
@@ -93,12 +113,12 @@
     };
 
     Scope.prototype.declaredVariables = function() {
-      var realVars, tempVars, v, _i, _len, _ref2;
+      var realVars, tempVars, v, _i, _len, _ref1;
       realVars = [];
       tempVars = [];
-      _ref2 = this.variables;
-      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-        v = _ref2[_i];
+      _ref1 = this.variables;
+      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
+        v = _ref1[_i];
         if (v.type === 'var') {
           (v.name.charAt(0) === '_' ? tempVars : realVars).push(v.name);
         }
@@ -107,12 +127,14 @@
     };
 
     Scope.prototype.assignedVariables = function() {
-      var v, _i, _len, _ref2, _results;
-      _ref2 = this.variables;
+      var v, _i, _len, _ref1, _results;
+      _ref1 = this.variables;
       _results = [];
-      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-        v = _ref2[_i];
-        if (v.type.assigned) _results.push("" + v.name + " = " + v.type.value);
+      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
+        v = _ref1[_i];
+        if (v.type.assigned) {
+          _results.push("" + v.name + " = " + v.type.value);
+        }
       }
       return _results;
     };
diff --git a/weinre.server/node_modules/coffee-script/package.json b/weinre.server/node_modules/coffee-script/package.json
index 2547bdf..a8a9363 100644
--- a/weinre.server/node_modules/coffee-script/package.json
+++ b/weinre.server/node_modules/coffee-script/package.json
@@ -1,31 +1,44 @@
 {
-  "name":         "coffee-script",
-  "description":  "Unfancy JavaScript",
-  "keywords":     ["javascript", "language", "coffeescript", "compiler"],
-  "author":       "Jeremy Ashkenas",
-  "version":      "1.2.0",
-  "licenses":     [{
-    "type":       "MIT",
-    "url":        "http://github.com/jashkenas/coffee-script/raw/master/LICENSE"
-  }],
-  "engines":      {
-    "node":       ">=0.4.0"
+  "name": "coffee-script",
+  "description": "Unfancy JavaScript",
+  "keywords": [
+    "javascript",
+    "language",
+    "coffeescript",
+    "compiler"
+  ],
+  "author": {
+    "name": "Jeremy Ashkenas"
   },
-  "directories" : {
-    "lib" : "./lib/coffee-script"
+  "version": "1.3.3",
+  "licenses": [
+    {
+      "type": "MIT",
+      "url": "https://raw.github.com/jashkenas/coffee-script/master/LICENSE"
+    }
+  ],
+  "engines": {
+    "node": ">=0.4.0"
   },
-  "main" : "./lib/coffee-script/coffee-script",
-  "bin":          {
-    "coffee":     "./bin/coffee",
-    "cake":       "./bin/cake"
+  "directories": {
+    "lib": "./lib/coffee-script"
   },
-  "homepage":     "http://coffeescript.org",
-  "repository":   {
+  "main": "./lib/coffee-script/coffee-script",
+  "bin": {
+    "coffee": "./bin/coffee",
+    "cake": "./bin/cake"
+  },
+  "homepage": "http://coffeescript.org",
+  "bugs": "https://github.com/jashkenas/coffee-script/issues",
+  "repository": {
     "type": "git",
     "url": "git://github.com/jashkenas/coffee-script.git"
   },
   "devDependencies": {
-    "uglify-js":  ">=1.0.0",
-    "jison":      ">=0.2.0"
-  }
+    "uglify-js": ">=1.0.0",
+    "jison": ">=0.2.0"
+  },
+  "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",
+  "_id": "coffee-script@1.3.3",
+  "_from": "coffee-script@1.3.x"
 }
diff --git a/weinre.server/node_modules/express/History.md b/weinre.server/node_modules/express/History.md
index 616ca9d..5aae2d1 100644
--- a/weinre.server/node_modules/express/History.md
+++ b/weinre.server/node_modules/express/History.md
@@ -1,4 +1,22 @@
 
+2.5.10 / 2012-06-15 
+==================
+
+  * Remove annoying engines field from package.json
+  * Backport support for trusting X-Forwarded-Proto
+  * use version of `package.json` for `express` command
+
+2.5.9/ 2012-04-02 
+==================
+
+  * Added support for PURGE request method [pbuyle]
+  * Fixed `express(1)` generated app `app.address()` before `listening` [mmalecki]
+
+2.5.8 / 2012-02-08 
+==================
+
+  * Update mkdirp dep. Closes #991
+
 2.5.7 / 2012-02-06 
 ==================
 
diff --git a/weinre.server/node_modules/express/bin/express b/weinre.server/node_modules/express/bin/express
index f28a0fd..367be59 100755
--- a/weinre.server/node_modules/express/bin/express
+++ b/weinre.server/node_modules/express/bin/express
@@ -10,10 +10,16 @@
   , mkdirp = require('mkdirp');
 
 /**
+ * Package information.
+ */
+
+var pkg = JSON.parse(fs.readFileSync(__dirname + '/../package.json'));
+
+/**
  * Framework version.
  */
 
-var version = '2.5.7';
+var version = pkg.version;
 
 /**
  * Add session support.
@@ -185,8 +191,9 @@
   , ''
   , 'app.get(\'/\', routes.index);'
   , ''
-  , 'app.listen(3000);'
-  , 'console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);'
+  , 'app.listen(3000, function(){'
+  , '  console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);'
+  , '});'
   , ''
 ].join(eol);
 
diff --git a/weinre.server/node_modules/express/lib/express.js b/weinre.server/node_modules/express/lib/express.js
index 029dcc9..1bae623 100644
--- a/weinre.server/node_modules/express/lib/express.js
+++ b/weinre.server/node_modules/express/lib/express.js
@@ -28,7 +28,7 @@
  * Framework version.
  */
 
-exports.version = '2.5.7';
+exports.version = '2.5.10';
 
 /**
  * Shortcut for `new Server(...)`.
diff --git a/weinre.server/node_modules/express/lib/request.js b/weinre.server/node_modules/express/lib/request.js
index 1d5ab40..05ffa66 100644
--- a/weinre.server/node_modules/express/lib/request.js
+++ b/weinre.server/node_modules/express/lib/request.js
@@ -135,8 +135,8 @@
   // normalize extensions ".json" -> "json"
   if (type && '.' == type[0]) type = type.substr(1);
 
-  // when Accept does not exist, or is '*/*' return true 
-  if (!accept || '*/*' == accept) {
+  // when Accept does not exist, or contains '*/*' return true
+  if (!accept || ~accept.indexOf('*/*')) {
     return true;
   } else if (type) {
     // allow "html" vs "text/html" etc
@@ -321,3 +321,24 @@
 
 req.__defineGetter__('isXMLHttpRequest', isxhr);
 req.__defineGetter__('xhr', isxhr);
+
+/**
+ * Return the protocol string "http" or "https",
+ * when requested with TLS. When the "trust proxy"
+ * setting is enabled the "X-Forwarded-Proto" header
+ * field will be trusted. If you're running behind
+ * a reverse proxy that supplies https for you this
+ * may be enabled.
+ *
+ * @return {String}
+ * @api public
+ */
+
+req.__defineGetter__('protocol', function(trustProxy){
+  var trustProxy = this.app.settings['trust proxy'];
+  return this.secure
+    ? 'https'
+    : trustProxy
+      ? (this.header('X-Forwarded-Proto') || 'http')
+      : 'http';
+});
diff --git a/weinre.server/node_modules/express/lib/response.js b/weinre.server/node_modules/express/lib/response.js
index a671771..0174950 100644
--- a/weinre.server/node_modules/express/lib/response.js
+++ b/weinre.server/node_modules/express/lib/response.js
@@ -402,9 +402,8 @@
     if ('/' != base && 0 != url.indexOf(base)) url = base + url;
 
     // Absolute
-    var host = req.headers.host
-      , tls = req.connection.encrypted;
-    url = 'http' + (tls ? 's' : '') + '://' + host + url;
+    var host = req.headers.host;
+    url = req.protocol + '://' + host + url;
   }
 
   // Support text/{plain,html} by default
diff --git a/weinre.server/node_modules/express/lib/router/methods.js b/weinre.server/node_modules/express/lib/router/methods.js
index e19787b..71a969a 100644
--- a/weinre.server/node_modules/express/lib/router/methods.js
+++ b/weinre.server/node_modules/express/lib/router/methods.js
@@ -55,6 +55,14 @@
 var RFC5789 = ['PATCH'];
 
 /**
+ * PURGE Method for caching reverse-proxy
+ * http://wiki.squid-cache.org/SquidFaq/OperatingSquid#How_can_I_purge_an_object_from_my_cache.3F
+ * https://www.varnish-cache.org/docs/trunk/tutorial/purging.html
+ */
+
+var CACHE_PURGE = ['PURGE'];
+
+/**
  * Expose the methods.
  */
 
@@ -65,6 +73,7 @@
   , RFC3648
   , RFC3744
   , RFC5323
-  , RFC5789).map(function(method){
+  , RFC5789
+  , CACHE_PURGE).map(function(method){
     return method.toLowerCase();
   });
diff --git a/weinre.server/node_modules/express/node_modules/connect/lib/connect.js b/weinre.server/node_modules/express/node_modules/connect/lib/connect.js
index 7857023..eb2b0ea 100644
--- a/weinre.server/node_modules/express/node_modules/connect/lib/connect.js
+++ b/weinre.server/node_modules/express/node_modules/connect/lib/connect.js
@@ -26,7 +26,7 @@
  * Framework version.
  */
 
-exports.version = '1.8.5';
+exports.version = '1.9.1';
 
 /**
  * Initialize a new `connect.HTTPServer` with the middleware
diff --git a/weinre.server/node_modules/express/node_modules/connect/lib/http.js b/weinre.server/node_modules/express/node_modules/connect/lib/http.js
index 09898e2..1d35f12 100644
--- a/weinre.server/node_modules/express/node_modules/connect/lib/http.js
+++ b/weinre.server/node_modules/express/node_modules/connect/lib/http.js
@@ -12,7 +12,8 @@
 
 var http = require('http')
   , parse = require('url').parse
-  , assert = require('assert');
+  , assert = require('assert')
+  , utils = require('./utils');
 
 // environment
 
@@ -169,7 +170,7 @@
         res.statusCode = 404;
         res.setHeader('Content-Type', 'text/plain');
         if ('HEAD' == req.method) return res.end();
-        res.end('Cannot ' + req.method + ' ' + req.url);
+        res.end('Cannot ' + req.method + ' ' + utils.escape(req.originalUrl));
       }
       return;
     }
diff --git a/weinre.server/node_modules/express/node_modules/connect/lib/middleware/compress.js b/weinre.server/node_modules/express/node_modules/connect/lib/middleware/compress.js
new file mode 100644
index 0000000..addc5c9
--- /dev/null
+++ b/weinre.server/node_modules/express/node_modules/connect/lib/middleware/compress.js
@@ -0,0 +1,146 @@
+
+/*!
+ * Connect - compress
+ * Copyright(c) 2010 Sencha Inc.
+ * Copyright(c) 2011 TJ Holowaychuk
+ * Copyright(c) 2012 Nebojsa Sabovic
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var zlib = require('zlib');
+
+/**
+ * Supported content-encoding methods.
+ */
+
+exports.methods = {
+    gzip: zlib.createGzip
+  , deflate: zlib.createDeflate
+};
+
+/**
+ * Default filter function.
+ */
+
+exports.filter = function(req, res){
+  var type = res.getHeader('Content-Type') || '';
+  return type.match(/json|text|javascript/);
+};
+
+/**
+ * Compress:
+ *
+ * Compress response data with gzip/deflate.
+ *
+ * Filter:
+ *
+ *  A `filter` callback function may be passed to
+ *  replace the default logic of:
+ *
+ *     exports.filter = function(req, res){
+ *       var type = res.getHeader('Content-Type') || '';
+ *       return type.match(/json|text|javascript/);
+ *     };
+ *
+ * Options:
+ *
+ *  All remaining options are passed to the gzip/deflate
+ *  creation functions. Consult node's docs for additional details.
+ *
+ *   - `chunkSize` (default: 16*1024)
+ *   - `windowBits`
+ *   - `level`: 0-9 where 0 is no compression, and 9 is slow but best compression
+ *   - `memLevel`: 1-9 low is slower but uses less memory, high is fast but uses more
+ *   - `strategy`: compression strategy
+ *
+ * @param {Object} options
+ * @return {Function}
+ * @api public
+ */
+
+module.exports = function compress(options) {
+  var options = options || {}
+    , names = Object.keys(exports.methods)
+    , filter = options.filter || exports.filter;
+
+  return function(req, res, next){
+    var accept = req.headers['accept-encoding']
+      , write = res.write
+      , writeHead = res.writeHead
+      , end = res.end
+      , stream
+      , method;
+
+    // vary
+    res.setHeader('Vary', 'Accept-Encoding');
+
+    // proxy
+
+    res.write = function(chunk, encoding){
+      if (!this._header) this._implicitHeader();
+      return stream
+        ? stream.write(chunk, encoding)
+        : write.call(this, chunk, encoding);
+    };
+
+    res.end = function(chunk, encoding){
+      if (!this._header) {
+        this._implicitHeader();
+      }
+      if (chunk) this.write(chunk, encoding);
+      return stream
+        ? stream.end()
+        : end.call(this);
+    };
+
+    res.writeHead = function(){
+      res.writeHead = writeHead;
+
+      // default request filter, SHOULD use identity, head
+      if (filter(req, res) && accept && 'HEAD' != req.method) {
+        // default to gzip
+        if ('*' == accept.trim()) {
+          method = 'gzip';
+        } else {
+          for (var i = 0, len = names.length; i < len; ++i) {
+            if (~accept.indexOf(names[i])) {
+              method = names[i];
+              break;
+            }
+          }
+        }
+
+        // compression method
+        if (method) {
+          // compression stream
+          stream = exports.methods[method](options);
+
+          // header fields
+          res.setHeader('Content-Encoding', method);
+          res.removeHeader('Content-Length');
+          // WARNING: We do not strip content-length out of passed-in headers
+
+          // compression
+          stream.on('data', function(chunk){
+            write.call(res, chunk);
+          });
+
+          stream.on('end', function(){
+            end.call(res);
+          });
+
+          stream.on('drain', function() {
+            res.emit('drain');
+          });
+        }
+      }
+      return res.writeHead.apply(this, arguments);
+    };
+
+    next();
+  };
+}
diff --git a/weinre.server/node_modules/express/node_modules/connect/lib/middleware/limit.js b/weinre.server/node_modules/express/node_modules/connect/lib/middleware/limit.js
index 4dafdd3..a604ffb 100644
--- a/weinre.server/node_modules/express/node_modules/connect/lib/middleware/limit.js
+++ b/weinre.server/node_modules/express/node_modules/connect/lib/middleware/limit.js
@@ -17,8 +17,6 @@
  *       connect.limit('5.5mb')
  *     ).listen(3000);
  *
- * TODO: pause EV_READ
- *
  * @param {Number|String} bytes
  * @return {Function}
  * @api public
diff --git a/weinre.server/node_modules/express/node_modules/connect/lib/middleware/session.js b/weinre.server/node_modules/express/node_modules/connect/lib/middleware/session.js
index 7fbeb18..6616fad 100644
--- a/weinre.server/node_modules/express/node_modules/connect/lib/middleware/session.js
+++ b/weinre.server/node_modules/express/node_modules/connect/lib/middleware/session.js
@@ -50,8 +50,7 @@
  */
 
 function defaultFingerprint(req) {
-  var ua = req.headers['user-agent'] || '';
-  return ua.replace(/;?\schromeframe\/[\d\.]+/, '');
+  return '';
 };
 
 /**
diff --git a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/Readme.md b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/Readme.md
index 3427514..a5ca104 100644
--- a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/Readme.md
+++ b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/Readme.md
@@ -1,6 +1,6 @@
 # Formidable
 
-[![Build Status](https://secure.travis-ci.org/felixge/node-formidable.png)](http://travis-ci.org/felixge/node-formidable)
+[![Build Status](https://secure.travis-ci.org/felixge/node-formidable.png?branch=master)](http://travis-ci.org/felixge/node-formidable)
 
 ## Purpose
 
@@ -199,6 +199,10 @@
 If this value is exceeded, an `'error'` event is emitted. The default
 size is 2MB.
 
+__incomingForm.hash = false__
+
+If you want checksums calculated for incoming files, set this to either `'sha1'` or `'md5'`.
+
 __incomingForm.bytesReceived__
 
 The amount of bytes received for this form so far.
@@ -290,6 +294,10 @@
 A date object (or `null`) containing the time this file was last written to. Mostly
 here for compatibility with the [W3C File API Draft](http://dev.w3.org/2006/webapi/FileAPI/).
 
+__file.hash = null__
+
+If hash calculation was set, you can read the hex digest out of this var.
+
 ## License
 
 Formidable is licensed under the MIT license.
diff --git a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/lib/file.js b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/lib/file.js
index 6dc8720..dad8d5f 100644
--- a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/lib/file.js
+++ b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/lib/file.js
@@ -2,7 +2,8 @@
 
 var util = require('./util'),
     WriteStream = require('fs').WriteStream,
-    EventEmitter = require('events').EventEmitter;
+    EventEmitter = require('events').EventEmitter,
+    crypto = require('crypto');
 
 function File(properties) {
   EventEmitter.call(this);
@@ -11,14 +12,19 @@
   this.path = null;
   this.name = null;
   this.type = null;
+  this.hash = null;
   this.lastModifiedDate = null;
 
   this._writeStream = null;
-
+  
   for (var key in properties) {
     this[key] = properties[key];
   }
 
+  if(typeof this.hash === 'string') {
+    this.hash = crypto.createHash(properties.hash);
+  }
+
   this._backwardsCompatibility();
 }
 module.exports = File;
@@ -45,6 +51,9 @@
 File.prototype.write = function(buffer, cb) {
   var self = this;
   this._writeStream.write(buffer, function() {
+    if(self.hash) {
+      self.hash.update(buffer);
+    }
     self.lastModifiedDate = new Date();
     self.size += buffer.length;
     self.emit('progress', self.size);
@@ -55,6 +64,9 @@
 File.prototype.end = function(cb) {
   var self = this;
   this._writeStream.end(function() {
+    if(self.hash) {
+      self.hash = self.hash.digest('hex');
+    }
     self.emit('end');
     cb();
   });
diff --git a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/lib/incoming_form.js b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/lib/incoming_form.js
index b1e2bfb..060eac2 100644
--- a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/lib/incoming_form.js
+++ b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/lib/incoming_form.js
@@ -7,21 +7,25 @@
     MultipartParser = require('./multipart_parser').MultipartParser,
     QuerystringParser = require('./querystring_parser').QuerystringParser,
     StringDecoder = require('string_decoder').StringDecoder,
-    EventEmitter = require('events').EventEmitter;
+    EventEmitter = require('events').EventEmitter,
+    Stream = require('stream').Stream;
 
-function IncomingForm() {
+function IncomingForm(opts) {  
   if (!(this instanceof IncomingForm)) return new IncomingForm;
   EventEmitter.call(this);
 
+  opts=opts||{};
+  
   this.error = null;
   this.ended = false;
 
-  this.maxFieldsSize = 2 * 1024 * 1024;
-  this.keepExtensions = false;
-  this.uploadDir = IncomingForm.UPLOAD_DIR;
-  this.encoding = 'utf-8';
+  this.maxFieldsSize = opts.maxFieldsSize || 2 * 1024 * 1024;
+  this.keepExtensions = opts.keepExtensions || false;
+  this.uploadDir = opts.uploadDir || IncomingForm.UPLOAD_DIR;
+  this.encoding = opts.encoding || 'utf-8';
   this.headers = null;
   this.type = null;
+  this.hash = false;
 
   this.bytesReceived = null;
   this.bytesExpected = null;
@@ -187,6 +191,7 @@
     path: this._uploadPath(part.filename),
     name: part.filename,
     type: part.mime,
+    hash: self.hash
   });
 
   this.emit('fileBegin', part.name, file);
@@ -267,7 +272,8 @@
   parser.initWithBoundary(boundary);
 
   parser.onPartBegin = function() {
-    part = new EventEmitter();
+    part = new Stream();
+    part.readable = true;
     part.headers = {};
     part.name = null;
     part.filename = null;
diff --git a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/Makefile b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/Makefile
new file mode 100644
index 0000000..01f7140
--- /dev/null
+++ b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/Makefile
@@ -0,0 +1,4 @@
+test:
+	@find test/simple/test-*.js | xargs -n 1 -t node
+
+.PHONY: test
\ No newline at end of file
diff --git a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/Readme.md b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/Readme.md
new file mode 100644
index 0000000..f8f0c66
--- /dev/null
+++ b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/Readme.md
@@ -0,0 +1,167 @@
+# Gently
+
+## Purpose
+
+A node.js module that helps with stubbing and behavior verification. It allows you to test the most remote and nested corners of your code while keeping being fully unobtrusive.
+
+## Features
+
+* Overwrite and stub individual object functions
+* Verify that all expected calls have been made in the expected order
+* Restore stubbed functions to their original behavior
+* Detect object / class names from obj.constructor.name and obj.toString()
+* Hijack any required module function or class constructor
+
+## Installation
+
+Via [npm](http://github.com/isaacs/npm):
+
+    npm install gently@latest
+
+## Example
+
+Make sure your dog is working properly:
+
+    function Dog() {}
+
+    Dog.prototype.seeCat = function() {
+      this.bark('whuf, whuf');
+      this.run();
+    }
+
+    Dog.prototype.bark = function(bark) {
+      require('sys').puts(bark);
+    }
+
+    var gently = new (require('gently'))
+      , assert = require('assert')
+      , dog = new Dog();
+
+    gently.expect(dog, 'bark', function(bark) {
+      assert.equal(bark, 'whuf, whuf');
+    });
+    gently.expect(dog, 'run');
+
+    dog.seeCat();
+
+You can also easily test event emitters with this, for example a simple sequence of 2 events emitted by `fs.WriteStream`:
+
+    var gently = new (require('gently'))
+      , stream = new (require('fs').WriteStream)('my_file.txt');
+
+    gently.expect(stream, 'emit', function(event) {
+      assert.equal(event, 'open');
+    });
+
+    gently.expect(stream, 'emit', function(event) {
+      assert.equal(event, 'drain');
+    });
+
+For a full read world example, check out this test case: [test-incoming-form.js](http://github.com/felixge/node-formidable/blob/master/test/simple/test-incoming-form.js) (in [node-formdiable](http://github.com/felixge/node-formidable)).
+
+## API
+
+### Gently
+
+#### new Gently()
+
+Creates a new gently instance. It listens to the process `'exit'` event to make sure all expectations have been verified.
+
+#### gently.expect(obj, method, [[count], stubFn])
+
+Creates an expectation for an objects method to be called. You can optionally specify the call `count` you are expecting, as well as `stubFn` function that will run instead of the original function.
+
+Returns a reference to the function that is getting overwritten.
+
+#### gently.expect([count], stubFn)
+
+Returns a function that is supposed to be executed `count` times, delegating any calls to the provided `stubFn` function. Naming your stubFn closure will help to properly diagnose errors that are being thrown:
+
+    childProcess.exec('ls', gently.expect(function lsCallback(code) {
+      assert.equal(0, code);
+    }));
+
+#### gently.restore(obj, method)
+
+Restores an object method that has been previously overwritten using `gently.expect()`.
+
+#### gently.hijack(realRequire)
+
+Returns a new require functions that catches a reference to all required modules into `gently.hijacked`.
+
+To use this function, include a line like this in your `'my-module.js'`.
+
+    if (global.GENTLY) require = GENTLY.hijack(require);
+
+    var sys = require('sys');
+    exports.hello = function() {
+      sys.log('world');
+    };
+
+Now you can write a test for the module above:
+
+    var gently = global.GENTLY = new (require('gently'))
+      , myModule = require('./my-module');
+
+    gently.expect(gently.hijacked.sys, 'log', function(str) {
+      assert.equal(str, 'world');
+    });
+
+    myModule.hello();
+
+#### gently.stub(location, [exportsName])
+
+Returns a stub class that will be used instead of the real class from the module at `location` with the given `exportsName`.
+
+This allows to test an OOP version of the previous example, where `'my-module.js'`.
+
+    if (global.GENTLY) require = GENTLY.hijack(require);
+
+    var World = require('./world');
+
+    exports.hello = function() {
+      var world = new World();
+      world.hello();
+    }
+
+And `world.js` looks like this:
+
+    var sys = require('sys');
+
+    function World() {
+
+    }
+    module.exports = World;
+
+    World.prototype.hello = function() {
+      sys.log('world');
+    };
+
+Testing `'my-module.js'` can now easily be accomplished:
+
+    var gently = global.GENTLY = new (require('gently'))
+      , WorldStub = gently.stub('./world')
+      , myModule = require('./my-module')
+      , WORLD;
+
+    gently.expect(WorldStub, 'new', function() {
+      WORLD = this;
+    });
+
+    gently.expect(WORLD, 'hello');
+
+    myModule.hello();
+
+#### gently.hijacked
+
+An object that holds the references to all hijacked modules.
+
+#### gently.verify([msg])
+
+Verifies that all expectations of this gently instance have been satisfied. If not called manually, this method is called when the process `'exit'` event is fired.
+
+If `msg` is given, it will appear in any error that might be thrown.
+
+## License
+
+Gently is licensed under the MIT license.
\ No newline at end of file
diff --git a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/example/dog.js b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/example/dog.js
new file mode 100644
index 0000000..022fae0
--- /dev/null
+++ b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/example/dog.js
@@ -0,0 +1,22 @@
+require('../test/common');
+function Dog() {}
+
+Dog.prototype.seeCat = function() {
+  this.bark('whuf, whuf');
+  this.run();
+}
+
+Dog.prototype.bark = function(bark) {
+  require('sys').puts(bark);
+}
+
+var gently = new (require('gently'))
+  , assert = require('assert')
+  , dog = new Dog();
+
+gently.expect(dog, 'bark', function(bark) {
+  assert.equal(bark, 'whuf, whuf');
+});
+gently.expect(dog, 'run');
+
+dog.seeCat();
\ No newline at end of file
diff --git a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/example/event_emitter.js b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/example/event_emitter.js
new file mode 100644
index 0000000..7def134
--- /dev/null
+++ b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/example/event_emitter.js
@@ -0,0 +1,11 @@
+require('../test/common');
+var gently = new (require('gently'))
+  , stream = new (require('fs').WriteStream)('my_file.txt');
+
+gently.expect(stream, 'emit', function(event) {
+  assert.equal(event, 'open');
+});
+
+gently.expect(stream, 'emit', function(event) {
+  assert.equal(event, 'drain');
+});
\ No newline at end of file
diff --git a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/index.js b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/index.js
new file mode 100644
index 0000000..69122bd
--- /dev/null
+++ b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/index.js
@@ -0,0 +1 @@
+module.exports = require('./lib/gently');
\ No newline at end of file
diff --git a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/lib/gently/gently.js b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/lib/gently/gently.js
new file mode 100644
index 0000000..8af0e1e
--- /dev/null
+++ b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/lib/gently/gently.js
@@ -0,0 +1,184 @@
+var path = require('path');
+
+function Gently() {
+  this.expectations = [];
+  this.hijacked = {};
+
+  var self = this;
+  process.addListener('exit', function() {
+    self.verify('process exit');
+  });
+};
+module.exports = Gently;
+
+Gently.prototype.stub = function(location, exportsName) {
+  function Stub() {
+    return Stub['new'].apply(this, arguments);
+  };
+
+  Stub['new'] = function () {};
+
+  var stubName = 'require('+JSON.stringify(location)+')';
+  if (exportsName) {
+    stubName += '.'+exportsName;
+  }
+
+  Stub.prototype.toString = Stub.toString = function() {
+    return stubName;
+  };
+
+  var exports = this.hijacked[location] || {};
+  if (exportsName) {
+    exports[exportsName] = Stub;
+  } else {
+    exports = Stub;
+  }
+
+  this.hijacked[location] = exports;
+  return Stub;
+};
+
+Gently.prototype.hijack = function(realRequire) {
+  var self = this;
+  return function(location) {
+    return self.hijacked[location] = (self.hijacked[location])
+      ? self.hijacked[location]
+      : realRequire(location);
+  };
+};
+
+Gently.prototype.expect = function(obj, method, count, stubFn) {
+  if (typeof obj != 'function' && typeof obj != 'object' && typeof obj != 'number') {
+    throw new Error
+      ( 'Bad 1st argument for gently.expect(), '
+      + 'object, function, or number expected, got: '+(typeof obj)
+      );
+  } else if (typeof obj == 'function' && (typeof method != 'string')) {
+    // expect(stubFn) interface
+    stubFn = obj;
+    obj = null;
+    method = null;
+    count = 1;
+  } else if (typeof method == 'function') {
+    // expect(count, stubFn) interface
+    count = obj;
+    stubFn = method;
+    obj = null;
+    method = null;
+  } else if (typeof count == 'function') {
+    // expect(obj, method, stubFn) interface
+    stubFn = count;
+    count = 1;
+  } else if (count === undefined) {
+    // expect(obj, method) interface
+    count = 1;
+  }
+
+  var name = this._name(obj, method, stubFn);
+  this.expectations.push({obj: obj, method: method, stubFn: stubFn, name: name, count: count});
+
+  var self = this;
+  function delegate() {
+    return self._stubFn(this, obj, method, name, Array.prototype.slice.call(arguments));
+  }
+
+  if (!obj) {
+    return delegate;
+  }
+
+  var original = (obj[method])
+    ? obj[method]._original || obj[method]
+    : undefined;
+
+  obj[method] = delegate;
+  return obj[method]._original = original;
+};
+
+Gently.prototype.restore = function(obj, method) {
+  if (!obj[method] || !obj[method]._original) {
+    throw new Error(this._name(obj, method)+' is not gently stubbed');
+  }
+  obj[method] = obj[method]._original;
+};
+
+Gently.prototype.verify = function(msg) {
+  if (!this.expectations.length) {
+    return;
+  }
+
+  var validExpectations = [];
+  for (var i = 0, l = this.expectations.length; i < l; i++) {
+    var expectation = this.expectations[i];
+
+    if (expectation.count > 0) {
+      validExpectations.push(expectation);
+    }
+  }
+
+  this.expectations = []; // reset so that no duplicate verification attempts are made
+
+  if (!validExpectations.length) {
+    return;
+  }
+
+  var expectation = validExpectations[0];
+
+  throw new Error
+    ( 'Expected call to '+expectation.name+' did not happen'
+    + ( (msg)
+        ? ' ('+msg+')'
+        : ''
+      )
+    );
+};
+
+Gently.prototype._stubFn = function(self, obj, method, name, args) {
+  var expectation = this.expectations[0], obj, method;
+
+  if (!expectation) {
+    throw new Error('Unexpected call to '+name+', no call was expected');
+  }
+
+  if (expectation.obj !== obj || expectation.method !== method) {
+    throw new Error('Unexpected call to '+name+', expected call to '+ expectation.name);
+  }
+
+  expectation.count -= 1;
+  if (expectation.count === 0) {
+    this.expectations.shift();
+
+    // autorestore original if its not a closure
+    // and no more expectations on that object
+    var has_more_expectations = this.expectations.reduce(function (memo, expectation) {
+      return memo || (expectation.obj === obj && expectation.method === method);
+    }, false);
+    if (obj !== null && method !== null && !has_more_expectations) {
+      if (typeof obj[method]._original !== 'undefined') {
+        obj[method] = obj[method]._original;
+        delete obj[method]._original;
+      } else {
+        delete obj[method];
+      }
+    }
+  }
+
+  if (expectation.stubFn) {
+    return expectation.stubFn.apply(self, args);
+  }
+};
+
+Gently.prototype._name = function(obj, method, stubFn) {
+  if (obj) {
+    var objectName = obj.toString();
+    if (objectName == '[object Object]' && obj.constructor.name) {
+      objectName = '['+obj.constructor.name+']';
+    }
+    return (objectName)+'.'+method+'()';
+  }
+
+  if (stubFn.name) {
+    return stubFn.name+'()';
+  }
+
+  return '>> '+stubFn.toString()+' <<';
+};
diff --git a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/lib/gently/index.js b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/lib/gently/index.js
new file mode 100644
index 0000000..64c1977
--- /dev/null
+++ b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/lib/gently/index.js
@@ -0,0 +1 @@
+module.exports = require('./gently');
\ No newline at end of file
diff --git a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/package.json b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/package.json
new file mode 100644
index 0000000..9c1b7a0
--- /dev/null
+++ b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/package.json
@@ -0,0 +1,14 @@
+{
+  "name": "gently",
+  "version": "0.9.2",
+  "directories": {
+    "lib": "./lib/gently"
+  },
+  "main": "./lib/gently/index",
+  "dependencies": {},
+  "devDependencies": {},
+  "engines": {
+    "node": "*"
+  },
+  "optionalDependencies": {}
+}
diff --git a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/test/common.js b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/test/common.js
new file mode 100644
index 0000000..978b5c5
--- /dev/null
+++ b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/test/common.js
@@ -0,0 +1,8 @@
+var path = require('path')
+  , sys = require('sys');
+
+require.paths.unshift(path.dirname(__dirname)+'/lib');
+
+global.puts = sys.puts;
+global.p = function() {sys.error(sys.inspect.apply(null, arguments))};;
+global.assert = require('assert');
\ No newline at end of file
diff --git a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/test/simple/test-gently.js b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/test/simple/test-gently.js
new file mode 100644
index 0000000..4f8fe2d
--- /dev/null
+++ b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/test/simple/test-gently.js
@@ -0,0 +1,348 @@
+require('../common');
+var Gently = require('gently')
+  , gently;
+
+function test(test) {
+  process.removeAllListeners('exit');
+  gently = new Gently();
+  test();
+}
+
+test(function constructor() {
+  assert.deepEqual(gently.expectations, []);
+  assert.deepEqual(gently.hijacked, {});
+  assert.equal(gently.constructor.name, 'Gently');
+});
+
+test(function expectBadArgs() {
+  var BAD_ARG = 'oh no';
+  try {
+    gently.expect(BAD_ARG);
+    assert.ok(false, 'throw needs to happen');
+  } catch (e) {
+    assert.equal(e.message, 'Bad 1st argument for gently.expect(), object, function, or number expected, got: '+(typeof BAD_ARG));
+  }
+});
+
+test(function expectObjMethod() {
+  var OBJ = {}, NAME = 'foobar';
+  OBJ.foo = function(x) {
+    return x;
+  };
+
+  gently._name = function() {
+    return NAME;
+  };
+
+  var original = OBJ.foo
+    , stubFn = function() {};
+
+  (function testAddOne() {
+    assert.strictEqual(gently.expect(OBJ, 'foo', stubFn), original);
+
+    assert.equal(gently.expectations.length, 1);
+    var expectation = gently.expectations[0];
+    assert.strictEqual(expectation.obj, OBJ);
+    assert.strictEqual(expectation.method, 'foo');
+    assert.strictEqual(expectation.stubFn, stubFn);
+    assert.strictEqual(expectation.name, NAME);
+    assert.strictEqual(OBJ.foo._original, original);
+  })();
+
+  (function testAddTwo() {
+    gently.expect(OBJ, 'foo', 2, stubFn);
+    assert.equal(gently.expectations.length, 2);
+    assert.strictEqual(OBJ.foo._original, original);
+  })();
+
+  (function testAddOneWithoutMock() {
+    gently.expect(OBJ, 'foo');
+    assert.equal(gently.expectations.length, 3);
+  })();
+
+  var stubFnCalled = 0, SELF = {};
+  gently._stubFn = function(self, obj, method, name, args) {
+    stubFnCalled++;
+    assert.strictEqual(self, SELF);
+    assert.strictEqual(obj, OBJ);
+    assert.strictEqual(method, 'foo');
+    assert.strictEqual(name, NAME);
+    assert.deepEqual(args, [1, 2]);
+    return 23;
+  };
+  assert.equal(OBJ.foo.apply(SELF, [1, 2]), 23);
+  assert.equal(stubFnCalled, 1);
+});
+
+test(function expectClosure() {
+  var NAME = 'MY CLOSURE';
+  function closureFn() {};
+
+  gently._name = function() {
+    return NAME;
+  };
+
+  var fn = gently.expect(closureFn);
+  assert.equal(gently.expectations.length, 1);
+  var expectation = gently.expectations[0];
+  assert.strictEqual(expectation.obj, null);
+  assert.strictEqual(expectation.method, null);
+  assert.strictEqual(expectation.stubFn, closureFn);
+  assert.strictEqual(expectation.name, NAME);
+
+  var stubFnCalled = 0, SELF = {};
+  gently._stubFn = function(self, obj, method, name, args) {
+    stubFnCalled++;
+    assert.strictEqual(self, SELF);
+    assert.strictEqual(obj, null);
+    assert.strictEqual(method, null);
+    assert.strictEqual(name, NAME);
+    assert.deepEqual(args, [1, 2]);
+    return 23;
+  };
+  assert.equal(fn.apply(SELF, [1, 2]), 23);
+  assert.equal(stubFnCalled, 1);
+});
+
+test(function expectClosureCount() {
+  var stubFnCalled = 0;
+  function closureFn() {stubFnCalled++};
+
+  var fn = gently.expect(2, closureFn);
+  assert.equal(gently.expectations.length, 1);
+  fn();
+  assert.equal(gently.expectations.length, 1);
+  fn();
+  assert.equal(stubFnCalled, 2);
+});
+
+test(function restore() {
+  var OBJ = {}, NAME = '[my object].myFn()';
+  OBJ.foo = function(x) {
+    return x;
+  };
+
+  gently._name = function() {
+    return NAME;
+  };
+
+  var original = OBJ.foo;
+  gently.expect(OBJ, 'foo');
+  gently.restore(OBJ, 'foo');
+  assert.strictEqual(OBJ.foo, original);
+
+  (function testError() {
+    try {
+      gently.restore(OBJ, 'foo');
+      assert.ok(false, 'throw needs to happen');
+    } catch (e) {
+      assert.equal(e.message, NAME+' is not gently stubbed');
+    }
+  })();
+});
+
+test(function _stubFn() {
+  var OBJ1 = {toString: function() {return '[OBJ 1]'}}
+    , OBJ2 = {toString: function() {return '[OBJ 2]'}, foo: function () {return 'bar';}}
+    , SELF = {};
+
+  gently.expect(OBJ1, 'foo', function(x) {
+    assert.strictEqual(this, SELF);
+    return x * 2;
+  });
+
+  assert.equal(gently._stubFn(SELF, OBJ1, 'foo', 'dummy_name', [5]), 10);
+
+  (function testAutorestore() {
+    assert.equal(OBJ2.foo(), 'bar');
+
+    gently.expect(OBJ2, 'foo', function() {
+      return 'stubbed foo';
+    });
+
+    gently.expect(OBJ2, 'foo', function() {
+      return "didn't restore yet";
+    });
+
+    assert.equal(gently._stubFn(SELF, OBJ2, 'foo', 'dummy_name', []), 'stubbed foo');
+    assert.equal(gently._stubFn(SELF, OBJ2, 'foo', 'dummy_name', []), "didn't restore yet");
+    assert.equal(OBJ2.foo(), 'bar');
+    assert.deepEqual(gently.expectations, []);
+  })();
+
+  (function testNoMoreCallExpected() {
+    try {
+      gently._stubFn(SELF, OBJ1, 'foo', 'dummy_name', [5]);
+      assert.ok(false, 'throw needs to happen');
+    } catch (e) {
+      assert.equal(e.message, 'Unexpected call to dummy_name, no call was expected');
+    }
+  })();
+
+  (function testDifferentCallExpected() {
+    gently.expect(OBJ2, 'bar');
+    try {
+      gently._stubFn(SELF, OBJ1, 'foo', 'dummy_name', [5]);
+      assert.ok(false, 'throw needs to happen');
+    } catch (e) {
+      assert.equal(e.message, 'Unexpected call to dummy_name, expected call to '+gently._name(OBJ2, 'bar'));
+    }
+
+    assert.equal(gently.expectations.length, 1);
+  })();
+
+  (function testNoMockCallback() {
+    OBJ2.bar();
+    assert.equal(gently.expectations.length, 0);
+  })();
+});
+
+test(function stub() {
+  var LOCATION = './my_class';
+
+  (function testRegular() {
+    var Stub = gently.stub(LOCATION);
+    assert.ok(Stub instanceof Function);
+    assert.strictEqual(gently.hijacked[LOCATION], Stub);
+    assert.ok(Stub['new'] instanceof Function);
+    assert.equal(Stub.toString(), 'require('+JSON.stringify(LOCATION)+')');
+
+    (function testConstructor() {
+      var newCalled = 0
+        , STUB
+        , ARGS = ['foo', 'bar'];
+
+      Stub['new'] = function(a, b) {
+        assert.equal(a, ARGS[0]);
+        assert.equal(b, ARGS[1]);
+        newCalled++;
+        STUB = this;
+      };
+
+      var stub = new Stub(ARGS[0], ARGS[1]);
+      assert.strictEqual(stub, STUB);
+      assert.equal(newCalled, 1);
+      assert.equal(stub.toString(), 'require('+JSON.stringify(LOCATION)+')');
+    })();
+
+    (function testUseReturnValueAsInstance() {
+      var R = {};
+
+      Stub['new'] = function() {
+        return R;
+      };
+
+      var stub = new Stub();
+      assert.strictEqual(stub, R);
+
+    })();
+  })();
+
+  var EXPORTS_NAME = 'MyClass';
+  test(function testExportsName() {
+    var Stub = gently.stub(LOCATION, EXPORTS_NAME);
+    assert.strictEqual(gently.hijacked[LOCATION][EXPORTS_NAME], Stub);
+    assert.equal(Stub.toString(), 'require('+JSON.stringify(LOCATION)+').'+EXPORTS_NAME);
+
+    (function testConstructor() {
+      var stub = new Stub();
+      assert.equal(Stub.toString(), 'require('+JSON.stringify(LOCATION)+').'+EXPORTS_NAME);
+    })();
+  });
+});
+
+test(function hijack() {
+  var LOCATION = './foo'
+    , REQUIRE_CALLS = 0
+    , EXPORTS = {}
+    , REQUIRE = function() {
+        REQUIRE_CALLS++;
+        return EXPORTS;
+      };
+
+  var hijackedRequire = gently.hijack(REQUIRE);
+  hijackedRequire(LOCATION);
+  assert.strictEqual(gently.hijacked[LOCATION], EXPORTS);
+
+  assert.equal(REQUIRE_CALLS, 1);
+
+  // make sure we are caching the hijacked module
+  hijackedRequire(LOCATION);
+  assert.equal(REQUIRE_CALLS, 1);
+});
+
+test(function verify() {
+  var OBJ = {toString: function() {return '[OBJ]'}};
+  gently.verify();
+
+  gently.expect(OBJ, 'foo');
+  try {
+    gently.verify();
+    assert.ok(false, 'throw needs to happen');
+  } catch (e) {
+    assert.equal(e.message, 'Expected call to [OBJ].foo() did not happen');
+  }
+
+  try {
+    gently.verify('foo');
+    assert.ok(false, 'throw needs to happen');
+  } catch (e) {
+    assert.equal(e.message, 'Expected call to [OBJ].foo() did not happen (foo)');
+  }
+});
+
+test(function processExit() {
+  var verifyCalled = 0;
+  gently.verify = function(msg) {
+    verifyCalled++;
+    assert.equal(msg, 'process exit');
+  };
+
+  process.emit('exit');
+  assert.equal(verifyCalled, 1);
+});
+
+test(function _name() {
+  (function testNamedClass() {
+    function Foo() {};
+    var foo = new Foo();
+    assert.equal(gently._name(foo, 'bar'), '[Foo].bar()');
+  })();
+
+  (function testToStringPreference() {
+    function Foo() {};
+    Foo.prototype.toString = function() {
+      return '[Superman 123]';
+    };
+    var foo = new Foo();
+    assert.equal(gently._name(foo, 'bar'), '[Superman 123].bar()');
+  })();
+
+  (function testUnamedClass() {
+    var Foo = function() {};
+    var foo = new Foo();
+    assert.equal(gently._name(foo, 'bar'), foo.toString()+'.bar()');
+  })();
+
+  (function testNamedClosure() {
+    function myClosure() {};
+    assert.equal(gently._name(null, null, myClosure), myClosure.name+'()');
+  })();
+
+  (function testUnamedClosure() {
+    var myClosure = function() {2+2 == 5};
+    assert.equal(gently._name(null, null, myClosure), '>> '+myClosure.toString()+' <<');
+  })();
+});
+
+test(function verifyExpectNone() {
+  var OBJ = {toString: function() {return '[OBJ]'}};
+  gently.verify();
+
+  gently.expect(OBJ, 'foo', 0);
+  try {
+    gently.verify();
+  } catch (e) {
+    assert.fail('Exception should not have been thrown');
+  }
+});
\ No newline at end of file
diff --git a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/package.json b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/package.json
index 4cf5f2d..d2cec1f 100644
--- a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/package.json
+++ b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/package.json
@@ -1,6 +1,6 @@
 {
   "name": "formidable",
-  "version": "1.0.9",
+  "version": "1.0.11",
   "dependencies": {},
   "devDependencies": {
     "gently": "0.8.0",
@@ -18,5 +18,8 @@
   },
   "engines": {
     "node": "*"
-  }
-}
\ No newline at end of file
+  },
+  "optionalDependencies": {},
+  "_id": "formidable@1.0.11",
+  "_from": "formidable@1.0.x"
+}
diff --git a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-incoming-form.js b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-incoming-form.js
index b64df8b..84de439 100644
--- a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-incoming-form.js
+++ b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-incoming-form.js
@@ -2,6 +2,7 @@
 var MultipartParserStub = GENTLY.stub('./multipart_parser', 'MultipartParser'),
     QuerystringParserStub = GENTLY.stub('./querystring_parser', 'QuerystringParser'),
     EventEmitterStub = GENTLY.stub('events', 'EventEmitter'),
+    StreamStub = GENTLY.stub('stream', 'Stream'),
     FileStub = GENTLY.stub('./file');
 
 var formidable = require(common.lib + '/index'),
@@ -414,7 +415,7 @@
 
   (function testRegularField() {
     var PART;
-    gently.expect(EventEmitterStub, 'new', function() {
+    gently.expect(StreamStub, 'new', function() {
       PART = this;
     });
 
@@ -456,7 +457,7 @@
 
   (function testFileField() {
     var PART;
-    gently.expect(EventEmitterStub, 'new', function() {
+    gently.expect(StreamStub, 'new', function() {
       PART = this;
     });
 
diff --git a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/system/test-multi-video-upload.js b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/system/test-multi-video-upload.js
index fcfdb94..479e46d 100644
--- a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/system/test-multi-video-upload.js
+++ b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/system/test-multi-video-upload.js
@@ -12,6 +12,7 @@
       uploads = {};
 
   form.uploadDir = TEST_TMP;
+  form.hash = 'sha1';
   form.parse(req);
 
   form
@@ -41,10 +42,12 @@
       assert.ok(uploads['shortest_video.flv']);
       assert.ok(uploads['shortest_video.flv'].ended);
       assert.ok(uploads['shortest_video.flv'].progress.length > 3);
+      assert.equal(uploads['shortest_video.flv'].file.hash, 'd6a17616c7143d1b1438ceeef6836d1a09186b3a');
       assert.equal(uploads['shortest_video.flv'].progress.slice(-1), uploads['shortest_video.flv'].file.length);
       assert.ok(uploads['shortest_video.mp4']);
       assert.ok(uploads['shortest_video.mp4'].ended);
       assert.ok(uploads['shortest_video.mp4'].progress.length > 3);
+      assert.equal(uploads['shortest_video.mp4'].file.hash, '937dfd4db263f4887ceae19341dcc8d63bcd557f');
 
       server.close();
       res.writeHead(200);
diff --git a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/test/unit/test-incoming-form.js b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/test/unit/test-incoming-form.js
index bcf61d7..fe2ac1c 100644
--- a/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/test/unit/test-incoming-form.js
+++ b/weinre.server/node_modules/express/node_modules/connect/node_modules/formidable/test/unit/test-incoming-form.js
@@ -4,7 +4,7 @@
 var IncomingForm = common.require('incoming_form').IncomingForm;
 var path         = require('path');
 
-var from;
+var form;
 test('IncomingForm', {
   before: function() {
     form = new IncomingForm();
diff --git a/weinre.server/node_modules/express/node_modules/connect/package.json b/weinre.server/node_modules/express/node_modules/connect/package.json
index f9c43d5..50ef2b3 100644
--- a/weinre.server/node_modules/express/node_modules/connect/package.json
+++ b/weinre.server/node_modules/express/node_modules/connect/package.json
@@ -1,11 +1,23 @@
 {
   "name": "connect",
-  "version": "1.8.5",
+  "version": "1.9.1",
   "description": "High performance middleware framework",
-  "keywords": ["framework", "web", "middleware", "connect", "rack"],
-  "repository": "git://github.com/senchalabs/connect.git",
-  "author": "TJ Holowaychuk <tj@vision-media.ca> (http://tjholowaychuk.com)",
-  "repository": "git://github.com/senchalabs/connect",
+  "keywords": [
+    "framework",
+    "web",
+    "middleware",
+    "connect",
+    "rack"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/senchalabs/connect"
+  },
+  "author": {
+    "name": "TJ Holowaychuk",
+    "email": "tj@vision-media.ca",
+    "url": "http://tjholowaychuk.com"
+  },
   "dependencies": {
     "qs": ">= 0.4.0",
     "mime": ">= 0.0.1",
@@ -20,6 +32,10 @@
     "ejs": "0.4.3",
     "should": "0.3.2"
   },
+  "publishConfig": {
+    "tag": "1.8"
+  },
   "main": "index",
-  "engines": { "node": ">= 0.4.1 < 0.7.0" }
-}
\ No newline at end of file
+  "_id": "connect@1.9.1",
+  "_from": "connect@1.x"
+}
diff --git a/weinre.server/node_modules/express/node_modules/connect/test.js b/weinre.server/node_modules/express/node_modules/connect/test.js
index a1e1d55..ff020e1 100644
--- a/weinre.server/node_modules/express/node_modules/connect/test.js
+++ b/weinre.server/node_modules/express/node_modules/connect/test.js
@@ -1,52 +1,30 @@
-
-var connect = require('./')
-  , http = require('http')
-  , RedisStore = require('connect-redis')(connect);
-
+var connect = require('./');
 var app = connect();
-app.use(connect.cookieParser('fucj'));
-app.use(connect.session({store:new RedisStore}));
+
+function delay(ms) {
+  return function(req, res, next){
+    setTimeout(next, ms);
+  }
+}
+
+var set = true
+setTimeout(function(){
+  set = false;
+  console.log('setting');
+}, 3000);
+app.use(connect.logger('dev'));
+app.use(connect.staticCache());
 app.use(function(req, res, next){
-  req.session.views = (req.session.views || 0) + 1;
-  res.writeHead(200, {"Content-Type": "text/plain"});
-  res.end("You've viewed this page "+req.session.views+" times.");
-})
+  if (set) {
+    console.log('setting cookie');
+    res.setHeader('Set-Cookie', 'name=tj');
+  }
+  next();
+});
+app.use(connect.static(__dirname, { maxAge: 100000 }));
 
-http.createServer(app).listen(3000);
+app.listen(3000);
 
-
-// var set = RedisStore.prototype.set;
-// 
-// function slow(sid){
-//   console.log('%s saving', sid);
-//   var args = arguments;
-//   setTimeout(function(self){
-//     console.log('%s saved', sid);
-//     set.apply(self, args);
-//   }, 2000, this);
-// };
-// 
-// http.createServer(connect()
-//   .use(connect.logger('dev'))
-//   .use(connect.cookieParser('keyboard cat'))
-//   .use(connect.session({ store: new RedisStore }))
-//   .use(function(req, res, next){
-//     var sess = req.session;
-//     switch (req.url) {
-//       case '/foo.js':
-//         console.log('%s foo.js sid', sess.id);
-//         RedisStore.prototype.set = set;
-//         res.end('data');
-//         break;
-//       default:
-//         console.log('%s html sid', sess.id);
-//         RedisStore.prototype.set = slow;
-//         res.setHeader('Content-Type', 'html');
-//         res.write('<html><head><script src="/foo.js"></script></head><body>');
-//         setTimeout(function(){
-//           res.end('</body></html>');
-//         }, 1000);
-//     }
-//   })).listen(3000);
-// 
-// console.log('port 3000');
\ No newline at end of file
+// 8500 without
+// 8300 with
+// 6100 with cookie 7500 without signed check
\ No newline at end of file
diff --git a/weinre.server/node_modules/express/node_modules/mime/README.md b/weinre.server/node_modules/express/node_modules/mime/README.md
index d8b66a8..a157de1 100644
--- a/weinre.server/node_modules/express/node_modules/mime/README.md
+++ b/weinre.server/node_modules/express/node_modules/mime/README.md
@@ -1,6 +1,6 @@
 # mime
 
-Comprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community.
+Support for mapping between file extensions and MIME types.  This module uses the latest version of the Apache "mime.types" file (maps over 620 types to 800+ extensions).  It is also trivially easy to add your own types and extensions, should you need to do that.
 
 ## Install
 
@@ -11,36 +11,30 @@
 ## API - Queries
 
 ### mime.lookup(path)
-Get the mime type associated with a file. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.').  E.g.
+Get the mime type associated with a file. This is method is case-insensitive. Everything in path up to and including the last '/' or '.' is ignored, so you can pass it paths, filenames, or extensions, like so:
 
     var mime = require('mime');
 
     mime.lookup('/path/to/file.txt');         // => 'text/plain'
     mime.lookup('file.txt');                  // => 'text/plain'
-    mime.lookup('.TXT');                      // => 'text/plain'
+    mime.lookup('.txt');                      // => 'text/plain'
     mime.lookup('htm');                       // => 'text/html'
 
-### mime.extension(type)
-Get the default extension for `type`
+### mime.extension(type) - lookup the default extension for type
 
     mime.extension('text/html');                 // => 'html'
     mime.extension('application/octet-stream');  // => 'bin'
 
-### mime.charsets.lookup()
-
-Map mime-type to charset
+### mime.charsets.lookup() - map mime-type to charset
 
     mime.charsets.lookup('text/plain');        // => 'UTF-8'
 
 (The logic for charset lookups is pretty rudimentary.  Feel free to suggest improvements.)
 
-## API - Defining Custom Types
+## API - Customizing
 
 The following APIs allow you to add your own type mappings within your project.  If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/bentomas/node-mime/wiki/Requesting-New-Types).
-
-### mime.define()
-
-Add custom mime/extension mappings
+### mime.define() - Add custom mime/extension mappings
 
     mime.define({
         'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'],
@@ -49,15 +43,8 @@
     });
 
     mime.lookup('x-sft');                 // => 'text/x-some-format'
-
-The first entry in the extensions array is returned by `mime.extension()`. E.g.
-
     mime.extension('text/x-some-format'); // => 'x-sf'
 
-### mime.load(filepath)
-
-Load mappings from an Apache ".types" format file
+### mime.load(filepath) - Load mappings from an Apache ".types" format file
 
     mime.load('./my_project.types');
-
-The .types file format is simple -  See the `types` dir for examples.
diff --git a/weinre.server/node_modules/express/node_modules/mime/mime.js b/weinre.server/node_modules/express/node_modules/mime/mime.js
index 64dbeec..5fac753 100644
--- a/weinre.server/node_modules/express/node_modules/mime/mime.js
+++ b/weinre.server/node_modules/express/node_modules/mime/mime.js
@@ -2,11 +2,11 @@
     fs = require('fs');
 
 var mime = module.exports = {
-  // Map of extension to mime type
-  types: Object.create(null),
+  /** Map of extension to mime type */
+  types: {},
 
-  // Map of mime type to extension
-  extensions :Object.create(null),
+  /** Map of mime type to extension */
+  extensions :{},
 
   /**
    * Define mimetype -> extension mappings.  Each key is a mime-type that maps
@@ -60,8 +60,7 @@
    */
   lookup: function(path, fallback) {
     var ext = path.replace(/.*[\.\/]/, '').toLowerCase();
-
-    return mime.types[ext] || fallback || mime.default_type
+    return mime.types[ext] || fallback || mime.default_type;
   },
 
   /**
diff --git a/weinre.server/node_modules/express/node_modules/mime/package.json b/weinre.server/node_modules/express/node_modules/mime/package.json
index 31d4e20..0c6ca5a 100644
--- a/weinre.server/node_modules/express/node_modules/mime/package.json
+++ b/weinre.server/node_modules/express/node_modules/mime/package.json
@@ -1,22 +1,36 @@
 {
   "author": {
     "name": "Robert Kieffer",
-    "url": "http://github.com/broofa",
-    "email": "robert@broofa.com"
+    "email": "robert@broofa.com",
+    "url": "http://github.com/broofa"
   },
   "contributors": [
     {
       "name": "Benjamin Thomas",
-      "url": "http://github.com/bentomas",
-      "email": "benjamin@benjaminthomas.org"
+      "email": "benjamin@benjaminthomas.org",
+      "url": "http://github.com/bentomas"
     }
   ],
   "dependencies": {},
   "description": "A comprehensive library for mime-type mapping",
-  "devDependencies": {},
-  "keywords": ["util", "mime"],
+  "devDependencies": {
+    "async_testing": ""
+  },
+  "keywords": [
+    "util",
+    "mime"
+  ],
   "main": "mime.js",
   "name": "mime",
-  "repository": {"url": "http://github.com/bentomas/node-mime", "type": "git"},
-  "version": "1.2.5"
+  "repository": {
+    "url": "http://github.com/bentomas/node-mime",
+    "type": "git"
+  },
+  "version": "1.2.4",
+  "readme": "# mime\n\nSupport for mapping between file extensions and MIME types.  This module uses the latest version of the Apache \"mime.types\" file (maps over 620 types to 800+ extensions).  It is also trivially easy to add your own types and extensions, should you need to do that.\n\n## Install\n\nInstall with [npm](http://github.com/isaacs/npm):\n\n    npm install mime\n\n## API - Queries\n\n### mime.lookup(path)\nGet the mime type associated with a file. This is method is case-insensitive. Everything in path up to and including the last '/' or '.' is ignored, so you can pass it paths, filenames, or extensions, like so:\n\n    var mime = require('mime');\n\n    mime.lookup('/path/to/file.txt');         // => 'text/plain'\n    mime.lookup('file.txt');                  // => 'text/plain'\n    mime.lookup('.txt');                      // => 'text/plain'\n    mime.lookup('htm');                       // => 'text/html'\n\n### mime.extension(type) - lookup the default extension for type\n\n    mime.extension('text/html');                 // => 'html'\n    mime.extension('application/octet-stream');  // => 'bin'\n\n### mime.charsets.lookup() - map mime-type to charset\n\n    mime.charsets.lookup('text/plain');        // => 'UTF-8'\n\n(The logic for charset lookups is pretty rudimentary.  Feel free to suggest improvements.)\n\n## API - Customizing\n\nThe following APIs allow you to add your own type mappings within your project.  If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/bentomas/node-mime/wiki/Requesting-New-Types).\n### mime.define() - Add custom mime/extension mappings\n\n    mime.define({\n        'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'],\n        'application/x-my-type': ['x-mt', 'x-mtt'],\n        // etc ...\n    });\n\n    mime.lookup('x-sft');                 // => 'text/x-some-format'\n    mime.extension('text/x-some-format'); // => 'x-sf'\n\n### mime.load(filepath) - Load mappings from an Apache \".types\" format file\n\n    mime.load('./my_project.types');\n",
+  "_id": "mime@1.2.4",
+  "dist": {
+    "shasum": "708279b96036d1c56908f9d9ad04cae489690c19"
+  },
+  "_from": "mime@1.2.4"
 }
diff --git a/weinre.server/node_modules/express/node_modules/mime/test.js b/weinre.server/node_modules/express/node_modules/mime/test.js
index 8a8a5b1..b904895 100644
--- a/weinre.server/node_modules/express/node_modules/mime/test.js
+++ b/weinre.server/node_modules/express/node_modules/mime/test.js
@@ -1,53 +1,79 @@
 /**
+ * Requires the async_testing module
+ *
  * Usage: node test.js
  */
-
 var mime = require('./mime');
-var assert = require('assert');
+exports["test mime lookup"] = function(test) {
+  // easy
+  test.equal('text/plain', mime.lookup('text.txt'));
 
-function eq(a, b) {
-  console.log('Test: ' + a + ' === ' + b);
-  assert.strictEqual.apply(null, arguments);
+  // hidden file or multiple periods
+  test.equal('text/plain', mime.lookup('.text.txt'));
+
+  // just an extension
+  test.equal('text/plain', mime.lookup('.txt'));
+
+  // just an extension without a dot
+  test.equal('text/plain', mime.lookup('txt'));
+
+  // default
+  test.equal('application/octet-stream', mime.lookup('text.nope'));
+
+  // fallback
+  test.equal('fallback', mime.lookup('text.fallback', 'fallback'));
+
+  test.finish();
+};
+
+exports["test extension lookup"] = function(test) {
+  // easy
+  test.equal('txt', mime.extension(mime.types.text));
+  test.equal('html', mime.extension(mime.types.htm));
+  test.equal('bin', mime.extension('application/octet-stream'));
+
+  test.finish();
+};
+
+exports["test mime lookup uppercase"] = function(test) {
+  // easy
+  test.equal('text/plain', mime.lookup('TEXT.TXT'));
+
+  // just an extension
+  test.equal('text/plain', mime.lookup('.TXT'));
+
+  // just an extension without a dot
+  test.equal('text/plain', mime.lookup('TXT'));
+
+  // default
+  test.equal('application/octet-stream', mime.lookup('TEXT.NOPE'));
+
+  // fallback
+  test.equal('fallback', mime.lookup('TEXT.FALLBACK', 'fallback'));
+
+  test.finish();
+};
+
+exports["test custom types"] = function(test) {
+  test.equal('application/octet-stream', mime.lookup('file.buffer'));
+  test.equal('audio/mp4', mime.lookup('file.m4a'));
+
+  test.finish();
+};
+
+exports["test charset lookup"] = function(test) {
+  // easy
+  test.equal('UTF-8', mime.charsets.lookup('text/plain'));
+
+  // none
+  test.ok(typeof mime.charsets.lookup(mime.types.js) == 'undefined');
+
+  // fallback
+  test.equal('fallback', mime.charsets.lookup('application/octet-stream', 'fallback'));
+
+  test.finish();
+};
+
+if (module == require.main) {
+  require('async_testing').run(__filename, process.ARGV);
 }
-
-console.log(Object.keys(mime.extensions).length + ' types');
-console.log(Object.keys(mime.types).length + ' extensions\n');
-
-//
-// Test mime lookups
-//
-
-eq('text/plain', mime.lookup('text.txt'));
-eq('text/plain', mime.lookup('.text.txt'));
-eq('text/plain', mime.lookup('.txt'));
-eq('text/plain', mime.lookup('txt'));
-eq('application/octet-stream', mime.lookup('text.nope'));
-eq('fallback', mime.lookup('text.fallback', 'fallback'));
-eq('application/octet-stream', mime.lookup('constructor'));
-eq('text/plain', mime.lookup('TEXT.TXT'));
-
-//
-// Test extensions
-//
-
-eq('txt', mime.extension(mime.types.text));
-eq('html', mime.extension(mime.types.htm));
-eq('bin', mime.extension('application/octet-stream'));
-eq(undefined, mime.extension('constructor'));
-
-//
-// Test node types
-//
-
-eq('application/octet-stream', mime.lookup('file.buffer'));
-eq('audio/mp4', mime.lookup('file.m4a'));
-
-//
-// Test charsets
-//
-
-eq('UTF-8', mime.charsets.lookup('text/plain'));
-eq(undefined, mime.charsets.lookup(mime.types.js));
-eq('fallback', mime.charsets.lookup('application/octet-stream', 'fallback'));
-
-console.log('\nOK');
diff --git a/weinre.server/node_modules/express/node_modules/mime/types/mime.types b/weinre.server/node_modules/express/node_modules/mime/types/mime.types
index b3cae2e..6a90929 100644
--- a/weinre.server/node_modules/express/node_modules/mime/types/mime.types
+++ b/weinre.server/node_modules/express/node_modules/mime/types/mime.types
@@ -26,9 +26,7 @@
 # application/auth-policy+xml
 # application/batch-smtp
 # application/beep+xml
-# application/calendar+xml
 # application/cals-1840
-# application/ccmp+xml
 application/ccxml+xml				ccxml
 application/cdmi-capability			cdmia
 application/cdmi-container			cdmic
@@ -85,7 +83,6 @@
 # application/index.obj
 # application/index.response
 # application/index.vnd
-application/inkml+xml				ink inkml
 # application/iotp
 application/ipfix				ipfix
 # application/ipp
@@ -150,7 +147,6 @@
 application/oebps-package+xml			opf
 application/ogg					ogx
 application/onenote				onetoc onetoc2 onetmp onepkg
-application/oxps				oxps
 # application/parityfec
 application/patch-ops-error+xml			xer
 application/pdf					pdf
@@ -189,10 +185,6 @@
 # application/riscos
 # application/rlmi+xml
 application/rls-services+xml			rs
-application/rpki-ghostbusters			gbr
-application/rpki-manifest			mft
-application/rpki-roa				roa
-# application/rpki-updown
 application/rsd+xml				rsd
 application/rss+xml				rss
 application/rtf					rtf
@@ -246,7 +238,6 @@
 application/timestamped-data			tsd
 # application/tve-trigger
 # application/ulpfec
-# application/vcard+xml
 # application/vemmi
 # application/vividence.scriptfile
 # application/vnd.3gpp.bsf+xml
@@ -284,7 +275,6 @@
 application/vnd.apple.mpegurl			m3u8
 # application/vnd.arastra.swi
 application/vnd.aristanetworks.swi		swi
-application/vnd.astraea-software.iota		iota
 application/vnd.audiograph			aep
 # application/vnd.autopackage
 # application/vnd.avistar+xml
@@ -305,7 +295,6 @@
 application/vnd.clonk.c4group			c4g c4d c4f c4p c4u
 application/vnd.cluetrust.cartomobile-config		c11amc
 application/vnd.cluetrust.cartomobile-config-pkg	c11amz
-# application/vnd.collection+json
 # application/vnd.commerce-battelle
 application/vnd.commonspace			csp
 application/vnd.contact.cmsg			cdbcmsg
@@ -323,7 +312,6 @@
 application/vnd.cups-ppd			ppd
 # application/vnd.cups-raster
 # application/vnd.cups-raw
-# application/vnd.curl
 application/vnd.curl.car			car
 application/vnd.curl.pcurl			pcurl
 # application/vnd.cybank
@@ -331,7 +319,6 @@
 application/vnd.dece.data			uvf uvvf uvd uvvd
 application/vnd.dece.ttml+xml			uvt uvvt
 application/vnd.dece.unspecified		uvx uvvx
-application/vnd.dece.zip			uvz uvvz
 application/vnd.denovo.fcselayout-link		fe_launch
 # application/vnd.dir-bi.plate-dl-nosuffix
 application/vnd.dna				dna
@@ -371,7 +358,6 @@
 # application/vnd.ecowin.seriesupdate
 # application/vnd.emclient.accessrequest+xml
 application/vnd.enliven				nml
-# application/vnd.eprints.data+xml
 application/vnd.epson.esf			esf
 application/vnd.epson.msf			msf
 application/vnd.epson.quickanime		qam
@@ -447,7 +433,6 @@
 application/vnd.groove-tool-message		gtm
 application/vnd.groove-tool-template		tpl
 application/vnd.groove-vcard			vcg
-# application/vnd.hal+json
 application/vnd.hal+xml				hal
 application/vnd.handheld-entertainment+xml	zmm
 application/vnd.hbci				hbci
@@ -603,7 +588,6 @@
 # application/vnd.music-niff
 application/vnd.musician			mus
 application/vnd.muvee.style			msty
-application/vnd.mynfc				taglet
 # application/vnd.ncd.control
 # application/vnd.ncd.reference
 # application/vnd.nervana
@@ -652,7 +636,6 @@
 application/vnd.oasis.opendocument.text-template	ott
 application/vnd.oasis.opendocument.text-web		oth
 # application/vnd.obn
-# application/vnd.oftn.l10n+json
 # application/vnd.oipf.contentaccessdownload+xml
 # application/vnd.oipf.contentaccessstreaming+xml
 # application/vnd.oipf.cspg-hexbinary
@@ -682,15 +665,12 @@
 # application/vnd.oma.bcast.sprov+xml
 # application/vnd.oma.bcast.stkm
 # application/vnd.oma.cab-address-book+xml
-# application/vnd.oma.cab-feature-handler+xml
 # application/vnd.oma.cab-pcc+xml
-# application/vnd.oma.cab-user-prefs+xml
 # application/vnd.oma.dcd
 # application/vnd.oma.dcdc
 application/vnd.oma.dd2+xml			dd2
 # application/vnd.oma.drm.risd+xml
 # application/vnd.oma.group-usage-list+xml
-# application/vnd.oma.pal+xml
 # application/vnd.oma.poc.detailed-progress-report+xml
 # application/vnd.oma.poc.final-report+xml
 # application/vnd.oma.poc.groups+xml
@@ -877,7 +857,6 @@
 application/vnd.stardivision.math		smf
 application/vnd.stardivision.writer		sdw vor
 application/vnd.stardivision.writer-global	sgl
-application/vnd.stepmania.package		smzip
 application/vnd.stepmania.stepchart		sm
 # application/vnd.street-stream
 application/vnd.sun.xml.calc			sxc
@@ -901,7 +880,6 @@
 # application/vnd.syncml.dm.notification
 # application/vnd.syncml.ds.notification
 application/vnd.tao.intent-module-archive	tao
-application/vnd.tcpdump.pcap			pcap cap dmp
 application/vnd.tmobile-livetv			tmo
 application/vnd.trid.tpt			tpt
 application/vnd.triscape.mxs			mxs
@@ -971,7 +949,6 @@
 # application/vnd.yamaha.remote-setup
 application/vnd.yamaha.smaf-audio		saf
 application/vnd.yamaha.smaf-phrase		spf
-# application/vnd.yamaha.through-ngn
 # application/vnd.yamaha.tunnel-udpencap
 application/vnd.yellowriver-custom-menu		cmp
 application/vnd.zul				zir zirz
@@ -1119,7 +1096,6 @@
 # audio/dsr-es202050
 # audio/dsr-es202211
 # audio/dsr-es202212
-# audio/dv
 # audio/dvi4
 # audio/eac3
 # audio/evrc
@@ -1133,7 +1109,6 @@
 # audio/evrcwb0
 # audio/evrcwb1
 # audio/example
-# audio/fwdred
 # audio/g719
 # audio/g722
 # audio/g7221
@@ -1151,7 +1126,6 @@
 # audio/gsm-efr
 # audio/gsm-hr-08
 # audio/ilbc
-# audio/ip-mr_v2.5
 # audio/l16
 # audio/l20
 # audio/l24
@@ -1212,7 +1186,6 @@
 audio/vnd.dra					dra
 audio/vnd.dts					dts
 audio/vnd.dts.hd				dtshd
-# audio/vnd.dvb.file				dvb
 # audio/vnd.everad.plj
 # audio/vnd.hns.audio
 audio/vnd.lucent.voice				lvp
@@ -1364,7 +1337,6 @@
 # text/ecmascript
 # text/enriched
 # text/example
-# text/fwdred
 text/html					html htm
 # text/javascript
 text/n3						n3
@@ -1386,14 +1358,12 @@
 text/turtle					ttl
 # text/ulpfec
 text/uri-list					uri uris urls
-text/vcard					vcard
 # text/vnd.abc
 text/vnd.curl					curl
 text/vnd.curl.dcurl				dcurl
 text/vnd.curl.scurl				scurl
 text/vnd.curl.mcurl				mcurl
 # text/vnd.dmclientscript
-text/vnd.dvb.subtitle				sub
 # text/vnd.esmertec.theme-descriptor
 text/vnd.fly					fly
 text/vnd.fmi.flexstor				flx
@@ -1473,7 +1443,6 @@
 # video/vnd.directv.mpeg
 # video/vnd.directv.mpeg-tts
 # video/vnd.dlna.mpeg-tts
-video/vnd.dvb.file				dvb
 video/vnd.fvt					fvt
 # video/vnd.hns.video
 # video/vnd.iptvforum.1dparityfec-1010
diff --git a/weinre.server/node_modules/express/node_modules/mime/types/node.types b/weinre.server/node_modules/express/node_modules/mime/types/node.types
index f7da49f..fdabaa4 100644
--- a/weinre.server/node_modules/express/node_modules/mime/types/node.types
+++ b/weinre.server/node_modules/express/node_modules/mime/types/node.types
@@ -41,8 +41,3 @@
 # Why: See https://github.com/bentomas/node-mime/pull/6
 # Added by: mjrusso
 video/MP2T  ts
-
-# What: The FLAC lossless codec format
-# Why: Streaming and serving FLAC audio
-# Added by: jacobrask
-audio/flac  flac
\ No newline at end of file
diff --git a/weinre.server/node_modules/express/node_modules/mkdirp/.gitignore b/weinre.server/node_modules/express/node_modules/mkdirp/.npmignore
similarity index 100%
rename from weinre.server/node_modules/express/node_modules/mkdirp/.gitignore
rename to weinre.server/node_modules/express/node_modules/mkdirp/.npmignore
diff --git a/weinre.server/node_modules/express/node_modules/mkdirp/README.markdown b/weinre.server/node_modules/express/node_modules/mkdirp/README.markdown
index 0393c4e..b4dd75f 100644
--- a/weinre.server/node_modules/express/node_modules/mkdirp/README.markdown
+++ b/weinre.server/node_modules/express/node_modules/mkdirp/README.markdown
@@ -3,14 +3,14 @@
 
 Like `mkdir -p`, but in node.js!
 
-Example
+example
 =======
 
 pow.js
 ------
     var mkdirp = require('mkdirp');
     
-    mkdirp('/tmp/foo/bar/baz', 0755, function (err) {
+    mkdirp('/tmp/foo/bar/baz', function (err) {
         if (err) console.error(err)
         else console.log('pow!')
     });
@@ -19,3 +19,36 @@
     pow!
 
 And now /tmp/foo/bar/baz exists, huzzah!
+
+methods
+=======
+
+var mkdirp = require('mkdirp');
+
+mkdirp(dir, mode, cb)
+---------------------
+
+Create a new directory and any necessary subdirectories at `dir` with octal
+permission string `mode`.
+
+If `mode` isn't specified, it defaults to `0777 & (~process.umask())`.
+
+mkdirp.sync(dir, mode)
+----------------------
+
+Synchronously create a new directory and any necessary subdirectories at `dir`
+with octal permission string `mode`.
+
+If `mode` isn't specified, it defaults to `0777 & (~process.umask())`.
+
+install
+=======
+
+With [npm](http://npmjs.org) do:
+
+    npm install mkdirp
+
+license
+=======
+
+MIT/X11
diff --git a/weinre.server/node_modules/express/node_modules/mkdirp/examples/pow.js b/weinre.server/node_modules/express/node_modules/mkdirp/examples/pow.js
index 7741462..e692421 100644
--- a/weinre.server/node_modules/express/node_modules/mkdirp/examples/pow.js
+++ b/weinre.server/node_modules/express/node_modules/mkdirp/examples/pow.js
@@ -1,6 +1,6 @@
 var mkdirp = require('mkdirp');
 
-mkdirp('/tmp/foo/bar/baz', 0755, function (err) {
+mkdirp('/tmp/foo/bar/baz', function (err) {
     if (err) console.error(err)
     else console.log('pow!')
 });
diff --git a/weinre.server/node_modules/express/node_modules/mkdirp/index.js b/weinre.server/node_modules/express/node_modules/mkdirp/index.js
index 30e9600..25f43ad 100644
--- a/weinre.server/node_modules/express/node_modules/mkdirp/index.js
+++ b/weinre.server/node_modules/express/node_modules/mkdirp/index.js
@@ -1,20 +1,79 @@
 var path = require('path');
 var fs = require('fs');
 
-var exports = module.exports = function mkdirP (p, mode, f) {
+module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP;
+
+function mkdirP (p, mode, f) {
+    if (typeof mode === 'function' || mode === undefined) {
+        f = mode;
+        mode = 0777 & (~process.umask());
+    }
+    
     var cb = f || function () {};
+    if (typeof mode === 'string') mode = parseInt(mode, 8);
+    p = path.resolve(p);
+
+    fs.mkdir(p, mode, function (er) {
+        if (!er) return cb();
+        switch (er.code) {
+            case 'ENOENT':
+                mkdirP(path.dirname(p), mode, function (er) {
+                    if (er) cb(er);
+                    else mkdirP(p, mode, cb);
+                });
+                break;
+
+            case 'EEXIST':
+                fs.stat(p, function (er2, stat) {
+                    // if the stat fails, then that's super weird.
+                    // let the original EEXIST be the failure reason.
+                    if (er2 || !stat.isDirectory()) cb(er)
+                    else cb();
+                });
+                break;
+
+            default:
+                cb(er);
+                break;
+        }
+    });
+}
+
+mkdirP.sync = function sync (p, mode) {
+    if (mode === undefined) {
+        mode = 0777 & (~process.umask());
+    }
+    
+    if (typeof mode === 'string') mode = parseInt(mode, 8);
     p = path.resolve(p);
     
-    var ps = path.normalize(p).split('/');
-    path.exists(p, function (exists) {
-        if (exists) cb(null);
-        else mkdirP(ps.slice(0,-1).join('/'), mode, function (err) {
-            if (err && err.code !== 'EEXIST') cb(err)
-            else fs.mkdir(p, mode, function (err) {
-                if (err && err.code !== 'EEXIST') cb(err)
-                else cb()
-            });
-        });
-    });
+    try {
+        fs.mkdirSync(p, mode)
+    }
+    catch (err0) {
+        switch (err0.code) {
+            case 'ENOENT' :
+                var err1 = sync(path.dirname(p), mode)
+                if (err1) throw err1;
+                else return sync(p, mode);
+                break;
+            
+            case 'EEXIST' :
+                var stat;
+                try {
+                    stat = fs.statSync(p);
+                }
+                catch (err1) {
+                    throw err0
+                }
+                if (!stat.isDirectory()) throw err0;
+                else return null;
+                break;
+            default :
+                throw err0
+                break;
+        }
+    }
+    
+    return null;
 };
-exports.mkdirp = exports.mkdirP = module.exports;
diff --git a/weinre.server/node_modules/express/node_modules/mkdirp/package.json b/weinre.server/node_modules/express/node_modules/mkdirp/package.json
index f5ceb00..fb0c993 100644
--- a/weinre.server/node_modules/express/node_modules/mkdirp/package.json
+++ b/weinre.server/node_modules/express/node_modules/mkdirp/package.json
@@ -1,23 +1,35 @@
 {
-    "name" : "mkdirp",
-    "description" : "Recursively mkdir, like `mkdir -p`",
-    "version" : "0.0.7",
-    "author" : "James Halliday <mail@substack.net> (http://substack.net)",
-    "main" : "./index",
-    "keywords" : [
-        "mkdir",
-        "directory"
-    ],
-    "repository" : {
-        "type" : "git",
-        "url" : "http://github.com/substack/node-mkdirp.git"
-    },
-    "scripts" : {
-        "test" : "node node_modules/tap/bin/tap.js test/*.js"
-    },
-    "devDependencies" : {
-        "tap" : "0.0.x"
-    },
-    "license" : "MIT/X11",
-    "engines": { "node": "*" }
+  "name": "mkdirp",
+  "description": "Recursively mkdir, like `mkdir -p`",
+  "version": "0.3.0",
+  "author": {
+    "name": "James Halliday",
+    "email": "mail@substack.net",
+    "url": "http://substack.net"
+  },
+  "main": "./index",
+  "keywords": [
+    "mkdir",
+    "directory"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "http://github.com/substack/node-mkdirp.git"
+  },
+  "scripts": {
+    "test": "tap test/*.js"
+  },
+  "devDependencies": {
+    "tap": "0.0.x"
+  },
+  "license": "MIT/X11",
+  "engines": {
+    "node": "*"
+  },
+  "readme": "mkdirp\n======\n\nLike `mkdir -p`, but in node.js!\n\nexample\n=======\n\npow.js\n------\n    var mkdirp = require('mkdirp');\n    \n    mkdirp('/tmp/foo/bar/baz', function (err) {\n        if (err) console.error(err)\n        else console.log('pow!')\n    });\n\nOutput\n    pow!\n\nAnd now /tmp/foo/bar/baz exists, huzzah!\n\nmethods\n=======\n\nvar mkdirp = require('mkdirp');\n\nmkdirp(dir, mode, cb)\n---------------------\n\nCreate a new directory and any necessary subdirectories at `dir` with octal\npermission string `mode`.\n\nIf `mode` isn't specified, it defaults to `0777 & (~process.umask())`.\n\nmkdirp.sync(dir, mode)\n----------------------\n\nSynchronously create a new directory and any necessary subdirectories at `dir`\nwith octal permission string `mode`.\n\nIf `mode` isn't specified, it defaults to `0777 & (~process.umask())`.\n\ninstall\n=======\n\nWith [npm](http://npmjs.org) do:\n\n    npm install mkdirp\n\nlicense\n=======\n\nMIT/X11\n",
+  "_id": "mkdirp@0.3.0",
+  "dist": {
+    "shasum": "d42b304feca2923700b59953afc6b802be335daa"
+  },
+  "_from": "mkdirp@0.3.0"
 }
diff --git a/weinre.server/node_modules/express/node_modules/mkdirp/test/chmod.js b/weinre.server/node_modules/express/node_modules/mkdirp/test/chmod.js
new file mode 100644
index 0000000..520dcb8
--- /dev/null
+++ b/weinre.server/node_modules/express/node_modules/mkdirp/test/chmod.js
@@ -0,0 +1,38 @@
+var mkdirp = require('../').mkdirp;
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+var ps = [ '', 'tmp' ];
+
+for (var i = 0; i < 25; i++) {
+    var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    ps.push(dir);
+}
+
+var file = ps.join('/');
+
+test('chmod-pre', function (t) {
+    var mode = 0744
+    mkdirp(file, mode, function (er) {
+        t.ifError(er, 'should not error');
+        fs.stat(file, function (er, stat) {
+            t.ifError(er, 'should exist');
+            t.ok(stat && stat.isDirectory(), 'should be directory');
+            t.equal(stat && stat.mode & 0777, mode, 'should be 0744');
+            t.end();
+        });
+    });
+});
+
+test('chmod', function (t) {
+    var mode = 0755
+    mkdirp(file, mode, function (er) {
+        t.ifError(er, 'should not error');
+        fs.stat(file, function (er, stat) {
+            t.ifError(er, 'should exist');
+            t.ok(stat && stat.isDirectory(), 'should be directory');
+            t.end();
+        });
+    });
+});
diff --git a/weinre.server/node_modules/express/node_modules/mkdirp/test/clobber.js b/weinre.server/node_modules/express/node_modules/mkdirp/test/clobber.js
new file mode 100644
index 0000000..0eb7099
--- /dev/null
+++ b/weinre.server/node_modules/express/node_modules/mkdirp/test/clobber.js
@@ -0,0 +1,37 @@
+var mkdirp = require('../').mkdirp;
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+var ps = [ '', 'tmp' ];
+
+for (var i = 0; i < 25; i++) {
+    var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    ps.push(dir);
+}
+
+var file = ps.join('/');
+
+// a file in the way
+var itw = ps.slice(0, 3).join('/');
+
+
+test('clobber-pre', function (t) {
+    console.error("about to write to "+itw)
+    fs.writeFileSync(itw, 'I AM IN THE WAY, THE TRUTH, AND THE LIGHT.');
+
+    fs.stat(itw, function (er, stat) {
+        t.ifError(er)
+        t.ok(stat && stat.isFile(), 'should be file')
+        t.end()
+    })
+})
+
+test('clobber', function (t) {
+    t.plan(2);
+    mkdirp(file, 0755, function (err) {
+        t.ok(err);
+        t.equal(err.code, 'ENOTDIR');
+        t.end();
+    });
+});
diff --git a/weinre.server/node_modules/express/node_modules/mkdirp/test/perm.js b/weinre.server/node_modules/express/node_modules/mkdirp/test/perm.js
new file mode 100644
index 0000000..23a7abb
--- /dev/null
+++ b/weinre.server/node_modules/express/node_modules/mkdirp/test/perm.js
@@ -0,0 +1,32 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+test('async perm', function (t) {
+    t.plan(2);
+    var file = '/tmp/' + (Math.random() * (1<<30)).toString(16);
+    
+    mkdirp(file, 0755, function (err) {
+        if (err) t.fail(err);
+        else path.exists(file, function (ex) {
+            if (!ex) t.fail('file not created')
+            else fs.stat(file, function (err, stat) {
+                if (err) t.fail(err)
+                else {
+                    t.equal(stat.mode & 0777, 0755);
+                    t.ok(stat.isDirectory(), 'target not a directory');
+                    t.end();
+                }
+            })
+        })
+    });
+});
+
+test('async root perm', function (t) {
+    mkdirp('/tmp', 0755, function (err) {
+        if (err) t.fail(err);
+        t.end();
+    });
+    t.end();
+});
diff --git a/weinre.server/node_modules/express/node_modules/mkdirp/test/perm_sync.js b/weinre.server/node_modules/express/node_modules/mkdirp/test/perm_sync.js
new file mode 100644
index 0000000..f685f60
--- /dev/null
+++ b/weinre.server/node_modules/express/node_modules/mkdirp/test/perm_sync.js
@@ -0,0 +1,39 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+test('sync perm', function (t) {
+    t.plan(2);
+    var file = '/tmp/' + (Math.random() * (1<<30)).toString(16) + '.json';
+    
+    mkdirp.sync(file, 0755);
+    path.exists(file, function (ex) {
+        if (!ex) t.fail('file not created')
+        else fs.stat(file, function (err, stat) {
+            if (err) t.fail(err)
+            else {
+                t.equal(stat.mode & 0777, 0755);
+                t.ok(stat.isDirectory(), 'target not a directory');
+                t.end();
+            }
+        })
+    });
+});
+
+test('sync root perm', function (t) {
+    t.plan(1);
+    
+    var file = '/tmp';
+    mkdirp.sync(file, 0755);
+    path.exists(file, function (ex) {
+        if (!ex) t.fail('file not created')
+        else fs.stat(file, function (err, stat) {
+            if (err) t.fail(err)
+            else {
+                t.ok(stat.isDirectory(), 'target not a directory');
+                t.end();
+            }
+        })
+    });
+});
diff --git a/weinre.server/node_modules/express/node_modules/mkdirp/test/sync.js b/weinre.server/node_modules/express/node_modules/mkdirp/test/sync.js
new file mode 100644
index 0000000..e0e389d
--- /dev/null
+++ b/weinre.server/node_modules/express/node_modules/mkdirp/test/sync.js
@@ -0,0 +1,27 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+test('sync', function (t) {
+    t.plan(2);
+    var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    
+    var file = '/tmp/' + [x,y,z].join('/');
+    
+    var err = mkdirp.sync(file, 0755);
+    if (err) t.fail(err);
+    else path.exists(file, function (ex) {
+        if (!ex) t.fail('file not created')
+        else fs.stat(file, function (err, stat) {
+            if (err) t.fail(err)
+            else {
+                t.equal(stat.mode & 0777, 0755);
+                t.ok(stat.isDirectory(), 'target not a directory');
+                t.end();
+            }
+        })
+    })
+});
diff --git a/weinre.server/node_modules/express/node_modules/mkdirp/test/umask.js b/weinre.server/node_modules/express/node_modules/mkdirp/test/umask.js
new file mode 100644
index 0000000..64ccafe
--- /dev/null
+++ b/weinre.server/node_modules/express/node_modules/mkdirp/test/umask.js
@@ -0,0 +1,28 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+test('implicit mode from umask', function (t) {
+    t.plan(2);
+    var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    
+    var file = '/tmp/' + [x,y,z].join('/');
+    
+    mkdirp(file, function (err) {
+        if (err) t.fail(err);
+        else path.exists(file, function (ex) {
+            if (!ex) t.fail('file not created')
+            else fs.stat(file, function (err, stat) {
+                if (err) t.fail(err)
+                else {
+                    t.equal(stat.mode & 0777, 0777 & (~process.umask()));
+                    t.ok(stat.isDirectory(), 'target not a directory');
+                    t.end();
+                }
+            })
+        })
+    });
+});
diff --git a/weinre.server/node_modules/express/node_modules/mkdirp/test/umask_sync.js b/weinre.server/node_modules/express/node_modules/mkdirp/test/umask_sync.js
new file mode 100644
index 0000000..83cba56
--- /dev/null
+++ b/weinre.server/node_modules/express/node_modules/mkdirp/test/umask_sync.js
@@ -0,0 +1,27 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+test('umask sync modes', function (t) {
+    t.plan(2);
+    var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    
+    var file = '/tmp/' + [x,y,z].join('/');
+    
+    var err = mkdirp.sync(file);
+    if (err) t.fail(err);
+    else path.exists(file, function (ex) {
+        if (!ex) t.fail('file not created')
+        else fs.stat(file, function (err, stat) {
+            if (err) t.fail(err)
+            else {
+                t.equal(stat.mode & 0777, (0777 & (~process.umask())));
+                t.ok(stat.isDirectory(), 'target not a directory');
+                t.end();
+            }
+        })
+    })
+});
diff --git a/weinre.server/node_modules/express/node_modules/qs/package.json b/weinre.server/node_modules/express/node_modules/qs/package.json
index 68dd5a6..3a488f1 100644
--- a/weinre.server/node_modules/express/node_modules/qs/package.json
+++ b/weinre.server/node_modules/express/node_modules/qs/package.json
@@ -3,14 +3,22 @@
   "description": "querystring parser",
   "version": "0.4.2",
   "repository": {
-    "type" : "git",
-    "url" : "git://github.com/visionmedia/node-querystring.git"
+    "type": "git",
+    "url": "git://github.com/visionmedia/node-querystring.git"
   },
   "devDependencies": {
-      "mocha": "*"
-    , "should": "*"
+    "mocha": "*",
+    "should": "*"
   },
-  "author": "TJ Holowaychuk <tj@vision-media.ca> (http://tjholowaychuk.com)",
+  "author": {
+    "name": "TJ Holowaychuk",
+    "email": "tj@vision-media.ca",
+    "url": "http://tjholowaychuk.com"
+  },
   "main": "index",
-  "engines": { "node": "*" }
-}
\ No newline at end of file
+  "engines": {
+    "node": "*"
+  },
+  "_id": "qs@0.4.2",
+  "_from": "qs@0.4.x"
+}
diff --git a/weinre.server/node_modules/express/package.json b/weinre.server/node_modules/express/package.json
index 765b55d..9445014 100644
--- a/weinre.server/node_modules/express/package.json
+++ b/weinre.server/node_modules/express/package.json
@@ -1,19 +1,34 @@
 {
   "name": "express",
   "description": "Sinatra inspired web development framework",
-  "version": "2.5.7",
-  "author": "TJ Holowaychuk <tj@vision-media.ca>",
-  "contributors": [ 
-    { "name": "TJ Holowaychuk", "email": "tj@vision-media.ca" }, 
-    { "name": "Aaron Heckmann", "email": "aaron.heckmann+github@gmail.com" },
-    { "name": "Ciaran Jessup", "email": "ciaranj@gmail.com" },
-    { "name": "Guillermo Rauch", "email": "rauchg@gmail.com" }
+  "version": "2.5.10",
+  "author": {
+    "name": "TJ Holowaychuk",
+    "email": "tj@vision-media.ca"
+  },
+  "contributors": [
+    {
+      "name": "TJ Holowaychuk",
+      "email": "tj@vision-media.ca"
+    },
+    {
+      "name": "Aaron Heckmann",
+      "email": "aaron.heckmann+github@gmail.com"
+    },
+    {
+      "name": "Ciaran Jessup",
+      "email": "ciaranj@gmail.com"
+    },
+    {
+      "name": "Guillermo Rauch",
+      "email": "rauchg@gmail.com"
+    }
   ],
   "dependencies": {
     "connect": "1.x",
-    "mime": ">= 0.0.1",
-    "qs": ">= 0.3.1",
-    "mkdirp": "0.0.7"
+    "mime": "1.2.4",
+    "qs": "0.4.x",
+    "mkdirp": "0.3.0"
   },
   "devDependencies": {
     "connect-form": "0.2.1",
@@ -27,13 +42,25 @@
     "node-markdown": ">= 0.0.1",
     "connect-redis": ">= 0.0.1"
   },
-  "keywords": ["framework", "sinatra", "web", "rest", "restful"],
-  "repository": "git://github.com/visionmedia/express",
+  "keywords": [
+    "framework",
+    "sinatra",
+    "web",
+    "rest",
+    "restful"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/visionmedia/express"
+  },
   "main": "index",
-  "bin": { "express": "./bin/express" },
+  "bin": {
+    "express": "./bin/express"
+  },
   "scripts": {
     "test": "make test",
-    "prepublish" : "npm prune"
+    "prepublish": "npm prune"
   },
-  "engines": { "node": ">= 0.4.1 < 0.7.0" }
-}
\ No newline at end of file
+  "_id": "express@2.5.10",
+  "_from": "express@2.5.x"
+}
diff --git a/weinre.server/node_modules/express/test.js b/weinre.server/node_modules/express/test.js
new file mode 100644
index 0000000..925d270
--- /dev/null
+++ b/weinre.server/node_modules/express/test.js
@@ -0,0 +1,9 @@
+
+var express = require('./');
+var app = express.createServer();
+
+app.get('/', function(req, res){
+  res.send('hello');
+});
+
+app.listen(3000);
diff --git a/weinre.server/node_modules/express/testing/foo/app.js b/weinre.server/node_modules/express/testing/foo/app.js
deleted file mode 100644
index 7574676..0000000
--- a/weinre.server/node_modules/express/testing/foo/app.js
+++ /dev/null
@@ -1,35 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var express = require('express')
-  , routes = require('./routes')
-
-var app = module.exports = express.createServer();
-
-// Configuration
-
-app.configure(function(){
-  app.set('views', __dirname + '/views');
-  app.set('view engine', 'jade');
-  app.use(express.bodyParser());
-  app.use(express.methodOverride());
-  app.use(app.router);
-  app.use(express.static(__dirname + '/public'));
-});
-
-app.configure('development', function(){
-  app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
-});
-
-app.configure('production', function(){
-  app.use(express.errorHandler()); 
-});
-
-// Routes
-
-app.get('/', routes.index);
-
-app.listen(3000);
-console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
diff --git a/weinre.server/node_modules/express/testing/foo/package.json b/weinre.server/node_modules/express/testing/foo/package.json
deleted file mode 100644
index dd54123..0000000
--- a/weinre.server/node_modules/express/testing/foo/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-    "name": "application-name"
-  , "version": "0.0.1"
-  , "private": true
-  , "dependencies": {
-      "express": "2.5.0"
-    , "jade": ">= 0.0.1"
-  }
-}
\ No newline at end of file
diff --git a/weinre.server/node_modules/express/testing/foo/public/stylesheets/style.css b/weinre.server/node_modules/express/testing/foo/public/stylesheets/style.css
deleted file mode 100644
index 30e047d..0000000
--- a/weinre.server/node_modules/express/testing/foo/public/stylesheets/style.css
+++ /dev/null
@@ -1,8 +0,0 @@
-body {
-  padding: 50px;
-  font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
-}
-
-a {
-  color: #00B7FF;
-}
\ No newline at end of file
diff --git a/weinre.server/node_modules/express/testing/foo/routes/index.js b/weinre.server/node_modules/express/testing/foo/routes/index.js
deleted file mode 100644
index 0b2205c..0000000
--- a/weinre.server/node_modules/express/testing/foo/routes/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-
-/*
- * GET home page.
- */
-
-exports.index = function(req, res){
-  res.writeHead(200);
-  req.doesnotexist();
-  // res.render('index', { title: 'Express' })
-};
\ No newline at end of file
diff --git a/weinre.server/node_modules/express/testing/foo/views/index.jade b/weinre.server/node_modules/express/testing/foo/views/index.jade
deleted file mode 100644
index c9c35fa..0000000
--- a/weinre.server/node_modules/express/testing/foo/views/index.jade
+++ /dev/null
@@ -1,2 +0,0 @@
-h1= title
-p Welcome to #{title}
\ No newline at end of file
diff --git a/weinre.server/node_modules/express/testing/foo/views/layout.jade b/weinre.server/node_modules/express/testing/foo/views/layout.jade
deleted file mode 100644
index 1a36941..0000000
--- a/weinre.server/node_modules/express/testing/foo/views/layout.jade
+++ /dev/null
@@ -1,6 +0,0 @@
-!!!
-html
-  head
-    title= title
-    link(rel='stylesheet', href='/stylesheets/style.css')
-  body!= body
\ No newline at end of file
diff --git a/weinre.server/node_modules/express/testing/index.js b/weinre.server/node_modules/express/testing/index.js
deleted file mode 100644
index 3c5185d..0000000
--- a/weinre.server/node_modules/express/testing/index.js
+++ /dev/null
@@ -1,43 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var express = require('../')
-  , http = require('http')
-  , connect = require('connect');
-
-var app = express.createServer();
-
-app.get('/', function(req, res){
-  req.foo();
-  res.send('test');
-});
-
-// app.set('views', __dirname + '/views');
-// app.set('view engine', 'jade');
-// 
-// app.configure(function(){
-//   app.use(function(req, res, next){
-//     debugger
-//     res.write('first');
-//     console.error('first');
-//     next();
-//   });
-// 
-//   app.use(app.router);
-// 
-//   app.use(function(req, res, next){
-//     console.error('last');
-//     res.end('last');
-//   });
-// });
-// 
-// app.get('/', function(req, res, next){
-//   console.error('middle');
-//   res.write(' route ');
-//   next();
-// });
-
-app.listen(3000);
-console.log('listening on port 3000');
\ No newline at end of file
diff --git a/weinre.server/node_modules/express/testing/public/test.txt b/weinre.server/node_modules/express/testing/public/test.txt
deleted file mode 100644
index cb9a165..0000000
--- a/weinre.server/node_modules/express/testing/public/test.txt
+++ /dev/null
@@ -1,2971 +0,0 @@
-foo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-bazfoo
-bar
-baz
\ No newline at end of file
diff --git a/weinre.server/node_modules/express/testing/views/page.html b/weinre.server/node_modules/express/testing/views/page.html
deleted file mode 100644
index 4ff9827..0000000
--- a/weinre.server/node_modules/express/testing/views/page.html
+++ /dev/null
@@ -1 +0,0 @@
-p register test
\ No newline at end of file
diff --git a/weinre.server/node_modules/express/testing/views/page.jade b/weinre.server/node_modules/express/testing/views/page.jade
deleted file mode 100644
index 9c3f888..0000000
--- a/weinre.server/node_modules/express/testing/views/page.jade
+++ /dev/null
@@ -1,3 +0,0 @@
-html
-  body
-    h1 test
\ No newline at end of file
diff --git a/weinre.server/node_modules/express/testing/views/test.md b/weinre.server/node_modules/express/testing/views/test.md
deleted file mode 100644
index 9139ff4..0000000
--- a/weinre.server/node_modules/express/testing/views/test.md
+++ /dev/null
@@ -1 +0,0 @@
-testing _some_ markdown
\ No newline at end of file
diff --git a/weinre.server/node_modules/express/testing/views/user/index.jade b/weinre.server/node_modules/express/testing/views/user/index.jade
deleted file mode 100644
index 1b66a4f..0000000
--- a/weinre.server/node_modules/express/testing/views/user/index.jade
+++ /dev/null
@@ -1 +0,0 @@
-p user page
\ No newline at end of file
diff --git a/weinre.server/node_modules/express/testing/views/user/list.jade b/weinre.server/node_modules/express/testing/views/user/list.jade
deleted file mode 100644
index ed2b471..0000000
--- a/weinre.server/node_modules/express/testing/views/user/list.jade
+++ /dev/null
@@ -1 +0,0 @@
-p user list page
\ No newline at end of file
diff --git a/weinre.server/node_modules/nopt/node_modules/abbrev/package.json b/weinre.server/node_modules/nopt/node_modules/abbrev/package.json
index ebd082f..09b485e 100644
--- a/weinre.server/node_modules/nopt/node_modules/abbrev/package.json
+++ b/weinre.server/node_modules/nopt/node_modules/abbrev/package.json
@@ -1,8 +1,20 @@
-{ "name" : "abbrev"
-, "version" : "1.0.3"
-, "description" : "Like ruby's abbrev module, but in js"
-, "author" : "Isaac Z. Schlueter <i@izs.me>"
-, "main" : "./lib/abbrev.js"
-, "scripts" : { "test" : "node lib/abbrev.js" }
-, "repository" : "http://github.com/isaacs/abbrev-js"
+{
+  "name": "abbrev",
+  "version": "1.0.3",
+  "description": "Like ruby's abbrev module, but in js",
+  "author": {
+    "name": "Isaac Z. Schlueter",
+    "email": "i@izs.me"
+  },
+  "main": "./lib/abbrev.js",
+  "scripts": {
+    "test": "node lib/abbrev.js"
+  },
+  "repository": {
+    "type": "git",
+    "url": "http://github.com/isaacs/abbrev-js"
+  },
+  "readme": "# abbrev-js\n\nJust like [ruby's Abbrev](http://apidock.com/ruby/Abbrev).\n\nUsage:\n\n    var abbrev = require(\"abbrev\");\n    abbrev(\"foo\", \"fool\", \"folding\", \"flop\");\n    \n    // returns:\n    { fl: 'flop'\n    , flo: 'flop'\n    , flop: 'flop'\n    , fol: 'folding'\n    , fold: 'folding'\n    , foldi: 'folding'\n    , foldin: 'folding'\n    , folding: 'folding'\n    , foo: 'foo'\n    , fool: 'fool'\n    }\n\nThis is handy for command-line scripts, or other cases where you want to be able to accept shorthands.\n",
+  "_id": "abbrev@1.0.3",
+  "_from": "abbrev@1"
 }
diff --git a/weinre.server/node_modules/nopt/package.json b/weinre.server/node_modules/nopt/package.json
index d1118e3..fd2c42c 100644
--- a/weinre.server/node_modules/nopt/package.json
+++ b/weinre.server/node_modules/nopt/package.json
@@ -1,12 +1,31 @@
-{ "name" : "nopt"
-, "version" : "1.0.10"
-, "description" : "Option parsing for Node, supporting types, shorthands, etc. Used by npm."
-, "author" : "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)"
-, "main" : "lib/nopt.js"
-, "scripts" : { "test" : "node lib/nopt.js" }
-, "repository" : "http://github.com/isaacs/nopt"
-, "bin" : "./bin/nopt.js"
-, "license" :
-  { "type" : "MIT"
-  , "url" : "https://github.com/isaacs/nopt/raw/master/LICENSE" }
-, "dependencies" : { "abbrev" : "1" }}
+{
+  "name": "nopt",
+  "version": "1.0.10",
+  "description": "Option parsing for Node, supporting types, shorthands, etc. Used by npm.",
+  "author": {
+    "name": "Isaac Z. Schlueter",
+    "email": "i@izs.me",
+    "url": "http://blog.izs.me/"
+  },
+  "main": "lib/nopt.js",
+  "scripts": {
+    "test": "node lib/nopt.js"
+  },
+  "repository": {
+    "type": "git",
+    "url": "http://github.com/isaacs/nopt"
+  },
+  "bin": {
+    "nopt": "./bin/nopt.js"
+  },
+  "license": {
+    "type": "MIT",
+    "url": "https://github.com/isaacs/nopt/raw/master/LICENSE"
+  },
+  "dependencies": {
+    "abbrev": "1"
+  },
+  "readme": "If you want to write an option parser, and have it be good, there are\ntwo ways to do it.  The Right Way, and the Wrong Way.\n\nThe Wrong Way is to sit down and write an option parser.  We've all done\nthat.\n\nThe Right Way is to write some complex configurable program with so many\noptions that you go half-insane just trying to manage them all, and put\nit off with duct-tape solutions until you see exactly to the core of the\nproblem, and finally snap and write an awesome option parser.\n\nIf you want to write an option parser, don't write an option parser.\nWrite a package manager, or a source control system, or a service\nrestarter, or an operating system.  You probably won't end up with a\ngood one of those, but if you don't give up, and you are relentless and\ndiligent enough in your procrastination, you may just end up with a very\nnice option parser.\n\n## USAGE\n\n    // my-program.js\n    var nopt = require(\"nopt\")\n      , Stream = require(\"stream\").Stream\n      , path = require(\"path\")\n      , knownOpts = { \"foo\" : [String, null]\n                    , \"bar\" : [Stream, Number]\n                    , \"baz\" : path\n                    , \"bloo\" : [ \"big\", \"medium\", \"small\" ]\n                    , \"flag\" : Boolean\n                    , \"pick\" : Boolean\n                    , \"many\" : [String, Array]\n                    }\n      , shortHands = { \"foofoo\" : [\"--foo\", \"Mr. Foo\"]\n                     , \"b7\" : [\"--bar\", \"7\"]\n                     , \"m\" : [\"--bloo\", \"medium\"]\n                     , \"p\" : [\"--pick\"]\n                     , \"f\" : [\"--flag\"]\n                     }\n                 // everything is optional.\n                 // knownOpts and shorthands default to {}\n                 // arg list defaults to process.argv\n                 // slice defaults to 2\n      , parsed = nopt(knownOpts, shortHands, process.argv, 2)\n    console.log(parsed)\n\nThis would give you support for any of the following:\n\n```bash\n$ node my-program.js --foo \"blerp\" --no-flag\n{ \"foo\" : \"blerp\", \"flag\" : false }\n\n$ node my-program.js ---bar 7 --foo \"Mr. Hand\" --flag\n{ bar: 7, foo: \"Mr. Hand\", flag: true }\n\n$ node my-program.js --foo \"blerp\" -f -----p\n{ foo: \"blerp\", flag: true, pick: true }\n\n$ node my-program.js -fp --foofoo\n{ foo: \"Mr. Foo\", flag: true, pick: true }\n\n$ node my-program.js --foofoo -- -fp  # -- stops the flag parsing.\n{ foo: \"Mr. Foo\", argv: { remain: [\"-fp\"] } }\n\n$ node my-program.js --blatzk 1000 -fp # unknown opts are ok.\n{ blatzk: 1000, flag: true, pick: true }\n\n$ node my-program.js --blatzk true -fp # but they need a value\n{ blatzk: true, flag: true, pick: true }\n\n$ node my-program.js --no-blatzk -fp # unless they start with \"no-\"\n{ blatzk: false, flag: true, pick: true }\n\n$ node my-program.js --baz b/a/z # known paths are resolved.\n{ baz: \"/Users/isaacs/b/a/z\" }\n\n# if Array is one of the types, then it can take many\n# values, and will always be an array.  The other types provided\n# specify what types are allowed in the list.\n\n$ node my-program.js --many 1 --many null --many foo\n{ many: [\"1\", \"null\", \"foo\"] }\n\n$ node my-program.js --many foo\n{ many: [\"foo\"] }\n```\n\nRead the tests at the bottom of `lib/nopt.js` for more examples of\nwhat this puppy can do.\n\n## Types\n\nThe following types are supported, and defined on `nopt.typeDefs`\n\n* String: A normal string.  No parsing is done.\n* path: A file system path.  Gets resolved against cwd if not absolute.\n* url: A url.  If it doesn't parse, it isn't accepted.\n* Number: Must be numeric.\n* Date: Must parse as a date. If it does, and `Date` is one of the options,\n  then it will return a Date object, not a string.\n* Boolean: Must be either `true` or `false`.  If an option is a boolean,\n  then it does not need a value, and its presence will imply `true` as\n  the value.  To negate boolean flags, do `--no-whatever` or `--whatever\n  false`\n* NaN: Means that the option is strictly not allowed.  Any value will\n  fail.\n* Stream: An object matching the \"Stream\" class in node.  Valuable\n  for use when validating programmatically.  (npm uses this to let you\n  supply any WriteStream on the `outfd` and `logfd` config options.)\n* Array: If `Array` is specified as one of the types, then the value\n  will be parsed as a list of options.  This means that multiple values\n  can be specified, and that the value will always be an array.\n\nIf a type is an array of values not on this list, then those are\nconsidered valid values.  For instance, in the example above, the\n`--bloo` option can only be one of `\"big\"`, `\"medium\"`, or `\"small\"`,\nand any other value will be rejected.\n\nWhen parsing unknown fields, `\"true\"`, `\"false\"`, and `\"null\"` will be\ninterpreted as their JavaScript equivalents, and numeric values will be\ninterpreted as a number.\n\nYou can also mix types and values, or multiple types, in a list.  For\ninstance `{ blah: [Number, null] }` would allow a value to be set to\neither a Number or null.\n\nTo define a new type, add it to `nopt.typeDefs`.  Each item in that\nhash is an object with a `type` member and a `validate` method.  The\n`type` member is an object that matches what goes in the type list.  The\n`validate` method is a function that gets called with `validate(data,\nkey, val)`.  Validate methods should assign `data[key]` to the valid\nvalue of `val` if it can be handled properly, or return boolean\n`false` if it cannot.\n\nYou can also call `nopt.clean(data, types, typeDefs)` to clean up a\nconfig object and remove its invalid properties.\n\n## Error Handling\n\nBy default, nopt outputs a warning to standard error when invalid\noptions are found.  You can change this behavior by assigning a method\nto `nopt.invalidHandler`.  This method will be called with\nthe offending `nopt.invalidHandler(key, val, types)`.\n\nIf no `nopt.invalidHandler` is assigned, then it will console.error\nits whining.  If it is assigned to boolean `false` then the warning is\nsuppressed.\n\n## Abbreviations\n\nYes, they are supported.  If you define options like this:\n\n```javascript\n{ \"foolhardyelephants\" : Boolean\n, \"pileofmonkeys\" : Boolean }\n```\n\nThen this will work:\n\n```bash\nnode program.js --foolhar --pil\nnode program.js --no-f --pileofmon\n# etc.\n```\n\n## Shorthands\n\nShorthands are a hash of shorter option names to a snippet of args that\nthey expand to.\n\nIf multiple one-character shorthands are all combined, and the\ncombination does not unambiguously match any other option or shorthand,\nthen they will be broken up into their constituent parts.  For example:\n\n```json\n{ \"s\" : [\"--loglevel\", \"silent\"]\n, \"g\" : \"--global\"\n, \"f\" : \"--force\"\n, \"p\" : \"--parseable\"\n, \"l\" : \"--long\"\n}\n```\n\n```bash\nnpm ls -sgflp\n# just like doing this:\nnpm ls --loglevel silent --global --force --long --parseable\n```\n\n## The Rest of the args\n\nThe config object returned by nopt is given a special member called\n`argv`, which is an object with the following fields:\n\n* `remain`: The remaining args after all the parsing has occurred.\n* `original`: The args as they originally appeared.\n* `cooked`: The args after flags and shorthands are expanded.\n\n## Slicing\n\nNode programs are called with more or less the exact argv as it appears\nin C land, after the v8 and node-specific options have been plucked off.\nAs such, `argv[0]` is always `node` and `argv[1]` is always the\nJavaScript program being run.\n\nThat's usually not very useful to you.  So they're sliced off by\ndefault.  If you want them, then you can pass in `0` as the last\nargument, or any other number that you'd like to slice off the start of\nthe list.\n",
+  "_id": "nopt@1.0.10",
+  "_from": "nopt@1.0.10"
+}
diff --git a/weinre.server/node_modules/underscore/CNAME b/weinre.server/node_modules/underscore/CNAME
new file mode 100644
index 0000000..a007e65
--- /dev/null
+++ b/weinre.server/node_modules/underscore/CNAME
@@ -0,0 +1 @@
+underscorejs.org
diff --git a/weinre.server/node_modules/underscore/favicon.ico b/weinre.server/node_modules/underscore/favicon.ico
new file mode 100755
index 0000000..0304968
--- /dev/null
+++ b/weinre.server/node_modules/underscore/favicon.ico
Binary files differ
diff --git a/weinre.server/node_modules/underscore/index.html b/weinre.server/node_modules/underscore/index.html
index 52c9671..01c18ac 100644
--- a/weinre.server/node_modules/underscore/index.html
+++ b/weinre.server/node_modules/underscore/index.html
@@ -3,6 +3,7 @@
 <head>
   <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
   <meta http-equiv="X-UA-Compatible" content="chrome=1">
+  <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
   <title>Underscore.js</title>
   <style>
     body {
@@ -10,7 +11,7 @@
       line-height: 22px;
       background: #f4f4f4 url(docs/images/background.png);
       color: #000;
-      font-family: Helvetica Neue, Helvetica, Arial;      
+      font-family: Helvetica Neue, Helvetica, Arial;
     }
     .interface {
       font-family: "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, sans-serif !important;
@@ -22,6 +23,7 @@
       width: 200px;
       overflow-y: auto;
       overflow-x: hidden;
+      -webkit-overflow-scrolling: touch;
       padding: 15px 0 30px 30px;
       border-right: 1px solid #bbb;
       box-shadow: 0 0 20px #ccc; -webkit-box-shadow: 0 0 20px #ccc; -moz-box-shadow: 0 0 20px #ccc;
@@ -57,7 +59,7 @@
         }
           .toc_section li a:hover {
             text-decoration: underline;
-          }  
+          }
     div.container {
       width: 550px;
       margin: 40px 0 50px 260px;
@@ -130,13 +132,13 @@
   </style>
 </head>
 <body>
-  
+
   <div id="sidebar" class="interface">
 
     <a class="toc_title" href="#">
-      Underscore.js <span class="version">(1.3.1)</span>
+      Underscore.js <span class="version">(1.3.3)</span>
     </a>
-    
+
     <a class="toc_title" href="#">
       Introduction
     </a>
@@ -211,8 +213,9 @@
     <ul class="toc_section">
       <li>- <a href="#keys">keys</a></li>
       <li>- <a href="#values">values</a></li>
-      <li>- <a href="#functions">functions</a></li>
+      <li>- <a href="#object-functions">functions</a></li>
       <li>- <a href="#extend">extend</a></li>
+      <li>- <a href="#pick">pick</a></li>
       <li>- <a href="#defaults">defaults</a></li>
       <li>- <a href="#clone">clone</a></li>
       <li>- <a href="#tap">tap</a></li>
@@ -221,10 +224,12 @@
       <li>- <a href="#isEmpty">isEmpty</a></li>
       <li>- <a href="#isElement">isElement</a></li>
       <li>- <a href="#isArray">isArray</a></li>
+      <li>- <a href="#isObject">isObject</a></li>
       <li>- <a href="#isArguments">isArguments</a></li>
       <li>- <a href="#isFunction">isFunction</a></li>
       <li>- <a href="#isString">isString</a></li>
       <li>- <a href="#isNumber">isNumber</a></li>
+      <li>- <a href="#isFinite">isFinite</a></li>
       <li>- <a href="#isBoolean">isBoolean</a></li>
       <li>- <a href="#isDate">isDate</a></li>
       <li>- <a href="#isRegExp">isRegExp</a></li>
@@ -235,7 +240,7 @@
 
     <a class="toc_title" href="#utility">
       Utility
-    </a>    
+    </a>
     <ul class="toc_section">
       <li>- <a href="#noConflict">noConflict</a></li>
       <li>- <a href="#identity">identity</a></li>
@@ -243,6 +248,7 @@
       <li>- <a href="#mixin">mixin</a></li>
       <li>- <a href="#uniqueId">uniqueId</a></li>
       <li>- <a href="#escape">escape</a></li>
+      <li>- <a href="#result">result</a></li>
       <li>- <a href="#template">template</a></li>
     </ul>
 
@@ -253,15 +259,15 @@
       <li>- <a href="#chain">chain</a></li>
       <li>- <a href="#value">value</a></li>
     </ul>
-    
+
     <a class="toc_title" href="#links">
       Links
     </a>
-    
+
     <a class="toc_title" href="#changelog">
       Change Log
     </a>
-    
+
   </div>
 
   <div class="container">
@@ -295,7 +301,7 @@
       A complete <a href="test/test.html">Test &amp; Benchmark Suite</a>
       is included for your perusal.
     </p>
-    
+
     <p>
       You may also read through the <a href="docs/underscore.html">annotated source code</a>.
     </p>
@@ -317,16 +323,16 @@
 
     <table>
       <tr>
-        <td><a href="underscore.js">Development Version (1.3.1)</a></td>
-        <td><i>34kb, Uncompressed with Comments</i></td>
+        <td><a href="underscore.js">Development Version (1.3.3)</a></td>
+        <td><i>37kb, Uncompressed with Plentiful Comments</i></td>
       </tr>
       <tr>
-        <td><a href="underscore-min.js">Production Version (1.3.1)</a></td>
-        <td><i>&lt; 4kb, Minified and Gzipped</i></td>
+        <td><a href="underscore-min.js">Production Version (1.3.3)</a></td>
+        <td><i>4kb, Minified and Gzipped</i></td>
       </tr>
     </table>
-    
-    <div class="warning">Upgrade warning: version 1.3.0 removes AMD (RequireJS) support.</div>
+
+    <div class="warning">Upgrade warning: versions 1.3.0 and higher remove AMD (RequireJS) support.</div>
 
     <div id="documentation">
 
@@ -523,8 +529,9 @@
       <p id="sortBy">
         <b class="header">sortBy</b><code>_.sortBy(list, iterator, [context])</code>
         <br />
-        Returns a sorted copy of <b>list</b>, ranked in ascending order by the 
-        results of running each value through <b>iterator</b>.
+        Returns a sorted copy of <b>list</b>, ranked in ascending order by the
+        results of running each value through <b>iterator</b>. Iterator may
+        also be the string name of the property to sort by (eg. <tt>length</tt>).
       </p>
       <pre>
 _.sortBy([1, 2, 3, 4, 5, 6], function(num){ return Math.sin(num); });
@@ -563,7 +570,7 @@
       <p id="shuffle">
         <b class="header">shuffle</b><code>_.shuffle(list)</code>
         <br />
-        Returns a shuffled copy of the <b>list</b>, using a version of the 
+        Returns a shuffled copy of the <b>list</b>, using a version of the
         <a href="http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle">Fisher-Yates shuffle</a>.
       </p>
       <pre>
@@ -578,8 +585,8 @@
         real Array. Useful for transmuting the <b>arguments</b> object.
       </p>
       <pre>
-(function(){ return _.toArray(arguments).slice(0); })(1, 2, 3);
-=&gt; [1, 2, 3]
+(function(){ return _.toArray(arguments).slice(1); })(1, 2, 3, 4);
+=&gt; [2, 3, 4]
 </pre>
 
       <p id="size">
@@ -749,7 +756,7 @@
         <br />
         Returns the index at which <b>value</b> can be found in the <b>array</b>,
         or <i>-1</i> if value is not present in the <b>array</b>. Uses the native
-        <b>indexOf</b> function unless it's missing. If you're working with a 
+        <b>indexOf</b> function unless it's missing. If you're working with a
         large array, and you know that the array is already sorted, pass <tt>true</tt>
         for <b>isSorted</b> to use a faster binary search.
       </p>
@@ -834,7 +841,7 @@
         <b class="header">memoize</b><code>_.memoize(function, [hashFunction])</code>
         <br />
         Memoizes a given <b>function</b> by caching the computed result. Useful
-        for speeding up slow-running computations. If passed an optional 
+        for speeding up slow-running computations. If passed an optional
         <b>hashFunction</b>, it will be used to compute the hash key for storing
         the result, based on the arguments to the original function. The default
         <b>hashFunction</b> just uses the first argument to the memoized function
@@ -875,8 +882,8 @@
       <p id="throttle">
         <b class="header">throttle</b><code>_.throttle(function, wait)</code>
         <br />
-        Creates and returns a new, throttled version of the passed function, 
-        that, when invoked repeatedly, will only actually call the original function 
+        Creates and returns a new, throttled version of the passed function,
+        that, when invoked repeatedly, will only actually call the original function
         at most once per every <b>wait</b>
         milliseconds. Useful for rate-limiting events that occur faster than you
         can keep up with.
@@ -887,16 +894,25 @@
 </pre>
 
       <p id="debounce">
-        <b class="header">debounce</b><code>_.debounce(function, wait)</code>
+        <b class="header">debounce</b><code>_.debounce(function, wait, [immediate])</code>
         <br />
         Creates and returns a new debounced version of the passed function that
-        will postpone its execution until after 
-        <b>wait</b> milliseconds have elapsed since the last time it  
-        was invoked. Useful for implementing behavior that should only happen 
-        <i>after</i> the input has stopped arriving. For example: rendering a 
-        preview of a Markdown comment, recalculating a layout after the window 
+        will postpone its execution until after
+        <b>wait</b> milliseconds have elapsed since the last time it
+        was invoked. Useful for implementing behavior that should only happen
+        <i>after</i> the input has stopped arriving. For example: rendering a
+        preview of a Markdown comment, recalculating a layout after the window
         has stopped being resized, and so on.
       </p>
+      
+      <p>
+        Pass <tt>true</tt> for the <b>immediate</b> parameter to cause 
+        <b>debounce</b> to trigger the function on the leading intead of the 
+        trailing edge of the <b>wait</b> interval. Useful in circumstances like 
+        preventing accidental double-clicks on a "submit" button from firing a 
+        second time.
+      </p>
+      
       <pre>
 var lazyLayout = _.debounce(calculateLayout, 300);
 $(window).resize(lazyLayout);
@@ -905,7 +921,7 @@
       <p id="once">
         <b class="header">once</b><code>_.once(function)</code>
         <br />
-        Creates a version of the function that can only be called one time. 
+        Creates a version of the function that can only be called one time.
         Repeated calls to the modified function will have no effect, returning
         the value from the original call. Useful for initialization functions,
         instead of having to set a boolean flag and then check it later.
@@ -920,7 +936,7 @@
       <p id="after">
         <b class="header">after</b><code>_.after(count, function)</code>
         <br />
-        Creates a version of the function that will only be run after first 
+        Creates a version of the function that will only be run after first
         being called <b>count</b> times. Useful for grouping asynchronous responses,
         where you want to be sure that all the async calls have finished, before
         proceeding.
@@ -928,7 +944,7 @@
       <pre>
 var renderNotes = _.after(notes.length, render);
 _.each(notes, function(note) {
-  note.asyncSave({success: renderNotes}); 
+  note.asyncSave({success: renderNotes});
 });
 // renderNotes is run once, after all notes have saved.
 </pre>
@@ -988,7 +1004,7 @@
 =&gt; [1, 2, 3]
 </pre>
 
-      <p id="functions">
+      <p id="object-functions">
         <b class="header">functions</b><code>_.functions(object)</code>
         <span class="alias">Alias: <b>methods</b></span>
         <br />
@@ -1004,20 +1020,32 @@
         <b class="header">extend</b><code>_.extend(destination, *sources)</code>
         <br />
         Copy all of the properties in the <b>source</b> objects over to the
-        <b>destination</b> object. It's in-order, so the last source will override
-        properties of the same name in previous arguments.
+        <b>destination</b> object, and return the <b>destination</b> object.
+        It's in-order, so the last source will override properties of the same
+        name in previous arguments.
       </p>
       <pre>
 _.extend({name : 'moe'}, {age : 50});
 =&gt; {name : 'moe', age : 50}
 </pre>
 
+      <p id="pick">
+        <b class="header">pick</b><code>_.pick(object, *keys)</code>
+        <br />
+        Return a copy of the <b>object</b>, filtered to only have values for
+        the whitelisted <b>keys</b> (or array of valid keys).
+      </p>
+      <pre>
+_.pick({name : 'moe', age: 50, userid : 'moe1'}, 'name', 'age');
+=&gt; {name : 'moe', age : 50}
+</pre>
+
       <p id="defaults">
         <b class="header">defaults</b><code>_.defaults(object, *defaults)</code>
         <br />
         Fill in missing properties in <b>object</b> with default values from the
-        <b>defaults</b> objects. As soon as the property is filled, further defaults
-        will have no effect.
+        <b>defaults</b> objects, and return the <b>object</b>. As soon as the
+        property is filled, further defaults will have no effect.
       </p>
       <pre>
 var iceCream = {flavor : "chocolate"};
@@ -1045,19 +1073,19 @@
       <pre>
 _.chain([1,2,3,200])
   .filter(function(num) { return num % 2 == 0; })
-  .tap(console.log)
+  .tap(alert)
   .map(function(num) { return num * num })
   .value();
-=&gt; [2, 200]
+=&gt; // [2, 200] (alerted)
 =&gt; [4, 40000]
 </pre>
 
       <p id="has">
         <b class="header">has</b><code>_.has(object, key)</code>
         <br />
-        Does the object contain the given key? Identical to 
+        Does the object contain the given key? Identical to
         <tt>object.hasOwnProperty(key)</tt>, but uses a safe reference to the
-        <tt>hasOwnProperty</tt> function, in case it's been 
+        <tt>hasOwnProperty</tt> function, in case it's been
         <a href="http://www.devthought.com/2012/01/18/an-object-is-not-a-hash/">overridden accidentally</a>.
       </p>
       <pre>
@@ -1114,6 +1142,18 @@
 =&gt; true
 </pre>
 
+      <p id="isObject">
+        <b class="header">isObject</b><code>_.isObject(value)</code>
+        <br />
+        Returns <i>true</i> if <b>value</b> is an Object.
+      </p>
+      <pre>
+_.isObject({});
+=&gt; true
+_.isObject(1);
+=&gt; false
+</pre>
+
       <p id="isArguments">
         <b class="header">isArguments</b><code>_.isArguments(object)</code>
         <br />
@@ -1156,6 +1196,19 @@
 =&gt; true
 </pre>
 
+      <p id="isFinite">
+        <b class="header">isFinite</b><code>_.isFinite(object)</code>
+        <br />
+        Returns <i>true</i> if <b>object</b> is a finite Number.
+      </p>
+      <pre>
+_.isFinite(-101);
+=&gt; true
+
+_.isFinite(-Infinity);
+=&gt; false
+</pre>
+
       <p id="isBoolean">
         <b class="header">isBoolean</b><code>_.isBoolean(object)</code>
         <br />
@@ -1260,7 +1313,7 @@
         <b class="header">mixin</b><code>_.mixin(object)</code>
         <br />
         Allows you to extend Underscore with your own utility functions. Pass
-        a hash of <tt>{name: function}</tt> definitions to have your functions 
+        a hash of <tt>{name: function}</tt> definitions to have your functions
         added to the Underscore object, as well as the OOP wrapper.
       </p>
       <pre>
@@ -1278,6 +1331,7 @@
         <br />
         Generate a globally-unique id for client-side models or DOM elements
         that need one. If <b>prefix</b> is passed, the id will be appended to it.
+        Without <b>prefix</b>, returns an integer.
       </p>
       <pre>
 _.uniqueId('contact_');
@@ -1286,27 +1340,41 @@
       <p id="escape">
         <b class="header">escape</b><code>_.escape(string)</code>
         <br />
-        Escapes a string for insertion into HTML, replacing 
+        Escapes a string for insertion into HTML, replacing
         <tt>&amp;</tt>, <tt>&lt;</tt>, <tt>&gt;</tt>, <tt>&quot;</tt>, <tt>&#x27;</tt>, and <tt>&#x2F;</tt> characters.
       </p>
       <pre>
 _.escape('Curly, Larry &amp; Moe');
 =&gt; "Curly, Larry &amp;amp; Moe"</pre>
 
+      <p id="result">
+        <b class="header">result</b><code>_.result(object, property)</code>
+        <br />
+        If the value of the named property is a function then invoke it; otherwise, return it.
+      </p>
+      <pre>
+var object = {cheese: 'crumpets', stuff: function(){ return 'nonsense'; }};
+_.result(object, 'cheese');
+=&gt; "crumpets"
+_.result(object, 'stuff');
+=&gt; "nonsense"</pre>
+
       <p id="template">
-        <b class="header">template</b><code>_.template(templateString, [context])</code>
+        <b class="header">template</b><code>_.template(templateString, [data], [settings])</code>
         <br />
         Compiles JavaScript templates into functions that can be evaluated
         for rendering. Useful for rendering complicated bits of HTML from JSON
-        data sources. Template functions can both interpolate variables, using<br />
+        data sources. Template functions can both interpolate variables, using
         <tt>&lt;%= &hellip; %&gt;</tt>, as well as execute arbitrary JavaScript code, with
         <tt>&lt;% &hellip; %&gt;</tt>. If you wish to interpolate a value, and have
         it be HTML-escaped, use <tt>&lt;%- &hellip; %&gt;</tt> When you evaluate a template function, pass in a
-        <b>context</b> object that has properties corresponding to the template's free
-        variables. If you're writing a one-off, you can pass the <b>context</b>
+        <b>data</b> object that has properties corresponding to the template's free
+        variables. If you're writing a one-off, you can pass the <b>data</b>
         object as the second parameter to <b>template</b> in order to render
-        immediately instead of returning a template function.
+        immediately instead of returning a template function.  The <b>settings</b> argument
+        should be a hash containing any <tt>_.templateSettings</tt> that should be overriden.
       </p>
+
       <pre>
 var compiled = _.template("hello: &lt;%= name %&gt;");
 compiled({name : 'moe'});
@@ -1324,7 +1392,7 @@
         You can also use <tt>print</tt> from within JavaScript code.  This is
         sometimes more convenient than using <tt>&lt;%= ... %&gt;</tt>.
       </p>
-      
+
       <pre>
 var compiled = _.template("&lt;% print('Hello ' + epithet); %&gt;");
 compiled({epithet: "stooge"});
@@ -1333,8 +1401,8 @@
       <p>
         If ERB-style delimiters aren't your cup of tea, you can change Underscore's
         template settings to use different symbols to set off interpolated code.
-        Define an <b>interpolate</b> regex to match expressions that should be 
-        interpolated verbatim, an <b>escape</b> regex to match expressions that should 
+        Define an <b>interpolate</b> regex to match expressions that should be
+        interpolated verbatim, an <b>escape</b> regex to match expressions that should
         be inserted after being HTML escaped, and an <b>evaluate</b> regex to match
         expressions that should be evaluated without insertion into the resulting
         string. You may define or omit any combination of the three.
@@ -1352,6 +1420,29 @@
 template({name : "Mustache"});
 =&gt; "Hello Mustache!"</pre>
 
+      <p>
+        By default, <b>template</b> places the values from your data in the local scope
+        via the <tt>with</tt> statement.  However, you can specify a single variable name
+        with the <b>variable</b> setting. This can significantly improve the speed
+        at which a template is able to render.
+      </p>
+
+      <pre>
+_.template("<%= data.hasWith %>", {hasWith: 'no'}, {variable: 'data'});
+=&gt; "no"</pre>
+
+      <p>
+        Precompiling your templates can be a big help when debugging errors you can't
+        reproduce.  This is because precompiled templates can provide line numbers and
+        a stack trace, something that is not possible when compiling templates on the client.
+        The <b>source</b> property is available on the compiled template
+        function for easy precompilation.
+      </p>
+
+      <pre>&lt;script&gt;
+  JST.project = <%= _.template(jstText).source %>;
+&lt;/script&gt;</pre>
+
 
       <h2 id="chaining">Chaining</h2>
 
@@ -1366,8 +1457,7 @@
 _([1, 2, 3]).map(function(n){ return n * 2; });</pre>
 
       <p>
-        Using the object-oriented style allows you to chain together methods. Calling
-        <tt>chain</tt> on a wrapped object will cause all future method calls to
+        Calling <tt>chain</tt> on a wrapped object will cause all future method calls to
         return wrapped objects as well. When you've finished the computation,
         use <tt>value</tt> to retrieve the final value. Here's an example of chaining
         together a <b>map/flatten/reduce</b>, in order to get the word count of
@@ -1435,7 +1525,7 @@
         The <a href="http://github.com/mirven/underscore.lua">source</a> is
         available on GitHub.
       </p>
-      
+
       <p>
         <a href="http://brianhaveri.github.com/Underscore.php/">Underscore.php</a>,
         a PHP port of the functions that are applicable in both languages.
@@ -1443,17 +1533,17 @@
         The <a href="http://github.com/brianhaveri/Underscore.php">source</a> is
         available on GitHub.
       </p>
-      
+
       <p>
         <a href="http://vti.github.com/underscore-perl/">Underscore-perl</a>,
-        a Perl port of many of the Underscore.js functions, 
-        aimed at on Perl hashes and arrays, also 
+        a Perl port of many of the Underscore.js functions,
+        aimed at on Perl hashes and arrays, also
         <a href="https://github.com/vti/underscore-perl/">available on GitHub</a>.
       </p>
-      
+
       <p>
         <a href="https://github.com/edtsech/underscore.string">Underscore.string</a>,
-        an Underscore extension that adds functions for string-manipulation: 
+        an Underscore extension that adds functions for string-manipulation:
         <tt>trim</tt>, <tt>startsWith</tt>, <tt>contains</tt>, <tt>capitalize</tt>,
         <tt>reverse</tt>, <tt>sprintf</tt>, and more.
       </p>
@@ -1472,7 +1562,7 @@
         <a href="http://osteele.com/sources/javascript/functional/">Functional JavaScript</a>,
         which includes comprehensive higher-order function support as well as string lambdas.
       </p>
-      
+
       <p>
         Michael Aufreiter's <a href="http://substance.io/#michael/data-js">Data.js</a>,
         a data manipulation + persistence library for JavaScript.
@@ -1485,6 +1575,49 @@
       <h2 id="changelog">Change Log</h2>
       
       <p>
+        <b class="header">1.3.3</b> &mdash; <small><i>April 10, 2012</i></small><br />
+        <ul>
+          <li>
+            Many improvements to <tt>_.template</tt>, which now provides the 
+            <tt>source</tt> of the template function as a property, for potentially
+            even more efficient pre-compilation on the server-side. You may now
+            also set the <tt>variable</tt> option when creating a template, 
+            which will cause your passed-in data to be made available under the 
+            variable you named, instead of using a <tt>with</tt> statement &mdash;
+            significantly improving the speed of rendering the template.
+          </li>
+          <li>
+            Added the <tt>pick</tt> function, which allows you to filter an 
+            object literal with a whitelist of allowed property names.
+          </li>
+          <li>
+            Added the <tt>result</tt> function, for convenience when working
+            with APIs that allow either functions or raw properties.
+          </li>
+          <li>
+            Added the <tt>isFinite</tt> function, because sometimes knowing that
+            a value is a number just ain't quite enough.
+          </li>
+          <li>
+            The <tt>sortBy</tt> function may now also be passed the string name
+            of a property to use as the sort order on each object.
+          </li>
+          <li>
+            Fixed <tt>uniq</tt> to work with sparse arrays.
+          </li>
+          <li>
+            The <tt>difference</tt> function now performs a shallow flatten
+            instead of a deep one when computing array differences.
+          </li>
+          <li>
+            The <tt>debounce</tt> function now takes an <tt>immediate</tt>
+            parameter, which will cause the callback to fire on the leading 
+            instead of the trailing edge.
+          </li>
+        </ul>
+      </p>
+
+      <p>
         <b class="header">1.3.1</b> &mdash; <small><i>Jan. 23, 2012</i></small><br />
         <ul>
           <li>
@@ -1494,7 +1627,7 @@
             Added <tt>_.collect</tt> as an alias for <tt>_.map</tt>. Smalltalkers, rejoice.
           </li>
           <li>
-            Reverted an old change so that <tt>_.extend</tt> will correctly copy 
+            Reverted an old change so that <tt>_.extend</tt> will correctly copy
             over keys with undefined values again.
           </li>
           <li>
@@ -1502,7 +1635,7 @@
           </li>
         </ul>
       </p>
-      
+
       <p>
         <b class="header">1.3.0</b> &mdash; <small><i>Jan. 11, 2012</i></small><br />
         <ul>
@@ -1513,12 +1646,13 @@
           </li>
         </ul>
       </p>
-      
+
       <p>
         <b class="header">1.2.4</b> &mdash; <small><i>Jan. 4, 2012</i></small><br />
         <ul>
           <li>
-            You now can (and probably should) write <tt>_.chain(list)</tt> 
+            You now can (and probably should, as it's simpler) 
+            write <tt>_.chain(list)</tt> 
             instead of <tt>_(list).chain()</tt>.
           </li>
           <li>
@@ -1535,7 +1669,7 @@
           </li>
         </ul>
       </p>
-      
+
       <p>
         <b class="header">1.2.3</b> &mdash; <small><i>Dec. 7, 2011</i></small><br />
         <ul>
@@ -1548,12 +1682,12 @@
           </li>
           <li>
             Both <tt>_.reduce</tt> and <tt>_.reduceRight</tt> can now be passed an
-            explicitly <tt>undefined</tt> value. (There's no reason why you'd 
+            explicitly <tt>undefined</tt> value. (There's no reason why you'd
             want to do this.)
           </li>
         </ul>
       </p>
-      
+
       <p>
         <b class="header">1.2.2</b> &mdash; <small><i>Nov. 14, 2011</i></small><br />
         <ul>
@@ -1572,22 +1706,22 @@
           </li>
           <li>
             <tt>_.after(callback, 0)</tt> will now trigger the callback immediately,
-            making "after" easier to use with asynchronous APIs <small>(#366)</small>. 
+            making "after" easier to use with asynchronous APIs <small>(#366)</small>.
           </li>
         </ul>
       </p>
-      
+
       <p>
         <b class="header">1.2.1</b> &mdash; <small><i>Oct. 24, 2011</i></small><br />
         <ul>
           <li>
-            Several important bug fixes for <tt>_.isEqual</tt>, which should now 
-            do better on mutated Arrays, and on non-Array objects with 
+            Several important bug fixes for <tt>_.isEqual</tt>, which should now
+            do better on mutated Arrays, and on non-Array objects with
             <tt>length</tt> properties. <small>(#329)</small>
           </li>
           <li>
             <b>jrburke</b> contributed Underscore exporting for AMD module loaders,
-            and <b>tonylukasavage</b> for Appcelerator Titanium. 
+            and <b>tonylukasavage</b> for Appcelerator Titanium.
             <small>(#335, #338)</small>
           </li>
           <li>
@@ -1595,7 +1729,7 @@
             grouping values by a particular common property.
           </li>
           <li>
-            <tt>_.throttle</tt>'d functions now fire immediately upon invocation, 
+            <tt>_.throttle</tt>'d functions now fire immediately upon invocation,
             and are rate-limited thereafter <small>(#170, #266)</small>.
           </li>
           <li>
@@ -1603,7 +1737,7 @@
           </li>
           <li>
             The <tt>_.bind</tt> function now also works on constructors, a-la
-            ES5 ... but you would never want to use <tt>_.bind</tt> on a 
+            ES5 ... but you would never want to use <tt>_.bind</tt> on a
             constructor function.
           </li>
           <li>
@@ -1615,25 +1749,25 @@
           </li>
         </ul>
       </p>
-      
+
       <p>
         <b class="header">1.2.0</b> &mdash; <small><i>Oct. 5, 2011</i></small><br />
         <ul>
           <li>
-            The <tt>_.isEqual</tt> function now 
+            The <tt>_.isEqual</tt> function now
             supports true deep equality comparisons, with checks for cyclic structures,
             thanks to Kit Cambridge.
           </li>
           <li>
-            Underscore templates now support HTML escaping interpolations, using 
-            <tt>&lt;%- ... %&gt;</tt> syntax. 
+            Underscore templates now support HTML escaping interpolations, using
+            <tt>&lt;%- ... %&gt;</tt> syntax.
           </li>
           <li>
-            Ryan Tenney contributed <tt>_.shuffle</tt>, which uses a modified 
-            Fisher-Yates to give you a shuffled copy of an array. 
+            Ryan Tenney contributed <tt>_.shuffle</tt>, which uses a modified
+            Fisher-Yates to give you a shuffled copy of an array.
           </li>
           <li>
-            <tt>_.uniq</tt> can now be passed an optional iterator, to determine by 
+            <tt>_.uniq</tt> can now be passed an optional iterator, to determine by
             what criteria an object should be considered unique.
           </li>
           <li>
@@ -1642,22 +1776,22 @@
           </li>
           <li>
             A new <tt>_.initial</tt> function was added, as a mirror of <tt>_.rest</tt>,
-            which returns all the initial values of a list (except the last N). 
+            which returns all the initial values of a list (except the last N).
           </li>
         </ul>
       </p>
-      
+
       <p>
         <b class="header">1.1.7</b> &mdash; <small><i>July 13, 2011</i></small><br />
         Added <tt>_.groupBy</tt>, which aggregates a collection into groups of like items.
-        Added <tt>_.union</tt> and <tt>_.difference</tt>, to complement the 
+        Added <tt>_.union</tt> and <tt>_.difference</tt>, to complement the
         (re-named) <tt>_.intersection</tt>.
         Various improvements for support of sparse arrays.
         <tt>_.toArray</tt> now returns a clone, if directly passed an array.
         <tt>_.functions</tt> now also returns the names of functions that are present
         in the prototype chain.
       </p>
-            
+
       <p>
         <b class="header">1.1.6</b> &mdash; <small><i>April 18, 2011</i></small><br />
         Added <tt>_.after</tt>, which will return a function that only runs after
@@ -1668,30 +1802,30 @@
         <tt>_.extend</tt> no longer copies keys when the value is undefined.
         <tt>_.bind</tt> now errors when trying to bind an undefined value.
       </p>
-      
+
       <p>
         <b class="header">1.1.5</b> &mdash; <small><i>Mar 20, 2011</i></small><br />
         Added an <tt>_.defaults</tt> function, for use merging together JS objects
         representing default options.
         Added an <tt>_.once</tt> function, for manufacturing functions that should
         only ever execute a single time.
-        <tt>_.bind</tt> now delegates to the native ECMAScript 5 version, 
+        <tt>_.bind</tt> now delegates to the native ECMAScript 5 version,
         where available.
         <tt>_.keys</tt> now throws an error when used on non-Object values, as in
         ECMAScript 5.
         Fixed a bug with <tt>_.keys</tt> when used over sparse arrays.
       </p>
-      
+
       <p>
         <b class="header">1.1.4</b> &mdash; <small><i>Jan 9, 2011</i></small><br />
-        Improved compliance with ES5's Array methods when passing <tt>null</tt> 
+        Improved compliance with ES5's Array methods when passing <tt>null</tt>
         as a value. <tt>_.wrap</tt> now correctly sets <tt>this</tt> for the
         wrapped function. <tt>_.indexOf</tt> now takes an optional flag for
         finding the insertion index in an array that is guaranteed to already
         be sorted. Avoiding the use of <tt>.callee</tt>, to allow <tt>_.isArray</tt>
         to work properly in ES5's strict mode.
       </p>
-      
+
       <p>
         <b class="header">1.1.3</b> &mdash; <small><i>Dec 1, 2010</i></small><br />
         In CommonJS, Underscore may now be required with just: <br />
@@ -1703,26 +1837,26 @@
         Improved the <b>isType</b> family of functions for better interoperability
         with Internet Explorer host objects.
         <tt>_.template</tt> now correctly escapes backslashes in templates.
-        Improved <tt>_.reduce</tt> compatibility with the ECMA5 version: 
+        Improved <tt>_.reduce</tt> compatibility with the ECMA5 version:
         if you don't pass an initial value, the first item in the collection is used.
         <tt>_.each</tt> no longer returns the iterated collection, for improved
         consistency with ES5's <tt>forEach</tt>.
       </p>
-      
+
       <p>
         <b class="header">1.1.2</b><br />
-        Fixed <tt>_.contains</tt>, which was mistakenly pointing at 
-        <tt>_.intersect</tt> instead of <tt>_.include</tt>, like it should 
+        Fixed <tt>_.contains</tt>, which was mistakenly pointing at
+        <tt>_.intersect</tt> instead of <tt>_.include</tt>, like it should
         have been. Added <tt>_.unique</tt> as an alias for <tt>_.uniq</tt>.
       </p>
-      
+
       <p>
         <b class="header">1.1.1</b><br />
         Improved the speed of <tt>_.template</tt>, and its handling of multiline
-        interpolations. Ryan Tenney contributed optimizations to many Underscore 
+        interpolations. Ryan Tenney contributed optimizations to many Underscore
         functions. An annotated version of the source code is now available.
       </p>
-      
+
       <p>
         <b class="header">1.1.0</b><br />
         The method signature of <tt>_.reduce</tt> has been changed to match
@@ -1731,33 +1865,33 @@
         called with no arguments, and preserves whitespace. <tt>_.contains</tt>
         is a new alias for <tt>_.include</tt>.
       </p>
-      
+
       <p>
         <b class="header">1.0.4</b><br />
-        <a href="http://themoell.com/">Andri Möll</a> contributed the <tt>_.memoize</tt> 
-        function, which can be used to speed up expensive repeated computations 
+        <a href="http://themoell.com/">Andri Möll</a> contributed the <tt>_.memoize</tt>
+        function, which can be used to speed up expensive repeated computations
         by caching the results.
       </p>
-      
+
       <p>
         <b class="header">1.0.3</b><br />
         Patch that makes <tt>_.isEqual</tt> return <tt>false</tt> if any property
         of the compared object has a <tt>NaN</tt> value. Technically the correct
         thing to do, but of questionable semantics. Watch out for NaN comparisons.
       </p>
-      
+
       <p>
         <b class="header">1.0.2</b><br />
         Fixes <tt>_.isArguments</tt> in recent versions of Opera, which have
         arguments objects as real Arrays.
       </p>
-      
+
       <p>
         <b class="header">1.0.1</b><br />
-        Bugfix for <tt>_.isEqual</tt>, when comparing two objects with the same 
+        Bugfix for <tt>_.isEqual</tt>, when comparing two objects with the same
         number of undefined keys, but with different names.
       </p>
-      
+
       <p>
         <b class="header">1.0.0</b><br />
         Things have been stable for many months now, so Underscore is now
@@ -1765,15 +1899,15 @@
         include <tt>_.isBoolean</tt>, and the ability to have <tt>_.extend</tt>
         take multiple source objects.
       </p>
-      
+
       <p>
         <b class="header">0.6.0</b><br />
-        Major release. Incorporates a number of 
+        Major release. Incorporates a number of
         <a href="http://github.com/ratbeard">Mile Frawley's</a> refactors for
         safer duck-typing on collection functions, and cleaner internals. A new
         <tt>_.mixin</tt> method that allows you to extend Underscore with utility
-        functions of your own. Added <tt>_.times</tt>, which works the same as in 
-        Ruby or Prototype.js. Native support for ECMAScript 5's <tt>Array.isArray</tt>, 
+        functions of your own. Added <tt>_.times</tt>, which works the same as in
+        Ruby or Prototype.js. Native support for ECMAScript 5's <tt>Array.isArray</tt>,
         and <tt>Object.keys</tt>.
       </p>
 
@@ -1831,7 +1965,7 @@
         <b class="header">0.5.1</b><br />
         Added an <tt>_.isArguments</tt> function. Lots of little safety checks
         and optimizations contributed by
-        <a href="http://github.com/iamnoah/">Noah Sloan</a> and 
+        <a href="http://github.com/iamnoah/">Noah Sloan</a> and
         <a href="http://themoell.com/">Andri Möll</a>.
       </p>
 
@@ -1906,7 +2040,7 @@
         like so: <tt>_([1, 2, 3]).map(...);</tt>. Original patch provided by
         <a href="http://macournoyer.com/">Marc-André Cournoyer</a>.
         Wrapped objects can be chained through multiple
-        method invocations. A <a href="#functions"><tt>functions</tt></a> method
+        method invocations. A <a href="#object-functions"><tt>functions</tt></a> method
         was added, providing a sorted list of all the functions in Underscore.
       </p>
 
diff --git a/weinre.server/node_modules/underscore/package.json b/weinre.server/node_modules/underscore/package.json
index 4a2e3ca..5cf9010 100644
--- a/weinre.server/node_modules/underscore/package.json
+++ b/weinre.server/node_modules/underscore/package.json
@@ -1,10 +1,25 @@
 {
-  "name"          : "underscore",
-  "description"   : "JavaScript's functional programming helper library.",
-  "homepage"      : "http://documentcloud.github.com/underscore/",
-  "keywords"      : ["util", "functional", "server", "client", "browser"],
-  "author"        : "Jeremy Ashkenas <jeremy@documentcloud.org>",
-  "repository"    : {"type": "git", "url": "git://github.com/documentcloud/underscore.git"},
-  "main"          : "underscore.js",
-  "version"       : "1.3.1"
+  "name": "underscore",
+  "description": "JavaScript's functional programming helper library.",
+  "homepage": "http://documentcloud.github.com/underscore/",
+  "keywords": [
+    "util",
+    "functional",
+    "server",
+    "client",
+    "browser"
+  ],
+  "author": {
+    "name": "Jeremy Ashkenas",
+    "email": "jeremy@documentcloud.org"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/documentcloud/underscore.git"
+  },
+  "main": "underscore.js",
+  "version": "1.3.3",
+  "readme": "                       __                                                         \n                      /\\ \\                                                         __           \n     __  __    ___    \\_\\ \\     __   _ __   ____    ___    ___   _ __    __       /\\_\\    ____  \n    /\\ \\/\\ \\ /' _ `\\  /'_  \\  /'__`\\/\\  __\\/ ,__\\  / ___\\ / __`\\/\\  __\\/'__`\\     \\/\\ \\  /',__\\ \n    \\ \\ \\_\\ \\/\\ \\/\\ \\/\\ \\ \\ \\/\\  __/\\ \\ \\//\\__, `\\/\\ \\__//\\ \\ \\ \\ \\ \\//\\  __/  __  \\ \\ \\/\\__, `\\\n     \\ \\____/\\ \\_\\ \\_\\ \\___,_\\ \\____\\\\ \\_\\\\/\\____/\\ \\____\\ \\____/\\ \\_\\\\ \\____\\/\\_\\ _\\ \\ \\/\\____/\n      \\/___/  \\/_/\\/_/\\/__,_ /\\/____/ \\/_/ \\/___/  \\/____/\\/___/  \\/_/ \\/____/\\/_//\\ \\_\\ \\/___/ \n                                                                                  \\ \\____/      \n                                                                                   \\/___/\n                                                                               \nUnderscore.js is a utility-belt library for JavaScript that provides \nsupport for the usual functional suspects (each, map, reduce, filter...) \nwithout extending any core JavaScript objects.\n\nFor Docs, License, Tests, and pre-packed downloads, see:\nhttp://documentcloud.github.com/underscore/\n\nMany thanks to our contributors:\nhttps://github.com/documentcloud/underscore/contributors\n",
+  "_id": "underscore@1.3.3",
+  "_from": "underscore@1.3.x"
 }
diff --git a/weinre.server/node_modules/underscore/underscore-min.js b/weinre.server/node_modules/underscore/underscore-min.js
index 5b55f32..5a0cb3b 100644
--- a/weinre.server/node_modules/underscore/underscore-min.js
+++ b/weinre.server/node_modules/underscore/underscore-min.js
@@ -1,31 +1,32 @@
-// Underscore.js 1.3.1
+// Underscore.js 1.3.3
 // (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
 // Underscore is freely distributable under the MIT license.
 // Portions of Underscore are inspired or borrowed from Prototype,
 // Oliver Steele's Functional, and John Resig's Micro-Templating.
 // For all details and documentation:
 // http://documentcloud.github.com/underscore
-(function(){function q(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
-c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&q(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&q(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c,
-h)&&!f--)break;g=!f}}d.pop();return g}var r=this,G=r._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,H=k.unshift,l=o.toString,I=o.hasOwnProperty,w=k.forEach,x=k.map,y=k.reduce,z=k.reduceRight,A=k.filter,B=k.every,C=k.some,p=k.indexOf,D=k.lastIndexOf,o=Array.isArray,J=Object.keys,s=Function.prototype.bind,b=function(a){return new m(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else r._=b;b.VERSION="1.3.1";var j=b.each=
-b.forEach=function(a,c,d){if(a!=null)if(w&&a.forEach===w)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(d,a[e],e,a)===n)break}else for(e in a)if(b.has(a,e)&&c.call(d,a[e],e,a)===n)break};b.map=b.collect=function(a,c,b){var e=[];if(a==null)return e;if(x&&a.map===x)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});if(a.length===+a.length)e.length=a.length;return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=arguments.length>2;a==
-null&&(a=[]);if(y&&a.reduce===y)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(z&&a.reduceRight===z)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect=
-function(a,c,b){var e;E(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(A&&a.filter===A)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(B&&a.every===B)return a.every(c,b);j(a,function(a,g,h){if(!(e=
-e&&c.call(b,a,g,h)))return n});return e};var E=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(C&&a.some===C)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return p&&a.indexOf===p?a.indexOf(c)!=-1:b=E(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck=
-function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a,computed:b})});
-return e.value};b.shuffle=function(a){var b=[],d;j(a,function(a,f){f==0?b[0]=a:(d=Math.floor(Math.random()*(f+1)),b[f]=b[d],b[d]=a)});return b};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a,
-c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-1]};b.rest=
-b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];return d},[]);
-return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c,
-d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(p&&a.indexOf===p)return a.indexOf(c);for(d=0,e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(D&&a.lastIndexOf===D)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g};
-var F=function(){};b.bind=function(a,c){var d,e;if(a.bind===s&&s)return s.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));F.prototype=a.prototype;var b=new F,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,
-c){var d={};c||(c=b.identity);return function(){var e=c.apply(this,arguments);return b.has(d,e)?d[e]:d[e]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i=b.debounce(function(){h=g=false},c);return function(){d=this;e=arguments;var b;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);i()},c));g?h=true:
-a.apply(d,e);i();g=true}};b.debounce=function(a,b){var d;return function(){var e=this,f=arguments;clearTimeout(d);d=setTimeout(function(){d=null;a.apply(e,f)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments,0));return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};
-b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=J||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.defaults=function(a){j(i.call(arguments,
-1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)};
-b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!b.has(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"};
-b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,b){return I.call(a,b)};b.noConflict=function(){r._=G;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")};b.mixin=function(a){j(b.functions(a),
-function(c){K(c,b[c]=a[c])})};var L=0;b.uniqueId=function(a){var b=L++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var t=/.^/,u=function(a){return a.replace(/\\\\/g,"\\").replace(/\\'/g,"'")};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape||t,function(a,b){return"',_.escape("+
-u(b)+"),'"}).replace(d.interpolate||t,function(a,b){return"',"+u(b)+",'"}).replace(d.evaluate||t,function(a,b){return"');"+u(b).replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var v=function(a,c){return c?b(a).chain():a},K=function(a,c){m.prototype[a]=
-function(){var a=i.call(arguments);H.call(a,this._wrapped);return v(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return v(d,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return v(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain=
-true;return this};m.prototype.value=function(){return this._wrapped}}).call(this);
+(function(){function r(a,c,d){if(a===c)return 0!==a||1/a==1/c;if(null==a||null==c)return a===c;a._chain&&(a=a._wrapped);c._chain&&(c=c._wrapped);if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return!1;switch(e){case "[object String]":return a==""+c;case "[object Number]":return a!=+a?c!=+c:0==a?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
+c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if("object"!=typeof a||"object"!=typeof c)return!1;for(var f=d.length;f--;)if(d[f]==a)return!0;d.push(a);var f=0,g=!0;if("[object Array]"==e){if(f=a.length,g=f==c.length)for(;f--&&(g=f in a==f in c&&r(a[f],c[f],d)););}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return!1;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&r(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c,h)&&!f--)break;
+g=!f}}d.pop();return g}var s=this,I=s._,o={},k=Array.prototype,p=Object.prototype,i=k.slice,J=k.unshift,l=p.toString,K=p.hasOwnProperty,y=k.forEach,z=k.map,A=k.reduce,B=k.reduceRight,C=k.filter,D=k.every,E=k.some,q=k.indexOf,F=k.lastIndexOf,p=Array.isArray,L=Object.keys,t=Function.prototype.bind,b=function(a){return new m(a)};"undefined"!==typeof exports?("undefined"!==typeof module&&module.exports&&(exports=module.exports=b),exports._=b):s._=b;b.VERSION="1.3.3";var j=b.each=b.forEach=function(a,
+c,d){if(a!=null)if(y&&a.forEach===y)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(d,a[e],e,a)===o)break}else for(e in a)if(b.has(a,e)&&c.call(d,a[e],e,a)===o)break};b.map=b.collect=function(a,c,b){var e=[];if(a==null)return e;if(z&&a.map===z)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});if(a.length===+a.length)e.length=a.length;return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(A&&
+a.reduce===A){e&&(c=b.bind(c,e));return f?a.reduce(c,d):a.reduce(c)}j(a,function(a,b,i){if(f)d=c.call(e,d,a,b,i);else{d=a;f=true}});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(B&&a.reduceRight===B){e&&(c=b.bind(c,e));return f?a.reduceRight(c,d):a.reduceRight(c)}var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect=function(a,
+c,b){var e;G(a,function(a,g,h){if(c.call(b,a,g,h)){e=a;return true}});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(C&&a.filter===C)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(D&&a.every===D)return a.every(c,b);j(a,function(a,g,h){if(!(e=e&&c.call(b,
+a,g,h)))return o});return!!e};var G=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(E&&a.some===E)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return o});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;if(q&&a.indexOf===q)return a.indexOf(c)!=-1;return b=G(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck=
+function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a)&&a[0]===+a[0])return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a)&&a[0]===+a[0])return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&
+(e={value:a,computed:b})});return e.value};b.shuffle=function(a){var b=[],d;j(a,function(a,f){d=Math.floor(Math.random()*(f+1));b[f]=b[d];b[d]=a});return b};b.sortBy=function(a,c,d){var e=b.isFunction(c)?c:function(a){return a[c]};return b.pluck(b.map(a,function(a,b,c){return{value:a,criteria:e.call(d,a,b,c)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c===void 0?1:d===void 0?-1:c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};
+j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a,c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:b.isArray(a)||b.isArguments(a)?i.call(a):a.toArray&&b.isFunction(a.toArray)?a.toArray():b.values(a)};b.size=function(a){return b.isArray(a)?a.length:b.keys(a).length};b.first=b.head=b.take=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,
+0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-1]};b.rest=b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,
+e=[];a.length<3&&(c=true);b.reduce(d,function(d,g,h){if(c?b.last(d)!==g||!d.length:!b.include(d,g)){d.push(g);e.push(a[h])}return d},[]);return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1),true);return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=
+i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c,d){if(a==null)return-1;var e;if(d){d=b.sortedIndex(a,c);return a[d]===c?d:-1}if(q&&a.indexOf===q)return a.indexOf(c);d=0;for(e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(F&&a.lastIndexOf===F)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){if(arguments.length<=
+1){b=a||0;a=0}for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;){g[f++]=a;a=a+d}return g};var H=function(){};b.bind=function(a,c){var d,e;if(a.bind===t&&t)return t.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));H.prototype=a.prototype;var b=new H,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=
+i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,c){var d={};c||(c=b.identity);return function(){var e=c.apply(this,arguments);return b.has(d,e)?d[e]:d[e]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(null,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i,j=b.debounce(function(){h=
+g=false},c);return function(){d=this;e=arguments;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);j()},c));g?h=true:i=a.apply(d,e);j();g=true;return i}};b.debounce=function(a,b,d){var e;return function(){var f=this,g=arguments;d&&!e&&a.apply(f,g);clearTimeout(e);e=setTimeout(function(){e=null;d||a.apply(f,g)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments,0));
+return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=L||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&
+c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.pick=function(a){var c={};j(b.flatten(i.call(arguments,1)),function(b){b in a&&(c[b]=a[b])});return c};b.defaults=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return r(a,b,[])};b.isEmpty=
+function(a){if(a==null)return true;if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=p||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)};b.isArguments=function(a){return l.call(a)=="[object Arguments]"};b.isArguments(arguments)||(b.isArguments=function(a){return!(!a||!b.has(a,"callee"))});b.isFunction=function(a){return l.call(a)=="[object Function]"};
+b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isFinite=function(a){return b.isNumber(a)&&isFinite(a)};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"};b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,
+b){return K.call(a,b)};b.noConflict=function(){s._=I;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")};b.result=function(a,c){if(a==null)return null;var d=a[c];return b.isFunction(d)?d.call(a):d};b.mixin=function(a){j(b.functions(a),function(c){M(c,b[c]=a[c])})};var N=0;b.uniqueId=
+function(a){var b=N++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var u=/.^/,n={"\\":"\\","'":"'",r:"\r",n:"\n",t:"\t",u2028:"\u2028",u2029:"\u2029"},v;for(v in n)n[n[v]]=v;var O=/\\|'|\r|\n|\t|\u2028|\u2029/g,P=/\\(\\|'|r|n|t|u2028|u2029)/g,w=function(a){return a.replace(P,function(a,b){return n[b]})};b.template=function(a,c,d){d=b.defaults(d||{},b.templateSettings);a="__p+='"+a.replace(O,function(a){return"\\"+n[a]}).replace(d.escape||
+u,function(a,b){return"'+\n_.escape("+w(b)+")+\n'"}).replace(d.interpolate||u,function(a,b){return"'+\n("+w(b)+")+\n'"}).replace(d.evaluate||u,function(a,b){return"';\n"+w(b)+"\n;__p+='"})+"';\n";d.variable||(a="with(obj||{}){\n"+a+"}\n");var a="var __p='';var print=function(){__p+=Array.prototype.join.call(arguments, '')};\n"+a+"return __p;\n",e=new Function(d.variable||"obj","_",a);if(c)return e(c,b);c=function(a){return e.call(this,a,b)};c.source="function("+(d.variable||"obj")+"){\n"+a+"}";return c};
+b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var x=function(a,c){return c?b(a).chain():a},M=function(a,c){m.prototype[a]=function(){var a=i.call(arguments);J.call(a,this._wrapped);return x(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return x(d,
+this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return x(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain=true;return this};m.prototype.value=function(){return this._wrapped}}).call(this);
diff --git a/weinre.server/node_modules/underscore/underscore.js b/weinre.server/node_modules/underscore/underscore.js
index 208d4cd..f6f7e2f 100644
--- a/weinre.server/node_modules/underscore/underscore.js
+++ b/weinre.server/node_modules/underscore/underscore.js
@@ -1,4 +1,4 @@
-//     Underscore.js 1.3.1
+//     Underscore.js 1.3.3
 //     (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
 //     Underscore is freely distributable under the MIT license.
 //     Portions of Underscore are inspired or borrowed from Prototype,
@@ -62,7 +62,7 @@
   }
 
   // Current version.
-  _.VERSION = '1.3.1';
+  _.VERSION = '1.3.3';
 
   // Collection Functions
   // --------------------
@@ -180,7 +180,7 @@
     each(obj, function(value, index, list) {
       if (!(result = result && iterator.call(context, value, index, list))) return breaker;
     });
-    return result;
+    return !!result;
   };
 
   // Determine if at least one element in the object matches a truth test.
@@ -224,7 +224,7 @@
 
   // Return the maximum element or (element-based computation).
   _.max = function(obj, iterator, context) {
-    if (!iterator && _.isArray(obj)) return Math.max.apply(Math, obj);
+    if (!iterator && _.isArray(obj) && obj[0] === +obj[0]) return Math.max.apply(Math, obj);
     if (!iterator && _.isEmpty(obj)) return -Infinity;
     var result = {computed : -Infinity};
     each(obj, function(value, index, list) {
@@ -236,7 +236,7 @@
 
   // Return the minimum element (or element-based computation).
   _.min = function(obj, iterator, context) {
-    if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj);
+    if (!iterator && _.isArray(obj) && obj[0] === +obj[0]) return Math.min.apply(Math, obj);
     if (!iterator && _.isEmpty(obj)) return Infinity;
     var result = {computed : Infinity};
     each(obj, function(value, index, list) {
@@ -250,19 +250,16 @@
   _.shuffle = function(obj) {
     var shuffled = [], rand;
     each(obj, function(value, index, list) {
-      if (index == 0) {
-        shuffled[0] = value;
-      } else {
-        rand = Math.floor(Math.random() * (index + 1));
-        shuffled[index] = shuffled[rand];
-        shuffled[rand] = value;
-      }
+      rand = Math.floor(Math.random() * (index + 1));
+      shuffled[index] = shuffled[rand];
+      shuffled[rand] = value;
     });
     return shuffled;
   };
 
   // Sort the object's values by a criterion produced by an iterator.
-  _.sortBy = function(obj, iterator, context) {
+  _.sortBy = function(obj, val, context) {
+    var iterator = _.isFunction(val) ? val : function(obj) { return obj[val]; };
     return _.pluck(_.map(obj, function(value, index, list) {
       return {
         value : value,
@@ -270,6 +267,8 @@
       };
     }).sort(function(left, right) {
       var a = left.criteria, b = right.criteria;
+      if (a === void 0) return 1;
+      if (b === void 0) return -1;
       return a < b ? -1 : a > b ? 1 : 0;
     }), 'value');
   };
@@ -299,26 +298,26 @@
   };
 
   // Safely convert anything iterable into a real, live array.
-  _.toArray = function(iterable) {
-    if (!iterable)                return [];
-    if (iterable.toArray)         return iterable.toArray();
-    if (_.isArray(iterable))      return slice.call(iterable);
-    if (_.isArguments(iterable))  return slice.call(iterable);
-    return _.values(iterable);
+  _.toArray = function(obj) {
+    if (!obj)                                     return [];
+    if (_.isArray(obj))                           return slice.call(obj);
+    if (_.isArguments(obj))                       return slice.call(obj);
+    if (obj.toArray && _.isFunction(obj.toArray)) return obj.toArray();
+    return _.values(obj);
   };
 
   // Return the number of elements in an object.
   _.size = function(obj) {
-    return _.toArray(obj).length;
+    return _.isArray(obj) ? obj.length : _.keys(obj).length;
   };
 
   // Array Functions
   // ---------------
 
   // Get the first element of an array. Passing **n** will return the first N
-  // values in the array. Aliased as `head`. The **guard** check allows it to work
-  // with `_.map`.
-  _.first = _.head = function(array, n, guard) {
+  // values in the array. Aliased as `head` and `take`. The **guard** check
+  // allows it to work with `_.map`.
+  _.first = _.head = _.take = function(array, n, guard) {
     return (n != null) && !guard ? slice.call(array, 0, n) : array[0];
   };
 
@@ -372,15 +371,17 @@
   // Aliased as `unique`.
   _.uniq = _.unique = function(array, isSorted, iterator) {
     var initial = iterator ? _.map(array, iterator) : array;
-    var result = [];
-    _.reduce(initial, function(memo, el, i) {
-      if (0 == i || (isSorted === true ? _.last(memo) != el : !_.include(memo, el))) {
-        memo[memo.length] = el;
-        result[result.length] = array[i];
+    var results = [];
+    // The `isSorted` flag is irrelevant if the array only contains two elements.
+    if (array.length < 3) isSorted = true;
+    _.reduce(initial, function (memo, value, index) {
+      if (isSorted ? _.last(memo) !== value || !memo.length : !_.include(memo, value)) {
+        memo.push(value);
+        results.push(array[index]);
       }
       return memo;
     }, []);
-    return result;
+    return results;
   };
 
   // Produce an array that contains the union: each distinct element from all of
@@ -403,7 +404,7 @@
   // Take the difference between one array and a number of other arrays.
   // Only the elements present in just the first array will remain.
   _.difference = function(array) {
-    var rest = _.flatten(slice.call(arguments, 1));
+    var rest = _.flatten(slice.call(arguments, 1), true);
     return _.filter(array, function(value){ return !_.include(rest, value); });
   };
 
@@ -514,7 +515,7 @@
   // it with the arguments supplied.
   _.delay = function(func, wait) {
     var args = slice.call(arguments, 2);
-    return setTimeout(function(){ return func.apply(func, args); }, wait);
+    return setTimeout(function(){ return func.apply(null, args); }, wait);
   };
 
   // Defers a function, scheduling it to run after the current call stack has
@@ -526,7 +527,7 @@
   // Returns a function, that, when invoked, will only be triggered at most once
   // during a given window of time.
   _.throttle = function(func, wait) {
-    var context, args, timeout, throttling, more;
+    var context, args, timeout, throttling, more, result;
     var whenDone = _.debounce(function(){ more = throttling = false; }, wait);
     return function() {
       context = this; args = arguments;
@@ -539,24 +540,27 @@
       if (throttling) {
         more = true;
       } else {
-        func.apply(context, args);
+        result = func.apply(context, args);
       }
       whenDone();
       throttling = true;
+      return result;
     };
   };
 
   // Returns a function, that, as long as it continues to be invoked, will not
   // be triggered. The function will be called after it stops being called for
-  // N milliseconds.
-  _.debounce = function(func, wait) {
+  // N milliseconds. If `immediate` is passed, trigger the function on the
+  // leading edge, instead of the trailing.
+  _.debounce = function(func, wait, immediate) {
     var timeout;
     return function() {
       var context = this, args = arguments;
       var later = function() {
         timeout = null;
-        func.apply(context, args);
+        if (!immediate) func.apply(context, args);
       };
+      if (immediate && !timeout) func.apply(context, args);
       clearTimeout(timeout);
       timeout = setTimeout(later, wait);
     };
@@ -641,6 +645,15 @@
     return obj;
   };
 
+  // Return a copy of the object only containing the whitelisted properties.
+  _.pick = function(obj) {
+    var result = {};
+    each(_.flatten(slice.call(arguments, 1)), function(key) {
+      if (key in obj) result[key] = obj[key];
+    });
+    return result;
+  };
+
   // Fill in a given object with default properties.
   _.defaults = function(obj) {
     each(slice.call(arguments, 1), function(source) {
@@ -761,6 +774,7 @@
   // Is a given array, string, or object empty?
   // An "empty" object has no enumerable own-properties.
   _.isEmpty = function(obj) {
+    if (obj == null) return true;
     if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;
     for (var key in obj) if (_.has(obj, key)) return false;
     return true;
@@ -807,6 +821,11 @@
     return toString.call(obj) == '[object Number]';
   };
 
+  // Is a given object a finite number?
+  _.isFinite = function(obj) {
+    return _.isNumber(obj) && isFinite(obj);
+  };
+
   // Is the given value `NaN`?
   _.isNaN = function(obj) {
     // `NaN` is the only value for which `===` is not reflexive.
@@ -868,6 +887,14 @@
     return (''+string).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#x27;').replace(/\//g,'&#x2F;');
   };
 
+  // If the value of the named property is a function then invoke it;
+  // otherwise, return it.
+  _.result = function(object, property) {
+    if (object == null) return null;
+    var value = object[property];
+    return _.isFunction(value) ? value.call(object) : value;
+  };
+
   // Add your own custom functions to the Underscore object, ensuring that
   // they're correctly added to the OOP wrapper as well.
   _.mixin = function(obj) {
@@ -897,39 +924,72 @@
   // guaranteed not to match.
   var noMatch = /.^/;
 
+  // Certain characters need to be escaped so that they can be put into a
+  // string literal.
+  var escapes = {
+    '\\': '\\',
+    "'": "'",
+    'r': '\r',
+    'n': '\n',
+    't': '\t',
+    'u2028': '\u2028',
+    'u2029': '\u2029'
+  };
+
+  for (var p in escapes) escapes[escapes[p]] = p;
+  var escaper = /\\|'|\r|\n|\t|\u2028|\u2029/g;
+  var unescaper = /\\(\\|'|r|n|t|u2028|u2029)/g;
+
   // Within an interpolation, evaluation, or escaping, remove HTML escaping
   // that had been previously added.
   var unescape = function(code) {
-    return code.replace(/\\\\/g, '\\').replace(/\\'/g, "'");
+    return code.replace(unescaper, function(match, escape) {
+      return escapes[escape];
+    });
   };
 
   // JavaScript micro-templating, similar to John Resig's implementation.
   // Underscore templating handles arbitrary delimiters, preserves whitespace,
   // and correctly escapes quotes within interpolated code.
-  _.template = function(str, data) {
-    var c  = _.templateSettings;
-    var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' +
-      'with(obj||{}){__p.push(\'' +
-      str.replace(/\\/g, '\\\\')
-         .replace(/'/g, "\\'")
-         .replace(c.escape || noMatch, function(match, code) {
-           return "',_.escape(" + unescape(code) + "),'";
-         })
-         .replace(c.interpolate || noMatch, function(match, code) {
-           return "'," + unescape(code) + ",'";
-         })
-         .replace(c.evaluate || noMatch, function(match, code) {
-           return "');" + unescape(code).replace(/[\r\n\t]/g, ' ') + ";__p.push('";
-         })
-         .replace(/\r/g, '\\r')
-         .replace(/\n/g, '\\n')
-         .replace(/\t/g, '\\t')
-         + "');}return __p.join('');";
-    var func = new Function('obj', '_', tmpl);
-    if (data) return func(data, _);
-    return function(data) {
-      return func.call(this, data, _);
+  _.template = function(text, data, settings) {
+    settings = _.defaults(settings || {}, _.templateSettings);
+
+    // Compile the template source, taking care to escape characters that
+    // cannot be included in a string literal and then unescape them in code
+    // blocks.
+    var source = "__p+='" + text
+      .replace(escaper, function(match) {
+        return '\\' + escapes[match];
+      })
+      .replace(settings.escape || noMatch, function(match, code) {
+        return "'+\n_.escape(" + unescape(code) + ")+\n'";
+      })
+      .replace(settings.interpolate || noMatch, function(match, code) {
+        return "'+\n(" + unescape(code) + ")+\n'";
+      })
+      .replace(settings.evaluate || noMatch, function(match, code) {
+        return "';\n" + unescape(code) + "\n;__p+='";
+      }) + "';\n";
+
+    // If a variable is not specified, place data values in local scope.
+    if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
+
+    source = "var __p='';" +
+      "var print=function(){__p+=Array.prototype.join.call(arguments, '')};\n" +
+      source + "return __p;\n";
+
+    var render = new Function(settings.variable || 'obj', '_', source);
+    if (data) return render(data, _);
+    var template = function(data) {
+      return render.call(this, data, _);
     };
+
+    // Provide the compiled function source as a convenience for build time
+    // precompilation.
+    template.source = 'function(' + (settings.variable || 'obj') + '){\n' +
+      source + '}';
+
+    return template;
   };
 
   // Add a "chain" function, which will delegate to the wrapper.