about summary refs log tree commit diff
diff options
context:
space:
mode:
authorZachary Sloan2014-07-09 18:39:52 +0000
committerZachary Sloan2014-07-09 18:39:52 +0000
commitfbdbf4b7410185e2a978ecc8e120ae56ff6da0ce (patch)
treef60a9bbef32a7575abe3b20fa682084b7174049c
parentdf6a70c9a06bc30856a1bc46023bd67e5325f5c9 (diff)
downloadgenenetwork2-fbdbf4b7410185e2a978ecc8e120ae56ff6da0ce.tar.gz
Updated coffeescript, svg export working fine, interval mapping zoom working
-rwxr-xr-xwqflask/base/data_set.py5
-rwxr-xr-xwqflask/other_config/nginx_conf/penguin.conf2
-rwxr-xr-xwqflask/wqflask/interval_mapping/interval_mapping.py16
-rwxr-xr-xwqflask/wqflask/marker_regression/marker_regression.py1184
-rwxr-xr-xwqflask/wqflask/my_pylmm/data/genofile_parser.py7
-rwxr-xr-xwqflask/wqflask/static/new/css/.corr_matrix.css.swpbin12288 -> 0 bytes
-rwxr-xr-xwqflask/wqflask/static/new/css/interval_mapping.css16
-rwxr-xr-xwqflask/wqflask/static/new/css/marker_regression.css12
-rwxr-xr-xwqflask/wqflask/static/new/javascript/bar_chart.js680
-rwxr-xr-xwqflask/wqflask/static/new/javascript/box_plot.js103
-rw-r--r--wqflask/wqflask/static/new/javascript/chr_interval_map.coffee293
-rw-r--r--wqflask/wqflask/static/new/javascript/chr_interval_map.js224
-rwxr-xr-xwqflask/wqflask/static/new/javascript/chr_manhattan_plot.coffee17
-rwxr-xr-xwqflask/wqflask/static/new/javascript/chr_manhattan_plot.js423
-rw-r--r--wqflask/wqflask/static/new/javascript/compare_traits_scatterplot.js225
-rw-r--r--wqflask/wqflask/static/new/javascript/corr_matrix.js295
-rw-r--r--wqflask/wqflask/static/new/javascript/create_corr_matrix.js81
-rw-r--r--wqflask/wqflask/static/new/javascript/create_interval_map.coffee91
-rw-r--r--wqflask/wqflask/static/new/javascript/create_interval_map.js53
-rw-r--r--wqflask/wqflask/static/new/javascript/create_manhattan_plot.coffee57
-rw-r--r--wqflask/wqflask/static/new/javascript/create_manhattan_plot.js53
-rwxr-xr-xwqflask/wqflask/static/new/javascript/dataset_select_menu.js255
-rw-r--r--wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js67
-rwxr-xr-xwqflask/wqflask/static/new/javascript/get_traits_from_collection.js355
-rwxr-xr-xwqflask/wqflask/static/new/javascript/histogram.js222
-rw-r--r--wqflask/wqflask/static/new/javascript/interval_map_new.coffee86
-rw-r--r--wqflask/wqflask/static/new/javascript/interval_map_new.js39
-rwxr-xr-xwqflask/wqflask/static/new/javascript/interval_mapping.js434
-rw-r--r--wqflask/wqflask/static/new/javascript/lod_chart.coffee108
-rw-r--r--wqflask/wqflask/static/new/javascript/lod_chart.js1076
-rwxr-xr-xwqflask/wqflask/static/new/javascript/login.js86
-rw-r--r--wqflask/wqflask/static/new/javascript/manhattan_plot.coffee534
-rw-r--r--wqflask/wqflask/static/new/javascript/manhattan_plot.js475
-rwxr-xr-xwqflask/wqflask/static/new/javascript/marker_regression.coffee37
-rwxr-xr-xwqflask/wqflask/static/new/javascript/marker_regression.js662
-rwxr-xr-xwqflask/wqflask/static/new/javascript/marker_regression_old.js396
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/.npmignore11
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/CNAME1
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/CONTRIBUTING.md9
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/LICENSE22
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/README51
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/Rakefile79
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/bin/cake7
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/bin/coffee7
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/extras/jsl.conf44
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/browser.js101
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/cake.js113
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/coffee-script.js218
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/command.js506
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/grammar.js623
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/helpers.js150
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/index.js11
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/lexer.js905
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/nodes.js3088
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/optparse.js138
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/parser.js608
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/repl.js104
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/rewriter.js478
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/scope.js147
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/sourcemap.js237
-rwxr-xr-xwqflask/wqflask/static/new/javascript/node_modules/coffee-script/package.json57
-rwxr-xr-xwqflask/wqflask/static/new/javascript/password_strength.js76
-rw-r--r--wqflask/wqflask/static/new/javascript/scatterplot.js777
-rwxr-xr-xwqflask/wqflask/static/new/javascript/search_results.js200
-rwxr-xr-xwqflask/wqflask/static/new/javascript/show_trait.js826
-rwxr-xr-xwqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js163
-rwxr-xr-xwqflask/wqflask/static/new/javascript/stats.js210
-rwxr-xr-xwqflask/wqflask/static/new/javascript/thank_you.js16
-rwxr-xr-xwqflask/wqflask/static/new/javascript/validation.js92
-rwxr-xr-xwqflask/wqflask/templates/interval_mapping.html23
-rwxr-xr-xwqflask/wqflask/templates/marker_regression.html225
-rwxr-xr-xwqflask/wqflask/templates/show_trait.html1
-rwxr-xr-xwqflask/wqflask/templates/show_trait_mapping_tools.html16
-rwxr-xr-xwqflask/wqflask/user_manager.py1
-rwxr-xr-xwqflask/wqflask/views.py10
75 files changed, 6654 insertions, 12366 deletions
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index 843862aa..2a79dc9c 100755
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -162,14 +162,15 @@ class Markers(object):
         for marker in markers:
             if (marker['chr'] != "X") and (marker['chr'] != "Y"):
                 marker['chr'] = int(marker['chr'])
-            else:
-                marker['chr'] = 19
+            #else:
+            #    marker['chr'] = 20
             print("Mb:", marker['Mb'])
             marker['Mb'] = float(marker['Mb'])
             
         self.markers = markers
         #print("self.markers:", self.markers)
     
+    
     def add_pvalues(self, p_values):
         print("length of self.markers:", len(self.markers))
         print("length of p_values:", len(p_values))
diff --git a/wqflask/other_config/nginx_conf/penguin.conf b/wqflask/other_config/nginx_conf/penguin.conf
index 5c380da8..0a89072e 100755
--- a/wqflask/other_config/nginx_conf/penguin.conf
+++ b/wqflask/other_config/nginx_conf/penguin.conf
@@ -1,5 +1,7 @@
 server {
     # Modeled after http://flask.pocoo.org/docs/deploying/wsgi-standalone/
+
+    client_max_body_size 20M;
     listen 80;
 
     server_name gn2python.genenetwork.org;
diff --git a/wqflask/wqflask/interval_mapping/interval_mapping.py b/wqflask/wqflask/interval_mapping/interval_mapping.py
index a81a62b4..4ac7bde2 100755
--- a/wqflask/wqflask/interval_mapping/interval_mapping.py
+++ b/wqflask/wqflask/interval_mapping/interval_mapping.py
@@ -58,18 +58,18 @@ class IntervalMapping(object):
  
         self.json_data = {}
  
-        if self.method == "qtl_reaper":
-            self.json_data['lodnames'] = ['lod.hk']
-            self.gen_reaper_results(tempdata)
-        else:
-            self.gen_pylmm_results(tempdata)
+        #if self.method == "qtl_reaper":
+        self.json_data['lodnames'] = ['lod.hk']
+        self.gen_reaper_results(tempdata)
+        #else:
+        #    self.gen_pylmm_results(tempdata)
         #self.gen_qtl_results(tempdata)
 
         #Get chromosome lengths for drawing the interval map plot
         chromosome_mb_lengths = {}
         self.json_data['chrnames'] = []
         for key in self.species.chromosomes.chromosomes.keys():
-            self.json_data['chrnames'].append(self.species.chromosomes.chromosomes[key].name)
+            self.json_data['chrnames'].append([self.species.chromosomes.chromosomes[key].name, self.species.chromosomes.chromosomes[key].mb_length])
             
             chromosome_mb_lengths[key] = self.species.chromosomes.chromosomes[key].mb_length
         
@@ -94,10 +94,10 @@ class IntervalMapping(object):
         #self.plot_scale = start_vars['scale']
         #if self.plotScale == 'physic' and not fd.genotype.Mbmap:
         #    self.plotScale = 'morgan'
-        self.method = start_vars['mapping_method']
+        #self.method = start_vars['mapping_method']
         self.num_permutations = int(start_vars['num_permutations'])
         #self.do_bootstrap = start_vars['do_bootstrap']
-        self.selected_chr = start_vars['chromosome']
+        #self.selected_chr = start_vars['chromosome']
         if start_vars['display_additive'] == "yes":
             self.additive = True
         else:
diff --git a/wqflask/wqflask/marker_regression/marker_regression.py b/wqflask/wqflask/marker_regression/marker_regression.py
index d43fe37c..30c6453c 100755
--- a/wqflask/wqflask/marker_regression/marker_regression.py
+++ b/wqflask/wqflask/marker_regression/marker_regression.py
@@ -1,585 +1,599 @@
-from __future__ import absolute_import, print_function, division
-
-from base.trait import GeneralTrait
-from base import data_set  #import create_dataset
-
-from pprint import pformat as pf
-
-import string
-import sys
-import datetime
-import os
-import collections
-import uuid
-
-import numpy as np
-from scipy import linalg
-
-import cPickle as pickle
-
-import simplejson as json
-
-from redis import Redis
-Redis = Redis()
-
-from flask import Flask, g
-
-from base.trait import GeneralTrait
-from base import data_set
-from base import species
-from base import webqtlConfig
-from utility import webqtlUtil
-from wqflask.my_pylmm.data import prep_data
-from wqflask.my_pylmm.pyLMM import lmm
-from wqflask.my_pylmm.pyLMM import input
-from utility import helper_functions
-from utility import Plot, Bunch
-from utility import temp_data
-
-from utility.benchmark import Bench
-
-
-class MarkerRegression(object):
-
-    def __init__(self, start_vars, temp_uuid):
-
-        helper_functions.get_species_dataset_trait(self, start_vars)
-
-        #tempdata = temp_data.TempData(temp_uuid)
-        
-        self.samples = [] # Want only ones with values
-        self.vals = []
-
-        for sample in self.dataset.group.samplelist:
-            value = start_vars['value:' + sample]
-            self.samples.append(str(sample))
-            self.vals.append(value)
- 
-        self.mapping_method = start_vars['method']
-        self.maf = start_vars['maf'] # Minor allele frequency
-        print("self.maf:", self.maf)
- 
-        if self.mapping_method == "gemma":
-            qtl_results = self.run_gemma()
-        elif self.mapping_method == "plink":
-            qtl_results = self.run_plink()
-            #print("qtl_results:", pf(qtl_results))
-        elif self.mapping_method == "pylmm":
-            print("RUNNING PYLMM")
-            #self.qtl_results = self.gen_data(tempdata)
-            qtl_results = self.gen_data(str(temp_uuid))
-        else:
-            print("RUNNING NOTHING")
-            
-        self.lod_cutoff = 2
-        self.filtered_markers = []
-        for marker in qtl_results:
-            if marker['chr'] > 0:
-                self.filtered_markers.append(marker)
-            #if marker['lod_score'] > self.lod_cutoff:
-
-                
-        #print("filtered_markers:", self.filtered_markers)
-
-        #Get chromosome lengths for drawing the manhattan plot
-        chromosome_mb_lengths = {}
-        for key in self.species.chromosomes.chromosomes.keys():
-            chromosome_mb_lengths[key] = self.species.chromosomes.chromosomes[key].mb_length
-        
-        self.js_data = dict(
-            this_trait = self.this_trait.name,
-            data_set = self.dataset.name,
-            maf = self.maf,
-            chromosomes = chromosome_mb_lengths,
-            qtl_results = self.filtered_markers,
-        )
-
-    def run_gemma(self):
-        """Generates p-values for each marker using GEMMA"""
-        
-        self.dataset.group.get_markers()
-        
-        #filename = webqtlUtil.genRandStr("{}_{}_".format(self.dataset.group.name, self.this_trait.name))
-        self.gen_pheno_txt_file()
-
-        os.chdir("/home/zas1024/gene/web/gemma")
-
-        gemma_command = './gemma -bfile %s -k output_%s.cXX.txt -lmm 1 -o %s_output' % (
-                                                                                                 self.dataset.group.name,
-                                                                                                 self.dataset.group.name,
-                                                                                                 self.dataset.group.name)
-        print("gemma_command:" + gemma_command)
-        
-        os.system(gemma_command)
-        
-        included_markers, p_values = self.parse_gemma_output()
-        
-        self.dataset.group.get_specified_markers(markers = included_markers)
-        
-        #for marker in self.dataset.group.markers.markers:
-        #    if marker['name'] not in included_markers:
-        #        print("marker:", marker)
-        #        self.dataset.group.markers.markers.remove(marker)
-        #        #del self.dataset.group.markers.markers[marker]
-        
-        self.dataset.group.markers.add_pvalues(p_values)
-
-        return self.dataset.group.markers.markers
-
-
-    def parse_gemma_output(self):
-        included_markers = []
-        p_values = []
-        with open("/home/zas1024/gene/web/gemma/output/{}_output.assoc.txt".format(self.dataset.group.name)) as output_file:
-            for line in output_file:
-                if line.startswith("chr"):
-                    continue
-                else:
-                    included_markers.append(line.split("\t")[1])
-                    p_values.append(float(line.split("\t")[10]))
-                    #p_values[line.split("\t")[1]] = float(line.split("\t")[10])
-        print("p_values: ", p_values)
-        return included_markers, p_values
-
-    def gen_pheno_txt_file(self):
-        """Generates phenotype file for GEMMA"""
-        
-        #with open("/home/zas1024/gene/web/gemma/tmp_pheno/{}.txt".format(filename), "w") as outfile:
-        #    for sample, i in enumerate(self.samples):
-        #        print("sample:" + str(i))
-        #        print("self.vals[i]:" + str(self.vals[sample]))
-        #        outfile.write(str(i) + "\t" + str(self.vals[sample]) + "\n")
-                
-        with open("/home/zas1024/gene/web/gemma/{}.fam".format(self.dataset.group.name), "w") as outfile:
-            for i, sample in enumerate(self.samples):
-                outfile.write(str(sample) + " " + str(sample) + " 0 0 0 " + str(self.vals[i]) + "\n")
-
-    #def gen_plink_for_gemma(self, filename):
-    #    
-    #    make_bed = "/home/zas1024/plink/plink --file /home/zas1024/plink/%s --noweb --no-fid --no-parents --no-sex --no-pheno --pheno %s%s.txt --out %s%s --make-bed" % (webqtlConfig.HTMLPATH,
-    #                                                                                                                                             webqtlConfig.HTMLPATH,
-    #                                                                                                                                             self.dataset.group.name,
-    #                                                                                                                                             webqtlConfig.TMPDIR,
-    #                                                                                                                                             filename,
-    #                                                                                                                                             webqtlConfig.TMPDIR,
-    #                                                                                                                                             filename)
-    #
-    #
-    
-    def run_plink(self):
-    
-        os.chdir("/home/zas1024/plink")
-        
-        self.dataset.group.get_markers()
-        
-        plink_output_filename = webqtlUtil.genRandStr("%s_%s_"%(self.dataset.group.name, self.this_trait.name))
-        
-        self.gen_pheno_txt_file_plink(pheno_filename = plink_output_filename)
-        
-        plink_command = './plink --noweb --ped %s.ped --no-fid --no-parents --no-sex --no-pheno --map %s.map --pheno %s/%s.txt --pheno-name %s --maf %s --missing-phenotype -9999 --out %s%s --assoc ' % (self.dataset.group.name, self.dataset.group.name, webqtlConfig.TMPDIR, plink_output_filename, self.this_trait.name, self.maf, webqtlConfig.TMPDIR, plink_output_filename)
-        
-        os.system(plink_command)
-
-        count, p_values = self.parse_plink_output(plink_output_filename)
-        #gemma_command = './gemma -bfile %s -k output_%s.cXX.txt -lmm 1 -o %s_output' % (
-        #                                                                                         self.dataset.group.name,
-        #                                                                                         self.dataset.group.name,
-        #                                                                                         self.dataset.group.name)
-        #print("gemma_command:" + gemma_command)
-        #
-        #os.system(gemma_command)
-        #
-        #included_markers, p_values = self.parse_gemma_output()
-        #
-        #self.dataset.group.get_specified_markers(markers = included_markers)
-        
-        #for marker in self.dataset.group.markers.markers:
-        #    if marker['name'] not in included_markers:
-        #        print("marker:", marker)
-        #        self.dataset.group.markers.markers.remove(marker)
-        #        #del self.dataset.group.markers.markers[marker]
-        
-        print("p_values:", pf(p_values))
-        
-        self.dataset.group.markers.add_pvalues(p_values)
-
-        return self.dataset.group.markers.markers
-    
-    
-    def gen_pheno_txt_file_plink(self, pheno_filename = ''):
-        ped_sample_list = self.get_samples_from_ped_file()	
-        output_file = open("%s%s.txt" % (webqtlConfig.TMPDIR, pheno_filename), "wb")
-        header = 'FID\tIID\t%s\n' % self.this_trait.name
-        output_file.write(header)
-    
-        new_value_list = []
-        
-        #if valueDict does not include some strain, value will be set to -9999 as missing value
-        for i, sample in enumerate(ped_sample_list):
-            try:
-                value = self.vals[i]
-                value = str(value).replace('value=','')
-                value = value.strip()
-            except:
-                value = -9999
-    
-            new_value_list.append(value)
-            
-            
-        new_line = ''
-        for i, sample in enumerate(ped_sample_list):
-            j = i+1
-            value = new_value_list[i]
-            new_line += '%s\t%s\t%s\n'%(sample, sample, value)
-            
-            if j%1000 == 0:
-                output_file.write(newLine)
-                new_line = ''
-        
-        if new_line:
-            output_file.write(new_line)
-            
-        output_file.close()
-    
-    # get strain name from ped file in order
-    def get_samples_from_ped_file(self):
-        
-        os.chdir("/home/zas1024/plink")
-        
-        ped_file= open("{}.ped".format(self.dataset.group.name),"r")
-        line = ped_file.readline()
-        sample_list=[]
-        
-        while line:
-            lineList = string.split(string.strip(line), '\t')
-            lineList = map(string.strip, lineList)
-            
-            sample_name = lineList[0]
-            sample_list.append(sample_name)
-            
-            line = ped_file.readline()
-        
-        return sample_list
-    
-    ################################################################
-    # Generate Chr list, Chr OrderId and Retrieve Length Information 
-    ################################################################		
-    #def getChrNameOrderIdLength(self,RISet=''):
-    #    try:
-    #        query = """
-    #            Select
-    #                Chr_Length.Name,Chr_Length.OrderId,Length from Chr_Length, InbredSet
-    #            where
-    #                Chr_Length.SpeciesId = InbredSet.SpeciesId AND
-    #                InbredSet.Name = '%s' 
-    #            Order by OrderId
-    #            """ % (self.dataset.group.name)
-    #        results =g.db.execute(query).fetchall()
-    #        ChrList=[]
-    #        ChrLengthMbList=[]
-    #        ChrNameOrderIdDict={}
-    #        ChrOrderIdNameDict={}
-    #        
-    #        for item in results:
-    #            ChrList.append(item[0])
-    #            ChrNameOrderIdDict[item[0]]=item[1] # key is chr name, value is orderId
-    #            ChrOrderIdNameDict[item[1]]=item[0] # key is orderId, value is chr name
-    #            ChrLengthMbList.append(item[2])				
-    #            
-    #    except:
-    #        ChrList=[]
-    #        ChrNameOrderIdDict={}
-    #        ChrLengthMbList=[]
-    #        
-    #    return ChrList,ChrNameOrderIdDict,ChrOrderIdNameDict,ChrLengthMbList
-    
-    
-    def parse_plink_output(self, output_filename):
-        plink_results={}
-    
-        threshold_p_value = 0.01
-    
-        result_fp = open("%s%s.qassoc"% (webqtlConfig.TMPDIR, output_filename), "rb")
-        
-        header_line = result_fp.readline()# read header line
-        line = result_fp.readline()
-        
-        value_list = [] # initialize value list, this list will include snp, bp and pvalue info
-        p_value_dict = {}
-        count = 0
-        
-        while line:
-            #convert line from str to list
-            line_list = self.build_line_list(line=line)
-    
-            # only keep the records whose chromosome name is in db
-            if self.species.chromosomes.chromosomes.has_key(int(line_list[0])) and line_list[-1] and line_list[-1].strip()!='NA':
-    
-                chr_name = self.species.chromosomes.chromosomes[int(line_list[0])]
-                snp = line_list[1]
-                BP = line_list[2]
-                p_value = float(line_list[-1])
-                if threshold_p_value >= 0 and threshold_p_value <= 1:
-                    if p_value < threshold_p_value:
-                        p_value_dict[snp] = p_value
-                
-                if plink_results.has_key(chr_name):
-                    value_list = plink_results[chr_name]
-                    
-                    # pvalue range is [0,1]
-                    if threshold_p_value >=0 and threshold_p_value <= 1:
-                        if p_value < threshold_p_value:
-                            value_list.append((snp, BP, p_value))
-                            count += 1
-                    
-                    plink_results[chr_name] = value_list
-                    value_list = []
-                else:
-                    if threshold_p_value >= 0 and threshold_p_value <= 1:
-                        if p_value < threshold_p_value:
-                            value_list.append((snp, BP, p_value))
-                            count += 1
-
-                    if value_list:
-                        plink_results[chr_name] = value_list
-
-                    value_list=[]
-
-                line = result_fp.readline()
-            else:
-                line = result_fp.readline()
-
-        #if p_value_list:
-        #    min_p_value = min(p_value_list)
-        #else:
-        #    min_p_value = 0
-            
-        return count, p_value_dict
-    
-    ######################################################
-    # input: line: str,one line read from file
-    # function: convert line from str to list; 
-    # output: lineList list
-    #######################################################
-    def build_line_list(self, line=None):
-        
-        line_list = string.split(string.strip(line),' ')# irregular number of whitespaces between columns
-        line_list = [item for item in line_list if item <>'']
-        line_list = map(string.strip, line_list)
-    
-        return line_list
-    
-    #def gen_data(self, tempdata):
-    def gen_data(self, temp_uuid):
-        """Generates p-values for each marker"""
-
-        self.dataset.group.get_markers()
-
-        pheno_vector = np.array([val == "x" and np.nan or float(val) for val in self.vals])
-
-        #lmm_uuid = str(uuid.uuid4())
-
-        key = "pylmm:input:" + temp_uuid
-        print("key is:", pf(key))
-        #with Bench("Loading cache"):
-        #    result = Redis.get(key)
-
-        if self.dataset.group.species == "human":
-            p_values, t_stats = self.gen_human_results(pheno_vector, key, temp_uuid)
-            #p_values = self.trim_results(p_values)
-            
-        else:
-            print("NOW CWD IS:", os.getcwd())
-            genotype_data = [marker['genotypes'] for marker in self.dataset.group.markers.markers]
-            
-            no_val_samples = self.identify_empty_samples()
-            trimmed_genotype_data = self.trim_genotypes(genotype_data, no_val_samples)
-            
-            genotype_matrix = np.array(trimmed_genotype_data).T
-
-            #print("pheno_vector: ", pf(pheno_vector))
-            #print("genotype_matrix: ", pf(genotype_matrix))
-            #print("genotype_matrix.shape: ", pf(genotype_matrix.shape))
-
-            #params = {"pheno_vector": pheno_vector,
-            #            "genotype_matrix": genotype_matrix,
-            #            "restricted_max_likelihood": True,
-            #            "refit": False,
-            #            "temp_data": tempdata}
-            
-            params = dict(pheno_vector = pheno_vector.tolist(),
-                        genotype_matrix = genotype_matrix.tolist(),
-                        restricted_max_likelihood = True,
-                        refit = False,
-                        temp_uuid = temp_uuid,
-                        
-                        # meta data
-                        timestamp = datetime.datetime.now().isoformat(),
-                        )
-            
-            json_params = json.dumps(params)
-            #print("json_params:", json_params)
-            Redis.set(key, json_params)
-            Redis.expire(key, 60*60)
-            print("before printing command")
-
-            command = 'python /home/zas1024/gene/wqflask/wqflask/my_pylmm/pyLMM/lmm.py --key {} --species {}'.format(key,
-                                                                                                                    "other")
-            print("command is:", command)
-            print("after printing command")
-
-            os.system(command)
-
-            #t_stats, p_values = lmm.run(key)
-            #lmm.run(key)
-            
-            json_results = Redis.blpop("pylmm:results:" + temp_uuid, 45*60)
-            results = json.loads(json_results[1])
-            p_values = [float(result) for result in results['p_values']]
-            print("p_values:", p_values)
-            #p_values = self.trim_results(p_values)
-            t_stats = results['t_stats']
-            
-            #t_stats, p_values = lmm.run(
-            #    pheno_vector,
-            #    genotype_matrix,
-            #    restricted_max_likelihood=True,
-            #    refit=False,
-            #    temp_data=tempdata
-            #)
-            #print("p_values:", p_values)
-
-        self.dataset.group.markers.add_pvalues(p_values)
-        
-        #self.get_lod_score_cutoff()
-        
-        return self.dataset.group.markers.markers
-
-    def trim_results(self, p_values):
-        print("len_p_values:", len(p_values))
-        if len(p_values) > 500:
-            p_values.sort(reverse=True)
-            trimmed_values = p_values[:500]
-        
-        return trimmed_values
-
-    #def gen_human_results(self, pheno_vector, tempdata):
-    def gen_human_results(self, pheno_vector, key, temp_uuid):
-        file_base = os.path.join(webqtlConfig.PYLMM_PATH, self.dataset.group.name)
-
-        plink_input = input.plink(file_base, type='b')
-        input_file_name = os.path.join(webqtlConfig.SNP_PATH, self.dataset.group.name + ".snps.gz")
-
-        pheno_vector = pheno_vector.reshape((len(pheno_vector), 1))
-        covariate_matrix = np.ones((pheno_vector.shape[0],1))
-        kinship_matrix = np.fromfile(open(file_base + '.kin','r'),sep=" ")
-        kinship_matrix.resize((len(plink_input.indivs),len(plink_input.indivs)))
-
-        print("Before creating params")
-
-        params = dict(pheno_vector = pheno_vector.tolist(),
-                    covariate_matrix = covariate_matrix.tolist(),
-                    input_file_name = input_file_name,
-                    kinship_matrix = kinship_matrix.tolist(),
-                    refit = False,
-                    temp_uuid = temp_uuid,
-                        
-                    # meta data
-                    timestamp = datetime.datetime.now().isoformat(),
-                    )
-        
-        print("After creating params")
-        
-        json_params = json.dumps(params)
-        Redis.set(key, json_params)
-        Redis.expire(key, 60*60)
-
-        print("Before creating the command")
-
-        command = 'python /home/zas1024/gene/wqflask/wqflask/my_pylmm/pyLMM/lmm.py --key {} --species {}'.format(key,
-                                                                                                                "human")
-        
-        print("command is:", command)
-        
-        os.system(command)
-        
-        json_results = Redis.blpop("pylmm:results:" + temp_uuid, 45*60)
-        results = json.loads(json_results[1])
-        t_stats = results['t_stats']
-        p_values = results['p_values']
-        
-
-        #p_values, t_stats = lmm.run_human(key)
-
-        #p_values, t_stats = lmm.run_human(
-        #        pheno_vector,
-        #        covariate_matrix,
-        #        input_file_name,
-        #        kinship_matrix,
-        #        loading_progress=tempdata
-        #    )
-
-        return p_values, t_stats
-
-    def get_lod_score_cutoff(self):
-        print("INSIDE GET LOD CUTOFF")
-        high_qtl_count = 0
-        for marker in self.dataset.group.markers.markers:
-            if marker['lod_score'] > 1:
-                high_qtl_count += 1
-
-        if high_qtl_count > 1000:
-            return 1
-        else:
-            return 0
-
-    def identify_empty_samples(self):
-        no_val_samples = []
-        for sample_count, val in enumerate(self.vals):
-            if val == "x":
-                no_val_samples.append(sample_count)
-        return no_val_samples
-        
-    def trim_genotypes(self, genotype_data, no_value_samples):
-        trimmed_genotype_data = []
-        for marker in genotype_data:
-            new_genotypes = []
-            for item_count, genotype in enumerate(marker):
-                if item_count in no_value_samples:
-                    continue
-                try:
-                    genotype = float(genotype)
-                except ValueError:
-                    genotype = np.nan
-                    pass
-                new_genotypes.append(genotype)
-            trimmed_genotype_data.append(new_genotypes)
-        return trimmed_genotype_data
-    
-def create_snp_iterator_file(group):
-    plink_file_base = os.path.join(webqtlConfig.PYLMM_PATH, group)
-    plink_input = input.plink(plink_file_base, type='b')
-    
-    data = dict(plink_input = list(plink_input),
-                numSNPs = plink_input.numSNPs)
-    
-    #input_dict = {}
-    #
-    #input_dict['plink_input'] = list(plink_input)
-    #input_dict['numSNPs'] = plink_input.numSNPs
-    #
-    
-    snp_file_base = os.path.join(webqtlConfig.SNP_PATH, group + ".snps.gz")
-    
-    with gzip.open(snp_file_base, "wb") as fh:
-        pickle.dump(data, fh, pickle.HIGHEST_PROTOCOL)
-
-#if __name__ == '__main__':
-#    import cPickle as pickle
-#    import gzip
-#    create_snp_iterator_file("HLC")
-    
-if __name__ == '__main__':
-    import cPickle as pickle
-    import gzip
-    create_snp_iterator_file("HLC")
+from __future__ import absolute_import, print_function, division

+

+from base.trait import GeneralTrait

+from base import data_set  #import create_dataset

+

+from pprint import pformat as pf

+

+import string

+import sys

+import datetime

+import os

+import collections

+import uuid

+

+import numpy as np

+from scipy import linalg

+

+import cPickle as pickle

+

+import simplejson as json

+

+from redis import Redis

+Redis = Redis()

+

+from flask import Flask, g

+

+from base.trait import GeneralTrait

+from base import data_set

+from base import species

+from base import webqtlConfig

+from utility import webqtlUtil

+from wqflask.my_pylmm.data import prep_data

+from wqflask.my_pylmm.pyLMM import lmm

+from wqflask.my_pylmm.pyLMM import input

+from utility import helper_functions

+from utility import Plot, Bunch

+from utility import temp_data

+

+from utility.benchmark import Bench

+

+

+class MarkerRegression(object):

+

+    def __init__(self, start_vars, temp_uuid):

+

+        helper_functions.get_species_dataset_trait(self, start_vars)

+

+        #tempdata = temp_data.TempData(temp_uuid)

+        

+        self.json_data = {}

+        self.json_data['lodnames'] = ['lod.hk']

+        

+        self.samples = [] # Want only ones with values

+        self.vals = []

+

+        for sample in self.dataset.group.samplelist:

+            value = start_vars['value:' + sample]

+            self.samples.append(str(sample))

+            self.vals.append(value)

+ 

+        self.mapping_method = start_vars['method']

+        self.maf = start_vars['maf'] # Minor allele frequency

+        print("self.maf:", self.maf)

+ 

+        self.dataset.group.get_markers()

+        if self.mapping_method == "gemma":

+            qtl_results = self.run_gemma()

+        elif self.mapping_method == "plink":

+            qtl_results = self.run_plink()

+            #print("qtl_results:", pf(qtl_results))

+        elif self.mapping_method == "pylmm":

+            print("RUNNING PYLMM")

+            #self.qtl_results = self.gen_data(tempdata)

+            qtl_results = self.gen_data(str(temp_uuid))

+        else:

+            print("RUNNING NOTHING")

+            

+        self.lod_cutoff = 2    

+        self.filtered_markers = []

+        for marker in qtl_results:

+            if marker['chr'] > 0 or marker['chr'] == "X" or marker['chr'] == "X/Y":

+                if 'lod_score' in marker:

+                    self.filtered_markers.append(marker)

+

+

+        self.json_data['chr'] = []

+        self.json_data['pos'] = []

+        self.json_data['lod.hk'] = []

+        self.json_data['markernames'] = []

+

+        #Need to convert the QTL objects that qtl reaper returns into a json serializable dictionary

+        self.qtl_results = []

+        for qtl in self.filtered_markers:

+            print("lod score is:", qtl['lod_score'])

+            self.json_data['chr'].append(str(qtl['chr']))

+            self.json_data['pos'].append(qtl['Mb'])

+            self.json_data['lod.hk'].append(str(qtl['lod_score']))

+            self.json_data['markernames'].append(qtl['name'])

+

+        #Get chromosome lengths for drawing the interval map plot

+        chromosome_mb_lengths = {}

+        self.json_data['chrnames'] = []

+        for key in self.species.chromosomes.chromosomes.keys():

+            self.json_data['chrnames'].append([self.species.chromosomes.chromosomes[key].name, self.species.chromosomes.chromosomes[key].mb_length])

+            

+            chromosome_mb_lengths[key] = self.species.chromosomes.chromosomes[key].mb_length

+        

+        self.js_data = dict(

+            json_data = self.json_data,

+            this_trait = self.this_trait.name,

+            data_set = self.dataset.name,

+            maf = self.maf,

+            chromosomes = chromosome_mb_lengths,

+            qtl_results = self.filtered_markers,

+        )

+

+    def run_gemma(self):

+        """Generates p-values for each marker using GEMMA"""

+        

+        #filename = webqtlUtil.genRandStr("{}_{}_".format(self.dataset.group.name, self.this_trait.name))

+        self.gen_pheno_txt_file()

+

+        os.chdir("/home/zas1024/gene/web/gemma")

+

+        gemma_command = './gemma -bfile %s -k output_%s.cXX.txt -lmm 1 -o %s_output' % (

+                                                                                                 self.dataset.group.name,

+                                                                                                 self.dataset.group.name,

+                                                                                                 self.dataset.group.name)

+        print("gemma_command:" + gemma_command)

+        

+        os.system(gemma_command)

+        

+        included_markers, p_values = self.parse_gemma_output()

+        

+        self.dataset.group.get_specified_markers(markers = included_markers)

+        

+        #for marker in self.dataset.group.markers.markers:

+        #    if marker['name'] not in included_markers:

+        #        print("marker:", marker)

+        #        self.dataset.group.markers.markers.remove(marker)

+        #        #del self.dataset.group.markers.markers[marker]

+        

+        self.dataset.group.markers.add_pvalues(p_values)

+

+        return self.dataset.group.markers.markers

+

+

+    def parse_gemma_output(self):

+        included_markers = []

+        p_values = []

+        with open("/home/zas1024/gene/web/gemma/output/{}_output.assoc.txt".format(self.dataset.group.name)) as output_file:

+            for line in output_file:

+                if line.startswith("chr"):

+                    continue

+                else:

+                    included_markers.append(line.split("\t")[1])

+                    p_values.append(float(line.split("\t")[10]))

+                    #p_values[line.split("\t")[1]] = float(line.split("\t")[10])

+        print("p_values: ", p_values)

+        return included_markers, p_values

+

+    def gen_pheno_txt_file(self):

+        """Generates phenotype file for GEMMA"""

+        

+        #with open("/home/zas1024/gene/web/gemma/tmp_pheno/{}.txt".format(filename), "w") as outfile:

+        #    for sample, i in enumerate(self.samples):

+        #        print("sample:" + str(i))

+        #        print("self.vals[i]:" + str(self.vals[sample]))

+        #        outfile.write(str(i) + "\t" + str(self.vals[sample]) + "\n")

+                

+        with open("/home/zas1024/gene/web/gemma/{}.fam".format(self.dataset.group.name), "w") as outfile:

+            for i, sample in enumerate(self.samples):

+                outfile.write(str(sample) + " " + str(sample) + " 0 0 0 " + str(self.vals[i]) + "\n")

+

+    #def gen_plink_for_gemma(self, filename):

+    #    

+    #    make_bed = "/home/zas1024/plink/plink --file /home/zas1024/plink/%s --noweb --no-fid --no-parents --no-sex --no-pheno --pheno %s%s.txt --out %s%s --make-bed" % (webqtlConfig.HTMLPATH,

+    #                                                                                                                                             webqtlConfig.HTMLPATH,

+    #                                                                                                                                             self.dataset.group.name,

+    #                                                                                                                                             webqtlConfig.TMPDIR,

+    #                                                                                                                                             filename,

+    #                                                                                                                                             webqtlConfig.TMPDIR,

+    #                                                                                                                                             filename)

+    #

+    #

+    

+    def run_plink(self):

+    

+        os.chdir("/home/zas1024/plink")

+        

+        plink_output_filename = webqtlUtil.genRandStr("%s_%s_"%(self.dataset.group.name, self.this_trait.name))

+        

+        self.gen_pheno_txt_file_plink(pheno_filename = plink_output_filename)

+        

+        plink_command = './plink --noweb --ped %s.ped --no-fid --no-parents --no-sex --no-pheno --map %s.map --pheno %s/%s.txt --pheno-name %s --maf %s --missing-phenotype -9999 --out %s%s --assoc ' % (self.dataset.group.name, self.dataset.group.name, webqtlConfig.TMPDIR, plink_output_filename, self.this_trait.name, self.maf, webqtlConfig.TMPDIR, plink_output_filename)

+        

+        os.system(plink_command)

+

+        count, p_values = self.parse_plink_output(plink_output_filename)

+        #gemma_command = './gemma -bfile %s -k output_%s.cXX.txt -lmm 1 -o %s_output' % (

+        #                                                                                         self.dataset.group.name,

+        #                                                                                         self.dataset.group.name,

+        #                                                                                         self.dataset.group.name)

+        #print("gemma_command:" + gemma_command)

+        #

+        #os.system(gemma_command)

+        #

+        #included_markers, p_values = self.parse_gemma_output()

+        #

+        #self.dataset.group.get_specified_markers(markers = included_markers)

+        

+        #for marker in self.dataset.group.markers.markers:

+        #    if marker['name'] not in included_markers:

+        #        print("marker:", marker)

+        #        self.dataset.group.markers.markers.remove(marker)

+        #        #del self.dataset.group.markers.markers[marker]

+        

+        print("p_values:", pf(p_values))

+        

+        self.dataset.group.markers.add_pvalues(p_values)

+

+        return self.dataset.group.markers.markers

+    

+    

+    def gen_pheno_txt_file_plink(self, pheno_filename = ''):

+        ped_sample_list = self.get_samples_from_ped_file()	

+        output_file = open("%s%s.txt" % (webqtlConfig.TMPDIR, pheno_filename), "wb")

+        header = 'FID\tIID\t%s\n' % self.this_trait.name

+        output_file.write(header)

+    

+        new_value_list = []

+        

+        #if valueDict does not include some strain, value will be set to -9999 as missing value

+        for i, sample in enumerate(ped_sample_list):

+            try:

+                value = self.vals[i]

+                value = str(value).replace('value=','')

+                value = value.strip()

+            except:

+                value = -9999

+    

+            new_value_list.append(value)

+            

+            

+        new_line = ''

+        for i, sample in enumerate(ped_sample_list):

+            j = i+1

+            value = new_value_list[i]

+            new_line += '%s\t%s\t%s\n'%(sample, sample, value)

+            

+            if j%1000 == 0:

+                output_file.write(newLine)

+                new_line = ''

+        

+        if new_line:

+            output_file.write(new_line)

+            

+        output_file.close()

+    

+    # get strain name from ped file in order

+    def get_samples_from_ped_file(self):

+        

+        os.chdir("/home/zas1024/plink")

+        

+        ped_file= open("{}.ped".format(self.dataset.group.name),"r")

+        line = ped_file.readline()

+        sample_list=[]

+        

+        while line:

+            lineList = string.split(string.strip(line), '\t')

+            lineList = map(string.strip, lineList)

+            

+            sample_name = lineList[0]

+            sample_list.append(sample_name)

+            

+            line = ped_file.readline()

+        

+        return sample_list

+    

+    ################################################################

+    # Generate Chr list, Chr OrderId and Retrieve Length Information 

+    ################################################################		

+    #def getChrNameOrderIdLength(self,RISet=''):

+    #    try:

+    #        query = """

+    #            Select

+    #                Chr_Length.Name,Chr_Length.OrderId,Length from Chr_Length, InbredSet

+    #            where

+    #                Chr_Length.SpeciesId = InbredSet.SpeciesId AND

+    #                InbredSet.Name = '%s' 

+    #            Order by OrderId

+    #            """ % (self.dataset.group.name)

+    #        results =g.db.execute(query).fetchall()

+    #        ChrList=[]

+    #        ChrLengthMbList=[]

+    #        ChrNameOrderIdDict={}

+    #        ChrOrderIdNameDict={}

+    #        

+    #        for item in results:

+    #            ChrList.append(item[0])

+    #            ChrNameOrderIdDict[item[0]]=item[1] # key is chr name, value is orderId

+    #            ChrOrderIdNameDict[item[1]]=item[0] # key is orderId, value is chr name

+    #            ChrLengthMbList.append(item[2])				

+    #            

+    #    except:

+    #        ChrList=[]

+    #        ChrNameOrderIdDict={}

+    #        ChrLengthMbList=[]

+    #        

+    #    return ChrList,ChrNameOrderIdDict,ChrOrderIdNameDict,ChrLengthMbList

+    

+    

+    def parse_plink_output(self, output_filename):

+        plink_results={}

+    

+        threshold_p_value = 0.01

+    

+        result_fp = open("%s%s.qassoc"% (webqtlConfig.TMPDIR, output_filename), "rb")

+        

+        header_line = result_fp.readline()# read header line

+        line = result_fp.readline()

+        

+        value_list = [] # initialize value list, this list will include snp, bp and pvalue info

+        p_value_dict = {}

+        count = 0

+        

+        while line:

+            #convert line from str to list

+            line_list = self.build_line_list(line=line)

+    

+            # only keep the records whose chromosome name is in db

+            if self.species.chromosomes.chromosomes.has_key(int(line_list[0])) and line_list[-1] and line_list[-1].strip()!='NA':

+    

+                chr_name = self.species.chromosomes.chromosomes[int(line_list[0])]

+                snp = line_list[1]

+                BP = line_list[2]

+                p_value = float(line_list[-1])

+                if threshold_p_value >= 0 and threshold_p_value <= 1:

+                    if p_value < threshold_p_value:

+                        p_value_dict[snp] = p_value

+                

+                if plink_results.has_key(chr_name):

+                    value_list = plink_results[chr_name]

+                    

+                    # pvalue range is [0,1]

+                    if threshold_p_value >=0 and threshold_p_value <= 1:

+                        if p_value < threshold_p_value:

+                            value_list.append((snp, BP, p_value))

+                            count += 1

+                    

+                    plink_results[chr_name] = value_list

+                    value_list = []

+                else:

+                    if threshold_p_value >= 0 and threshold_p_value <= 1:

+                        if p_value < threshold_p_value:

+                            value_list.append((snp, BP, p_value))

+                            count += 1

+

+                    if value_list:

+                        plink_results[chr_name] = value_list

+

+                    value_list=[]

+

+                line = result_fp.readline()

+            else:

+                line = result_fp.readline()

+

+        #if p_value_list:

+        #    min_p_value = min(p_value_list)

+        #else:

+        #    min_p_value = 0

+            

+        return count, p_value_dict

+    

+    ######################################################

+    # input: line: str,one line read from file

+    # function: convert line from str to list; 

+    # output: lineList list

+    #######################################################

+    def build_line_list(self, line=None):

+        

+        line_list = string.split(string.strip(line),' ')# irregular number of whitespaces between columns

+        line_list = [item for item in line_list if item <>'']

+        line_list = map(string.strip, line_list)

+    

+        return line_list

+    

+    #def gen_data(self, tempdata):

+    def gen_data(self, temp_uuid):

+        """Generates p-values for each marker"""

+

+        pheno_vector = np.array([val == "x" and np.nan or float(val) for val in self.vals])

+

+        #lmm_uuid = str(uuid.uuid4())

+

+        key = "pylmm:input:" + temp_uuid

+        print("key is:", pf(key))

+        #with Bench("Loading cache"):

+        #    result = Redis.get(key)

+

+        if self.dataset.group.species == "human":

+            p_values, t_stats = self.gen_human_results(pheno_vector, key, temp_uuid)

+            #p_values = self.trim_results(p_values)

+            

+        else:

+            print("NOW CWD IS:", os.getcwd())

+            genotype_data = [marker['genotypes'] for marker in self.dataset.group.markers.markers]

+            

+            no_val_samples = self.identify_empty_samples()

+            trimmed_genotype_data = self.trim_genotypes(genotype_data, no_val_samples)

+            

+            genotype_matrix = np.array(trimmed_genotype_data).T

+

+            #print("pheno_vector: ", pf(pheno_vector))

+            #print("genotype_matrix: ", pf(genotype_matrix))

+            #print("genotype_matrix.shape: ", pf(genotype_matrix.shape))

+

+            #params = {"pheno_vector": pheno_vector,

+            #            "genotype_matrix": genotype_matrix,

+            #            "restricted_max_likelihood": True,

+            #            "refit": False,

+            #            "temp_data": tempdata}

+            

+            params = dict(pheno_vector = pheno_vector.tolist(),

+                        genotype_matrix = genotype_matrix.tolist(),

+                        restricted_max_likelihood = True,

+                        refit = False,

+                        temp_uuid = temp_uuid,

+                        

+                        # meta data

+                        timestamp = datetime.datetime.now().isoformat(),

+                        )

+            

+            json_params = json.dumps(params)

+            #print("json_params:", json_params)

+            Redis.set(key, json_params)

+            Redis.expire(key, 60*60)

+            print("before printing command")

+

+            command = 'python /home/zas1024/gene/wqflask/wqflask/my_pylmm/pyLMM/lmm.py --key {} --species {}'.format(key,

+                                                                                                                    "other")

+            print("command is:", command)

+            print("after printing command")

+

+            os.system(command)

+

+            #t_stats, p_values = lmm.run(key)

+            #lmm.run(key)

+            

+            json_results = Redis.blpop("pylmm:results:" + temp_uuid, 45*60)

+            results = json.loads(json_results[1])

+            p_values = [float(result) for result in results['p_values']]

+            print("p_values:", p_values)

+            #p_values = self.trim_results(p_values)

+            t_stats = results['t_stats']

+            

+            #t_stats, p_values = lmm.run(

+            #    pheno_vector,

+            #    genotype_matrix,

+            #    restricted_max_likelihood=True,

+            #    refit=False,

+            #    temp_data=tempdata

+            #)

+            #print("p_values:", p_values)

+

+        self.dataset.group.markers.add_pvalues(p_values)

+        

+        #self.get_lod_score_cutoff()

+        

+        return self.dataset.group.markers.markers

+

+    def trim_results(self, p_values):

+        print("len_p_values:", len(p_values))

+        if len(p_values) > 500:

+            p_values.sort(reverse=True)

+            trimmed_values = p_values[:500]

+        

+        return trimmed_values

+

+    #def gen_human_results(self, pheno_vector, tempdata):

+    def gen_human_results(self, pheno_vector, key, temp_uuid):

+        file_base = os.path.join(webqtlConfig.PYLMM_PATH, self.dataset.group.name)

+

+        plink_input = input.plink(file_base, type='b')

+        input_file_name = os.path.join(webqtlConfig.SNP_PATH, self.dataset.group.name + ".snps.gz")

+

+        pheno_vector = pheno_vector.reshape((len(pheno_vector), 1))

+        covariate_matrix = np.ones((pheno_vector.shape[0],1))

+        kinship_matrix = np.fromfile(open(file_base + '.kin','r'),sep=" ")

+        kinship_matrix.resize((len(plink_input.indivs),len(plink_input.indivs)))

+

+        print("Before creating params")

+

+        params = dict(pheno_vector = pheno_vector.tolist(),

+                    covariate_matrix = covariate_matrix.tolist(),

+                    input_file_name = input_file_name,

+                    kinship_matrix = kinship_matrix.tolist(),

+                    refit = False,

+                    temp_uuid = temp_uuid,

+                        

+                    # meta data

+                    timestamp = datetime.datetime.now().isoformat(),

+                    )

+        

+        print("After creating params")

+        

+        json_params = json.dumps(params)

+        Redis.set(key, json_params)

+        Redis.expire(key, 60*60)

+

+        print("Before creating the command")

+

+        command = 'python /home/zas1024/gene/wqflask/wqflask/my_pylmm/pyLMM/lmm.py --key {} --species {}'.format(key,

+                                                                                                                "human")

+        

+        print("command is:", command)

+        

+        os.system(command)

+        

+        json_results = Redis.blpop("pylmm:results:" + temp_uuid, 45*60)

+        results = json.loads(json_results[1])

+        t_stats = results['t_stats']

+        p_values = results['p_values']

+        

+

+        #p_values, t_stats = lmm.run_human(key)

+

+        #p_values, t_stats = lmm.run_human(

+        #        pheno_vector,

+        #        covariate_matrix,

+        #        input_file_name,

+        #        kinship_matrix,

+        #        loading_progress=tempdata

+        #    )

+

+        return p_values, t_stats

+

+    def get_lod_score_cutoff(self):

+        print("INSIDE GET LOD CUTOFF")

+        high_qtl_count = 0

+        for marker in self.dataset.group.markers.markers:

+            if marker['lod_score'] > 1:

+                high_qtl_count += 1

+

+        if high_qtl_count > 1000:

+            return 1

+        else:

+            return 0

+

+    def identify_empty_samples(self):

+        no_val_samples = []

+        for sample_count, val in enumerate(self.vals):

+            if val == "x":

+                no_val_samples.append(sample_count)

+        return no_val_samples

+        

+    def trim_genotypes(self, genotype_data, no_value_samples):

+        trimmed_genotype_data = []

+        for marker in genotype_data:

+            new_genotypes = []

+            for item_count, genotype in enumerate(marker):

+                if item_count in no_value_samples:

+                    continue

+                try:

+                    genotype = float(genotype)

+                except ValueError:

+                    genotype = np.nan

+                    pass

+                new_genotypes.append(genotype)

+            trimmed_genotype_data.append(new_genotypes)

+        return trimmed_genotype_data

+    

+def create_snp_iterator_file(group):

+    plink_file_base = os.path.join(webqtlConfig.PYLMM_PATH, group)

+    plink_input = input.plink(plink_file_base, type='b')

+    

+    data = dict(plink_input = list(plink_input),

+                numSNPs = plink_input.numSNPs)

+    

+    #input_dict = {}

+    #

+    #input_dict['plink_input'] = list(plink_input)

+    #input_dict['numSNPs'] = plink_input.numSNPs

+    #

+    

+    snp_file_base = os.path.join(webqtlConfig.SNP_PATH, group + ".snps.gz")

+    

+    with gzip.open(snp_file_base, "wb") as fh:

+        pickle.dump(data, fh, pickle.HIGHEST_PROTOCOL)

+

+#if __name__ == '__main__':

+#    import cPickle as pickle

+#    import gzip

+#    create_snp_iterator_file("HLC")

+    

+if __name__ == '__main__':

+    import cPickle as pickle

+    import gzip

+    create_snp_iterator_file("HLC")

diff --git a/wqflask/wqflask/my_pylmm/data/genofile_parser.py b/wqflask/wqflask/my_pylmm/data/genofile_parser.py
index baf6aee4..1f4760a9 100755
--- a/wqflask/wqflask/my_pylmm/data/genofile_parser.py
+++ b/wqflask/wqflask/my_pylmm/data/genofile_parser.py
@@ -96,8 +96,9 @@ class ConvertGenoFile(object):
             this_marker.chr = row_items[0]
             #this_marker.cM = row_items[2]
             if self.cm_exists and self.mb_exists:
-                this_marker.Mb = row_items[3]
-                genotypes = row_items[4:]
+                #print("cm and mb exists")
+                this_marker.Mb = row_items[2]
+                genotypes = row_items[3:]
             elif self.mb_exists:
                 this_marker.Mb = row_items[2]
                 genotypes = row_items[3:]
@@ -193,7 +194,7 @@ if __name__=="__main__":
     New_Geno_Directory = """/home/zas1024/gene/web/new_genotypes/"""
     #Input_File = """/home/zas1024/gene/web/genotypes/BXD.geno"""
     #Output_File = """/home/zas1024/gene/wqflask/wqflask/pylmm/data/bxd.snps"""
-    convertob = ConvertGenoFile("/home/zas1024/gene/web/genotypes/Linsenbardt-Boehm.geno", "/home/zas1024/gene/web/new_genotypes/Linsenbardt-Boehm.json")
+    convertob = ConvertGenoFile("/home/zas1024/gene/web/genotypes/HSNIH.geno", "/home/zas1024/gene/web/new_genotypes/HSNIH.json")
     convertob.convert()
     #ConvertGenoFile.process_all(Old_Geno_Directory, New_Geno_Directory)
     #ConvertGenoFiles(Geno_Directory)
diff --git a/wqflask/wqflask/static/new/css/.corr_matrix.css.swp b/wqflask/wqflask/static/new/css/.corr_matrix.css.swp
deleted file mode 100755
index 24d852dc..00000000
--- a/wqflask/wqflask/static/new/css/.corr_matrix.css.swp
+++ /dev/null
Binary files differdiff --git a/wqflask/wqflask/static/new/css/interval_mapping.css b/wqflask/wqflask/static/new/css/interval_mapping.css
index 5ebf7742..4a55d2e3 100755
--- a/wqflask/wqflask/static/new/css/interval_mapping.css
+++ b/wqflask/wqflask/static/new/css/interval_mapping.css
@@ -1,26 +1,26 @@
-.interval_map .y_axis path,

-.interval_map .y_axis line {

+.chr_interval_map .y_axis path,

+.chr_interval_map .y_axis line {

     fill: none;

     stroke: black;

     shape-rendering: crispEdges;

 }

-.interval_map .y_axis text {

+.chr_interval_map .y_axis text {

     font-family: sans-serif;

     font-size: 14px;

 }

 

-.interval_map .x_axis path,

-.interval_map .x_axis line {

+.chr_interval_map .x_axis path,

+.chr_interval_map .x_axis line {

     fill: none;

     stroke: black;

     shape-rendering: crispEdges;

 }

-.interval_map .x_axis text {

+.chr_interval_map .x_axis text {

     text-anchor: end;

     font-family: sans-serif;

     font-size: 8px;

 }

-

+/*

 interval_map rect {

     stroke: WhiteSmoke;

     fill: white;

@@ -29,4 +29,4 @@ interval_map rect {
 interval_map path {

     stroke: steelblue;

     stroke-width: 1;

-}
\ No newline at end of file
+}*/
\ No newline at end of file
diff --git a/wqflask/wqflask/static/new/css/marker_regression.css b/wqflask/wqflask/static/new/css/marker_regression.css
index 56980026..d81b5021 100755
--- a/wqflask/wqflask/static/new/css/marker_regression.css
+++ b/wqflask/wqflask/static/new/css/marker_regression.css
@@ -1,22 +1,22 @@
-.manhattan_plot .y_axis path,
-.manhattan_plot .y_axis line {
+.chr_manhattan_plot .y_axis path,
+.chr_manhattan_plot .y_axis line {
     fill: none;
     stroke: black;
     shape-rendering: crispEdges;
 }
-.manhattan_plot .y_axis text {
+.chr_manhattan_plot .y_axis text {
     font-family: sans-serif;
     font-size: 14px;
 }
 
-.manhattan_plot .x_axis path,
-.manhattan_plot .x_axis line {
+.chr_manhattan_plot .x_axis path,
+.chr_manhattan_plot .x_axis line {
     fill: none;
     stroke: black;
     shape-rendering: crispEdges;
 }
 
-.manhattan_plot .x_axis text {
+.chr_manhattan_plot .x_axis text {
     text-anchor: end;
     font-family: sans-serif;
     font-size: 10px;
diff --git a/wqflask/wqflask/static/new/javascript/bar_chart.js b/wqflask/wqflask/static/new/javascript/bar_chart.js
index 6f9b27e0..6b484232 100755
--- a/wqflask/wqflask/static/new/javascript/bar_chart.js
+++ b/wqflask/wqflask/static/new/javascript/bar_chart.js
@@ -1,52 +1,50 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var Bar_Chart, root,
-    __hasProp = {}.hasOwnProperty,
-    __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; };
+// Generated by CoffeeScript 1.7.1
+var Bar_Chart, root,
+  __hasProp = {}.hasOwnProperty,
+  __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; };
 
-  root = typeof exports !== "undefined" && exports !== null ? exports : this;
+root = typeof exports !== "undefined" && exports !== null ? exports : this;
 
-  Bar_Chart = (function() {
-
-    function Bar_Chart(sample_list) {
-      var longest_sample_name, sample,
-        _this = this;
-      this.sample_list = sample_list;
-      this.sort_by = "name";
-      this.get_samples();
-      console.log("sample names:", this.sample_names);
-      if (this.sample_attr_vals.length > 0) {
-        this.get_distinct_attr_vals();
-        this.get_attr_color_dict(this.distinct_attr_vals);
+Bar_Chart = (function() {
+  function Bar_Chart(sample_list) {
+    var longest_sample_name, sample;
+    this.sample_list = sample_list;
+    this.sort_by = "name";
+    this.get_samples();
+    console.log("sample names:", this.sample_names);
+    if (this.sample_attr_vals.length > 0) {
+      this.get_distinct_attr_vals();
+      this.get_attr_color_dict(this.distinct_attr_vals);
+    }
+    longest_sample_name = d3.max((function() {
+      var _i, _len, _ref, _results;
+      _ref = this.sample_names;
+      _results = [];
+      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+        sample = _ref[_i];
+        _results.push(sample.length);
       }
-      longest_sample_name = d3.max((function() {
-        var _i, _len, _ref, _results;
-        _ref = this.sample_names;
-        _results = [];
-        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-          sample = _ref[_i];
-          _results.push(sample.length);
-        }
-        return _results;
-      }).call(this));
-      this.margin = {
-        top: 20,
-        right: 20,
-        bottom: longest_sample_name * 7,
-        left: 40
-      };
-      this.plot_width = this.sample_vals.length * 20 - this.margin.left - this.margin.right;
-      this.range = this.sample_vals.length * 20;
-      this.plot_height = 500 - this.margin.top - this.margin.bottom;
-      this.x_buffer = this.plot_width / 20;
-      this.y_buffer = this.plot_height / 20;
-      this.y_min = d3.min(this.sample_vals);
-      this.y_max = d3.max(this.sample_vals) * 1.1;
-      this.svg = this.create_svg();
-      this.plot_height -= this.y_buffer;
-      this.create_scales();
-      this.create_graph();
-      d3.select("#color_attribute").on("change", function() {
+      return _results;
+    }).call(this));
+    this.margin = {
+      top: 20,
+      right: 20,
+      bottom: longest_sample_name * 7,
+      left: 40
+    };
+    this.plot_width = this.sample_vals.length * 20 - this.margin.left - this.margin.right;
+    this.range = this.sample_vals.length * 20;
+    this.plot_height = 500 - this.margin.top - this.margin.bottom;
+    this.x_buffer = this.plot_width / 20;
+    this.y_buffer = this.plot_height / 20;
+    this.y_min = d3.min(this.sample_vals);
+    this.y_max = d3.max(this.sample_vals) * 1.1;
+    this.svg = this.create_svg();
+    this.plot_height -= this.y_buffer;
+    this.create_scales();
+    this.create_graph();
+    d3.select("#color_attribute").on("change", (function(_this) {
+      return function() {
         _this.attribute = $("#color_attribute").val();
         console.log("attr_color_dict:", _this.attr_color_dict);
         if (_this.sort_by = "name") {
@@ -69,33 +67,40 @@
           });
         }
         return _this.add_legend(_this.attribute, _this.distinct_attr_vals[_this.attribute]);
-      });
-      $(".sort_by_value").on("click", function() {
+      };
+    })(this));
+    $(".sort_by_value").on("click", (function(_this) {
+      return function() {
         console.log("sorting by value");
         _this.sort_by = "value";
         if (_this.attributes.length > 0) {
           _this.attribute = $("#color_attribute").val();
         }
         return _this.rebuild_bar_graph(_this.sorted_samples());
-      });
-      $(".sort_by_name").on("click", function() {
+      };
+    })(this));
+    $(".sort_by_name").on("click", (function(_this) {
+      return function() {
         console.log("sorting by name");
         _this.sort_by = "name";
         if (_this.attributes.length > 0) {
           _this.attribute = $("#color_attribute").val();
         }
         return _this.rebuild_bar_graph(_this.samples);
-      });
-      d3.select("#color_by_trait").on("click", function() {
+      };
+    })(this));
+    d3.select("#color_by_trait").on("click", (function(_this) {
+      return function() {
         return _this.open_trait_selection();
-      });
-    }
+      };
+    })(this));
+  }
 
-    Bar_Chart.prototype.rebuild_bar_graph = function(samples) {
-      var sample, sample_names, x_scale,
-        _this = this;
-      console.log("samples:", samples);
-      this.svg.selectAll(".bar").data(samples).transition().duration(1000).style("fill", function(d) {
+  Bar_Chart.prototype.rebuild_bar_graph = function(samples) {
+    var sample, sample_names, x_scale;
+    console.log("samples:", samples);
+    this.svg.selectAll(".bar").data(samples).transition().duration(1000).style("fill", (function(_this) {
+      return function(d) {
         if (_this.attributes.length === 0 && (_this.trait_color_dict != null)) {
           console.log("SAMPLE:", d[0]);
           console.log("CHECKING:", _this.trait_color_dict[d[0]]);
@@ -108,335 +113,366 @@
         } else {
           return "steelblue";
         }
-      }).attr("y", function(d) {
+      };
+    })(this)).attr("y", (function(_this) {
+      return function(d) {
         return _this.y_scale(d[1]);
-      }).attr("height", function(d) {
+      };
+    })(this)).attr("height", (function(_this) {
+      return function(d) {
         return _this.plot_height - _this.y_scale(d[1]);
-      }).select("title").text(function(d) {
+      };
+    })(this)).select("title").text((function(_this) {
+      return function(d) {
         return d[1];
-      });
-      sample_names = (function() {
-        var _i, _len, _results;
-        _results = [];
-        for (_i = 0, _len = samples.length; _i < _len; _i++) {
-          sample = samples[_i];
-          _results.push(sample[0]);
-        }
-        return _results;
-      })();
-      console.log("sample_names2:", sample_names);
-      x_scale = d3.scale.ordinal().domain(sample_names).rangeRoundBands([0, this.range], 0.1, 0);
-      $('.bar_chart').find('.x.axis').remove();
-      return this.add_x_axis(x_scale);
-    };
-
-    Bar_Chart.prototype.get_attr_color_dict = function(vals) {
-      var color, color_range, distinct_vals, i, key, this_color_dict, value, _i, _j, _len, _len1, _results,
-        _this = this;
-      this.attr_color_dict = {};
-      console.log("vals:", vals);
+      };
+    })(this));
+    sample_names = (function() {
+      var _i, _len, _results;
       _results = [];
-      for (key in vals) {
-        if (!__hasProp.call(vals, key)) continue;
-        distinct_vals = vals[key];
-        this_color_dict = {};
-        if (distinct_vals.length < 10) {
-          color = d3.scale.category10();
-          for (i = _i = 0, _len = distinct_vals.length; _i < _len; i = ++_i) {
-            value = distinct_vals[i];
-            this_color_dict[value] = color(i);
-          }
-        } else {
-          console.log("distinct_values:", distinct_vals);
-          if (_.every(distinct_vals, function(d) {
+      for (_i = 0, _len = samples.length; _i < _len; _i++) {
+        sample = samples[_i];
+        _results.push(sample[0]);
+      }
+      return _results;
+    })();
+    console.log("sample_names2:", sample_names);
+    x_scale = d3.scale.ordinal().domain(sample_names).rangeRoundBands([0, this.range], 0.1, 0);
+    $('.bar_chart').find('.x.axis').remove();
+    return this.add_x_axis(x_scale);
+  };
+
+  Bar_Chart.prototype.get_attr_color_dict = function(vals) {
+    var color, color_range, distinct_vals, i, key, this_color_dict, value, _i, _j, _len, _len1, _results;
+    this.attr_color_dict = {};
+    console.log("vals:", vals);
+    _results = [];
+    for (key in vals) {
+      if (!__hasProp.call(vals, key)) continue;
+      distinct_vals = vals[key];
+      this_color_dict = {};
+      if (distinct_vals.length < 10) {
+        color = d3.scale.category10();
+        for (i = _i = 0, _len = distinct_vals.length; _i < _len; i = ++_i) {
+          value = distinct_vals[i];
+          this_color_dict[value] = color(i);
+        }
+      } else {
+        console.log("distinct_values:", distinct_vals);
+        if (_.every(distinct_vals, (function(_this) {
+          return function(d) {
             if (isNaN(d)) {
               return false;
             } else {
               return true;
             }
-          })) {
-            color_range = d3.scale.linear().domain([d3.min(distinct_vals), d3.max(distinct_vals)]).range([0, 255]);
-            for (i = _j = 0, _len1 = distinct_vals.length; _j < _len1; i = ++_j) {
-              value = distinct_vals[i];
-              console.log("color_range(value):", parseInt(color_range(value)));
-              this_color_dict[value] = d3.rgb(parseInt(color_range(value)), 0, 0);
-            }
+          };
+        })(this))) {
+          color_range = d3.scale.linear().domain([d3.min(distinct_vals), d3.max(distinct_vals)]).range([0, 255]);
+          for (i = _j = 0, _len1 = distinct_vals.length; _j < _len1; i = ++_j) {
+            value = distinct_vals[i];
+            console.log("color_range(value):", parseInt(color_range(value)));
+            this_color_dict[value] = d3.rgb(parseInt(color_range(value)), 0, 0);
           }
         }
-        _results.push(this.attr_color_dict[key] = this_color_dict);
       }
-      return _results;
-    };
+      _results.push(this.attr_color_dict[key] = this_color_dict);
+    }
+    return _results;
+  };
 
-    Bar_Chart.prototype.get_trait_color_dict = function(samples, vals) {
-      var color, color_range, distinct_vals, i, key, sample, this_color_dict, value, _i, _j, _len, _len1, _results,
-        _this = this;
-      this.trait_color_dict = {};
-      console.log("vals:", vals);
-      for (key in vals) {
-        if (!__hasProp.call(vals, key)) continue;
-        distinct_vals = vals[key];
-        this_color_dict = {};
-        if (distinct_vals.length < 10) {
-          color = d3.scale.category10();
-          for (i = _i = 0, _len = distinct_vals.length; _i < _len; i = ++_i) {
-            value = distinct_vals[i];
-            this_color_dict[value] = color(i);
-          }
-        } else {
-          console.log("distinct_values:", distinct_vals);
-          if (_.every(distinct_vals, function(d) {
+  Bar_Chart.prototype.get_trait_color_dict = function(samples, vals) {
+    var color, color_range, distinct_vals, i, key, sample, this_color_dict, value, _i, _j, _len, _len1, _results;
+    this.trait_color_dict = {};
+    console.log("vals:", vals);
+    for (key in vals) {
+      if (!__hasProp.call(vals, key)) continue;
+      distinct_vals = vals[key];
+      this_color_dict = {};
+      if (distinct_vals.length < 10) {
+        color = d3.scale.category10();
+        for (i = _i = 0, _len = distinct_vals.length; _i < _len; i = ++_i) {
+          value = distinct_vals[i];
+          this_color_dict[value] = color(i);
+        }
+      } else {
+        console.log("distinct_values:", distinct_vals);
+        if (_.every(distinct_vals, (function(_this) {
+          return function(d) {
             if (isNaN(d)) {
               return false;
             } else {
               return true;
             }
-          })) {
-            color_range = d3.scale.linear().domain([d3.min(distinct_vals), d3.max(distinct_vals)]).range([0, 255]);
-            for (i = _j = 0, _len1 = distinct_vals.length; _j < _len1; i = ++_j) {
-              value = distinct_vals[i];
-              console.log("color_range(value):", parseInt(color_range(value)));
-              this_color_dict[value] = d3.rgb(parseInt(color_range(value)), 0, 0);
-            }
+          };
+        })(this))) {
+          color_range = d3.scale.linear().domain([d3.min(distinct_vals), d3.max(distinct_vals)]).range([0, 255]);
+          for (i = _j = 0, _len1 = distinct_vals.length; _j < _len1; i = ++_j) {
+            value = distinct_vals[i];
+            console.log("color_range(value):", parseInt(color_range(value)));
+            this_color_dict[value] = d3.rgb(parseInt(color_range(value)), 0, 0);
           }
         }
       }
-      _results = [];
-      for (sample in samples) {
-        if (!__hasProp.call(samples, sample)) continue;
-        value = samples[sample];
-        _results.push(this.trait_color_dict[sample] = this_color_dict[value]);
-      }
-      return _results;
-    };
+    }
+    _results = [];
+    for (sample in samples) {
+      if (!__hasProp.call(samples, sample)) continue;
+      value = samples[sample];
+      _results.push(this.trait_color_dict[sample] = this_color_dict[value]);
+    }
+    return _results;
+  };
 
-    Bar_Chart.prototype.convert_into_colors = function(values) {
-      var color_range, i, value, _i, _len, _results;
-      color_range = d3.scale.linear().domain([d3.min(values), d3.max(values)]).range([0, 255]);
+  Bar_Chart.prototype.convert_into_colors = function(values) {
+    var color_range, i, value, _i, _len, _results;
+    color_range = d3.scale.linear().domain([d3.min(values), d3.max(values)]).range([0, 255]);
+    _results = [];
+    for (i = _i = 0, _len = values.length; _i < _len; i = ++_i) {
+      value = values[i];
+      console.log("color_range(value):", color_range(parseInt(value)));
+      _results.push(this_color_dict[value] = d3.rgb(color_range(parseInt(value)), 0, 0));
+    }
+    return _results;
+  };
+
+  Bar_Chart.prototype.get_samples = function() {
+    var attr_vals, attribute, key, sample, _i, _j, _len, _len1, _ref, _ref1;
+    this.sample_names = (function() {
+      var _i, _len, _ref, _results;
+      _ref = this.sample_list;
       _results = [];
-      for (i = _i = 0, _len = values.length; _i < _len; i = ++_i) {
-        value = values[i];
-        console.log("color_range(value):", color_range(parseInt(value)));
-        _results.push(this_color_dict[value] = d3.rgb(color_range(parseInt(value)), 0, 0));
+      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+        sample = _ref[_i];
+        if (sample.value !== null) {
+          _results.push(sample.name);
+        }
       }
       return _results;
-    };
-
-    Bar_Chart.prototype.get_samples = function() {
-      var attr_vals, attribute, key, sample, _i, _j, _len, _len1, _ref, _ref1;
-      this.sample_names = (function() {
-        var _i, _len, _ref, _results;
-        _ref = this.sample_list;
-        _results = [];
-        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-          sample = _ref[_i];
-          if (sample.value !== null) {
-            _results.push(sample.name);
-          }
-        }
-        return _results;
-      }).call(this);
-      this.sample_vals = (function() {
-        var _i, _len, _ref, _results;
-        _ref = this.sample_list;
-        _results = [];
-        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-          sample = _ref[_i];
-          if (sample.value !== null) {
-            _results.push(sample.value);
-          }
-        }
-        return _results;
-      }).call(this);
-      this.attributes = (function() {
-        var _results;
-        _results = [];
-        for (key in this.sample_list[0]["extra_attributes"]) {
-          _results.push(key);
-        }
-        return _results;
-      }).call(this);
-      console.log("attributes:", this.attributes);
-      this.sample_attr_vals = [];
-      if (this.attributes.length > 0) {
-        _ref = this.sample_list;
-        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-          sample = _ref[_i];
-          attr_vals = {};
-          _ref1 = this.attributes;
-          for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
-            attribute = _ref1[_j];
-            attr_vals[attribute] = sample["extra_attributes"][attribute];
-          }
-          this.sample_attr_vals.push(attr_vals);
+    }).call(this);
+    this.sample_vals = (function() {
+      var _i, _len, _ref, _results;
+      _ref = this.sample_list;
+      _results = [];
+      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+        sample = _ref[_i];
+        if (sample.value !== null) {
+          _results.push(sample.value);
         }
       }
-      return this.samples = _.zip(this.sample_names, this.sample_vals, this.sample_attr_vals);
-    };
-
-    Bar_Chart.prototype.get_distinct_attr_vals = function() {
-      var attribute, sample, _i, _len, _ref, _results;
-      this.distinct_attr_vals = {};
-      _ref = this.sample_attr_vals;
+      return _results;
+    }).call(this);
+    this.attributes = (function() {
+      var _results;
       _results = [];
+      for (key in this.sample_list[0]["extra_attributes"]) {
+        _results.push(key);
+      }
+      return _results;
+    }).call(this);
+    console.log("attributes:", this.attributes);
+    this.sample_attr_vals = [];
+    if (this.attributes.length > 0) {
+      _ref = this.sample_list;
       for (_i = 0, _len = _ref.length; _i < _len; _i++) {
         sample = _ref[_i];
-        _results.push((function() {
-          var _ref1, _results1;
-          _results1 = [];
-          for (attribute in sample) {
-            if (!this.distinct_attr_vals[attribute]) {
-              this.distinct_attr_vals[attribute] = [];
-            }
-            if (_ref1 = sample[attribute], __indexOf.call(this.distinct_attr_vals[attribute], _ref1) < 0) {
-              _results1.push(this.distinct_attr_vals[attribute].push(sample[attribute]));
-            } else {
-              _results1.push(void 0);
-            }
-          }
-          return _results1;
-        }).call(this));
+        attr_vals = {};
+        _ref1 = this.attributes;
+        for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
+          attribute = _ref1[_j];
+          attr_vals[attribute] = sample["extra_attributes"][attribute];
+        }
+        this.sample_attr_vals.push(attr_vals);
       }
-      return _results;
-    };
+    }
+    return this.samples = _.zip(this.sample_names, this.sample_vals, this.sample_attr_vals);
+  };
 
-    Bar_Chart.prototype.create_svg = function() {
-      var svg;
-      svg = d3.select("#bar_chart").append("svg").attr("class", "bar_chart").attr("width", this.plot_width + this.margin.left + this.margin.right).attr("height", this.plot_height + this.margin.top + this.margin.bottom).append("g").attr("transform", "translate(" + this.margin.left + "," + this.margin.top + ")");
-      return svg;
-    };
+  Bar_Chart.prototype.get_distinct_attr_vals = function() {
+    var attribute, sample, _i, _len, _ref, _results;
+    this.distinct_attr_vals = {};
+    _ref = this.sample_attr_vals;
+    _results = [];
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      sample = _ref[_i];
+      _results.push((function() {
+        var _ref1, _results1;
+        _results1 = [];
+        for (attribute in sample) {
+          if (!this.distinct_attr_vals[attribute]) {
+            this.distinct_attr_vals[attribute] = [];
+          }
+          if (_ref1 = sample[attribute], __indexOf.call(this.distinct_attr_vals[attribute], _ref1) < 0) {
+            _results1.push(this.distinct_attr_vals[attribute].push(sample[attribute]));
+          } else {
+            _results1.push(void 0);
+          }
+        }
+        return _results1;
+      }).call(this));
+    }
+    return _results;
+  };
 
-    Bar_Chart.prototype.create_scales = function() {
-      this.x_scale = d3.scale.ordinal().domain(this.sample_names).rangeRoundBands([0, this.range], 0.1, 0);
-      return this.y_scale = d3.scale.linear().domain([this.y_min * 0.75, this.y_max]).range([this.plot_height, this.y_buffer]);
-    };
+  Bar_Chart.prototype.create_svg = function() {
+    var svg;
+    svg = d3.select("#bar_chart").append("svg").attr("class", "bar_chart").attr("width", this.plot_width + this.margin.left + this.margin.right).attr("height", this.plot_height + this.margin.top + this.margin.bottom).append("g").attr("transform", "translate(" + this.margin.left + "," + this.margin.top + ")");
+    return svg;
+  };
 
-    Bar_Chart.prototype.create_graph = function() {
-      this.add_x_axis(this.x_scale);
-      this.add_y_axis();
-      return this.add_bars();
-    };
+  Bar_Chart.prototype.create_scales = function() {
+    this.x_scale = d3.scale.ordinal().domain(this.sample_names).rangeRoundBands([0, this.range], 0.1, 0);
+    return this.y_scale = d3.scale.linear().domain([this.y_min * 0.75, this.y_max]).range([this.plot_height, this.y_buffer]);
+  };
 
-    Bar_Chart.prototype.add_x_axis = function(scale) {
-      var xAxis,
-        _this = this;
-      xAxis = d3.svg.axis().scale(scale).orient("bottom");
-      return this.svg.append("g").attr("class", "x axis").attr("transform", "translate(0," + this.plot_height + ")").call(xAxis).selectAll("text").style("text-anchor", "end").style("font-size", "12px").attr("dx", "-.8em").attr("dy", "-.3em").attr("transform", function(d) {
+  Bar_Chart.prototype.create_graph = function() {
+    this.add_x_axis(this.x_scale);
+    this.add_y_axis();
+    return this.add_bars();
+  };
+
+  Bar_Chart.prototype.add_x_axis = function(scale) {
+    var xAxis;
+    xAxis = d3.svg.axis().scale(scale).orient("bottom");
+    return this.svg.append("g").attr("class", "x axis").attr("transform", "translate(0," + this.plot_height + ")").call(xAxis).selectAll("text").style("text-anchor", "end").style("font-size", "12px").attr("dx", "-.8em").attr("dy", "-.3em").attr("transform", (function(_this) {
+      return function(d) {
         return "rotate(-90)";
-      });
-    };
+      };
+    })(this));
+  };
 
-    Bar_Chart.prototype.add_y_axis = function() {
-      var yAxis;
-      yAxis = d3.svg.axis().scale(this.y_scale).orient("left").ticks(5);
-      return this.svg.append("g").attr("class", "y axis").call(yAxis).append("text").attr("transform", "rotate(-90)").attr("y", 6).attr("dy", ".71em").style("text-anchor", "end");
-    };
+  Bar_Chart.prototype.add_y_axis = function() {
+    var yAxis;
+    yAxis = d3.svg.axis().scale(this.y_scale).orient("left").ticks(5);
+    return this.svg.append("g").attr("class", "y axis").call(yAxis).append("text").attr("transform", "rotate(-90)").attr("y", 6).attr("dy", ".71em").style("text-anchor", "end");
+  };
 
-    Bar_Chart.prototype.add_bars = function() {
-      var _this = this;
-      return this.svg.selectAll(".bar").data(this.samples).enter().append("rect").style("fill", "steelblue").attr("class", "bar").attr("x", function(d) {
+  Bar_Chart.prototype.add_bars = function() {
+    return this.svg.selectAll(".bar").data(this.samples).enter().append("rect").style("fill", "steelblue").attr("class", "bar").attr("x", (function(_this) {
+      return function(d) {
         return _this.x_scale(d[0]);
-      }).attr("width", this.x_scale.rangeBand()).attr("y", function(d) {
+      };
+    })(this)).attr("width", this.x_scale.rangeBand()).attr("y", (function(_this) {
+      return function(d) {
         return _this.y_scale(d[1]);
-      }).attr("height", function(d) {
+      };
+    })(this)).attr("height", (function(_this) {
+      return function(d) {
         return _this.plot_height - _this.y_scale(d[1]);
-      }).append("svg:title").text(function(d) {
+      };
+    })(this)).append("svg:title").text((function(_this) {
+      return function(d) {
         return d[1];
-      });
-    };
+      };
+    })(this));
+  };
 
-    Bar_Chart.prototype.sorted_samples = function() {
-      var sample_list, sorted,
-        _this = this;
-      sample_list = _.zip(this.sample_names, this.sample_vals, this.sample_attr_vals);
-      sorted = _.sortBy(sample_list, function(sample) {
+  Bar_Chart.prototype.sorted_samples = function() {
+    var sample_list, sorted;
+    sample_list = _.zip(this.sample_names, this.sample_vals, this.sample_attr_vals);
+    sorted = _.sortBy(sample_list, (function(_this) {
+      return function(sample) {
         return sample[1];
-      });
-      console.log("sorted:", sorted);
-      return sorted;
-    };
+      };
+    })(this));
+    console.log("sorted:", sorted);
+    return sorted;
+  };
 
-    Bar_Chart.prototype.add_legend = function(attribute, distinct_vals) {
-      var legend, legend_rect, legend_text,
-        _this = this;
-      legend = this.svg.append("g").attr("class", "legend").attr("height", 100).attr("width", 100).attr('transform', 'translate(-20,50)');
-      legend_rect = legend.selectAll('rect').data(distinct_vals).enter().append("rect").attr("x", this.plot_width - 65).attr("width", 10).attr("height", 10).attr("y", function(d, i) {
+  Bar_Chart.prototype.add_legend = function(attribute, distinct_vals) {
+    var legend, legend_rect, legend_text;
+    legend = this.svg.append("g").attr("class", "legend").attr("height", 100).attr("width", 100).attr('transform', 'translate(-20,50)');
+    legend_rect = legend.selectAll('rect').data(distinct_vals).enter().append("rect").attr("x", this.plot_width - 65).attr("width", 10).attr("height", 10).attr("y", (function(_this) {
+      return function(d, i) {
         return i * 20;
-      }).style("fill", function(d) {
+      };
+    })(this)).style("fill", (function(_this) {
+      return function(d) {
         console.log("TEST:", _this.attr_color_dict[attribute][d]);
         return _this.attr_color_dict[attribute][d];
-      });
-      return legend_text = legend.selectAll('text').data(distinct_vals).enter().append("text").attr("x", this.plot_width - 52).attr("y", function(d, i) {
+      };
+    })(this));
+    return legend_text = legend.selectAll('text').data(distinct_vals).enter().append("text").attr("x", this.plot_width - 52).attr("y", (function(_this) {
+      return function(d, i) {
         return i * 20 + 9;
-      }).text(function(d) {
+      };
+    })(this)).text((function(_this) {
+      return function(d) {
         return d;
-      });
-    };
+      };
+    })(this));
+  };
 
-    Bar_Chart.prototype.open_trait_selection = function() {
-      var _this = this;
-      return $('#collections_holder').load('/collections/list?color_by_trait #collections_list', function() {
+  Bar_Chart.prototype.open_trait_selection = function() {
+    return $('#collections_holder').load('/collections/list?color_by_trait #collections_list', (function(_this) {
+      return function() {
         $.colorbox({
           inline: true,
           href: "#collections_holder"
         });
         return $('a.collection_name').attr('onClick', 'return false');
-      });
-    };
+      };
+    })(this));
+  };
 
-    Bar_Chart.prototype.color_by_trait = function(trait_sample_data) {
-      var distinct_values, trimmed_samples,
-        _this = this;
-      console.log("BXD1:", trait_sample_data["BXD1"]);
-      console.log("trait_sample_data:", trait_sample_data);
-      trimmed_samples = this.trim_values(trait_sample_data);
-      distinct_values = {};
-      distinct_values["collection_trait"] = this.get_distinct_values(trimmed_samples);
-      this.get_trait_color_dict(trimmed_samples, distinct_values);
-      console.log("TRAIT_COLOR_DICT:", this.trait_color_dict);
-      console.log("SAMPLES:", this.samples);
-      if (this.sort_by = "value") {
-        return this.svg.selectAll(".bar").data(this.samples).transition().duration(1000).style("fill", function(d) {
+  Bar_Chart.prototype.color_by_trait = function(trait_sample_data) {
+    var distinct_values, trimmed_samples;
+    console.log("BXD1:", trait_sample_data["BXD1"]);
+    console.log("trait_sample_data:", trait_sample_data);
+    trimmed_samples = this.trim_values(trait_sample_data);
+    distinct_values = {};
+    distinct_values["collection_trait"] = this.get_distinct_values(trimmed_samples);
+    this.get_trait_color_dict(trimmed_samples, distinct_values);
+    console.log("TRAIT_COLOR_DICT:", this.trait_color_dict);
+    console.log("SAMPLES:", this.samples);
+    if (this.sort_by = "value") {
+      return this.svg.selectAll(".bar").data(this.samples).transition().duration(1000).style("fill", (function(_this) {
+        return function(d) {
           console.log("this color:", _this.trait_color_dict[d[0]]);
           return _this.trait_color_dict[d[0]];
-        }).select("title").text(function(d) {
+        };
+      })(this)).select("title").text((function(_this) {
+        return function(d) {
           return d[1];
-        });
-      } else {
-        return this.svg.selectAll(".bar").data(this.sorted_samples()).transition().duration(1000).style("fill", function(d) {
+        };
+      })(this));
+    } else {
+      return this.svg.selectAll(".bar").data(this.sorted_samples()).transition().duration(1000).style("fill", (function(_this) {
+        return function(d) {
           console.log("this color:", _this.trait_color_dict[d[0]]);
           return _this.trait_color_dict[d[0]];
-        }).select("title").text(function(d) {
+        };
+      })(this)).select("title").text((function(_this) {
+        return function(d) {
           return d[1];
-        });
-      }
-    };
+        };
+      })(this));
+    }
+  };
 
-    Bar_Chart.prototype.trim_values = function(trait_sample_data) {
-      var sample, trimmed_samples, _i, _len, _ref;
-      trimmed_samples = {};
-      _ref = this.sample_names;
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        sample = _ref[_i];
-        if (sample in trait_sample_data) {
-          trimmed_samples[sample] = trait_sample_data[sample];
-        }
+  Bar_Chart.prototype.trim_values = function(trait_sample_data) {
+    var sample, trimmed_samples, _i, _len, _ref;
+    trimmed_samples = {};
+    _ref = this.sample_names;
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      sample = _ref[_i];
+      if (sample in trait_sample_data) {
+        trimmed_samples[sample] = trait_sample_data[sample];
       }
-      console.log("trimmed_samples:", trimmed_samples);
-      return trimmed_samples;
-    };
-
-    Bar_Chart.prototype.get_distinct_values = function(samples) {
-      var distinct_values;
-      distinct_values = _.uniq(_.values(samples));
-      console.log("distinct_values:", distinct_values);
-      return distinct_values;
-    };
+    }
+    console.log("trimmed_samples:", trimmed_samples);
+    return trimmed_samples;
+  };
 
-    return Bar_Chart;
+  Bar_Chart.prototype.get_distinct_values = function(samples) {
+    var distinct_values;
+    distinct_values = _.uniq(_.values(samples));
+    console.log("distinct_values:", distinct_values);
+    return distinct_values;
+  };
 
-  })();
+  return Bar_Chart;
 
-  root.Bar_Chart = Bar_Chart;
+})();
 
-}).call(this);
+root.Bar_Chart = Bar_Chart;
diff --git a/wqflask/wqflask/static/new/javascript/box_plot.js b/wqflask/wqflask/static/new/javascript/box_plot.js
index 736df9c9..4b80956f 100755
--- a/wqflask/wqflask/static/new/javascript/box_plot.js
+++ b/wqflask/wqflask/static/new/javascript/box_plot.js
@@ -1,57 +1,55 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var Box_Plot, root;
+// Generated by CoffeeScript 1.7.1
+var Box_Plot, root;
 
-  root = typeof exports !== "undefined" && exports !== null ? exports : this;
+root = typeof exports !== "undefined" && exports !== null ? exports : this;
 
-  Box_Plot = (function() {
-
-    function Box_Plot(sample_list, sample_group) {
-      this.sample_list = sample_list;
-      this.sample_group = sample_group;
-      this.get_samples();
-      this.margin = {
-        top: 10,
-        right: 50,
-        bottom: 20,
-        left: 50
-      };
-      this.plot_width = 200 - this.margin.left - this.margin.right;
-      this.plot_height = 500 - this.margin.top - this.margin.bottom;
-      this.min = d3.min(this.sample_vals);
-      this.max = d3.max(this.sample_vals);
-      this.svg = this.create_svg();
-      this.enter_data();
-    }
+Box_Plot = (function() {
+  function Box_Plot(sample_list, sample_group) {
+    this.sample_list = sample_list;
+    this.sample_group = sample_group;
+    this.get_samples();
+    this.margin = {
+      top: 10,
+      right: 50,
+      bottom: 20,
+      left: 50
+    };
+    this.plot_width = 200 - this.margin.left - this.margin.right;
+    this.plot_height = 500 - this.margin.top - this.margin.bottom;
+    this.min = d3.min(this.sample_vals);
+    this.max = d3.max(this.sample_vals);
+    this.svg = this.create_svg();
+    this.enter_data();
+  }
 
-    Box_Plot.prototype.get_samples = function() {
-      var sample;
-      return this.sample_vals = (function() {
-        var _i, _len, _ref, _results;
-        _ref = this.sample_list;
-        _results = [];
-        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-          sample = _ref[_i];
-          if (sample.value !== null) {
-            _results.push(sample.value);
-          }
+  Box_Plot.prototype.get_samples = function() {
+    var sample;
+    return this.sample_vals = (function() {
+      var _i, _len, _ref, _results;
+      _ref = this.sample_list;
+      _results = [];
+      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+        sample = _ref[_i];
+        if (sample.value !== null) {
+          _results.push(sample.value);
         }
-        return _results;
-      }).call(this);
-    };
+      }
+      return _results;
+    }).call(this);
+  };
 
-    Box_Plot.prototype.create_svg = function() {
-      var svg;
-      svg = d3.box().whiskers(this.inter_quartile_range(1.5)).width(this.plot_width - 30).height(this.plot_height - 30).domain([this.min, this.max]);
-      return svg;
-    };
+  Box_Plot.prototype.create_svg = function() {
+    var svg;
+    svg = d3.box().whiskers(this.inter_quartile_range(1.5)).width(this.plot_width - 30).height(this.plot_height - 30).domain([this.min, this.max]);
+    return svg;
+  };
 
-    Box_Plot.prototype.enter_data = function() {
-      return d3.select("#box_plot").selectAll("svg").data([this.sample_vals]).enter().append("svg:svg").attr("class", "box").attr("width", this.plot_width).attr("height", this.plot_height).append("svg:g").call(this.svg);
-    };
+  Box_Plot.prototype.enter_data = function() {
+    return d3.select("#box_plot").selectAll("svg").data([this.sample_vals]).enter().append("svg:svg").attr("class", "box").attr("width", this.plot_width).attr("height", this.plot_height).append("svg:g").call(this.svg);
+  };
 
-    Box_Plot.prototype.inter_quartile_range = function(k) {
-      var _this = this;
+  Box_Plot.prototype.inter_quartile_range = function(k) {
+    return (function(_this) {
       return function(d, i) {
         var inter_quartile_range, j, q1, q3;
         console.log("iqr d:", d);
@@ -72,12 +70,11 @@
         console.log("[i, j]", [i, j]);
         return [i, j];
       };
-    };
-
-    return Box_Plot;
+    })(this);
+  };
 
-  })();
+  return Box_Plot;
 
-  root.Box_Plot = Box_Plot;
+})();
 
-}).call(this);
+root.Box_Plot = Box_Plot;
diff --git a/wqflask/wqflask/static/new/javascript/chr_interval_map.coffee b/wqflask/wqflask/static/new/javascript/chr_interval_map.coffee
new file mode 100644
index 00000000..62ce4d3d
--- /dev/null
+++ b/wqflask/wqflask/static/new/javascript/chr_interval_map.coffee
@@ -0,0 +1,293 @@
+class Chr_Interval_Map

+    constructor: (@plot_height, @plot_width, @chr) ->

+        @qtl_results = js_data.qtl_results

+        console.log("qtl_results are:", @qtl_results)

+        console.log("chr is:", @chr)

+        

+        @get_max_chr()

+

+        @filter_qtl_results()

+        console.log("filtered results:", @these_results)

+        @get_qtl_count()

+

+        @x_coords = []

+        @y_coords = []

+        @marker_names = []

+

+        console.time('Create coordinates')

+        @create_coordinates()

+        console.log("@x_coords: ", @x_coords)

+        console.log("@y_coords: ", @y_coords)

+        console.timeEnd('Create coordinates')

+        

+        # Buffer to allow for the ticks/labels to be drawn

+        @x_buffer = @plot_width/30

+        @y_buffer = @plot_height/20

+        

+        @x_max = d3.max(@x_coords)

+        @y_max = d3.max(@y_coords) * 1.2

+    

+        @y_threshold = @get_lod_threshold()

+    

+        @svg = @create_svg()

+

+        @plot_coordinates = _.zip(@x_coords, @y_coords, @marker_names)

+        console.log("coordinates:", @plot_coordinates)

+

+        @plot_height -= @y_buffer

+

+        @create_scales()

+

+        console.time('Create graph')

+        @create_graph()

+        console.timeEnd('Create graph')

+       

+    get_max_chr: () ->

+        @max_chr = 0

+        for key of js_data.chromosomes

+            console.log("key is:", key)

+            if parseInt(key) > @max_chr

+                @max_chr = parseInt(key)

+        

+    filter_qtl_results: () ->

+        @these_results = []

+        this_chr = 100

+        for result in @qtl_results

+            if result.chr == "X"

+                this_chr = @max_chr

+            else

+                this_chr = result.chr

+            console.log("this_chr is:", this_chr)

+            console.log("@chr[0] is:", parseInt(@chr[0]))

+            if this_chr > parseInt(@chr[0])

+                break

+            if parseInt(this_chr) == parseInt(@chr[0])

+                @these_results.push(result)

+

+    get_qtl_count: () ->

+        high_qtl_count = 0

+        for result in @these_results

+            if result.lrs_value > 1

+                high_qtl_count += 1

+        console.log("high_qtl_count:", high_qtl_count)

+        

+        #if high_qtl_count > 10000

+        @y_axis_filter = 2

+        #else if high_qtl_count > 1000

+        #    @y_axis_filter = 1

+        #else

+        #    @y_axis_filter = 0

+

+    create_coordinates: () ->

+        for result in @these_results

+            @x_coords.push(parseFloat(result.Mb))

+            @y_coords.push(result.lrs_value)

+            @marker_names.push(result.name)

+            

+    create_svg: () ->

+        svg = d3.select("#topchart")

+            .append("svg")

+            .attr("class", "chr_interval_map")

+            .attr("width", @plot_width+@x_buffer)

+            .attr("height", @plot_height+@y_buffer)

+            .append("g")

+        return svg

+

+    create_scales: () ->

+        console.log("chr[1] is:", @chr[1])

+        @x_scale = d3.scale.linear()

+            .domain([0, @chr[1]])

+            .range([@x_buffer, @plot_width])

+        @y_scale = d3.scale.linear()

+            .domain([0, @y_max])

+            .range([@plot_height, @y_buffer])

+            

+    get_lod_threshold: () ->

+        if @y_max/2 > 2

+            return @y_max/2

+        else

+            return 2

+

+    create_graph: () ->

+        @add_border()

+        @add_x_axis()

+        @add_y_axis()

+        @add_title()

+        @add_back_button()

+        @add_path()

+

+    add_border: () ->

+        border_coords = [[@y_buffer, @plot_height, @x_buffer, @x_buffer],

+                         [@y_buffer, @plot_height, @plot_width, @plot_width],

+                         [@y_buffer, @y_buffer, @x_buffer, @plot_width],

+                         [@plot_height, @plot_height, @x_buffer, @plot_width]]

+            

+        @svg.selectAll("line")

+            .data(border_coords)

+            .enter()

+            .append("line")

+            .attr("y1", (d) =>

+                return d[0]

+            )

+            .attr("y2", (d) =>

+                return d[1]

+            )

+            .attr("x1", (d) =>

+                return d[2]

+            )

+            .attr("x2", (d) =>

+                return d[3]

+            )             

+            .style("stroke", "#000")

+

+    add_x_axis: () ->

+        @xAxis = d3.svg.axis()

+                .scale(@x_scale)

+                .orient("bottom")

+                .ticks(20)

+

+        @xAxis.tickFormat((d) =>

+            d3.format("d") #format as integer

+            return (d)

+        )

+

+        @svg.append("g")

+            .attr("class", "x_axis")

+            .attr("transform", "translate(0," + @plot_height + ")")

+            .call(@xAxis)

+            .selectAll("text")

+                .attr("text-anchor", "right")

+                .attr("font-size", "12px")

+                .attr("dx", "-1.6em")

+                .attr("transform", (d) =>

+                    return "translate(-12,0) rotate(-90)"

+                )

+                

+    add_y_axis: () ->

+        @yAxis = d3.svg.axis()

+                .scale(@y_scale)

+                .orient("left")

+                .ticks(5)

+        

+        @svg.append("g")

+            .attr("class", "y_axis")

+            .attr("transform", "translate(" + @x_buffer + ",0)")

+            .call(@yAxis)

+

+    add_title: () ->

+        @svg.append("text")

+            .attr("class", "title")

+            .text("Chr " + @chr[0])

+            .attr("x", (d) =>

+                return (@plot_width + @x_buffer)/2

+            )

+            .attr("y", @y_buffer + 20)

+            .attr("dx", "0em")

+            .attr("text-anchor", "middle")

+            .attr("font-family", "sans-serif")

+            .attr("font-size", "18px")

+            .attr("fill", "black")

+

+    add_back_button: () ->

+        @svg.append("text")

+            .attr("class", "back")

+            .text("Return to full view")

+            .attr("x", @x_buffer*2)

+            .attr("y", @y_buffer/2)

+            .attr("dx", "0em")

+            .attr("text-anchor", "middle")

+            .attr("font-family", "sans-serif")

+            .attr("font-size", "18px")

+            .attr("cursor", "pointer")

+            .attr("fill", "black")

+            .on("click", @return_to_full_view)

+

+    add_path: () ->

+        line_function = d3.svg.line()

+                            .x( (d) => return @x_scale(d[0]))

+                            .y( (d) => return @y_scale(d[1]))

+                            .interpolate("linear")

+                            

+        line_graph = @svg.append("path")

+                        .attr("d", line_function(@plot_coordinates))

+                        .attr("stroke", "blue")

+                        .attr("stroke-width", 1)

+                        .attr("fill", "none")

+

+

+    #add_plot_points: () ->

+    #    @plot_point = @svg.selectAll("circle")

+    #        .data(@plot_coordinates)

+    #        .enter()

+    #        .append("circle")

+    #        .attr("cx", (d) =>

+    #            return @x_scale(d[0])

+    #        )

+    #        .attr("cy", (d) =>

+    #            return @y_scale(d[1])

+    #        )

+    #        .attr("r", (d) =>

+    #            #if d[1] > 2

+    #            #    return 3

+    #            #else

+    #            return 2

+    #        )

+    #        .attr("fill", (d) =>

+    #            #if d[1] > 2

+    #            #    return "white"

+    #            #else

+    #            return "black"

+    #        )

+    #        .attr("stroke", "black")

+    #        .attr("stroke-width", "1")

+    #        .attr("id", (d) =>

+    #            return "point_" + String(d[2])

+    #        )

+    #        .classed("circle", true)

+    #        .on("mouseover", (d) =>

+    #            console.log("d3.event is:", d3.event)

+    #            console.log("d is:", d)

+    #            this_id = "point_" + String(d[2])

+    #            d3.select("#" + this_id).classed("d3_highlight", true)

+    #                .attr("r", 5)

+    #                .attr("stroke", "none")

+    #                .attr("fill", "blue")

+    #                .call(@show_marker_in_table(d))

+    #        )

+    #        .on("mouseout", (d) =>

+    #            this_id = "point_" + String(d[2])

+    #            d3.select("#" + this_id).classed("d3_highlight", false)

+    #                .attr("r", (d) =>

+    #                    #if d[1] > 2

+    #                    #    return 3

+    #                    #else

+    #                    return 2

+    #                )

+    #                .attr("fill", (d) =>

+    #                    #if d[1] > 2

+    #                    #    return "white"

+    #                    #else

+    #                    return "black"

+    #                )

+    #                .attr("stroke", "black")

+    #                .attr("stroke-width", "1")

+    #        )

+    #        .append("svg:title")

+    #            .text((d) =>

+    #                return d[2]

+    #            )

+

+    return_to_full_view: () ->

+        $('#topchart').remove()

+        $('#chart_container').append('<div class="qtlcharts" id="topchart"></div>')

+        create_interval_map()

+

+    show_marker_in_table: (marker_info) ->

+        console.log("in show_marker_in_table")

+        ### Searches for the select marker in the results table below ###

+        if marker_info

+            marker_name = marker_info[2]

+            $("#qtl_results_filter").find("input:first").val(marker_name).change()

+        #else

+        #    marker_name = ""

+        #$("#qtl_results_filter").find("input:first").val(marker_name).change()

diff --git a/wqflask/wqflask/static/new/javascript/chr_interval_map.js b/wqflask/wqflask/static/new/javascript/chr_interval_map.js
new file mode 100644
index 00000000..a4752a12
--- /dev/null
+++ b/wqflask/wqflask/static/new/javascript/chr_interval_map.js
@@ -0,0 +1,224 @@
+// Generated by CoffeeScript 1.7.1
+var Chr_Interval_Map;
+
+Chr_Interval_Map = (function() {
+  function Chr_Interval_Map(plot_height, plot_width, chr) {
+    this.plot_height = plot_height;
+    this.plot_width = plot_width;
+    this.chr = chr;
+    this.qtl_results = js_data.qtl_results;
+    console.log("qtl_results are:", this.qtl_results);
+    console.log("chr is:", this.chr);
+    this.get_max_chr();
+    this.filter_qtl_results();
+    console.log("filtered results:", this.these_results);
+    this.get_qtl_count();
+    this.x_coords = [];
+    this.y_coords = [];
+    this.marker_names = [];
+    console.time('Create coordinates');
+    this.create_coordinates();
+    console.log("@x_coords: ", this.x_coords);
+    console.log("@y_coords: ", this.y_coords);
+    console.timeEnd('Create coordinates');
+    this.x_buffer = this.plot_width / 30;
+    this.y_buffer = this.plot_height / 20;
+    this.x_max = d3.max(this.x_coords);
+    this.y_max = d3.max(this.y_coords) * 1.2;
+    this.y_threshold = this.get_lod_threshold();
+    this.svg = this.create_svg();
+    this.plot_coordinates = _.zip(this.x_coords, this.y_coords, this.marker_names);
+    console.log("coordinates:", this.plot_coordinates);
+    this.plot_height -= this.y_buffer;
+    this.create_scales();
+    console.time('Create graph');
+    this.create_graph();
+    console.timeEnd('Create graph');
+  }
+
+  Chr_Interval_Map.prototype.get_max_chr = function() {
+    var key, _results;
+    this.max_chr = 0;
+    _results = [];
+    for (key in js_data.chromosomes) {
+      console.log("key is:", key);
+      if (parseInt(key) > this.max_chr) {
+        _results.push(this.max_chr = parseInt(key));
+      } else {
+        _results.push(void 0);
+      }
+    }
+    return _results;
+  };
+
+  Chr_Interval_Map.prototype.filter_qtl_results = function() {
+    var result, this_chr, _i, _len, _ref, _results;
+    this.these_results = [];
+    this_chr = 100;
+    _ref = this.qtl_results;
+    _results = [];
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      result = _ref[_i];
+      if (result.chr === "X") {
+        this_chr = this.max_chr;
+      } else {
+        this_chr = result.chr;
+      }
+      console.log("this_chr is:", this_chr);
+      console.log("@chr[0] is:", parseInt(this.chr[0]));
+      if (this_chr > parseInt(this.chr[0])) {
+        break;
+      }
+      if (parseInt(this_chr) === parseInt(this.chr[0])) {
+        _results.push(this.these_results.push(result));
+      } else {
+        _results.push(void 0);
+      }
+    }
+    return _results;
+  };
+
+  Chr_Interval_Map.prototype.get_qtl_count = function() {
+    var high_qtl_count, result, _i, _len, _ref;
+    high_qtl_count = 0;
+    _ref = this.these_results;
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      result = _ref[_i];
+      if (result.lrs_value > 1) {
+        high_qtl_count += 1;
+      }
+    }
+    console.log("high_qtl_count:", high_qtl_count);
+    return this.y_axis_filter = 2;
+  };
+
+  Chr_Interval_Map.prototype.create_coordinates = function() {
+    var result, _i, _len, _ref, _results;
+    _ref = this.these_results;
+    _results = [];
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      result = _ref[_i];
+      this.x_coords.push(parseFloat(result.Mb));
+      this.y_coords.push(result.lrs_value);
+      _results.push(this.marker_names.push(result.name));
+    }
+    return _results;
+  };
+
+  Chr_Interval_Map.prototype.create_svg = function() {
+    var svg;
+    svg = d3.select("#topchart").append("svg").attr("class", "chr_interval_map").attr("width", this.plot_width + this.x_buffer).attr("height", this.plot_height + this.y_buffer).append("g");
+    return svg;
+  };
+
+  Chr_Interval_Map.prototype.create_scales = function() {
+    console.log("chr[1] is:", this.chr[1]);
+    this.x_scale = d3.scale.linear().domain([0, this.chr[1]]).range([this.x_buffer, this.plot_width]);
+    return this.y_scale = d3.scale.linear().domain([0, this.y_max]).range([this.plot_height, this.y_buffer]);
+  };
+
+  Chr_Interval_Map.prototype.get_lod_threshold = function() {
+    if (this.y_max / 2 > 2) {
+      return this.y_max / 2;
+    } else {
+      return 2;
+    }
+  };
+
+  Chr_Interval_Map.prototype.create_graph = function() {
+    this.add_border();
+    this.add_x_axis();
+    this.add_y_axis();
+    this.add_title();
+    this.add_back_button();
+    return this.add_path();
+  };
+
+  Chr_Interval_Map.prototype.add_border = function() {
+    var border_coords;
+    border_coords = [[this.y_buffer, this.plot_height, this.x_buffer, this.x_buffer], [this.y_buffer, this.plot_height, this.plot_width, this.plot_width], [this.y_buffer, this.y_buffer, this.x_buffer, this.plot_width], [this.plot_height, this.plot_height, this.x_buffer, this.plot_width]];
+    return this.svg.selectAll("line").data(border_coords).enter().append("line").attr("y1", (function(_this) {
+      return function(d) {
+        return d[0];
+      };
+    })(this)).attr("y2", (function(_this) {
+      return function(d) {
+        return d[1];
+      };
+    })(this)).attr("x1", (function(_this) {
+      return function(d) {
+        return d[2];
+      };
+    })(this)).attr("x2", (function(_this) {
+      return function(d) {
+        return d[3];
+      };
+    })(this)).style("stroke", "#000");
+  };
+
+  Chr_Interval_Map.prototype.add_x_axis = function() {
+    this.xAxis = d3.svg.axis().scale(this.x_scale).orient("bottom").ticks(20);
+    this.xAxis.tickFormat((function(_this) {
+      return function(d) {
+        d3.format("d");
+        return d;
+      };
+    })(this));
+    return this.svg.append("g").attr("class", "x_axis").attr("transform", "translate(0," + this.plot_height + ")").call(this.xAxis).selectAll("text").attr("text-anchor", "right").attr("font-size", "12px").attr("dx", "-1.6em").attr("transform", (function(_this) {
+      return function(d) {
+        return "translate(-12,0) rotate(-90)";
+      };
+    })(this));
+  };
+
+  Chr_Interval_Map.prototype.add_y_axis = function() {
+    this.yAxis = d3.svg.axis().scale(this.y_scale).orient("left").ticks(5);
+    return this.svg.append("g").attr("class", "y_axis").attr("transform", "translate(" + this.x_buffer + ",0)").call(this.yAxis);
+  };
+
+  Chr_Interval_Map.prototype.add_title = function() {
+    return this.svg.append("text").attr("class", "title").text("Chr " + this.chr[0]).attr("x", (function(_this) {
+      return function(d) {
+        return (_this.plot_width + _this.x_buffer) / 2;
+      };
+    })(this)).attr("y", this.y_buffer + 20).attr("dx", "0em").attr("text-anchor", "middle").attr("font-family", "sans-serif").attr("font-size", "18px").attr("fill", "black");
+  };
+
+  Chr_Interval_Map.prototype.add_back_button = function() {
+    return this.svg.append("text").attr("class", "back").text("Return to full view").attr("x", this.x_buffer * 2).attr("y", this.y_buffer / 2).attr("dx", "0em").attr("text-anchor", "middle").attr("font-family", "sans-serif").attr("font-size", "18px").attr("cursor", "pointer").attr("fill", "black").on("click", this.return_to_full_view);
+  };
+
+  Chr_Interval_Map.prototype.add_path = function() {
+    var line_function, line_graph;
+    line_function = d3.svg.line().x((function(_this) {
+      return function(d) {
+        return _this.x_scale(d[0]);
+      };
+    })(this)).y((function(_this) {
+      return function(d) {
+        return _this.y_scale(d[1]);
+      };
+    })(this)).interpolate("linear");
+    return line_graph = this.svg.append("path").attr("d", line_function(this.plot_coordinates)).attr("stroke", "blue").attr("stroke-width", 1).attr("fill", "none");
+  };
+
+  Chr_Interval_Map.prototype.return_to_full_view = function() {
+    $('#topchart').remove();
+    $('#chart_container').append('<div class="qtlcharts" id="topchart"></div>');
+    return create_interval_map();
+  };
+
+  Chr_Interval_Map.prototype.show_marker_in_table = function(marker_info) {
+    var marker_name;
+    console.log("in show_marker_in_table");
+
+    /* Searches for the select marker in the results table below */
+    if (marker_info) {
+      marker_name = marker_info[2];
+      return $("#qtl_results_filter").find("input:first").val(marker_name).change();
+    }
+  };
+
+  return Chr_Interval_Map;
+
+})();
diff --git a/wqflask/wqflask/static/new/javascript/chr_manhattan_plot.coffee b/wqflask/wqflask/static/new/javascript/chr_manhattan_plot.coffee
index 8b27caa1..8b62d58a 100755
--- a/wqflask/wqflask/static/new/javascript/chr_manhattan_plot.coffee
+++ b/wqflask/wqflask/static/new/javascript/chr_manhattan_plot.coffee
@@ -1,5 +1,3 @@
-root = exports ? this

-    

 class Chr_Manhattan_Plot

     constructor: (@plot_height, @plot_width, @chr) ->

         @qtl_results = js_data.qtl_results

@@ -87,9 +85,9 @@ class Chr_Manhattan_Plot
             @marker_names.push(result.name)

             

     create_svg: () ->

-        svg = d3.select("#manhattan_plot")

+        svg = d3.select("#topchart")

             .append("svg")

-            .attr("class", "manhattan_plot")

+            .attr("class", "chr_manhattan_plot")

             .attr("width", @plot_width+@x_buffer)

             .attr("height", @plot_height+@y_buffer)

             .append("g")

@@ -100,7 +98,7 @@ class Chr_Manhattan_Plot
             .domain([0, @chr[1]])

             .range([@x_buffer, @plot_width])

         @y_scale = d3.scale.linear()

-            .domain([@y_axis_filter, @y_max])

+            .domain([0, @y_max])

             .range([@plot_height, @y_buffer])

             

     get_lod_threshold: () ->

@@ -203,6 +201,7 @@ class Chr_Manhattan_Plot
             .attr("fill", "black")

             .on("click", @return_to_full_view)

 

+

     add_plot_points: () ->

         @plot_point = @svg.selectAll("circle")

             .data(@plot_coordinates)

@@ -266,9 +265,9 @@ class Chr_Manhattan_Plot
                 )

 

     return_to_full_view: () ->

-        $('#manhattan_plot').remove()

-        $('#manhattan_plot_container').append('<div id="manhattan_plot"></div>')

-        root.manhattan_plot = new root.Manhattan_Plot

+        $('#topchart').remove()

+        $('#chart_container').append('<div class="qtlcharts" id="topchart"></div>')

+        create_manhattan_plot()

 

     show_marker_in_table: (marker_info) ->

         console.log("in show_marker_in_table")

@@ -279,5 +278,3 @@ class Chr_Manhattan_Plot
         #else

         #    marker_name = ""

         #$("#qtl_results_filter").find("input:first").val(marker_name).change()

-

-root.Chr_Manhattan_Plot = Chr_Manhattan_Plot
\ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/chr_manhattan_plot.js b/wqflask/wqflask/static/new/javascript/chr_manhattan_plot.js
index b7f64094..24d8b962 100755
--- a/wqflask/wqflask/static/new/javascript/chr_manhattan_plot.js
+++ b/wqflask/wqflask/static/new/javascript/chr_manhattan_plot.js
@@ -1,204 +1,223 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var Chr_Manhattan_Plot, root;
-
-  root = typeof exports !== "undefined" && exports !== null ? exports : this;
-
-  Chr_Manhattan_Plot = (function() {
-
-    function Chr_Manhattan_Plot(plot_height, plot_width, chr) {
-      this.plot_height = plot_height;
-      this.plot_width = plot_width;
-      this.chr = chr;
-      this.qtl_results = js_data.qtl_results;
-      console.log("qtl_results are:", this.qtl_results);
-      console.log("chr is:", this.chr);
-      this.get_max_chr();
-      this.filter_qtl_results();
-      console.log("filtered results:", this.these_results);
-      this.get_qtl_count();
-      this.x_coords = [];
-      this.y_coords = [];
-      this.marker_names = [];
-      console.time('Create coordinates');
-      this.create_coordinates();
-      console.log("@x_coords: ", this.x_coords);
-      console.log("@y_coords: ", this.y_coords);
-      console.timeEnd('Create coordinates');
-      this.x_buffer = this.plot_width / 30;
-      this.y_buffer = this.plot_height / 20;
-      this.x_max = d3.max(this.x_coords);
-      this.y_max = d3.max(this.y_coords) * 1.2;
-      this.y_threshold = this.get_lod_threshold();
-      this.svg = this.create_svg();
-      this.plot_coordinates = _.zip(this.x_coords, this.y_coords, this.marker_names);
-      console.log("coordinates:", this.plot_coordinates);
-      this.plot_height -= this.y_buffer;
-      this.create_scales();
-      console.time('Create graph');
-      this.create_graph();
-      console.timeEnd('Create graph');
-    }
-
-    Chr_Manhattan_Plot.prototype.get_max_chr = function() {
-      var key, _results;
-      this.max_chr = 0;
-      _results = [];
-      for (key in js_data.chromosomes) {
-        console.log("key is:", key);
-        if (parseInt(key) > this.max_chr) {
-          _results.push(this.max_chr = parseInt(key));
-        } else {
-          _results.push(void 0);
-        }
-      }
-      return _results;
-    };
-
-    Chr_Manhattan_Plot.prototype.filter_qtl_results = function() {
-      var result, this_chr, _i, _len, _ref, _results;
-      this.these_results = [];
-      this_chr = 100;
-      _ref = this.qtl_results;
-      _results = [];
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        result = _ref[_i];
-        if (result.chr === "X") {
-          this_chr = this.max_chr;
-        } else {
-          this_chr = result.chr;
-        }
-        console.log("this_chr is:", this_chr);
-        console.log("@chr[0] is:", parseInt(this.chr[0]));
-        if (this_chr > parseInt(this.chr[0])) {
-          break;
-        }
-        if (parseInt(this_chr) === parseInt(this.chr[0])) {
-          _results.push(this.these_results.push(result));
-        } else {
-          _results.push(void 0);
-        }
+// Generated by CoffeeScript 1.7.1
+var Chr_Manhattan_Plot;
+
+Chr_Manhattan_Plot = (function() {
+  function Chr_Manhattan_Plot(plot_height, plot_width, chr) {
+    this.plot_height = plot_height;
+    this.plot_width = plot_width;
+    this.chr = chr;
+    this.qtl_results = js_data.qtl_results;
+    console.log("qtl_results are:", this.qtl_results);
+    console.log("chr is:", this.chr);
+    this.get_max_chr();
+    this.filter_qtl_results();
+    console.log("filtered results:", this.these_results);
+    this.get_qtl_count();
+    this.x_coords = [];
+    this.y_coords = [];
+    this.marker_names = [];
+    console.time('Create coordinates');
+    this.create_coordinates();
+    console.log("@x_coords: ", this.x_coords);
+    console.log("@y_coords: ", this.y_coords);
+    console.timeEnd('Create coordinates');
+    this.x_buffer = this.plot_width / 30;
+    this.y_buffer = this.plot_height / 20;
+    this.x_max = d3.max(this.x_coords);
+    this.y_max = d3.max(this.y_coords) * 1.2;
+    this.y_threshold = this.get_lod_threshold();
+    this.svg = this.create_svg();
+    this.plot_coordinates = _.zip(this.x_coords, this.y_coords, this.marker_names);
+    console.log("coordinates:", this.plot_coordinates);
+    this.plot_height -= this.y_buffer;
+    this.create_scales();
+    console.time('Create graph');
+    this.create_graph();
+    console.timeEnd('Create graph');
+  }
+
+  Chr_Manhattan_Plot.prototype.get_max_chr = function() {
+    var key, _results;
+    this.max_chr = 0;
+    _results = [];
+    for (key in js_data.chromosomes) {
+      console.log("key is:", key);
+      if (parseInt(key) > this.max_chr) {
+        _results.push(this.max_chr = parseInt(key));
+      } else {
+        _results.push(void 0);
       }
-      return _results;
-    };
-
-    Chr_Manhattan_Plot.prototype.get_qtl_count = function() {
-      var high_qtl_count, result, _i, _len, _ref;
-      high_qtl_count = 0;
-      _ref = this.these_results;
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        result = _ref[_i];
-        if (result.lod_score > 1) {
-          high_qtl_count += 1;
-        }
+    }
+    return _results;
+  };
+
+  Chr_Manhattan_Plot.prototype.filter_qtl_results = function() {
+    var result, this_chr, _i, _len, _ref, _results;
+    this.these_results = [];
+    this_chr = 100;
+    _ref = this.qtl_results;
+    _results = [];
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      result = _ref[_i];
+      if (result.chr === "X") {
+        this_chr = this.max_chr;
+      } else {
+        this_chr = result.chr;
       }
-      console.log("high_qtl_count:", high_qtl_count);
-      return this.y_axis_filter = 2;
-    };
-
-    Chr_Manhattan_Plot.prototype.create_coordinates = function() {
-      var result, _i, _len, _ref, _results;
-      _ref = this.these_results;
-      _results = [];
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        result = _ref[_i];
-        this.x_coords.push(parseFloat(result.Mb));
-        this.y_coords.push(result.lod_score);
-        _results.push(this.marker_names.push(result.name));
+      console.log("this_chr is:", this_chr);
+      console.log("@chr[0] is:", parseInt(this.chr[0]));
+      if (this_chr > parseInt(this.chr[0])) {
+        break;
       }
-      return _results;
-    };
-
-    Chr_Manhattan_Plot.prototype.create_svg = function() {
-      var svg;
-      svg = d3.select("#manhattan_plot").append("svg").attr("class", "manhattan_plot").attr("width", this.plot_width + this.x_buffer).attr("height", this.plot_height + this.y_buffer).append("g");
-      return svg;
-    };
-
-    Chr_Manhattan_Plot.prototype.create_scales = function() {
-      this.x_scale = d3.scale.linear().domain([0, this.chr[1]]).range([this.x_buffer, this.plot_width]);
-      return this.y_scale = d3.scale.linear().domain([this.y_axis_filter, this.y_max]).range([this.plot_height, this.y_buffer]);
-    };
-
-    Chr_Manhattan_Plot.prototype.get_lod_threshold = function() {
-      if (this.y_max / 2 > 2) {
-        return this.y_max / 2;
+      if (parseInt(this_chr) === parseInt(this.chr[0])) {
+        _results.push(this.these_results.push(result));
       } else {
-        return 2;
+        _results.push(void 0);
       }
-    };
-
-    Chr_Manhattan_Plot.prototype.create_graph = function() {
-      this.add_border();
-      this.add_x_axis();
-      this.add_y_axis();
-      this.add_title();
-      this.add_back_button();
-      return this.add_plot_points();
-    };
-
-    Chr_Manhattan_Plot.prototype.add_border = function() {
-      var border_coords,
-        _this = this;
-      border_coords = [[this.y_buffer, this.plot_height, this.x_buffer, this.x_buffer], [this.y_buffer, this.plot_height, this.plot_width, this.plot_width], [this.y_buffer, this.y_buffer, this.x_buffer, this.plot_width], [this.plot_height, this.plot_height, this.x_buffer, this.plot_width]];
-      return this.svg.selectAll("line").data(border_coords).enter().append("line").attr("y1", function(d) {
+    }
+    return _results;
+  };
+
+  Chr_Manhattan_Plot.prototype.get_qtl_count = function() {
+    var high_qtl_count, result, _i, _len, _ref;
+    high_qtl_count = 0;
+    _ref = this.these_results;
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      result = _ref[_i];
+      if (result.lod_score > 1) {
+        high_qtl_count += 1;
+      }
+    }
+    console.log("high_qtl_count:", high_qtl_count);
+    return this.y_axis_filter = 2;
+  };
+
+  Chr_Manhattan_Plot.prototype.create_coordinates = function() {
+    var result, _i, _len, _ref, _results;
+    _ref = this.these_results;
+    _results = [];
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      result = _ref[_i];
+      this.x_coords.push(parseFloat(result.Mb));
+      this.y_coords.push(result.lod_score);
+      _results.push(this.marker_names.push(result.name));
+    }
+    return _results;
+  };
+
+  Chr_Manhattan_Plot.prototype.create_svg = function() {
+    var svg;
+    svg = d3.select("#topchart").append("svg").attr("class", "chr_manhattan_plot").attr("width", this.plot_width + this.x_buffer).attr("height", this.plot_height + this.y_buffer).append("g");
+    return svg;
+  };
+
+  Chr_Manhattan_Plot.prototype.create_scales = function() {
+    this.x_scale = d3.scale.linear().domain([0, this.chr[1]]).range([this.x_buffer, this.plot_width]);
+    return this.y_scale = d3.scale.linear().domain([0, this.y_max]).range([this.plot_height, this.y_buffer]);
+  };
+
+  Chr_Manhattan_Plot.prototype.get_lod_threshold = function() {
+    if (this.y_max / 2 > 2) {
+      return this.y_max / 2;
+    } else {
+      return 2;
+    }
+  };
+
+  Chr_Manhattan_Plot.prototype.create_graph = function() {
+    this.add_border();
+    this.add_x_axis();
+    this.add_y_axis();
+    this.add_title();
+    this.add_back_button();
+    return this.add_plot_points();
+  };
+
+  Chr_Manhattan_Plot.prototype.add_border = function() {
+    var border_coords;
+    border_coords = [[this.y_buffer, this.plot_height, this.x_buffer, this.x_buffer], [this.y_buffer, this.plot_height, this.plot_width, this.plot_width], [this.y_buffer, this.y_buffer, this.x_buffer, this.plot_width], [this.plot_height, this.plot_height, this.x_buffer, this.plot_width]];
+    return this.svg.selectAll("line").data(border_coords).enter().append("line").attr("y1", (function(_this) {
+      return function(d) {
         return d[0];
-      }).attr("y2", function(d) {
+      };
+    })(this)).attr("y2", (function(_this) {
+      return function(d) {
         return d[1];
-      }).attr("x1", function(d) {
+      };
+    })(this)).attr("x1", (function(_this) {
+      return function(d) {
         return d[2];
-      }).attr("x2", function(d) {
+      };
+    })(this)).attr("x2", (function(_this) {
+      return function(d) {
         return d[3];
-      }).style("stroke", "#000");
-    };
-
-    Chr_Manhattan_Plot.prototype.add_x_axis = function() {
-      var _this = this;
-      this.xAxis = d3.svg.axis().scale(this.x_scale).orient("bottom").ticks(20);
-      this.xAxis.tickFormat(function(d) {
+      };
+    })(this)).style("stroke", "#000");
+  };
+
+  Chr_Manhattan_Plot.prototype.add_x_axis = function() {
+    this.xAxis = d3.svg.axis().scale(this.x_scale).orient("bottom").ticks(20);
+    this.xAxis.tickFormat((function(_this) {
+      return function(d) {
         d3.format("d");
         return d;
-      });
-      return this.svg.append("g").attr("class", "x_axis").attr("transform", "translate(0," + this.plot_height + ")").call(this.xAxis).selectAll("text").attr("text-anchor", "right").attr("font-size", "12px").attr("dx", "-1.6em").attr("transform", function(d) {
+      };
+    })(this));
+    return this.svg.append("g").attr("class", "x_axis").attr("transform", "translate(0," + this.plot_height + ")").call(this.xAxis).selectAll("text").attr("text-anchor", "right").attr("font-size", "12px").attr("dx", "-1.6em").attr("transform", (function(_this) {
+      return function(d) {
         return "translate(-12,0) rotate(-90)";
-      });
-    };
-
-    Chr_Manhattan_Plot.prototype.add_y_axis = function() {
-      this.yAxis = d3.svg.axis().scale(this.y_scale).orient("left").ticks(5);
-      return this.svg.append("g").attr("class", "y_axis").attr("transform", "translate(" + this.x_buffer + ",0)").call(this.yAxis);
-    };
-
-    Chr_Manhattan_Plot.prototype.add_title = function() {
-      var _this = this;
-      return this.svg.append("text").attr("class", "title").text("Chr " + this.chr[0]).attr("x", function(d) {
+      };
+    })(this));
+  };
+
+  Chr_Manhattan_Plot.prototype.add_y_axis = function() {
+    this.yAxis = d3.svg.axis().scale(this.y_scale).orient("left").ticks(5);
+    return this.svg.append("g").attr("class", "y_axis").attr("transform", "translate(" + this.x_buffer + ",0)").call(this.yAxis);
+  };
+
+  Chr_Manhattan_Plot.prototype.add_title = function() {
+    return this.svg.append("text").attr("class", "title").text("Chr " + this.chr[0]).attr("x", (function(_this) {
+      return function(d) {
         return (_this.plot_width + _this.x_buffer) / 2;
-      }).attr("y", this.y_buffer + 20).attr("dx", "0em").attr("text-anchor", "middle").attr("font-family", "sans-serif").attr("font-size", "18px").attr("fill", "black");
-    };
+      };
+    })(this)).attr("y", this.y_buffer + 20).attr("dx", "0em").attr("text-anchor", "middle").attr("font-family", "sans-serif").attr("font-size", "18px").attr("fill", "black");
+  };
 
-    Chr_Manhattan_Plot.prototype.add_back_button = function() {
-      return this.svg.append("text").attr("class", "back").text("Return to full view").attr("x", this.x_buffer * 2).attr("y", this.y_buffer / 2).attr("dx", "0em").attr("text-anchor", "middle").attr("font-family", "sans-serif").attr("font-size", "18px").attr("cursor", "pointer").attr("fill", "black").on("click", this.return_to_full_view);
-    };
+  Chr_Manhattan_Plot.prototype.add_back_button = function() {
+    return this.svg.append("text").attr("class", "back").text("Return to full view").attr("x", this.x_buffer * 2).attr("y", this.y_buffer / 2).attr("dx", "0em").attr("text-anchor", "middle").attr("font-family", "sans-serif").attr("font-size", "18px").attr("cursor", "pointer").attr("fill", "black").on("click", this.return_to_full_view);
+  };
 
-    Chr_Manhattan_Plot.prototype.add_plot_points = function() {
-      var _this = this;
-      return this.plot_point = this.svg.selectAll("circle").data(this.plot_coordinates).enter().append("circle").attr("cx", function(d) {
+  Chr_Manhattan_Plot.prototype.add_plot_points = function() {
+    return this.plot_point = this.svg.selectAll("circle").data(this.plot_coordinates).enter().append("circle").attr("cx", (function(_this) {
+      return function(d) {
         return _this.x_scale(d[0]);
-      }).attr("cy", function(d) {
+      };
+    })(this)).attr("cy", (function(_this) {
+      return function(d) {
         return _this.y_scale(d[1]);
-      }).attr("r", function(d) {
+      };
+    })(this)).attr("r", (function(_this) {
+      return function(d) {
         return 2;
-      }).attr("fill", function(d) {
+      };
+    })(this)).attr("fill", (function(_this) {
+      return function(d) {
         return "black";
-      }).attr("stroke", "black").attr("stroke-width", "1").attr("id", function(d) {
+      };
+    })(this)).attr("stroke", "black").attr("stroke-width", "1").attr("id", (function(_this) {
+      return function(d) {
         return "point_" + String(d[2]);
-      }).classed("circle", true).on("mouseover", function(d) {
+      };
+    })(this)).classed("circle", true).on("mouseover", (function(_this) {
+      return function(d) {
         var this_id;
         console.log("d3.event is:", d3.event);
         console.log("d is:", d);
         this_id = "point_" + String(d[2]);
         return d3.select("#" + this_id).classed("d3_highlight", true).attr("r", 5).attr("stroke", "none").attr("fill", "blue").call(_this.show_marker_in_table(d));
-      }).on("mouseout", function(d) {
+      };
+    })(this)).on("mouseout", (function(_this) {
+      return function(d) {
         var this_id;
         this_id = "point_" + String(d[2]);
         return d3.select("#" + this_id).classed("d3_highlight", false).attr("r", function(d) {
@@ -206,33 +225,31 @@
         }).attr("fill", function(d) {
           return "black";
         }).attr("stroke", "black").attr("stroke-width", "1");
-      }).append("svg:title").text(function(d) {
+      };
+    })(this)).append("svg:title").text((function(_this) {
+      return function(d) {
         return d[2];
-      });
-    };
-
-    Chr_Manhattan_Plot.prototype.return_to_full_view = function() {
-      $('#manhattan_plot').remove();
-      $('#manhattan_plot_container').append('<div id="manhattan_plot"></div>');
-      return root.manhattan_plot = new root.Manhattan_Plot;
-    };
-
-    Chr_Manhattan_Plot.prototype.show_marker_in_table = function(marker_info) {
-      var marker_name;
-      console.log("in show_marker_in_table");
-      /* Searches for the select marker in the results table below
-      */
-
-      if (marker_info) {
-        marker_name = marker_info[2];
-        return $("#qtl_results_filter").find("input:first").val(marker_name).change();
-      }
-    };
-
-    return Chr_Manhattan_Plot;
-
-  })();
+      };
+    })(this));
+  };
+
+  Chr_Manhattan_Plot.prototype.return_to_full_view = function() {
+    $('#topchart').remove();
+    $('#chart_container').append('<div class="qtlcharts" id="topchart"></div>');
+    return create_manhattan_plot();
+  };
+
+  Chr_Manhattan_Plot.prototype.show_marker_in_table = function(marker_info) {
+    var marker_name;
+    console.log("in show_marker_in_table");
+
+    /* Searches for the select marker in the results table below */
+    if (marker_info) {
+      marker_name = marker_info[2];
+      return $("#qtl_results_filter").find("input:first").val(marker_name).change();
+    }
+  };
 
-  root.Chr_Manhattan_Plot = Chr_Manhattan_Plot;
+  return Chr_Manhattan_Plot;
 
-}).call(this);
+})();
diff --git a/wqflask/wqflask/static/new/javascript/compare_traits_scatterplot.js b/wqflask/wqflask/static/new/javascript/compare_traits_scatterplot.js
index a45eb3c0..34977878 100644
--- a/wqflask/wqflask/static/new/javascript/compare_traits_scatterplot.js
+++ b/wqflask/wqflask/static/new/javascript/compare_traits_scatterplot.js
@@ -1,124 +1,121 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var root;
+// Generated by CoffeeScript 1.7.1
+var root;
 
-  root = typeof exports !== "undefined" && exports !== null ? exports : this;
+root = typeof exports !== "undefined" && exports !== null ? exports : this;
 
-  root.create_scatterplot = function(json_ids, json_data) {
-    var data, h, halfh, halfw, indID, margin, mychart, totalh, totalw, w;
-    console.log("TESTING2");
-    h = 400;
-    w = 500;
-    margin = {
-      left: 60,
-      top: 40,
-      right: 40,
-      bottom: 40,
-      inner: 5
-    };
-    halfh = h + margin.top + margin.bottom;
-    totalh = halfh * 2;
-    halfw = w + margin.left + margin.right;
-    totalw = halfw * 2;
-    mychart = scatterplot().xvar(0).yvar(1).xlab("X").ylab("Y").height(h).width(w).margin(margin);
+root.create_scatterplot = function(json_ids, json_data) {
+  var data, h, halfh, halfw, indID, margin, mychart, totalh, totalw, w;
+  console.log("TESTING2");
+  h = 400;
+  w = 500;
+  margin = {
+    left: 60,
+    top: 40,
+    right: 40,
+    bottom: 40,
+    inner: 5
+  };
+  halfh = h + margin.top + margin.bottom;
+  totalh = halfh * 2;
+  halfw = w + margin.left + margin.right;
+  totalw = halfw * 2;
+  mychart = scatterplot().xvar(0).yvar(1).xlab("X").ylab("Y").height(h).width(w).margin(margin);
+  data = json_data;
+  indID = json_ids;
+  d3.select("div#comparison_scatterplot").datum({
+    data: data,
+    indID: indID
+  }).call(mychart);
+  return mychart.pointsSelect().on("mouseover", function(d) {
+    return d3.select(this).attr("r", mychart.pointsize() * 3);
+  }).on("mouseout", function(d) {
+    return d3.select(this).attr("r", mychart.pointsize());
+  });
+};
+
+root.create_scatterplots = function(trait_names, json_ids, json_data) {
+  var brush, brushend, brushmove, brushstart, chart, data, h, halfh, halfw, i, indID, margin, mychart, num_traits, svg, totalh, totalw, w, xscale, xshift, xvar, yscale, yshift, yvar, _i, _j, _k, _ref, _ref1, _ref2, _results;
+  console.log("json_data:", json_data);
+  console.log("trait_names:", trait_names);
+  num_traits = json_data.length;
+  console.log("num_traits:", num_traits);
+  h = 300;
+  w = 400;
+  margin = {
+    left: 60,
+    top: 40,
+    right: 40,
+    bottom: 40,
+    inner: 5
+  };
+  halfh = h + margin.top + margin.bottom;
+  totalh = halfh * (num_traits - 1);
+  halfw = w + margin.left + margin.right;
+  totalw = halfw;
+  xvar = [];
+  yvar = [];
+  xshift = [];
+  yshift = [];
+  for (i = _i = 0, _ref = num_traits - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {
+    xvar.push(i);
+    yvar.push(0);
+    xshift.push(0);
+    yshift.push(halfh * i);
+  }
+  console.log("xvar:", xvar);
+  console.log("yvar:", yvar);
+  svg = d3.select("div#comparison_scatterplot").append("svg").attr("height", totalh).attr("width", totalw);
+  mychart = [];
+  chart = [];
+  for (i = _j = 1, _ref1 = num_traits - 1; 1 <= _ref1 ? _j <= _ref1 : _j >= _ref1; i = 1 <= _ref1 ? ++_j : --_j) {
+    mychart[i - 1] = scatterplot().xvar(xvar[i]).yvar(yvar[i]).nxticks(6).height(h).width(w).margin(margin).pointsize(4).xlab("" + trait_names[i - 1]).ylab("" + trait_names[0]).title("" + trait_names[0] + " vs. " + trait_names[i - 1]);
     data = json_data;
     indID = json_ids;
-    d3.select("div#comparison_scatterplot").datum({
+    chart[i - 1] = svg.append("g").attr("id", "chart" + (i - 1)).attr("transform", "translate(" + xshift[i] + "," + yshift[i - 1] + ")");
+    chart[i - 1].datum({
       data: data,
       indID: indID
-    }).call(mychart);
-    return mychart.pointsSelect().on("mouseover", function(d) {
-      return d3.select(this).attr("r", mychart.pointsize() * 3);
-    }).on("mouseout", function(d) {
-      return d3.select(this).attr("r", mychart.pointsize());
-    });
-  };
-
-  root.create_scatterplots = function(trait_names, json_ids, json_data) {
-    var brush, brushend, brushmove, brushstart, chart, data, h, halfh, halfw, i, indID, margin, mychart, num_traits, svg, totalh, totalw, w, xscale, xshift, xvar, yscale, yshift, yvar, _i, _j, _k, _ref, _ref1, _ref2, _results;
-    console.log("json_data:", json_data);
-    console.log("trait_names:", trait_names);
-    num_traits = json_data.length;
-    console.log("num_traits:", num_traits);
-    h = 300;
-    w = 400;
-    margin = {
-      left: 60,
-      top: 40,
-      right: 40,
-      bottom: 40,
-      inner: 5
-    };
-    halfh = h + margin.top + margin.bottom;
-    totalh = halfh * (num_traits - 1);
-    halfw = w + margin.left + margin.right;
-    totalw = halfw;
-    xvar = [];
-    yvar = [];
-    xshift = [];
-    yshift = [];
-    for (i = _i = 0, _ref = num_traits - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {
-      xvar.push(i);
-      yvar.push(0);
-      xshift.push(0);
-      yshift.push(halfh * i);
-    }
-    console.log("xvar:", xvar);
-    console.log("yvar:", yvar);
-    svg = d3.select("div#comparison_scatterplot").append("svg").attr("height", totalh).attr("width", totalw);
-    mychart = [];
-    chart = [];
-    for (i = _j = 1, _ref1 = num_traits - 1; 1 <= _ref1 ? _j <= _ref1 : _j >= _ref1; i = 1 <= _ref1 ? ++_j : --_j) {
-      mychart[i - 1] = scatterplot().xvar(xvar[i]).yvar(yvar[i]).nxticks(6).height(h).width(w).margin(margin).pointsize(4).xlab("" + trait_names[i - 1]).ylab("" + trait_names[0]).title("" + trait_names[0] + " vs. " + trait_names[i - 1]);
-      data = json_data;
-      indID = json_ids;
-      chart[i - 1] = svg.append("g").attr("id", "chart" + (i - 1)).attr("transform", "translate(" + xshift[i] + "," + yshift[i - 1] + ")");
-      chart[i - 1].datum({
-        data: data,
-        indID: indID
-      }).call(mychart[i - 1]);
-    }
-    brush = [];
-    brushstart = function(i) {
-      return function() {
-        var j, _k, _ref2;
-        for (j = _k = 0, _ref2 = num_traits - 2; 0 <= _ref2 ? _k <= _ref2 : _k >= _ref2; j = 0 <= _ref2 ? ++_k : --_k) {
-          if (j !== i) {
-            chart[j].call(brush[j].clear());
-          }
+    }).call(mychart[i - 1]);
+  }
+  brush = [];
+  brushstart = function(i) {
+    return function() {
+      var j, _k, _ref2;
+      for (j = _k = 0, _ref2 = num_traits - 2; 0 <= _ref2 ? _k <= _ref2 : _k >= _ref2; j = 0 <= _ref2 ? ++_k : --_k) {
+        if (j !== i) {
+          chart[j].call(brush[j].clear());
         }
-        return svg.selectAll("circle").attr("opacity", 0.6).classed("selected", false);
-      };
-    };
-    brushmove = function(i) {
-      return function() {
-        var e;
-        svg.selectAll("circle").classed("selected", false);
-        e = brush[i].extent();
-        return chart[i].selectAll("circle").classed("selected", function(d, j) {
-          var circ, cx, cy, selected;
-          circ = d3.select(this);
-          cx = circ.attr("cx");
-          cy = circ.attr("cy");
-          selected = e[0][0] <= cx && cx <= e[1][0] && e[0][1] <= cy && cy <= e[1][1];
-          if (selected) {
-            svg.selectAll("circle.pt" + j).classed("selected", true);
-          }
-          return selected;
-        });
-      };
+      }
+      return svg.selectAll("circle").attr("opacity", 0.6).classed("selected", false);
     };
-    brushend = function() {
-      return svg.selectAll("circle").attr("opacity", 1);
+  };
+  brushmove = function(i) {
+    return function() {
+      var e;
+      svg.selectAll("circle").classed("selected", false);
+      e = brush[i].extent();
+      return chart[i].selectAll("circle").classed("selected", function(d, j) {
+        var circ, cx, cy, selected;
+        circ = d3.select(this);
+        cx = circ.attr("cx");
+        cy = circ.attr("cy");
+        selected = e[0][0] <= cx && cx <= e[1][0] && e[0][1] <= cy && cy <= e[1][1];
+        if (selected) {
+          svg.selectAll("circle.pt" + j).classed("selected", true);
+        }
+        return selected;
+      });
     };
-    xscale = d3.scale.linear().domain([margin.left, margin.left + w]).range([margin.left, margin.left + w]);
-    yscale = d3.scale.linear().domain([margin.top, margin.top + h]).range([margin.top, margin.top + h]);
-    _results = [];
-    for (i = _k = 0, _ref2 = num_traits - 2; 0 <= _ref2 ? _k <= _ref2 : _k >= _ref2; i = 0 <= _ref2 ? ++_k : --_k) {
-      brush[i] = d3.svg.brush().x(xscale).y(yscale).on("brushstart", brushstart(i)).on("brush", brushmove(i)).on("brushend", brushend);
-      _results.push(chart[i].call(brush[i]));
-    }
-    return _results;
   };
-
-}).call(this);
+  brushend = function() {
+    return svg.selectAll("circle").attr("opacity", 1);
+  };
+  xscale = d3.scale.linear().domain([margin.left, margin.left + w]).range([margin.left, margin.left + w]);
+  yscale = d3.scale.linear().domain([margin.top, margin.top + h]).range([margin.top, margin.top + h]);
+  _results = [];
+  for (i = _k = 0, _ref2 = num_traits - 2; 0 <= _ref2 ? _k <= _ref2 : _k >= _ref2; i = 0 <= _ref2 ? ++_k : --_k) {
+    brush[i] = d3.svg.brush().x(xscale).y(yscale).on("brushstart", brushstart(i)).on("brush", brushmove(i)).on("brushend", brushend);
+    _results.push(chart[i].call(brush[i]));
+  }
+  return _results;
+};
diff --git a/wqflask/wqflask/static/new/javascript/corr_matrix.js b/wqflask/wqflask/static/new/javascript/corr_matrix.js
index 17625f99..cfe2159e 100644
--- a/wqflask/wqflask/static/new/javascript/corr_matrix.js
+++ b/wqflask/wqflask/static/new/javascript/corr_matrix.js
@@ -1,157 +1,154 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var iplotCorr, root;
+// Generated by CoffeeScript 1.7.1
+var iplotCorr, root;
 
-  root = typeof exports !== "undefined" && exports !== null ? exports : this;
+root = typeof exports !== "undefined" && exports !== null ? exports : this;
 
-  iplotCorr = function(data, chartOpts) {
-    var cells, chartdivid, colorScale, corXscale, corYscale, corZscale, corcolors, corr, corr_tip, corrplot, cortitle, drawScatter, height, i, j, margin, nGroup, ncorrX, ncorrY, nind, nvar, pixel_height, pixel_width, rectcolor, scat_tip, scatcolors, scatterplot, scattitle, svg, totalh, totalw, width, zlim, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9;
-    height = (_ref = chartOpts != null ? chartOpts.height : void 0) != null ? _ref : 450;
-    width = (_ref1 = chartOpts != null ? chartOpts.width : void 0) != null ? _ref1 : height;
-    margin = (_ref2 = chartOpts != null ? chartOpts.margin : void 0) != null ? _ref2 : {
-      left: 70,
-      top: 40,
-      right: 5,
-      bottom: 70,
-      inner: 5
-    };
-    corcolors = (_ref3 = chartOpts != null ? chartOpts.corcolors : void 0) != null ? _ref3 : ["darkslateblue", "white", "crimson"];
-    zlim = (_ref4 = chartOpts != null ? chartOpts.zlim : void 0) != null ? _ref4 : [-1, 0, 1];
-    rectcolor = (_ref5 = chartOpts != null ? chartOpts.rectcolor : void 0) != null ? _ref5 : d3.rgb(230, 230, 230);
-    cortitle = (_ref6 = chartOpts != null ? chartOpts.cortitle : void 0) != null ? _ref6 : "";
-    scattitle = (_ref7 = chartOpts != null ? chartOpts.scattitle : void 0) != null ? _ref7 : "";
-    scatcolors = (_ref8 = chartOpts != null ? chartOpts.scatcolors : void 0) != null ? _ref8 : null;
-    chartdivid = (_ref9 = chartOpts != null ? chartOpts.chartdivid : void 0) != null ? _ref9 : 'chart';
-    totalh = height + margin.top + margin.bottom;
-    totalw = (width + margin.left + margin.right) * 2;
-    svg = d3.select("div#" + chartdivid).append("svg").attr("height", totalh).attr("width", totalw);
-    corrplot = svg.append("g").attr("id", "corplot").attr("transform", "translate(" + margin.left + "," + margin.top + ")");
-    scatterplot = svg.append("g").attr("id", "scatterplot").attr("transform", "translate(" + (margin.left * 2 + margin.right + width) + "," + margin.top + ")");
-    nind = data.indID.length;
-    nvar = data["var"].length;
-    ncorrX = data.cols.length;
-    ncorrY = data.rows.length;
-    corXscale = d3.scale.ordinal().domain(d3.range(ncorrX)).rangeBands([0, width]);
-    corYscale = d3.scale.ordinal().domain(d3.range(ncorrY)).rangeBands([height, 0]);
-    corZscale = d3.scale.linear().domain(zlim).range(corcolors);
-    pixel_width = corXscale(1) - corXscale(0);
-    pixel_height = corYscale(0) - corYscale(1);
-    corr = [];
-    for (i in data.corr) {
-      for (j in data.corr[i]) {
-        corr.push({
-          row: i,
-          col: j,
-          value: data.corr[i][j]
-        });
-      }
+iplotCorr = function(data, chartOpts) {
+  var cells, chartdivid, colorScale, corXscale, corYscale, corZscale, corcolors, corr, corr_tip, corrplot, cortitle, drawScatter, height, i, j, margin, nGroup, ncorrX, ncorrY, nind, nvar, pixel_height, pixel_width, rectcolor, scat_tip, scatcolors, scatterplot, scattitle, svg, totalh, totalw, width, zlim, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9;
+  height = (_ref = chartOpts != null ? chartOpts.height : void 0) != null ? _ref : 450;
+  width = (_ref1 = chartOpts != null ? chartOpts.width : void 0) != null ? _ref1 : height;
+  margin = (_ref2 = chartOpts != null ? chartOpts.margin : void 0) != null ? _ref2 : {
+    left: 70,
+    top: 40,
+    right: 5,
+    bottom: 70,
+    inner: 5
+  };
+  corcolors = (_ref3 = chartOpts != null ? chartOpts.corcolors : void 0) != null ? _ref3 : ["darkslateblue", "white", "crimson"];
+  zlim = (_ref4 = chartOpts != null ? chartOpts.zlim : void 0) != null ? _ref4 : [-1, 0, 1];
+  rectcolor = (_ref5 = chartOpts != null ? chartOpts.rectcolor : void 0) != null ? _ref5 : d3.rgb(230, 230, 230);
+  cortitle = (_ref6 = chartOpts != null ? chartOpts.cortitle : void 0) != null ? _ref6 : "";
+  scattitle = (_ref7 = chartOpts != null ? chartOpts.scattitle : void 0) != null ? _ref7 : "";
+  scatcolors = (_ref8 = chartOpts != null ? chartOpts.scatcolors : void 0) != null ? _ref8 : null;
+  chartdivid = (_ref9 = chartOpts != null ? chartOpts.chartdivid : void 0) != null ? _ref9 : 'chart';
+  totalh = height + margin.top + margin.bottom;
+  totalw = (width + margin.left + margin.right) * 2;
+  svg = d3.select("div#" + chartdivid).append("svg").attr("height", totalh).attr("width", totalw);
+  corrplot = svg.append("g").attr("id", "corplot").attr("transform", "translate(" + margin.left + "," + margin.top + ")");
+  scatterplot = svg.append("g").attr("id", "scatterplot").attr("transform", "translate(" + (margin.left * 2 + margin.right + width) + "," + margin.top + ")");
+  nind = data.indID.length;
+  nvar = data["var"].length;
+  ncorrX = data.cols.length;
+  ncorrY = data.rows.length;
+  corXscale = d3.scale.ordinal().domain(d3.range(ncorrX)).rangeBands([0, width]);
+  corYscale = d3.scale.ordinal().domain(d3.range(ncorrY)).rangeBands([height, 0]);
+  corZscale = d3.scale.linear().domain(zlim).range(corcolors);
+  pixel_width = corXscale(1) - corXscale(0);
+  pixel_height = corYscale(0) - corYscale(1);
+  corr = [];
+  for (i in data.corr) {
+    for (j in data.corr[i]) {
+      corr.push({
+        row: i,
+        col: j,
+        value: data.corr[i][j]
+      });
     }
-    scatterplot.append("rect").attr("height", height).attr("width", width).attr("fill", rectcolor).attr("stroke", "black").attr("stroke-width", 1).attr("pointer-events", "none");
-    corr_tip = d3.tip().attr('class', 'd3-tip').html(function(d) {
-      return d3.format(".2f")(d.value);
-    }).direction('e').offset([0, 10]);
-    corrplot.call(corr_tip);
-    cells = corrplot.selectAll("empty").data(corr).enter().append("rect").attr("class", "cell").attr("x", function(d) {
-      return corXscale(d.col);
-    }).attr("y", function(d) {
-      return corYscale(d.row);
-    }).attr("width", corXscale.rangeBand()).attr("height", corYscale.rangeBand()).attr("fill", function(d) {
-      return corZscale(d.value);
-    }).attr("stroke", "none").attr("stroke-width", 2).on("mouseover", function(d) {
-      d3.select(this).attr("stroke", "black");
-      corr_tip.show(d);
-      corrplot.append("text").attr("class", "corrlabel").attr("x", corXscale(d.col) + pixel_width / 2).attr("y", height + margin.bottom * 0.2).text(data["var"][data.cols[d.col]]).attr("dominant-baseline", "middle").attr("text-anchor", "middle");
-      return corrplot.append("text").attr("class", "corrlabel").attr("y", corYscale(d.row) + pixel_height / 2).attr("x", -margin.left * 0.1).text(data["var"][data.rows[d.row]]).attr("dominant-baseline", "middle").attr("text-anchor", "end");
-    }).on("mouseout", function(d) {
-      corr_tip.hide(d);
-      d3.selectAll("text.corrlabel").remove();
-      return d3.select(this).attr("stroke", "none");
-    }).on("click", function(d) {
-      return drawScatter(d.col, d.row);
-    });
-    nGroup = d3.max(data.group);
-    if (!(scatcolors != null) || scatcolors.length < nGroup) {
-      if (nGroup === 1) {
-        scatcolors = [d3.rgb(150, 150, 150)];
-      } else if (nGroup <= 3) {
-        scatcolors = ["crimson", "green", "darkslateblue"];
+  }
+  scatterplot.append("rect").attr("height", height).attr("width", width).attr("fill", rectcolor).attr("stroke", "black").attr("stroke-width", 1).attr("pointer-events", "none");
+  corr_tip = d3.tip().attr('class', 'd3-tip').html(function(d) {
+    return d3.format(".2f")(d.value);
+  }).direction('e').offset([0, 10]);
+  corrplot.call(corr_tip);
+  cells = corrplot.selectAll("empty").data(corr).enter().append("rect").attr("class", "cell").attr("x", function(d) {
+    return corXscale(d.col);
+  }).attr("y", function(d) {
+    return corYscale(d.row);
+  }).attr("width", corXscale.rangeBand()).attr("height", corYscale.rangeBand()).attr("fill", function(d) {
+    return corZscale(d.value);
+  }).attr("stroke", "none").attr("stroke-width", 2).on("mouseover", function(d) {
+    d3.select(this).attr("stroke", "black");
+    corr_tip.show(d);
+    corrplot.append("text").attr("class", "corrlabel").attr("x", corXscale(d.col) + pixel_width / 2).attr("y", height + margin.bottom * 0.2).text(data["var"][data.cols[d.col]]).attr("dominant-baseline", "middle").attr("text-anchor", "middle");
+    return corrplot.append("text").attr("class", "corrlabel").attr("y", corYscale(d.row) + pixel_height / 2).attr("x", -margin.left * 0.1).text(data["var"][data.rows[d.row]]).attr("dominant-baseline", "middle").attr("text-anchor", "end");
+  }).on("mouseout", function(d) {
+    corr_tip.hide(d);
+    d3.selectAll("text.corrlabel").remove();
+    return d3.select(this).attr("stroke", "none");
+  }).on("click", function(d) {
+    return drawScatter(d.col, d.row);
+  });
+  nGroup = d3.max(data.group);
+  if (!(scatcolors != null) || scatcolors.length < nGroup) {
+    if (nGroup === 1) {
+      scatcolors = [d3.rgb(150, 150, 150)];
+    } else if (nGroup <= 3) {
+      scatcolors = ["crimson", "green", "darkslateblue"];
+    } else {
+      if (nGroup <= 10) {
+        colorScale = d3.scale.category10();
       } else {
-        if (nGroup <= 10) {
-          colorScale = d3.scale.category10();
-        } else {
-          colorScale = d3.scale.category20();
-        }
-        scatcolors = (function() {
-          var _results;
-          _results = [];
-          for (i in d3.range(nGroup)) {
-            _results.push(colorScale(i));
-          }
-          return _results;
-        })();
+        colorScale = d3.scale.category20();
       }
-    }
-    scat_tip = d3.tip().attr('class', 'd3-tip').html(function(d, i) {
-      return data.indID[i];
-    }).direction('e').offset([0, 10]);
-    scatterplot.call(scat_tip);
-    drawScatter = function(i, j) {
-      var xScale, xticks, yScale, yticks;
-      d3.selectAll("circle.points").remove();
-      d3.selectAll("text.axes").remove();
-      d3.selectAll("line.axes").remove();
-      console.log("data.dat:", data.dat);
-      console.log("data.cols:", data.cols);
-      xScale = d3.scale.linear().domain(d3.extent(data.dat[data.cols[i]])).range([margin.inner, width - margin.inner]);
-      yScale = d3.scale.linear().domain(d3.extent(data.dat[data.rows[j]])).range([height - margin.inner, margin.inner]);
-      scatterplot.append("text").attr("id", "xaxis").attr("class", "axes").attr("x", width / 2).attr("y", height + margin.bottom * 0.7).text(data["var"][data.cols[i]]).attr("dominant-baseline", "middle").attr("text-anchor", "middle").attr("fill", "slateblue");
-      scatterplot.append("text").attr("id", "yaxis").attr("class", "axes").attr("x", -margin.left * 0.8).attr("y", height / 2).text(data["var"][data.rows[j]]).attr("dominant-baseline", "middle").attr("text-anchor", "middle").attr("transform", "rotate(270," + (-margin.left * 0.8) + "," + (height / 2) + ")").attr("fill", "slateblue");
-      xticks = xScale.ticks(5);
-      yticks = yScale.ticks(5);
-      scatterplot.selectAll("empty").data(xticks).enter().append("text").attr("class", "axes").text(function(d) {
-        return formatAxis(xticks)(d);
-      }).attr("x", function(d) {
-        return xScale(d);
-      }).attr("y", height + margin.bottom * 0.3).attr("dominant-baseline", "middle").attr("text-anchor", "middle");
-      scatterplot.selectAll("empty").data(yticks).enter().append("text").attr("class", "axes").text(function(d) {
-        return formatAxis(yticks)(d);
-      }).attr("x", -margin.left * 0.1).attr("y", function(d) {
-        return yScale(d);
-      }).attr("dominant-baseline", "middle").attr("text-anchor", "end");
-      scatterplot.selectAll("empty").data(xticks).enter().append("line").attr("class", "axes").attr("x1", function(d) {
-        return xScale(d);
-      }).attr("x2", function(d) {
-        return xScale(d);
-      }).attr("y1", 0).attr("y2", height).attr("stroke", "white").attr("stroke-width", 1);
-      scatterplot.selectAll("empty").data(yticks).enter().append("line").attr("class", "axes").attr("y1", function(d) {
-        return yScale(d);
-      }).attr("y2", function(d) {
-        return yScale(d);
-      }).attr("x1", 0).attr("x2", width).attr("stroke", "white").attr("stroke-width", 1);
-      return scatterplot.selectAll("empty").data(d3.range(nind)).enter().append("circle").attr("class", "points").attr("cx", function(d) {
-        return xScale(data.dat[data.cols[i]][d]);
-      }).attr("cy", function(d) {
-        return yScale(data.dat[data.rows[j]][d]);
-      }).attr("r", function(d) {
-        var x, y;
-        x = data.dat[data.cols[i]][d];
-        y = data.dat[data.rows[j]][d];
-        if ((x != null) && (y != null)) {
-          return 3;
-        } else {
-          return null;
+      scatcolors = (function() {
+        var _results;
+        _results = [];
+        for (i in d3.range(nGroup)) {
+          _results.push(colorScale(i));
         }
-      }).attr("stroke", "black").attr("stroke-width", 1).attr("fill", function(d) {
-        return scatcolors[data.group[d] - 1];
-      }).on("mouseover", scat_tip.show).on("mouseout", scat_tip.hide);
-    };
-    corrplot.append("rect").attr("height", height).attr("width", width).attr("fill", "none").attr("stroke", "black").attr("stroke-width", 1).attr("pointer-events", "none");
-    scatterplot.append("rect").attr("height", height).attr("width", width).attr("fill", "none").attr("stroke", "black").attr("stroke-width", 1).attr("pointer-events", "none");
-    corrplot.append("text").text(cortitle).attr("id", "corrtitle").attr("x", width / 2).attr("y", -margin.top / 2).attr("dominant-baseline", "middle").attr("text-anchor", "middle");
-    scatterplot.append("text").text(scattitle).attr("id", "scattitle").attr("x", width / 2).attr("y", -margin.top / 2).attr("dominant-baseline", "middle").attr("text-anchor", "middle");
-    return d3.select("div#caption").style("opacity", 1);
+        return _results;
+      })();
+    }
+  }
+  scat_tip = d3.tip().attr('class', 'd3-tip').html(function(d, i) {
+    return data.indID[i];
+  }).direction('e').offset([0, 10]);
+  scatterplot.call(scat_tip);
+  drawScatter = function(i, j) {
+    var xScale, xticks, yScale, yticks;
+    d3.selectAll("circle.points").remove();
+    d3.selectAll("text.axes").remove();
+    d3.selectAll("line.axes").remove();
+    console.log("data.dat:", data.dat);
+    console.log("data.cols:", data.cols);
+    xScale = d3.scale.linear().domain(d3.extent(data.dat[data.cols[i]])).range([margin.inner, width - margin.inner]);
+    yScale = d3.scale.linear().domain(d3.extent(data.dat[data.rows[j]])).range([height - margin.inner, margin.inner]);
+    scatterplot.append("text").attr("id", "xaxis").attr("class", "axes").attr("x", width / 2).attr("y", height + margin.bottom * 0.7).text(data["var"][data.cols[i]]).attr("dominant-baseline", "middle").attr("text-anchor", "middle").attr("fill", "slateblue");
+    scatterplot.append("text").attr("id", "yaxis").attr("class", "axes").attr("x", -margin.left * 0.8).attr("y", height / 2).text(data["var"][data.rows[j]]).attr("dominant-baseline", "middle").attr("text-anchor", "middle").attr("transform", "rotate(270," + (-margin.left * 0.8) + "," + (height / 2) + ")").attr("fill", "slateblue");
+    xticks = xScale.ticks(5);
+    yticks = yScale.ticks(5);
+    scatterplot.selectAll("empty").data(xticks).enter().append("text").attr("class", "axes").text(function(d) {
+      return formatAxis(xticks)(d);
+    }).attr("x", function(d) {
+      return xScale(d);
+    }).attr("y", height + margin.bottom * 0.3).attr("dominant-baseline", "middle").attr("text-anchor", "middle");
+    scatterplot.selectAll("empty").data(yticks).enter().append("text").attr("class", "axes").text(function(d) {
+      return formatAxis(yticks)(d);
+    }).attr("x", -margin.left * 0.1).attr("y", function(d) {
+      return yScale(d);
+    }).attr("dominant-baseline", "middle").attr("text-anchor", "end");
+    scatterplot.selectAll("empty").data(xticks).enter().append("line").attr("class", "axes").attr("x1", function(d) {
+      return xScale(d);
+    }).attr("x2", function(d) {
+      return xScale(d);
+    }).attr("y1", 0).attr("y2", height).attr("stroke", "white").attr("stroke-width", 1);
+    scatterplot.selectAll("empty").data(yticks).enter().append("line").attr("class", "axes").attr("y1", function(d) {
+      return yScale(d);
+    }).attr("y2", function(d) {
+      return yScale(d);
+    }).attr("x1", 0).attr("x2", width).attr("stroke", "white").attr("stroke-width", 1);
+    return scatterplot.selectAll("empty").data(d3.range(nind)).enter().append("circle").attr("class", "points").attr("cx", function(d) {
+      return xScale(data.dat[data.cols[i]][d]);
+    }).attr("cy", function(d) {
+      return yScale(data.dat[data.rows[j]][d]);
+    }).attr("r", function(d) {
+      var x, y;
+      x = data.dat[data.cols[i]][d];
+      y = data.dat[data.rows[j]][d];
+      if ((x != null) && (y != null)) {
+        return 3;
+      } else {
+        return null;
+      }
+    }).attr("stroke", "black").attr("stroke-width", 1).attr("fill", function(d) {
+      return scatcolors[data.group[d] - 1];
+    }).on("mouseover", scat_tip.show).on("mouseout", scat_tip.hide);
   };
+  corrplot.append("rect").attr("height", height).attr("width", width).attr("fill", "none").attr("stroke", "black").attr("stroke-width", 1).attr("pointer-events", "none");
+  scatterplot.append("rect").attr("height", height).attr("width", width).attr("fill", "none").attr("stroke", "black").attr("stroke-width", 1).attr("pointer-events", "none");
+  corrplot.append("text").text(cortitle).attr("id", "corrtitle").attr("x", width / 2).attr("y", -margin.top / 2).attr("dominant-baseline", "middle").attr("text-anchor", "middle");
+  scatterplot.append("text").text(scattitle).attr("id", "scattitle").attr("x", width / 2).attr("y", -margin.top / 2).attr("dominant-baseline", "middle").attr("text-anchor", "middle");
+  return d3.select("div#caption").style("opacity", 1);
+};
 
-  root.corr_matrix = iplotCorr;
-
-}).call(this);
+root.corr_matrix = iplotCorr;
diff --git a/wqflask/wqflask/static/new/javascript/create_corr_matrix.js b/wqflask/wqflask/static/new/javascript/create_corr_matrix.js
index 64dc834d..ca5962f4 100644
--- a/wqflask/wqflask/static/new/javascript/create_corr_matrix.js
+++ b/wqflask/wqflask/static/new/javascript/create_corr_matrix.js
@@ -1,47 +1,44 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var get_data, get_options, root;
+// Generated by CoffeeScript 1.7.1
+var get_data, get_options, root;
 
-  root = typeof exports !== "undefined" && exports !== null ? exports : this;
+root = typeof exports !== "undefined" && exports !== null ? exports : this;
 
-  $(function() {
-    var chartOpts, data, mychart;
-    console.log("js_data:", js_data);
-    chartOpts = get_options();
-    data = get_data();
-    console.log(data);
-    return mychart = corr_matrix(data, chartOpts);
-  });
+$(function() {
+  var chartOpts, data, mychart;
+  console.log("js_data:", js_data);
+  chartOpts = get_options();
+  data = get_data();
+  console.log(data);
+  return mychart = corr_matrix(data, chartOpts);
+});
 
-  get_options = function() {
-    var chartOpts;
-    chartOpts = {
-      cortitle: "Correlation Matrix",
-      scattitle: "Scatterplot",
-      h: 450,
-      w: 450,
-      margin: {
-        left: 100,
-        top: 40,
-        right: 5,
-        bottom: 70,
-        inner: 5
-      }
-    };
-    return chartOpts;
+get_options = function() {
+  var chartOpts;
+  chartOpts = {
+    cortitle: "Correlation Matrix",
+    scattitle: "Scatterplot",
+    h: 450,
+    w: 450,
+    margin: {
+      left: 100,
+      top: 40,
+      right: 5,
+      bottom: 70,
+      inner: 5
+    }
   };
+  return chartOpts;
+};
 
-  get_data = function() {
-    var data;
-    data = {};
-    data["var"] = js_data.traits;
-    data.group = js_data.groups;
-    data.indID = js_data.samples;
-    data.dat = js_data.sample_data;
-    data.corr = js_data.corr_results;
-    data.cols = js_data.cols;
-    data.rows = js_data.rows;
-    return data;
-  };
-
-}).call(this);
+get_data = function() {
+  var data;
+  data = {};
+  data["var"] = js_data.traits;
+  data.group = js_data.groups;
+  data.indID = js_data.samples;
+  data.dat = js_data.sample_data;
+  data.corr = js_data.corr_results;
+  data.cols = js_data.cols;
+  data.rows = js_data.rows;
+  return data;
+};
diff --git a/wqflask/wqflask/static/new/javascript/create_interval_map.coffee b/wqflask/wqflask/static/new/javascript/create_interval_map.coffee
new file mode 100644
index 00000000..cacba03e
--- /dev/null
+++ b/wqflask/wqflask/static/new/javascript/create_interval_map.coffee
@@ -0,0 +1,91 @@
+create_interval_map = ->

+    h = 500

+    w = 1200

+    margin = {left:60, top:40, right:40, bottom: 40, inner:5}

+    halfh = (h+margin.top+margin.bottom)

+    totalh = halfh*2

+    totalw = (w+margin.left+margin.right)

+    

+    # simplest use

+    #d3.json "data.json", (data) ->

+    mychart = lodchart().lodvarname("lod.hk")

+                        .height(h)

+                        .width(w)

+                        .margin(margin)

+    

+    data = js_data.json_data

+    

+    d3.select("div#topchart")

+      .datum(data)

+      .call(mychart)

+    

+    # grab chromosome rectangles; color pink on hover

+    chrrect = mychart.chrSelect()

+    chrrect.on "mouseover", ->

+                d3.select(this).attr("fill", "#E9CFEC")

+           .on "mouseout", (d,i) ->

+                d3.select(this).attr("fill", ->

+                      return "#F1F1F9"  if i % 2

+                      "#FBFBFF")

+    

+    # animate points at markers on click

+    mychart.markerSelect()

+              .on "click", (d) ->

+                    r = d3.select(this).attr("r")

+                    d3.select(this)

+                      .transition().duration(500).attr("r", r*3)

+                      .transition().duration(500).attr("r", r)

+

+create_interval_map()

+

+$("#export").click =>

+    #Get d3 SVG element

+    svg = $("#topchart").find("svg")[0]

+    

+    #Extract SVG text string

+    svg_xml = (new XMLSerializer).serializeToString(svg)

+    console.log("svg_xml:", svg_xml)

+        

+    #Set filename

+    filename = "interval_map_" + js_data.this_trait

+

+    #Make a form with the SVG data

+    form = $("#exportform")

+    form.find("#data").val(svg_xml)

+    form.find("#filename").val(filename)

+    form.submit()

+

+# two LOD charts within one SVG

+#d3.json "data.json", (data) ->

+#  mychart_em = lodchart().lodvarname("lod.em")

+#                         .height(h)

+#                         .width(w)

+#                         .margin(margin)

+#                         .ylab("LOD score (by EM)")

+#                         .pointsize(1)

+#                         .nyticks(9)

+#                         .title("Standard interval mapping")

+#  mychart_hk = lodchart().lodvarname("lod.hk")

+#                         .height(h)

+#                         .width(w)

+#                         .margin(margin)

+#                         .ylab("LOD score (by H-K)")

+#                         .linecolor("Crimson")

+#                         .yticks([0, 1, 2, 4, 6, 8])

+#                         .title("Haley-Knott regression")

+#

+#  svg = d3.select("div#bottomchart")

+#          .append("svg")

+#          .attr("height", totalh)

+#          .attr("width", totalw)

+#

+#  chart1 = svg.append("g").attr("id", "chart1")

+#

+#  chart2 = svg.append("g").attr("id", "chart2")

+#              .attr("transform", "translate(0, #{halfh})")

+#

+#  chart1.datum(data)

+#    .call(mychart_em)

+#

+#  chart2.datum(data)

+#    .call(mychart_hk)
\ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/create_interval_map.js b/wqflask/wqflask/static/new/javascript/create_interval_map.js
new file mode 100644
index 00000000..5041cfea
--- /dev/null
+++ b/wqflask/wqflask/static/new/javascript/create_interval_map.js
@@ -0,0 +1,53 @@
+// Generated by CoffeeScript 1.7.1
+var create_interval_map;
+
+create_interval_map = function() {
+  var chrrect, data, h, halfh, margin, mychart, totalh, totalw, w;
+  h = 500;
+  w = 1200;
+  margin = {
+    left: 60,
+    top: 40,
+    right: 40,
+    bottom: 40,
+    inner: 5
+  };
+  halfh = h + margin.top + margin.bottom;
+  totalh = halfh * 2;
+  totalw = w + margin.left + margin.right;
+  mychart = lodchart().lodvarname("lod.hk").height(h).width(w).margin(margin);
+  data = js_data.json_data;
+  d3.select("div#topchart").datum(data).call(mychart);
+  chrrect = mychart.chrSelect();
+  chrrect.on("mouseover", function() {
+    return d3.select(this).attr("fill", "#E9CFEC");
+  }).on("mouseout", function(d, i) {
+    return d3.select(this).attr("fill", function() {
+      if (i % 2) {
+        return "#F1F1F9";
+      }
+      return "#FBFBFF";
+    });
+  });
+  return mychart.markerSelect().on("click", function(d) {
+    var r;
+    r = d3.select(this).attr("r");
+    return d3.select(this).transition().duration(500).attr("r", r * 3).transition().duration(500).attr("r", r);
+  });
+};
+
+create_interval_map();
+
+$("#export").click((function(_this) {
+  return function() {
+    var filename, form, svg, svg_xml;
+    svg = $("#topchart").find("svg")[0];
+    svg_xml = (new XMLSerializer).serializeToString(svg);
+    console.log("svg_xml:", svg_xml);
+    filename = "interval_map_" + js_data.this_trait;
+    form = $("#exportform");
+    form.find("#data").val(svg_xml);
+    form.find("#filename").val(filename);
+    return form.submit();
+  };
+})(this));
diff --git a/wqflask/wqflask/static/new/javascript/create_manhattan_plot.coffee b/wqflask/wqflask/static/new/javascript/create_manhattan_plot.coffee
new file mode 100644
index 00000000..258d5c01
--- /dev/null
+++ b/wqflask/wqflask/static/new/javascript/create_manhattan_plot.coffee
@@ -0,0 +1,57 @@
+create_manhattan_plot = ->

+    h = 500

+    w = 1200

+    margin = {left:60, top:40, right:40, bottom: 40, inner:5}

+    halfh = (h+margin.top+margin.bottom)

+    totalh = halfh*2

+    totalw = (w+margin.left+margin.right)

+    

+    # simplest use

+    #d3.json "data.json", (data) ->

+    mychart = lodchart().lodvarname("lod.hk")

+                        .height(h)

+                        .width(w)

+                        .margin(margin)

+    

+    data = js_data.json_data

+    

+    d3.select("div#topchart")

+      .datum(data)

+      .call(mychart)

+    

+    # grab chromosome rectangles; color pink on hover

+    chrrect = mychart.chrSelect()

+    chrrect.on "mouseover", ->

+                d3.select(this).attr("fill", "#E9CFEC")

+           .on "mouseout", (d,i) ->

+                d3.select(this).attr("fill", ->

+                      return "#F1F1F9"  if i % 2

+                      "#FBFBFF")

+    

+    # animate points at markers on click

+    mychart.markerSelect()

+              .on "click", (d) ->

+                    r = d3.select(this).attr("r")

+                    d3.select(this)

+                      .transition().duration(500).attr("r", r*3)

+                      .transition().duration(500).attr("r", r)

+                  

+create_manhattan_plot()

+

+$("#export").click =>

+    #Get d3 SVG element

+    svg = $("#topchart").find("svg")[0]

+    

+    #Extract SVG text string

+    svg_xml = (new XMLSerializer).serializeToString(svg)

+    console.log("svg_xml:", svg_xml)

+        

+    #Set filename

+    filename = "manhattan_plot_" + js_data.this_trait

+

+    #Make a form with the SVG data

+    form = $("#exportform")

+    form.find("#data").val(svg_xml)

+    form.find("#filename").val(filename)

+    form.submit()

+

diff --git a/wqflask/wqflask/static/new/javascript/create_manhattan_plot.js b/wqflask/wqflask/static/new/javascript/create_manhattan_plot.js
new file mode 100644
index 00000000..7daaa921
--- /dev/null
+++ b/wqflask/wqflask/static/new/javascript/create_manhattan_plot.js
@@ -0,0 +1,53 @@
+// Generated by CoffeeScript 1.7.1
+var create_manhattan_plot;
+
+create_manhattan_plot = function() {
+  var chrrect, data, h, halfh, margin, mychart, totalh, totalw, w;
+  h = 500;
+  w = 1200;
+  margin = {
+    left: 60,
+    top: 40,
+    right: 40,
+    bottom: 40,
+    inner: 5
+  };
+  halfh = h + margin.top + margin.bottom;
+  totalh = halfh * 2;
+  totalw = w + margin.left + margin.right;
+  mychart = lodchart().lodvarname("lod.hk").height(h).width(w).margin(margin);
+  data = js_data.json_data;
+  d3.select("div#topchart").datum(data).call(mychart);
+  chrrect = mychart.chrSelect();
+  chrrect.on("mouseover", function() {
+    return d3.select(this).attr("fill", "#E9CFEC");
+  }).on("mouseout", function(d, i) {
+    return d3.select(this).attr("fill", function() {
+      if (i % 2) {
+        return "#F1F1F9";
+      }
+      return "#FBFBFF";
+    });
+  });
+  return mychart.markerSelect().on("click", function(d) {
+    var r;
+    r = d3.select(this).attr("r");
+    return d3.select(this).transition().duration(500).attr("r", r * 3).transition().duration(500).attr("r", r);
+  });
+};
+
+create_manhattan_plot();
+
+$("#export").click((function(_this) {
+  return function() {
+    var filename, form, svg, svg_xml;
+    svg = $("#topchart").find("svg")[0];
+    svg_xml = (new XMLSerializer).serializeToString(svg);
+    console.log("svg_xml:", svg_xml);
+    filename = "manhattan_plot_" + js_data.this_trait;
+    form = $("#exportform");
+    form.find("#data").val(svg_xml);
+    form.find("#filename").val(filename);
+    return form.submit();
+  };
+})(this));
diff --git a/wqflask/wqflask/static/new/javascript/dataset_select_menu.js b/wqflask/wqflask/static/new/javascript/dataset_select_menu.js
index 3a2f044f..f4ca2c37 100755
--- a/wqflask/wqflask/static/new/javascript/dataset_select_menu.js
+++ b/wqflask/wqflask/static/new/javascript/dataset_select_menu.js
@@ -1,136 +1,137 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-
-  $(function() {
-    var apply_default, dataset_info, group_info, make_default, open_window, populate_dataset, populate_group, populate_species, populate_type, process_json, redo_dropdown,
-      _this = this;
-    process_json = function(data) {
-      window.jdata = data;
-      populate_species();
-      return apply_default();
-    };
-    $.ajax('/static/new/javascript/dataset_menu_structure.json', {
-      dataType: 'json',
-      success: process_json
-    });
-    populate_species = function() {
-      var species_list;
-      species_list = this.jdata.species;
-      redo_dropdown($('#species'), species_list);
+// Generated by CoffeeScript 1.7.1
+$(function() {
+  var apply_default, dataset_info, group_info, make_default, open_window, populate_dataset, populate_group, populate_species, populate_type, process_json, redo_dropdown;
+  process_json = function(data) {
+    window.jdata = data;
+    populate_species();
+    return apply_default();
+  };
+  $.ajax('/static/new/javascript/dataset_menu_structure.json', {
+    dataType: 'json',
+    success: process_json
+  });
+  populate_species = function() {
+    var species_list;
+    species_list = this.jdata.species;
+    redo_dropdown($('#species'), species_list);
+    return populate_group();
+  };
+  window.populate_species = populate_species;
+  populate_group = function() {
+    var group_list, species;
+    console.log("in populate group");
+    species = $('#species').val();
+    group_list = this.jdata.groups[species];
+    redo_dropdown($('#group'), group_list);
+    return populate_type();
+  };
+  window.populate_group = populate_group;
+  populate_type = function() {
+    var group, species, type_list;
+    species = $('#species').val();
+    group = $('#group').val();
+    type_list = this.jdata.types[species][group];
+    redo_dropdown($('#type'), type_list);
+    return populate_dataset();
+  };
+  window.populate_type = populate_type;
+  populate_dataset = function() {
+    var dataset_list, group, species, type;
+    species = $('#species').val();
+    group = $('#group').val();
+    type = $('#type').val();
+    console.log("sgt:", species, group, type);
+    dataset_list = this.jdata.datasets[species][group][type];
+    console.log("pop_dataset:", dataset_list);
+    return redo_dropdown($('#dataset'), dataset_list);
+  };
+  window.populate_dataset = populate_dataset;
+  redo_dropdown = function(dropdown, items) {
+    var item, _i, _len, _results;
+    console.log("in redo:", dropdown, items);
+    dropdown.empty();
+    _results = [];
+    for (_i = 0, _len = items.length; _i < _len; _i++) {
+      item = items[_i];
+      _results.push(dropdown.append($("<option />").val(item[0]).text(item[1])));
+    }
+    return _results;
+  };
+  $('#species').change((function(_this) {
+    return function() {
       return populate_group();
     };
-    window.populate_species = populate_species;
-    populate_group = function() {
-      var group_list, species;
-      console.log("in populate group");
-      species = $('#species').val();
-      group_list = this.jdata.groups[species];
-      redo_dropdown($('#group'), group_list);
+  })(this));
+  $('#group').change((function(_this) {
+    return function() {
       return populate_type();
     };
-    window.populate_group = populate_group;
-    populate_type = function() {
-      var group, species, type_list;
-      species = $('#species').val();
-      group = $('#group').val();
-      type_list = this.jdata.types[species][group];
-      redo_dropdown($('#type'), type_list);
+  })(this));
+  $('#type').change((function(_this) {
+    return function() {
       return populate_dataset();
     };
-    window.populate_type = populate_type;
-    populate_dataset = function() {
-      var dataset_list, group, species, type;
-      species = $('#species').val();
-      group = $('#group').val();
-      type = $('#type').val();
-      console.log("sgt:", species, group, type);
-      dataset_list = this.jdata.datasets[species][group][type];
-      console.log("pop_dataset:", dataset_list);
-      return redo_dropdown($('#dataset'), dataset_list);
-    };
-    window.populate_dataset = populate_dataset;
-    redo_dropdown = function(dropdown, items) {
-      var item, _i, _len, _results;
-      console.log("in redo:", dropdown, items);
-      dropdown.empty();
-      _results = [];
-      for (_i = 0, _len = items.length; _i < _len; _i++) {
-        item = items[_i];
-        _results.push(dropdown.append($("<option />").val(item[0]).text(item[1])));
-      }
-      return _results;
-    };
-    $('#species').change(function() {
-      return populate_group();
+  })(this));
+  open_window = function(url, name) {
+    var options;
+    options = "menubar=1,toolbar=1,location=1,resizable=1,status=1,scrollbars=1,directories=1,width=900";
+    return open(url, name, options).focus();
+  };
+  group_info = function() {
+    var group, species, url;
+    species = $('#species').val();
+    group = $('#group').val();
+    url = "/" + species + "Cross.html#" + group;
+    return open_window(url, "Group Info");
+  };
+  $('#group_info').click(group_info);
+  dataset_info = function() {
+    var dataset, url;
+    dataset = $('#dataset').val();
+    url = "/webqtl/main.py?FormID=sharinginfo&InfoPageName=" + dataset;
+    return open_window(url, "Dataset Info");
+  };
+  $('#dataset_info').click(dataset_info);
+  make_default = function() {
+    var holder, item, jholder, _i, _len, _ref;
+    holder = {};
+    _ref = ['species', 'group', 'type', 'dataset'];
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      item = _ref[_i];
+      holder[item] = $("#" + item).val();
+    }
+    jholder = JSON.stringify(holder);
+    return $.cookie('search_defaults', jholder, {
+      expires: 365
     });
-    $('#group').change(function() {
-      return populate_type();
-    });
-    $('#type').change(function() {
-      return populate_dataset();
-    });
-    open_window = function(url, name) {
-      var options;
-      options = "menubar=1,toolbar=1,location=1,resizable=1,status=1,scrollbars=1,directories=1,width=900";
-      return open(url, name, options).focus();
-    };
-    group_info = function() {
-      var group, species, url;
-      species = $('#species').val();
-      group = $('#group').val();
-      url = "/" + species + "Cross.html#" + group;
-      return open_window(url, "Group Info");
-    };
-    $('#group_info').click(group_info);
-    dataset_info = function() {
-      var dataset, url;
-      dataset = $('#dataset').val();
-      url = "/webqtl/main.py?FormID=sharinginfo&InfoPageName=" + dataset;
-      return open_window(url, "Dataset Info");
-    };
-    $('#dataset_info').click(dataset_info);
-    make_default = function() {
-      var holder, item, jholder, _i, _len, _ref;
-      holder = {};
-      _ref = ['species', 'group', 'type', 'dataset'];
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        item = _ref[_i];
-        holder[item] = $("#" + item).val();
-      }
-      jholder = JSON.stringify(holder);
-      return $.cookie('search_defaults', jholder, {
-        expires: 365
-      });
-    };
-    apply_default = function() {
-      var defaults, item, populate_function, _i, _len, _ref, _results;
-      defaults = $.cookie('search_defaults');
-      if (defaults) {
-        defaults = $.parseJSON(defaults);
+  };
+  apply_default = function() {
+    var defaults, item, populate_function, _i, _len, _ref, _results;
+    defaults = $.cookie('search_defaults');
+    if (defaults) {
+      defaults = $.parseJSON(defaults);
+    } else {
+      defaults = {
+        species: "mouse",
+        group: "BXD",
+        type: "Hippocampus mRNA",
+        dataset: "HC_M2_0606_P"
+      };
+    }
+    _ref = [['species', 'group'], ['group', 'type'], ['type', 'dataset'], ['dataset', null]];
+    _results = [];
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      item = _ref[_i];
+      $("#" + item[0]).val(defaults[item[0]]);
+      if (item[1]) {
+        populate_function = "populate_" + item[1];
+        console.log("Calling:", populate_function);
+        _results.push(window[populate_function]());
       } else {
-        defaults = {
-          species: "mouse",
-          group: "BXD",
-          type: "Hippocampus mRNA",
-          dataset: "HC_M2_0606_P"
-        };
-      }
-      _ref = [['species', 'group'], ['group', 'type'], ['type', 'dataset'], ['dataset', null]];
-      _results = [];
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        item = _ref[_i];
-        $("#" + item[0]).val(defaults[item[0]]);
-        if (item[1]) {
-          populate_function = "populate_" + item[1];
-          console.log("Calling:", populate_function);
-          _results.push(window[populate_function]());
-        } else {
-          _results.push(void 0);
-        }
+        _results.push(void 0);
       }
-      return _results;
-    };
-    return $("#make_default").click(make_default);
-  });
-
-}).call(this);
+    }
+    return _results;
+  };
+  return $("#make_default").click(make_default);
+});
diff --git a/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js b/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js
index 396f4bbe..10cefcd7 100644
--- a/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js
+++ b/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js
@@ -1,50 +1,47 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var data, h, halfh, halfw, indID, intercept, margin, mychart, slope, totalh, totalw, w;
+// Generated by CoffeeScript 1.7.1
+var data, h, halfh, halfw, indID, intercept, margin, mychart, slope, totalh, totalw, w;
 
-  h = 400;
+h = 400;
 
-  w = 500;
+w = 500;
 
-  margin = {
-    left: 60,
-    top: 40,
-    right: 40,
-    bottom: 40,
-    inner: 5
-  };
+margin = {
+  left: 60,
+  top: 40,
+  right: 40,
+  bottom: 40,
+  inner: 5
+};
 
-  halfh = h + margin.top + margin.bottom;
+halfh = h + margin.top + margin.bottom;
 
-  totalh = halfh * 2;
+totalh = halfh * 2;
 
-  halfw = w + margin.left + margin.right;
+halfw = w + margin.left + margin.right;
 
-  totalw = halfw * 2;
+totalw = halfw * 2;
 
-  mychart = scatterplot().xvar(0).yvar(1).xlab(js_data.trait_1).ylab(js_data.trait_2).height(h).width(w).margin(margin);
+mychart = scatterplot().xvar(0).yvar(1).xlab(js_data.trait_1).ylab(js_data.trait_2).height(h).width(w).margin(margin);
 
-  data = js_data.data;
+data = js_data.data;
 
-  indID = js_data.indIDs;
+indID = js_data.indIDs;
 
-  slope = js_data.slope;
+slope = js_data.slope;
 
-  intercept = js_data.intercept;
+intercept = js_data.intercept;
 
-  console.log("THE DATA IS:", data);
+console.log("THE DATA IS:", data);
 
-  d3.select("div#chart1").datum({
-    data: data,
-    indID: indID,
-    slope: slope,
-    intercept: intercept
-  }).call(mychart);
+d3.select("div#chart1").datum({
+  data: data,
+  indID: indID,
+  slope: slope,
+  intercept: intercept
+}).call(mychart);
 
-  mychart.pointsSelect().on("mouseover", function(d) {
-    return d3.select(this).attr("r", mychart.pointsize() * 3);
-  }).on("mouseout", function(d) {
-    return d3.select(this).attr("r", mychart.pointsize());
-  });
-
-}).call(this);
+mychart.pointsSelect().on("mouseover", function(d) {
+  return d3.select(this).attr("r", mychart.pointsize() * 3);
+}).on("mouseout", function(d) {
+  return d3.select(this).attr("r", mychart.pointsize());
+});
diff --git a/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js b/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js
index df3eacf3..402d62f4 100755
--- a/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js
+++ b/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js
@@ -1,195 +1,192 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var add_trait_data, assemble_into_json, back_to_collections, collection_click, collection_list, color_by_trait, get_this_trait_vals, get_trait_data, process_traits, selected_traits, submit_click, this_trait_data, trait_click,
-    __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; };
+// Generated by CoffeeScript 1.7.1
+var add_trait_data, assemble_into_json, back_to_collections, collection_click, collection_list, color_by_trait, get_this_trait_vals, get_trait_data, process_traits, selected_traits, submit_click, this_trait_data, trait_click,
+  __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; };
 
-  console.log("before get_traits_from_collection");
+console.log("before get_traits_from_collection");
 
-  collection_list = null;
+collection_list = null;
 
-  this_trait_data = null;
+this_trait_data = null;
 
-  selected_traits = {};
-
-  collection_click = function() {
-    var this_collection_url;
-    console.log("Clicking on:", $(this));
-    this_collection_url = $(this).find('.collection_name').prop("href");
-    this_collection_url += "&json";
-    console.log("this_collection_url", this_collection_url);
-    collection_list = $("#collections_holder").html();
-    return $.ajax({
-      dataType: "json",
-      url: this_collection_url,
-      success: process_traits
-    });
-  };
+selected_traits = {};
 
-  submit_click = function() {
-    var all_vals, sample, samples, this_trait_vals, trait, trait_names, traits, _i, _j, _len, _len1, _ref;
-    selected_traits = {};
-    traits = [];
-    $('#collections_holder').find('input[type=checkbox]:checked').each(function() {
-      var this_dataset, this_trait, this_trait_url;
-      this_trait = $(this).parents('tr').find('.trait').text();
-      console.log("this_trait is:", this_trait);
-      this_dataset = $(this).parents('tr').find('.dataset').text();
-      console.log("this_dataset is:", this_dataset);
-      this_trait_url = "/trait/get_sample_data?trait=" + this_trait + "&dataset=" + this_dataset;
-      return $.ajax({
-        dataType: "json",
-        url: this_trait_url,
-        async: false,
-        success: add_trait_data
-      });
-    });
-    console.log("SELECTED_TRAITS IS:", selected_traits);
-    trait_names = [];
-    samples = $('input[name=allsamples]').val().split(" ");
-    all_vals = [];
-    this_trait_vals = get_this_trait_vals(samples);
-    all_vals.push(this_trait_vals);
-    _ref = Object.keys(selected_traits);
-    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-      trait = _ref[_i];
-      trait_names.push(trait);
-      this_trait_vals = [];
-      for (_j = 0, _len1 = samples.length; _j < _len1; _j++) {
-        sample = samples[_j];
-        if (__indexOf.call(Object.keys(selected_traits[trait]), sample) >= 0) {
-          this_trait_vals.push(parseFloat(selected_traits[trait][sample]));
-        } else {
-          this_trait_vals.push(null);
-        }
-      }
-      all_vals.push(this_trait_vals);
-    }
-    create_scatterplots(trait_names, samples, all_vals);
-    return $.colorbox.close();
-  };
+collection_click = function() {
+  var this_collection_url;
+  console.log("Clicking on:", $(this));
+  this_collection_url = $(this).find('.collection_name').prop("href");
+  this_collection_url += "&json";
+  console.log("this_collection_url", this_collection_url);
+  collection_list = $("#collections_holder").html();
+  return $.ajax({
+    dataType: "json",
+    url: this_collection_url,
+    success: process_traits
+  });
+};
 
-  trait_click = function() {
-    var dataset, this_trait_url, trait;
-    console.log("Clicking on:", $(this));
-    trait = $(this).parent().find('.trait').text();
-    dataset = $(this).parent().find('.dataset').text();
-    this_trait_url = "/trait/get_sample_data?trait=" + trait + "&dataset=" + dataset;
-    console.log("this_trait_url", this_trait_url);
+submit_click = function() {
+  var all_vals, sample, samples, this_trait_vals, trait, trait_names, traits, _i, _j, _len, _len1, _ref;
+  selected_traits = {};
+  traits = [];
+  $('#collections_holder').find('input[type=checkbox]:checked').each(function() {
+    var this_dataset, this_trait, this_trait_url;
+    this_trait = $(this).parents('tr').find('.trait').text();
+    console.log("this_trait is:", this_trait);
+    this_dataset = $(this).parents('tr').find('.dataset').text();
+    console.log("this_dataset is:", this_dataset);
+    this_trait_url = "/trait/get_sample_data?trait=" + this_trait + "&dataset=" + this_dataset;
     return $.ajax({
       dataType: "json",
       url: this_trait_url,
-      success: get_trait_data
+      async: false,
+      success: add_trait_data
     });
-  };
-
-  $.colorbox.close();
-
-  add_trait_data = function(trait_data, textStatus, jqXHR) {
-    var trait_name, trait_sample_data;
-    trait_name = trait_data[0];
-    trait_sample_data = trait_data[1];
-    selected_traits[trait_name] = trait_sample_data;
-    return console.log("selected_traits:", selected_traits);
-  };
-
-  get_trait_data = function(trait_data, textStatus, jqXHR) {
-    var sample, samples, this_trait_vals, trait_sample_data, vals, _i, _len;
-    console.log("trait:", trait_data[0]);
-    trait_sample_data = trait_data[1];
-    console.log("trait_sample_data:", trait_sample_data);
-    samples = $('input[name=allsamples]').val().split(" ");
-    vals = [];
-    for (_i = 0, _len = samples.length; _i < _len; _i++) {
-      sample = samples[_i];
-      if (__indexOf.call(Object.keys(trait_sample_data), sample) >= 0) {
-        vals.push(parseFloat(trait_sample_data[sample]));
-      } else {
-        vals.push(null);
-      }
-    }
-    if ($('input[name=samples]').length < 1) {
-      $('#hidden_inputs').append('<input type="hidden" name="samples" value="[' + samples.toString() + ']" />');
-    }
-    $('#hidden_inputs').append('<input type="hidden" name="vals" value="[' + vals.toString() + ']" />');
-    this_trait_vals = get_this_trait_vals(samples);
-    console.log("THE LENGTH IS:", $('input[name=vals]').length);
-    if ($('input[name=vals]').length === 1) {
-      return create_scatterplot(samples, [this_trait_vals, vals]);
-    }
-  };
-
-  get_this_trait_vals = function(samples) {
-    var sample, this_trait_vals, this_val, this_vals_json, _i, _len;
+  });
+  console.log("SELECTED_TRAITS IS:", selected_traits);
+  trait_names = [];
+  samples = $('input[name=allsamples]').val().split(" ");
+  all_vals = [];
+  this_trait_vals = get_this_trait_vals(samples);
+  all_vals.push(this_trait_vals);
+  _ref = Object.keys(selected_traits);
+  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+    trait = _ref[_i];
+    trait_names.push(trait);
     this_trait_vals = [];
-    for (_i = 0, _len = samples.length; _i < _len; _i++) {
-      sample = samples[_i];
-      this_val = parseFloat($("input[name='value:" + sample + "']").val());
-      if (!isNaN(this_val)) {
-        this_trait_vals.push(this_val);
+    for (_j = 0, _len1 = samples.length; _j < _len1; _j++) {
+      sample = samples[_j];
+      if (__indexOf.call(Object.keys(selected_traits[trait]), sample) >= 0) {
+        this_trait_vals.push(parseFloat(selected_traits[trait][sample]));
       } else {
         this_trait_vals.push(null);
       }
     }
-    console.log("this_trait_vals:", this_trait_vals);
-    this_vals_json = '[' + this_trait_vals.toString() + ']';
-    return this_trait_vals;
-  };
-
-  assemble_into_json = function(this_trait_vals) {
-    var json_data, json_ids, num_traits, samples,
-      _this = this;
-    num_traits = $('input[name=vals]').length;
-    samples = $('input[name=samples]').val();
-    json_ids = samples;
-    json_data = '[' + this_trait_vals;
-    $('input[name=vals]').each(function(index, element) {
-      return json_data += ',' + $(element).val();
-    });
-    json_data += ']';
-    return [json_ids, json_data];
-  };
-
-  color_by_trait = function(trait_sample_data, textStatus, jqXHR) {
-    return root.bar_chart.color_by_trait(trait_sample_data);
-  };
-
-  process_traits = function(trait_data, textStatus, jqXHR) {
-    var the_html, trait, _i, _len;
-    console.log('in process_traits with trait_data:', trait_data);
-    the_html = "<button id='back_to_collections' class='btn btn-inverse btn-small'>";
-    the_html += "<i class='icon-white icon-arrow-left'></i> Back </button>";
-    the_html += "    <button id='submit' class='btn btn-primary btn-small'> Submit </button>";
-    the_html += "<table class='table table-hover'>";
-    the_html += "<thead><tr><th></th><th>Record</th><th>Data Set</th><th>Description</th><th>Mean</th></tr></thead>";
-    the_html += "<tbody>";
-    for (_i = 0, _len = trait_data.length; _i < _len; _i++) {
-      trait = trait_data[_i];
-      the_html += "<tr class='trait_line'>";
-      the_html += "<td class='select_trait'><input type='checkbox' name='selectCheck' class='checkbox edit_sample_checkbox'></td>";
-      the_html += "<td class='trait'>" + trait.name + "</td>";
-      the_html += "<td class='dataset'>" + trait.dataset + "</td>";
-      the_html += "<td>" + trait.description + "</td>";
-      the_html += "<td>" + (trait.mean || '&nbsp;') + "</td></tr>";
-    }
-    the_html += "</tbody>";
-    the_html += "</table>";
-    $("#collections_holder").html(the_html);
-    return $('#collections_holder').colorbox.resize();
-  };
-
-  back_to_collections = function() {
-    console.log("collection_list:", collection_list);
-    $("#collections_holder").html(collection_list);
-    $(document).on("click", ".collection_line", collection_click);
-    return $('#collections_holder').colorbox.resize();
-  };
-
-  $(function() {
-    console.log("inside get_traits_from_collection");
-    $(document).on("click", ".collection_line", collection_click);
-    $(document).on("click", "#submit", submit_click);
-    $(document).on("click", ".trait", trait_click);
-    return $(document).on("click", "#back_to_collections", back_to_collections);
+    all_vals.push(this_trait_vals);
+  }
+  create_scatterplots(trait_names, samples, all_vals);
+  return $.colorbox.close();
+};
+
+trait_click = function() {
+  var dataset, this_trait_url, trait;
+  console.log("Clicking on:", $(this));
+  trait = $(this).parent().find('.trait').text();
+  dataset = $(this).parent().find('.dataset').text();
+  this_trait_url = "/trait/get_sample_data?trait=" + trait + "&dataset=" + dataset;
+  console.log("this_trait_url", this_trait_url);
+  $.ajax({
+    dataType: "json",
+    url: this_trait_url,
+    success: get_trait_data
   });
-
-}).call(this);
+  return $.colorbox.close();
+};
+
+add_trait_data = function(trait_data, textStatus, jqXHR) {
+  var trait_name, trait_sample_data;
+  trait_name = trait_data[0];
+  trait_sample_data = trait_data[1];
+  selected_traits[trait_name] = trait_sample_data;
+  return console.log("selected_traits:", selected_traits);
+};
+
+get_trait_data = function(trait_data, textStatus, jqXHR) {
+  var sample, samples, this_trait_vals, trait_sample_data, vals, _i, _len;
+  console.log("trait:", trait_data[0]);
+  trait_sample_data = trait_data[1];
+  console.log("trait_sample_data:", trait_sample_data);
+  samples = $('input[name=allsamples]').val().split(" ");
+  vals = [];
+  for (_i = 0, _len = samples.length; _i < _len; _i++) {
+    sample = samples[_i];
+    if (__indexOf.call(Object.keys(trait_sample_data), sample) >= 0) {
+      vals.push(parseFloat(trait_sample_data[sample]));
+    } else {
+      vals.push(null);
+    }
+  }
+  if ($('input[name=samples]').length < 1) {
+    $('#hidden_inputs').append('<input type="hidden" name="samples" value="[' + samples.toString() + ']" />');
+  }
+  $('#hidden_inputs').append('<input type="hidden" name="vals" value="[' + vals.toString() + ']" />');
+  this_trait_vals = get_this_trait_vals(samples);
+  console.log("THE LENGTH IS:", $('input[name=vals]').length);
+  if ($('input[name=vals]').length === 1) {
+    return create_scatterplot(samples, [this_trait_vals, vals]);
+  }
+};
+
+get_this_trait_vals = function(samples) {
+  var sample, this_trait_vals, this_val, this_vals_json, _i, _len;
+  this_trait_vals = [];
+  for (_i = 0, _len = samples.length; _i < _len; _i++) {
+    sample = samples[_i];
+    this_val = parseFloat($("input[name='value:" + sample + "']").val());
+    if (!isNaN(this_val)) {
+      this_trait_vals.push(this_val);
+    } else {
+      this_trait_vals.push(null);
+    }
+  }
+  console.log("this_trait_vals:", this_trait_vals);
+  this_vals_json = '[' + this_trait_vals.toString() + ']';
+  return this_trait_vals;
+};
+
+assemble_into_json = function(this_trait_vals) {
+  var json_data, json_ids, num_traits, samples;
+  num_traits = $('input[name=vals]').length;
+  samples = $('input[name=samples]').val();
+  json_ids = samples;
+  json_data = '[' + this_trait_vals;
+  $('input[name=vals]').each((function(_this) {
+    return function(index, element) {
+      return json_data += ',' + $(element).val();
+    };
+  })(this));
+  json_data += ']';
+  return [json_ids, json_data];
+};
+
+color_by_trait = function(trait_sample_data, textStatus, jqXHR) {
+  return root.bar_chart.color_by_trait(trait_sample_data);
+};
+
+process_traits = function(trait_data, textStatus, jqXHR) {
+  var the_html, trait, _i, _len;
+  console.log('in process_traits with trait_data:', trait_data);
+  the_html = "<button id='back_to_collections' class='btn btn-inverse btn-small'>";
+  the_html += "<i class='icon-white icon-arrow-left'></i> Back </button>";
+  the_html += "    <button id='submit' class='btn btn-primary btn-small'> Submit </button>";
+  the_html += "<table class='table table-hover'>";
+  the_html += "<thead><tr><th></th><th>Record</th><th>Data Set</th><th>Description</th><th>Mean</th></tr></thead>";
+  the_html += "<tbody>";
+  for (_i = 0, _len = trait_data.length; _i < _len; _i++) {
+    trait = trait_data[_i];
+    the_html += "<tr class='trait_line'>";
+    the_html += "<td class='select_trait'><input type='checkbox' name='selectCheck' class='checkbox edit_sample_checkbox'></td>";
+    the_html += "<td class='trait'>" + trait.name + "</td>";
+    the_html += "<td class='dataset'>" + trait.dataset + "</td>";
+    the_html += "<td>" + trait.description + "</td>";
+    the_html += "<td>" + (trait.mean || '&nbsp;') + "</td></tr>";
+  }
+  the_html += "</tbody>";
+  the_html += "</table>";
+  $("#collections_holder").html(the_html);
+  return $('#collections_holder').colorbox.resize();
+};
+
+back_to_collections = function() {
+  console.log("collection_list:", collection_list);
+  $("#collections_holder").html(collection_list);
+  $(document).on("click", ".collection_line", collection_click);
+  return $('#collections_holder').colorbox.resize();
+};
+
+$(function() {
+  console.log("inside get_traits_from_collection");
+  $(document).on("click", ".collection_line", collection_click);
+  $(document).on("click", "#submit", submit_click);
+  $(document).on("click", ".trait", trait_click);
+  return $(document).on("click", "#back_to_collections", back_to_collections);
+});
diff --git a/wqflask/wqflask/static/new/javascript/histogram.js b/wqflask/wqflask/static/new/javascript/histogram.js
index d8067ced..207a00c4 100755
--- a/wqflask/wqflask/static/new/javascript/histogram.js
+++ b/wqflask/wqflask/static/new/javascript/histogram.js
@@ -1,122 +1,124 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var Histogram, root;
-
-  root = typeof exports !== "undefined" && exports !== null ? exports : this;
-
-  Histogram = (function() {
-
-    function Histogram(sample_list, sample_group) {
-      this.sample_list = sample_list;
-      this.sample_group = sample_group;
-      this.sort_by = "name";
-      this.format_count = d3.format(",.0f");
-      this.get_sample_vals();
-      this.margin = {
-        top: 10,
-        right: 30,
-        bottom: 30,
-        left: 30
-      };
-      this.plot_width = 960 - this.margin.left - this.margin.right;
-      this.plot_height = 500 - this.margin.top - this.margin.bottom;
-      this.x_buffer = this.plot_width / 20;
-      this.y_buffer = this.plot_height / 20;
-      this.y_min = d3.min(this.sample_vals);
-      this.y_max = d3.max(this.sample_vals) * 1.1;
-      this.plot_height -= this.y_buffer;
-      this.create_x_scale();
-      this.get_histogram_data();
-      this.create_y_scale();
-      this.svg = this.create_svg();
-      this.create_graph();
-    }
-
-    Histogram.prototype.get_sample_vals = function() {
-      var sample;
-      return this.sample_vals = (function() {
-        var _i, _len, _ref, _results;
-        _ref = this.sample_list;
-        _results = [];
-        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-          sample = _ref[_i];
-          if (sample.value !== null) {
-            _results.push(sample.value);
-          }
-        }
-        return _results;
-      }).call(this);
-    };
-
-    Histogram.prototype.create_svg = function() {
-      var svg;
-      svg = d3.select("#histogram").append("svg").attr("class", "histogram").attr("width", this.plot_width + this.margin.left + this.margin.right).attr("height", this.plot_height + this.margin.top + this.margin.bottom).append("g").attr("transform", "translate(" + this.margin.left + "," + this.margin.top + ")");
-      return svg;
-    };
-
-    Histogram.prototype.create_x_scale = function() {
-      var x0;
-      console.log("min/max:", d3.min(this.sample_vals) + "," + d3.max(this.sample_vals));
-      x0 = Math.max(-d3.min(this.sample_vals), d3.max(this.sample_vals));
-      return this.x_scale = d3.scale.linear().domain([d3.min(this.sample_vals), d3.max(this.sample_vals)]).range([0, this.plot_width]).nice();
+// Generated by CoffeeScript 1.7.1
+var Histogram, root;
+
+root = typeof exports !== "undefined" && exports !== null ? exports : this;
+
+Histogram = (function() {
+  function Histogram(sample_list, sample_group) {
+    this.sample_list = sample_list;
+    this.sample_group = sample_group;
+    this.sort_by = "name";
+    this.format_count = d3.format(",.0f");
+    this.get_sample_vals();
+    this.margin = {
+      top: 10,
+      right: 30,
+      bottom: 30,
+      left: 30
     };
-
-    Histogram.prototype.get_histogram_data = function() {
-      console.log("sample_vals:", this.sample_vals);
-      this.histogram_data = d3.layout.histogram().bins(this.x_scale.ticks(20))(this.sample_vals);
-      return console.log("histogram_data:", this.histogram_data[0]);
-    };
-
-    Histogram.prototype.create_y_scale = function() {
-      var _this = this;
-      return this.y_scale = d3.scale.linear().domain([
-        0, d3.max(this.histogram_data, function(d) {
+    this.plot_width = 960 - this.margin.left - this.margin.right;
+    this.plot_height = 500 - this.margin.top - this.margin.bottom;
+    this.x_buffer = this.plot_width / 20;
+    this.y_buffer = this.plot_height / 20;
+    this.y_min = d3.min(this.sample_vals);
+    this.y_max = d3.max(this.sample_vals) * 1.1;
+    this.plot_height -= this.y_buffer;
+    this.create_x_scale();
+    this.get_histogram_data();
+    this.create_y_scale();
+    this.svg = this.create_svg();
+    this.create_graph();
+  }
+
+  Histogram.prototype.get_sample_vals = function() {
+    var sample;
+    return this.sample_vals = (function() {
+      var _i, _len, _ref, _results;
+      _ref = this.sample_list;
+      _results = [];
+      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+        sample = _ref[_i];
+        if (sample.value !== null) {
+          _results.push(sample.value);
+        }
+      }
+      return _results;
+    }).call(this);
+  };
+
+  Histogram.prototype.create_svg = function() {
+    var svg;
+    svg = d3.select("#histogram").append("svg").attr("class", "histogram").attr("width", this.plot_width + this.margin.left + this.margin.right).attr("height", this.plot_height + this.margin.top + this.margin.bottom).append("g").attr("transform", "translate(" + this.margin.left + "," + this.margin.top + ")");
+    return svg;
+  };
+
+  Histogram.prototype.create_x_scale = function() {
+    var x0;
+    console.log("min/max:", d3.min(this.sample_vals) + "," + d3.max(this.sample_vals));
+    x0 = Math.max(-d3.min(this.sample_vals), d3.max(this.sample_vals));
+    return this.x_scale = d3.scale.linear().domain([d3.min(this.sample_vals), d3.max(this.sample_vals)]).range([0, this.plot_width]).nice();
+  };
+
+  Histogram.prototype.get_histogram_data = function() {
+    console.log("sample_vals:", this.sample_vals);
+    this.histogram_data = d3.layout.histogram().bins(this.x_scale.ticks(20))(this.sample_vals);
+    return console.log("histogram_data:", this.histogram_data[0]);
+  };
+
+  Histogram.prototype.create_y_scale = function() {
+    return this.y_scale = d3.scale.linear().domain([
+      0, d3.max(this.histogram_data, (function(_this) {
+        return function(d) {
           return d.y;
-        })
-      ]).range([this.plot_height, 0]);
-    };
-
-    Histogram.prototype.create_graph = function() {
-      this.add_x_axis();
-      this.add_y_axis();
-      return this.add_bars();
-    };
-
-    Histogram.prototype.add_x_axis = function() {
-      var x_axis;
-      x_axis = d3.svg.axis().scale(this.x_scale).orient("bottom");
-      return this.svg.append("g").attr("class", "x axis").attr("transform", "translate(0," + this.plot_height + ")").call(x_axis);
-    };
-
-    Histogram.prototype.add_y_axis = function() {
-      var yAxis;
-      yAxis = d3.svg.axis().scale(this.y_scale).orient("left").ticks(5);
-      return this.svg.append("g").attr("class", "y axis").call(yAxis).append("text").attr("transform", "rotate(-90)").attr("y", 6).attr("dy", ".71em").style("text-anchor", "end");
-    };
-
-    Histogram.prototype.add_bars = function() {
-      var bar,
-        _this = this;
-      console.log("bar_width:", this.x_scale(this.histogram_data[0].dx));
-      bar = this.svg.selectAll(".bar").data(this.histogram_data).enter().append("g").attr("class", "bar").attr("transform", function(d) {
+        };
+      })(this))
+    ]).range([this.plot_height, 0]);
+  };
+
+  Histogram.prototype.create_graph = function() {
+    this.add_x_axis();
+    this.add_y_axis();
+    return this.add_bars();
+  };
+
+  Histogram.prototype.add_x_axis = function() {
+    var x_axis;
+    x_axis = d3.svg.axis().scale(this.x_scale).orient("bottom");
+    return this.svg.append("g").attr("class", "x axis").attr("transform", "translate(0," + this.plot_height + ")").call(x_axis);
+  };
+
+  Histogram.prototype.add_y_axis = function() {
+    var yAxis;
+    yAxis = d3.svg.axis().scale(this.y_scale).orient("left").ticks(5);
+    return this.svg.append("g").attr("class", "y axis").call(yAxis).append("text").attr("transform", "rotate(-90)").attr("y", 6).attr("dy", ".71em").style("text-anchor", "end");
+  };
+
+  Histogram.prototype.add_bars = function() {
+    var bar;
+    console.log("bar_width:", this.x_scale(this.histogram_data[0].dx));
+    bar = this.svg.selectAll(".bar").data(this.histogram_data).enter().append("g").attr("class", "bar").attr("transform", (function(_this) {
+      return function(d) {
         return "translate(" + _this.x_scale(d.x) + "," + _this.y_scale(d.y) + ")";
-      });
-      bar.append("rect").attr("x", 1).attr("width", this.x_scale(this.histogram_data[0].x + this.histogram_data[0].dx) - 1).attr("height", function(d) {
+      };
+    })(this));
+    bar.append("rect").attr("x", 1).attr("width", this.x_scale(this.histogram_data[0].x + this.histogram_data[0].dx) - 1).attr("height", (function(_this) {
+      return function(d) {
         return _this.plot_height - _this.y_scale(d.y);
-      });
-      return bar.append("text").attr("dy", ".75em").attr("y", 6).attr("x", this.x_scale(this.histogram_data[0].dx) / 2).attr("text-anchor", "middle").style("fill", "#fff").text(function(d) {
+      };
+    })(this));
+    return bar.append("text").attr("dy", ".75em").attr("y", 6).attr("x", this.x_scale(this.histogram_data[0].dx) / 2).attr("text-anchor", "middle").style("fill", "#fff").text((function(_this) {
+      return function(d) {
         var bar_height;
         bar_height = _this.plot_height - _this.y_scale(d.y);
         if (bar_height > 20) {
           return _this.format_count(d.y);
         }
-      });
-    };
-
-    return Histogram;
+      };
+    })(this));
+  };
 
-  })();
+  return Histogram;
 
-  root.Histogram = Histogram;
+})();
 
-}).call(this);
+root.Histogram = Histogram;
diff --git a/wqflask/wqflask/static/new/javascript/interval_map_new.coffee b/wqflask/wqflask/static/new/javascript/interval_map_new.coffee
index 898df6d1..d60b900d 100644
--- a/wqflask/wqflask/static/new/javascript/interval_map_new.coffee
+++ b/wqflask/wqflask/static/new/javascript/interval_map_new.coffee
@@ -1,39 +1,59 @@
-h = 500

-w = 1200

-margin = {left:60, top:40, right:40, bottom: 40, inner:5}

-halfh = (h+margin.top+margin.bottom)

-totalh = halfh*2

-totalw = (w+margin.left+margin.right)

+create_interval_map = ->

+    h = 500

+    w = 1200

+    margin = {left:60, top:40, right:40, bottom: 40, inner:5}

+    halfh = (h+margin.top+margin.bottom)

+    totalh = halfh*2

+    totalw = (w+margin.left+margin.right)

+    

+    # simplest use

+    #d3.json "data.json", (data) ->

+    mychart = lodchart().lodvarname("lod.hk")

+                        .height(h)

+                        .width(w)

+                        .margin(margin)

+    

+    data = js_data.json_data

+    

+    d3.select("div#topchart")

+      .datum(data)

+      .call(mychart)

+    

+    # grab chromosome rectangles; color pink on hover

+    chrrect = mychart.chrSelect()

+    chrrect.on "mouseover", ->

+                d3.select(this).attr("fill", "#E9CFEC")

+           .on "mouseout", (d,i) ->

+                d3.select(this).attr("fill", ->

+                      return "#F1F1F9"  if i % 2

+                      "#FBFBFF")

+    

+    # animate points at markers on click

+    mychart.markerSelect()

+              .on "click", (d) ->

+                    r = d3.select(this).attr("r")

+                    d3.select(this)

+                      .transition().duration(500).attr("r", r*3)

+                      .transition().duration(500).attr("r", r)

 

-# simplest use

-#d3.json "data.json", (data) ->

-mychart = lodchart().lodvarname("lod.hk")

-                    .height(h)

-                    .width(w)

-                    .margin(margin)

-

-data = js_data.json_data

-

-d3.select("div#topchart")

-  .datum(data)

-  .call(mychart)

+create_interval_map()

 

-# grab chromosome rectangles; color pink on hover

-chrrect = mychart.chrSelect()

-chrrect.on "mouseover", ->

-            d3.select(this).attr("fill", "#E9CFEC")

-       .on "mouseout", (d,i) ->

-            d3.select(this).attr("fill", ->

-                  return "#F1F1F9"  if i % 2

-                  "#FBFBFF")

+$("#export").click =>

+    #Get d3 SVG element

+    svg = $("#topchart").find("svg")[0]

+    

+    #Extract SVG text string

+    svg_xml = (new XMLSerializer).serializeToString(svg)

+    console.log("svg_xml:", svg_xml)

+        

+    #Set filename

+    filename = "manhattan_plot_" + js_data.this_trait

 

-# animate points at markers on click

-mychart.markerSelect()

-          .on "click", (d) ->

-                r = d3.select(this).attr("r")

-                d3.select(this)

-                  .transition().duration(500).attr("r", r*3)

-                  .transition().duration(500).attr("r", r)

+    #Make a form with the SVG data

+    form = $("#exportform")

+    form.find("#data").val(svg_xml)

+    form.find("#filename").val(filename)

+    form.submit()

 

 # two LOD charts within one SVG

 #d3.json "data.json", (data) ->

diff --git a/wqflask/wqflask/static/new/javascript/interval_map_new.js b/wqflask/wqflask/static/new/javascript/interval_map_new.js
index 8861419c..6515ac0d 100644
--- a/wqflask/wqflask/static/new/javascript/interval_map_new.js
+++ b/wqflask/wqflask/static/new/javascript/interval_map_new.js
@@ -1,11 +1,10 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var chrrect, data, h, halfh, margin, mychart, totalh, totalw, w;
+// Generated by CoffeeScript 1.7.1
+var create_interval_map;
 
+create_interval_map = function() {
+  var chrrect, data, h, halfh, margin, mychart, totalh, totalw, w;
   h = 500;
-
   w = 1200;
-
   margin = {
     left: 60,
     top: 40,
@@ -13,21 +12,13 @@
     bottom: 40,
     inner: 5
   };
-
   halfh = h + margin.top + margin.bottom;
-
   totalh = halfh * 2;
-
   totalw = w + margin.left + margin.right;
-
   mychart = lodchart().lodvarname("lod.hk").height(h).width(w).margin(margin);
-
   data = js_data.json_data;
-
   d3.select("div#topchart").datum(data).call(mychart);
-
   chrrect = mychart.chrSelect();
-
   chrrect.on("mouseover", function() {
     return d3.select(this).attr("fill", "#E9CFEC");
   }).on("mouseout", function(d, i) {
@@ -38,11 +29,25 @@
       return "#FBFBFF";
     });
   });
-
-  mychart.markerSelect().on("click", function(d) {
+  return mychart.markerSelect().on("click", function(d) {
     var r;
     r = d3.select(this).attr("r");
     return d3.select(this).transition().duration(500).attr("r", r * 3).transition().duration(500).attr("r", r);
   });
-
-}).call(this);
+};
+
+create_interval_map();
+
+$("#export").click((function(_this) {
+  return function() {
+    var filename, form, svg, svg_xml;
+    svg = $("#topchart").find("svg")[0];
+    svg_xml = (new XMLSerializer).serializeToString(svg);
+    console.log("svg_xml:", svg_xml);
+    filename = "manhattan_plot_" + js_data.this_trait;
+    form = $("#exportform");
+    form.find("#data").val(svg_xml);
+    form.find("#filename").val(filename);
+    return form.submit();
+  };
+})(this));
diff --git a/wqflask/wqflask/static/new/javascript/interval_mapping.js b/wqflask/wqflask/static/new/javascript/interval_mapping.js
index 3a2ce6d7..3544f75c 100755
--- a/wqflask/wqflask/static/new/javascript/interval_mapping.js
+++ b/wqflask/wqflask/static/new/javascript/interval_mapping.js
@@ -1,178 +1,183 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var __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; };
+// Generated by CoffeeScript 1.7.1
+var __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; };
 
-  $(function() {
-    var Interval_Map;
-    Interval_Map = (function() {
+$(function() {
+  var Interval_Map;
+  Interval_Map = (function() {
+    function Interval_Map(plot_height, plot_width) {
+      var _ref;
+      this.plot_height = plot_height;
+      this.plot_width = plot_width;
+      this.qtl_results = js_data.qtl_results;
+      console.log("qtl_results are:", this.qtl_results);
+      this.chromosomes = js_data.chromosomes;
+      this.total_length = 0;
+      this.max_chr = this.get_max_chr();
+      this.x_coords = [];
+      this.y_coords = [];
+      this.marker_names = [];
+      console.time('Create coordinates');
+      this.create_coordinates();
+      console.log("@x_coords: ", this.x_coords);
+      console.log("@y_coords: ", this.y_coords);
+      console.timeEnd('Create coordinates');
+      _ref = this.get_chr_lengths(), this.chr_lengths = _ref[0], this.cumulative_chr_lengths = _ref[1];
+      this.x_buffer = this.plot_width / 30;
+      this.y_buffer = this.plot_height / 20;
+      this.x_max = this.total_length;
+      console.log("@x_max: ", this.x_max);
+      console.log("@x_buffer: ", this.x_buffer);
+      this.y_max = d3.max(this.y_coords) * 1.2;
+      this.svg = this.create_svg();
+      this.plot_coordinates = _.zip(this.x_coords, this.y_coords, this.marker_names);
+      this.plot_height -= this.y_buffer;
+      this.create_scales();
+      console.time('Create graph');
+      this.create_graph();
+      console.timeEnd('Create graph');
+    }
 
-      function Interval_Map(plot_height, plot_width) {
-        var _ref;
-        this.plot_height = plot_height;
-        this.plot_width = plot_width;
-        this.qtl_results = js_data.qtl_results;
-        console.log("qtl_results are:", this.qtl_results);
-        this.chromosomes = js_data.chromosomes;
-        this.total_length = 0;
-        this.max_chr = this.get_max_chr();
-        this.x_coords = [];
-        this.y_coords = [];
-        this.marker_names = [];
-        console.time('Create coordinates');
-        this.create_coordinates();
-        console.log("@x_coords: ", this.x_coords);
-        console.log("@y_coords: ", this.y_coords);
-        console.timeEnd('Create coordinates');
-        _ref = this.get_chr_lengths(), this.chr_lengths = _ref[0], this.cumulative_chr_lengths = _ref[1];
-        this.x_buffer = this.plot_width / 30;
-        this.y_buffer = this.plot_height / 20;
-        this.x_max = this.total_length;
-        console.log("@x_max: ", this.x_max);
-        console.log("@x_buffer: ", this.x_buffer);
-        this.y_max = d3.max(this.y_coords) * 1.2;
-        this.svg = this.create_svg();
-        this.plot_coordinates = _.zip(this.x_coords, this.y_coords, this.marker_names);
-        this.plot_height -= this.y_buffer;
-        this.create_scales();
-        console.time('Create graph');
-        this.create_graph();
-        console.timeEnd('Create graph');
-      }
-
-      Interval_Map.prototype.get_max_chr = function() {
-        var chr, max_chr, result, _i, _len, _ref;
-        max_chr = 0;
-        _ref = this.qtl_results;
-        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-          result = _ref[_i];
-          chr = parseInt(result.chr);
-          if (!_.isNaN(chr)) {
-            if (chr > max_chr) {
-              max_chr = chr;
-            }
+    Interval_Map.prototype.get_max_chr = function() {
+      var chr, max_chr, result, _i, _len, _ref;
+      max_chr = 0;
+      _ref = this.qtl_results;
+      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+        result = _ref[_i];
+        chr = parseInt(result.chr);
+        if (!_.isNaN(chr)) {
+          if (chr > max_chr) {
+            max_chr = chr;
           }
         }
-        return max_chr;
-      };
+      }
+      return max_chr;
+    };
 
-      Interval_Map.prototype.get_chr_lengths = function() {
-        /*
-        #Gets a list of both individual and cumulative (the position of one on the graph
-        #is its own length plus the lengths of all preceding chromosomes) lengths in order
-        #to draw the vertical lines separating chromosomes and the chromosome labels
-        #
-        */
+    Interval_Map.prototype.get_chr_lengths = function() {
 
-        var chr_lengths, cumulative_chr_lengths, key, this_length, total_length;
-        console.log("@chromosomes: ", this.chromosomes);
-        cumulative_chr_lengths = [];
-        chr_lengths = [];
-        total_length = 0;
-        for (key in this.chromosomes) {
-          this_length = this.chromosomes[key];
-          chr_lengths.push(this_length);
-          cumulative_chr_lengths.push(total_length + this_length);
-          total_length += this_length;
-        }
-        console.log("chr_lengths: ", chr_lengths);
-        return [chr_lengths, cumulative_chr_lengths];
-      };
+      /*
+       *Gets a list of both individual and cumulative (the position of one on the graph
+       *is its own length plus the lengths of all preceding chromosomes) lengths in order
+       *to draw the vertical lines separating chromosomes and the chromosome labels
+       *
+       */
+      var chr_lengths, cumulative_chr_lengths, key, this_length, total_length;
+      console.log("@chromosomes: ", this.chromosomes);
+      cumulative_chr_lengths = [];
+      chr_lengths = [];
+      total_length = 0;
+      for (key in this.chromosomes) {
+        this_length = this.chromosomes[key];
+        chr_lengths.push(this_length);
+        cumulative_chr_lengths.push(total_length + this_length);
+        total_length += this_length;
+      }
+      console.log("chr_lengths: ", chr_lengths);
+      return [chr_lengths, cumulative_chr_lengths];
+    };
 
-      Interval_Map.prototype.create_coordinates = function() {
-        var chr_length, chr_lengths, chr_seen, result, _i, _len, _ref, _ref1;
-        chr_lengths = [];
-        chr_seen = [];
-        _ref = js_data.qtl_results;
-        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-          result = _ref[_i];
-          if (result.chr === "X") {
-            chr_length = parseFloat(this.chromosomes[20]);
-          } else {
-            chr_length = parseFloat(this.chromosomes[result.chr]);
-          }
-          if (!(_ref1 = result.chr, __indexOf.call(chr_seen, _ref1) >= 0)) {
-            chr_seen.push(result.chr);
-            chr_lengths.push(chr_length);
-            if (result.chr !== "1") {
-              this.total_length += parseFloat(chr_lengths[chr_lengths.length - 2]);
-            }
+    Interval_Map.prototype.create_coordinates = function() {
+      var chr_length, chr_lengths, chr_seen, result, _i, _len, _ref, _ref1;
+      chr_lengths = [];
+      chr_seen = [];
+      _ref = js_data.qtl_results;
+      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+        result = _ref[_i];
+        if (result.chr === "X") {
+          chr_length = parseFloat(this.chromosomes[20]);
+        } else {
+          chr_length = parseFloat(this.chromosomes[result.chr]);
+        }
+        if (!(_ref1 = result.chr, __indexOf.call(chr_seen, _ref1) >= 0)) {
+          chr_seen.push(result.chr);
+          chr_lengths.push(chr_length);
+          if (result.chr !== "1") {
+            this.total_length += parseFloat(chr_lengths[chr_lengths.length - 2]);
           }
-          this.x_coords.push(this.total_length + parseFloat(result.Mb));
-          this.y_coords.push(result.lrs_value);
-          this.marker_names.push(result.name);
         }
-        return this.total_length += parseFloat(chr_lengths[chr_lengths.length - 1]);
-      };
+        this.x_coords.push(this.total_length + parseFloat(result.Mb));
+        this.y_coords.push(result.lrs_value);
+        this.marker_names.push(result.name);
+      }
+      return this.total_length += parseFloat(chr_lengths[chr_lengths.length - 1]);
+    };
 
-      Interval_Map.prototype.create_svg = function() {
-        var svg;
-        svg = d3.select("#interval_map").append("svg").attr("class", "interval_map").attr("width", this.plot_width + this.x_buffer).attr("height", this.plot_height + this.y_buffer);
-        return svg;
-      };
+    Interval_Map.prototype.create_svg = function() {
+      var svg;
+      svg = d3.select("#interval_map").append("svg").attr("class", "interval_map").attr("width", this.plot_width + this.x_buffer).attr("height", this.plot_height + this.y_buffer);
+      return svg;
+    };
 
-      Interval_Map.prototype.create_graph = function() {
-        this.add_border();
-        this.add_x_axis();
-        this.add_y_axis();
-        this.add_chr_lines();
-        this.fill_chr_areas();
-        this.add_chr_labels();
-        return this.connect_markers();
-      };
+    Interval_Map.prototype.create_graph = function() {
+      this.add_border();
+      this.add_x_axis();
+      this.add_y_axis();
+      this.add_chr_lines();
+      this.fill_chr_areas();
+      this.add_chr_labels();
+      return this.connect_markers();
+    };
 
-      Interval_Map.prototype.add_border = function() {
-        var border_coords,
-          _this = this;
-        border_coords = [[this.y_buffer, this.plot_height, this.x_buffer, this.x_buffer], [this.y_buffer, this.plot_height, this.plot_width, this.plot_width], [this.y_buffer, this.y_buffer, this.x_buffer, this.plot_width], [this.plot_height, this.plot_height, this.x_buffer, this.plot_width]];
-        return this.svg.selectAll("line").data(border_coords).enter().append("line").attr("y1", function(d) {
+    Interval_Map.prototype.add_border = function() {
+      var border_coords;
+      border_coords = [[this.y_buffer, this.plot_height, this.x_buffer, this.x_buffer], [this.y_buffer, this.plot_height, this.plot_width, this.plot_width], [this.y_buffer, this.y_buffer, this.x_buffer, this.plot_width], [this.plot_height, this.plot_height, this.x_buffer, this.plot_width]];
+      return this.svg.selectAll("line").data(border_coords).enter().append("line").attr("y1", (function(_this) {
+        return function(d) {
           return d[0];
-        }).attr("y2", function(d) {
+        };
+      })(this)).attr("y2", (function(_this) {
+        return function(d) {
           return d[1];
-        }).attr("x1", function(d) {
+        };
+      })(this)).attr("x1", (function(_this) {
+        return function(d) {
           return d[2];
-        }).attr("x2", function(d) {
+        };
+      })(this)).attr("x2", (function(_this) {
+        return function(d) {
           return d[3];
-        }).style("stroke", "#000");
-      };
+        };
+      })(this)).style("stroke", "#000");
+    };
 
-      Interval_Map.prototype.create_scales = function() {
-        this.x_scale = d3.scale.linear().domain([0, d3.max(this.x_coords)]).range([this.x_buffer, this.plot_width]);
-        return this.y_scale = d3.scale.linear().domain([0, this.y_max]).range([this.plot_height, this.y_buffer]);
-      };
+    Interval_Map.prototype.create_scales = function() {
+      this.x_scale = d3.scale.linear().domain([0, d3.max(this.x_coords)]).range([this.x_buffer, this.plot_width]);
+      return this.y_scale = d3.scale.linear().domain([0, this.y_max]).range([this.plot_height, this.y_buffer]);
+    };
 
-      Interval_Map.prototype.create_x_axis_tick_values = function() {
-        var chr_ticks, i, length, tick, tick_count, tick_val, tick_vals, val, _i, _j, _k, _len, _ref, _ref1, _ref2;
-        tick_vals = [];
-        for (val = _i = 25, _ref = this.cumulative_chr_lengths[0]; 25 <= _ref ? _i <= _ref : _i >= _ref; val = 25 <= _ref ? ++_i : --_i) {
-          if (val % 25 === 0) {
-            tick_vals.push(val);
-          }
+    Interval_Map.prototype.create_x_axis_tick_values = function() {
+      var chr_ticks, i, length, tick, tick_count, tick_val, tick_vals, val, _i, _j, _k, _len, _ref, _ref1, _ref2;
+      tick_vals = [];
+      for (val = _i = 25, _ref = this.cumulative_chr_lengths[0]; 25 <= _ref ? _i <= _ref : _i >= _ref; val = 25 <= _ref ? ++_i : --_i) {
+        if (val % 25 === 0) {
+          tick_vals.push(val);
         }
-        _ref1 = this.cumulative_chr_lengths;
-        for (i = _j = 0, _len = _ref1.length; _j < _len; i = ++_j) {
-          length = _ref1[i];
-          if (i === 0) {
-            continue;
-          }
-          chr_ticks = [];
-          tick_count = Math.floor(this.chr_lengths[i] / 25);
-          tick_val = parseInt(this.cumulative_chr_lengths[i - 1]);
-          for (tick = _k = 0, _ref2 = tick_count - 1; 0 <= _ref2 ? _k <= _ref2 : _k >= _ref2; tick = 0 <= _ref2 ? ++_k : --_k) {
-            tick_val += 25;
-            chr_ticks.push(tick_val);
-          }
-          Array.prototype.push.apply(tick_vals, chr_ticks);
+      }
+      _ref1 = this.cumulative_chr_lengths;
+      for (i = _j = 0, _len = _ref1.length; _j < _len; i = ++_j) {
+        length = _ref1[i];
+        if (i === 0) {
+          continue;
         }
-        return tick_vals;
-      };
+        chr_ticks = [];
+        tick_count = Math.floor(this.chr_lengths[i] / 25);
+        tick_val = parseInt(this.cumulative_chr_lengths[i - 1]);
+        for (tick = _k = 0, _ref2 = tick_count - 1; 0 <= _ref2 ? _k <= _ref2 : _k >= _ref2; tick = 0 <= _ref2 ? ++_k : --_k) {
+          tick_val += 25;
+          chr_ticks.push(tick_val);
+        }
+        Array.prototype.push.apply(tick_vals, chr_ticks);
+      }
+      return tick_vals;
+    };
 
-      Interval_Map.prototype.add_x_axis = function() {
-        var next_chr, tmp_tick_val, xAxis,
-          _this = this;
-        xAxis = d3.svg.axis().scale(this.x_scale).orient("bottom").tickValues(this.create_x_axis_tick_values());
-        next_chr = 1;
-        tmp_tick_val = 0;
-        xAxis.tickFormat(function(d) {
+    Interval_Map.prototype.add_x_axis = function() {
+      var next_chr, tmp_tick_val, xAxis;
+      xAxis = d3.svg.axis().scale(this.x_scale).orient("bottom").tickValues(this.create_x_axis_tick_values());
+      next_chr = 1;
+      tmp_tick_val = 0;
+      xAxis.tickFormat((function(_this) {
+        return function(d) {
           var next_chr_length, tick_val;
           d3.format("d");
           if (d < _this.cumulative_chr_lengths[0]) {
@@ -189,85 +194,104 @@
             }
           }
           return tick_val;
-        });
-        return this.svg.append("g").attr("class", "x_axis").attr("transform", "translate(0," + this.plot_height + ")").call(xAxis).selectAll("text").attr("text-anchor", "right").attr("dx", "-1.6em").attr("transform", function(d) {
+        };
+      })(this));
+      return this.svg.append("g").attr("class", "x_axis").attr("transform", "translate(0," + this.plot_height + ")").call(xAxis).selectAll("text").attr("text-anchor", "right").attr("dx", "-1.6em").attr("transform", (function(_this) {
+        return function(d) {
           return "translate(-12,0) rotate(-90)";
-        });
-      };
+        };
+      })(this));
+    };
 
-      Interval_Map.prototype.add_y_axis = function() {
-        var yAxis;
-        yAxis = d3.svg.axis().scale(this.y_scale).orient("left").ticks(5);
-        return this.svg.append("g").attr("class", "y_axis").attr("transform", "translate(" + this.x_buffer + ",0)").call(yAxis);
-      };
+    Interval_Map.prototype.add_y_axis = function() {
+      var yAxis;
+      yAxis = d3.svg.axis().scale(this.y_scale).orient("left").ticks(5);
+      return this.svg.append("g").attr("class", "y_axis").attr("transform", "translate(" + this.x_buffer + ",0)").call(yAxis);
+    };
 
-      Interval_Map.prototype.add_chr_lines = function() {
-        var _this = this;
-        return this.svg.selectAll("line").data(this.cumulative_chr_lengths, function(d) {
+    Interval_Map.prototype.add_chr_lines = function() {
+      return this.svg.selectAll("line").data(this.cumulative_chr_lengths, (function(_this) {
+        return function(d) {
           return d;
-        }).enter().append("line").attr("y1", this.y_buffer).attr("y2", this.plot_height).attr("x1", this.x_scale).attr("x2", this.x_scale).style("stroke", "#ccc");
-      };
+        };
+      })(this)).enter().append("line").attr("y1", this.y_buffer).attr("y2", this.plot_height).attr("x1", this.x_scale).attr("x2", this.x_scale).style("stroke", "#ccc");
+    };
 
-      Interval_Map.prototype.fill_chr_areas = function() {
-        var _this = this;
-        return this.svg.selectAll("rect.chr_fill_area_1").data(_.zip(this.chr_lengths, this.cumulative_chr_lengths), function(d) {
+    Interval_Map.prototype.fill_chr_areas = function() {
+      return this.svg.selectAll("rect.chr_fill_area_1").data(_.zip(this.chr_lengths, this.cumulative_chr_lengths), (function(_this) {
+        return function(d) {
           return d;
-        }).enter().append("rect").attr("class", "chr_fill_area_1").attr("x", function(d, i) {
+        };
+      })(this)).enter().append("rect").attr("class", "chr_fill_area_1").attr("x", (function(_this) {
+        return function(d, i) {
           if (i === 0) {
             return _this.x_scale(0);
           } else {
             return _this.x_scale(_this.cumulative_chr_lengths[i - 1]);
           }
-        }).attr("y", this.y_buffer).attr("width", function(d) {
+        };
+      })(this)).attr("y", this.y_buffer).attr("width", (function(_this) {
+        return function(d) {
           return _this.x_scale(d[0]);
-        }).attr("height", this.plot_height - this.y_buffer).attr("fill", "white");
-      };
+        };
+      })(this)).attr("height", this.plot_height - this.y_buffer).attr("fill", "white");
+    };
 
-      Interval_Map.prototype.add_chr_labels = function() {
-        var chr_info, chr_names, key,
-          _this = this;
-        chr_names = [];
-        for (key in this.chromosomes) {
-          chr_names.push(key);
-        }
-        chr_info = _.zip(chr_names, this.chr_lengths, this.cumulative_chr_lengths);
-        return this.svg.selectAll("text").data(chr_info, function(d) {
+    Interval_Map.prototype.add_chr_labels = function() {
+      var chr_info, chr_names, key;
+      chr_names = [];
+      for (key in this.chromosomes) {
+        chr_names.push(key);
+      }
+      chr_info = _.zip(chr_names, this.chr_lengths, this.cumulative_chr_lengths);
+      return this.svg.selectAll("text").data(chr_info, (function(_this) {
+        return function(d) {
           return d;
-        }).enter().append("text").text(function(d) {
+        };
+      })(this)).enter().append("text").text((function(_this) {
+        return function(d) {
           return d[0];
-        }).attr("x", function(d) {
+        };
+      })(this)).attr("x", (function(_this) {
+        return function(d) {
           return _this.x_scale(d[2] - d[1] / 2);
-        }).attr("y", this.plot_height * 0.1).attr("dx", "0em").attr("text-anchor", "middle").attr("font-family", "sans-serif").attr("font-size", "18px");
-      };
+        };
+      })(this)).attr("y", this.plot_height * 0.1).attr("dx", "0em").attr("text-anchor", "middle").attr("font-family", "sans-serif").attr("font-size", "18px");
+    };
 
-      Interval_Map.prototype.connect_markers = function() {
-        var _this = this;
-        return this.svg.selectAll("line").data(this.plot_coordinates).enter().append("line").attr("x1", function(d, i) {
+    Interval_Map.prototype.connect_markers = function() {
+      return this.svg.selectAll("line").data(this.plot_coordinates).enter().append("line").attr("x1", (function(_this) {
+        return function(d, i) {
           if (i === 0) {
             return _this.x_buffer;
           } else {
             return parseFloat(_this.x_buffer) + ((parseFloat(_this.plot_width) - parseFloat(_this.x_buffer)) * _this.plot_coordinates[i - 1][0] / parseFloat(_this.x_max));
           }
-        }).attr("y1", function(d, i) {
+        };
+      })(this)).attr("y1", (function(_this) {
+        return function(d, i) {
           if (i === 0) {
             return _this.plot_height;
           } else {
             return _this.plot_height - ((_this.plot_height - _this.y_buffer) * _this.plot_coordinates[i - 1][1] / _this.y_max);
           }
-        }).attr("x2", function(d) {
+        };
+      })(this)).attr("x2", (function(_this) {
+        return function(d) {
           return parseFloat(_this.x_buffer) + ((parseFloat(_this.plot_width) - parseFloat(_this.x_buffer)) * d[0] / parseFloat(_this.x_max));
-        }).attr("y2", function(d) {
+        };
+      })(this)).attr("y2", (function(_this) {
+        return function(d) {
           return _this.plot_height - ((_this.plot_height - _this.y_buffer) * d[1] / _this.y_max);
-        }).style("stroke", "black");
-      };
-
-      return Interval_Map;
+        };
+      })(this)).style("stroke", "black");
+    };
 
-    })();
-    console.time('Create interval map');
-    console.log("TESTING");
-    new Interval_Map(600, 1200);
-    return console.timeEnd('Create interval map');
-  });
+    return Interval_Map;
 
-}).call(this);
+  })();
+  console.time('Create interval map');
+  console.log("TESTING");
+  new Interval_Map(600, 1200);
+  return console.timeEnd('Create interval map');
+});
diff --git a/wqflask/wqflask/static/new/javascript/lod_chart.coffee b/wqflask/wqflask/static/new/javascript/lod_chart.coffee
index 38325e60..777aac2a 100644
--- a/wqflask/wqflask/static/new/javascript/lod_chart.coffee
+++ b/wqflask/wqflask/static/new/javascript/lod_chart.coffee
@@ -1,5 +1,3 @@
-root = exports ? this

-

 lodchart = () ->

     width = 800

     height = 500

@@ -40,6 +38,9 @@ lodchart = () ->
     ## the main function

     chart = (selection) ->

       selection.each (data) ->

+        

+        console.log("data:", data)

+        

         lodvarname = lodvarname ? data.lodnames[0]

         data[lodvarname] = (Math.abs(x) for x in data[lodvarname]) # take absolute values

         data['additive'] = (Math.abs(x) for x in data['additive'])

@@ -96,7 +97,7 @@ lodchart = () ->
                    .data(data.chrnames)

                    .enter()

                    .append("rect")

-                   .attr("id", (d) -> "chrrect#{d}")

+                   .attr("id", (d) -> "chrrect#{d[0]}")

                    .attr("x", (d,i) ->

                      return data.chrStart[i] if i==0 and pad4heatmap

                      data.chrStart[i]-chrGap/2)

@@ -109,6 +110,9 @@ lodchart = () ->
                       return darkrect if i % 2

                       lightrect)

                    .attr("stroke", "none")

+                   .on("click", (d) ->

+                      redraw_plot(d)

+                    )   

   

         # x-axis labels

         xaxis = g.append("g").attr("class", "x axis")

@@ -116,13 +120,26 @@ lodchart = () ->
              .data(data.chrnames)

              .enter()

              .append("text")

-             .text((d) -> d)

+             .text((d) -> d[0])

              .attr("x", (d,i) -> (data.chrStart[i]+data.chrEnd[i])/2)

              .attr("y", margin.top+height+axispos.xlabel)

+             .attr("cursor", "pointer")

+             .on("click", (d) ->

+                 redraw_plot(d)

+              )   

+             

         xaxis.append("text").attr("class", "title")

              .attr("y", margin.top+height+axispos.xtitle)

              .attr("x", margin.left+width/2)

              .text(xlab)

+

+  

+        redraw_plot = (chr_ob) ->

+             console.log("chr_name is:", chr_ob[0])

+             console.log("chr_length is:", chr_ob[1])

+             $('#topchart').remove()

+             $('#chart_container').append('<div class="qtlcharts" id="topchart"></div>')

+             chr_plot = new Chr_Interval_Map(600, 1200, chr_ob)

   

         # y-axis

         rotate_ylab = rotate_ylab ? (ylab.length > 1)

@@ -231,21 +248,22 @@ lodchart = () ->
   

         for chr in data.chrnames

           curves.append("path")

-                .datum(data.posByChr[chr])

-                .attr("d", lodcurve(chr, lodvarnum))

+                .datum(data.posByChr[chr[0]])

+                .attr("d", lodcurve(chr[0], lodvarnum))

                 .attr("stroke", lodlinecolor)

                 .attr("fill", "none")

                 .attr("stroke-width", linewidth)

                 .style("pointer-events", "none")

-                

-        for chr in data.chrnames

-          curves.append("path")

-                .datum(data.posByChr[chr])

-                .attr("d", additivecurve(chr, lodvarnum))

-                .attr("stroke", additivelinecolor)

-                .attr("fill", "none")

-                .attr("stroke-width", 1)

-                .style("pointer-events", "none")

+        

+        if data['additive'].length > 0

+            for chr in data.chrnames

+                curves.append("path")

+                      .datum(data.posByChr[chr[0]])

+                      .attr("d", additivecurve(chr[0], lodvarnum))

+                      .attr("stroke", additivelinecolor)

+                      .attr("fill", "none")

+                      .attr("stroke-width", 1)

+                      .style("pointer-events", "none")

   

         # points at markers

         if pointsize > 0

@@ -261,6 +279,25 @@ lodchart = () ->
                       .attr("stroke", pointstroke)

                       .attr("pointer-events", "hidden")

   

+        # title

+        titlegrp = g.append("g").attr("class", "title")

+         .append("text")

+         .attr("x", margin.left+width/2)

+         .attr("y", margin.top-titlepos)

+         .text(title)

+  

+        # another box around edge

+        g.append("rect")

+         .attr("x", margin.left)

+         .attr("y", margin.top)

+         .attr("height", height)

+         .attr("width", () ->

+            return(data.chrEnd[-1..][0]-margin.left) if pad4heatmap

+            data.chrEnd[-1..][0]-margin.left+chrGap/2)

+         .attr("fill", "none")

+         .attr("stroke", "black")

+         .attr("stroke-width", "none")

+  

         if pointsAtMarkers

           # these hidden points are what gets selected...a bit larger

           hiddenpoints = g.append("g").attr("id", "markerpoints_hidden")

@@ -293,24 +330,7 @@ lodchart = () ->
                            d3.select(this).attr("opacity", 0)

                                           .call(markertip.hide)

   

-        # title

-        titlegrp = g.append("g").attr("class", "title")

-         .append("text")

-         .attr("x", margin.left+width/2)

-         .attr("y", margin.top-titlepos)

-         .text(title)

-  

-        # another box around edge

-        g.append("rect")

-         .attr("x", margin.left)

-         .attr("y", margin.top)

-         .attr("height", height)

-         .attr("width", () ->

-            return(data.chrEnd[-1..][0]-margin.left) if pad4heatmap

-            data.chrEnd[-1..][0]-margin.left+chrGap/2)

-         .attr("fill", "none")

-         .attr("stroke", "black")

-         .attr("stroke-width", "none")

+

   

     ## configuration parameters

     chart.width = (value) ->

@@ -460,8 +480,6 @@ lodchart = () ->
     # return the chart function

     chart

 

-root.lodchart = lodchart

-

 # reorganize lod/pos by chromosome

 # lodvarname==null    -> case for multiple LOD columns (lodheatmap)

 # lodvarname provided -> case for one LOD column (lodchart)

@@ -471,18 +489,18 @@ reorgLodData = (data, lodvarname=null) ->
     data.additiveByChr = {}

     

     for chr,i in data.chrnames

-      data.posByChr[chr] = []

-      data.lodByChr[chr] = []

-      data.additiveByChr[chr] = []

+      data.posByChr[chr[0]] = []

+      data.lodByChr[chr[0]] = []

+      data.additiveByChr[chr[0]] = []

       for pos, j in data.pos

-        if data.chr[j] == chr

-          data.posByChr[chr].push(pos)

+        if data.chr[j] == chr[0]

+          data.posByChr[chr[0]].push(pos)

           data.lodnames = [data.lodnames] unless Array.isArray(data.lodnames)

           if data['additive'].length > 0

             additiveval = (data['additive'][j] for lodcolumn in data.lodnames)

           lodval = (data[lodcolumn][j] for lodcolumn in data.lodnames)

-          data.additiveByChr[chr].push(additiveval)

-          data.lodByChr[chr].push(lodval)

+          data.additiveByChr[chr[0]].push(additiveval)

+          data.lodByChr[chr[0]].push(lodval)

 

     

     if lodvarname?

@@ -503,10 +521,10 @@ chrscales = (data, width, chrGap, leftMargin, pad4heatmap) ->
     totalChrLength = 0

     maxd = 0

     for chr in data.chrnames

-      d = maxdiff(data.posByChr[chr])

+      d = maxdiff(data.posByChr[chr[0]])

       maxd = d if d > maxd

   

-      rng = d3.extent(data.posByChr[chr])

+      rng = d3.extent(data.posByChr[chr[0]])

       chrStart.push(rng[0])

       chrEnd.push(rng[1])

       L = rng[1] - rng[0]

@@ -533,7 +551,7 @@ chrscales = (data, width, chrGap, leftMargin, pad4heatmap) ->
       data.chrEnd.push(cur + w)

       cur = data.chrEnd[i] + chrGap

       # x-axis scales, by chromosome

-      data.xscale[chr] = d3.scale.linear()

+      data.xscale[chr[0]] = d3.scale.linear()

                            .domain([chrStart[i], chrEnd[i]])

                            .range([data.chrStart[i], data.chrEnd[i]])

   

diff --git a/wqflask/wqflask/static/new/javascript/lod_chart.js b/wqflask/wqflask/static/new/javascript/lod_chart.js
index 0938cf06..c974c9d2 100644
--- a/wqflask/wqflask/static/new/javascript/lod_chart.js
+++ b/wqflask/wqflask/static/new/javascript/lod_chart.js
@@ -1,574 +1,582 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var chrscales, formatAxis, lodchart, maxdiff, reorgLodData, root;
+// Generated by CoffeeScript 1.7.1
+var chrscales, formatAxis, lodchart, maxdiff, reorgLodData;
 
-  root = typeof exports !== "undefined" && exports !== null ? exports : this;
-
-  lodchart = function() {
-    var additive_ylab, additive_ylim, additive_yscale, additive_yticks, additivelinecolor, axispos, chart, chrGap, chrSelect, darkrect, height, lightrect, linewidth, lodcurve, lodlinecolor, lodvarname, margin, markerSelect, nyticks, pad4heatmap, pointcolor, pointsAtMarkers, pointsize, pointstroke, rotate_ylab, significantcolor, suggestivecolor, title, titlepos, width, xlab, xscale, ylab, ylim, yscale, yticks;
-    width = 800;
-    height = 500;
-    margin = {
-      left: 60,
-      top: 40,
-      right: 40,
-      bottom: 40,
-      inner: 5
-    };
-    axispos = {
-      xtitle: 25,
-      ytitle: 30,
-      xlabel: 5,
-      ylabel: 5
-    };
-    titlepos = 20;
-    ylim = null;
-    additive_ylim = null;
-    nyticks = 5;
-    yticks = null;
-    additive_yticks = null;
-    chrGap = 8;
-    darkrect = "#F1F1F9";
-    lightrect = "#FBFBFF";
-    lodlinecolor = "darkslateblue";
-    additivelinecolor = "red";
-    linewidth = 2;
-    suggestivecolor = "gainsboro";
-    significantcolor = "#EBC7C7";
-    pointcolor = "#E9CFEC";
-    pointsize = 0;
-    pointstroke = "black";
-    title = "";
-    xlab = "Chromosome";
-    ylab = "LRS score";
-    additive_ylab = "Additive Effect";
-    rotate_ylab = null;
-    yscale = d3.scale.linear();
-    additive_yscale = d3.scale.linear();
-    xscale = null;
-    pad4heatmap = false;
-    lodcurve = null;
-    lodvarname = null;
-    markerSelect = null;
-    chrSelect = null;
-    pointsAtMarkers = true;
-    chart = function(selection) {
-      return selection.each(function(data) {
-        var additive_yaxis, additivecurve, chr, curves, g, gEnter, hiddenpoints, lodvarnum, markerpoints, markertip, rotate_additive_ylab, suggestive_bar, svg, titlegrp, x, xaxis, yaxis, _i, _j, _len, _len1, _ref, _ref1;
-        lodvarname = lodvarname != null ? lodvarname : data.lodnames[0];
-        data[lodvarname] = (function() {
-          var _i, _len, _ref, _results;
-          _ref = data[lodvarname];
-          _results = [];
-          for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-            x = _ref[_i];
-            _results.push(Math.abs(x));
-          }
-          return _results;
-        })();
-        data['additive'] = (function() {
-          var _i, _len, _ref, _results;
-          _ref = data['additive'];
-          _results = [];
-          for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-            x = _ref[_i];
-            _results.push(Math.abs(x));
-          }
-          return _results;
-        })();
-        ylim = ylim != null ? ylim : [0, d3.max(data[lodvarname])];
-        if (data['additive'].length > 0) {
-          additive_ylim = additive_ylim != null ? additive_ylim : [0, d3.max(data['additive'])];
+lodchart = function() {
+  var additive_ylab, additive_ylim, additive_yscale, additive_yticks, additivelinecolor, axispos, chart, chrGap, chrSelect, darkrect, height, lightrect, linewidth, lodcurve, lodlinecolor, lodvarname, margin, markerSelect, nyticks, pad4heatmap, pointcolor, pointsAtMarkers, pointsize, pointstroke, rotate_ylab, significantcolor, suggestivecolor, title, titlepos, width, xlab, xscale, ylab, ylim, yscale, yticks;
+  width = 800;
+  height = 500;
+  margin = {
+    left: 60,
+    top: 40,
+    right: 40,
+    bottom: 40,
+    inner: 5
+  };
+  axispos = {
+    xtitle: 25,
+    ytitle: 30,
+    xlabel: 5,
+    ylabel: 5
+  };
+  titlepos = 20;
+  ylim = null;
+  additive_ylim = null;
+  nyticks = 5;
+  yticks = null;
+  additive_yticks = null;
+  chrGap = 8;
+  darkrect = "#F1F1F9";
+  lightrect = "#FBFBFF";
+  lodlinecolor = "darkslateblue";
+  additivelinecolor = "red";
+  linewidth = 2;
+  suggestivecolor = "gainsboro";
+  significantcolor = "#EBC7C7";
+  pointcolor = "#E9CFEC";
+  pointsize = 0;
+  pointstroke = "black";
+  title = "";
+  xlab = "Chromosome";
+  ylab = "LRS score";
+  additive_ylab = "Additive Effect";
+  rotate_ylab = null;
+  yscale = d3.scale.linear();
+  additive_yscale = d3.scale.linear();
+  xscale = null;
+  pad4heatmap = false;
+  lodcurve = null;
+  lodvarname = null;
+  markerSelect = null;
+  chrSelect = null;
+  pointsAtMarkers = true;
+  chart = function(selection) {
+    return selection.each(function(data) {
+      var additive_yaxis, additivecurve, chr, curves, g, gEnter, hiddenpoints, lodvarnum, markerpoints, markertip, redraw_plot, rotate_additive_ylab, suggestive_bar, svg, titlegrp, x, xaxis, yaxis, _i, _j, _len, _len1, _ref, _ref1;
+      console.log("data:", data);
+      lodvarname = lodvarname != null ? lodvarname : data.lodnames[0];
+      data[lodvarname] = (function() {
+        var _i, _len, _ref, _results;
+        _ref = data[lodvarname];
+        _results = [];
+        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+          x = _ref[_i];
+          _results.push(Math.abs(x));
         }
-        lodvarnum = data.lodnames.indexOf(lodvarname);
-        svg = d3.select(this).selectAll("svg").data([data]);
-        gEnter = svg.enter().append("svg").append("g");
-        svg.attr("width", width + margin.left + margin.right).attr("height", height + margin.top + margin.bottom);
-        g = svg.select("g");
-        g.append("rect").attr("x", margin.left).attr("y", margin.top).attr("height", height).attr("width", width).attr("fill", darkrect).attr("stroke", "none");
-        yscale.domain(ylim).range([height + margin.top, margin.top + margin.inner]);
-        if (data['additive'].length > 0) {
-          additive_yscale.domain(additive_ylim).range([height + margin.top, margin.top + margin.inner + height / 2]);
+        return _results;
+      })();
+      data['additive'] = (function() {
+        var _i, _len, _ref, _results;
+        _ref = data['additive'];
+        _results = [];
+        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+          x = _ref[_i];
+          _results.push(Math.abs(x));
         }
-        yticks = yticks != null ? yticks : yscale.ticks(nyticks);
-        if (data['additive'].length > 0) {
-          additive_yticks = additive_yticks != null ? additive_yticks : additive_yscale.ticks(nyticks);
+        return _results;
+      })();
+      ylim = ylim != null ? ylim : [0, d3.max(data[lodvarname])];
+      if (data['additive'].length > 0) {
+        additive_ylim = additive_ylim != null ? additive_ylim : [0, d3.max(data['additive'])];
+      }
+      lodvarnum = data.lodnames.indexOf(lodvarname);
+      svg = d3.select(this).selectAll("svg").data([data]);
+      gEnter = svg.enter().append("svg").append("g");
+      svg.attr("width", width + margin.left + margin.right).attr("height", height + margin.top + margin.bottom);
+      g = svg.select("g");
+      g.append("rect").attr("x", margin.left).attr("y", margin.top).attr("height", height).attr("width", width).attr("fill", darkrect).attr("stroke", "none");
+      yscale.domain(ylim).range([height + margin.top, margin.top + margin.inner]);
+      if (data['additive'].length > 0) {
+        additive_yscale.domain(additive_ylim).range([height + margin.top, margin.top + margin.inner + height / 2]);
+      }
+      yticks = yticks != null ? yticks : yscale.ticks(nyticks);
+      if (data['additive'].length > 0) {
+        additive_yticks = additive_yticks != null ? additive_yticks : additive_yscale.ticks(nyticks);
+      }
+      data = reorgLodData(data, lodvarname);
+      data = chrscales(data, width, chrGap, margin.left, pad4heatmap);
+      xscale = data.xscale;
+      chrSelect = g.append("g").attr("class", "chrRect").selectAll("empty").data(data.chrnames).enter().append("rect").attr("id", function(d) {
+        return "chrrect" + d[0];
+      }).attr("x", function(d, i) {
+        if (i === 0 && pad4heatmap) {
+          return data.chrStart[i];
         }
-        data = reorgLodData(data, lodvarname);
-        data = chrscales(data, width, chrGap, margin.left, pad4heatmap);
-        xscale = data.xscale;
-        chrSelect = g.append("g").attr("class", "chrRect").selectAll("empty").data(data.chrnames).enter().append("rect").attr("id", function(d) {
-          return "chrrect" + d;
-        }).attr("x", function(d, i) {
-          if (i === 0 && pad4heatmap) {
-            return data.chrStart[i];
-          }
-          return data.chrStart[i] - chrGap / 2;
-        }).attr("width", function(d, i) {
-          if ((i === 0 || i + 1 === data.chrnames.length) && pad4heatmap) {
-            return data.chrEnd[i] - data.chrStart[i] + chrGap / 2;
-          }
-          return data.chrEnd[i] - data.chrStart[i] + chrGap;
-        }).attr("y", margin.top).attr("height", height).attr("fill", function(d, i) {
-          if (i % 2) {
-            return darkrect;
-          }
-          return lightrect;
-        }).attr("stroke", "none");
-        xaxis = g.append("g").attr("class", "x axis");
-        xaxis.selectAll("empty").data(data.chrnames).enter().append("text").text(function(d) {
-          return d;
-        }).attr("x", function(d, i) {
-          return (data.chrStart[i] + data.chrEnd[i]) / 2;
-        }).attr("y", margin.top + height + axispos.xlabel);
-        xaxis.append("text").attr("class", "title").attr("y", margin.top + height + axispos.xtitle).attr("x", margin.left + width / 2).text(xlab);
-        rotate_ylab = rotate_ylab != null ? rotate_ylab : ylab.length > 1;
-        yaxis = g.append("g").attr("class", "y axis");
-        yaxis.selectAll("empty").data(yticks).enter().append("line").attr("y1", function(d) {
-          return yscale(d);
-        }).attr("y2", function(d) {
-          return yscale(d);
-        }).attr("x1", margin.left).attr("x2", margin.left + 7).attr("fill", "none").attr("stroke", "white").attr("stroke-width", 1).style("pointer-events", "none");
-        yaxis.selectAll("empty").data(yticks).enter().append("text").attr("y", function(d) {
-          return yscale(d);
-        }).attr("x", margin.left - axispos.ylabel).attr("fill", "blue").text(function(d) {
-          return formatAxis(yticks)(d);
-        });
-        yaxis.append("text").attr("class", "title").attr("y", margin.top + height / 2).attr("x", margin.left - axispos.ytitle).text(ylab).attr("transform", rotate_ylab ? "rotate(270," + (margin.left - axispos.ytitle) + "," + (margin.top + height / 2) + ")" : "");
-        if (data['additive'].length > 0) {
-          rotate_additive_ylab = rotate_additive_ylab != null ? rotate_additive_ylab : additive_ylab.length > 1;
-          additive_yaxis = g.append("g").attr("class", "y axis");
-          additive_yaxis.selectAll("empty").data(additive_yticks).enter().append("line").attr("y1", function(d) {
-            return additive_yscale(d);
-          }).attr("y2", function(d) {
-            return additive_yscale(d);
-          }).attr("x1", margin.left + width).attr("x2", margin.left + width - 7).attr("fill", "none").attr("stroke", "white").attr("stroke-width", 1).style("pointer-events", "none");
-          additive_yaxis.selectAll("empty").data(additive_yticks).enter().append("text").attr("y", function(d) {
-            return additive_yscale(d);
-          }).attr("x", function(d) {
-            return margin.left + width + axispos.ylabel + 20;
-          }).attr("fill", "green").text(function(d) {
-            return formatAxis(additive_yticks)(d);
-          });
-          additive_yaxis.append("text").attr("class", "title").attr("y", margin.top + 1.5 * height).attr("x", margin.left + width + axispos.ytitle).text(additive_ylab).attr("transform", rotate_additive_ylab ? "rotate(270," + (margin.left + width + axispos.ytitle) + ", " + (margin.top + height * 1.5) + ")" : "");
+        return data.chrStart[i] - chrGap / 2;
+      }).attr("width", function(d, i) {
+        if ((i === 0 || i + 1 === data.chrnames.length) && pad4heatmap) {
+          return data.chrEnd[i] - data.chrStart[i] + chrGap / 2;
         }
-        suggestive_bar = g.append("g").attr("class", "suggestive");
-        suggestive_bar.selectAll("empty").data([data.suggestive]).enter().append("line").attr("y1", function(d) {
-          return yscale(d);
-        }).attr("y2", function(d) {
-          return yscale(d);
-        }).attr("x1", margin.left).attr("x2", margin.left + width).attr("fill", "none").attr("stroke", suggestivecolor).attr("stroke-width", 5).style("pointer-events", "none");
-        suggestive_bar = g.append("g").attr("class", "significant");
-        suggestive_bar.selectAll("empty").data([data.significant]).enter().append("line").attr("y1", function(d) {
-          return yscale(d);
+        return data.chrEnd[i] - data.chrStart[i] + chrGap;
+      }).attr("y", margin.top).attr("height", height).attr("fill", function(d, i) {
+        if (i % 2) {
+          return darkrect;
+        }
+        return lightrect;
+      }).attr("stroke", "none").on("click", function(d) {
+        return redraw_plot(d);
+      });
+      xaxis = g.append("g").attr("class", "x axis");
+      xaxis.selectAll("empty").data(data.chrnames).enter().append("text").text(function(d) {
+        return d[0];
+      }).attr("x", function(d, i) {
+        return (data.chrStart[i] + data.chrEnd[i]) / 2;
+      }).attr("y", margin.top + height + axispos.xlabel).attr("cursor", "pointer").on("click", function(d) {
+        return redraw_plot(d);
+      });
+      xaxis.append("text").attr("class", "title").attr("y", margin.top + height + axispos.xtitle).attr("x", margin.left + width / 2).text(xlab);
+      redraw_plot = function(chr_ob) {
+        var chr_plot;
+        console.log("chr_name is:", chr_ob[0]);
+        console.log("chr_length is:", chr_ob[1]);
+        $('#topchart').remove();
+        $('#chart_container').append('<div class="qtlcharts" id="topchart"></div>');
+        return chr_plot = new Chr_Interval_Map(600, 1200, chr_ob);
+      };
+      rotate_ylab = rotate_ylab != null ? rotate_ylab : ylab.length > 1;
+      yaxis = g.append("g").attr("class", "y axis");
+      yaxis.selectAll("empty").data(yticks).enter().append("line").attr("y1", function(d) {
+        return yscale(d);
+      }).attr("y2", function(d) {
+        return yscale(d);
+      }).attr("x1", margin.left).attr("x2", margin.left + 7).attr("fill", "none").attr("stroke", "white").attr("stroke-width", 1).style("pointer-events", "none");
+      yaxis.selectAll("empty").data(yticks).enter().append("text").attr("y", function(d) {
+        return yscale(d);
+      }).attr("x", margin.left - axispos.ylabel).attr("fill", "blue").text(function(d) {
+        return formatAxis(yticks)(d);
+      });
+      yaxis.append("text").attr("class", "title").attr("y", margin.top + height / 2).attr("x", margin.left - axispos.ytitle).text(ylab).attr("transform", rotate_ylab ? "rotate(270," + (margin.left - axispos.ytitle) + "," + (margin.top + height / 2) + ")" : "");
+      if (data['additive'].length > 0) {
+        rotate_additive_ylab = rotate_additive_ylab != null ? rotate_additive_ylab : additive_ylab.length > 1;
+        additive_yaxis = g.append("g").attr("class", "y axis");
+        additive_yaxis.selectAll("empty").data(additive_yticks).enter().append("line").attr("y1", function(d) {
+          return additive_yscale(d);
         }).attr("y2", function(d) {
-          return yscale(d);
-        }).attr("x1", margin.left).attr("x2", margin.left + width).attr("fill", "none").attr("stroke", significantcolor).attr("stroke-width", 5).style("pointer-events", "none");
-        lodcurve = function(chr, lodcolumn) {
+          return additive_yscale(d);
+        }).attr("x1", margin.left + width).attr("x2", margin.left + width - 7).attr("fill", "none").attr("stroke", "white").attr("stroke-width", 1).style("pointer-events", "none");
+        additive_yaxis.selectAll("empty").data(additive_yticks).enter().append("text").attr("y", function(d) {
+          return additive_yscale(d);
+        }).attr("x", function(d) {
+          return margin.left + width + axispos.ylabel + 20;
+        }).attr("fill", "green").text(function(d) {
+          return formatAxis(additive_yticks)(d);
+        });
+        additive_yaxis.append("text").attr("class", "title").attr("y", margin.top + 1.5 * height).attr("x", margin.left + width + axispos.ytitle).text(additive_ylab).attr("transform", rotate_additive_ylab ? "rotate(270," + (margin.left + width + axispos.ytitle) + ", " + (margin.top + height * 1.5) + ")" : "");
+      }
+      suggestive_bar = g.append("g").attr("class", "suggestive");
+      suggestive_bar.selectAll("empty").data([data.suggestive]).enter().append("line").attr("y1", function(d) {
+        return yscale(d);
+      }).attr("y2", function(d) {
+        return yscale(d);
+      }).attr("x1", margin.left).attr("x2", margin.left + width).attr("fill", "none").attr("stroke", suggestivecolor).attr("stroke-width", 5).style("pointer-events", "none");
+      suggestive_bar = g.append("g").attr("class", "significant");
+      suggestive_bar.selectAll("empty").data([data.significant]).enter().append("line").attr("y1", function(d) {
+        return yscale(d);
+      }).attr("y2", function(d) {
+        return yscale(d);
+      }).attr("x1", margin.left).attr("x2", margin.left + width).attr("fill", "none").attr("stroke", significantcolor).attr("stroke-width", 5).style("pointer-events", "none");
+      lodcurve = function(chr, lodcolumn) {
+        return d3.svg.line().x(function(d) {
+          return xscale[chr](d);
+        }).y(function(d, i) {
+          return yscale(data.lodByChr[chr][i][lodcolumn]);
+        });
+      };
+      if (data['additive'].length > 0) {
+        additivecurve = function(chr, lodcolumn) {
           return d3.svg.line().x(function(d) {
             return xscale[chr](d);
           }).y(function(d, i) {
-            return yscale(data.lodByChr[chr][i][lodcolumn]);
+            return additive_yscale(data.additiveByChr[chr][i][lodcolumn]);
           });
         };
-        if (data['additive'].length > 0) {
-          additivecurve = function(chr, lodcolumn) {
-            return d3.svg.line().x(function(d) {
-              return xscale[chr](d);
-            }).y(function(d, i) {
-              return additive_yscale(data.additiveByChr[chr][i][lodcolumn]);
-            });
-          };
-        }
-        curves = g.append("g").attr("id", "curves");
-        _ref = data.chrnames;
-        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-          chr = _ref[_i];
-          curves.append("path").datum(data.posByChr[chr]).attr("d", lodcurve(chr, lodvarnum)).attr("stroke", lodlinecolor).attr("fill", "none").attr("stroke-width", linewidth).style("pointer-events", "none");
-        }
+      }
+      curves = g.append("g").attr("id", "curves");
+      _ref = data.chrnames;
+      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+        chr = _ref[_i];
+        curves.append("path").datum(data.posByChr[chr[0]]).attr("d", lodcurve(chr[0], lodvarnum)).attr("stroke", lodlinecolor).attr("fill", "none").attr("stroke-width", linewidth).style("pointer-events", "none");
+      }
+      if (data['additive'].length > 0) {
         _ref1 = data.chrnames;
         for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
           chr = _ref1[_j];
-          curves.append("path").datum(data.posByChr[chr]).attr("d", additivecurve(chr, lodvarnum)).attr("stroke", additivelinecolor).attr("fill", "none").attr("stroke-width", 1).style("pointer-events", "none");
-        }
-        if (pointsize > 0) {
-          markerpoints = g.append("g").attr("id", "markerpoints_visible");
-          markerpoints.selectAll("empty").data(data.markers).enter().append("circle").attr("cx", function(d) {
-            return xscale[d.chr](d.pos);
-          }).attr("cy", function(d) {
-            return yscale(d.lod);
-          }).attr("r", pointsize).attr("fill", pointcolor).attr("stroke", pointstroke).attr("pointer-events", "hidden");
-        }
-        if (pointsAtMarkers) {
-          hiddenpoints = g.append("g").attr("id", "markerpoints_hidden");
-          markertip = d3.tip().attr('class', 'd3-tip').html(function(d) {
-            return [d.name, " LRS = " + (d3.format('.2f')(d.lod))];
-          }).direction("e").offset([0, 10]);
-          svg.call(markertip);
-          markerSelect = hiddenpoints.selectAll("empty").data(data.markers).enter().append("circle").attr("cx", function(d) {
-            return xscale[d.chr](d.pos);
-          }).attr("cy", function(d) {
-            return yscale(d.lod);
-          }).attr("id", function(d) {
-            return d.name;
-          }).attr("r", d3.max([pointsize * 2, 3])).attr("opacity", 0).attr("fill", pointcolor).attr("stroke", pointstroke).attr("stroke-width", "1").on("mouseover.paneltip", function(d) {
-            d3.select(this).attr("opacity", 1);
-            return markertip.show(d);
-          }).on("mouseout.paneltip", function() {
-            return d3.select(this).attr("opacity", 0).call(markertip.hide);
-          });
+          curves.append("path").datum(data.posByChr[chr[0]]).attr("d", additivecurve(chr[0], lodvarnum)).attr("stroke", additivelinecolor).attr("fill", "none").attr("stroke-width", 1).style("pointer-events", "none");
         }
-        titlegrp = g.append("g").attr("class", "title").append("text").attr("x", margin.left + width / 2).attr("y", margin.top - titlepos).text(title);
-        return g.append("rect").attr("x", margin.left).attr("y", margin.top).attr("height", height).attr("width", function() {
-          if (pad4heatmap) {
-            return data.chrEnd.slice(-1)[0] - margin.left;
-          }
-          return data.chrEnd.slice(-1)[0] - margin.left + chrGap / 2;
-        }).attr("fill", "none").attr("stroke", "black").attr("stroke-width", "none");
-      });
-    };
-    chart.width = function(value) {
-      if (!arguments.length) {
-        return width;
-      }
-      width = value;
-      return chart;
-    };
-    chart.height = function(value) {
-      if (!arguments.length) {
-        return height;
-      }
-      height = value;
-      return chart;
-    };
-    chart.margin = function(value) {
-      if (!arguments.length) {
-        return margin;
-      }
-      margin = value;
-      return chart;
-    };
-    chart.titlepos = function(value) {
-      if (!arguments.length) {
-        return titlepos;
-      }
-      titlepos;
-      return chart;
-    };
-    chart.axispos = function(value) {
-      if (!arguments.length) {
-        return axispos;
-      }
-      axispos = value;
-      return chart;
-    };
-    chart.ylim = function(value) {
-      if (!arguments.length) {
-        return ylim;
-      }
-      ylim = value;
-      return chart;
-    };
-    chart.additive_ylim = function(value) {
-      if (!arguments.length) {
-        return additive_ylim;
-      }
-      additive_ylim = value;
-      return chart;
-    };
-    chart.nyticks = function(value) {
-      if (!arguments.length) {
-        return nyticks;
-      }
-      nyticks = value;
-      return chart;
-    };
-    chart.yticks = function(value) {
-      if (!arguments.length) {
-        return yticks;
-      }
-      yticks = value;
-      return chart;
-    };
-    chart.chrGap = function(value) {
-      if (!arguments.length) {
-        return chrGap;
-      }
-      chrGap = value;
-      return chart;
-    };
-    chart.darkrect = function(value) {
-      if (!arguments.length) {
-        return darkrect;
-      }
-      darkrect = value;
-      return chart;
-    };
-    chart.lightrect = function(value) {
-      if (!arguments.length) {
-        return lightrect;
-      }
-      lightrect = value;
-      return chart;
-    };
-    chart.linecolor = function(value) {
-      var linecolor;
-      if (!arguments.length) {
-        return linecolor;
-      }
-      linecolor = value;
-      return chart;
-    };
-    chart.linewidth = function(value) {
-      if (!arguments.length) {
-        return linewidth;
-      }
-      linewidth = value;
-      return chart;
-    };
-    chart.pointcolor = function(value) {
-      if (!arguments.length) {
-        return pointcolor;
-      }
-      pointcolor = value;
-      return chart;
-    };
-    chart.pointsize = function(value) {
-      if (!arguments.length) {
-        return pointsize;
-      }
-      pointsize = value;
-      return chart;
-    };
-    chart.pointstroke = function(value) {
-      if (!arguments.length) {
-        return pointstroke;
-      }
-      pointstroke = value;
-      return chart;
-    };
-    chart.title = function(value) {
-      if (!arguments.length) {
-        return title;
-      }
-      title = value;
-      return chart;
-    };
-    chart.xlab = function(value) {
-      if (!arguments.length) {
-        return xlab;
-      }
-      xlab = value;
-      return chart;
-    };
-    chart.ylab = function(value) {
-      if (!arguments.length) {
-        return ylab;
-      }
-      ylab = value;
-      return chart;
-    };
-    chart.rotate_ylab = function(value) {
-      if (!arguments.length) {
-        return rotate_ylab;
       }
-      rotate_ylab = value;
-      return chart;
-    };
-    chart.lodvarname = function(value) {
-      if (!arguments.length) {
-        return lodvarname;
+      if (pointsize > 0) {
+        markerpoints = g.append("g").attr("id", "markerpoints_visible");
+        markerpoints.selectAll("empty").data(data.markers).enter().append("circle").attr("cx", function(d) {
+          return xscale[d.chr](d.pos);
+        }).attr("cy", function(d) {
+          return yscale(d.lod);
+        }).attr("r", pointsize).attr("fill", pointcolor).attr("stroke", pointstroke).attr("pointer-events", "hidden");
       }
-      lodvarname = value;
-      return chart;
-    };
-    chart.pad4heatmap = function(value) {
-      if (!arguments.length) {
-        return pad4heatmap;
-      }
-      pad4heatmap = value;
-      return chart;
-    };
-    chart.pointsAtMarkers = function(value) {
-      if (!arguments.length) {
-        return pointsAtMarkers;
+      titlegrp = g.append("g").attr("class", "title").append("text").attr("x", margin.left + width / 2).attr("y", margin.top - titlepos).text(title);
+      g.append("rect").attr("x", margin.left).attr("y", margin.top).attr("height", height).attr("width", function() {
+        if (pad4heatmap) {
+          return data.chrEnd.slice(-1)[0] - margin.left;
+        }
+        return data.chrEnd.slice(-1)[0] - margin.left + chrGap / 2;
+      }).attr("fill", "none").attr("stroke", "black").attr("stroke-width", "none");
+      if (pointsAtMarkers) {
+        hiddenpoints = g.append("g").attr("id", "markerpoints_hidden");
+        markertip = d3.tip().attr('class', 'd3-tip').html(function(d) {
+          return [d.name, " LRS = " + (d3.format('.2f')(d.lod))];
+        }).direction("e").offset([0, 10]);
+        svg.call(markertip);
+        return markerSelect = hiddenpoints.selectAll("empty").data(data.markers).enter().append("circle").attr("cx", function(d) {
+          return xscale[d.chr](d.pos);
+        }).attr("cy", function(d) {
+          return yscale(d.lod);
+        }).attr("id", function(d) {
+          return d.name;
+        }).attr("r", d3.max([pointsize * 2, 3])).attr("opacity", 0).attr("fill", pointcolor).attr("stroke", pointstroke).attr("stroke-width", "1").on("mouseover.paneltip", function(d) {
+          d3.select(this).attr("opacity", 1);
+          return markertip.show(d);
+        }).on("mouseout.paneltip", function() {
+          return d3.select(this).attr("opacity", 0).call(markertip.hide);
+        });
       }
-      pointsAtMarkers = value;
-      return chart;
-    };
-    chart.yscale = function() {
-      return yscale;
-    };
-    chart.additive_yscale = function() {
-      return additive_yscale;
-    };
-    chart.xscale = function() {
-      return xscale;
-    };
-    chart.lodcurve = function() {
-      return lodcurve;
-    };
-    chart.additivecurve = function() {
-      return additivecurve;
-    };
-    chart.markerSelect = function() {
-      return markerSelect;
-    };
-    chart.chrSelect = function() {
-      return chrSelect;
-    };
+    });
+  };
+  chart.width = function(value) {
+    if (!arguments.length) {
+      return width;
+    }
+    width = value;
     return chart;
   };
-
-  root.lodchart = lodchart;
-
-  reorgLodData = function(data, lodvarname) {
-    var additiveval, chr, i, j, lodcolumn, lodval, marker, pos, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2;
-    if (lodvarname == null) {
-      lodvarname = null;
+  chart.height = function(value) {
+    if (!arguments.length) {
+      return height;
     }
-    data.posByChr = {};
-    data.lodByChr = {};
-    data.additiveByChr = {};
-    _ref = data.chrnames;
-    for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
-      chr = _ref[i];
-      data.posByChr[chr] = [];
-      data.lodByChr[chr] = [];
-      data.additiveByChr[chr] = [];
-      _ref1 = data.pos;
-      for (j = _j = 0, _len1 = _ref1.length; _j < _len1; j = ++_j) {
-        pos = _ref1[j];
-        if (data.chr[j] === chr) {
-          data.posByChr[chr].push(pos);
-          if (!Array.isArray(data.lodnames)) {
-            data.lodnames = [data.lodnames];
-          }
-          if (data['additive'].length > 0) {
-            additiveval = (function() {
-              var _k, _len2, _ref2, _results;
-              _ref2 = data.lodnames;
-              _results = [];
-              for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
-                lodcolumn = _ref2[_k];
-                _results.push(data['additive'][j]);
-              }
-              return _results;
-            })();
-          }
-          lodval = (function() {
+    height = value;
+    return chart;
+  };
+  chart.margin = function(value) {
+    if (!arguments.length) {
+      return margin;
+    }
+    margin = value;
+    return chart;
+  };
+  chart.titlepos = function(value) {
+    if (!arguments.length) {
+      return titlepos;
+    }
+    titlepos;
+    return chart;
+  };
+  chart.axispos = function(value) {
+    if (!arguments.length) {
+      return axispos;
+    }
+    axispos = value;
+    return chart;
+  };
+  chart.ylim = function(value) {
+    if (!arguments.length) {
+      return ylim;
+    }
+    ylim = value;
+    return chart;
+  };
+  chart.additive_ylim = function(value) {
+    if (!arguments.length) {
+      return additive_ylim;
+    }
+    additive_ylim = value;
+    return chart;
+  };
+  chart.nyticks = function(value) {
+    if (!arguments.length) {
+      return nyticks;
+    }
+    nyticks = value;
+    return chart;
+  };
+  chart.yticks = function(value) {
+    if (!arguments.length) {
+      return yticks;
+    }
+    yticks = value;
+    return chart;
+  };
+  chart.chrGap = function(value) {
+    if (!arguments.length) {
+      return chrGap;
+    }
+    chrGap = value;
+    return chart;
+  };
+  chart.darkrect = function(value) {
+    if (!arguments.length) {
+      return darkrect;
+    }
+    darkrect = value;
+    return chart;
+  };
+  chart.lightrect = function(value) {
+    if (!arguments.length) {
+      return lightrect;
+    }
+    lightrect = value;
+    return chart;
+  };
+  chart.linecolor = function(value) {
+    var linecolor;
+    if (!arguments.length) {
+      return linecolor;
+    }
+    linecolor = value;
+    return chart;
+  };
+  chart.linewidth = function(value) {
+    if (!arguments.length) {
+      return linewidth;
+    }
+    linewidth = value;
+    return chart;
+  };
+  chart.pointcolor = function(value) {
+    if (!arguments.length) {
+      return pointcolor;
+    }
+    pointcolor = value;
+    return chart;
+  };
+  chart.pointsize = function(value) {
+    if (!arguments.length) {
+      return pointsize;
+    }
+    pointsize = value;
+    return chart;
+  };
+  chart.pointstroke = function(value) {
+    if (!arguments.length) {
+      return pointstroke;
+    }
+    pointstroke = value;
+    return chart;
+  };
+  chart.title = function(value) {
+    if (!arguments.length) {
+      return title;
+    }
+    title = value;
+    return chart;
+  };
+  chart.xlab = function(value) {
+    if (!arguments.length) {
+      return xlab;
+    }
+    xlab = value;
+    return chart;
+  };
+  chart.ylab = function(value) {
+    if (!arguments.length) {
+      return ylab;
+    }
+    ylab = value;
+    return chart;
+  };
+  chart.rotate_ylab = function(value) {
+    if (!arguments.length) {
+      return rotate_ylab;
+    }
+    rotate_ylab = value;
+    return chart;
+  };
+  chart.lodvarname = function(value) {
+    if (!arguments.length) {
+      return lodvarname;
+    }
+    lodvarname = value;
+    return chart;
+  };
+  chart.pad4heatmap = function(value) {
+    if (!arguments.length) {
+      return pad4heatmap;
+    }
+    pad4heatmap = value;
+    return chart;
+  };
+  chart.pointsAtMarkers = function(value) {
+    if (!arguments.length) {
+      return pointsAtMarkers;
+    }
+    pointsAtMarkers = value;
+    return chart;
+  };
+  chart.yscale = function() {
+    return yscale;
+  };
+  chart.additive_yscale = function() {
+    return additive_yscale;
+  };
+  chart.xscale = function() {
+    return xscale;
+  };
+  chart.lodcurve = function() {
+    return lodcurve;
+  };
+  chart.additivecurve = function() {
+    return additivecurve;
+  };
+  chart.markerSelect = function() {
+    return markerSelect;
+  };
+  chart.chrSelect = function() {
+    return chrSelect;
+  };
+  return chart;
+};
+
+reorgLodData = function(data, lodvarname) {
+  var additiveval, chr, i, j, lodcolumn, lodval, marker, pos, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2;
+  if (lodvarname == null) {
+    lodvarname = null;
+  }
+  data.posByChr = {};
+  data.lodByChr = {};
+  data.additiveByChr = {};
+  _ref = data.chrnames;
+  for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
+    chr = _ref[i];
+    data.posByChr[chr[0]] = [];
+    data.lodByChr[chr[0]] = [];
+    data.additiveByChr[chr[0]] = [];
+    _ref1 = data.pos;
+    for (j = _j = 0, _len1 = _ref1.length; _j < _len1; j = ++_j) {
+      pos = _ref1[j];
+      if (data.chr[j] === chr[0]) {
+        data.posByChr[chr[0]].push(pos);
+        if (!Array.isArray(data.lodnames)) {
+          data.lodnames = [data.lodnames];
+        }
+        if (data['additive'].length > 0) {
+          additiveval = (function() {
             var _k, _len2, _ref2, _results;
             _ref2 = data.lodnames;
             _results = [];
             for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
               lodcolumn = _ref2[_k];
-              _results.push(data[lodcolumn][j]);
+              _results.push(data['additive'][j]);
             }
             return _results;
           })();
-          data.additiveByChr[chr].push(additiveval);
-          data.lodByChr[chr].push(lodval);
         }
+        lodval = (function() {
+          var _k, _len2, _ref2, _results;
+          _ref2 = data.lodnames;
+          _results = [];
+          for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
+            lodcolumn = _ref2[_k];
+            _results.push(data[lodcolumn][j]);
+          }
+          return _results;
+        })();
+        data.additiveByChr[chr[0]].push(additiveval);
+        data.lodByChr[chr[0]].push(lodval);
       }
     }
-    if (lodvarname != null) {
-      data.markers = [];
-      _ref2 = data.markernames;
-      for (i = _k = 0, _len2 = _ref2.length; _k < _len2; i = ++_k) {
-        marker = _ref2[i];
-        if (marker !== "") {
-          data.markers.push({
-            name: marker,
-            chr: data.chr[i],
-            pos: data.pos[i],
-            lod: data[lodvarname][i]
-          });
-        }
+  }
+  if (lodvarname != null) {
+    data.markers = [];
+    _ref2 = data.markernames;
+    for (i = _k = 0, _len2 = _ref2.length; _k < _len2; i = ++_k) {
+      marker = _ref2[i];
+      if (marker !== "") {
+        data.markers.push({
+          name: marker,
+          chr: data.chr[i],
+          pos: data.pos[i],
+          lod: data[lodvarname][i]
+        });
       }
     }
-    return data;
-  };
+  }
+  return data;
+};
 
-  chrscales = function(data, width, chrGap, leftMargin, pad4heatmap) {
-    var L, chr, chrEnd, chrLength, chrStart, cur, d, i, maxd, rng, totalChrLength, w, _i, _j, _len, _len1, _ref, _ref1;
-    chrStart = [];
-    chrEnd = [];
-    chrLength = [];
-    totalChrLength = 0;
-    maxd = 0;
-    _ref = data.chrnames;
-    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-      chr = _ref[_i];
-      d = maxdiff(data.posByChr[chr]);
-      if (d > maxd) {
-        maxd = d;
-      }
-      rng = d3.extent(data.posByChr[chr]);
-      chrStart.push(rng[0]);
-      chrEnd.push(rng[1]);
-      L = rng[1] - rng[0];
-      chrLength.push(L);
-      totalChrLength += L;
-    }
-    if (pad4heatmap) {
-      data.recwidth = maxd;
-      chrStart = chrStart.map(function(x) {
-        return x - maxd / 2;
-      });
-      chrEnd = chrEnd.map(function(x) {
-        return x + maxd / 2;
-      });
-      chrLength = chrLength.map(function(x) {
-        return x + maxd;
-      });
-      totalChrLength += chrLength.length * maxd;
-    }
-    data.chrStart = [];
-    data.chrEnd = [];
-    cur = leftMargin;
-    if (!pad4heatmap) {
-      cur += chrGap / 2;
-    }
-    data.xscale = {};
-    _ref1 = data.chrnames;
-    for (i = _j = 0, _len1 = _ref1.length; _j < _len1; i = ++_j) {
-      chr = _ref1[i];
-      data.chrStart.push(cur);
-      w = Math.round((width - chrGap * (data.chrnames.length - pad4heatmap)) / totalChrLength * chrLength[i]);
-      data.chrEnd.push(cur + w);
-      cur = data.chrEnd[i] + chrGap;
-      data.xscale[chr] = d3.scale.linear().domain([chrStart[i], chrEnd[i]]).range([data.chrStart[i], data.chrEnd[i]]);
+chrscales = function(data, width, chrGap, leftMargin, pad4heatmap) {
+  var L, chr, chrEnd, chrLength, chrStart, cur, d, i, maxd, rng, totalChrLength, w, _i, _j, _len, _len1, _ref, _ref1;
+  chrStart = [];
+  chrEnd = [];
+  chrLength = [];
+  totalChrLength = 0;
+  maxd = 0;
+  _ref = data.chrnames;
+  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+    chr = _ref[_i];
+    d = maxdiff(data.posByChr[chr[0]]);
+    if (d > maxd) {
+      maxd = d;
     }
-    return data;
-  };
+    rng = d3.extent(data.posByChr[chr[0]]);
+    chrStart.push(rng[0]);
+    chrEnd.push(rng[1]);
+    L = rng[1] - rng[0];
+    chrLength.push(L);
+    totalChrLength += L;
+  }
+  if (pad4heatmap) {
+    data.recwidth = maxd;
+    chrStart = chrStart.map(function(x) {
+      return x - maxd / 2;
+    });
+    chrEnd = chrEnd.map(function(x) {
+      return x + maxd / 2;
+    });
+    chrLength = chrLength.map(function(x) {
+      return x + maxd;
+    });
+    totalChrLength += chrLength.length * maxd;
+  }
+  data.chrStart = [];
+  data.chrEnd = [];
+  cur = leftMargin;
+  if (!pad4heatmap) {
+    cur += chrGap / 2;
+  }
+  data.xscale = {};
+  _ref1 = data.chrnames;
+  for (i = _j = 0, _len1 = _ref1.length; _j < _len1; i = ++_j) {
+    chr = _ref1[i];
+    data.chrStart.push(cur);
+    w = Math.round((width - chrGap * (data.chrnames.length - pad4heatmap)) / totalChrLength * chrLength[i]);
+    data.chrEnd.push(cur + w);
+    cur = data.chrEnd[i] + chrGap;
+    data.xscale[chr[0]] = d3.scale.linear().domain([chrStart[i], chrEnd[i]]).range([data.chrStart[i], data.chrEnd[i]]);
+  }
+  return data;
+};
 
-  maxdiff = function(x) {
-    var d, i, result, _i, _ref;
-    if (x.length < 2) {
-      return null;
-    }
-    result = x[1] - x[0];
-    if (x.length < 3) {
-      return result;
-    }
-    for (i = _i = 2, _ref = x.length; 2 <= _ref ? _i < _ref : _i > _ref; i = 2 <= _ref ? ++_i : --_i) {
-      d = x[i] - x[i - 1];
-      if (d > result) {
-        result = d;
-      }
-    }
+maxdiff = function(x) {
+  var d, i, result, _i, _ref;
+  if (x.length < 2) {
+    return null;
+  }
+  result = x[1] - x[0];
+  if (x.length < 3) {
     return result;
-  };
-
-  formatAxis = function(d) {
-    var ndig;
-    d = d[1] - d[0];
-    ndig = Math.floor(Math.log(d % 10) / Math.log(10));
-    if (ndig > 0) {
-      ndig = 0;
+  }
+  for (i = _i = 2, _ref = x.length; 2 <= _ref ? _i < _ref : _i > _ref; i = 2 <= _ref ? ++_i : --_i) {
+    d = x[i] - x[i - 1];
+    if (d > result) {
+      result = d;
     }
-    ndig = Math.abs(ndig);
-    return d3.format("." + ndig + "f");
-  };
+  }
+  return result;
+};
 
-}).call(this);
+formatAxis = function(d) {
+  var ndig;
+  d = d[1] - d[0];
+  ndig = Math.floor(Math.log(d % 10) / Math.log(10));
+  if (ndig > 0) {
+    ndig = 0;
+  }
+  ndig = Math.abs(ndig);
+  return d3.format("." + ndig + "f");
+};
diff --git a/wqflask/wqflask/static/new/javascript/login.js b/wqflask/wqflask/static/new/javascript/login.js
index f6fd1b2e..a64d1b2d 100755
--- a/wqflask/wqflask/static/new/javascript/login.js
+++ b/wqflask/wqflask/static/new/javascript/login.js
@@ -1,45 +1,41 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-
-  $(function() {
-    var form_success, modalize, submit_form;
-    modalize = function(event) {
-      event.preventDefault();
-      console.log("in modal_replace:", $(this).attr("href"));
-      return $.colorbox({
-        open: true,
-        href: this.href,
-        onComplete: function() {
-          return $(".focused").focus();
-        }
-      });
-    };
-    $(document).one("click", ".modalize", modalize);
-    console.log("Modalized click!!!");
-    form_success = function(data) {
-      return $.colorbox({
-        open: true,
-        html: data,
-        onComplete: function() {
-          return $("form").on("submit", submit_form);
-        }
-      });
-    };
-    submit_form = function(event) {
-      var data, submit_to;
-      event.preventDefault();
-      submit_to = $(this).attr('action');
-      data = $(this).serialize();
-      console.log("submit_to is:", submit_to);
-      return $.ajax({
-        type: "POST",
-        url: submit_to,
-        data: data,
-        dataType: "html",
-        success: form_success
-      });
-    };
-    return $("#colorbox form").on("submit", submit_form);
-  });
-
-}).call(this);
+// Generated by CoffeeScript 1.7.1
+$(function() {
+  var form_success, modalize, submit_form;
+  modalize = function(event) {
+    event.preventDefault();
+    console.log("in modal_replace:", $(this).attr("href"));
+    return $.colorbox({
+      open: true,
+      href: this.href,
+      onComplete: function() {
+        return $(".focused").focus();
+      }
+    });
+  };
+  $(document).one("click", ".modalize", modalize);
+  console.log("Modalized click!!!");
+  form_success = function(data) {
+    return $.colorbox({
+      open: true,
+      html: data,
+      onComplete: function() {
+        return $("form").on("submit", submit_form);
+      }
+    });
+  };
+  submit_form = function(event) {
+    var data, submit_to;
+    event.preventDefault();
+    submit_to = $(this).attr('action');
+    data = $(this).serialize();
+    console.log("submit_to is:", submit_to);
+    return $.ajax({
+      type: "POST",
+      url: submit_to,
+      data: data,
+      dataType: "html",
+      success: form_success
+    });
+  };
+  return $("#colorbox form").on("submit", submit_form);
+});
diff --git a/wqflask/wqflask/static/new/javascript/manhattan_plot.coffee b/wqflask/wqflask/static/new/javascript/manhattan_plot.coffee
new file mode 100644
index 00000000..492c2f3f
--- /dev/null
+++ b/wqflask/wqflask/static/new/javascript/manhattan_plot.coffee
@@ -0,0 +1,534 @@
+lodchart = () ->

+    width = 800

+    height = 500

+    margin = {left:60, top:40, right:40, bottom: 40, inner:5}

+    axispos = {xtitle:25, ytitle:30, xlabel:5, ylabel:5}

+    titlepos = 20

+    ylim = null

+    nyticks = 5

+    yticks = null

+    chrGap = 8

+    darkrect = "#F1F1F9"

+    lightrect = "#FBFBFF" 

+    lodlinecolor = "darkslateblue"

+    linewidth = 2

+    pointcolor = "darkslateblue" # pink

+    pointhover = "#E9CFEC" # pink

+    pointsize = 2 # default = no visible points at markers

+    pointstroke = "black"

+    title = ""

+    xlab = "Chromosome"

+    ylab = "LOD score"

+    rotate_ylab = null

+    yscale = d3.scale.linear()

+    xscale = null

+    pad4heatmap = false

+    lodcurve = null

+    lodvarname = null

+    markerSelect = null

+    chrSelect = null

+    pointsAtMarkers = true

+  

+    ## the main function

+    chart = (selection) ->

+      selection.each (data) ->

+          

+        console.log("data:", data)

+          

+        lodvarname = lodvarname ? data.lodnames[0]

+        data[lodvarname] = (Math.abs(x) for x in data[lodvarname]) # take absolute values

+        ylim = ylim ? [0, d3.max(data[lodvarname])]

+        lodvarnum = data.lodnames.indexOf(lodvarname)

+  

+        # Select the svg element, if it exists.

+        svg = d3.select(this).selectAll("svg").data([data])

+  

+        # Otherwise, create the skeletal chart.

+        gEnter = svg.enter().append("svg").append("g")

+  

+        # Update the outer dimensions.

+        svg.attr("width", width+margin.left+margin.right)

+           .attr("height", height+margin.top+margin.bottom)

+  

+        # Update the inner dimensions.

+        g = svg.select("g")

+  

+        # box

+        g.append("rect")

+         .attr("x", margin.left)

+         .attr("y", margin.top)

+         .attr("height", height)

+         .attr("width", width)

+         .attr("fill", darkrect)

+         .attr("stroke", "none")

+  

+        yscale.domain(ylim)

+              .range([height+margin.top, margin.top+margin.inner])

+  

+        # if yticks not provided, use nyticks to choose pretty ones

+        yticks = yticks ? yscale.ticks(nyticks)

+  

+        # reorganize lod,pos by chromosomes

+        data = reorgLodData(data, lodvarname)

+  

+        # add chromosome scales (for x-axis)

+        data = chrscales(data, width, chrGap, margin.left, pad4heatmap)

+        xscale = data.xscale

+  

+        # chr rectangles

+        chrSelect =

+                  g.append("g").attr("class", "chrRect")

+                   .selectAll("empty")

+                   .data(data.chrnames)

+                   .enter()

+                   .append("rect")

+                   .attr("id", (d) -> "chrrect#{d[0]}")

+                   .attr("x", (d,i) ->

+                     return data.chrStart[i] if i==0 and pad4heatmap

+                     data.chrStart[i]-chrGap/2)

+                   .attr("width", (d,i) ->

+                      return data.chrEnd[i] - data.chrStart[i]+chrGap/2 if (i==0 or i+1 == data.chrnames.length) and pad4heatmap

+                      data.chrEnd[i] - data.chrStart[i]+chrGap)

+                   .attr("y", margin.top)

+                   .attr("height", height)

+                   .attr("fill", (d,i) ->

+                      return darkrect if i % 2

+                      lightrect)

+                   .attr("stroke", "none")

+                   .on("click", (d) ->

+                      redraw_plot(d)

+                    )   

+  

+        # x-axis labels

+        xaxis = g.append("g").attr("class", "x axis")

+        xaxis.selectAll("empty")

+             .data(data.chrnames)

+             .enter()

+             .append("text")

+             .attr("class", "chr_label")

+             .text((d) -> d[0])

+             .attr("x", (d,i) -> (data.chrStart[i]+data.chrEnd[i])/2)

+             .attr("y", margin.top+height+axispos.xlabel)

+             .attr("cursor", "pointer")

+             .on("click", (d) ->

+                 redraw_plot(d)

+              )   

+

+        xaxis.append("text").attr("class", "title")

+             .attr("y", margin.top+height+axispos.xtitle)

+             .attr("x", margin.left+width/2)

+             .text(xlab)

+  

+        redraw_plot = (chr_ob) ->

+             console.log("chr_name is:", chr_ob[0])

+             console.log("chr_length is:", chr_ob[1])

+             $('#topchart').remove()

+             $('#chart_container').append('<div class="qtlcharts" id="topchart"></div>')

+             chr_plot = new Chr_Manhattan_Plot(600, 1200, chr_ob)

+        

+  

+        # y-axis

+        rotate_ylab = rotate_ylab ? (ylab.length > 1)

+        yaxis = g.append("g").attr("class", "y axis")

+        yaxis.selectAll("empty")

+             .data(yticks)

+             .enter()

+             .append("line")

+             .attr("y1", (d) -> yscale(d))

+             .attr("y2", (d) -> yscale(d))

+             .attr("x1", margin.left)

+             .attr("x2", margin.left+7)

+             .attr("fill", "none")

+             .attr("stroke", "white")

+             .attr("stroke-width", 1)

+             .style("pointer-events", "none")

+             

+        yaxis.selectAll("empty")

+             .data(yticks)

+             .enter()

+             .append("text")

+             .attr("y", (d) -> yscale(d))

+             .attr("x", margin.left-axispos.ylabel)

+             .attr("fill", "blue")

+             .text((d) -> formatAxis(yticks)(d))

+             

+        yaxis.append("text").attr("class", "title")

+             .attr("y", margin.top+height/2)

+             .attr("x", margin.left-axispos.ytitle)

+             .text(ylab)

+             .attr("transform", if rotate_ylab then "rotate(270,#{margin.left-axispos.ytitle},#{margin.top+height/2})" else "")

+  

+        # lod curves by chr

+        #lodcurve = (chr, lodcolumn) ->

+        #    d3.svg.line()

+        #      .x((d) -> xscale[chr](d))

+        #      .y((d,i) -> yscale(data.lodByChr[chr][i][lodcolumn]))

+              

+          #add_plot_points: () ->

+          #    @plot_point = @svg.selectAll("circle")

+          #        .data(@plot_coordinates)

+          #        .enter()

+          #        .append("circle")

+          #        .attr("cx", (d) =>

+          #            return @x_scale(d[0])

+          #        )

+          #        .attr("cy", (d) =>

+          #            return @y_scale(d[1])

+          #        )

+          #        .attr("r", (d) =>

+          #            #if d[1] > 3

+          #            #    return 3

+          #            #else

+          #            return 2

+          #        )

+          #        .attr("fill", (d) =>

+          #            #if d[1] > 3

+          #            #    return "white"

+          #            #else

+          #            return "black"

+          #        )

+          #        .attr("stroke", "black")

+          #        .attr("stroke-width", "1")

+          #        .attr("id", (d) =>

+          #            return "point_" + String(d[2])

+          #        )

+          #        .classed("circle", true)

+          #        .on("mouseover", (d) =>

+          #            console.log("d3.event is:", d3.event)

+          #            console.log("d is:", d)

+          #            this_id = "point_" + String(d[2])

+          #            d3.select("#" + this_id).classed("d3_highlight", true)

+          #                .attr("r", 5)

+          #                .attr("stroke", "none")

+          #                .attr("fill", "blue")

+          #                .call(@show_marker_in_table(d))

+          #        )

+          #        .on("mouseout", (d) =>

+          #            this_id = "point_" + String(d[2])

+          #            d3.select("#" + this_id).classed("d3_highlight", false)

+          #                .attr("r", (d) =>

+          #                    #if d[1] > 2

+          #                    #    return 3

+          #                    #else

+          #                    return 2

+          #                )

+          #                .attr("fill", (d) =>

+          #                    #if d[1] > 2

+          #                    #    return "white"

+          #                    #else

+          #                    return "black"

+          #                )

+          #                .attr("stroke", "black")

+          #                .attr("stroke-width", "1")

+          #        )

+          #        .append("svg:title")

+          #            .text((d) =>

+          #                return d[2]

+          #            )

+  

+        #curves = g.append("g").attr("id", "curves")

+  

+        #for chr in data.chrnames

+        #  curves.append("path")

+        #        .datum(data.posByChr[chr])

+        #        .attr("d", lodcurve(chr, lodvarnum))

+        #        .attr("stroke", lodlinecolor)

+        #        .attr("fill", "none")

+        #        .attr("stroke-width", linewidth)

+        #        .style("pointer-events", "none")

+  

+        # points at markers

+        if pointsize > 0

+          markerpoints = g.append("g").attr("id", "markerpoints_visible")

+          markerpoints.selectAll("empty")

+                      .data(data.markers)

+                      .enter()

+                      .append("circle")

+                      .attr("cx", (d) -> xscale[d.chr](d.pos))

+                      .attr("cy", (d) -> yscale(d.lod))

+                      .attr("r", pointsize)

+                      .attr("fill", pointcolor)

+                      .attr("stroke", pointstroke)

+                      .attr("pointer-events", "hidden")

+  

+        # title

+        titlegrp = g.append("g").attr("class", "title")

+         .append("text")

+         .attr("x", margin.left+width/2)

+         .attr("y", margin.top-titlepos)

+         .text(title)

+  

+        # another box around edge

+        g.append("rect")

+         .attr("x", margin.left)

+         .attr("y", margin.top)

+         .attr("height", height)

+         .attr("width", () ->

+            return(data.chrEnd[-1..][0]-margin.left) if pad4heatmap

+            data.chrEnd[-1..][0]-margin.left+chrGap/2)

+         .attr("fill", "none")

+         .attr("stroke", "black")

+         .attr("stroke-width", "none")

+         

+        if pointsAtMarkers

+          # these hidden points are what gets selected...a bit larger

+          hiddenpoints = g.append("g").attr("id", "markerpoints_hidden")

+  

+          markertip = d3.tip()

+                        .attr('class', 'd3-tip')

+                        .html((d) ->

+                          [d.name, " LRS = #{d3.format('.2f')(d.lod)}"])

+                        .direction("e")

+                        .offset([0,10])

+          svg.call(markertip)

+  

+          markerSelect =

+            hiddenpoints.selectAll("empty")

+                        .data(data.markers)

+                        .enter()

+                        .append("circle")

+                        .attr("cx", (d) -> xscale[d.chr](d.pos))

+                        .attr("cy", (d) -> yscale(d.lod))

+                        .attr("id", (d) -> d.name)

+                        .attr("r", d3.max([pointsize*2, 3]))

+                        .attr("opacity", 0)

+                        .attr("fill", pointhover)

+                        .attr("stroke", pointstroke)

+                        .attr("stroke-width", "1")

+                        .on "mouseover.paneltip", (d) ->

+                           d3.select(this).attr("opacity", 1)

+                           markertip.show(d)

+                        .on "mouseout.paneltip", ->

+                           d3.select(this).attr("opacity", 0)

+                                          .call(markertip.hide)

+  

+    ## configuration parameters

+    chart.width = (value) ->

+      return width unless arguments.length

+      width = value

+      chart

+  

+    chart.height = (value) ->

+      return height unless arguments.length

+      height = value

+      chart

+  

+    chart.margin = (value) ->

+      return margin unless arguments.length

+      margin = value

+      chart

+  

+    chart.titlepos = (value) ->

+      return titlepos unless arguments.length

+      titlepos

+      chart

+  

+    chart.axispos = (value) ->

+      return axispos unless arguments.length

+      axispos = value

+      chart

+  

+    chart.ylim = (value) ->

+      return ylim unless arguments.length

+      ylim = value

+      chart

+      

+    chart.nyticks = (value) ->

+      return nyticks unless arguments.length

+      nyticks = value

+      chart

+  

+    chart.yticks = (value) ->

+      return yticks unless arguments.length

+      yticks = value

+      chart

+  

+    chart.chrGap = (value) ->

+      return chrGap unless arguments.length

+      chrGap = value

+      chart

+  

+    chart.darkrect = (value) ->

+      return darkrect unless arguments.length

+      darkrect = value

+      chart

+  

+    chart.lightrect = (value) ->

+      return lightrect unless arguments.length

+      lightrect = value

+      chart

+  

+    chart.linecolor = (value) ->

+      return linecolor unless arguments.length

+      linecolor = value

+      chart

+  

+    chart.linewidth = (value) ->

+      return linewidth unless arguments.length

+      linewidth = value

+      chart

+  

+    chart.pointcolor = (value) ->

+      return pointcolor unless arguments.length

+      pointcolor = value

+      chart

+  

+    chart.pointhover = (value) ->

+      return pointhover unless arguments.length

+      pointhover = value

+      chart

+  

+    chart.pointsize = (value) ->

+      return pointsize unless arguments.length

+      pointsize = value

+      chart

+  

+    chart.pointstroke = (value) ->

+      return pointstroke unless arguments.length

+      pointstroke = value

+      chart

+  

+    chart.title = (value) ->

+      return title unless arguments.length

+      title = value

+      chart

+  

+    chart.xlab = (value) ->

+      return xlab unless arguments.length

+      xlab = value

+      chart

+  

+    chart.ylab = (value) ->

+      return ylab unless arguments.length

+      ylab = value

+      chart

+  

+    chart.rotate_ylab = (value) ->

+      return rotate_ylab if !arguments.length

+      rotate_ylab = value

+      chart

+  

+    chart.lodvarname = (value) ->

+      return lodvarname unless arguments.length

+      lodvarname = value

+      chart

+  

+    chart.pad4heatmap = (value) ->

+      return pad4heatmap unless arguments.length

+      pad4heatmap = value

+      chart

+  

+    chart.pointsAtMarkers = (value) ->

+      return pointsAtMarkers unless arguments.length

+      pointsAtMarkers = value

+      chart

+  

+    chart.yscale = () ->

+      return yscale

+  

+    chart.xscale = () ->

+      return xscale

+  

+    #chart.lodcurve = () ->

+    #  return lodcurve

+  

+    chart.markerSelect = () ->

+      return markerSelect

+  

+    chart.chrSelect = () ->

+      return chrSelect

+  

+    # return the chart function

+    chart

+

+

+# reorganize lod/pos by chromosome

+# lodvarname==null    -> case for multiple LOD columns (lodheatmap)

+# lodvarname provided -> case for one LOD column (lodchart)

+reorgLodData = (data, lodvarname=null) ->

+    data.posByChr = {}

+    data.lodByChr = {}

+    

+    for chr,i in data.chrnames

+      data.posByChr[chr[0]] = []

+      data.lodByChr[chr[0]] = []

+      for pos, j in data.pos

+        if data.chr[j] == chr[0]

+          data.posByChr[chr[0]].push(pos)

+          data.lodnames = [data.lodnames] unless Array.isArray(data.lodnames)

+          lodval = (data[lodcolumn][j] for lodcolumn in data.lodnames)

+          data.lodByChr[chr[0]].push(lodval)

+

+    

+    if lodvarname?

+      data.markers = []

+      for marker,i in data.markernames

+        if marker != ""

+          data.markers.push({name:marker, chr:data.chr[i], pos:data.pos[i], lod:data[lodvarname][i]})

+    

+    data

+

+

+# calculate chromosome start/end + scales, for heat map

+chrscales = (data, width, chrGap, leftMargin, pad4heatmap) ->

+    # start and end of chromosome positions

+    chrStart = []

+    chrEnd = []

+    chrLength = []

+    totalChrLength = 0

+    maxd = 0

+    for chr in data.chrnames

+      d = maxdiff(data.posByChr[chr[0]])

+      maxd = d if d > maxd

+  

+      rng = d3.extent(data.posByChr[chr[0]])

+      chrStart.push(rng[0])

+      chrEnd.push(rng[1])

+      L = rng[1] - rng[0]

+      chrLength.push(L)

+      totalChrLength += L

+  

+    # adjust lengths for heatmap

+    if pad4heatmap

+      data.recwidth = maxd

+      chrStart = chrStart.map (x) -> x-maxd/2

+      chrEnd = chrEnd.map (x) -> x+maxd/2

+      chrLength = chrLength.map (x) -> x+maxd

+      totalChrLength += (chrLength.length*maxd)

+  

+    # break up x axis into chromosomes by length, with gaps

+    data.chrStart = []

+    data.chrEnd = []

+    cur = leftMargin

+    cur += chrGap/2 unless pad4heatmap

+    data.xscale = {}

+    for chr,i in data.chrnames

+      data.chrStart.push(cur)

+      w = Math.round((width-chrGap*(data.chrnames.length-pad4heatmap))/totalChrLength*chrLength[i])

+      data.chrEnd.push(cur + w)

+      cur = data.chrEnd[i] + chrGap

+      # x-axis scales, by chromosome

+      data.xscale[chr[0]] = d3.scale.linear()

+                           .domain([chrStart[i], chrEnd[i]])

+                           .range([data.chrStart[i], data.chrEnd[i]])

+  

+    # return data with new stuff added

+    data

+    

+# maximum difference between adjacent values in a vector

+maxdiff = (x) ->

+    return null if x.length < 2

+    result = x[1] - x[0]

+    return result if x.length < 3

+    for i in [2...x.length]

+      d = x[i] - x[i-1]

+      result = d if d > result

+    result

+    

+# determine rounding of axis labels

+formatAxis = (d) ->

+    d = d[1] - d[0]

+    ndig = Math.floor( Math.log(d % 10) / Math.log(10) )

+    ndig = 0 if ndig > 0

+    ndig = Math.abs(ndig)

+    d3.format(".#{ndig}f")

diff --git a/wqflask/wqflask/static/new/javascript/manhattan_plot.js b/wqflask/wqflask/static/new/javascript/manhattan_plot.js
new file mode 100644
index 00000000..546cf9a9
--- /dev/null
+++ b/wqflask/wqflask/static/new/javascript/manhattan_plot.js
@@ -0,0 +1,475 @@
+// Generated by CoffeeScript 1.7.1
+var chrscales, formatAxis, lodchart, maxdiff, reorgLodData;
+
+lodchart = function() {
+  var axispos, chart, chrGap, chrSelect, darkrect, height, lightrect, linewidth, lodcurve, lodlinecolor, lodvarname, margin, markerSelect, nyticks, pad4heatmap, pointcolor, pointhover, pointsAtMarkers, pointsize, pointstroke, rotate_ylab, title, titlepos, width, xlab, xscale, ylab, ylim, yscale, yticks;
+  width = 800;
+  height = 500;
+  margin = {
+    left: 60,
+    top: 40,
+    right: 40,
+    bottom: 40,
+    inner: 5
+  };
+  axispos = {
+    xtitle: 25,
+    ytitle: 30,
+    xlabel: 5,
+    ylabel: 5
+  };
+  titlepos = 20;
+  ylim = null;
+  nyticks = 5;
+  yticks = null;
+  chrGap = 8;
+  darkrect = "#F1F1F9";
+  lightrect = "#FBFBFF";
+  lodlinecolor = "darkslateblue";
+  linewidth = 2;
+  pointcolor = "darkslateblue";
+  pointhover = "#E9CFEC";
+  pointsize = 2;
+  pointstroke = "black";
+  title = "";
+  xlab = "Chromosome";
+  ylab = "LOD score";
+  rotate_ylab = null;
+  yscale = d3.scale.linear();
+  xscale = null;
+  pad4heatmap = false;
+  lodcurve = null;
+  lodvarname = null;
+  markerSelect = null;
+  chrSelect = null;
+  pointsAtMarkers = true;
+  chart = function(selection) {
+    return selection.each(function(data) {
+      var g, gEnter, hiddenpoints, lodvarnum, markerpoints, markertip, redraw_plot, svg, titlegrp, x, xaxis, yaxis;
+      console.log("data:", data);
+      lodvarname = lodvarname != null ? lodvarname : data.lodnames[0];
+      data[lodvarname] = (function() {
+        var _i, _len, _ref, _results;
+        _ref = data[lodvarname];
+        _results = [];
+        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+          x = _ref[_i];
+          _results.push(Math.abs(x));
+        }
+        return _results;
+      })();
+      ylim = ylim != null ? ylim : [0, d3.max(data[lodvarname])];
+      lodvarnum = data.lodnames.indexOf(lodvarname);
+      svg = d3.select(this).selectAll("svg").data([data]);
+      gEnter = svg.enter().append("svg").append("g");
+      svg.attr("width", width + margin.left + margin.right).attr("height", height + margin.top + margin.bottom);
+      g = svg.select("g");
+      g.append("rect").attr("x", margin.left).attr("y", margin.top).attr("height", height).attr("width", width).attr("fill", darkrect).attr("stroke", "none");
+      yscale.domain(ylim).range([height + margin.top, margin.top + margin.inner]);
+      yticks = yticks != null ? yticks : yscale.ticks(nyticks);
+      data = reorgLodData(data, lodvarname);
+      data = chrscales(data, width, chrGap, margin.left, pad4heatmap);
+      xscale = data.xscale;
+      chrSelect = g.append("g").attr("class", "chrRect").selectAll("empty").data(data.chrnames).enter().append("rect").attr("id", function(d) {
+        return "chrrect" + d[0];
+      }).attr("x", function(d, i) {
+        if (i === 0 && pad4heatmap) {
+          return data.chrStart[i];
+        }
+        return data.chrStart[i] - chrGap / 2;
+      }).attr("width", function(d, i) {
+        if ((i === 0 || i + 1 === data.chrnames.length) && pad4heatmap) {
+          return data.chrEnd[i] - data.chrStart[i] + chrGap / 2;
+        }
+        return data.chrEnd[i] - data.chrStart[i] + chrGap;
+      }).attr("y", margin.top).attr("height", height).attr("fill", function(d, i) {
+        if (i % 2) {
+          return darkrect;
+        }
+        return lightrect;
+      }).attr("stroke", "none").on("click", function(d) {
+        return redraw_plot(d);
+      });
+      xaxis = g.append("g").attr("class", "x axis");
+      xaxis.selectAll("empty").data(data.chrnames).enter().append("text").attr("class", "chr_label").text(function(d) {
+        return d[0];
+      }).attr("x", function(d, i) {
+        return (data.chrStart[i] + data.chrEnd[i]) / 2;
+      }).attr("y", margin.top + height + axispos.xlabel).attr("cursor", "pointer").on("click", function(d) {
+        return redraw_plot(d);
+      });
+      xaxis.append("text").attr("class", "title").attr("y", margin.top + height + axispos.xtitle).attr("x", margin.left + width / 2).text(xlab);
+      redraw_plot = function(chr_ob) {
+        var chr_plot;
+        console.log("chr_name is:", chr_ob[0]);
+        console.log("chr_length is:", chr_ob[1]);
+        $('#topchart').remove();
+        $('#chart_container').append('<div class="qtlcharts" id="topchart"></div>');
+        return chr_plot = new Chr_Manhattan_Plot(600, 1200, chr_ob);
+      };
+      rotate_ylab = rotate_ylab != null ? rotate_ylab : ylab.length > 1;
+      yaxis = g.append("g").attr("class", "y axis");
+      yaxis.selectAll("empty").data(yticks).enter().append("line").attr("y1", function(d) {
+        return yscale(d);
+      }).attr("y2", function(d) {
+        return yscale(d);
+      }).attr("x1", margin.left).attr("x2", margin.left + 7).attr("fill", "none").attr("stroke", "white").attr("stroke-width", 1).style("pointer-events", "none");
+      yaxis.selectAll("empty").data(yticks).enter().append("text").attr("y", function(d) {
+        return yscale(d);
+      }).attr("x", margin.left - axispos.ylabel).attr("fill", "blue").text(function(d) {
+        return formatAxis(yticks)(d);
+      });
+      yaxis.append("text").attr("class", "title").attr("y", margin.top + height / 2).attr("x", margin.left - axispos.ytitle).text(ylab).attr("transform", rotate_ylab ? "rotate(270," + (margin.left - axispos.ytitle) + "," + (margin.top + height / 2) + ")" : "");
+      if (pointsize > 0) {
+        markerpoints = g.append("g").attr("id", "markerpoints_visible");
+        markerpoints.selectAll("empty").data(data.markers).enter().append("circle").attr("cx", function(d) {
+          return xscale[d.chr](d.pos);
+        }).attr("cy", function(d) {
+          return yscale(d.lod);
+        }).attr("r", pointsize).attr("fill", pointcolor).attr("stroke", pointstroke).attr("pointer-events", "hidden");
+      }
+      titlegrp = g.append("g").attr("class", "title").append("text").attr("x", margin.left + width / 2).attr("y", margin.top - titlepos).text(title);
+      g.append("rect").attr("x", margin.left).attr("y", margin.top).attr("height", height).attr("width", function() {
+        if (pad4heatmap) {
+          return data.chrEnd.slice(-1)[0] - margin.left;
+        }
+        return data.chrEnd.slice(-1)[0] - margin.left + chrGap / 2;
+      }).attr("fill", "none").attr("stroke", "black").attr("stroke-width", "none");
+      if (pointsAtMarkers) {
+        hiddenpoints = g.append("g").attr("id", "markerpoints_hidden");
+        markertip = d3.tip().attr('class', 'd3-tip').html(function(d) {
+          return [d.name, " LRS = " + (d3.format('.2f')(d.lod))];
+        }).direction("e").offset([0, 10]);
+        svg.call(markertip);
+        return markerSelect = hiddenpoints.selectAll("empty").data(data.markers).enter().append("circle").attr("cx", function(d) {
+          return xscale[d.chr](d.pos);
+        }).attr("cy", function(d) {
+          return yscale(d.lod);
+        }).attr("id", function(d) {
+          return d.name;
+        }).attr("r", d3.max([pointsize * 2, 3])).attr("opacity", 0).attr("fill", pointhover).attr("stroke", pointstroke).attr("stroke-width", "1").on("mouseover.paneltip", function(d) {
+          d3.select(this).attr("opacity", 1);
+          return markertip.show(d);
+        }).on("mouseout.paneltip", function() {
+          return d3.select(this).attr("opacity", 0).call(markertip.hide);
+        });
+      }
+    });
+  };
+  chart.width = function(value) {
+    if (!arguments.length) {
+      return width;
+    }
+    width = value;
+    return chart;
+  };
+  chart.height = function(value) {
+    if (!arguments.length) {
+      return height;
+    }
+    height = value;
+    return chart;
+  };
+  chart.margin = function(value) {
+    if (!arguments.length) {
+      return margin;
+    }
+    margin = value;
+    return chart;
+  };
+  chart.titlepos = function(value) {
+    if (!arguments.length) {
+      return titlepos;
+    }
+    titlepos;
+    return chart;
+  };
+  chart.axispos = function(value) {
+    if (!arguments.length) {
+      return axispos;
+    }
+    axispos = value;
+    return chart;
+  };
+  chart.ylim = function(value) {
+    if (!arguments.length) {
+      return ylim;
+    }
+    ylim = value;
+    return chart;
+  };
+  chart.nyticks = function(value) {
+    if (!arguments.length) {
+      return nyticks;
+    }
+    nyticks = value;
+    return chart;
+  };
+  chart.yticks = function(value) {
+    if (!arguments.length) {
+      return yticks;
+    }
+    yticks = value;
+    return chart;
+  };
+  chart.chrGap = function(value) {
+    if (!arguments.length) {
+      return chrGap;
+    }
+    chrGap = value;
+    return chart;
+  };
+  chart.darkrect = function(value) {
+    if (!arguments.length) {
+      return darkrect;
+    }
+    darkrect = value;
+    return chart;
+  };
+  chart.lightrect = function(value) {
+    if (!arguments.length) {
+      return lightrect;
+    }
+    lightrect = value;
+    return chart;
+  };
+  chart.linecolor = function(value) {
+    var linecolor;
+    if (!arguments.length) {
+      return linecolor;
+    }
+    linecolor = value;
+    return chart;
+  };
+  chart.linewidth = function(value) {
+    if (!arguments.length) {
+      return linewidth;
+    }
+    linewidth = value;
+    return chart;
+  };
+  chart.pointcolor = function(value) {
+    if (!arguments.length) {
+      return pointcolor;
+    }
+    pointcolor = value;
+    return chart;
+  };
+  chart.pointhover = function(value) {
+    if (!arguments.length) {
+      return pointhover;
+    }
+    pointhover = value;
+    return chart;
+  };
+  chart.pointsize = function(value) {
+    if (!arguments.length) {
+      return pointsize;
+    }
+    pointsize = value;
+    return chart;
+  };
+  chart.pointstroke = function(value) {
+    if (!arguments.length) {
+      return pointstroke;
+    }
+    pointstroke = value;
+    return chart;
+  };
+  chart.title = function(value) {
+    if (!arguments.length) {
+      return title;
+    }
+    title = value;
+    return chart;
+  };
+  chart.xlab = function(value) {
+    if (!arguments.length) {
+      return xlab;
+    }
+    xlab = value;
+    return chart;
+  };
+  chart.ylab = function(value) {
+    if (!arguments.length) {
+      return ylab;
+    }
+    ylab = value;
+    return chart;
+  };
+  chart.rotate_ylab = function(value) {
+    if (!arguments.length) {
+      return rotate_ylab;
+    }
+    rotate_ylab = value;
+    return chart;
+  };
+  chart.lodvarname = function(value) {
+    if (!arguments.length) {
+      return lodvarname;
+    }
+    lodvarname = value;
+    return chart;
+  };
+  chart.pad4heatmap = function(value) {
+    if (!arguments.length) {
+      return pad4heatmap;
+    }
+    pad4heatmap = value;
+    return chart;
+  };
+  chart.pointsAtMarkers = function(value) {
+    if (!arguments.length) {
+      return pointsAtMarkers;
+    }
+    pointsAtMarkers = value;
+    return chart;
+  };
+  chart.yscale = function() {
+    return yscale;
+  };
+  chart.xscale = function() {
+    return xscale;
+  };
+  chart.markerSelect = function() {
+    return markerSelect;
+  };
+  chart.chrSelect = function() {
+    return chrSelect;
+  };
+  return chart;
+};
+
+reorgLodData = function(data, lodvarname) {
+  var chr, i, j, lodcolumn, lodval, marker, pos, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2;
+  if (lodvarname == null) {
+    lodvarname = null;
+  }
+  data.posByChr = {};
+  data.lodByChr = {};
+  _ref = data.chrnames;
+  for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
+    chr = _ref[i];
+    data.posByChr[chr[0]] = [];
+    data.lodByChr[chr[0]] = [];
+    _ref1 = data.pos;
+    for (j = _j = 0, _len1 = _ref1.length; _j < _len1; j = ++_j) {
+      pos = _ref1[j];
+      if (data.chr[j] === chr[0]) {
+        data.posByChr[chr[0]].push(pos);
+        if (!Array.isArray(data.lodnames)) {
+          data.lodnames = [data.lodnames];
+        }
+        lodval = (function() {
+          var _k, _len2, _ref2, _results;
+          _ref2 = data.lodnames;
+          _results = [];
+          for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
+            lodcolumn = _ref2[_k];
+            _results.push(data[lodcolumn][j]);
+          }
+          return _results;
+        })();
+        data.lodByChr[chr[0]].push(lodval);
+      }
+    }
+  }
+  if (lodvarname != null) {
+    data.markers = [];
+    _ref2 = data.markernames;
+    for (i = _k = 0, _len2 = _ref2.length; _k < _len2; i = ++_k) {
+      marker = _ref2[i];
+      if (marker !== "") {
+        data.markers.push({
+          name: marker,
+          chr: data.chr[i],
+          pos: data.pos[i],
+          lod: data[lodvarname][i]
+        });
+      }
+    }
+  }
+  return data;
+};
+
+chrscales = function(data, width, chrGap, leftMargin, pad4heatmap) {
+  var L, chr, chrEnd, chrLength, chrStart, cur, d, i, maxd, rng, totalChrLength, w, _i, _j, _len, _len1, _ref, _ref1;
+  chrStart = [];
+  chrEnd = [];
+  chrLength = [];
+  totalChrLength = 0;
+  maxd = 0;
+  _ref = data.chrnames;
+  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+    chr = _ref[_i];
+    d = maxdiff(data.posByChr[chr[0]]);
+    if (d > maxd) {
+      maxd = d;
+    }
+    rng = d3.extent(data.posByChr[chr[0]]);
+    chrStart.push(rng[0]);
+    chrEnd.push(rng[1]);
+    L = rng[1] - rng[0];
+    chrLength.push(L);
+    totalChrLength += L;
+  }
+  if (pad4heatmap) {
+    data.recwidth = maxd;
+    chrStart = chrStart.map(function(x) {
+      return x - maxd / 2;
+    });
+    chrEnd = chrEnd.map(function(x) {
+      return x + maxd / 2;
+    });
+    chrLength = chrLength.map(function(x) {
+      return x + maxd;
+    });
+    totalChrLength += chrLength.length * maxd;
+  }
+  data.chrStart = [];
+  data.chrEnd = [];
+  cur = leftMargin;
+  if (!pad4heatmap) {
+    cur += chrGap / 2;
+  }
+  data.xscale = {};
+  _ref1 = data.chrnames;
+  for (i = _j = 0, _len1 = _ref1.length; _j < _len1; i = ++_j) {
+    chr = _ref1[i];
+    data.chrStart.push(cur);
+    w = Math.round((width - chrGap * (data.chrnames.length - pad4heatmap)) / totalChrLength * chrLength[i]);
+    data.chrEnd.push(cur + w);
+    cur = data.chrEnd[i] + chrGap;
+    data.xscale[chr[0]] = d3.scale.linear().domain([chrStart[i], chrEnd[i]]).range([data.chrStart[i], data.chrEnd[i]]);
+  }
+  return data;
+};
+
+maxdiff = function(x) {
+  var d, i, result, _i, _ref;
+  if (x.length < 2) {
+    return null;
+  }
+  result = x[1] - x[0];
+  if (x.length < 3) {
+    return result;
+  }
+  for (i = _i = 2, _ref = x.length; 2 <= _ref ? _i < _ref : _i > _ref; i = 2 <= _ref ? ++_i : --_i) {
+    d = x[i] - x[i - 1];
+    if (d > result) {
+      result = d;
+    }
+  }
+  return result;
+};
+
+formatAxis = function(d) {
+  var ndig;
+  d = d[1] - d[0];
+  ndig = Math.floor(Math.log(d % 10) / Math.log(10));
+  if (ndig > 0) {
+    ndig = 0;
+  }
+  ndig = Math.abs(ndig);
+  return d3.format("." + ndig + "f");
+};
diff --git a/wqflask/wqflask/static/new/javascript/marker_regression.coffee b/wqflask/wqflask/static/new/javascript/marker_regression.coffee
index 403ee52a..203c174c 100755
--- a/wqflask/wqflask/static/new/javascript/marker_regression.coffee
+++ b/wqflask/wqflask/static/new/javascript/marker_regression.coffee
@@ -1,6 +1,11 @@
 root = exports ? this
 
-class Manhattan_Plot
+class Manhattan_Plot

+

+    darkrect = "#F1F1F9"

+    lightrect = "#FBFBFF"

+    hoverrect = "#E9CFEC"

+
     constructor: (@height = 800, @width = 1200) ->
         @qtl_results = js_data.qtl_results
         console.log("qtl_results are:", @qtl_results)
@@ -100,7 +105,7 @@ class Manhattan_Plot
         #else
         #    @y_axis_filter = 0
 
-            
+
     create_coordinates: () -> 
         chr_lengths = []
         chr_seen = []
@@ -334,7 +339,9 @@ class Manhattan_Plot
                 return d
             )
             .enter()
-            .append("rect")
+            .append("rect")

+            .attr("id", (d, i) =>

+                return "chr_fill_area_" + i)
             .attr("x", (d, i) =>
                 return @x_scale(d[1] - d[0])
             )
@@ -349,10 +356,27 @@ class Manhattan_Plot
             .attr("height", @height-@y_buffer - @legend_buffer-3)
             .attr("fill", (d, i) =>
                 if (i+1)%2
-                    return "none"
+                    return darkrect
                 else
-                    return "whitesmoke"
-            )
+                    return lightrect
+            )

+            .on("mouseover", (d, i) =>

+                this_id = "chr_fill_area_" + i

+                console.log("this_id:", this_id)

+                d3.select("#" + this_id)

+                    .attr("fill", hoverrect)

+            )

+            .on("mouseout", (d, i) =>

+                this_id = "chr_fill_area_" + i

+                d3.select("#" + this_id)

+                    .attr("fill", () =>

+                        if (i+1)%2

+                            return darkrect

+                        else

+                            return lightrect

+                    )

+            )

+            
             
     #fill_chr_areas2: () ->
     #    console.log("cumu_chr_lengths:", @cumulative_chr_lengths)
@@ -419,7 +443,6 @@ class Manhattan_Plot
             .attr("cursor", "pointer")
             .attr("fill", "black")
             .on("click", (d) =>
-                this_chr = d
                 @redraw_plot(d)
             )
 
diff --git a/wqflask/wqflask/static/new/javascript/marker_regression.js b/wqflask/wqflask/static/new/javascript/marker_regression.js
index 8c235189..1fcee9fd 100755
--- a/wqflask/wqflask/static/new/javascript/marker_regression.js
+++ b/wqflask/wqflask/static/new/javascript/marker_regression.js
@@ -1,235 +1,247 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var Manhattan_Plot, root,
-    __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; };
-
-  root = typeof exports !== "undefined" && exports !== null ? exports : this;
-
-  Manhattan_Plot = (function() {
-
-    function Manhattan_Plot(height, width) {
-      var _ref;
-      this.height = height != null ? height : 800;
-      this.width = width != null ? width : 1200;
-      this.qtl_results = js_data.qtl_results;
-      console.log("qtl_results are:", this.qtl_results);
-      this.chromosomes = js_data.chromosomes;
-      console.log("chromosomes are:", this.chromosomes);
-      this.this_trait = js_data.this_trait;
-      this.data_set = js_data.data_set;
-      this.maf = js_data.maf;
-      this.total_length = 0;
-      this.max_chr = this.get_max_chr();
-      this.x_coords = [];
-      this.y_coords = [];
-      this.marker_names = [];
-      console.time('Create coordinates');
-      this.get_qtl_count();
-      this.create_coordinates();
-      console.log("@x_coords: ", this.x_coords);
-      console.log("@y_coords: ", this.y_coords);
-      console.timeEnd('Create coordinates');
-      _ref = this.get_chr_lengths(), this.chr_lengths = _ref[0], this.cumulative_chr_lengths = _ref[1];
-      this.x_buffer = this.width / 30;
-      this.y_buffer = this.height / 20;
-      this.legend_buffer = 30;
-      this.x_max = this.total_length;
-      console.log("@x_max: ", this.x_max);
-      console.log("@x_buffer: ", this.x_buffer);
-      this.y_max = d3.max(this.y_coords) * 1.2;
-      this.svg = this.create_svg();
-      console.log("svg created");
-      this.plot_coordinates = _.zip(this.x_coords, this.y_coords, this.marker_names);
-      console.log("coordinates:", this.plot_coordinates);
-      this.height -= this.y_buffer;
-      this.create_scales();
-      console.time('Create graph');
-      this.create_graph();
-      console.timeEnd('Create graph');
-    }
+// Generated by CoffeeScript 1.7.1
+var Manhattan_Plot, root,
+  __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; };
 
-    Manhattan_Plot.prototype.get_max_chr = function() {
-      var chr, max_chr, result, _i, _len, _ref;
-      max_chr = 0;
-      _ref = this.qtl_results;
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        result = _ref[_i];
-        chr = parseInt(result.chr);
-        if (!_.isNaN(chr)) {
-          if (chr > max_chr) {
-            max_chr = chr;
-          }
+root = typeof exports !== "undefined" && exports !== null ? exports : this;
+
+Manhattan_Plot = (function() {
+  var darkrect, hoverrect, lightrect;
+
+  darkrect = "#F1F1F9";
+
+  lightrect = "#FBFBFF";
+
+  hoverrect = "#E9CFEC";
+
+  function Manhattan_Plot(height, width) {
+    var _ref;
+    this.height = height != null ? height : 800;
+    this.width = width != null ? width : 1200;
+    this.qtl_results = js_data.qtl_results;
+    console.log("qtl_results are:", this.qtl_results);
+    this.chromosomes = js_data.chromosomes;
+    console.log("chromosomes are:", this.chromosomes);
+    this.this_trait = js_data.this_trait;
+    this.data_set = js_data.data_set;
+    this.maf = js_data.maf;
+    this.total_length = 0;
+    this.max_chr = this.get_max_chr();
+    this.x_coords = [];
+    this.y_coords = [];
+    this.marker_names = [];
+    console.time('Create coordinates');
+    this.get_qtl_count();
+    this.create_coordinates();
+    console.log("@x_coords: ", this.x_coords);
+    console.log("@y_coords: ", this.y_coords);
+    console.timeEnd('Create coordinates');
+    _ref = this.get_chr_lengths(), this.chr_lengths = _ref[0], this.cumulative_chr_lengths = _ref[1];
+    this.x_buffer = this.width / 30;
+    this.y_buffer = this.height / 20;
+    this.legend_buffer = 30;
+    this.x_max = this.total_length;
+    console.log("@x_max: ", this.x_max);
+    console.log("@x_buffer: ", this.x_buffer);
+    this.y_max = d3.max(this.y_coords) * 1.2;
+    this.svg = this.create_svg();
+    console.log("svg created");
+    this.plot_coordinates = _.zip(this.x_coords, this.y_coords, this.marker_names);
+    console.log("coordinates:", this.plot_coordinates);
+    this.height -= this.y_buffer;
+    this.create_scales();
+    console.time('Create graph');
+    this.create_graph();
+    console.timeEnd('Create graph');
+  }
+
+  Manhattan_Plot.prototype.get_max_chr = function() {
+    var chr, max_chr, result, _i, _len, _ref;
+    max_chr = 0;
+    _ref = this.qtl_results;
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      result = _ref[_i];
+      chr = parseInt(result.chr);
+      if (!_.isNaN(chr)) {
+        if (chr > max_chr) {
+          max_chr = chr;
         }
       }
-      console.log("max_chr", max_chr);
-      return max_chr;
-    };
-
-    Manhattan_Plot.prototype.get_chr_lengths = function() {
-      /*
-      #Gets a list of both individual and cumulative (the position of one on the graph
-      #is its own length plus the lengths of all preceding chromosomes) lengths in order
-      #to draw the vertical lines separating chromosomes and the chromosome labels
-      #
-      */
-
-      var chr_lengths, cumulative_chr_lengths, key, this_length, total_length;
-      cumulative_chr_lengths = [];
-      chr_lengths = [];
-      total_length = 0;
-      for (key in this.chromosomes) {
-        this_length = this.chromosomes[key];
-        chr_lengths.push(this_length);
-        cumulative_chr_lengths.push(total_length + this_length);
-        total_length += this_length;
+    }
+    console.log("max_chr", max_chr);
+    return max_chr;
+  };
+
+  Manhattan_Plot.prototype.get_chr_lengths = function() {
+
+    /*
+     *Gets a list of both individual and cumulative (the position of one on the graph
+     *is its own length plus the lengths of all preceding chromosomes) lengths in order
+     *to draw the vertical lines separating chromosomes and the chromosome labels
+     *
+     */
+    var chr_lengths, cumulative_chr_lengths, key, this_length, total_length;
+    cumulative_chr_lengths = [];
+    chr_lengths = [];
+    total_length = 0;
+    for (key in this.chromosomes) {
+      this_length = this.chromosomes[key];
+      chr_lengths.push(this_length);
+      cumulative_chr_lengths.push(total_length + this_length);
+      total_length += this_length;
+    }
+    console.log("chr_lengths: ", chr_lengths);
+    return [chr_lengths, cumulative_chr_lengths];
+  };
+
+  Manhattan_Plot.prototype.get_qtl_count = function() {
+    var high_qtl_count, result, _i, _len, _ref;
+    high_qtl_count = 0;
+    _ref = js_data.qtl_results;
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      result = _ref[_i];
+      if (result.lod_score > 1) {
+        high_qtl_count += 1;
       }
-      console.log("chr_lengths: ", chr_lengths);
-      return [chr_lengths, cumulative_chr_lengths];
-    };
-
-    Manhattan_Plot.prototype.get_qtl_count = function() {
-      var high_qtl_count, result, _i, _len, _ref;
-      high_qtl_count = 0;
-      _ref = js_data.qtl_results;
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        result = _ref[_i];
-        if (result.lod_score > 1) {
-          high_qtl_count += 1;
-        }
+    }
+    console.log("high_qtl_count:", high_qtl_count);
+    return this.y_axis_filter = 0;
+  };
+
+  Manhattan_Plot.prototype.create_coordinates = function() {
+    var chr_length, chr_lengths, chr_seen, result, _i, _len, _ref, _ref1;
+    chr_lengths = [];
+    chr_seen = [];
+    _ref = js_data.qtl_results;
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      result = _ref[_i];
+      if (result.chr === "X") {
+        chr_length = parseFloat(this.chromosomes[13]);
+      } else {
+        chr_length = parseFloat(this.chromosomes[result.chr]);
       }
-      console.log("high_qtl_count:", high_qtl_count);
-      return this.y_axis_filter = 0;
-    };
-
-    Manhattan_Plot.prototype.create_coordinates = function() {
-      var chr_length, chr_lengths, chr_seen, result, _i, _len, _ref, _ref1;
-      chr_lengths = [];
-      chr_seen = [];
-      _ref = js_data.qtl_results;
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        result = _ref[_i];
-        if (result.chr === "X") {
-          chr_length = parseFloat(this.chromosomes[13]);
-        } else {
-          chr_length = parseFloat(this.chromosomes[result.chr]);
-        }
-        if (!(_ref1 = result.chr, __indexOf.call(chr_seen, _ref1) >= 0)) {
-          chr_seen.push(result.chr);
-          chr_lengths.push(chr_length);
-          console.log("result.chr:", result.chr);
-          console.log("total_length:", this.total_length);
-          if (parseInt(result.chr) !== 1) {
-            console.log("plus:", chr_lengths.length - 2);
-            console.log("chr_lengths.length", chr_lengths.length);
-            this.total_length += parseFloat(chr_lengths[chr_lengths.length - 2]);
-          }
-        }
-        if (result.lod_score > this.y_axis_filter) {
-          this.x_coords.push(this.total_length + parseFloat(result.Mb));
-          this.y_coords.push(result.lod_score);
-          this.marker_names.push(result.name);
+      if (!(_ref1 = result.chr, __indexOf.call(chr_seen, _ref1) >= 0)) {
+        chr_seen.push(result.chr);
+        chr_lengths.push(chr_length);
+        console.log("result.chr:", result.chr);
+        console.log("total_length:", this.total_length);
+        if (parseInt(result.chr) !== 1) {
+          console.log("plus:", chr_lengths.length - 2);
+          console.log("chr_lengths.length", chr_lengths.length);
+          this.total_length += parseFloat(chr_lengths[chr_lengths.length - 2]);
         }
       }
-      return this.total_length += parseFloat(chr_lengths[chr_lengths.length - 1]);
-    };
-
-    Manhattan_Plot.prototype.show_marker_in_table = function(marker_info) {
-      var marker_name;
-      console.log("in show_marker_in_table");
-      /* Searches for the select marker in the results table below
-      */
-
-      if (marker_info) {
-        marker_name = marker_info[2];
-        return $("#qtl_results_filter").find("input:first").val(marker_name).trigger('change');
+      if (result.lod_score > this.y_axis_filter) {
+        this.x_coords.push(this.total_length + parseFloat(result.Mb));
+        this.y_coords.push(result.lod_score);
+        this.marker_names.push(result.name);
       }
-    };
-
-    Manhattan_Plot.prototype.create_svg = function() {
-      var svg;
-      svg = d3.select("#manhattan_plot").append("svg").attr("class", "manhattan_plot").attr("width", this.width + this.x_buffer).attr("height", this.height + this.y_buffer).append("g");
-      return svg;
-    };
-
-    Manhattan_Plot.prototype.create_graph = function() {
-      this.create_legend();
-      this.add_border();
-      this.add_x_axis();
-      this.add_y_axis();
-      this.add_axis_labels();
-      this.add_chr_lines();
-      this.fill_chr_areas();
-      this.add_chr_labels();
-      return this.add_plot_points();
-    };
-
-    Manhattan_Plot.prototype.create_legend = function() {
-      this.svg.append("text").attr("class", "legend").text("Trait: " + this.this_trait + " : " + this.data_set).attr("x", this.x_buffer).attr("y", 20).attr("dx", "0em").attr("text-anchor", "left").attr("font-family", "sans-serif").attr("font-size", "16px").attr("fill", "black");
-      return this.svg.append("text").attr("class", "legend").text("MAF: " + this.maf).attr("x", this.x_buffer).attr("y", 38).attr("dx", "0em").attr("text-anchor", "left").attr("font-family", "sans-serif").attr("font-size", "16px").attr("fill", "black");
-    };
-
-    Manhattan_Plot.prototype.add_border = function() {
-      var border_coords,
-        _this = this;
-      border_coords = [[this.y_buffer + this.legend_buffer, this.height, this.x_buffer, this.x_buffer], [this.y_buffer + this.legend_buffer, this.height, this.width, this.width], [this.y_buffer + this.legend_buffer, this.y_buffer + this.legend_buffer, this.x_buffer, this.width], [this.height, this.height, this.x_buffer, this.width]];
-      return this.svg.selectAll("line").data(border_coords).enter().append("line").attr("y1", function(d) {
+    }
+    return this.total_length += parseFloat(chr_lengths[chr_lengths.length - 1]);
+  };
+
+  Manhattan_Plot.prototype.show_marker_in_table = function(marker_info) {
+    var marker_name;
+    console.log("in show_marker_in_table");
+
+    /* Searches for the select marker in the results table below */
+    if (marker_info) {
+      marker_name = marker_info[2];
+      return $("#qtl_results_filter").find("input:first").val(marker_name).trigger('change');
+    }
+  };
+
+  Manhattan_Plot.prototype.create_svg = function() {
+    var svg;
+    svg = d3.select("#manhattan_plot").append("svg").attr("class", "manhattan_plot").attr("width", this.width + this.x_buffer).attr("height", this.height + this.y_buffer).append("g");
+    return svg;
+  };
+
+  Manhattan_Plot.prototype.create_graph = function() {
+    this.create_legend();
+    this.add_border();
+    this.add_x_axis();
+    this.add_y_axis();
+    this.add_axis_labels();
+    this.add_chr_lines();
+    this.fill_chr_areas();
+    this.add_chr_labels();
+    return this.add_plot_points();
+  };
+
+  Manhattan_Plot.prototype.create_legend = function() {
+    this.svg.append("text").attr("class", "legend").text("Trait: " + this.this_trait + " : " + this.data_set).attr("x", this.x_buffer).attr("y", 20).attr("dx", "0em").attr("text-anchor", "left").attr("font-family", "sans-serif").attr("font-size", "16px").attr("fill", "black");
+    return this.svg.append("text").attr("class", "legend").text("MAF: " + this.maf).attr("x", this.x_buffer).attr("y", 38).attr("dx", "0em").attr("text-anchor", "left").attr("font-family", "sans-serif").attr("font-size", "16px").attr("fill", "black");
+  };
+
+  Manhattan_Plot.prototype.add_border = function() {
+    var border_coords;
+    border_coords = [[this.y_buffer + this.legend_buffer, this.height, this.x_buffer, this.x_buffer], [this.y_buffer + this.legend_buffer, this.height, this.width, this.width], [this.y_buffer + this.legend_buffer, this.y_buffer + this.legend_buffer, this.x_buffer, this.width], [this.height, this.height, this.x_buffer, this.width]];
+    return this.svg.selectAll("line").data(border_coords).enter().append("line").attr("y1", (function(_this) {
+      return function(d) {
         return d[0];
-      }).attr("y2", function(d) {
+      };
+    })(this)).attr("y2", (function(_this) {
+      return function(d) {
         return d[1];
-      }).attr("x1", function(d) {
+      };
+    })(this)).attr("x1", (function(_this) {
+      return function(d) {
         return d[2];
-      }).attr("x2", function(d) {
+      };
+    })(this)).attr("x2", (function(_this) {
+      return function(d) {
         return d[3];
-      }).style("stroke", "#000");
-    };
-
-    Manhattan_Plot.prototype.create_scales = function() {
-      console.log("y_axis_filter:", this.y_axis_filter);
-      if ('24' in this.chromosomes) {
-        console.log("@chromosomes[24]:", this.chromosomes['24']);
-        console.log("@chromosomes[23]:", this.chromosomes['23']);
-        console.log("@total_length:", this.total_length);
-        console.log("d3.max(@xcoords):", d3.max(this.x_coords));
-        this.x_scale = d3.scale.linear().domain([0, this.total_length + this.chromosomes['24']]).range([this.x_buffer, this.width]);
-      } else {
-        this.x_scale = d3.scale.linear().domain([0, this.total_length + this.chromosomes['20']]).range([this.x_buffer, this.width]);
+      };
+    })(this)).style("stroke", "#000");
+  };
+
+  Manhattan_Plot.prototype.create_scales = function() {
+    console.log("y_axis_filter:", this.y_axis_filter);
+    if ('24' in this.chromosomes) {
+      console.log("@chromosomes[24]:", this.chromosomes['24']);
+      console.log("@chromosomes[23]:", this.chromosomes['23']);
+      console.log("@total_length:", this.total_length);
+      console.log("d3.max(@xcoords):", d3.max(this.x_coords));
+      this.x_scale = d3.scale.linear().domain([0, this.total_length + this.chromosomes['24']]).range([this.x_buffer, this.width]);
+    } else {
+      this.x_scale = d3.scale.linear().domain([0, this.total_length + this.chromosomes['20']]).range([this.x_buffer, this.width]);
+    }
+    return this.y_scale = d3.scale.linear().domain([this.y_axis_filter, this.y_max]).range([this.height, this.y_buffer + this.legend_buffer]);
+  };
+
+  Manhattan_Plot.prototype.create_x_axis_tick_values = function() {
+    var chr_ticks, i, length, tick, tick_count, tick_val, tick_vals, val, _i, _j, _k, _len, _ref, _ref1, _ref2;
+    tick_vals = [];
+    for (val = _i = 25, _ref = this.cumulative_chr_lengths[0]; 25 <= _ref ? _i <= _ref : _i >= _ref; val = 25 <= _ref ? ++_i : --_i) {
+      if (val % 25 === 0) {
+        tick_vals.push(val);
       }
-      return this.y_scale = d3.scale.linear().domain([this.y_axis_filter, this.y_max]).range([this.height, this.y_buffer + this.legend_buffer]);
-    };
-
-    Manhattan_Plot.prototype.create_x_axis_tick_values = function() {
-      var chr_ticks, i, length, tick, tick_count, tick_val, tick_vals, val, _i, _j, _k, _len, _ref, _ref1, _ref2;
-      tick_vals = [];
-      for (val = _i = 25, _ref = this.cumulative_chr_lengths[0]; 25 <= _ref ? _i <= _ref : _i >= _ref; val = 25 <= _ref ? ++_i : --_i) {
-        if (val % 25 === 0) {
-          tick_vals.push(val);
-        }
+    }
+    _ref1 = this.cumulative_chr_lengths;
+    for (i = _j = 0, _len = _ref1.length; _j < _len; i = ++_j) {
+      length = _ref1[i];
+      if (i === 0) {
+        continue;
       }
-      _ref1 = this.cumulative_chr_lengths;
-      for (i = _j = 0, _len = _ref1.length; _j < _len; i = ++_j) {
-        length = _ref1[i];
-        if (i === 0) {
-          continue;
-        }
-        chr_ticks = [];
-        tick_count = Math.floor(this.chr_lengths[i] / 25);
-        tick_val = parseInt(this.cumulative_chr_lengths[i - 1]);
-        for (tick = _k = 0, _ref2 = tick_count - 1; 0 <= _ref2 ? _k <= _ref2 : _k >= _ref2; tick = 0 <= _ref2 ? ++_k : --_k) {
-          tick_val += 25;
-          chr_ticks.push(tick_val);
-        }
-        Array.prototype.push.apply(tick_vals, chr_ticks);
+      chr_ticks = [];
+      tick_count = Math.floor(this.chr_lengths[i] / 25);
+      tick_val = parseInt(this.cumulative_chr_lengths[i - 1]);
+      for (tick = _k = 0, _ref2 = tick_count - 1; 0 <= _ref2 ? _k <= _ref2 : _k >= _ref2; tick = 0 <= _ref2 ? ++_k : --_k) {
+        tick_val += 25;
+        chr_ticks.push(tick_val);
       }
-      return tick_vals;
-    };
-
-    Manhattan_Plot.prototype.add_x_axis = function() {
-      var next_chr, tmp_tick_val,
-        _this = this;
-      this.xAxis = d3.svg.axis().scale(this.x_scale).orient("bottom").tickValues(this.create_x_axis_tick_values());
-      next_chr = 1;
-      tmp_tick_val = 0;
-      this.xAxis.tickFormat(function(d) {
+      Array.prototype.push.apply(tick_vals, chr_ticks);
+    }
+    return tick_vals;
+  };
+
+  Manhattan_Plot.prototype.add_x_axis = function() {
+    var next_chr, tmp_tick_val;
+    this.xAxis = d3.svg.axis().scale(this.x_scale).orient("bottom").tickValues(this.create_x_axis_tick_values());
+    next_chr = 1;
+    tmp_tick_val = 0;
+    this.xAxis.tickFormat((function(_this) {
+      return function(d) {
         var next_chr_length, tick_val;
         d3.format("d");
         if (d < _this.cumulative_chr_lengths[0]) {
@@ -246,63 +258,99 @@
           }
         }
         return tick_val;
-      });
-      return this.svg.append("g").attr("class", "x_axis").attr("transform", "translate(0," + this.height + ")").call(this.xAxis).selectAll("text").attr("text-anchor", "right").attr("dx", "-1.6em").attr("transform", function(d) {
+      };
+    })(this));
+    return this.svg.append("g").attr("class", "x_axis").attr("transform", "translate(0," + this.height + ")").call(this.xAxis).selectAll("text").attr("text-anchor", "right").attr("dx", "-1.6em").attr("transform", (function(_this) {
+      return function(d) {
         return "translate(-12,0) rotate(-90)";
-      });
-    };
+      };
+    })(this));
+  };
 
-    Manhattan_Plot.prototype.add_y_axis = function() {
-      this.yAxis = d3.svg.axis().scale(this.y_scale).orient("left").ticks(5);
-      return this.svg.append("g").attr("class", "y_axis").attr("transform", "translate(" + this.x_buffer + ",0)").call(this.yAxis);
-    };
+  Manhattan_Plot.prototype.add_y_axis = function() {
+    this.yAxis = d3.svg.axis().scale(this.y_scale).orient("left").ticks(5);
+    return this.svg.append("g").attr("class", "y_axis").attr("transform", "translate(" + this.x_buffer + ",0)").call(this.yAxis);
+  };
 
-    Manhattan_Plot.prototype.add_axis_labels = function() {
-      return this.svg.append("text").attr("transform", "rotate(-90)").attr("y", 0 - (this.height / 2)).attr("x", this.x_buffer).attr("dy", "1em").style("text-anchor", "middle").text("LOD Score");
-    };
+  Manhattan_Plot.prototype.add_axis_labels = function() {
+    return this.svg.append("text").attr("transform", "rotate(-90)").attr("y", 0 - (this.height / 2)).attr("x", this.x_buffer).attr("dy", "1em").style("text-anchor", "middle").text("LOD Score");
+  };
 
-    Manhattan_Plot.prototype.add_chr_lines = function() {
-      var _this = this;
-      return this.svg.selectAll("line").data(this.cumulative_chr_lengths, function(d) {
+  Manhattan_Plot.prototype.add_chr_lines = function() {
+    return this.svg.selectAll("line").data(this.cumulative_chr_lengths, (function(_this) {
+      return function(d) {
         return d;
-      }).enter().append("line").attr("x1", this.x_scale).attr("x2", this.x_scale).attr("y1", this.y_buffer + this.legend_buffer).attr("y2", this.height).style("stroke", "#ccc");
-    };
-
-    Manhattan_Plot.prototype.fill_chr_areas = function() {
-      var _this = this;
-      console.log("cumu_chr_lengths:", this.cumulative_chr_lengths);
-      console.log("example:", this.x_scale(this.cumulative_chr_lengths[0]));
-      return this.svg.selectAll("rect.chr_fill_area").data(_.zip(this.chr_lengths, this.cumulative_chr_lengths), function(d) {
+      };
+    })(this)).enter().append("line").attr("x1", this.x_scale).attr("x2", this.x_scale).attr("y1", this.y_buffer + this.legend_buffer).attr("y2", this.height).style("stroke", "#ccc");
+  };
+
+  Manhattan_Plot.prototype.fill_chr_areas = function() {
+    console.log("cumu_chr_lengths:", this.cumulative_chr_lengths);
+    console.log("example:", this.x_scale(this.cumulative_chr_lengths[0]));
+    return this.svg.selectAll("rect.chr_fill_area").data(_.zip(this.chr_lengths, this.cumulative_chr_lengths), (function(_this) {
+      return function(d) {
         return d;
-      }).enter().append("rect").attr("x", function(d, i) {
+      };
+    })(this)).enter().append("rect").attr("id", (function(_this) {
+      return function(d, i) {
+        return "chr_fill_area_" + i;
+      };
+    })(this)).attr("x", (function(_this) {
+      return function(d, i) {
         return _this.x_scale(d[1] - d[0]);
-      }).attr("y", this.y_buffer + this.legend_buffer + 2).attr("width", function(d, i) {
+      };
+    })(this)).attr("y", this.y_buffer + this.legend_buffer + 2).attr("width", (function(_this) {
+      return function(d, i) {
         var ending, starting, width;
         starting = _this.x_scale(d[1] - d[0]);
         ending = _this.x_scale(_this.cumulative_chr_lengths[i]);
         width = ending - starting;
         console.log("width:", d[0]);
         return width;
-      }).attr("height", this.height - this.y_buffer - this.legend_buffer - 3).attr("fill", function(d, i) {
+      };
+    })(this)).attr("height", this.height - this.y_buffer - this.legend_buffer - 3).attr("fill", (function(_this) {
+      return function(d, i) {
         if ((i + 1) % 2) {
-          return "none";
+          return darkrect;
         } else {
-          return "whitesmoke";
+          return lightrect;
         }
-      });
-    };
-
-    Manhattan_Plot.prototype.add_chr_labels = function() {
-      var chr_info, chr_names, key,
-        _this = this;
-      chr_names = [];
-      for (key in this.chromosomes) {
-        chr_names.push(key);
-      }
-      chr_info = _.zip(chr_names, this.chr_lengths, this.cumulative_chr_lengths);
-      return this.svg.selectAll("text").data(chr_info, function(d) {
+      };
+    })(this)).on("mouseover", (function(_this) {
+      return function(d, i) {
+        var this_id;
+        this_id = "chr_fill_area_" + i;
+        console.log("this_id:", this_id);
+        return d3.select("#" + this_id).attr("fill", hoverrect);
+      };
+    })(this)).on("mouseout", (function(_this) {
+      return function(d, i) {
+        var this_id;
+        this_id = "chr_fill_area_" + i;
+        return d3.select("#" + this_id).attr("fill", function() {
+          if ((i + 1) % 2) {
+            return darkrect;
+          } else {
+            return lightrect;
+          }
+        });
+      };
+    })(this));
+  };
+
+  Manhattan_Plot.prototype.add_chr_labels = function() {
+    var chr_info, chr_names, key;
+    chr_names = [];
+    for (key in this.chromosomes) {
+      chr_names.push(key);
+    }
+    chr_info = _.zip(chr_names, this.chr_lengths, this.cumulative_chr_lengths);
+    return this.svg.selectAll("text").data(chr_info, (function(_this) {
+      return function(d) {
         return d;
-      }).enter().append("text").attr("class", "chr_label").text(function(d) {
+      };
+    })(this)).enter().append("text").attr("class", "chr_label").text((function(_this) {
+      return function(d) {
         if (_this.max_chr === 23) {
           if (d[0] === "23") {
             return "X";
@@ -318,34 +366,49 @@
             return d[0];
           }
         }
-      }).attr("x", function(d) {
+      };
+    })(this)).attr("x", (function(_this) {
+      return function(d) {
         return _this.x_scale(d[2] - d[1] / 2);
-      }).attr("y", this.height * 0.1 + this.legend_buffer).attr("dx", "0em").attr("text-anchor", "middle").attr("font-family", "sans-serif").attr("font-size", "18px").attr("cursor", "pointer").attr("fill", "black").on("click", function(d) {
-        var this_chr;
-        this_chr = d;
+      };
+    })(this)).attr("y", this.height * 0.1 + this.legend_buffer).attr("dx", "0em").attr("text-anchor", "middle").attr("font-family", "sans-serif").attr("font-size", "18px").attr("cursor", "pointer").attr("fill", "black").on("click", (function(_this) {
+      return function(d) {
         return _this.redraw_plot(d);
-      });
-    };
+      };
+    })(this));
+  };
 
-    Manhattan_Plot.prototype.add_plot_points = function() {
-      var _this = this;
-      return this.plot_point = this.svg.selectAll("circle").data(this.plot_coordinates).enter().append("circle").attr("cx", function(d) {
+  Manhattan_Plot.prototype.add_plot_points = function() {
+    return this.plot_point = this.svg.selectAll("circle").data(this.plot_coordinates).enter().append("circle").attr("cx", (function(_this) {
+      return function(d) {
         return _this.x_scale(d[0]);
-      }).attr("cy", function(d) {
+      };
+    })(this)).attr("cy", (function(_this) {
+      return function(d) {
         return _this.y_scale(d[1]);
-      }).attr("r", function(d) {
+      };
+    })(this)).attr("r", (function(_this) {
+      return function(d) {
         return 2;
-      }).attr("fill", function(d) {
+      };
+    })(this)).attr("fill", (function(_this) {
+      return function(d) {
         return "black";
-      }).attr("stroke", "black").attr("stroke-width", "1").attr("id", function(d) {
+      };
+    })(this)).attr("stroke", "black").attr("stroke-width", "1").attr("id", (function(_this) {
+      return function(d) {
         return "point_" + String(d[2]);
-      }).classed("circle", true).on("mouseover", function(d) {
+      };
+    })(this)).classed("circle", true).on("mouseover", (function(_this) {
+      return function(d) {
         var this_id;
         console.log("d3.event is:", d3.event);
         console.log("d is:", d);
         this_id = "point_" + String(d[2]);
         return d3.select("#" + this_id).classed("d3_highlight", true).attr("r", 5).attr("stroke", "none").attr("fill", "blue").call(_this.show_marker_in_table(d));
-      }).on("mouseout", function(d) {
+      };
+    })(this)).on("mouseout", (function(_this) {
+      return function(d) {
         var this_id;
         this_id = "point_" + String(d[2]);
         return d3.select("#" + this_id).classed("d3_highlight", false).attr("r", function(d) {
@@ -353,38 +416,39 @@
         }).attr("fill", function(d) {
           return "black";
         }).attr("stroke", "black").attr("stroke-width", "1");
-      }).append("svg:title").text(function(d) {
+      };
+    })(this)).append("svg:title").text((function(_this) {
+      return function(d) {
         return d[2];
-      });
-    };
-
-    Manhattan_Plot.prototype.redraw_plot = function(chr_ob) {
-      console.log("chr_name is:", chr_ob[0]);
-      console.log("chr_length is:", chr_ob[1]);
-      $('#manhattan_plot').remove();
-      $('#manhattan_plot_container').append('<div id="manhattan_plot"></div>');
-      return root.chr_plot = new Chr_Manhattan_Plot(600, 1200, chr_ob);
-    };
+      };
+    })(this));
+  };
 
-    Manhattan_Plot.prototype.create_zoom_pane = function() {
-      var zoom;
-      zoom = d3.behavior.zoom().on("zoom", draw);
-      return this.svg.append("rect").attr("class", "pane").attr("width", this.width).attr("height", this.height).call(zoom);
-    };
+  Manhattan_Plot.prototype.redraw_plot = function(chr_ob) {
+    console.log("chr_name is:", chr_ob[0]);
+    console.log("chr_length is:", chr_ob[1]);
+    $('#manhattan_plot').remove();
+    $('#manhattan_plot_container').append('<div id="manhattan_plot"></div>');
+    return root.chr_plot = new Chr_Manhattan_Plot(600, 1200, chr_ob);
+  };
 
-    Manhattan_Plot.prototype.draw = function() {
-      this.svg.select("g.x_axis").call(this.xAxis);
-      this.svg.select("g.y_axis").call(this.yAxis);
-      this.svg.select("path.area").attr("d", area);
-      return this.svg.select("path.line").attr("d", line);
-    };
+  Manhattan_Plot.prototype.create_zoom_pane = function() {
+    var zoom;
+    zoom = d3.behavior.zoom().on("zoom", draw);
+    return this.svg.append("rect").attr("class", "pane").attr("width", this.width).attr("height", this.height).call(zoom);
+  };
 
-    return Manhattan_Plot;
+  Manhattan_Plot.prototype.draw = function() {
+    this.svg.select("g.x_axis").call(this.xAxis);
+    this.svg.select("g.y_axis").call(this.yAxis);
+    this.svg.select("path.area").attr("d", area);
+    return this.svg.select("path.line").attr("d", line);
+  };
 
-  })();
+  return Manhattan_Plot;
 
-  root.Manhattan_Plot = Manhattan_Plot;
+})();
 
-  new Manhattan_Plot(600, 1200);
+root.Manhattan_Plot = Manhattan_Plot;
 
-}).call(this);
+new Manhattan_Plot(600, 1200);
diff --git a/wqflask/wqflask/static/new/javascript/marker_regression_old.js b/wqflask/wqflask/static/new/javascript/marker_regression_old.js
index 5dd5b508..9a618e80 100755
--- a/wqflask/wqflask/static/new/javascript/marker_regression_old.js
+++ b/wqflask/wqflask/static/new/javascript/marker_regression_old.js
@@ -1,226 +1,218 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-
-  $(function() {
-    var Chromosome, Manhattan_Plot, Permutation_Histogram, sort_number;
-    sort_number = function(a, b) {
-      return a - b;
-    };
-    Permutation_Histogram = (function() {
-
-      function Permutation_Histogram() {
-        this.process_data();
-        this.display_graph();
-      }
-
-      Permutation_Histogram.prototype.process_data = function() {
-        var bars, floored, key, keys, lrs, lrs_array, _i, _j, _len, _len1;
-        lrs_array = js_data.lrs_array;
-        bars = {};
-        for (_i = 0, _len = lrs_array.length; _i < _len; _i++) {
-          lrs = lrs_array[_i];
-          floored = Math.floor(lrs);
-          if (!(floored in bars)) {
-            bars[floored] = 0;
-          }
-          bars[floored] += 1;
-        }
-        keys = [];
-        for (key in bars) {
-          keys.push(key);
-        }
-        keys.sort(sort_number);
-        this.bars_ordered = [];
-        for (_j = 0, _len1 = keys.length; _j < _len1; _j++) {
-          key = keys[_j];
-          this.bars_ordered.push([parseInt(key), bars[key]]);
+// Generated by CoffeeScript 1.7.1
+$(function() {
+  var Chromosome, Manhattan_Plot, Permutation_Histogram, sort_number;
+  sort_number = function(a, b) {
+    return a - b;
+  };
+  Permutation_Histogram = (function() {
+    function Permutation_Histogram() {
+      this.process_data();
+      this.display_graph();
+    }
+
+    Permutation_Histogram.prototype.process_data = function() {
+      var bars, floored, key, keys, lrs, lrs_array, _i, _j, _len, _len1;
+      lrs_array = js_data.lrs_array;
+      bars = {};
+      for (_i = 0, _len = lrs_array.length; _i < _len; _i++) {
+        lrs = lrs_array[_i];
+        floored = Math.floor(lrs);
+        if (!(floored in bars)) {
+          bars[floored] = 0;
         }
-        console.log("bars is:", bars);
-        console.log("keys are:", keys);
-        return console.log("bars_ordered are:", this.bars_ordered);
-      };
-
-      Permutation_Histogram.prototype.display_graph = function() {
-        return $.jqplot('permutation_histogram', [this.bars_ordered], {
-          title: 'Permutation Histogram',
-          seriesDefaults: {
-            renderer: $.jqplot.BarRenderer,
-            rendererOptions: {
-              barWidth: 15
-            },
-            pointLabels: {
-              show: true
-            }
-          },
-          axesDefaults: {
-            labelRenderer: $.jqplot.CanvasAxisLabelRenderer
-          },
-          axes: {
-            xaxis: {
-              min: 0,
-              label: "LRS",
-              pad: 1.1
-            },
-            yaxis: {
-              min: 0,
-              label: "Frequency"
-            }
-          }
-        });
-      };
-
-      return Permutation_Histogram;
-
-    })();
-    Chromosome = (function() {
-
-      function Chromosome(name) {
-        this.name = name;
-        this.max_mb = 0;
-        this.plot_points = [];
+        bars[floored] += 1;
       }
+      keys = [];
+      for (key in bars) {
+        keys.push(key);
+      }
+      keys.sort(sort_number);
+      this.bars_ordered = [];
+      for (_j = 0, _len1 = keys.length; _j < _len1; _j++) {
+        key = keys[_j];
+        this.bars_ordered.push([parseInt(key), bars[key]]);
+      }
+      console.log("bars is:", bars);
+      console.log("keys are:", keys);
+      return console.log("bars_ordered are:", this.bars_ordered);
+    };
 
-      Chromosome.prototype.process_point = function(mb, lrs) {
-        if (mb > this.max_mb) {
-          this.max_mb = mb;
-        }
-        return this.plot_points.push([mb, lrs]);
-      };
-
-      Chromosome.prototype.display_graph = function(max_lrs) {
-        var div_name, plot_options, x_axis_max, x_axis_ticks, x_tick;
-        div_name = 'manhattan_plot_' + this.name;
-        console.log("div_name:", div_name);
-        x_axis_max = Math.ceil(this.max_mb / 25) * 25;
-        x_axis_ticks = [];
-        x_tick = 0;
-        while (x_tick <= x_axis_max) {
-          x_axis_ticks.push(x_tick);
-          x_tick += 25;
-        }
-        plot_options = {
-          title: this.name,
-          seriesDefaults: {
-            showLine: false,
-            markerRenderer: $.jqplot.MarkerRenderer,
-            markerOptions: {
-              style: "filledCircle",
-              size: 3
-            }
-          },
-          axesDefaults: {
-            tickRenderer: $.jqplot.CanvasAxisTickRenderer,
-            labelRenderer: $.jqplot.CanvasAxisLabelRenderer
+    Permutation_Histogram.prototype.display_graph = function() {
+      return $.jqplot('permutation_histogram', [this.bars_ordered], {
+        title: 'Permutation Histogram',
+        seriesDefaults: {
+          renderer: $.jqplot.BarRenderer,
+          rendererOptions: {
+            barWidth: 15
           },
-          axes: {
-            xaxis: {
-              min: 0,
-              max: x_axis_max,
-              ticks: x_axis_ticks,
-              tickOptions: {
-                angle: 90,
-                showGridline: false,
-                formatString: '%d'
-              },
-              label: "Megabases"
-            }
+          pointLabels: {
+            show: true
           }
-        };
-        if (this.name === "1") {
-          plot_options.axes.yaxis = {
+        },
+        axesDefaults: {
+          labelRenderer: $.jqplot.CanvasAxisLabelRenderer
+        },
+        axes: {
+          xaxis: {
             min: 0,
-            max: Math.floor(max_lrs + 0.1 * max_lrs),
-            tickInterval: 1,
             label: "LRS",
-            tickOptions: {
-              formatString: '%d',
-              showGridline: false
-            }
-          };
-        } else {
-          plot_options.axes.yaxis = {
-            show: false,
+            pad: 1.1
+          },
+          yaxis: {
             min: 0,
-            max: Math.floor(max_lrs + 0.1 * max_lrs),
-            tickInterval: 1,
-            tickOptions: {
-              formatString: '%d',
-              showGridline: false
-            }
-          };
+            label: "Frequency"
+          }
         }
-        return $.jqplot(div_name, [this.plot_points], plot_options);
-      };
+      });
+    };
 
-      return Chromosome;
+    return Permutation_Histogram;
 
-    })();
-    Manhattan_Plot = (function() {
+  })();
+  Chromosome = (function() {
+    function Chromosome(name) {
+      this.name = name;
+      this.max_mb = 0;
+      this.plot_points = [];
+    }
 
-      function Manhattan_Plot() {
-        this.max_lrs = 0;
-        this.chromosomes = {};
-        this.build_chromosomes();
-        this.display_graphs();
+    Chromosome.prototype.process_point = function(mb, lrs) {
+      if (mb > this.max_mb) {
+        this.max_mb = mb;
       }
+      return this.plot_points.push([mb, lrs]);
+    };
 
-      Manhattan_Plot.prototype.build_chromosomes = function() {
-        var chromosome, mb, result, _i, _len, _ref, _results;
-        _ref = js_data.qtl_results;
-        _results = [];
-        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-          result = _ref[_i];
-          chromosome = result.locus.chromosome;
-          if (!(chromosome in this.chromosomes)) {
-            this.chromosomes[chromosome] = new Chromosome(chromosome);
+    Chromosome.prototype.display_graph = function(max_lrs) {
+      var div_name, plot_options, x_axis_max, x_axis_ticks, x_tick;
+      div_name = 'manhattan_plot_' + this.name;
+      console.log("div_name:", div_name);
+      x_axis_max = Math.ceil(this.max_mb / 25) * 25;
+      x_axis_ticks = [];
+      x_tick = 0;
+      while (x_tick <= x_axis_max) {
+        x_axis_ticks.push(x_tick);
+        x_tick += 25;
+      }
+      plot_options = {
+        title: this.name,
+        seriesDefaults: {
+          showLine: false,
+          markerRenderer: $.jqplot.MarkerRenderer,
+          markerOptions: {
+            style: "filledCircle",
+            size: 3
           }
-          mb = parseInt(result.locus.mb);
-          if (result.lrs > this.max_lrs) {
-            this.max_lrs = result.lrs;
+        },
+        axesDefaults: {
+          tickRenderer: $.jqplot.CanvasAxisTickRenderer,
+          labelRenderer: $.jqplot.CanvasAxisLabelRenderer
+        },
+        axes: {
+          xaxis: {
+            min: 0,
+            max: x_axis_max,
+            ticks: x_axis_ticks,
+            tickOptions: {
+              angle: 90,
+              showGridline: false,
+              formatString: '%d'
+            },
+            label: "Megabases"
           }
-          _results.push(this.chromosomes[chromosome].process_point(mb, result.lrs));
         }
-        return _results;
       };
-
-      Manhattan_Plot.prototype.display_graphs = function() {
-        /* Call display_graph for each chromosome
-        */
-
-        var extra_keys, html, key, keys, numbered_keys, this_class, _i, _len;
-        numbered_keys = [];
-        extra_keys = [];
-        for (key in this.chromosomes) {
-          if (isNaN(key)) {
-            extra_keys.push(key);
-          } else {
-            numbered_keys.push(key);
+      if (this.name === "1") {
+        plot_options.axes.yaxis = {
+          min: 0,
+          max: Math.floor(max_lrs + 0.1 * max_lrs),
+          tickInterval: 1,
+          label: "LRS",
+          tickOptions: {
+            formatString: '%d',
+            showGridline: false
           }
-        }
-        numbered_keys.sort(sort_number);
-        extra_keys.sort();
-        keys = numbered_keys.concat(extra_keys);
-        console.log("keys are:", keys);
-        for (_i = 0, _len = keys.length; _i < _len; _i++) {
-          key = keys[_i];
-          this_class = "manhattan_plot_segment";
-          if (key !== "1") {
-            this_class += " no_y_axis";
+        };
+      } else {
+        plot_options.axes.yaxis = {
+          show: false,
+          min: 0,
+          max: Math.floor(max_lrs + 0.1 * max_lrs),
+          tickInterval: 1,
+          tickOptions: {
+            formatString: '%d',
+            showGridline: false
           }
-          html = "<div id=\"manhattan_plot_" + key + "\" class=" + this_class + "></div>";
-          console.log("html is:", html);
-          $("#manhattan_plots").append(html);
-          this.chromosomes[key].display_graph(this.max_lrs);
+        };
+      }
+      return $.jqplot(div_name, [this.plot_points], plot_options);
+    };
+
+    return Chromosome;
+
+  })();
+  Manhattan_Plot = (function() {
+    function Manhattan_Plot() {
+      this.max_lrs = 0;
+      this.chromosomes = {};
+      this.build_chromosomes();
+      this.display_graphs();
+    }
+
+    Manhattan_Plot.prototype.build_chromosomes = function() {
+      var chromosome, mb, result, _i, _len, _ref, _results;
+      _ref = js_data.qtl_results;
+      _results = [];
+      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+        result = _ref[_i];
+        chromosome = result.locus.chromosome;
+        if (!(chromosome in this.chromosomes)) {
+          this.chromosomes[chromosome] = new Chromosome(chromosome);
         }
-        $('.jqplot-yaxis').hide();
-        return $('#manhattan_plot_1').find('.jqplot-yaxis').show();
-      };
+        mb = parseInt(result.locus.mb);
+        if (result.lrs > this.max_lrs) {
+          this.max_lrs = result.lrs;
+        }
+        _results.push(this.chromosomes[chromosome].process_point(mb, result.lrs));
+      }
+      return _results;
+    };
 
-      return Manhattan_Plot;
+    Manhattan_Plot.prototype.display_graphs = function() {
+
+      /* Call display_graph for each chromosome */
+      var extra_keys, html, key, keys, numbered_keys, this_class, _i, _len;
+      numbered_keys = [];
+      extra_keys = [];
+      for (key in this.chromosomes) {
+        if (isNaN(key)) {
+          extra_keys.push(key);
+        } else {
+          numbered_keys.push(key);
+        }
+      }
+      numbered_keys.sort(sort_number);
+      extra_keys.sort();
+      keys = numbered_keys.concat(extra_keys);
+      console.log("keys are:", keys);
+      for (_i = 0, _len = keys.length; _i < _len; _i++) {
+        key = keys[_i];
+        this_class = "manhattan_plot_segment";
+        if (key !== "1") {
+          this_class += " no_y_axis";
+        }
+        html = "<div id=\"manhattan_plot_" + key + "\" class=" + this_class + "></div>";
+        console.log("html is:", html);
+        $("#manhattan_plots").append(html);
+        this.chromosomes[key].display_graph(this.max_lrs);
+      }
+      $('.jqplot-yaxis').hide();
+      return $('#manhattan_plot_1').find('.jqplot-yaxis').show();
+    };
 
-    })();
-    new Permutation_Histogram;
-    return new Manhattan_Plot;
-  });
+    return Manhattan_Plot;
 
-}).call(this);
+  })();
+  new Permutation_Histogram;
+  return new Manhattan_Plot;
+});
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/.npmignore b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/.npmignore
deleted file mode 100755
index 21e430d2..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/.npmignore
+++ /dev/null
@@ -1,11 +0,0 @@
-*.coffee
-*.html
-.DS_Store
-.git*
-Cakefile
-documentation/
-examples/
-extras/coffee-script.js
-raw/
-src/
-test/
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/CNAME b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/CNAME
deleted file mode 100755
index faadabe5..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/CNAME
+++ /dev/null
@@ -1 +0,0 @@
-coffeescript.org
\ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/CONTRIBUTING.md b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/CONTRIBUTING.md
deleted file mode 100755
index 6390c68b..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/CONTRIBUTING.md
+++ /dev/null
@@ -1,9 +0,0 @@
-## How to contribute to CoffeeScript
-
-* Before you open a ticket or send a pull request, [search](https://github.com/jashkenas/coffee-script/issues) for previous discussions about the same feature or issue. Add to the earlier ticket if you find one.
-
-* Before sending a pull request for a feature, be sure to have [tests](https://github.com/jashkenas/coffee-script/tree/master/test).
-
-* Use the same coding style as the rest of the [codebase](https://github.com/jashkenas/coffee-script/tree/master/src). If you're just getting started with CoffeeScript, there's a nice [style guide](https://github.com/polarmobile/coffeescript-style-guide).
-
-* In your pull request, do not add documentation to `index.html` or re-build the minified `coffee-script.js` file. We'll do those things before cutting a new release.
\ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/LICENSE b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/LICENSE
deleted file mode 100755
index dbe6b4e3..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-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
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/README b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/README
deleted file mode 100755
index 69ee6f43..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/README
+++ /dev/null
@@ -1,51 +0,0 @@
-
-            {
-         }   }   {
-        {   {  }  }
-         }   }{  {
-        {  }{  }  }                    _____       __  __
-       ( }{ }{  { )                   / ____|     / _|/ _|
-     .- { { }  { }} -.               | |     ___ | |_| |_ ___  ___
-    (  ( } { } { } }  )              | |    / _ \|  _|  _/ _ \/ _ \
-    |`-..________ ..-'|              | |___| (_) | | | ||  __/  __/
-    |                 |               \_____\___/|_| |_| \___|\___|
-    |                 ;--.
-    |                (__  \            _____           _       _
-    |                 | )  )          / ____|         (_)     | |
-    |                 |/  /          | (___   ___ _ __ _ _ __ | |_
-    |                 (  /            \___ \ / __| '__| | '_ \| __|
-    |                 |/              ____) | (__| |  | | |_) | |_
-    |                 |              |_____/ \___|_|  |_| .__/ \__|
-     `-.._________..-'                                  | |
-                                                        |_|
-
-
-  CoffeeScript is a little language that compiles into JavaScript.
-
-  Install Node.js, and then the CoffeeScript compiler:
-  sudo bin/cake install
-
-  Or, if you have the Node Package Manager installed:
-  npm install -g coffee-script
-  (Leave off the -g if you don't wish to install globally.)
-
-  Execute a script:
-  coffee /path/to/script.coffee
-
-  Compile a script:
-  coffee -c /path/to/script.coffee
-
-  For documentation, usage, and examples, see:
-  http://coffeescript.org/
-
-  To suggest a feature, report a bug, or general discussion:
-  http://github.com/jashkenas/coffee-script/issues/
-
-  If you'd like to chat, drop by #coffeescript on Freenode IRC,
-  or on webchat.freenode.net.
-
-  The source repository:
-  git://github.com/jashkenas/coffee-script.git
-
-  All contributors are listed here:
-  http://github.com/jashkenas/coffee-script/contributors
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/Rakefile b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/Rakefile
deleted file mode 100755
index d90cce36..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/Rakefile
+++ /dev/null
@@ -1,79 +0,0 @@
-require 'rubygems'
-require 'erb'
-require 'fileutils'
-require 'rake/testtask'
-require 'json'
-
-desc "Build the documentation page"
-task :doc do
-  source = 'documentation/index.html.erb'
-  child = fork { exec "bin/coffee -bcw -o documentation/js documentation/coffee/*.coffee" }
-  at_exit { Process.kill("INT", child) }
-  Signal.trap("INT") { exit }
-  loop do
-    mtime = File.stat(source).mtime
-    if !@mtime || mtime > @mtime
-      rendered = ERB.new(File.read(source)).result(binding)
-      File.open('index.html', 'w+') {|f| f.write(rendered) }
-    end
-    @mtime = mtime
-    sleep 1
-  end
-end
-
-desc "Build coffee-script-source gem"
-task :gem do
-  require 'rubygems'
-  require 'rubygems/package'
-
-  gemspec = Gem::Specification.new do |s|
-    s.name      = 'coffee-script-source'
-    s.version   = JSON.parse(File.read('package.json'))["version"]
-    s.date      = Time.now.strftime("%Y-%m-%d")
-
-    s.homepage    = "http://jashkenas.github.com/coffee-script/"
-    s.summary     = "The CoffeeScript Compiler"
-    s.description = <<-EOS
-      CoffeeScript is a little language that compiles into JavaScript.
-      Underneath all of those embarrassing braces and semicolons,
-      JavaScript has always had a gorgeous object model at its heart.
-      CoffeeScript is an attempt to expose the good parts of JavaScript
-      in a simple way.
-    EOS
-
-    s.files = [
-      'lib/coffee_script/coffee-script.js',
-      'lib/coffee_script/source.rb'
-    ]
-
-    s.authors           = ['Jeremy Ashkenas']
-    s.email             = 'jashkenas@gmail.com'
-    s.rubyforge_project = 'coffee-script-source'
-    s.license           = "MIT"
-  end
-
-  file = File.open("coffee-script-source.gem", "w")
-  Gem::Package.open(file, 'w') do |pkg|
-    pkg.metadata = gemspec.to_yaml
-
-    path = "lib/coffee_script/source.rb"
-    contents = <<-ERUBY
-module CoffeeScript
-  module Source
-    def self.bundled_path
-      File.expand_path("../coffee-script.js", __FILE__)
-    end
-  end
-end
-    ERUBY
-    pkg.add_file_simple(path, 0644, contents.size) do |tar_io|
-      tar_io.write(contents)
-    end
-
-    contents = File.read("extras/coffee-script.js")
-    path = "lib/coffee_script/coffee-script.js"
-    pkg.add_file_simple(path, 0644, contents.size) do |tar_io|
-      tar_io.write(contents)
-    end
-  end
-end
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/bin/cake b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/bin/cake
deleted file mode 100755
index 5965f4ee..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/bin/cake
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/env node
-
-var path = require('path');
-var fs   = require('fs');
-var lib  = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');
-
-require(lib + '/coffee-script/cake').run();
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/bin/coffee b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/bin/coffee
deleted file mode 100755
index 3d1d71c8..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/bin/coffee
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/env node
-
-var path = require('path');
-var fs   = require('fs');
-var lib  = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');
-
-require(lib + '/coffee-script/command').run();
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/extras/jsl.conf b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/extras/jsl.conf
deleted file mode 100755
index 1190da52..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/extras/jsl.conf
+++ /dev/null
@@ -1,44 +0,0 @@
-# JavaScriptLint configuration file for CoffeeScript.
-
-+no_return_value              # function {0} does not always return a value
-+duplicate_formal             # duplicate formal argument {0}
--equal_as_assign              # test for equality (==) mistyped as assignment (=)?{0}
-+var_hides_arg                # variable {0} hides argument
-+redeclared_var               # redeclaration of {0} {1}
--anon_no_return_value         # anonymous function does not always return a value
-+missing_semicolon            # missing semicolon
-+meaningless_block            # meaningless block; curly braces have no impact
--comma_separated_stmts        # multiple statements separated by commas (use semicolons?)
-+unreachable_code             # unreachable code
-+missing_break                # missing break statement
--missing_break_for_last_case  # missing break statement for last case in switch
--comparison_type_conv         # comparisons against null, 0, true, false, or an empty string allowing implicit type conversion (use === or !==)
--inc_dec_within_stmt          # increment (++) and decrement (--) operators used as part of greater statement
--useless_void                 # use of the void type may be unnecessary (void is always undefined)
-+multiple_plus_minus          # unknown order of operations for successive plus (e.g. x+++y) or minus (e.g. x---y) signs
-+use_of_label                 # use of label
--block_without_braces         # block statement without curly braces
-+leading_decimal_point        # leading decimal point may indicate a number or an object member
-+trailing_decimal_point       # trailing decimal point may indicate a number or an object member
-+octal_number                 # leading zeros make an octal number
-+nested_comment               # nested comment
-+misplaced_regex              # regular expressions should be preceded by a left parenthesis, assignment, colon, or comma
-+ambiguous_newline            # unexpected end of line; it is ambiguous whether these lines are part of the same statement
-+empty_statement              # empty statement or extra semicolon
--missing_option_explicit      # the "option explicit" control comment is missing
-+partial_option_explicit      # the "option explicit" control comment, if used, must be in the first script tag
-+dup_option_explicit          # duplicate "option explicit" control comment
-+useless_assign               # useless assignment
-+ambiguous_nested_stmt        # block statements containing block statements should use curly braces to resolve ambiguity
-+ambiguous_else_stmt          # the else statement could be matched with one of multiple if statements (use curly braces to indicate intent)
--missing_default_case         # missing default case in switch statement
-+duplicate_case_in_switch     # duplicate case in switch statements
-+default_not_at_end           # the default case is not at the end of the switch statement
-+legacy_cc_not_understood     # couldn't understand control comment using /*@keyword@*/ syntax
-+jsl_cc_not_understood        # couldn't understand control comment using /*jsl:keyword*/ syntax
-+useless_comparison           # useless comparison; comparing identical expressions
-+with_statement               # with statement hides undeclared variables; use temporary variable instead
-+trailing_comma_in_array      # extra comma is not recommended in array initializers
-+assign_to_function_call      # assignment to a function call
-+parseint_missing_radix       # parseInt missing radix parameter
-+lambda_assign_requires_semicolon
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/browser.js b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/browser.js
deleted file mode 100755
index fec8e690..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/browser.js
+++ /dev/null
@@ -1,101 +0,0 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var CoffeeScript, runScripts,
-    __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; };
-
-  CoffeeScript = require('./coffee-script');
-
-  CoffeeScript.require = require;
-
-  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 = {};
-    }
-    options.bare = true;
-    return Function(CoffeeScript.compile(code, options))();
-  };
-
-  if (typeof window === "undefined" || window === null) {
-    return;
-  }
-
-  CoffeeScript.load = function(url, callback, options) {
-    var xhr;
-    if (options == null) {
-      options = {};
-    }
-    xhr = window.ActiveXObject ? new window.ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest();
-    xhr.open('GET', url, true);
-    if ('overrideMimeType' in xhr) {
-      xhr.overrideMimeType('text/plain');
-    }
-    xhr.onreadystatechange = function() {
-      var _ref;
-      if (xhr.readyState === 4) {
-        if ((_ref = xhr.status) === 0 || _ref === 200) {
-          CoffeeScript.run(xhr.responseText, options);
-        } else {
-          throw new Error("Could not load " + url);
-        }
-        if (callback) {
-          return callback();
-        }
-      }
-    };
-    return xhr.send(null);
-  };
-
-  runScripts = function() {
-    var coffees, coffeetypes, execute, index, length, s, scripts;
-    scripts = document.getElementsByTagName('script');
-    coffeetypes = ['text/coffeescript', 'text/literate-coffeescript'];
-    coffees = (function() {
-      var _i, _len, _ref, _results;
-      _results = [];
-      for (_i = 0, _len = scripts.length; _i < _len; _i++) {
-        s = scripts[_i];
-        if (_ref = s.type, __indexOf.call(coffeetypes, _ref) >= 0) {
-          _results.push(s);
-        }
-      }
-      return _results;
-    })();
-    index = 0;
-    length = coffees.length;
-    (execute = function() {
-      var mediatype, options, script;
-      script = coffees[index++];
-      mediatype = script != null ? script.type : void 0;
-      if (__indexOf.call(coffeetypes, mediatype) >= 0) {
-        options = {
-          literate: mediatype === 'text/literate-coffeescript'
-        };
-        if (script.src) {
-          return CoffeeScript.load(script.src, execute, options);
-        } else {
-          CoffeeScript.run(script.innerHTML, options);
-          return execute();
-        }
-      }
-    })();
-    return null;
-  };
-
-  if (window.addEventListener) {
-    addEventListener('DOMContentLoaded', runScripts, false);
-  } else {
-    attachEvent('onload', runScripts);
-  }
-
-}).call(this);
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/cake.js b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/cake.js
deleted file mode 100755
index a0b643f6..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/cake.js
+++ /dev/null
@@ -1,113 +0,0 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var CoffeeScript, cakefileDirectory, existsSync, fatalError, fs, helpers, missingTask, oparse, options, optparse, path, printTasks, switches, tasks;
-
-  fs = require('fs');
-
-  path = require('path');
-
-  helpers = require('./helpers');
-
-  optparse = require('./optparse');
-
-  CoffeeScript = require('./coffee-script');
-
-  existsSync = fs.existsSync || path.existsSync;
-
-  tasks = {};
-
-  options = {};
-
-  switches = [];
-
-  oparse = null;
-
-  helpers.extend(global, {
-    task: function(name, description, action) {
-      var _ref;
-      if (!action) {
-        _ref = [description, action], action = _ref[0], description = _ref[1];
-      }
-      return tasks[name] = {
-        name: name,
-        description: description,
-        action: action
-      };
-    },
-    option: function(letter, flag, description) {
-      return switches.push([letter, flag, description]);
-    },
-    invoke: function(name) {
-      if (!tasks[name]) {
-        missingTask(name);
-      }
-      return tasks[name].action(options);
-    }
-  });
-
-  exports.run = function() {
-    var arg, args, _i, _len, _ref, _results;
-    global.__originalDirname = fs.realpathSync('.');
-    process.chdir(cakefileDirectory(__originalDirname));
-    args = process.argv.slice(2);
-    CoffeeScript.run(fs.readFileSync('Cakefile').toString(), {
-      filename: 'Cakefile'
-    });
-    oparse = new optparse.OptionParser(switches);
-    if (!args.length) {
-      return printTasks();
-    }
-    try {
-      options = oparse.parse(args);
-    } catch (e) {
-      return fatalError("" + e);
-    }
-    _ref = options["arguments"];
-    _results = [];
-    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-      arg = _ref[_i];
-      _results.push(invoke(arg));
-    }
-    return _results;
-  };
-
-  printTasks = function() {
-    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];
-      spaces = 20 - name.length;
-      spaces = spaces > 0 ? Array(spaces + 1).join(' ') : '';
-      desc = task.description ? "# " + task.description : '';
-      console.log("cake " + name + spaces + " " + desc);
-    }
-    if (switches.length) {
-      return console.log(oparse.help());
-    }
-  };
-
-  fatalError = function(message) {
-    console.error(message + '\n');
-    console.log('To see a list of all tasks/options, run "cake"');
-    return process.exit(1);
-  };
-
-  missingTask = function(task) {
-    return fatalError("No such task: " + task);
-  };
-
-  cakefileDirectory = function(dir) {
-    var parent;
-    if (existsSync(path.join(dir, 'Cakefile'))) {
-      return dir;
-    }
-    parent = path.normalize(path.join(dir, '..'));
-    if (parent !== dir) {
-      return cakefileDirectory(parent);
-    }
-    throw new Error("Cakefile not found in " + (process.cwd()));
-  };
-
-}).call(this);
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/coffee-script.js b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/coffee-script.js
deleted file mode 100755
index d791035d..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/coffee-script.js
+++ /dev/null
@@ -1,218 +0,0 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var Lexer, compile, ext, fs, helpers, lexer, loadFile, parser, path, sourcemap, vm, _i, _len, _ref,
-    __hasProp = {}.hasOwnProperty;
-
-  fs = require('fs');
-
-  path = require('path');
-
-  Lexer = require('./lexer').Lexer;
-
-  parser = require('./parser').parser;
-
-  helpers = require('./helpers');
-
-  vm = require('vm');
-
-  sourcemap = require('./sourcemap');
-
-  loadFile = function(module, filename) {
-    var raw, stripped;
-    raw = fs.readFileSync(filename, 'utf8');
-    stripped = raw.charCodeAt(0) === 0xFEFF ? raw.substring(1) : raw;
-    return module._compile(compile(stripped, {
-      filename: filename,
-      literate: helpers.isLiterate(filename)
-    }), filename);
-  };
-
-  if (require.extensions) {
-    _ref = ['.coffee', '.litcoffee', '.md', '.coffee.md'];
-    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-      ext = _ref[_i];
-      require.extensions[ext] = loadFile;
-    }
-  }
-
-  exports.VERSION = '1.6.1';
-
-  exports.helpers = helpers;
-
-  exports.compile = compile = function(code, options) {
-    var answer, coffeeFile, currentColumn, currentLine, fragment, fragments, header, js, jsFile, merge, newLines, sourceMap, _j, _len1;
-    if (options == null) {
-      options = {};
-    }
-    merge = exports.helpers.merge;
-    try {
-      if (options.sourceMap) {
-        coffeeFile = helpers.baseFileName(options.filename);
-        jsFile = helpers.baseFileName(options.filename, true) + ".js";
-        sourceMap = new sourcemap.SourceMap();
-      }
-      fragments = (parser.parse(lexer.tokenize(code, options))).compileToFragments(options);
-      currentLine = 0;
-      if (options.header) {
-        currentLine += 1;
-      }
-      if (options.sourceMap) {
-        currentLine += 1;
-      }
-      currentColumn = 0;
-      js = "";
-      for (_j = 0, _len1 = fragments.length; _j < _len1; _j++) {
-        fragment = fragments[_j];
-        if (sourceMap) {
-          if (fragment.locationData) {
-            sourceMap.addMapping([fragment.locationData.first_line, fragment.locationData.first_column], [currentLine, currentColumn], {
-              noReplace: true
-            });
-          }
-          newLines = helpers.count(fragment.code, "\n");
-          currentLine += newLines;
-          currentColumn = fragment.code.length - (newLines ? fragment.code.lastIndexOf("\n") : 0);
-        }
-        js += fragment.code;
-      }
-    } catch (err) {
-      if (options.filename) {
-        err.message = "In " + options.filename + ", " + err.message;
-      }
-      throw err;
-    }
-    if (options.header) {
-      header = "Generated by CoffeeScript " + this.VERSION;
-      js = "// " + header + "\n" + js;
-    }
-    if (options.sourceMap) {
-      answer = {
-        js: js
-      };
-      if (sourceMap) {
-        answer.sourceMap = sourceMap;
-        answer.v3SourceMap = sourcemap.generateV3SourceMap(sourceMap, coffeeFile, jsFile);
-      }
-      return answer;
-    } else {
-      return js;
-    }
-  };
-
-  exports.tokens = function(code, options) {
-    return lexer.tokenize(code, options);
-  };
-
-  exports.nodes = function(source, options) {
-    if (typeof source === 'string') {
-      return parser.parse(lexer.tokenize(source, options));
-    } else {
-      return parser.parse(source);
-    }
-  };
-
-  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(fs.realpathSync(options.filename)));
-    if (!helpers.isCoffee(mainModule.filename) || require.extensions) {
-      return mainModule._compile(compile(code, options), mainModule.filename);
-    } else {
-      return mainModule._compile(code, mainModule.filename);
-    }
-  };
-
-  exports["eval"] = function(code, options) {
-    var Module, Script, js, k, o, r, sandbox, v, _j, _len1, _module, _ref1, _ref2, _require;
-    if (options == null) {
-      options = {};
-    }
-    if (!(code = code.trim())) {
-      return;
-    }
-    Script = vm.Script;
-    if (Script) {
-      if (options.sandbox != null) {
-        if (options.sandbox instanceof Script.createContext().constructor) {
-          sandbox = options.sandbox;
-        } else {
-          sandbox = Script.createContext();
-          _ref1 = options.sandbox;
-          for (k in _ref1) {
-            if (!__hasProp.call(_ref1, k)) continue;
-            v = _ref1[k];
-            sandbox[k] = v;
-          }
-        }
-        sandbox.global = sandbox.root = sandbox.GLOBAL = sandbox;
-      } else {
-        sandbox = global;
-      }
-      sandbox.__filename = options.filename || 'eval';
-      sandbox.__dirname = path.dirname(sandbox.__filename);
-      if (!(sandbox !== global || sandbox.module || sandbox.require)) {
-        Module = require('module');
-        sandbox.module = _module = new Module(options.modulename || 'eval');
-        sandbox.require = _require = function(path) {
-          return Module._load(path, _module, true);
-        };
-        _module.filename = sandbox.__filename;
-        _ref2 = Object.getOwnPropertyNames(require);
-        for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
-          r = _ref2[_j];
-          if (r !== 'paths') {
-            _require[r] = require[r];
-          }
-        }
-        _require.paths = _module.paths = Module._nodeModulePaths(process.cwd());
-        _require.resolve = function(request) {
-          return Module._resolveFilename(request, _module);
-        };
-      }
-    }
-    o = {};
-    for (k in options) {
-      if (!__hasProp.call(options, k)) continue;
-      v = options[k];
-      o[k] = v;
-    }
-    o.bare = true;
-    js = compile(code, o);
-    if (sandbox === global) {
-      return vm.runInThisContext(js);
-    } else {
-      return vm.runInContext(js, sandbox);
-    }
-  };
-
-  lexer = new Lexer;
-
-  parser.lexer = {
-    lex: function() {
-      var tag, token;
-      token = this.tokens[this.pos++];
-      if (token) {
-        tag = token[0], this.yytext = token[1], this.yylloc = token[2];
-        this.yylineno = this.yylloc.first_line;
-      } else {
-        tag = '';
-      }
-      return tag;
-    },
-    setInput: function(tokens) {
-      this.tokens = tokens;
-      return this.pos = 0;
-    },
-    upcomingInput: function() {
-      return "";
-    }
-  };
-
-  parser.yy = require('./nodes');
-
-}).call(this);
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/command.js b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/command.js
deleted file mode 100755
index 4077577e..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/command.js
+++ /dev/null
@@ -1,506 +0,0 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var BANNER, CoffeeScript, EventEmitter, SWITCHES, compileJoin, compileOptions, compilePath, compileScript, compileStdio, exec, exists, forkNode, fs, helpers, hidden, joinTimeout, lint, notSources, optionParser, optparse, opts, outputPath, parseOptions, path, printLine, printTokens, printWarn, removeSource, sourceCode, sources, spawn, timeLog, unwatchDir, usage, version, wait, watch, watchDir, watchers, writeJs, _ref;
-
-  fs = require('fs');
-
-  path = require('path');
-
-  helpers = require('./helpers');
-
-  optparse = require('./optparse');
-
-  CoffeeScript = require('./coffee-script');
-
-  _ref = require('child_process'), spawn = _ref.spawn, exec = _ref.exec;
-
-  EventEmitter = require('events').EventEmitter;
-
-  exists = fs.exists || path.exists;
-
-  helpers.extend(CoffeeScript, new EventEmitter);
-
-  printLine = function(line) {
-    return process.stdout.write(line + '\n');
-  };
-
-  printWarn = function(line) {
-    return process.stderr.write(line + '\n');
-  };
-
-  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'], ['-m', '--map', 'generate source map and save as .map files'], ['-n', '--nodes', 'print out the parse tree that the parser produces'], ['--nodejs [ARGS]', 'pass options directly to the "node" binary'], ['-o', '--output [DIR]', 'set the output directory for compiled JavaScript'], ['-p', '--print', 'print out the compiled JavaScript'], ['-s', '--stdio', 'listen for and compile scripts over stdio'], ['-t', '--tokens', 'print out the tokens that the lexer/rewriter produce'], ['-v', '--version', 'display the version number'], ['-w', '--watch', 'watch scripts for changes and rerun commands']];
-
-  opts = {};
-
-  sources = [];
-
-  sourceCode = [];
-
-  notSources = {};
-
-  watchers = {};
-
-  optionParser = null;
-
-  exports.run = function() {
-    var literals, source, _i, _len, _results;
-    parseOptions();
-    if (opts.nodejs) {
-      return forkNode();
-    }
-    if (opts.help) {
-      return usage();
-    }
-    if (opts.version) {
-      return version();
-    }
-    if (opts.interactive) {
-      return require('./repl').start();
-    }
-    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').start();
-    }
-    literals = opts.run ? sources.splice(1) : [];
-    process.argv = process.argv.slice(0, 2).concat(literals);
-    process.argv[0] = 'coffee';
-    _results = [];
-    for (_i = 0, _len = sources.length; _i < _len; _i++) {
-      source = sources[_i];
-      _results.push(compilePath(source, true, path.normalize(source)));
-    }
-    return _results;
-  };
-
-  compilePath = function(source, topLevel, base) {
-    return fs.stat(source, function(err, stats) {
-      if (err && err.code !== 'ENOENT') {
-        throw err;
-      }
-      if ((err != null ? err.code : void 0) === 'ENOENT') {
-        console.error("File not found: " + source);
-        process.exit(1);
-      }
-      if (stats.isDirectory() && path.dirname(source) !== 'node_modules') {
-        if (opts.watch) {
-          watchDir(source, base);
-        }
-        return fs.readdir(source, function(err, files) {
-          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);
-          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;
-          return files.forEach(function(file) {
-            return compilePath(path.join(source, file), false, base);
-          });
-        });
-      } else if (topLevel || helpers.isCoffee(source)) {
-        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;
-          }
-          return compileScript(source, code.toString(), base);
-        });
-      } else {
-        notSources[source] = true;
-        return removeSource(source, base);
-      }
-    });
-  };
-
-  compileScript = function(file, input, base) {
-    var compiled, o, options, t, task;
-    o = opts;
-    options = compileOptions(file);
-    try {
-      t = task = {
-        file: file,
-        input: input,
-        options: options
-      };
-      CoffeeScript.emit('compile', task);
-      if (o.tokens) {
-        return printTokens(CoffeeScript.tokens(t.input, t.options));
-      } else if (o.nodes) {
-        return printLine(CoffeeScript.nodes(t.input, t.options).toString().trim());
-      } else if (o.run) {
-        return CoffeeScript.run(t.input, t.options);
-      } else if (o.join && t.file !== o.join) {
-        sourceCode[sources.indexOf(t.file)] = t.input;
-        return compileJoin();
-      } else {
-        compiled = CoffeeScript.compile(t.input, t.options);
-        t.output = compiled;
-        if (o.map) {
-          t.output = compiled.js;
-          t.sourceMap = compiled.v3SourceMap;
-        }
-        CoffeeScript.emit('success', task);
-        if (o.print) {
-          return printLine(t.output.trim());
-        } else if (o.compile || o.map) {
-          return writeJs(base, t.file, t.output, t.sourceMap);
-        } else if (o.lint) {
-          return lint(t.file, t.output);
-        }
-      }
-    } catch (err) {
-      CoffeeScript.emit('failure', err, task);
-      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);
-    }
-  };
-
-  compileStdio = function() {
-    var code, stdin;
-    code = '';
-    stdin = process.openStdin();
-    stdin.on('data', function(buffer) {
-      if (buffer) {
-        return code += buffer.toString();
-      }
-    });
-    return stdin.on('end', function() {
-      return compileScript(null, code);
-    });
-  };
-
-  joinTimeout = null;
-
-  compileJoin = function() {
-    if (!opts.join) {
-      return;
-    }
-    if (!sourceCode.some(function(code) {
-      return code === null;
-    })) {
-      clearTimeout(joinTimeout);
-      return joinTimeout = wait(100, function() {
-        return compileScript(opts.join, sourceCode.join('\n'), opts.join);
-      });
-    }
-  };
-
-  watch = function(source, base) {
-    var compile, compileTimeout, prevStats, rewatch, watchErr, watcher;
-    prevStats = null;
-    compileTimeout = null;
-    watchErr = function(e) {
-      if (e.code === 'ENOENT') {
-        if (sources.indexOf(source) === -1) {
-          return;
-        }
-        try {
-          rewatch();
-          return compile();
-        } catch (e) {
-          removeSource(source, base, true);
-          return compileJoin();
-        }
-      } else {
-        throw e;
-      }
-    };
-    compile = function() {
-      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 rewatch();
-          }
-          prevStats = stats;
-          return fs.readFile(source, function(err, code) {
-            if (err) {
-              return watchErr(err);
-            }
-            compileScript(source, code.toString(), base);
-            return rewatch();
-          });
-        });
-      });
-    };
-    try {
-      watcher = fs.watch(source, compile);
-    } catch (e) {
-      watchErr(e);
-    }
-    return rewatch = function() {
-      if (watcher != null) {
-        watcher.close();
-      }
-      return watcher = fs.watch(source, compile);
-    };
-  };
-
-  watchDir = function(source, base) {
-    var readdirTimeout, watcher;
-    readdirTimeout = null;
-    try {
-      return watcher = fs.watch(source, function() {
-        clearTimeout(readdirTimeout);
-        return readdirTimeout = wait(25, function() {
-          return fs.readdir(source, function(err, files) {
-            var file, _i, _len, _results;
-            if (err) {
-              if (err.code !== 'ENOENT') {
-                throw err;
-              }
-              watcher.close();
-              return unwatchDir(source, base);
-            }
-            _results = [];
-            for (_i = 0, _len = files.length; _i < _len; _i++) {
-              file = files[_i];
-              if (!(!hidden(file) && !notSources[file])) {
-                continue;
-              }
-              file = path.join(source, file);
-              if (sources.some(function(s) {
-                return s.indexOf(file) >= 0;
-              })) {
-                continue;
-              }
-              sources.push(file);
-              sourceCode.push(null);
-              _results.push(compilePath(file, false, base));
-            }
-            return _results;
-          });
-        });
-      });
-    } catch (e) {
-      if (e.code !== 'ENOENT') {
-        throw e;
-      }
-    }
-  };
-
-  unwatchDir = function(source, base) {
-    var file, prevSources, toRemove, _i, _len;
-    prevSources = sources.slice(0);
-    toRemove = (function() {
-      var _i, _len, _results;
-      _results = [];
-      for (_i = 0, _len = sources.length; _i < _len; _i++) {
-        file = sources[_i];
-        if (file.indexOf(source) >= 0) {
-          _results.push(file);
-        }
-      }
-      return _results;
-    })();
-    for (_i = 0, _len = toRemove.length; _i < _len; _i++) {
-      file = toRemove[_i];
-      removeSource(file, base, true);
-    }
-    if (!sources.some(function(s, i) {
-      return prevSources[i] !== s;
-    })) {
-      return;
-    }
-    return compileJoin();
-  };
-
-  removeSource = function(source, base, removeJs) {
-    var index, jsPath;
-    index = sources.indexOf(source);
-    sources.splice(index, 1);
-    sourceCode.splice(index, 1);
-    if (removeJs && !opts.join) {
-      jsPath = outputPath(source, base);
-      return exists(jsPath, function(itExists) {
-        if (itExists) {
-          return fs.unlink(jsPath, function(err) {
-            if (err && err.code !== 'ENOENT') {
-              throw err;
-            }
-            return timeLog("removed " + source);
-          });
-        }
-      });
-    }
-  };
-
-  outputPath = function(source, base, extension) {
-    var baseDir, basename, dir, srcDir;
-    if (extension == null) {
-      extension = ".js";
-    }
-    basename = helpers.baseFileName(source, true);
-    srcDir = path.dirname(source);
-    baseDir = base === '.' ? srcDir : srcDir.substring(base.length);
-    dir = opts.output ? path.join(opts.output, baseDir) : srcDir;
-    return path.join(dir, basename + extension);
-  };
-
-  writeJs = function(base, sourcePath, js, generatedSourceMap) {
-    var compile, jsDir, jsPath, sourceMapPath;
-    if (generatedSourceMap == null) {
-      generatedSourceMap = null;
-    }
-    jsPath = outputPath(sourcePath, base);
-    sourceMapPath = outputPath(sourcePath, base, ".map");
-    jsDir = path.dirname(jsPath);
-    compile = function() {
-      if (opts.compile) {
-        if (js.length <= 0) {
-          js = ' ';
-        }
-        if (generatedSourceMap) {
-          js = "//@ sourceMappingURL=" + (helpers.baseFileName(sourceMapPath)) + "\n" + js;
-        }
-        fs.writeFile(jsPath, js, function(err) {
-          if (err) {
-            return printLine(err.message);
-          } else if (opts.compile && opts.watch) {
-            return timeLog("compiled " + sourcePath);
-          }
-        });
-      }
-      if (generatedSourceMap) {
-        return fs.writeFile(sourceMapPath, generatedSourceMap, function(err) {
-          if (err) {
-            return printLine("Could not write source map: " + err.message);
-          }
-        });
-      }
-    };
-    return exists(jsDir, function(itExists) {
-      if (itExists) {
-        return compile();
-      } else {
-        return exec("mkdir -p " + jsDir, compile);
-      }
-    });
-  };
-
-  wait = function(milliseconds, func) {
-    return setTimeout(func, milliseconds);
-  };
-
-  timeLog = function(message) {
-    return console.log("" + ((new Date).toLocaleTimeString()) + " - " + message);
-  };
-
-  lint = function(file, js) {
-    var conf, jsl, printIt;
-    printIt = function(buffer) {
-      return printLine(file + ':\t' + buffer.toString().trim());
-    };
-    conf = __dirname + '/../../extras/jsl.conf';
-    jsl = spawn('jsl', ['-nologo', '-stdin', '-conf', conf]);
-    jsl.stdout.on('data', printIt);
-    jsl.stderr.on('data', printIt);
-    jsl.stdin.write(js);
-    return jsl.stdin.end();
-  };
-
-  printTokens = function(tokens) {
-    var strings, tag, token, value;
-    strings = (function() {
-      var _i, _len, _results;
-      _results = [];
-      for (_i = 0, _len = tokens.length; _i < _len; _i++) {
-        token = tokens[_i];
-        tag = token[0];
-        value = token[1].toString().replace(/\n/, '\\n');
-        _results.push("[" + tag + " " + value + "]");
-      }
-      return _results;
-    })();
-    return printLine(strings.join(' '));
-  };
-
-  parseOptions = function() {
-    var i, o, source, _i, _len;
-    optionParser = new optparse.OptionParser(SWITCHES, BANNER);
-    o = opts = optionParser.parse(process.argv.slice(2));
-    o.compile || (o.compile = !!o.output);
-    o.run = !(o.compile || o.print || o.lint || o.map);
-    o.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;
-    }
-  };
-
-  compileOptions = function(filename) {
-    return {
-      filename: filename,
-      literate: helpers.isLiterate(filename),
-      bare: opts.bare,
-      header: opts.compile,
-      sourceMap: opts.map
-    };
-  };
-
-  forkNode = function() {
-    var args, nodeArgs;
-    nodeArgs = opts.nodejs.split(/\s+/);
-    args = process.argv.slice(1);
-    args.splice(args.indexOf('--nodejs'), 2);
-    return spawn(process.execPath, nodeArgs.concat(args), {
-      cwd: process.cwd(),
-      env: process.env,
-      customFds: [0, 1, 2]
-    });
-  };
-
-  usage = function() {
-    return printLine((new optparse.OptionParser(SWITCHES, BANNER)).help());
-  };
-
-  version = function() {
-    return printLine("CoffeeScript version " + CoffeeScript.VERSION);
-  };
-
-}).call(this);
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/grammar.js b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/grammar.js
deleted file mode 100755
index 4a767433..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/grammar.js
+++ /dev/null
@@ -1,623 +0,0 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var Parser, alt, alternatives, grammar, name, o, operators, token, tokens, unwrap;
-
-  Parser = require('jison').Parser;
-
-  unwrap = /^function\s*\(\)\s*\{\s*return\s*([\s\S]*);\s*\}/;
-
-  o = function(patternString, action, options) {
-    var addLocationDataFn, match, patternCount;
-    patternString = patternString.replace(/\s{2,}/g, ' ');
-    patternCount = patternString.split(' ').length;
-    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.$&');
-    addLocationDataFn = function(first, last) {
-      if (!last) {
-        return "yy.addLocationDataFn(@" + first + ")";
-      } else {
-        return "yy.addLocationDataFn(@" + first + ", @" + last + ")";
-      }
-    };
-    action = action.replace(/LOC\(([0-9]*)\)/g, addLocationDataFn('$1'));
-    action = action.replace(/LOC\(([0-9]*),\s*([0-9]*)\)/g, addLocationDataFn('$1', '$2'));
-    return [patternString, "$$ = " + (addLocationDataFn(1, patternCount)) + "(" + action + ");", options];
-  };
-
-  grammar = {
-    Root: [
-      o('', function() {
-        return new Block;
-      }), o('Body'), o('Block TERMINATOR')
-    ],
-    Body: [
-      o('Line', function() {
-        return Block.wrap([$1]);
-      }), o('Body TERMINATOR Line', function() {
-        return $1.push($3);
-      }), o('Body TERMINATOR')
-    ],
-    Line: [o('Expression'), o('Statement')],
-    Statement: [
-      o('Return'), o('Comment'), o('STATEMENT', function() {
-        return new Literal($1);
-      })
-    ],
-    Expression: [o('Value'), o('Invocation'), o('Code'), o('Operation'), o('Assign'), o('If'), o('Try'), o('While'), o('For'), o('Switch'), o('Class'), o('Throw')],
-    Block: [
-      o('INDENT OUTDENT', function() {
-        return new Block;
-      }), o('INDENT Body OUTDENT', function() {
-        return $2;
-      })
-    ],
-    Identifier: [
-      o('IDENTIFIER', function() {
-        return new Literal($1);
-      })
-    ],
-    AlphaNumeric: [
-      o('NUMBER', function() {
-        return new Literal($1);
-      }), o('STRING', function() {
-        return new Literal($1);
-      })
-    ],
-    Literal: [
-      o('AlphaNumeric'), o('JS', function() {
-        return new Literal($1);
-      }), o('REGEX', function() {
-        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() {
-        return new Bool($1);
-      })
-    ],
-    Assign: [
-      o('Assignable = Expression', function() {
-        return new Assign($1, $3);
-      }), o('Assignable = TERMINATOR Expression', function() {
-        return new Assign($1, $4);
-      }), o('Assignable = INDENT Expression OUTDENT', function() {
-        return new Assign($1, $4);
-      })
-    ],
-    AssignObj: [
-      o('ObjAssignable', function() {
-        return new Value($1);
-      }), o('ObjAssignable : Expression', function() {
-        return new Assign(LOC(1)(new Value($1)), $3, 'object');
-      }), o('ObjAssignable :\
-       INDENT Expression OUTDENT', function() {
-        return new Assign(LOC(1)(new Value($1)), $4, 'object');
-      }), o('Comment')
-    ],
-    ObjAssignable: [o('Identifier'), o('AlphaNumeric'), o('ThisProperty')],
-    Return: [
-      o('RETURN Expression', function() {
-        return new Return($2);
-      }), o('RETURN', function() {
-        return new Return;
-      })
-    ],
-    Comment: [
-      o('HERECOMMENT', function() {
-        return new Comment($1);
-      })
-    ],
-    Code: [
-      o('PARAM_START ParamList PARAM_END FuncGlyph Block', function() {
-        return new Code($2, $5, $4);
-      }), o('FuncGlyph Block', function() {
-        return new Code([], $2, $1);
-      })
-    ],
-    FuncGlyph: [
-      o('->', function() {
-        return 'func';
-      }), o('=>', function() {
-        return 'boundfunc';
-      })
-    ],
-    OptComma: [o(''), o(',')],
-    ParamList: [
-      o('', function() {
-        return [];
-      }), o('Param', function() {
-        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: [
-      o('ParamVar', function() {
-        return new Param($1);
-      }), o('ParamVar ...', function() {
-        return new Param($1, null, true);
-      }), o('ParamVar = Expression', function() {
-        return new Param($1, $3);
-      })
-    ],
-    ParamVar: [o('Identifier'), o('ThisProperty'), o('Array'), o('Object')],
-    Splat: [
-      o('Expression ...', function() {
-        return new Splat($1);
-      })
-    ],
-    SimpleAssignable: [
-      o('Identifier', function() {
-        return new Value($1);
-      }), o('Value Accessor', function() {
-        return $1.add($2);
-      }), o('Invocation Accessor', function() {
-        return new Value($1, [].concat($2));
-      }), o('ThisProperty')
-    ],
-    Assignable: [
-      o('SimpleAssignable'), o('Array', function() {
-        return new Value($1);
-      }), o('Object', function() {
-        return new Value($1);
-      })
-    ],
-    Value: [
-      o('Assignable'), o('Literal', function() {
-        return new Value($1);
-      }), o('Parenthetical', function() {
-        return new Value($1);
-      }), o('Range', function() {
-        return new Value($1);
-      }), o('This')
-    ],
-    Accessor: [
-      o('.  Identifier', function() {
-        return new Access($2);
-      }), o('?. Identifier', function() {
-        return new Access($2, 'soak');
-      }), o(':: Identifier', function() {
-        return [LOC(1)(new Access(new Literal('prototype'))), LOC(2)(new Access($2))];
-      }), o('?:: Identifier', function() {
-        return [LOC(1)(new Access(new Literal('prototype'), 'soak')), LOC(2)(new Access($2))];
-      }), o('::', function() {
-        return new Access(new Literal('prototype'));
-      }), o('Index')
-    ],
-    Index: [
-      o('INDEX_START IndexValue INDEX_END', function() {
-        return $2;
-      }), o('INDEX_SOAK  Index', function() {
-        return extend($2, {
-          soak: true
-        });
-      })
-    ],
-    IndexValue: [
-      o('Expression', function() {
-        return new Index($1);
-      }), o('Slice', function() {
-        return new Slice($1);
-      })
-    ],
-    Object: [
-      o('{ AssignList OptComma }', function() {
-        return new Obj($2, $1.generated);
-      })
-    ],
-    AssignList: [
-      o('', function() {
-        return [];
-      }), o('AssignObj', function() {
-        return [$1];
-      }), o('AssignList , AssignObj', function() {
-        return $1.concat($3);
-      }), o('AssignList OptComma TERMINATOR AssignObj', function() {
-        return $1.concat($4);
-      }), o('AssignList OptComma INDENT AssignList OptComma OUTDENT', function() {
-        return $1.concat($4);
-      })
-    ],
-    Class: [
-      o('CLASS', function() {
-        return new Class;
-      }), o('CLASS Block', function() {
-        return new Class(null, null, $2);
-      }), o('CLASS EXTENDS Expression', function() {
-        return new Class(null, $3);
-      }), o('CLASS EXTENDS Expression Block', function() {
-        return new Class(null, $3, $4);
-      }), o('CLASS SimpleAssignable', function() {
-        return new Class($2);
-      }), o('CLASS SimpleAssignable Block', function() {
-        return new Class($2, null, $3);
-      }), o('CLASS SimpleAssignable EXTENDS Expression', function() {
-        return new Class($2, $4);
-      }), o('CLASS SimpleAssignable EXTENDS Expression Block', function() {
-        return new Class($2, $4, $5);
-      })
-    ],
-    Invocation: [
-      o('Value OptFuncExist Arguments', function() {
-        return new Call($1, $3, $2);
-      }), o('Invocation OptFuncExist Arguments', function() {
-        return new Call($1, $3, $2);
-      }), o('SUPER', function() {
-        return new Call('super', [new Splat(new Literal('arguments'))]);
-      }), o('SUPER Arguments', function() {
-        return new Call('super', $2);
-      })
-    ],
-    OptFuncExist: [
-      o('', function() {
-        return false;
-      }), o('FUNC_EXIST', function() {
-        return true;
-      })
-    ],
-    Arguments: [
-      o('CALL_START CALL_END', function() {
-        return [];
-      }), o('CALL_START ArgList OptComma CALL_END', function() {
-        return $2;
-      })
-    ],
-    This: [
-      o('THIS', function() {
-        return new Value(new Literal('this'));
-      }), o('@', function() {
-        return new Value(new Literal('this'));
-      })
-    ],
-    ThisProperty: [
-      o('@ Identifier', function() {
-        return new Value(LOC(1)(new Literal('this')), [LOC(2)(new Access($2))], 'this');
-      })
-    ],
-    Array: [
-      o('[ ]', function() {
-        return new Arr([]);
-      }), o('[ ArgList OptComma ]', function() {
-        return new Arr($2);
-      })
-    ],
-    RangeDots: [
-      o('..', function() {
-        return 'inclusive';
-      }), o('...', function() {
-        return 'exclusive';
-      })
-    ],
-    Range: [
-      o('[ Expression RangeDots Expression ]', function() {
-        return new Range($2, $4, $3);
-      })
-    ],
-    Slice: [
-      o('Expression RangeDots Expression', function() {
-        return new Range($1, $3, $2);
-      }), o('Expression RangeDots', function() {
-        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: [
-      o('Arg', function() {
-        return [$1];
-      }), o('ArgList , Arg', function() {
-        return $1.concat($3);
-      }), o('ArgList OptComma TERMINATOR Arg', function() {
-        return $1.concat($4);
-      }), o('INDENT ArgList OptComma OUTDENT', function() {
-        return $2;
-      }), o('ArgList OptComma INDENT ArgList OptComma OUTDENT', function() {
-        return $1.concat($4);
-      })
-    ],
-    Arg: [o('Expression'), o('Splat')],
-    SimpleArgs: [
-      o('Expression'), o('SimpleArgs , Expression', function() {
-        return [].concat($1, $3);
-      })
-    ],
-    Try: [
-      o('TRY Block', function() {
-        return new Try($2);
-      }), o('TRY Block Catch', function() {
-        return new Try($2, $3[0], $3[1]);
-      }), o('TRY Block FINALLY Block', function() {
-        return new Try($2, null, null, $4);
-      }), o('TRY Block Catch FINALLY Block', function() {
-        return new Try($2, $3[0], $3[1], $5);
-      })
-    ],
-    Catch: [
-      o('CATCH Identifier Block', function() {
-        return [$2, $3];
-      }), o('CATCH Object Block', function() {
-        return [LOC(2)(new Value($2)), $3];
-      })
-    ],
-    Throw: [
-      o('THROW Expression', function() {
-        return new Throw($2);
-      })
-    ],
-    Parenthetical: [
-      o('( Body )', function() {
-        return new Parens($2);
-      }), o('( INDENT Body OUTDENT )', function() {
-        return new Parens($3);
-      })
-    ],
-    WhileSource: [
-      o('WHILE Expression', function() {
-        return new While($2);
-      }), o('WHILE Expression WHEN Expression', function() {
-        return new While($2, {
-          guard: $4
-        });
-      }), o('UNTIL Expression', function() {
-        return new While($2, {
-          invert: true
-        });
-      }), o('UNTIL Expression WHEN Expression', function() {
-        return new While($2, {
-          invert: true,
-          guard: $4
-        });
-      })
-    ],
-    While: [
-      o('WhileSource Block', function() {
-        return $1.addBody($2);
-      }), o('Statement  WhileSource', function() {
-        return $2.addBody(LOC(1)(Block.wrap([$1])));
-      }), o('Expression WhileSource', function() {
-        return $2.addBody(LOC(1)(Block.wrap([$1])));
-      }), o('Loop', function() {
-        return $1;
-      })
-    ],
-    Loop: [
-      o('LOOP Block', function() {
-        return new While(LOC(1)(new Literal('true'))).addBody($2);
-      }), o('LOOP Expression', function() {
-        return new While(LOC(1)(new Literal('true'))).addBody(LOC(2)(Block.wrap([$2])));
-      })
-    ],
-    For: [
-      o('Statement  ForBody', function() {
-        return new For($1, $2);
-      }), o('Expression ForBody', function() {
-        return new For($1, $2);
-      }), o('ForBody    Block', function() {
-        return new For($2, $1);
-      })
-    ],
-    ForBody: [
-      o('FOR Range', function() {
-        return {
-          source: LOC(2)(new Value($2))
-        };
-      }), o('ForStart ForSource', function() {
-        $2.own = $1.own;
-        $2.name = $1[0];
-        $2.index = $1[1];
-        return $2;
-      })
-    ],
-    ForStart: [
-      o('FOR ForVariables', function() {
-        return $2;
-      }), o('FOR OWN ForVariables', function() {
-        $3.own = true;
-        return $3;
-      })
-    ],
-    ForValue: [
-      o('Identifier'), o('ThisProperty'), o('Array', function() {
-        return new Value($1);
-      }), o('Object', function() {
-        return new Value($1);
-      })
-    ],
-    ForVariables: [
-      o('ForValue', function() {
-        return [$1];
-      }), o('ForValue , ForValue', function() {
-        return [$1, $3];
-      })
-    ],
-    ForSource: [
-      o('FORIN Expression', function() {
-        return {
-          source: $2
-        };
-      }), o('FOROF Expression', function() {
-        return {
-          source: $2,
-          object: true
-        };
-      }), o('FORIN Expression WHEN Expression', function() {
-        return {
-          source: $2,
-          guard: $4
-        };
-      }), o('FOROF Expression WHEN Expression', function() {
-        return {
-          source: $2,
-          guard: $4,
-          object: true
-        };
-      }), o('FORIN Expression BY Expression', function() {
-        return {
-          source: $2,
-          step: $4
-        };
-      }), o('FORIN Expression WHEN Expression BY Expression', function() {
-        return {
-          source: $2,
-          guard: $4,
-          step: $6
-        };
-      }), o('FORIN Expression BY Expression WHEN Expression', function() {
-        return {
-          source: $2,
-          step: $4,
-          guard: $6
-        };
-      })
-    ],
-    Switch: [
-      o('SWITCH Expression INDENT Whens OUTDENT', function() {
-        return new Switch($2, $4);
-      }), o('SWITCH Expression INDENT Whens ELSE Block OUTDENT', function() {
-        return new Switch($2, $4, $6);
-      }), o('SWITCH INDENT Whens OUTDENT', function() {
-        return new Switch(null, $3);
-      }), o('SWITCH INDENT Whens ELSE Block OUTDENT', function() {
-        return new Switch(null, $3, $5);
-      })
-    ],
-    Whens: [
-      o('When'), o('Whens When', function() {
-        return $1.concat($2);
-      })
-    ],
-    When: [
-      o('LEADING_WHEN SimpleArgs Block', function() {
-        return [[$2, $3]];
-      }), o('LEADING_WHEN SimpleArgs Block TERMINATOR', function() {
-        return [[$2, $3]];
-      })
-    ],
-    IfBlock: [
-      o('IF Expression Block', function() {
-        return new If($2, $3, {
-          type: $1
-        });
-      }), o('IfBlock ELSE IF Expression Block', function() {
-        return $1.addElse(new If($4, $5, {
-          type: $3
-        }));
-      })
-    ],
-    If: [
-      o('IfBlock'), o('IfBlock ELSE Block', function() {
-        return $1.addElse($3);
-      }), o('Statement  POST_IF Expression', function() {
-        return new If($3, LOC(1)(Block.wrap([$1])), {
-          type: $2,
-          statement: true
-        });
-      }), o('Expression POST_IF Expression', function() {
-        return new If($3, LOC(1)(Block.wrap([$1])), {
-          type: $2,
-          statement: true
-        });
-      })
-    ],
-    Operation: [
-      o('UNARY Expression', function() {
-        return new Op($1, $2);
-      }), o('-     Expression', (function() {
-        return new Op('-', $2);
-      }), {
-        prec: 'UNARY'
-      }), o('+     Expression', (function() {
-        return new Op('+', $2);
-      }), {
-        prec: 'UNARY'
-      }), o('-- SimpleAssignable', function() {
-        return new Op('--', $2);
-      }), o('++ SimpleAssignable', function() {
-        return new Op('++', $2);
-      }), o('SimpleAssignable --', function() {
-        return new Op('--', $1, null, true);
-      }), o('SimpleAssignable ++', function() {
-        return new Op('++', $1, null, true);
-      }), o('Expression ?', function() {
-        return new Existence($1);
-      }), o('Expression +  Expression', function() {
-        return new Op('+', $1, $3);
-      }), o('Expression -  Expression', function() {
-        return new Op('-', $1, $3);
-      }), o('Expression MATH     Expression', function() {
-        return new Op($2, $1, $3);
-      }), o('Expression SHIFT    Expression', function() {
-        return new Op($2, $1, $3);
-      }), o('Expression COMPARE  Expression', function() {
-        return new Op($2, $1, $3);
-      }), o('Expression LOGIC    Expression', function() {
-        return new Op($2, $1, $3);
-      }), o('Expression RELATION Expression', function() {
-        if ($2.charAt(0) === '!') {
-          return new Op($2.slice(1), $1, $3).invert();
-        } else {
-          return new Op($2, $1, $3);
-        }
-      }), o('SimpleAssignable COMPOUND_ASSIGN\
-       Expression', function() {
-        return new Assign($1, $3, $2);
-      }), o('SimpleAssignable COMPOUND_ASSIGN\
-       INDENT Expression OUTDENT', function() {
-        return new Assign($1, $4, $2);
-      }), o('SimpleAssignable COMPOUND_ASSIGN TERMINATOR\
-       Expression', function() {
-        return new Assign($1, $4, $2);
-      }), o('SimpleAssignable EXTENDS Expression', function() {
-        return new Extends($1, $3);
-      })
-    ]
-  };
-
-  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, _len1, _ref, _results;
-      _results = [];
-      for (_i = 0, _len = alternatives.length; _i < _len; _i++) {
-        alt = alternatives[_i];
-        _ref = alt[0].split(' ');
-        for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
-          token = _ref[_j];
-          if (!grammar[token]) {
-            tokens.push(token);
-          }
-        }
-        if (name === 'Root') {
-          alt[1] = "return " + alt[1];
-        }
-        _results.push(alt);
-      }
-      return _results;
-    })();
-  }
-
-  exports.parser = new Parser({
-    tokens: tokens.join(' '),
-    bnf: grammar,
-    operators: operators.reverse(),
-    startSymbol: 'Root'
-  });
-
-}).call(this);
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/helpers.js b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/helpers.js
deleted file mode 100755
index d7bac3b3..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/helpers.js
+++ /dev/null
@@ -1,150 +0,0 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var buildLocationData, extend, flatten, _ref;
-
-  exports.starts = function(string, literal, start) {
-    return literal === string.substr(start, literal.length);
-  };
-
-  exports.ends = function(string, literal, back) {
-    var len;
-    len = literal.length;
-    return literal === string.substr(string.length - len - (back || 0), len);
-  };
-
-  exports.compact = function(array) {
-    var item, _i, _len, _results;
-    _results = [];
-    for (_i = 0, _len = array.length; _i < _len; _i++) {
-      item = array[_i];
-      if (item) {
-        _results.push(item);
-      }
-    }
-    return _results;
-  };
-
-  exports.count = function(string, substr) {
-    var num, pos;
-    num = pos = 0;
-    if (!substr.length) {
-      return 1 / 0;
-    }
-    while (pos = 1 + string.indexOf(substr, pos)) {
-      num++;
-    }
-    return num;
-  };
-
-  exports.merge = function(options, overrides) {
-    return extend(extend({}, options), overrides);
-  };
-
-  extend = exports.extend = function(object, properties) {
-    var key, val;
-    for (key in properties) {
-      val = properties[key];
-      object[key] = val;
-    }
-    return object;
-  };
-
-  exports.flatten = flatten = function(array) {
-    var element, flattened, _i, _len;
-    flattened = [];
-    for (_i = 0, _len = array.length; _i < _len; _i++) {
-      element = array[_i];
-      if (element instanceof Array) {
-        flattened = flattened.concat(flatten(element));
-      } else {
-        flattened.push(element);
-      }
-    }
-    return flattened;
-  };
-
-  exports.del = function(obj, key) {
-    var val;
-    val = obj[key];
-    delete obj[key];
-    return val;
-  };
-
-  exports.last = function(array, back) {
-    return array[array.length - (back || 0) - 1];
-  };
-
-  exports.some = (_ref = Array.prototype.some) != null ? _ref : function(fn) {
-    var e, _i, _len;
-    for (_i = 0, _len = this.length; _i < _len; _i++) {
-      e = this[_i];
-      if (fn(e)) {
-        return true;
-      }
-    }
-    return false;
-  };
-
-  buildLocationData = function(first, last) {
-    if (!last) {
-      return first;
-    } else {
-      return {
-        first_line: first.first_line,
-        first_column: first.first_column,
-        last_line: last.last_line,
-        last_column: last.last_column
-      };
-    }
-  };
-
-  exports.addLocationDataFn = function(first, last) {
-    return function(obj) {
-      if (((typeof obj) === 'object') && (!!obj['updateLocationDataIfMissing'])) {
-        obj.updateLocationDataIfMissing(buildLocationData(first, last));
-      }
-      return obj;
-    };
-  };
-
-  exports.locationDataToString = function(obj) {
-    var locationData;
-    if (("2" in obj) && ("first_line" in obj[2])) {
-      locationData = obj[2];
-    } else if ("first_line" in obj) {
-      locationData = obj;
-    }
-    if (locationData) {
-      return ("" + (locationData.first_line + 1) + ":" + (locationData.first_column + 1) + "-") + ("" + (locationData.last_line + 1) + ":" + (locationData.last_column + 1));
-    } else {
-      return "No location data";
-    }
-  };
-
-  exports.baseFileName = function(file, stripExt) {
-    var parts;
-    if (stripExt == null) {
-      stripExt = false;
-    }
-    parts = file.split('/');
-    file = parts[parts.length - 1];
-    if (!stripExt) {
-      return file;
-    }
-    parts = file.split('.');
-    parts.pop();
-    if (parts[parts.length - 1] === 'coffee') {
-      parts.pop();
-    }
-    return parts.join('.');
-  };
-
-  exports.isCoffee = function(file) {
-    return /\.((lit)?coffee|coffee\.md)$/.test(file);
-  };
-
-  exports.isLiterate = function(file) {
-    return /\.(litcoffee|coffee\.md)$/.test(file);
-  };
-
-}).call(this);
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/index.js b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/index.js
deleted file mode 100755
index 1452b452..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/index.js
+++ /dev/null
@@ -1,11 +0,0 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var key, val, _ref;
-
-  _ref = require('./coffee-script');
-  for (key in _ref) {
-    val = _ref[key];
-    exports[key] = val;
-  }
-
-}).call(this);
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/lexer.js b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/lexer.js
deleted file mode 100755
index 5261242e..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/lexer.js
+++ /dev/null
@@ -1,905 +0,0 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var BOM, BOOL, CALLABLE, CODE, COFFEE_ALIASES, COFFEE_ALIAS_MAP, COFFEE_KEYWORDS, COMMENT, COMPARE, COMPOUND_ASSIGN, HEREDOC, HEREDOC_ILLEGAL, HEREDOC_INDENT, HEREGEX, HEREGEX_OMIT, IDENTIFIER, INDEXABLE, INVERSES, JSTOKEN, JS_FORBIDDEN, JS_KEYWORDS, LINE_BREAK, LINE_CONTINUER, LITERATE, 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, locationDataToString, 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;
-
-  _ref1 = require('./helpers'), count = _ref1.count, starts = _ref1.starts, compact = _ref1.compact, last = _ref1.last, locationDataToString = _ref1.locationDataToString;
-
-  exports.Lexer = Lexer = (function() {
-
-    function Lexer() {}
-
-    Lexer.prototype.tokenize = function(code, opts) {
-      var consumed, i, tag, _ref2;
-      if (opts == null) {
-        opts = {};
-      }
-      this.literate = opts.literate;
-      this.indent = 0;
-      this.indebt = 0;
-      this.outdebt = 0;
-      this.indents = [];
-      this.ends = [];
-      this.tokens = [];
-      this.chunkLine = opts.line || 0;
-      this.chunkColumn = opts.column || 0;
-      code = this.clean(code);
-      i = 0;
-      while (this.chunk = code.slice(i)) {
-        consumed = this.identifierToken() || this.commentToken() || this.whitespaceToken() || this.lineToken() || this.heredocToken() || this.stringToken() || this.numberToken() || this.regexToken() || this.jsToken() || this.literalToken();
-        _ref2 = this.getLineAndColumnFromChunk(consumed), this.chunkLine = _ref2[0], this.chunkColumn = _ref2[1];
-        i += consumed;
-      }
-      this.closeIndentation();
-      if (tag = this.ends.pop()) {
-        this.error("missing " + tag);
-      }
-      if (opts.rewrite === false) {
-        return this.tokens;
-      }
-      return (new Rewriter).rewrite(this.tokens);
-    };
-
-    Lexer.prototype.clean = function(code) {
-      var line, lines, match;
-      if (code.charCodeAt(0) === BOM) {
-        code = code.slice(1);
-      }
-      code = code.replace(/\r/g, '').replace(TRAILING_SPACES, '');
-      if (WHITESPACE.test(code)) {
-        code = "\n" + code;
-        this.chunkLine--;
-      }
-      if (this.literate) {
-        lines = (function() {
-          var _i, _len, _ref2, _results;
-          _ref2 = code.split('\n');
-          _results = [];
-          for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-            line = _ref2[_i];
-            if (match = LITERATE.exec(line)) {
-              _results.push(line.slice(match[0].length));
-            } else {
-              _results.push('# ' + line);
-            }
-          }
-          return _results;
-        })();
-        code = lines.join('\n');
-      }
-      return code;
-    };
-
-    Lexer.prototype.identifierToken = function() {
-      var colon, colonOffset, forcedIdentifier, id, idLength, input, match, poppedToken, prev, tag, tagToken, _ref2, _ref3, _ref4;
-      if (!(match = IDENTIFIER.exec(this.chunk))) {
-        return 0;
-      }
-      input = match[0], id = match[1], colon = match[2];
-      idLength = id.length;
-      poppedToken = void 0;
-      if (id === 'own' && this.tag() === 'FOR') {
-        this.token('OWN', id);
-        return id.length;
-      }
-      forcedIdentifier = colon || (prev = last(this.tokens)) && (((_ref2 = prev[0]) === '.' || _ref2 === '?.' || _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' && (_ref3 = this.tag(), __indexOf.call(LINE_BREAK, _ref3) >= 0)) {
-          tag = 'LEADING_WHEN';
-        } else if (tag === 'FOR') {
-          this.seenFor = true;
-        } else if (tag === 'UNLESS') {
-          tag = 'IF';
-        } else if (__indexOf.call(UNARY, tag) >= 0) {
-          tag = 'UNARY';
-        } else if (__indexOf.call(RELATION, tag) >= 0) {
-          if (tag !== 'INSTANCEOF' && this.seenFor) {
-            tag = 'FOR' + tag;
-            this.seenFor = false;
-          } else {
-            tag = 'RELATION';
-            if (this.value() === '!') {
-              poppedToken = this.tokens.pop();
-              id = '!' + id;
-            }
-          }
-        }
-      }
-      if (__indexOf.call(JS_FORBIDDEN, id) >= 0) {
-        if (forcedIdentifier) {
-          tag = 'IDENTIFIER';
-          id = new String(id);
-          id.reserved = true;
-        } else if (__indexOf.call(RESERVED, id) >= 0) {
-          this.error("reserved word \"" + id + "\"");
-        }
-      }
-      if (!forcedIdentifier) {
-        if (__indexOf.call(COFFEE_ALIASES, id) >= 0) {
-          id = COFFEE_ALIAS_MAP[id];
-        }
-        tag = (function() {
-          switch (id) {
-            case '!':
-              return 'UNARY';
-            case '==':
-            case '!=':
-              return 'COMPARE';
-            case '&&':
-            case '||':
-              return 'LOGIC';
-            case 'true':
-            case 'false':
-              return 'BOOL';
-            case 'break':
-            case 'continue':
-              return 'STATEMENT';
-            default:
-              return tag;
-          }
-        })();
-      }
-      tagToken = this.token(tag, id, 0, idLength);
-      if (poppedToken) {
-        _ref4 = [poppedToken[2].first_line, poppedToken[2].first_column], tagToken[2].first_line = _ref4[0], tagToken[2].first_column = _ref4[1];
-      }
-      if (colon) {
-        colonOffset = input.lastIndexOf(':');
-        this.token(':', ':', colonOffset, colon.length);
-      }
-      return input.length;
-    };
-
-    Lexer.prototype.numberToken = function() {
-      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 (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, 0, lexedLength);
-      return lexedLength;
-    };
-
-    Lexer.prototype.stringToken = function() {
-      var match, octalEsc, string;
-      switch (this.chunk.charAt(0)) {
-        case "'":
-          if (!(match = SIMPLESTR.exec(this.chunk))) {
-            return 0;
-          }
-          string = match[0];
-          this.token('STRING', string.replace(MULTILINER, '\\\n'), 0, string.length);
-          break;
-        case '"':
-          if (!(string = this.balancedString(this.chunk, '"'))) {
-            return 0;
-          }
-          if (0 < string.indexOf('#{', 1)) {
-            this.interpolateString(string.slice(1, -1), {
-              strOffset: 1,
-              lexedLength: string.length
-            });
-          } else {
-            this.token('STRING', this.escapeLines(string, 0, string.length));
-          }
-          break;
-        default:
-          return 0;
-      }
-      if (octalEsc = /^(?:\\.|[^\\])*\\(?:0[0-7]|[1-7])/.test(string)) {
-        this.error("octal escape sequences " + string + " are not allowed");
-      }
-      return string.length;
-    };
-
-    Lexer.prototype.heredocToken = function() {
-      var doc, heredoc, match, quote;
-      if (!(match = HEREDOC.exec(this.chunk))) {
-        return 0;
-      }
-      heredoc = match[0];
-      quote = heredoc.charAt(0);
-      doc = this.sanitizeHeredoc(match[2], {
-        quote: quote,
-        indent: null
-      });
-      if (quote === '"' && 0 <= doc.indexOf('#{')) {
-        this.interpolateString(doc, {
-          heredoc: true,
-          strOffset: 3,
-          lexedLength: heredoc.length
-        });
-      } else {
-        this.token('STRING', this.makeString(doc, quote, true), 0, heredoc.length);
-      }
-      return heredoc.length;
-    };
-
-    Lexer.prototype.commentToken = function() {
-      var comment, here, match;
-      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(' ')
-        }), 0, comment.length);
-      }
-      return comment.length;
-    };
-
-    Lexer.prototype.jsToken = function() {
-      var match, script;
-      if (!(this.chunk.charAt(0) === '`' && (match = JSTOKEN.exec(this.chunk)))) {
-        return 0;
-      }
-      this.token('JS', (script = match[0]).slice(1, -1), 0, script.length);
-      return script.length;
-    };
-
-    Lexer.prototype.regexToken = function() {
-      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);
-        return length;
-      }
-      prev = last(this.tokens);
-      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;
-      }
-      _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 = '/(?:)/';
-      }
-      this.token('REGEX', "" + regex + flags, 0, match.length);
-      return match.length;
-    };
-
-    Lexer.prototype.heregexToken = function(match) {
-      var body, flags, flagsOffset, heregex, plusToken, prev, re, tag, token, tokens, value, _i, _len, _ref2, _ref3, _ref4;
-      heregex = match[0], body = match[1], flags = match[2];
-      if (0 > body.indexOf('#{')) {
-        re = body.replace(HEREGEX_OMIT, '').replace(/\//g, '\\/');
-        if (re.match(/^\*/)) {
-          this.error('regular expressions cannot begin with `*`');
-        }
-        this.token('REGEX', "/" + (re || '(?:)') + "/" + flags, 0, heregex.length);
-        return heregex.length;
-      }
-      this.token('IDENTIFIER', 'RegExp', 0, 0);
-      this.token('CALL_START', '(', 0, 0);
-      tokens = [];
-      _ref2 = this.interpolateString(body, {
-        regex: true
-      });
-      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-        token = _ref2[_i];
-        tag = token[0], value = token[1];
-        if (tag === 'TOKENS') {
-          tokens.push.apply(tokens, value);
-        } else if (tag === 'NEOSTRING') {
-          if (!(value = value.replace(HEREGEX_OMIT, ''))) {
-            continue;
-          }
-          value = value.replace(/\\/g, '\\\\');
-          token[0] = 'STRING';
-          token[1] = this.makeString(value, '"', true);
-          tokens.push(token);
-        } else {
-          this.error("Unexpected " + tag);
-        }
-        prev = last(this.tokens);
-        plusToken = ['+', '+'];
-        plusToken[2] = prev[2];
-        tokens.push(plusToken);
-      }
-      tokens.pop();
-      if (((_ref3 = tokens[0]) != null ? _ref3[0] : void 0) !== 'STRING') {
-        this.token('STRING', '""', 0, 0);
-        this.token('+', '+', 0, 0);
-      }
-      (_ref4 = this.tokens).push.apply(_ref4, tokens);
-      if (flags) {
-        flagsOffset = heregex.lastIndexOf(flags);
-        this.token(',', ',', flagsOffset, 0);
-        this.token('STRING', '"' + flags + '"', flagsOffset, flags.length);
-      }
-      this.token(')', ')', heregex.length - 1, 0);
-      return heregex.length;
-    };
-
-    Lexer.prototype.lineToken = function() {
-      var diff, indent, match, noNewlines, size;
-      if (!(match = MULTI_DENT.exec(this.chunk))) {
-        return 0;
-      }
-      indent = match[0];
-      this.seenFor = false;
-      size = indent.length - 1 - indent.lastIndexOf('\n');
-      noNewlines = this.unfinished();
-      if (size - this.indebt === this.indent) {
-        if (noNewlines) {
-          this.suppressNewlines();
-        } else {
-          this.newlineToken(0);
-        }
-        return indent.length;
-      }
-      if (size > this.indent) {
-        if (noNewlines) {
-          this.indebt = size - this.indent;
-          this.suppressNewlines();
-          return indent.length;
-        }
-        diff = size - this.indent + this.outdebt;
-        this.token('INDENT', diff, 0, indent.length);
-        this.indents.push(diff);
-        this.ends.push('OUTDENT');
-        this.outdebt = this.indebt = 0;
-      } else {
-        this.indebt = 0;
-        this.outdentToken(this.indent - size, noNewlines, indent.length);
-      }
-      this.indent = size;
-      return indent.length;
-    };
-
-    Lexer.prototype.outdentToken = function(moveOut, noNewlines, outdentLength) {
-      var dent, len;
-      while (moveOut > 0) {
-        len = this.indents.length - 1;
-        if (this.indents[len] === void 0) {
-          moveOut = 0;
-        } else if (this.indents[len] === this.outdebt) {
-          moveOut -= this.outdebt;
-          this.outdebt = 0;
-        } else if (this.indents[len] < this.outdebt) {
-          this.outdebt -= this.indents[len];
-          moveOut -= this.indents[len];
-        } else {
-          dent = this.indents.pop() + this.outdebt;
-          moveOut -= dent;
-          this.outdebt = 0;
-          this.pair('OUTDENT');
-          this.token('OUTDENT', dent, 0, outdentLength);
-        }
-      }
-      if (dent) {
-        this.outdebt -= moveOut;
-      }
-      while (this.value() === ';') {
-        this.tokens.pop();
-      }
-      if (!(this.tag() === 'TERMINATOR' || noNewlines)) {
-        this.token('TERMINATOR', '\n', outdentLength, 0);
-      }
-      return this;
-    };
-
-    Lexer.prototype.whitespaceToken = function() {
-      var match, nline, prev;
-      if (!((match = WHITESPACE.exec(this.chunk)) || (nline = this.chunk.charAt(0) === '\n'))) {
-        return 0;
-      }
-      prev = last(this.tokens);
-      if (prev) {
-        prev[match ? 'spaced' : 'newLine'] = true;
-      }
-      if (match) {
-        return match[0].length;
-      } else {
-        return 0;
-      }
-    };
-
-    Lexer.prototype.newlineToken = function(offset) {
-      while (this.value() === ';') {
-        this.tokens.pop();
-      }
-      if (this.tag() !== 'TERMINATOR') {
-        this.token('TERMINATOR', '\n', offset, 0);
-      }
-      return this;
-    };
-
-    Lexer.prototype.suppressNewlines = function() {
-      if (this.value() === '\\') {
-        this.tokens.pop();
-      }
-      return this;
-    };
-
-    Lexer.prototype.literalToken = function() {
-      var match, prev, tag, value, _ref2, _ref3, _ref4, _ref5;
-      if (match = OPERATOR.exec(this.chunk)) {
-        value = match[0];
-        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 && (_ref2 = prev[1], __indexOf.call(JS_FORBIDDEN, _ref2) >= 0)) {
-          this.error("reserved word \"" + (this.value()) + "\" can't be assigned");
-        }
-        if ((_ref3 = prev[1]) === '||' || _ref3 === '&&') {
-          prev[0] = 'COMPOUND_ASSIGN';
-          prev[1] += '=';
-          return value.length;
-        }
-      }
-      if (value === ';') {
-        this.seenFor = false;
-        tag = 'TERMINATOR';
-      } else if (__indexOf.call(MATH, value) >= 0) {
-        tag = 'MATH';
-      } else if (__indexOf.call(COMPARE, value) >= 0) {
-        tag = 'COMPARE';
-      } else if (__indexOf.call(COMPOUND_ASSIGN, value) >= 0) {
-        tag = 'COMPOUND_ASSIGN';
-      } else if (__indexOf.call(UNARY, value) >= 0) {
-        tag = 'UNARY';
-      } else if (__indexOf.call(SHIFT, value) >= 0) {
-        tag = 'SHIFT';
-      } else if (__indexOf.call(LOGIC, value) >= 0 || value === '?' && (prev != null ? prev.spaced : void 0)) {
-        tag = 'LOGIC';
-      } else if (prev && !prev.spaced) {
-        if (value === '(' && (_ref4 = prev[0], __indexOf.call(CALLABLE, _ref4) >= 0)) {
-          if (prev[0] === '?') {
-            prev[0] = 'FUNC_EXIST';
-          }
-          tag = 'CALL_START';
-        } else if (value === '[' && (_ref5 = prev[0], __indexOf.call(INDEXABLE, _ref5) >= 0)) {
-          tag = 'INDEX_START';
-          switch (prev[0]) {
-            case '?':
-              prev[0] = 'INDEX_SOAK';
-          }
-        }
-      }
-      switch (value) {
-        case '(':
-        case '{':
-        case '[':
-          this.ends.push(INVERSES[value]);
-          break;
-        case ')':
-        case '}':
-        case ']':
-          this.pair(value);
-      }
-      this.token(tag, value);
-      return value.length;
-    };
-
-    Lexer.prototype.sanitizeHeredoc = function(doc, options) {
-      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;
-        }
-      } else {
-        while (match = HEREDOC_INDENT.exec(doc)) {
-          attempt = match[1];
-          if (indent === null || (0 < (_ref2 = attempt.length) && _ref2 < indent.length)) {
-            indent = attempt;
-          }
-        }
-      }
-      if (indent) {
-        doc = doc.replace(RegExp("\\n" + indent, "g"), '\n');
-      }
-      if (this.literate) {
-        doc = doc.replace(/\n# \n/g, '\n\n');
-      }
-      if (!herecomment) {
-        doc = doc.replace(/^\n/, '');
-      }
-      return doc;
-    };
-
-    Lexer.prototype.tagParameters = function() {
-      var i, stack, tok, tokens;
-      if (this.tag() !== ')') {
-        return this;
-      }
-      stack = [];
-      tokens = this.tokens;
-      i = tokens.length;
-      tokens[--i][0] = 'PARAM_END';
-      while (tok = tokens[--i]) {
-        switch (tok[0]) {
-          case ')':
-            stack.push(tok);
-            break;
-          case '(':
-          case 'CALL_START':
-            if (stack.length) {
-              stack.pop();
-            } else if (tok[0] === '(') {
-              tok[0] = 'PARAM_START';
-              return this;
-            } else {
-              return this;
-            }
-        }
-      }
-      return this;
-    };
-
-    Lexer.prototype.closeIndentation = function() {
-      return this.outdentToken(this.indent);
-    };
-
-    Lexer.prototype.balancedString = function(str, end) {
-      var continueCount, i, letter, match, prev, stack, _i, _ref2;
-      continueCount = 0;
-      stack = [end];
-      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 '\\':
-            ++continueCount;
-            continue;
-          case end:
-            stack.pop();
-            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)))) {
-          continueCount += match[0].length - 1;
-        } else if (end === '}' && letter === '{') {
-          stack.push(end = '}');
-        } else if (end === '"' && prev === '#' && letter === '{') {
-          stack.push(end = '}');
-        }
-        prev = letter;
-      }
-      return this.error("missing " + (stack.pop()) + ", starting");
-    };
-
-    Lexer.prototype.interpolateString = function(str, options) {
-      var column, expr, heredoc, i, inner, interpolated, len, letter, lexedLength, line, locationToken, nested, offsetInChunk, pi, plusToken, popped, regex, strOffset, tag, token, tokens, value, _i, _len, _ref2, _ref3, _ref4;
-      if (options == null) {
-        options = {};
-      }
-      heredoc = options.heredoc, regex = options.regex, offsetInChunk = options.offsetInChunk, strOffset = options.strOffset, lexedLength = options.lexedLength;
-      offsetInChunk = offsetInChunk || 0;
-      strOffset = strOffset || 0;
-      lexedLength = lexedLength || str.length;
-      if (heredoc && str.length > 0 && str[0] === '\n') {
-        str = str.slice(1);
-        strOffset++;
-      }
-      tokens = [];
-      pi = 0;
-      i = -1;
-      while (letter = str.charAt(i += 1)) {
-        if (letter === '\\') {
-          i += 1;
-          continue;
-        }
-        if (!(letter === '#' && str.charAt(i + 1) === '{' && (expr = this.balancedString(str.slice(i + 1), '}')))) {
-          continue;
-        }
-        if (pi < i) {
-          tokens.push(this.makeToken('NEOSTRING', str.slice(pi, i), strOffset + pi));
-        }
-        inner = expr.slice(1, -1);
-        if (inner.length) {
-          _ref2 = this.getLineAndColumnFromChunk(strOffset + i + 1), line = _ref2[0], column = _ref2[1];
-          nested = new Lexer().tokenize(inner, {
-            line: line,
-            column: column,
-            rewrite: false
-          });
-          popped = nested.pop();
-          if (((_ref3 = nested[0]) != null ? _ref3[0] : void 0) === 'TERMINATOR') {
-            popped = nested.shift();
-          }
-          if (len = nested.length) {
-            if (len > 1) {
-              nested.unshift(this.makeToken('(', '(', strOffset + i + 1, 0));
-              nested.push(this.makeToken(')', ')', strOffset + i + 1 + inner.length, 0));
-            }
-            tokens.push(['TOKENS', nested]);
-          }
-        }
-        i += expr.length;
-        pi = i + 1;
-      }
-      if ((i > pi && pi < str.length)) {
-        tokens.push(this.makeToken('NEOSTRING', str.slice(pi), strOffset + pi));
-      }
-      if (regex) {
-        return tokens;
-      }
-      if (!tokens.length) {
-        return this.token('STRING', '""', offsetInChunk, lexedLength);
-      }
-      if (tokens[0][0] !== 'NEOSTRING') {
-        tokens.unshift(this.makeToken('NEOSTRING', '', offsetInChunk));
-      }
-      if (interpolated = tokens.length > 1) {
-        this.token('(', '(', offsetInChunk, 0);
-      }
-      for (i = _i = 0, _len = tokens.length; _i < _len; i = ++_i) {
-        token = tokens[i];
-        tag = token[0], value = token[1];
-        if (i) {
-          if (i) {
-            plusToken = this.token('+', '+');
-          }
-          locationToken = tag === 'TOKENS' ? value[0] : token;
-          plusToken[2] = {
-            first_line: locationToken[2].first_line,
-            first_column: locationToken[2].first_column,
-            last_line: locationToken[2].first_line,
-            last_column: locationToken[2].first_column
-          };
-        }
-        if (tag === 'TOKENS') {
-          (_ref4 = this.tokens).push.apply(_ref4, value);
-        } else if (tag === 'NEOSTRING') {
-          token[0] = 'STRING';
-          token[1] = this.makeString(value, '"', heredoc);
-          this.tokens.push(token);
-        } else {
-          this.error("Unexpected " + tag);
-        }
-      }
-      if (interpolated) {
-        this.token(')', ')', offsetInChunk + lexedLength, 0);
-      }
-      return tokens;
-    };
-
-    Lexer.prototype.pair = function(tag) {
-      var size, wanted;
-      if (tag !== (wanted = last(this.ends))) {
-        if ('OUTDENT' !== wanted) {
-          this.error("unmatched " + tag);
-        }
-        this.indent -= size = last(this.indents);
-        this.outdentToken(size, true);
-        return this.pair(tag);
-      }
-      return this.ends.pop();
-    };
-
-    Lexer.prototype.getLineAndColumnFromChunk = function(offset) {
-      var column, lineCount, lines, string;
-      if (offset === 0) {
-        return [this.chunkLine, this.chunkColumn];
-      }
-      if (offset >= this.chunk.length) {
-        string = this.chunk;
-      } else {
-        string = this.chunk.slice(0, +(offset - 1) + 1 || 9e9);
-      }
-      lineCount = count(string, '\n');
-      column = this.chunkColumn;
-      if (lineCount > 0) {
-        lines = string.split('\n');
-        column = (last(lines)).length;
-      } else {
-        column += string.length;
-      }
-      return [this.chunkLine + lineCount, column];
-    };
-
-    Lexer.prototype.makeToken = function(tag, value, offsetInChunk, length) {
-      var lastCharacter, locationData, token, _ref2, _ref3;
-      if (offsetInChunk == null) {
-        offsetInChunk = 0;
-      }
-      if (length == null) {
-        length = value.length;
-      }
-      locationData = {};
-      _ref2 = this.getLineAndColumnFromChunk(offsetInChunk), locationData.first_line = _ref2[0], locationData.first_column = _ref2[1];
-      lastCharacter = Math.max(0, length - 1);
-      _ref3 = this.getLineAndColumnFromChunk(offsetInChunk + (length - 1)), locationData.last_line = _ref3[0], locationData.last_column = _ref3[1];
-      token = [tag, value, locationData];
-      return token;
-    };
-
-    Lexer.prototype.token = function(tag, value, offsetInChunk, length) {
-      var token;
-      token = this.makeToken(tag, value, offsetInChunk, length);
-      this.tokens.push(token);
-      return token;
-    };
-
-    Lexer.prototype.tag = function(index, tag) {
-      var tok;
-      return (tok = last(this.tokens, index)) && (tag ? tok[0] = tag : tok[0]);
-    };
-
-    Lexer.prototype.value = function(index, val) {
-      var tok;
-      return (tok = last(this.tokens, index)) && (val ? tok[1] = val : tok[1]);
-    };
-
-    Lexer.prototype.unfinished = function() {
-      var _ref2;
-      return LINE_CONTINUER.test(this.chunk) || ((_ref2 = this.tag()) === '\\' || _ref2 === '.' || _ref2 === '?.' || _ref2 === '?::' || _ref2 === 'UNARY' || _ref2 === 'MATH' || _ref2 === '+' || _ref2 === '-' || _ref2 === 'SHIFT' || _ref2 === 'RELATION' || _ref2 === 'COMPARE' || _ref2 === 'LOGIC' || _ref2 === 'THROW' || _ref2 === 'EXTENDS');
-    };
-
-    Lexer.prototype.escapeLines = function(str, heredoc) {
-      return str.replace(MULTILINER, heredoc ? '\\n' : '');
-    };
-
-    Lexer.prototype.makeString = function(body, quote, heredoc) {
-      if (!body) {
-        return quote + quote;
-      }
-      body = body.replace(/\\([\s\S])/g, function(match, contents) {
-        if (contents === '\n' || contents === quote) {
-          return contents;
-        } else {
-          return match;
-        }
-      });
-      body = body.replace(RegExp("" + quote, "g"), '\\$&');
-      return quote + this.escapeLines(body, heredoc) + quote;
-    };
-
-    Lexer.prototype.error = function(message) {
-      throw SyntaxError("" + message + " on line " + (this.chunkLine + 1));
-    };
-
-    return Lexer;
-
-  })();
-
-  JS_KEYWORDS = ['true', 'false', 'null', 'this', 'new', 'delete', 'typeof', 'in', 'instanceof', 'return', 'throw', 'break', 'continue', 'debugger', 'if', 'else', 'switch', 'for', 'while', 'do', 'try', 'catch', 'finally', 'class', 'extends', 'super'];
-
-  COFFEE_KEYWORDS = ['undefined', 'then', 'unless', 'until', 'loop', 'of', 'by', 'when'];
-
-  COFFEE_ALIAS_MAP = {
-    and: '&&',
-    or: '||',
-    is: '==',
-    isnt: '!=',
-    not: '!',
-    yes: 'true',
-    no: 'false',
-    on: 'true',
-    off: 'false'
-  };
-
-  COFFEE_ALIASES = (function() {
-    var _results;
-    _results = [];
-    for (key in COFFEE_ALIAS_MAP) {
-      _results.push(key);
-    }
-    return _results;
-  })();
-
-  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', 'implements', 'interface', 'package', 'private', 'protected', 'public', 'static', 'yield'];
-
-  STRICT_PROSCRIBED = ['arguments', 'eval'];
-
-  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;
-
-  BOM = 65279;
-
-  IDENTIFIER = /^([$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)([^\n\S]*:(?!:))?/;
-
-  NUMBER = /^0b[01]+|^0o[0-7]+|^0x[\da-f]+|^\d*\.?\d+(?:e[+-]?\d+)?/i;
-
-  HEREDOC = /^("""|''')([\s\S]*?)(?:\n[^\n\S]*)?\1/;
-
-  OPERATOR = /^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>])\2=?|\?(\.|::)|\.{2,3})/;
-
-  WHITESPACE = /^[^\n\S]+/;
-
-  COMMENT = /^###([^#][\s\S]*?)(?:###[^\n\S]*|(?:###)$)|^(?:\s*#(?!##[^#]).*)+/;
-
-  LITERATE = /^([ ]{4}|\t)/;
-
-  CODE = /^[-=]>/;
-
-  MULTI_DENT = /^(?:\n[^\n\S]*)+/;
-
-  SIMPLESTR = /^'[^\\']*(?:\\.[^\\']*)*'/;
-
-  JSTOKEN = /^`[^\\`]*(?:\\.[^\\`]*)*`/;
-
-  REGEX = /^(\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)([imgy]{0,4})(?!\w)/;
-
-  HEREGEX = /^\/{3}([\s\S]+?)\/{3}([imgy]{0,4})(?!\w)/;
-
-  HEREGEX_OMIT = /\s+(?:#.*)?/g;
-
-  MULTILINER = /\n/g;
-
-  HEREDOC_INDENT = /\n+([^\n\S]*)/g;
-
-  HEREDOC_ILLEGAL = /\*\//;
-
-  LINE_CONTINUER = /^\s*(?:,|\??\.(?![.\d])|::)/;
-
-  TRAILING_SPACES = /\s+$/;
-
-  COMPOUND_ASSIGN = ['-=', '+=', '/=', '*=', '%=', '||=', '&&=', '?=', '<<=', '>>=', '>>>=', '&=', '^=', '|='];
-
-  UNARY = ['!', '~', 'NEW', 'TYPEOF', 'DELETE', 'DO'];
-
-  LOGIC = ['&&', '||', '&', '|', '^'];
-
-  SHIFT = ['<<', '>>', '>>>'];
-
-  COMPARE = ['==', '!=', '<', '>', '<=', '>='];
-
-  MATH = ['*', '/', '%'];
-
-  RELATION = ['IN', 'OF', 'INSTANCEOF'];
-
-  BOOL = ['TRUE', 'FALSE'];
-
-  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', 'NULL', 'UNDEFINED');
-
-  LINE_BREAK = ['INDENT', 'OUTDENT', 'TERMINATOR'];
-
-}).call(this);
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/nodes.js b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/nodes.js
deleted file mode 100755
index c274724d..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/nodes.js
+++ /dev/null
@@ -1,3088 +0,0 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var Access, Arr, Assign, Base, Block, Call, Class, Closure, Code, CodeFragment, Comment, Existence, Extends, For, IDENTIFIER, IDENTIFIER_STR, IS_STRING, If, In, Index, LEVEL_ACCESS, LEVEL_COND, LEVEL_LIST, LEVEL_OP, LEVEL_PAREN, LEVEL_TOP, Literal, METHOD_DEF, NEGATE, NO, Obj, Op, Param, Parens, RESERVED, Range, Return, SIMPLENUM, STRICT_PROSCRIBED, Scope, Slice, Splat, Switch, TAB, THIS, Throw, Try, UTILITIES, Value, While, YES, addLocationDataFn, compact, del, ends, extend, flatten, fragmentsToText, last, locationDataToString, merge, multident, some, starts, 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; },
-    __slice = [].slice;
-
-  Error.stackTraceLimit = Infinity;
-
-  Scope = require('./scope').Scope;
-
-  _ref = require('./lexer'), RESERVED = _ref.RESERVED, STRICT_PROSCRIBED = _ref.STRICT_PROSCRIBED;
-
-  _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, some = _ref1.some, addLocationDataFn = _ref1.addLocationDataFn, locationDataToString = _ref1.locationDataToString;
-
-  exports.extend = extend;
-
-  exports.addLocationDataFn = addLocationDataFn;
-
-  YES = function() {
-    return true;
-  };
-
-  NO = function() {
-    return false;
-  };
-
-  THIS = function() {
-    return this;
-  };
-
-  NEGATE = function() {
-    this.negated = !this.negated;
-    return this;
-  };
-
-  exports.CodeFragment = CodeFragment = (function() {
-
-    function CodeFragment(parent, code) {
-      var _ref2;
-      this.code = "" + code;
-      this.locationData = parent != null ? parent.locationData : void 0;
-      this.type = (parent != null ? (_ref2 = parent.constructor) != null ? _ref2.name : void 0 : void 0) || 'unknown';
-    }
-
-    CodeFragment.prototype.toString = function() {
-      return "" + this.code + [this.locationData ? ": " + locationDataToString(this.locationData) : void 0];
-    };
-
-    return CodeFragment;
-
-  })();
-
-  fragmentsToText = function(fragments) {
-    var fragment;
-    return ((function() {
-      var _i, _len, _results;
-      _results = [];
-      for (_i = 0, _len = fragments.length; _i < _len; _i++) {
-        fragment = fragments[_i];
-        _results.push(fragment.code);
-      }
-      return _results;
-    })()).join('');
-  };
-
-  exports.Base = Base = (function() {
-
-    function Base() {}
-
-    Base.prototype.compile = function(o, lvl) {
-      return fragmentsToText(this.compileToFragments(o, lvl));
-    };
-
-    Base.prototype.compileToFragments = function(o, lvl) {
-      var node;
-      o = extend({}, o);
-      if (lvl) {
-        o.level = lvl;
-      }
-      node = this.unfoldSoak(o) || this;
-      node.tab = o.indent;
-      if (o.level === LEVEL_TOP || !node.isStatement(o)) {
-        return node.compileNode(o);
-      } else {
-        return node.compileClosure(o);
-      }
-    };
-
-    Base.prototype.compileClosure = function(o) {
-      if (this.jumps()) {
-        throw SyntaxError('cannot use a pure statement in an expression.');
-      }
-      o.sharedScope = true;
-      return Closure.wrap(this).compileNode(o);
-    };
-
-    Base.prototype.cache = function(o, level, reused) {
-      var ref, sub;
-      if (!this.isComplex()) {
-        ref = level ? this.compileToFragments(o, level) : this;
-        return [ref, ref];
-      } else {
-        ref = new Literal(reused || o.scope.freeVariable('ref'));
-        sub = new Assign(ref, this);
-        if (level) {
-          return [sub.compileToFragments(o, level), [this.makeCode(ref.value)]];
-        } else {
-          return [sub, ref];
-        }
-      }
-    };
-
-    Base.prototype.cacheToCodeFragments = function(cacheValues) {
-      return [fragmentsToText(cacheValues[0]), fragmentsToText(cacheValues[1])];
-    };
-
-    Base.prototype.makeReturn = function(res) {
-      var me;
-      me = this.unwrapAll();
-      if (res) {
-        return new Call(new Literal("" + res + ".push"), [me]);
-      } else {
-        return new Return(me);
-      }
-    };
-
-    Base.prototype.contains = function(pred) {
-      var contains;
-      contains = false;
-      this.traverseChildren(false, function(node) {
-        if (pred(node)) {
-          contains = true;
-          return false;
-        }
-      });
-      return contains;
-    };
-
-    Base.prototype.containsType = function(type) {
-      return this instanceof type || this.contains(function(node) {
-        return node instanceof type;
-      });
-    };
-
-    Base.prototype.lastNonComment = function(list) {
-      var i;
-      i = list.length;
-      while (i--) {
-        if (!(list[i] instanceof Comment)) {
-          return list[i];
-        }
-      }
-      return null;
-    };
-
-    Base.prototype.toString = function(idt, name) {
-      var location, tree;
-      if (idt == null) {
-        idt = '';
-      }
-      if (name == null) {
-        name = this.constructor.name;
-      }
-      location = this.locationData ? locationDataToString(this.locationData) : "??";
-      tree = '\n' + idt + location + ": " + name;
-      if (this.soak) {
-        tree += '?';
-      }
-      this.eachChild(function(node) {
-        return tree += node.toString(idt + TAB);
-      });
-      return tree;
-    };
-
-    Base.prototype.eachChild = function(func) {
-      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, _len1 = _ref3.length; _j < _len1; _j++) {
-            child = _ref3[_j];
-            if (func(child) === false) {
-              return this;
-            }
-          }
-        }
-      }
-      return this;
-    };
-
-    Base.prototype.traverseChildren = function(crossScope, func) {
-      return this.eachChild(function(child) {
-        if (func(child) === false) {
-          return false;
-        }
-        return child.traverseChildren(crossScope, func);
-      });
-    };
-
-    Base.prototype.invert = function() {
-      return new Op('!', this);
-    };
-
-    Base.prototype.unwrapAll = function() {
-      var node;
-      node = this;
-      while (node !== (node = node.unwrap())) {
-        continue;
-      }
-      return node;
-    };
-
-    Base.prototype.children = [];
-
-    Base.prototype.isStatement = NO;
-
-    Base.prototype.jumps = NO;
-
-    Base.prototype.isComplex = YES;
-
-    Base.prototype.isChainable = NO;
-
-    Base.prototype.isAssignable = NO;
-
-    Base.prototype.unwrap = THIS;
-
-    Base.prototype.unfoldSoak = NO;
-
-    Base.prototype.assigns = NO;
-
-    Base.prototype.updateLocationDataIfMissing = function(locationData) {
-      if (!this.locationData) {
-        this.locationData = {};
-        extend(this.locationData, locationData);
-      }
-      return this.eachChild(function(child) {
-        return child.updateLocationDataIfMissing(locationData);
-      });
-    };
-
-    Base.prototype.makeCode = function(code) {
-      return new CodeFragment(this, code);
-    };
-
-    Base.prototype.wrapInBraces = function(fragments) {
-      return [].concat(this.makeCode('('), fragments, this.makeCode(')'));
-    };
-
-    Base.prototype.joinFragmentArrays = function(fragmentsList, joinStr) {
-      var answer, fragments, i, _i, _len;
-      answer = [];
-      for (i = _i = 0, _len = fragmentsList.length; _i < _len; i = ++_i) {
-        fragments = fragmentsList[i];
-        if (i) {
-          answer.push(this.makeCode(joinStr));
-        }
-        answer = answer.concat(fragments);
-      }
-      return answer;
-    };
-
-    return Base;
-
-  })();
-
-  exports.Block = Block = (function(_super) {
-
-    __extends(Block, _super);
-
-    function Block(nodes) {
-      this.expressions = compact(flatten(nodes || []));
-    }
-
-    Block.prototype.children = ['expressions'];
-
-    Block.prototype.push = function(node) {
-      this.expressions.push(node);
-      return this;
-    };
-
-    Block.prototype.pop = function() {
-      return this.expressions.pop();
-    };
-
-    Block.prototype.unshift = function(node) {
-      this.expressions.unshift(node);
-      return this;
-    };
-
-    Block.prototype.unwrap = function() {
-      if (this.expressions.length === 1) {
-        return this.expressions[0];
-      } else {
-        return this;
-      }
-    };
-
-    Block.prototype.isEmpty = function() {
-      return !this.expressions.length;
-    };
-
-    Block.prototype.isStatement = function(o) {
-      var exp, _i, _len, _ref2;
-      _ref2 = this.expressions;
-      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-        exp = _ref2[_i];
-        if (exp.isStatement(o)) {
-          return true;
-        }
-      }
-      return false;
-    };
-
-    Block.prototype.jumps = function(o) {
-      var exp, _i, _len, _ref2;
-      _ref2 = this.expressions;
-      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-        exp = _ref2[_i];
-        if (exp.jumps(o)) {
-          return exp;
-        }
-      }
-    };
-
-    Block.prototype.makeReturn = function(res) {
-      var expr, len;
-      len = this.expressions.length;
-      while (len--) {
-        expr = this.expressions[len];
-        if (!(expr instanceof Comment)) {
-          this.expressions[len] = expr.makeReturn(res);
-          if (expr instanceof Return && !expr.expression) {
-            this.expressions.splice(len, 1);
-          }
-          break;
-        }
-      }
-      return this;
-    };
-
-    Block.prototype.compileToFragments = function(o, level) {
-      if (o == null) {
-        o = {};
-      }
-      if (o.scope) {
-        return Block.__super__.compileToFragments.call(this, o, level);
-      } else {
-        return this.compileRoot(o);
-      }
-    };
-
-    Block.prototype.compileNode = function(o) {
-      var answer, compiledNodes, fragments, index, node, top, _i, _len, _ref2;
-      this.tab = o.indent;
-      top = o.level === LEVEL_TOP;
-      compiledNodes = [];
-      _ref2 = this.expressions;
-      for (index = _i = 0, _len = _ref2.length; _i < _len; index = ++_i) {
-        node = _ref2[index];
-        node = node.unwrapAll();
-        node = node.unfoldSoak(o) || node;
-        if (node instanceof Block) {
-          compiledNodes.push(node.compileNode(o));
-        } else if (top) {
-          node.front = true;
-          fragments = node.compileToFragments(o);
-          if (!node.isStatement(o)) {
-            fragments.unshift(this.makeCode("" + this.tab));
-            fragments.push(this.makeCode(";"));
-          }
-          compiledNodes.push(fragments);
-        } else {
-          compiledNodes.push(node.compileToFragments(o, LEVEL_LIST));
-        }
-      }
-      if (top) {
-        if (this.spaced) {
-          return [].concat(this.makeCode("\n"), this.joinFragmentArrays(compiledNodes, '\n\n'), this.makeCode("\n"));
-        } else {
-          return this.joinFragmentArrays(compiledNodes, '\n');
-        }
-      }
-      if (compiledNodes.length) {
-        answer = this.joinFragmentArrays(compiledNodes, ', ');
-      } else {
-        answer = [this.makeCode("void 0")];
-      }
-      if (compiledNodes.length > 1 && o.level >= LEVEL_LIST) {
-        return this.wrapInBraces(answer);
-      } else {
-        return answer;
-      }
-    };
-
-    Block.prototype.compileRoot = function(o) {
-      var exp, fragments, i, prelude, preludeExps, rest;
-      o.indent = o.bare ? '' : TAB;
-      o.scope = new Scope(null, this, null);
-      o.level = LEVEL_TOP;
-      this.spaced = true;
-      prelude = [];
-      if (!o.bare) {
-        preludeExps = (function() {
-          var _i, _len, _ref2, _results;
-          _ref2 = this.expressions;
-          _results = [];
-          for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
-            exp = _ref2[i];
-            if (!(exp.unwrap() instanceof Comment)) {
-              break;
-            }
-            _results.push(exp);
-          }
-          return _results;
-        }).call(this);
-        rest = this.expressions.slice(preludeExps.length);
-        this.expressions = preludeExps;
-        if (preludeExps.length) {
-          prelude = this.compileNode(merge(o, {
-            indent: ''
-          }));
-          prelude.push(this.makeCode("\n"));
-        }
-        this.expressions = rest;
-      }
-      fragments = this.compileWithDeclarations(o);
-      if (o.bare) {
-        return fragments;
-      }
-      return [].concat(prelude, this.makeCode("(function() {\n"), fragments, this.makeCode("\n}).call(this);\n"));
-    };
-
-    Block.prototype.compileWithDeclarations = function(o) {
-      var assigns, declars, exp, fragments, i, post, rest, scope, spaced, _i, _len, _ref2, _ref3, _ref4;
-      fragments = [];
-      post = [];
-      _ref2 = this.expressions;
-      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;
-        }
-      }
-      o = merge(o, {
-        level: LEVEL_TOP
-      });
-      if (i) {
-        rest = this.expressions.splice(i, 9e9);
-        _ref3 = [this.spaced, false], spaced = _ref3[0], this.spaced = _ref3[1];
-        _ref4 = [this.compileNode(o), spaced], fragments = _ref4[0], this.spaced = _ref4[1];
-        this.expressions = rest;
-      }
-      post = this.compileNode(o);
-      scope = o.scope;
-      if (scope.expressions === this) {
-        declars = o.scope.hasDeclarations();
-        assigns = scope.hasAssignments;
-        if (declars || assigns) {
-          if (i) {
-            fragments.push(this.makeCode('\n'));
-          }
-          fragments.push(this.makeCode("" + this.tab + "var "));
-          if (declars) {
-            fragments.push(this.makeCode(scope.declaredVariables().join(', ')));
-          }
-          if (assigns) {
-            if (declars) {
-              fragments.push(this.makeCode(",\n" + (this.tab + TAB)));
-            }
-            fragments.push(this.makeCode(scope.assignedVariables().join(",\n" + (this.tab + TAB))));
-          }
-          fragments.push(this.makeCode(';\n'));
-        }
-      }
-      return fragments.concat(post);
-    };
-
-    Block.wrap = function(nodes) {
-      if (nodes.length === 1 && nodes[0] instanceof Block) {
-        return nodes[0];
-      }
-      return new Block(nodes);
-    };
-
-    return Block;
-
-  })(Base);
-
-  exports.Literal = Literal = (function(_super) {
-
-    __extends(Literal, _super);
-
-    function Literal(value) {
-      this.value = value;
-    }
-
-    Literal.prototype.makeReturn = function() {
-      if (this.isStatement()) {
-        return this;
-      } else {
-        return Literal.__super__.makeReturn.apply(this, arguments);
-      }
-    };
-
-    Literal.prototype.isAssignable = function() {
-      return IDENTIFIER.test(this.value);
-    };
-
-    Literal.prototype.isStatement = function() {
-      var _ref2;
-      return (_ref2 = this.value) === 'break' || _ref2 === 'continue' || _ref2 === 'debugger';
-    };
-
-    Literal.prototype.isComplex = NO;
-
-    Literal.prototype.assigns = function(name) {
-      return name === this.value;
-    };
-
-    Literal.prototype.jumps = function(o) {
-      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;
-      }
-    };
-
-    Literal.prototype.compileNode = function(o) {
-      var answer, code, _ref2;
-      code = this.value === 'this' ? ((_ref2 = o.scope.method) != null ? _ref2.bound : void 0) ? o.scope.method.context : this.value : this.value.reserved ? "\"" + this.value + "\"" : this.value;
-      answer = this.isStatement() ? "" + this.tab + code + ";" : code;
-      return [this.makeCode(answer)];
-    };
-
-    Literal.prototype.toString = function() {
-      return ' "' + this.value + '"';
-    };
-
-    return Literal;
-
-  })(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) {
-      return [this.makeCode(o.level >= LEVEL_ACCESS ? '(void 0)' : '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 [this.makeCode("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.makeCode(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;
-      }
-    }
-
-    Return.prototype.children = ['expression'];
-
-    Return.prototype.isStatement = YES;
-
-    Return.prototype.makeReturn = THIS;
-
-    Return.prototype.jumps = THIS;
-
-    Return.prototype.compileToFragments = function(o, level) {
-      var expr, _ref2;
-      expr = (_ref2 = this.expression) != null ? _ref2.makeReturn() : void 0;
-      if (expr && !(expr instanceof Return)) {
-        return expr.compileToFragments(o, level);
-      } else {
-        return Return.__super__.compileToFragments.call(this, o, level);
-      }
-    };
-
-    Return.prototype.compileNode = function(o) {
-      var answer;
-      answer = [];
-      answer.push(this.makeCode(this.tab + ("return" + [this.expression ? " " : void 0])));
-      if (this.expression) {
-        answer = answer.concat(this.expression.compileToFragments(o, LEVEL_PAREN));
-      }
-      answer.push(this.makeCode(";"));
-      return answer;
-    };
-
-    return Return;
-
-  })(Base);
-
-  exports.Value = Value = (function(_super) {
-
-    __extends(Value, _super);
-
-    function Value(base, props, tag) {
-      if (!props && base instanceof Value) {
-        return base;
-      }
-      this.base = base;
-      this.properties = props || [];
-      if (tag) {
-        this[tag] = true;
-      }
-      return this;
-    }
-
-    Value.prototype.children = ['base', 'properties'];
-
-    Value.prototype.add = function(props) {
-      this.properties = this.properties.concat(props);
-      return this;
-    };
-
-    Value.prototype.hasProperties = function() {
-      return !!this.properties.length;
-    };
-
-    Value.prototype.isArray = function() {
-      return !this.properties.length && this.base instanceof Arr;
-    };
-
-    Value.prototype.isComplex = function() {
-      return this.hasProperties() || this.base.isComplex();
-    };
-
-    Value.prototype.isAssignable = function() {
-      return this.hasProperties() || this.base.isAssignable();
-    };
-
-    Value.prototype.isSimpleNumber = function() {
-      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;
-        }
-      }
-      return true;
-    };
-
-    Value.prototype.isStatement = function(o) {
-      return !this.properties.length && this.base.isStatement(o);
-    };
-
-    Value.prototype.assigns = function(name) {
-      return !this.properties.length && this.base.assigns(name);
-    };
-
-    Value.prototype.jumps = function(o) {
-      return !this.properties.length && this.base.jumps(o);
-    };
-
-    Value.prototype.isObject = function(onlyGenerated) {
-      if (this.properties.length) {
-        return false;
-      }
-      return (this.base instanceof Obj) && (!onlyGenerated || this.base.generated);
-    };
-
-    Value.prototype.isSplice = function() {
-      return last(this.properties) instanceof Slice;
-    };
-
-    Value.prototype.unwrap = function() {
-      if (this.properties.length) {
-        return this;
-      } else {
-        return this.base;
-      }
-    };
-
-    Value.prototype.cacheReference = function(o) {
-      var base, bref, name, nref;
-      name = last(this.properties);
-      if (this.properties.length < 2 && !this.base.isComplex() && !(name != null ? name.isComplex() : void 0)) {
-        return [this, this];
-      }
-      base = new Value(this.base, this.properties.slice(0, -1));
-      if (base.isComplex()) {
-        bref = new Literal(o.scope.freeVariable('base'));
-        base = new Value(new Parens(new Assign(bref, base)));
-      }
-      if (!name) {
-        return [base, bref];
-      }
-      if (name.isComplex()) {
-        nref = new Literal(o.scope.freeVariable('name'));
-        name = new Index(new Assign(nref, name.index));
-        nref = new Index(nref);
-      }
-      return [base.add(name), new Value(bref || base.base, [nref || name])];
-    };
-
-    Value.prototype.compileNode = function(o) {
-      var fragments, prop, props, _i, _len;
-      this.base.front = this.front;
-      props = this.properties;
-      fragments = this.base.compileToFragments(o, (props.length ? LEVEL_ACCESS : null));
-      if ((this.base instanceof Parens || props.length) && SIMPLENUM.test(fragmentsToText(fragments))) {
-        fragments.push(this.makeCode('.'));
-      }
-      for (_i = 0, _len = props.length; _i < _len; _i++) {
-        prop = props[_i];
-        fragments.push.apply(fragments, prop.compileToFragments(o));
-      }
-      return fragments;
-    };
-
-    Value.prototype.unfoldSoak = function(o) {
-      var _ref2,
-        _this = this;
-      return (_ref2 = this.unfoldedSoak) != null ? _ref2 : this.unfoldedSoak = (function() {
-        var fst, i, ifn, prop, ref, snd, _i, _len, _ref3, _ref4;
-        if (ifn = _this.base.unfoldSoak(o)) {
-          (_ref3 = ifn.body.properties).push.apply(_ref3, _this.properties);
-          return ifn;
-        }
-        _ref4 = _this.properties;
-        for (i = _i = 0, _len = _ref4.length; _i < _len; i = ++_i) {
-          prop = _ref4[i];
-          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));
-          if (fst.isComplex()) {
-            ref = new Literal(o.scope.freeVariable('ref'));
-            fst = new Parens(new Assign(ref, fst));
-            snd.base = ref;
-          }
-          return new If(new Existence(fst), snd, {
-            soak: true
-          });
-        }
-        return false;
-      })();
-    };
-
-    return Value;
-
-  })(Base);
-
-  exports.Comment = Comment = (function(_super) {
-
-    __extends(Comment, _super);
-
-    function Comment(comment) {
-      this.comment = comment;
-    }
-
-    Comment.prototype.isStatement = YES;
-
-    Comment.prototype.makeReturn = THIS;
-
-    Comment.prototype.compileNode = function(o, level) {
-      var code;
-      code = '/*' + multident(this.comment, this.tab) + ("\n" + this.tab + "*/\n");
-      if ((level || o.level) === LEVEL_TOP) {
-        code = o.indent + code;
-      }
-      return [this.makeCode(code)];
-    };
-
-    return Comment;
-
-  })(Base);
-
-  exports.Call = Call = (function(_super) {
-
-    __extends(Call, _super);
-
-    function Call(variable, args, soak) {
-      this.args = args != null ? args : [];
-      this.soak = soak;
-      this.isNew = false;
-      this.isSuper = variable === 'super';
-      this.variable = this.isSuper ? null : variable;
-    }
-
-    Call.prototype.children = ['variable', 'args'];
-
-    Call.prototype.newInstance = function() {
-      var base, _ref2;
-      base = ((_ref2 = this.variable) != null ? _ref2.base : void 0) || this.variable;
-      if (base instanceof Call && !base.isNew) {
-        base.newInstance();
-      } else {
-        this.isNew = true;
-      }
-      return this;
-    };
-
-    Call.prototype.superReference = function(o) {
-      var accesses, method;
-      method = o.scope.namedMethod();
-      if (method != null ? method.klass : void 0) {
-        accesses = [new Access(new Literal('__super__'))];
-        if (method["static"]) {
-          accesses.push(new Access(new Literal('constructor')));
-        }
-        accesses.push(new Access(new Literal(method.name)));
-        return (new Value(new Literal(method.klass), accesses)).compile(o);
-      } else if (method != null ? method.ctor : void 0) {
-        return "" + method.name + ".__super__.constructor";
-      } else {
-        throw SyntaxError('cannot call super outside of an instance method.');
-      }
-    };
-
-    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;
-          }
-          _ref2 = new Value(this.variable).cacheReference(o), left = _ref2[0], rite = _ref2[1];
-        } else {
-          left = new Literal(this.superReference(o));
-          rite = new Value(left);
-        }
-        rite = new Call(rite, this.args);
-        rite.isNew = this.isNew;
-        left = new Literal("typeof " + (left.compile(o)) + " === \"function\"");
-        return new If(left, new Value(rite), {
-          soak: true
-        });
-      }
-      call = this;
-      list = [];
-      while (true) {
-        if (call.variable instanceof Call) {
-          list.push(call);
-          call = call.variable;
-          continue;
-        }
-        if (!(call.variable instanceof Value)) {
-          break;
-        }
-        list.push(call);
-        if (!((call = call.variable.base) instanceof Call)) {
-          break;
-        }
-      }
-      _ref3 = list.reverse();
-      for (_i = 0, _len = _ref3.length; _i < _len; _i++) {
-        call = _ref3[_i];
-        if (ifn) {
-          if (call.variable instanceof Call) {
-            call.variable = ifn;
-          } else {
-            call.variable.base = ifn;
-          }
-        }
-        ifn = unfoldSoak(o, call, 'variable');
-      }
-      return ifn;
-    };
-
-    Call.prototype.compileNode = function(o) {
-      var arg, argIndex, compiledArgs, compiledArray, fragments, preface, _i, _len, _ref2, _ref3;
-      if ((_ref2 = this.variable) != null) {
-        _ref2.front = this.front;
-      }
-      compiledArray = Splat.compileSplattedArray(o, this.args, true);
-      if (compiledArray.length) {
-        return this.compileSplat(o, compiledArray);
-      }
-      compiledArgs = [];
-      _ref3 = this.args;
-      for (argIndex = _i = 0, _len = _ref3.length; _i < _len; argIndex = ++_i) {
-        arg = _ref3[argIndex];
-        if (argIndex) {
-          compiledArgs.push(this.makeCode(", "));
-        }
-        compiledArgs.push.apply(compiledArgs, arg.compileToFragments(o, LEVEL_LIST));
-      }
-      fragments = [];
-      if (this.isSuper) {
-        preface = this.superReference(o) + (".call(" + (this.superThis(o)));
-        if (compiledArgs.length) {
-          preface += ", ";
-        }
-        fragments.push(this.makeCode(preface));
-      } else {
-        if (this.isNew) {
-          fragments.push(this.makeCode('new '));
-        }
-        fragments.push.apply(fragments, this.variable.compileToFragments(o, LEVEL_ACCESS));
-        fragments.push(this.makeCode("("));
-      }
-      fragments.push.apply(fragments, compiledArgs);
-      fragments.push(this.makeCode(")"));
-      return fragments;
-    };
-
-    Call.prototype.compileSplat = function(o, splatArgs) {
-      var answer, base, fun, idt, name, ref;
-      if (this.isSuper) {
-        return [].concat(this.makeCode("" + (this.superReference(o)) + ".apply(" + (this.superThis(o)) + ", "), splatArgs, this.makeCode(")"));
-      }
-      if (this.isNew) {
-        idt = this.tab + TAB;
-        return [].concat(this.makeCode("(function(func, args, ctor) {\n" + idt + "ctor.prototype = func.prototype;\n" + idt + "var child = new ctor, result = func.apply(child, args);\n" + idt + "return Object(result) === result ? result : child;\n" + this.tab + "})("), this.variable.compileToFragments(o, LEVEL_LIST), this.makeCode(", "), splatArgs, this.makeCode(", function(){})"));
-      }
-      answer = [];
-      base = new Value(this.variable);
-      if ((name = base.properties.pop()) && base.isComplex()) {
-        ref = o.scope.freeVariable('ref');
-        answer = answer.concat(this.makeCode("(" + ref + " = "), base.compileToFragments(o, LEVEL_LIST), this.makeCode(")"), name.compileToFragments(o));
-      } else {
-        fun = base.compileToFragments(o, LEVEL_ACCESS);
-        if (SIMPLENUM.test(fragmentsToText(fun))) {
-          fun = this.wrapInBraces(fun);
-        }
-        if (name) {
-          ref = fragmentsToText(fun);
-          fun.push.apply(fun, name.compileToFragments(o));
-        } else {
-          ref = 'null';
-        }
-        answer = answer.concat(fun);
-      }
-      return answer = answer.concat(this.makeCode(".apply(" + ref + ", "), splatArgs, this.makeCode(")"));
-    };
-
-    return Call;
-
-  })(Base);
-
-  exports.Extends = Extends = (function(_super) {
-
-    __extends(Extends, _super);
-
-    function Extends(child, parent) {
-      this.child = child;
-      this.parent = parent;
-    }
-
-    Extends.prototype.children = ['child', 'parent'];
-
-    Extends.prototype.compileToFragments = function(o) {
-      return new Call(new Value(new Literal(utility('extends'))), [this.child, this.parent]).compileToFragments(o);
-    };
-
-    return Extends;
-
-  })(Base);
-
-  exports.Access = Access = (function(_super) {
-
-    __extends(Access, _super);
-
-    function Access(name, tag) {
-      this.name = name;
-      this.name.asKey = true;
-      this.soak = tag === 'soak';
-    }
-
-    Access.prototype.children = ['name'];
-
-    Access.prototype.compileToFragments = function(o) {
-      var name;
-      name = this.name.compileToFragments(o);
-      if (IDENTIFIER.test(fragmentsToText(name))) {
-        name.unshift(this.makeCode("."));
-      } else {
-        name.unshift(this.makeCode("["));
-        name.push(this.makeCode("]"));
-      }
-      return name;
-    };
-
-    Access.prototype.isComplex = NO;
-
-    return Access;
-
-  })(Base);
-
-  exports.Index = Index = (function(_super) {
-
-    __extends(Index, _super);
-
-    function Index(index) {
-      this.index = index;
-    }
-
-    Index.prototype.children = ['index'];
-
-    Index.prototype.compileToFragments = function(o) {
-      return [].concat(this.makeCode("["), this.index.compileToFragments(o, LEVEL_PAREN), this.makeCode("]"));
-    };
-
-    Index.prototype.isComplex = function() {
-      return this.index.isComplex();
-    };
-
-    return Index;
-
-  })(Base);
-
-  exports.Range = Range = (function(_super) {
-
-    __extends(Range, _super);
-
-    Range.prototype.children = ['from', 'to'];
-
-    function Range(from, to, tag) {
-      this.from = from;
-      this.to = to;
-      this.exclusive = tag === 'exclusive';
-      this.equals = this.exclusive ? '' : '=';
-    }
-
-    Range.prototype.compileVariables = function(o) {
-      var step, _ref2, _ref3, _ref4, _ref5;
-      o = merge(o, {
-        top: true
-      });
-      _ref2 = this.cacheToCodeFragments(this.from.cache(o, LEVEL_LIST)), this.fromC = _ref2[0], this.fromVar = _ref2[1];
-      _ref3 = this.cacheToCodeFragments(this.to.cache(o, LEVEL_LIST)), this.toC = _ref3[0], this.toVar = _ref3[1];
-      if (step = del(o, 'step')) {
-        _ref4 = this.cacheToCodeFragments(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);
-      }
-    };
-
-    Range.prototype.compileNode = function(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;
-      }
-      _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.stepVar ? "" + this.stepVar + " > 0" : "" + this.fromVar + " <= " + this.toVar, "" + cond + " ? " + lt + " " + this.toVar + " : " + gt + " " + this.toVar);
-      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 [this.makeCode("" + varPart + "; " + condPart + "; " + stepPart)];
-    };
-
-    Range.prototype.compileArray = function(o) {
-      var args, body, cond, hasArgs, i, idt, post, pre, range, result, vars, _i, _ref2, _ref3, _results;
-      if (this.fromNum && this.toNum && Math.abs(this.fromNum - this.toNum) <= 20) {
-        range = (function() {
-          _results = [];
-          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();
-        }
-        return [this.makeCode("[" + (range.join(', ')) + "]")];
-      }
-      idt = this.tab + TAB;
-      i = o.scope.freeVariable('i');
-      result = o.scope.freeVariable('results');
-      pre = "\n" + idt + result + " = [];";
-      if (this.fromNum && this.toNum) {
-        o.index = i;
-        body = fragmentsToText(this.compileNode(o));
-      } else {
-        vars = ("" + i + " = " + this.fromC) + (this.toC !== this.toVar ? ", " + this.toC : '');
-        cond = "" + this.fromVar + " <= " + this.toVar;
-        body = "var " + vars + "; " + cond + " ? " + i + " <" + this.equals + " " + this.toVar + " : " + i + " >" + this.equals + " " + this.toVar + "; " + cond + " ? " + i + "++ : " + i + "--";
-      }
-      post = "{ " + result + ".push(" + i + "); }\n" + idt + "return " + result + ";\n" + o.indent;
-      hasArgs = function(node) {
-        return node != null ? node.contains(function(n) {
-          return n instanceof Literal && n.value === 'arguments' && !n.asKey;
-        }) : void 0;
-      };
-      if (hasArgs(this.from) || hasArgs(this.to)) {
-        args = ', arguments';
-      }
-      return [this.makeCode("(function() {" + pre + "\n" + idt + "for (" + body + ")" + post + "}).apply(this" + (args != null ? args : '') + ")")];
-    };
-
-    return Range;
-
-  })(Base);
-
-  exports.Slice = Slice = (function(_super) {
-
-    __extends(Slice, _super);
-
-    Slice.prototype.children = ['range'];
-
-    function Slice(range) {
-      this.range = range;
-      Slice.__super__.constructor.call(this);
-    }
-
-    Slice.prototype.compileNode = function(o) {
-      var compiled, compiledText, from, fromCompiled, to, toStr, _ref2;
-      _ref2 = this.range, to = _ref2.to, from = _ref2.from;
-      fromCompiled = from && from.compileToFragments(o, LEVEL_PAREN) || [this.makeCode('0')];
-      if (to) {
-        compiled = to.compileToFragments(o, LEVEL_PAREN);
-        compiledText = fragmentsToText(compiled);
-        if (!(!this.range.exclusive && +compiledText === -1)) {
-          toStr = ', ' + (this.range.exclusive ? compiledText : SIMPLENUM.test(compiledText) ? "" + (+compiledText + 1) : (compiled = to.compileToFragments(o, LEVEL_ACCESS), "+" + (fragmentsToText(compiled)) + " + 1 || 9e9"));
-        }
-      }
-      return [this.makeCode(".slice(" + (fragmentsToText(fromCompiled)) + (toStr || '') + ")")];
-    };
-
-    return Slice;
-
-  })(Base);
-
-  exports.Obj = Obj = (function(_super) {
-
-    __extends(Obj, _super);
-
-    function Obj(props, generated) {
-      this.generated = generated != null ? generated : false;
-      this.objects = this.properties = props || [];
-    }
-
-    Obj.prototype.children = ['properties'];
-
-    Obj.prototype.compileNode = function(o) {
-      var answer, i, idt, indent, join, lastNoncom, node, prop, props, _i, _j, _len, _len1;
-      props = this.properties;
-      if (!props.length) {
-        return [this.makeCode(this.front ? '({})' : '{}')];
-      }
-      if (this.generated) {
-        for (_i = 0, _len = props.length; _i < _len; _i++) {
-          node = props[_i];
-          if (node instanceof Value) {
-            throw new Error('cannot have an implicit value in an implicit object');
-          }
-        }
-      }
-      idt = o.indent += TAB;
-      lastNoncom = this.lastNonComment(this.properties);
-      answer = [];
-      for (i = _j = 0, _len1 = props.length; _j < _len1; i = ++_j) {
-        prop = props[i];
-        join = i === props.length - 1 ? '' : prop === lastNoncom || prop instanceof Comment ? '\n' : ',\n';
-        indent = prop instanceof Comment ? '' : idt;
-        if (prop instanceof Value && prop["this"]) {
-          prop = new Assign(prop.properties[0].name, prop, 'object');
-        }
-        if (!(prop instanceof Comment)) {
-          if (!(prop instanceof Assign)) {
-            prop = new Assign(prop, prop, 'object');
-          }
-          (prop.variable.base || prop.variable).asKey = true;
-        }
-        if (indent) {
-          answer.push(this.makeCode(indent));
-        }
-        answer.push.apply(answer, prop.compileToFragments(o, LEVEL_TOP));
-        if (join) {
-          answer.push(this.makeCode(join));
-        }
-      }
-      answer.unshift(this.makeCode("{" + (props.length && '\n')));
-      answer.push(this.makeCode("" + (props.length && '\n' + this.tab) + "}"));
-      if (this.front) {
-        return this.wrapInBraces(answer);
-      } else {
-        return answer;
-      }
-    };
-
-    Obj.prototype.assigns = function(name) {
-      var prop, _i, _len, _ref2;
-      _ref2 = this.properties;
-      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-        prop = _ref2[_i];
-        if (prop.assigns(name)) {
-          return true;
-        }
-      }
-      return false;
-    };
-
-    return Obj;
-
-  })(Base);
-
-  exports.Arr = Arr = (function(_super) {
-
-    __extends(Arr, _super);
-
-    function Arr(objs) {
-      this.objects = objs || [];
-    }
-
-    Arr.prototype.children = ['objects'];
-
-    Arr.prototype.compileNode = function(o) {
-      var answer, compiledObjs, fragments, index, obj, _i, _len;
-      if (!this.objects.length) {
-        return [this.makeCode('[]')];
-      }
-      o.indent += TAB;
-      answer = Splat.compileSplattedArray(o, this.objects);
-      if (answer.length) {
-        return answer;
-      }
-      answer = [];
-      compiledObjs = (function() {
-        var _i, _len, _ref2, _results;
-        _ref2 = this.objects;
-        _results = [];
-        for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-          obj = _ref2[_i];
-          _results.push(obj.compileToFragments(o, LEVEL_LIST));
-        }
-        return _results;
-      }).call(this);
-      for (index = _i = 0, _len = compiledObjs.length; _i < _len; index = ++_i) {
-        fragments = compiledObjs[index];
-        if (index) {
-          answer.push(this.makeCode(", "));
-        }
-        answer.push.apply(answer, fragments);
-      }
-      if ((fragmentsToText(answer)).indexOf('\n') >= 0) {
-        answer.unshift(this.makeCode("[\n" + o.indent));
-        answer.push(this.makeCode("\n" + this.tab + "]"));
-      } else {
-        answer.unshift(this.makeCode("["));
-        answer.push(this.makeCode("]"));
-      }
-      return answer;
-    };
-
-    Arr.prototype.assigns = function(name) {
-      var obj, _i, _len, _ref2;
-      _ref2 = this.objects;
-      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-        obj = _ref2[_i];
-        if (obj.assigns(name)) {
-          return true;
-        }
-      }
-      return false;
-    };
-
-    return Arr;
-
-  })(Base);
-
-  exports.Class = Class = (function(_super) {
-
-    __extends(Class, _super);
-
-    function Class(variable, parent, body) {
-      this.variable = variable;
-      this.parent = parent;
-      this.body = body != null ? body : new Block;
-      this.boundFuncs = [];
-      this.body.classBody = true;
-    }
-
-    Class.prototype.children = ['variable', 'parent', 'body'];
-
-    Class.prototype.determineName = function() {
-      var decl, tail;
-      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 instanceof Literal && node.value === 'this') {
-          return node.value = name;
-        } else if (node instanceof Code) {
-          node.klass = name;
-          if (node.bound) {
-            return node.context = name;
-          }
-        }
-      });
-    };
-
-    Class.prototype.addBoundFunctions = function(o) {
-      var body, bound, func, lhs, name, rhs, _i, _len, _ref2, _ref3;
-      if (this.boundFuncs.length) {
-        o.scope.assign('_this', 'this');
-        _ref2 = this.boundFuncs;
-        for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-          _ref3 = _ref2[_i], name = _ref3[0], func = _ref3[1];
-          lhs = new Value(new Literal("this"), [new Access(name)]);
-          body = new Block([new Return(new Literal("" + this.ctor.name + ".prototype." + name.value + ".apply(_this, arguments)"))]);
-          rhs = new Code(func.params, body, 'boundfunc');
-          bound = new Assign(lhs, rhs);
-          this.ctor.body.unshift(bound);
-        }
-      }
-    };
-
-    Class.prototype.addProperties = function(node, name, o) {
-      var assign, base, exprs, func, props;
-      props = node.base.properties.slice(0);
-      exprs = (function() {
-        var _results;
-        _results = [];
-        while (assign = props.shift()) {
-          if (assign instanceof Assign) {
-            base = assign.variable.base;
-            delete assign.context;
-            func = assign.value;
-            if (base.value === 'constructor') {
-              if (this.ctor) {
-                throw new Error('cannot define more than one constructor in a class');
-              }
-              if (func.bound) {
-                throw new Error('cannot define a constructor as a bound function');
-              }
-              if (func instanceof Code) {
-                assign = this.ctor = func;
-              } else {
-                this.externalCtor = o.scope.freeVariable('class');
-                assign = new Assign(new Literal(this.externalCtor), func);
-              }
-            } else {
-              if (assign.variable["this"]) {
-                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) {
-                  this.boundFuncs.push([base, func]);
-                  func.bound = false;
-                }
-              }
-            }
-          }
-          _results.push(assign);
-        }
-        return _results;
-      }).call(this);
-      return compact(exprs);
-    };
-
-    Class.prototype.walkBody = function(name, o) {
-      var _this = this;
-      return this.traverseChildren(false, function(child) {
-        var cont, exps, i, node, _i, _len, _ref2;
-        cont = true;
-        if (child instanceof Class) {
-          return false;
-        }
-        if (child instanceof Block) {
-          _ref2 = exps = child.expressions;
-          for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
-            node = _ref2[i];
-            if (node instanceof Value && node.isObject(true)) {
-              cont = false;
-              exps[i] = _this.addProperties(node, name, o);
-            }
-          }
-          child.expressions = exps = flatten(exps);
-        }
-        return cont && !(child instanceof Class);
-      });
-    };
-
-    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;
-        if (this.parent) {
-          this.ctor.body.push(new Literal("" + name + ".__super__.constructor.apply(this, arguments)"));
-        }
-        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;
-      this.ctor.klass = null;
-      return this.ctor.noReturn = true;
-    };
-
-    Class.prototype.compileNode = function(o) {
-      var call, decl, klass, lname, name, params, _ref2;
-      decl = this.determineName();
-      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);
-      }
-      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);
-        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);
-      }
-      return klass.compileToFragments(o);
-    };
-
-    return Class;
-
-  })(Base);
-
-  exports.Assign = Assign = (function(_super) {
-
-    __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'];
-
-    Assign.prototype.isStatement = function(o) {
-      return (o != null ? o.level : void 0) === LEVEL_TOP && (this.context != null) && __indexOf.call(this.context, "?") >= 0;
-    };
-
-    Assign.prototype.assigns = function(name) {
-      return this[this.context === 'object' ? 'value' : 'variable'].assigns(name);
-    };
-
-    Assign.prototype.unfoldSoak = function(o) {
-      return unfoldSoak(o, this, 'variable');
-    };
-
-    Assign.prototype.compileNode = function(o) {
-      var answer, compiledName, isValue, match, name, val, varBase, _ref2, _ref3, _ref4, _ref5;
-      if (isValue = this.variable instanceof Value) {
-        if (this.variable.isArray() || this.variable.isObject()) {
-          return this.compilePatternMatch(o);
-        }
-        if (this.variable.isSplice()) {
-          return this.compileSplice(o);
-        }
-        if ((_ref2 = this.context) === '||=' || _ref2 === '&&=' || _ref2 === '?=') {
-          return this.compileConditional(o);
-        }
-      }
-      compiledName = this.variable.compileToFragments(o, LEVEL_LIST);
-      name = fragmentsToText(compiledName);
-      if (!this.context) {
-        if (!(varBase = this.variable.unwrapAll()).isAssignable()) {
-          throw SyntaxError("\"" + (this.variable.compile(o)) + "\" cannot be assigned.");
-        }
-        if (!(typeof varBase.hasProperties === "function" ? varBase.hasProperties() : void 0)) {
-          if (this.param) {
-            o.scope.add(name, 'var');
-          } else {
-            o.scope.find(name);
-          }
-        }
-      }
-      if (this.value instanceof Code && (match = METHOD_DEF.exec(name))) {
-        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.compileToFragments(o, LEVEL_LIST);
-      if (this.context === 'object') {
-        return compiledName.concat(this.makeCode(": "), val);
-      }
-      answer = compiledName.concat(this.makeCode(" " + (this.context || '=') + " "), val);
-      if (o.level <= LEVEL_LIST) {
-        return answer;
-      } else {
-        return this.wrapInBraces(answer);
-      }
-    };
-
-    Assign.prototype.compilePatternMatch = function(o) {
-      var acc, assigns, code, fragments, i, idx, isObject, ivar, name, obj, objects, olen, ref, rest, splat, top, val, value, vvar, vvarText, _i, _len, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7;
-      top = o.level === LEVEL_TOP;
-      value = this.value;
-      objects = this.variable.base.objects;
-      if (!(olen = objects.length)) {
-        code = value.compileToFragments(o);
-        if (o.level >= LEVEL_OP) {
-          return this.wrapInBraces(code);
-        } else {
-          return code;
-        }
-      }
-      isObject = this.variable.isObject();
-      if (top && olen === 1 && !((obj = objects[0]) instanceof Splat)) {
-        if (obj instanceof Assign) {
-          _ref2 = obj, (_ref3 = _ref2.variable, idx = _ref3.base), obj = _ref2.value;
-        } else {
-          idx = isObject ? obj["this"] ? obj.properties[0].name : obj : new Literal(0);
-        }
-        acc = IDENTIFIER.test(idx.unwrap().value || 0);
-        value = new Value(value);
-        value.properties.push(new (acc ? Access : Index)(idx));
-        if (_ref4 = obj.unwrap().value, __indexOf.call(RESERVED, _ref4) >= 0) {
-          throw new SyntaxError("assignment to a reserved word: " + (obj.compile(o)) + " = " + (value.compile(o)));
-        }
-        return new Assign(obj, value, null, {
-          param: this.param
-        }).compileToFragments(o, LEVEL_TOP);
-      }
-      vvar = value.compileToFragments(o, LEVEL_LIST);
-      vvarText = fragmentsToText(vvar);
-      assigns = [];
-      splat = false;
-      if (!IDENTIFIER.test(vvarText) || this.variable.assigns(vvarText)) {
-        assigns.push([this.makeCode("" + (ref = o.scope.freeVariable('ref')) + " = ")].concat(__slice.call(vvar)));
-        vvar = [this.makeCode(ref)];
-        vvarText = ref;
-      }
-      for (i = _i = 0, _len = objects.length; _i < _len; i = ++_i) {
-        obj = objects[i];
-        idx = i;
-        if (isObject) {
-          if (obj instanceof Assign) {
-            _ref5 = obj, (_ref6 = _ref5.variable, idx = _ref6.base), obj = _ref5.value;
-          } else {
-            if (obj.base instanceof Parens) {
-              _ref7 = new Value(obj.unwrapAll()).cacheReference(o), obj = _ref7[0], idx = _ref7[1];
-            } else {
-              idx = obj["this"] ? obj.properties[0].name : obj;
-            }
-          }
-        }
-        if (!splat && obj instanceof Splat) {
-          name = obj.name.unwrap().value;
-          obj = obj.unwrap();
-          val = "" + olen + " <= " + vvarText + ".length ? " + (utility('slice')) + ".call(" + vvarText + ", " + i;
-          if (rest = olen - i - 1) {
-            ivar = o.scope.freeVariable('i');
-            val += ", " + ivar + " = " + vvarText + ".length - " + rest + ") : (" + ivar + " = " + i + ", [])";
-          } else {
-            val += ") : []";
-          }
-          val = new Literal(val);
-          splat = "" + ivar + "++";
-        } else {
-          name = obj.unwrap().value;
-          if (obj instanceof Splat) {
-            obj = obj.name.compileToFragments(o);
-            throw new SyntaxError("multiple splats are disallowed in an assignment: " + obj + "...");
-          }
-          if (typeof idx === 'number') {
-            idx = new Literal(splat || idx);
-            acc = false;
-          } else {
-            acc = isObject && IDENTIFIER.test(idx.unwrap().value || 0);
-          }
-          val = new Value(new Literal(vvarText), [new (acc ? Access : Index)(idx)]);
-        }
-        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, {
-          param: this.param,
-          subpattern: true
-        }).compileToFragments(o, LEVEL_LIST));
-      }
-      if (!(top || this.subpattern)) {
-        assigns.push(vvar);
-      }
-      fragments = this.joinFragmentArrays(assigns, ', ');
-      if (o.level < LEVEL_LIST) {
-        return fragments;
-      } else {
-        return this.wrapInBraces(fragments);
-      }
-    };
-
-    Assign.prototype.compileConditional = function(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, '=')).compileToFragments(o);
-    };
-
-    Assign.prototype.compileSplice = function(o) {
-      var answer, exclusive, from, fromDecl, fromRef, name, to, valDef, valRef, _ref2, _ref3, _ref4;
-      _ref2 = this.variable.properties.pop().range, from = _ref2.from, to = _ref2.to, exclusive = _ref2.exclusive;
-      name = this.variable.compile(o);
-      if (from) {
-        _ref3 = this.cacheToCodeFragments(from.cache(o, LEVEL_OP)), fromDecl = _ref3[0], fromRef = _ref3[1];
-      } else {
-        fromDecl = fromRef = '0';
-      }
-      if (to) {
-        if ((from != null ? from.isSimpleNumber() : void 0) && to.isSimpleNumber()) {
-          to = +to.compile(o) - +fromRef;
-          if (!exclusive) {
-            to += 1;
-          }
-        } else {
-          to = to.compile(o, LEVEL_ACCESS) + ' - ' + fromRef;
-          if (!exclusive) {
-            to += ' + 1';
-          }
-        }
-      } else {
-        to = "9e9";
-      }
-      _ref4 = this.value.cache(o, LEVEL_LIST), valDef = _ref4[0], valRef = _ref4[1];
-      answer = [].concat(this.makeCode("[].splice.apply(" + name + ", [" + fromDecl + ", " + to + "].concat("), valDef, this.makeCode(")), "), valRef);
-      if (o.level > LEVEL_TOP) {
-        return this.wrapInBraces(answer);
-      } else {
-        return answer;
-      }
-    };
-
-    return Assign;
-
-  })(Base);
-
-  exports.Code = Code = (function(_super) {
-
-    __extends(Code, _super);
-
-    function Code(params, body, tag) {
-      this.params = params || [];
-      this.body = body || new Block;
-      this.bound = tag === 'boundfunc';
-      if (this.bound) {
-        this.context = '_this';
-      }
-    }
-
-    Code.prototype.children = ['params', 'body'];
-
-    Code.prototype.isStatement = function() {
-      return !!this.ctor;
-    };
-
-    Code.prototype.jumps = NO;
-
-    Code.prototype.compileNode = function(o) {
-      var answer, code, exprs, i, idt, lit, name, p, param, params, ref, splats, uniqs, val, wasEmpty, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _len5, _len6, _m, _n, _o, _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;
-      delete o.isExistentialEquals;
-      params = [];
-      exprs = [];
-      _ref2 = this.paramNames();
-      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-        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 _l, _len3, _ref5, _results;
-          _ref5 = this.params;
-          _results = [];
-          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;
-      }
-      _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);
-          }
-          exprs.push(new Assign(new Value(param.name), val, '=', {
-            param: true
-          }));
-        } else {
-          ref = param;
-          if (param.value) {
-            lit = new Literal(ref.name.value + ' == null');
-            val = new Assign(new Value(param.name), param.value, '=');
-            exprs.push(new If(lit, val));
-          }
-        }
-        if (!splats) {
-          params.push(ref);
-        }
-      }
-      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];
-        params[i] = p.compileToFragments(o);
-        o.scope.parameter(fragmentsToText(params[i]));
-      }
-      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 ((_ref8 = o.scope.parent.method) != null ? _ref8.bound : void 0) {
-          this.bound = this.context = o.scope.parent.method.context;
-        } else if (!this["static"]) {
-          o.scope.parent.assign('_this', 'this');
-        }
-      }
-      idt = o.indent;
-      code = 'function';
-      if (this.ctor) {
-        code += ' ' + this.name;
-      }
-      code += '(';
-      answer = [this.makeCode(code)];
-      for (i = _o = 0, _len6 = params.length; _o < _len6; i = ++_o) {
-        p = params[i];
-        if (i) {
-          answer.push(this.makeCode(", "));
-        }
-        answer.push.apply(answer, p);
-      }
-      answer.push(this.makeCode(') {'));
-      if (!this.body.isEmpty()) {
-        answer = answer.concat(this.makeCode("\n"), this.body.compileWithDeclarations(o), this.makeCode("\n" + this.tab));
-      }
-      answer.push(this.makeCode('}'));
-      if (this.ctor) {
-        return [this.makeCode(this.tab)].concat(__slice.call(answer));
-      }
-      if (this.front || (o.level >= LEVEL_ACCESS)) {
-        return this.wrapInBraces(answer);
-      } else {
-        return answer;
-      }
-    };
-
-    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);
-      }
-    };
-
-    return Code;
-
-  })(Base);
-
-  exports.Param = Param = (function(_super) {
-
-    __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'];
-
-    Param.prototype.compileToFragments = function(o) {
-      return this.name.compileToFragments(o, LEVEL_LIST);
-    };
-
-    Param.prototype.asReference = function(o) {
-      var node;
-      if (this.reference) {
-        return this.reference;
-      }
-      node = this.name;
-      if (node["this"]) {
-        node = node.properties[0].name;
-        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);
-      }
-      return this.reference = node;
-    };
-
-    Param.prototype.isComplex = function() {
-      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.apply(names, this.names(obj.value.unwrap()));
-        } 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);
-
-  exports.Splat = Splat = (function(_super) {
-
-    __extends(Splat, _super);
-
-    Splat.prototype.children = ['name'];
-
-    Splat.prototype.isAssignable = YES;
-
-    function Splat(name) {
-      this.name = name.compile ? name : new Literal(name);
-    }
-
-    Splat.prototype.assigns = function(name) {
-      return this.name.assigns(name);
-    };
-
-    Splat.prototype.compileToFragments = function(o) {
-      return this.name.compileToFragments(o);
-    };
-
-    Splat.prototype.unwrap = function() {
-      return this.name;
-    };
-
-    Splat.compileSplattedArray = function(o, list, apply) {
-      var args, base, compiledNode, concatPart, fragments, i, index, node, _i, _len;
-      index = -1;
-      while ((node = list[++index]) && !(node instanceof Splat)) {
-        continue;
-      }
-      if (index >= list.length) {
-        return [];
-      }
-      if (list.length === 1) {
-        node = list[0];
-        fragments = node.compileToFragments(o, LEVEL_LIST);
-        if (apply) {
-          return fragments;
-        }
-        return [].concat(node.makeCode("" + (utility('slice')) + ".call("), fragments, node.makeCode(")"));
-      }
-      args = list.slice(index);
-      for (i = _i = 0, _len = args.length; _i < _len; i = ++_i) {
-        node = args[i];
-        compiledNode = node.compileToFragments(o, LEVEL_LIST);
-        args[i] = node instanceof Splat ? [].concat(node.makeCode("" + (utility('slice')) + ".call("), compiledNode, node.makeCode(")")) : [].concat(node.makeCode("["), compiledNode, node.makeCode("]"));
-      }
-      if (index === 0) {
-        node = list[0];
-        concatPart = node.joinFragmentArrays(args.slice(1), ', ');
-        return args[0].concat(node.makeCode(".concat("), concatPart, node.makeCode(")"));
-      }
-      base = (function() {
-        var _j, _len1, _ref2, _results;
-        _ref2 = list.slice(0, index);
-        _results = [];
-        for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
-          node = _ref2[_j];
-          _results.push(node.compileToFragments(o, LEVEL_LIST));
-        }
-        return _results;
-      })();
-      base = list[0].joinFragmentArrays(base, ', ');
-      concatPart = list[index].joinFragmentArrays(args, ', ');
-      return [].concat(list[0].makeCode("["), base, list[index].makeCode("].concat("), concatPart, (last(list)).makeCode(")"));
-    };
-
-    return Splat;
-
-  })(Base);
-
-  exports.While = While = (function(_super) {
-
-    __extends(While, _super);
-
-    function While(condition, options) {
-      this.condition = (options != null ? options.invert : void 0) ? condition.invert() : condition;
-      this.guard = options != null ? options.guard : void 0;
-    }
-
-    While.prototype.children = ['condition', 'guard', 'body'];
-
-    While.prototype.isStatement = YES;
-
-    While.prototype.makeReturn = function(res) {
-      if (res) {
-        return While.__super__.makeReturn.apply(this, arguments);
-      } else {
-        this.returns = !this.jumps({
-          loop: true
-        });
-        return this;
-      }
-    };
-
-    While.prototype.addBody = function(body) {
-      this.body = body;
-      return this;
-    };
-
-    While.prototype.jumps = function() {
-      var expressions, node, _i, _len;
-      expressions = this.body.expressions;
-      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 false;
-    };
-
-    While.prototype.compileNode = function(o) {
-      var answer, body, rvar, set;
-      o.indent += TAB;
-      set = '';
-      body = this.body;
-      if (body.isEmpty()) {
-        body = '';
-      } else {
-        if (this.returns) {
-          body.makeReturn(rvar = o.scope.freeVariable('results'));
-          set = "" + this.tab + rvar + " = [];\n";
-        }
-        if (this.guard) {
-          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)]);
-            }
-          }
-        }
-        body = [].concat(this.makeCode("\n"), body.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab));
-      }
-      answer = [].concat(this.makeCode(set + this.tab + "while ("), this.condition.compileToFragments(o, LEVEL_PAREN), this.makeCode(") {"), body, this.makeCode("}"));
-      if (this.returns) {
-        answer.push(this.makeCode("\n" + this.tab + "return " + rvar + ";"));
-      }
-      return answer;
-    };
-
-    return While;
-
-  })(Base);
-
-  exports.Op = Op = (function(_super) {
-    var CONVERSIONS, INVERSIONS;
-
-    __extends(Op, _super);
-
-    function Op(op, first, second, flip) {
-      if (op === 'in') {
-        return new In(first, second);
-      }
-      if (op === 'do') {
-        return this.generateDo(first);
-      }
-      if (op === 'new') {
-        if (first instanceof Call && !first["do"] && !first.isNew) {
-          return first.newInstance();
-        }
-        if (first instanceof Code && first.bound || first["do"]) {
-          first = new Parens(first);
-        }
-      }
-      this.operator = CONVERSIONS[op] || op;
-      this.first = first;
-      this.second = second;
-      this.flip = !!flip;
-      return this;
-    }
-
-    CONVERSIONS = {
-      '==': '===',
-      '!=': '!==',
-      'of': 'in'
-    };
-
-    INVERSIONS = {
-      '!==': '===',
-      '===': '!=='
-    };
-
-    Op.prototype.children = ['first', 'second'];
-
-    Op.prototype.isSimpleNumber = NO;
-
-    Op.prototype.isUnary = function() {
-      return !this.second;
-    };
-
-    Op.prototype.isComplex = function() {
-      var _ref2;
-      return !(this.isUnary() && ((_ref2 = this.operator) === '+' || _ref2 === '-')) || this.first.isComplex();
-    };
-
-    Op.prototype.isChainable = function() {
-      var _ref2;
-      return (_ref2 = this.operator) === '<' || _ref2 === '>' || _ref2 === '>=' || _ref2 === '<=' || _ref2 === '===' || _ref2 === '!==';
-    };
-
-    Op.prototype.invert = function() {
-      var allInvertable, curr, fst, op, _ref2;
-      if (this.isChainable() && this.first.isChainable()) {
-        allInvertable = true;
-        curr = this;
-        while (curr && curr.operator) {
-          allInvertable && (allInvertable = curr.operator in INVERSIONS);
-          curr = curr.first;
-        }
-        if (!allInvertable) {
-          return new Parens(this).invert();
-        }
-        curr = this;
-        while (curr && curr.operator) {
-          curr.invert = !curr.invert;
-          curr.operator = INVERSIONS[curr.operator];
-          curr = curr.first;
-        }
-        return this;
-      } else if (op = INVERSIONS[this.operator]) {
-        this.operator = op;
-        if (this.first.unwrap() instanceof Op) {
-          this.first.invert();
-        }
-        return this;
-      } else if (this.second) {
-        return new Parens(this).invert();
-      } else if (this.operator === '!' && (fst = this.first.unwrap()) instanceof Op && ((_ref2 = fst.operator) === '!' || _ref2 === 'in' || _ref2 === 'instanceof')) {
-        return fst;
-      } else {
-        return new Op('!', this);
-      }
-    };
-
-    Op.prototype.unfoldSoak = function(o) {
-      var _ref2;
-      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 answer, isChain, _ref2, _ref3;
-      isChain = this.isChainable() && this.first.isChainable();
-      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);
-      }
-      answer = [].concat(this.first.compileToFragments(o, LEVEL_OP), this.makeCode(' ' + this.operator + ' '), this.second.compileToFragments(o, LEVEL_OP));
-      if (o.level <= LEVEL_OP) {
-        return answer;
-      } else {
-        return this.wrapInBraces(answer);
-      }
-    };
-
-    Op.prototype.compileChain = function(o) {
-      var fragments, fst, shared, _ref2;
-      _ref2 = this.first.second.cache(o), this.first.second = _ref2[0], shared = _ref2[1];
-      fst = this.first.compileToFragments(o, LEVEL_OP);
-      fragments = fst.concat(this.makeCode(" " + (this.invert ? '&&' : '||') + " "), shared.compileToFragments(o), this.makeCode(" " + this.operator + " "), this.second.compileToFragments(o, LEVEL_OP));
-      return this.wrapInBraces(fragments);
-    };
-
-    Op.prototype.compileExistence = function(o) {
-      var fst, ref;
-      if (this.first.isComplex()) {
-        ref = new Literal(o.scope.freeVariable('ref'));
-        fst = new Parens(new Assign(ref, this.first));
-      } else {
-        fst = this.first;
-        ref = fst;
-      }
-      return new If(new Existence(fst), ref, {
-        type: 'if'
-      }).addElse(this.second).compileToFragments(o);
-    };
-
-    Op.prototype.compileUnary = function(o) {
-      var op, parts, plusMinus;
-      parts = [];
-      op = this.operator;
-      parts.push([this.makeCode(op)]);
-      if (op === '!' && this.first instanceof Existence) {
-        this.first.negated = !this.first.negated;
-        return this.first.compileToFragments(o);
-      }
-      if (o.level >= LEVEL_ACCESS) {
-        return (new Parens(this)).compileToFragments(o);
-      }
-      plusMinus = op === '+' || op === '-';
-      if ((op === 'new' || op === 'typeof' || op === 'delete') || plusMinus && this.first instanceof Op && this.first.operator === op) {
-        parts.push([this.makeCode(' ')]);
-      }
-      if ((plusMinus && this.first instanceof Op) || (op === 'new' && this.first.isStatement(o))) {
-        this.first = new Parens(this.first);
-      }
-      parts.push(this.first.compileToFragments(o, LEVEL_OP));
-      if (this.flip) {
-        parts.reverse();
-      }
-      return this.joinFragmentArrays(parts, '');
-    };
-
-    Op.prototype.toString = function(idt) {
-      return Op.__super__.toString.call(this, idt, this.constructor.name + ' ' + this.operator);
-    };
-
-    return Op;
-
-  })(Base);
-
-  exports.In = In = (function(_super) {
-
-    __extends(In, _super);
-
-    function In(object, array) {
-      this.object = object;
-      this.array = array;
-    }
-
-    In.prototype.children = ['object', 'array'];
-
-    In.prototype.invert = NEGATE;
-
-    In.prototype.compileNode = function(o) {
-      var hasSplat, obj, _i, _len, _ref2;
-      if (this.array instanceof Value && this.array.isArray()) {
-        _ref2 = this.array.base.objects;
-        for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-          obj = _ref2[_i];
-          if (!(obj instanceof Splat)) {
-            continue;
-          }
-          hasSplat = true;
-          break;
-        }
-        if (!hasSplat) {
-          return this.compileOrTest(o);
-        }
-      }
-      return this.compileLoopTest(o);
-    };
-
-    In.prototype.compileOrTest = function(o) {
-      var cmp, cnj, i, item, ref, sub, tests, _i, _len, _ref2, _ref3, _ref4;
-      if (this.array.base.objects.length === 0) {
-        return [this.makeCode("" + (!!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 = [];
-      _ref4 = this.array.base.objects;
-      for (i = _i = 0, _len = _ref4.length; _i < _len; i = ++_i) {
-        item = _ref4[i];
-        if (i) {
-          tests.push(this.makeCode(cnj));
-        }
-        tests = tests.concat((i ? ref : sub), this.makeCode(cmp), item.compileToFragments(o, LEVEL_ACCESS));
-      }
-      if (o.level < LEVEL_OP) {
-        return tests;
-      } else {
-        return this.wrapInBraces(tests);
-      }
-    };
-
-    In.prototype.compileLoopTest = function(o) {
-      var fragments, ref, sub, _ref2;
-      _ref2 = this.object.cache(o, LEVEL_LIST), sub = _ref2[0], ref = _ref2[1];
-      fragments = [].concat(this.makeCode(utility('indexOf') + ".call("), this.array.compileToFragments(o, LEVEL_LIST), this.makeCode(", "), ref, this.makeCode(") " + (this.negated ? '< 0' : '>= 0')));
-      if ((fragmentsToText(sub)) === (fragmentsToText(ref))) {
-        return fragments;
-      }
-      fragments = sub.concat(this.makeCode(', '), fragments);
-      if (o.level < LEVEL_LIST) {
-        return fragments;
-      } else {
-        return this.wrapInBraces(fragments);
-      }
-    };
-
-    In.prototype.toString = function(idt) {
-      return In.__super__.toString.call(this, idt, this.constructor.name + (this.negated ? '!' : ''));
-    };
-
-    return In;
-
-  })(Base);
-
-  exports.Try = Try = (function(_super) {
-
-    __extends(Try, _super);
-
-    function Try(attempt, error, recovery, ensure) {
-      this.attempt = attempt;
-      this.error = error;
-      this.recovery = recovery;
-      this.ensure = ensure;
-    }
-
-    Try.prototype.children = ['attempt', 'recovery', 'ensure'];
-
-    Try.prototype.isStatement = YES;
-
-    Try.prototype.jumps = function(o) {
-      var _ref2;
-      return this.attempt.jumps(o) || ((_ref2 = this.recovery) != null ? _ref2.jumps(o) : void 0);
-    };
-
-    Try.prototype.makeReturn = function(res) {
-      if (this.attempt) {
-        this.attempt = this.attempt.makeReturn(res);
-      }
-      if (this.recovery) {
-        this.recovery = this.recovery.makeReturn(res);
-      }
-      return this;
-    };
-
-    Try.prototype.compileNode = function(o) {
-      var catchPart, ensurePart, placeholder, tryPart;
-      o.indent += TAB;
-      tryPart = this.attempt.compileToFragments(o, LEVEL_TOP);
-      catchPart = (function() {
-        var _base, _ref2;
-        if (this.recovery) {
-          if (typeof (_base = this.error).isObject === "function" ? _base.isObject() : void 0) {
-            placeholder = new Literal('_error');
-            this.recovery.unshift(new Assign(this.error, placeholder));
-            this.error = placeholder;
-          }
-          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 [].concat(this.makeCode(" catch ("), this.error.compileToFragments(o), this.makeCode(") {\n"), this.recovery.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab + "}"));
-        } else if (!(this.ensure || this.recovery)) {
-          return [this.makeCode(' catch (_error) {}')];
-        } else {
-          return [];
-        }
-      }).call(this);
-      ensurePart = this.ensure ? [].concat(this.makeCode(" finally {\n"), this.ensure.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab + "}")) : [];
-      return [].concat(this.makeCode("" + this.tab + "try {\n"), tryPart, this.makeCode("\n" + this.tab + "}"), catchPart, ensurePart);
-    };
-
-    return Try;
-
-  })(Base);
-
-  exports.Throw = Throw = (function(_super) {
-
-    __extends(Throw, _super);
-
-    function Throw(expression) {
-      this.expression = expression;
-    }
-
-    Throw.prototype.children = ['expression'];
-
-    Throw.prototype.isStatement = YES;
-
-    Throw.prototype.jumps = NO;
-
-    Throw.prototype.makeReturn = THIS;
-
-    Throw.prototype.compileNode = function(o) {
-      return [].concat(this.makeCode(this.tab + "throw "), this.expression.compileToFragments(o), this.makeCode(";"));
-    };
-
-    return Throw;
-
-  })(Base);
-
-  exports.Existence = Existence = (function(_super) {
-
-    __extends(Existence, _super);
-
-    function Existence(expression) {
-      this.expression = expression;
-    }
-
-    Existence.prototype.children = ['expression'];
-
-    Existence.prototype.invert = NEGATE;
-
-    Existence.prototype.compileNode = function(o) {
-      var cmp, cnj, code, _ref2;
-      this.expression.front = this.front;
-      code = this.expression.compile(o, LEVEL_OP);
-      if (IDENTIFIER.test(code) && !o.scope.check(code)) {
-        _ref2 = this.negated ? ['===', '||'] : ['!==', '&&'], cmp = _ref2[0], cnj = _ref2[1];
-        code = "typeof " + code + " " + cmp + " \"undefined\" " + cnj + " " + code + " " + cmp + " null";
-      } else {
-        code = "" + code + " " + (this.negated ? '==' : '!=') + " null";
-      }
-      return [this.makeCode(o.level <= LEVEL_COND ? code : "(" + code + ")")];
-    };
-
-    return Existence;
-
-  })(Base);
-
-  exports.Parens = Parens = (function(_super) {
-
-    __extends(Parens, _super);
-
-    function Parens(body) {
-      this.body = body;
-    }
-
-    Parens.prototype.children = ['body'];
-
-    Parens.prototype.unwrap = function() {
-      return this.body;
-    };
-
-    Parens.prototype.isComplex = function() {
-      return this.body.isComplex();
-    };
-
-    Parens.prototype.compileNode = function(o) {
-      var bare, expr, fragments;
-      expr = this.body.unwrap();
-      if (expr instanceof Value && expr.isAtomic()) {
-        expr.front = this.front;
-        return expr.compileToFragments(o);
-      }
-      fragments = expr.compileToFragments(o, LEVEL_PAREN);
-      bare = o.level < LEVEL_OP && (expr instanceof Op || expr instanceof Call || (expr instanceof For && expr.returns));
-      if (bare) {
-        return fragments;
-      } else {
-        return this.wrapInBraces(fragments);
-      }
-    };
-
-    return Parens;
-
-  })(Base);
-
-  exports.For = For = (function(_super) {
-
-    __extends(For, _super);
-
-    function For(body, source) {
-      var _ref2;
-      this.source = source.source, this.guard = source.guard, this.step = source.step, this.name = source.name, this.index = source.index;
-      this.body = Block.wrap([body]);
-      this.own = !!source.own;
-      this.object = !!source.object;
-      if (this.object) {
-        _ref2 = [this.index, this.name], this.name = _ref2[0], this.index = _ref2[1];
-      }
-      if (this.index instanceof Value) {
-        throw SyntaxError('index cannot be a pattern matching expression');
-      }
-      this.range = this.source instanceof Value && this.source.base instanceof Range && !this.source.properties.length;
-      this.pattern = this.name instanceof Value;
-      if (this.range && this.index) {
-        throw SyntaxError('indexes do not apply to range loops');
-      }
-      if (this.range && this.pattern) {
-        throw SyntaxError('cannot pattern match over range loops');
-      }
-      this.returns = false;
-    }
-
-    For.prototype.children = ['body', 'source', 'guard', 'step'];
-
-    For.prototype.compileNode = function(o) {
-      var body, bodyFragments, compare, compareDown, declare, declareDown, defPart, defPartFragments, down, forPartFragments, guardPart, idt1, increment, index, ivar, kvar, kvarAssign, lastJumps, lvar, name, namePart, ref, resultPart, returnResult, rvar, scope, source, step, stepNum, stepVar, svar, varPart, _ref2, _ref3;
-      body = Block.wrap([this.body]);
-      lastJumps = (_ref2 = last(body.expressions)) != null ? _ref2.jumps() : void 0;
-      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);
-      }
-      if (index) {
-        scope.find(index);
-      }
-      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) {
-        _ref3 = this.cacheToCodeFragments(this.step.cache(o, LEVEL_LIST)), step = _ref3[0], stepVar = _ref3[1];
-        stepNum = stepVar.match(SIMPLENUM);
-      }
-      if (this.pattern) {
-        name = ivar;
-      }
-      varPart = '';
-      guardPart = '';
-      defPart = '';
-      idt1 = this.tab + TAB;
-      if (this.range) {
-        forPartFragments = source.compileToFragments(merge(o, {
-          index: ivar,
-          name: name,
-          step: this.step
-        }));
-      } else {
-        svar = this.source.compile(o, LEVEL_LIST);
-        if ((name || this.own) && !IDENTIFIER.test(svar)) {
-          defPart += "" + this.tab + (ref = scope.freeVariable('ref')) + " = " + svar + ";\n";
-          svar = ref;
-        }
-        if (name && !this.pattern) {
-          namePart = "" + name + " = " + svar + "[" + kvar + "]";
-        }
-        if (!this.object) {
-          if (step !== stepVar) {
-            defPart += "" + this.tab + step + ";\n";
-          }
-          if (!(this.step && stepNum && (down = +stepNum < 0))) {
-            lvar = scope.freeVariable('len');
-          }
-          declare = "" + kvarAssign + ivar + " = 0, " + lvar + " = " + svar + ".length";
-          declareDown = "" + kvarAssign + ivar + " = " + svar + ".length - 1";
-          compare = "" + ivar + " < " + lvar;
-          compareDown = "" + ivar + " >= 0";
-          if (this.step) {
-            if (stepNum) {
-              if (down) {
-                compare = compareDown;
-                declare = declareDown;
-              }
-            } else {
-              compare = "" + stepVar + " > 0 ? " + compare + " : " + compareDown;
-              declare = "(" + stepVar + " > 0 ? (" + declare + ") : " + declareDown + ")";
-            }
-            increment = "" + ivar + " += " + stepVar;
-          } else {
-            increment = "" + (kvar !== ivar ? "++" + ivar : "" + ivar + "++");
-          }
-          forPartFragments = [this.makeCode("" + declare + "; " + compare + "; " + kvarAssign + increment)];
-        }
-      }
-      if (this.returns) {
-        resultPart = "" + this.tab + rvar + " = [];\n";
-        returnResult = "\n" + this.tab + "return " + rvar + ";";
-        body.makeReturn(rvar);
-      }
-      if (this.guard) {
-        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.pattern) {
-        body.expressions.unshift(new Assign(this.name, new Literal("" + svar + "[" + kvar + "]")));
-      }
-      defPartFragments = [].concat(this.makeCode(defPart), this.pluckDirectCall(o, body));
-      if (namePart) {
-        varPart = "\n" + idt1 + namePart + ";";
-      }
-      if (this.object) {
-        forPartFragments = [this.makeCode("" + kvar + " in " + svar)];
-        if (this.own) {
-          guardPart = "\n" + idt1 + "if (!" + (utility('hasProp')) + ".call(" + svar + ", " + kvar + ")) continue;";
-        }
-      }
-      bodyFragments = body.compileToFragments(merge(o, {
-        indent: idt1
-      }), LEVEL_TOP);
-      if (bodyFragments && (bodyFragments.length > 0)) {
-        bodyFragments = [].concat(this.makeCode("\n"), bodyFragments, this.makeCode("\n"));
-      }
-      return [].concat(defPartFragments, this.makeCode("" + (resultPart || '') + this.tab + "for ("), forPartFragments, this.makeCode(") {" + guardPart + varPart), bodyFragments, this.makeCode("" + this.tab + "}" + (returnResult || '')));
-    };
-
-    For.prototype.pluckDirectCall = function(o, body) {
-      var base, defs, expr, fn, idx, ref, val, _i, _len, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7;
-      defs = [];
-      _ref2 = body.expressions;
-      for (idx = _i = 0, _len = _ref2.length; _i < _len; idx = ++_i) {
-        expr = _ref2[idx];
-        expr = expr.unwrapAll();
-        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;
-        }
-        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];
-        }
-        body.expressions[idx] = new Call(base, expr.args);
-        defs = defs.concat(this.makeCode(this.tab), new Assign(ref, fn).compileToFragments(o, LEVEL_TOP), this.makeCode(';\n'));
-      }
-      return defs;
-    };
-
-    return For;
-
-  })(While);
-
-  exports.Switch = Switch = (function(_super) {
-
-    __extends(Switch, _super);
-
-    function Switch(subject, cases, otherwise) {
-      this.subject = subject;
-      this.cases = cases;
-      this.otherwise = otherwise;
-    }
-
-    Switch.prototype.children = ['subject', 'cases', 'otherwise'];
-
-    Switch.prototype.isStatement = YES;
-
-    Switch.prototype.jumps = function(o) {
-      var block, conds, _i, _len, _ref2, _ref3, _ref4;
-      if (o == null) {
-        o = {
-          block: true
-        };
-      }
-      _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;
-        }
-      }
-      return (_ref4 = this.otherwise) != null ? _ref4.jumps(o) : void 0;
-    };
-
-    Switch.prototype.makeReturn = function(res) {
-      var pair, _i, _len, _ref2, _ref3;
-      _ref2 = this.cases;
-      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-        pair = _ref2[_i];
-        pair[1].makeReturn(res);
-      }
-      if (res) {
-        this.otherwise || (this.otherwise = new Block([new Literal('void 0')]));
-      }
-      if ((_ref3 = this.otherwise) != null) {
-        _ref3.makeReturn(res);
-      }
-      return this;
-    };
-
-    Switch.prototype.compileNode = function(o) {
-      var block, body, cond, conditions, expr, fragments, i, idt1, idt2, _i, _j, _len, _len1, _ref2, _ref3, _ref4;
-      idt1 = o.indent + TAB;
-      idt2 = o.indent = idt1 + TAB;
-      fragments = [].concat(this.makeCode(this.tab + "switch ("), (this.subject ? this.subject.compileToFragments(o, LEVEL_PAREN) : this.makeCode("false")), this.makeCode(") {\n"));
-      _ref2 = this.cases;
-      for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
-        _ref3 = _ref2[i], conditions = _ref3[0], block = _ref3[1];
-        _ref4 = flatten([conditions]);
-        for (_j = 0, _len1 = _ref4.length; _j < _len1; _j++) {
-          cond = _ref4[_j];
-          if (!this.subject) {
-            cond = cond.invert();
-          }
-          fragments = fragments.concat(this.makeCode(idt1 + "case "), cond.compileToFragments(o, LEVEL_PAREN), this.makeCode(":\n"));
-        }
-        if ((body = block.compileToFragments(o, LEVEL_TOP)).length > 0) {
-          fragments = fragments.concat(body, this.makeCode('\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;
-        }
-        fragments.push(cond.makeCode(idt2 + 'break;\n'));
-      }
-      if (this.otherwise && this.otherwise.expressions.length) {
-        fragments.push.apply(fragments, [this.makeCode(idt1 + "default:\n")].concat(__slice.call(this.otherwise.compileToFragments(o, LEVEL_TOP)), [this.makeCode("\n")]));
-      }
-      fragments.push(this.makeCode(this.tab + '}'));
-      return fragments;
-    };
-
-    return Switch;
-
-  })(Base);
-
-  exports.If = If = (function(_super) {
-
-    __extends(If, _super);
-
-    function If(condition, body, options) {
-      this.body = body;
-      if (options == null) {
-        options = {};
-      }
-      this.condition = options.type === 'unless' ? condition.invert() : condition;
-      this.elseBody = null;
-      this.isChain = false;
-      this.soak = options.soak;
-    }
-
-    If.prototype.children = ['condition', 'body', 'elseBody'];
-
-    If.prototype.bodyNode = function() {
-      var _ref2;
-      return (_ref2 = this.body) != null ? _ref2.unwrap() : void 0;
-    };
-
-    If.prototype.elseBodyNode = function() {
-      var _ref2;
-      return (_ref2 = this.elseBody) != null ? _ref2.unwrap() : void 0;
-    };
-
-    If.prototype.addElse = function(elseBody) {
-      if (this.isChain) {
-        this.elseBodyNode().addElse(elseBody);
-      } else {
-        this.isChain = elseBody instanceof If;
-        this.elseBody = this.ensureBlock(elseBody);
-      }
-      return this;
-    };
-
-    If.prototype.isStatement = function(o) {
-      var _ref2;
-      return (o != null ? o.level : void 0) === LEVEL_TOP || this.bodyNode().isStatement(o) || ((_ref2 = this.elseBodyNode()) != null ? _ref2.isStatement(o) : void 0);
-    };
-
-    If.prototype.jumps = function(o) {
-      var _ref2;
-      return this.body.jumps(o) || ((_ref2 = this.elseBody) != null ? _ref2.jumps(o) : void 0);
-    };
-
-    If.prototype.compileNode = function(o) {
-      if (this.isStatement(o)) {
-        return this.compileStatement(o);
-      } else {
-        return this.compileExpression(o);
-      }
-    };
-
-    If.prototype.makeReturn = function(res) {
-      if (res) {
-        this.elseBody || (this.elseBody = new Block([new Literal('void 0')]));
-      }
-      this.body && (this.body = new Block([this.body.makeReturn(res)]));
-      this.elseBody && (this.elseBody = new Block([this.elseBody.makeReturn(res)]));
-      return this;
-    };
-
-    If.prototype.ensureBlock = function(node) {
-      if (node instanceof Block) {
-        return node;
-      } else {
-        return new Block([node]);
-      }
-    };
-
-    If.prototype.compileStatement = function(o) {
-      var answer, body, child, cond, exeq, ifPart, indent;
-      child = del(o, 'chainChild');
-      exeq = del(o, 'isExistentialEquals');
-      if (exeq) {
-        return new If(this.condition.invert(), this.elseBodyNode(), {
-          type: 'if'
-        }).compileToFragments(o);
-      }
-      indent = o.indent + TAB;
-      cond = this.condition.compileToFragments(o, LEVEL_PAREN);
-      body = this.ensureBlock(this.body).compileToFragments(merge(o, {
-        indent: indent
-      }));
-      ifPart = [].concat(this.makeCode("if ("), cond, this.makeCode(") {\n"), body, this.makeCode("\n" + this.tab + "}"));
-      if (!child) {
-        ifPart.unshift(this.makeCode(this.tab));
-      }
-      if (!this.elseBody) {
-        return ifPart;
-      }
-      answer = ifPart.concat(this.makeCode(' else '));
-      if (this.isChain) {
-        o.chainChild = true;
-        answer = answer.concat(this.elseBody.unwrap().compileToFragments(o, LEVEL_TOP));
-      } else {
-        answer = answer.concat(this.makeCode("{\n"), this.elseBody.compileToFragments(merge(o, {
-          indent: indent
-        }), LEVEL_TOP), this.makeCode("\n" + this.tab + "}"));
-      }
-      return answer;
-    };
-
-    If.prototype.compileExpression = function(o) {
-      var alt, body, cond, fragments;
-      cond = this.condition.compileToFragments(o, LEVEL_COND);
-      body = this.bodyNode().compileToFragments(o, LEVEL_LIST);
-      alt = this.elseBodyNode() ? this.elseBodyNode().compileToFragments(o, LEVEL_LIST) : [this.makeCode('void 0')];
-      fragments = cond.concat(this.makeCode(" ? "), body, this.makeCode(" : "), alt);
-      if (o.level >= LEVEL_COND) {
-        return this.wrapInBraces(fragments);
-      } else {
-        return fragments;
-      }
-    };
-
-    If.prototype.unfoldSoak = function() {
-      return this.soak && this;
-    };
-
-    return If;
-
-  })(Base);
-
-  Closure = {
-    wrap: function(expressions, statement, noReturn) {
-      var args, call, func, mentionsArgs, meth;
-      if (expressions.jumps()) {
-        return expressions;
-      }
-      func = new Code([], Block.wrap([expressions]));
-      args = [];
-      if ((mentionsArgs = expressions.contains(this.literalArgs)) || expressions.contains(this.literalThis)) {
-        if (mentionsArgs && expressions.classBody) {
-          throw SyntaxError("Class bodies shouldn't reference arguments");
-        }
-        meth = new Literal(mentionsArgs ? 'apply' : 'call');
-        args = [new Literal('this')];
-        if (mentionsArgs) {
-          args.push(new Literal('arguments'));
-        }
-        func = new Value(func, [new Access(meth)]);
-      }
-      func.noReturn = noReturn;
-      call = new Call(func, args);
-      if (statement) {
-        return Block.wrap([call]);
-      } else {
-        return call;
-      }
-    },
-    literalArgs: function(node) {
-      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) || (node instanceof Call && node.isSuper);
-    }
-  };
-
-  unfoldSoak = function(o, parent, name) {
-    var ifn;
-    if (!(ifn = parent[name].unfoldSoak(o))) {
-      return;
-    }
-    parent[name] = ifn.body;
-    ifn.body = new Value(parent);
-    return ifn;
-  };
-
-  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; }";
-    },
-    indexOf: function() {
-      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 '{}.hasOwnProperty';
-    },
-    slice: function() {
-      return '[].slice';
-    }
-  };
-
-  LEVEL_TOP = 1;
-
-  LEVEL_PAREN = 2;
-
-  LEVEL_LIST = 3;
-
-  LEVEL_COND = 4;
-
-  LEVEL_OP = 5;
-
-  LEVEL_ACCESS = 6;
-
-  TAB = '  ';
-
-  IDENTIFIER_STR = "[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*";
-
-  IDENTIFIER = RegExp("^" + IDENTIFIER_STR + "$");
-
-  SIMPLENUM = /^[+-]?\d+$/;
-
-  METHOD_DEF = RegExp("^(?:(" + IDENTIFIER_STR + ")\\.prototype(?:\\.(" + IDENTIFIER_STR + ")|\\[(\"(?:[^\\\\\"\\r\\n]|\\\\.)*\"|'(?:[^\\\\'\\r\\n]|\\\\.)*')\\]|\\[(0x[\\da-fA-F]+|\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\]))|(" + IDENTIFIER_STR + ")$");
-
-  IS_STRING = /^['"]/;
-
-  utility = function(name) {
-    var ref;
-    ref = "__" + name;
-    Scope.root.assign(ref, UTILITIES[name]());
-    return ref;
-  };
-
-  multident = function(code, tab) {
-    code = code.replace(/\n/g, '$&' + tab);
-    return code.replace(/\s+$/, '');
-  };
-
-}).call(this);
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/optparse.js b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/optparse.js
deleted file mode 100755
index f650fdd1..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/optparse.js
+++ /dev/null
@@ -1,138 +0,0 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var LONG_FLAG, MULTI_FLAG, OPTIONAL, OptionParser, SHORT_FLAG, buildRule, buildRules, normalizeArguments;
-
-  exports.OptionParser = OptionParser = (function() {
-
-    function OptionParser(rules, banner) {
-      this.banner = banner;
-      this.rules = buildRules(rules);
-    }
-
-    OptionParser.prototype.parse = function(args) {
-      var arg, i, isOption, matchedRule, options, originalArgs, pos, rule, seenNonOptionArg, skippingArgument, value, _i, _j, _len, _len1, _ref;
-      options = {
-        "arguments": []
-      };
-      skippingArgument = false;
-      originalArgs = args;
-      args = normalizeArguments(args);
-      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"] = options["arguments"].concat(originalArgs.slice(pos + 1));
-          break;
-        }
-        isOption = !!(arg.match(LONG_FLAG) || arg.match(SHORT_FLAG));
-        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 (seenNonOptionArg || !isOption) {
-          options["arguments"].push(arg);
-        }
-      }
-      return options;
-    };
-
-    OptionParser.prototype.help = function() {
-      var letPart, lines, rule, spaces, _i, _len, _ref;
-      lines = [];
-      if (this.banner) {
-        lines.unshift("" + this.banner + "\n");
-      }
-      _ref = this.rules;
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        rule = _ref[_i];
-        spaces = 15 - rule.longFlag.length;
-        spaces = spaces > 0 ? Array(spaces + 1).join(' ') : '';
-        letPart = rule.shortFlag ? rule.shortFlag + ', ' : '    ';
-        lines.push('  ' + letPart + rule.longFlag + spaces + rule.description);
-      }
-      return "\n" + (lines.join('\n')) + "\n";
-    };
-
-    return OptionParser;
-
-  })();
-
-  LONG_FLAG = /^(--\w[\w\-]*)/;
-
-  SHORT_FLAG = /^(-\w)$/;
-
-  MULTI_FLAG = /^-(\w{2,})/;
-
-  OPTIONAL = /\[(\w+(\*?))\]/;
-
-  buildRules = function(rules) {
-    var tuple, _i, _len, _results;
-    _results = [];
-    for (_i = 0, _len = rules.length; _i < _len; _i++) {
-      tuple = rules[_i];
-      if (tuple.length < 3) {
-        tuple.unshift(null);
-      }
-      _results.push(buildRule.apply(null, tuple));
-    }
-    return _results;
-  };
-
-  buildRule = function(shortFlag, longFlag, description, options) {
-    var match;
-    if (options == null) {
-      options = {};
-    }
-    match = longFlag.match(OPTIONAL);
-    longFlag = longFlag.match(LONG_FLAG)[1];
-    return {
-      name: longFlag.substr(2),
-      shortFlag: shortFlag,
-      longFlag: longFlag,
-      description: description,
-      hasArgument: !!(match && match[1]),
-      isList: !!(match && match[2])
-    };
-  };
-
-  normalizeArguments = function(args) {
-    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, _len1 = _ref.length; _j < _len1; _j++) {
-          l = _ref[_j];
-          result.push('-' + l);
-        }
-      } else {
-        result.push(arg);
-      }
-    }
-    return result;
-  };
-
-}).call(this);
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/parser.js b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/parser.js
deleted file mode 100755
index dde2e61f..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/parser.js
+++ /dev/null
@@ -1,608 +0,0 @@
-/* parser generated by jison 0.4.2 */
-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,"UNDEFINED":36,"NULL":37,"BOOL":38,"Assignable":39,"=":40,"AssignObj":41,"ObjAssignable":42,":":43,"ThisProperty":44,"RETURN":45,"HERECOMMENT":46,"PARAM_START":47,"ParamList":48,"PARAM_END":49,"FuncGlyph":50,"->":51,"=>":52,"OptComma":53,",":54,"Param":55,"ParamVar":56,"...":57,"Array":58,"Object":59,"Splat":60,"SimpleAssignable":61,"Accessor":62,"Parenthetical":63,"Range":64,"This":65,".":66,"?.":67,"::":68,"?::":69,"Index":70,"INDEX_START":71,"IndexValue":72,"INDEX_END":73,"INDEX_SOAK":74,"Slice":75,"{":76,"AssignList":77,"}":78,"CLASS":79,"EXTENDS":80,"OptFuncExist":81,"Arguments":82,"SUPER":83,"FUNC_EXIST":84,"CALL_START":85,"CALL_END":86,"ArgList":87,"THIS":88,"@":89,"[":90,"]":91,"RangeDots":92,"..":93,"Arg":94,"SimpleArgs":95,"TRY":96,"Catch":97,"FINALLY":98,"CATCH":99,"THROW":100,"(":101,")":102,"WhileSource":103,"WHILE":104,"WHEN":105,"UNTIL":106,"Loop":107,"LOOP":108,"ForBody":109,"FOR":110,"ForStart":111,"ForSource":112,"ForVariables":113,"OWN":114,"ForValue":115,"FORIN":116,"FOROF":117,"BY":118,"SWITCH":119,"Whens":120,"ELSE":121,"When":122,"LEADING_WHEN":123,"IfBlock":124,"IF":125,"POST_IF":126,"UNARY":127,"-":128,"+":129,"--":130,"++":131,"?":132,"MATH":133,"SHIFT":134,"COMPARE":135,"LOGIC":136,"RELATION":137,"COMPOUND_ASSIGN":138,"$accept":0,"$end":1},
-terminals_: {2:"error",6:"TERMINATOR",12:"STATEMENT",25:"INDENT",26:"OUTDENT",28:"IDENTIFIER",30:"NUMBER",31:"STRING",33:"JS",34:"REGEX",35:"DEBUGGER",36:"UNDEFINED",37:"NULL",38:"BOOL",40:"=",43:":",45:"RETURN",46:"HERECOMMENT",47:"PARAM_START",49:"PARAM_END",51:"->",52:"=>",54:",",57:"...",66:".",67:"?.",68:"::",69:"?::",71:"INDEX_START",73:"INDEX_END",74:"INDEX_SOAK",76:"{",78:"}",79:"CLASS",80:"EXTENDS",83:"SUPER",84:"FUNC_EXIST",85:"CALL_START",86:"CALL_END",88:"THIS",89:"@",90:"[",91:"]",93:"..",96:"TRY",98:"FINALLY",99:"CATCH",100:"THROW",101:"(",102:")",104:"WHILE",105:"WHEN",106:"UNTIL",108:"LOOP",110:"FOR",114:"OWN",116:"FORIN",117:"FOROF",118:"BY",119:"SWITCH",121:"ELSE",123:"LEADING_WHEN",125:"IF",126:"POST_IF",127:"UNARY",128:"-",129:"+",130:"--",131:"++",132:"?",133:"MATH",134:"SHIFT",135:"COMPARE",136:"LOGIC",137:"RELATION",138:"COMPOUND_ASSIGN"},
-productions_: [0,[3,0],[3,1],[3,2],[4,1],[4,3],[4,2],[7,1],[7,1],[9,1],[9,1],[9,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[5,2],[5,3],[27,1],[29,1],[29,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[17,3],[17,4],[17,5],[41,1],[41,3],[41,5],[41,1],[42,1],[42,1],[42,1],[10,2],[10,1],[11,1],[15,5],[15,2],[50,1],[50,1],[53,0],[53,1],[48,0],[48,1],[48,3],[48,4],[48,6],[55,1],[55,2],[55,3],[56,1],[56,1],[56,1],[56,1],[60,2],[61,1],[61,2],[61,2],[61,1],[39,1],[39,1],[39,1],[13,1],[13,1],[13,1],[13,1],[13,1],[62,2],[62,2],[62,2],[62,2],[62,1],[62,1],[70,3],[70,2],[72,1],[72,1],[59,4],[77,0],[77,1],[77,3],[77,4],[77,6],[23,1],[23,2],[23,3],[23,4],[23,2],[23,3],[23,4],[23,5],[14,3],[14,3],[14,1],[14,2],[81,0],[81,1],[82,2],[82,4],[65,1],[65,1],[44,2],[58,2],[58,4],[92,1],[92,1],[64,5],[75,3],[75,2],[75,2],[75,1],[87,1],[87,3],[87,4],[87,4],[87,6],[94,1],[94,1],[95,1],[95,3],[19,2],[19,3],[19,4],[19,5],[97,3],[97,3],[24,2],[63,3],[63,5],[103,2],[103,4],[103,2],[103,4],[20,2],[20,2],[20,2],[20,1],[107,2],[107,2],[21,2],[21,2],[21,2],[109,2],[109,2],[111,2],[111,3],[115,1],[115,1],[115,1],[115,1],[113,1],[113,3],[112,2],[112,2],[112,4],[112,4],[112,4],[112,6],[112,6],[22,5],[22,7],[22,4],[22,6],[120,1],[120,2],[122,3],[122,4],[124,3],[124,5],[18,1],[18,3],[18,3],[18,3],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,5],[16,4],[16,3]],
-performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {
-
-var $0 = $$.length - 1;
-switch (yystate) {
-case 1:return this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Block);
-break;
-case 2:return this.$ = $$[$0];
-break;
-case 3:return this.$ = $$[$0-1];
-break;
-case 4:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(yy.Block.wrap([$$[$0]]));
-break;
-case 5:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].push($$[$0]));
-break;
-case 6:this.$ = $$[$0-1];
-break;
-case 7:this.$ = $$[$0];
-break;
-case 8:this.$ = $$[$0];
-break;
-case 9:this.$ = $$[$0];
-break;
-case 10:this.$ = $$[$0];
-break;
-case 11:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));
-break;
-case 12:this.$ = $$[$0];
-break;
-case 13:this.$ = $$[$0];
-break;
-case 14:this.$ = $$[$0];
-break;
-case 15:this.$ = $$[$0];
-break;
-case 16:this.$ = $$[$0];
-break;
-case 17:this.$ = $$[$0];
-break;
-case 18:this.$ = $$[$0];
-break;
-case 19:this.$ = $$[$0];
-break;
-case 20:this.$ = $$[$0];
-break;
-case 21:this.$ = $$[$0];
-break;
-case 22:this.$ = $$[$0];
-break;
-case 23:this.$ = $$[$0];
-break;
-case 24:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Block);
-break;
-case 25:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-1]);
-break;
-case 26:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));
-break;
-case 27:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));
-break;
-case 28:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));
-break;
-case 29:this.$ = $$[$0];
-break;
-case 30:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));
-break;
-case 31:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));
-break;
-case 32:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));
-break;
-case 33:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Undefined);
-break;
-case 34:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Null);
-break;
-case 35:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Bool($$[$0]));
-break;
-case 36:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign($$[$0-2], $$[$0]));
-break;
-case 37:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Assign($$[$0-3], $$[$0]));
-break;
-case 38:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign($$[$0-4], $$[$0-1]));
-break;
-case 39:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
-break;
-case 40:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign(yy.addLocationDataFn(_$[$0-2])(new yy.Value($$[$0-2])), $$[$0], 'object'));
-break;
-case 41:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign(yy.addLocationDataFn(_$[$0-4])(new yy.Value($$[$0-4])), $$[$0-1], 'object'));
-break;
-case 42:this.$ = $$[$0];
-break;
-case 43:this.$ = $$[$0];
-break;
-case 44:this.$ = $$[$0];
-break;
-case 45:this.$ = $$[$0];
-break;
-case 46:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Return($$[$0]));
-break;
-case 47:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Return);
-break;
-case 48:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Comment($$[$0]));
-break;
-case 49:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Code($$[$0-3], $$[$0], $$[$0-1]));
-break;
-case 50:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Code([], $$[$0], $$[$0-1]));
-break;
-case 51:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])('func');
-break;
-case 52:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])('boundfunc');
-break;
-case 53:this.$ = $$[$0];
-break;
-case 54:this.$ = $$[$0];
-break;
-case 55:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([]);
-break;
-case 56:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);
-break;
-case 57:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].concat($$[$0]));
-break;
-case 58:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-3].concat($$[$0]));
-break;
-case 59:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])($$[$0-5].concat($$[$0-2]));
-break;
-case 60:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Param($$[$0]));
-break;
-case 61:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Param($$[$0-1], null, true));
-break;
-case 62:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Param($$[$0-2], $$[$0]));
-break;
-case 63:this.$ = $$[$0];
-break;
-case 64:this.$ = $$[$0];
-break;
-case 65:this.$ = $$[$0];
-break;
-case 66:this.$ = $$[$0];
-break;
-case 67:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Splat($$[$0-1]));
-break;
-case 68:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
-break;
-case 69:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].add($$[$0]));
-break;
-case 70:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Value($$[$0-1], [].concat($$[$0])));
-break;
-case 71:this.$ = $$[$0];
-break;
-case 72:this.$ = $$[$0];
-break;
-case 73:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
-break;
-case 74:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
-break;
-case 75:this.$ = $$[$0];
-break;
-case 76:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
-break;
-case 77:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
-break;
-case 78:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
-break;
-case 79:this.$ = $$[$0];
-break;
-case 80:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Access($$[$0]));
-break;
-case 81:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Access($$[$0], 'soak'));
-break;
-case 82:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Access(new yy.Literal('prototype'))), yy.addLocationDataFn(_$[$0])(new yy.Access($$[$0]))]);
-break;
-case 83:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Access(new yy.Literal('prototype'), 'soak')), yy.addLocationDataFn(_$[$0])(new yy.Access($$[$0]))]);
-break;
-case 84:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Access(new yy.Literal('prototype')));
-break;
-case 85:this.$ = $$[$0];
-break;
-case 86:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-1]);
-break;
-case 87:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(yy.extend($$[$0], {
-          soak: true
-        }));
-break;
-case 88:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Index($$[$0]));
-break;
-case 89:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Slice($$[$0]));
-break;
-case 90:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Obj($$[$0-2], $$[$0-3].generated));
-break;
-case 91:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([]);
-break;
-case 92:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);
-break;
-case 93:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].concat($$[$0]));
-break;
-case 94:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-3].concat($$[$0]));
-break;
-case 95:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])($$[$0-5].concat($$[$0-2]));
-break;
-case 96:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Class);
-break;
-case 97:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Class(null, null, $$[$0]));
-break;
-case 98:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Class(null, $$[$0]));
-break;
-case 99:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Class(null, $$[$0-1], $$[$0]));
-break;
-case 100:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Class($$[$0]));
-break;
-case 101:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Class($$[$0-1], null, $$[$0]));
-break;
-case 102:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Class($$[$0-2], $$[$0]));
-break;
-case 103:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Class($$[$0-3], $$[$0-1], $$[$0]));
-break;
-case 104:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Call($$[$0-2], $$[$0], $$[$0-1]));
-break;
-case 105:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Call($$[$0-2], $$[$0], $$[$0-1]));
-break;
-case 106:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Call('super', [new yy.Splat(new yy.Literal('arguments'))]));
-break;
-case 107:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Call('super', $$[$0]));
-break;
-case 108:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(false);
-break;
-case 109:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(true);
-break;
-case 110:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([]);
-break;
-case 111:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-2]);
-break;
-case 112:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value(new yy.Literal('this')));
-break;
-case 113:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value(new yy.Literal('this')));
-break;
-case 114:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Value(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('this')), [yy.addLocationDataFn(_$[$0])(new yy.Access($$[$0]))], 'this'));
-break;
-case 115:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Arr([]));
-break;
-case 116:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Arr($$[$0-2]));
-break;
-case 117:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])('inclusive');
-break;
-case 118:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])('exclusive');
-break;
-case 119:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Range($$[$0-3], $$[$0-1], $$[$0-2]));
-break;
-case 120:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Range($$[$0-2], $$[$0], $$[$0-1]));
-break;
-case 121:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Range($$[$0-1], null, $$[$0]));
-break;
-case 122:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Range(null, $$[$0], $$[$0-1]));
-break;
-case 123:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Range(null, null, $$[$0]));
-break;
-case 124:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);
-break;
-case 125:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].concat($$[$0]));
-break;
-case 126:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-3].concat($$[$0]));
-break;
-case 127:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-2]);
-break;
-case 128:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])($$[$0-5].concat($$[$0-2]));
-break;
-case 129:this.$ = $$[$0];
-break;
-case 130:this.$ = $$[$0];
-break;
-case 131:this.$ = $$[$0];
-break;
-case 132:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([].concat($$[$0-2], $$[$0]));
-break;
-case 133:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Try($$[$0]));
-break;
-case 134:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Try($$[$0-1], $$[$0][0], $$[$0][1]));
-break;
-case 135:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Try($$[$0-2], null, null, $$[$0]));
-break;
-case 136:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Try($$[$0-3], $$[$0-2][0], $$[$0-2][1], $$[$0]));
-break;
-case 137:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([$$[$0-1], $$[$0]]);
-break;
-case 138:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Value($$[$0-1])), $$[$0]]);
-break;
-case 139:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Throw($$[$0]));
-break;
-case 140:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Parens($$[$0-1]));
-break;
-case 141:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Parens($$[$0-2]));
-break;
-case 142:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0]));
-break;
-case 143:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], {
-          guard: $$[$0]
-        }));
-break;
-case 144:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0], {
-          invert: true
-        }));
-break;
-case 145:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], {
-          invert: true,
-          guard: $$[$0]
-        }));
-break;
-case 146:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].addBody($$[$0]));
-break;
-case 147:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0].addBody(yy.addLocationDataFn(_$[$0-1])(yy.Block.wrap([$$[$0-1]]))));
-break;
-case 148:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0].addBody(yy.addLocationDataFn(_$[$0-1])(yy.Block.wrap([$$[$0-1]]))));
-break;
-case 149:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])($$[$0]);
-break;
-case 150:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('true'))).addBody($$[$0]));
-break;
-case 151:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('true'))).addBody(yy.addLocationDataFn(_$[$0])(yy.Block.wrap([$$[$0]]))));
-break;
-case 152:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0-1], $$[$0]));
-break;
-case 153:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0-1], $$[$0]));
-break;
-case 154:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0], $$[$0-1]));
-break;
-case 155:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({
-          source: yy.addLocationDataFn(_$[$0])(new yy.Value($$[$0]))
-        });
-break;
-case 156:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])((function () {
-        $$[$0].own = $$[$0-1].own;
-        $$[$0].name = $$[$0-1][0];
-        $$[$0].index = $$[$0-1][1];
-        return $$[$0];
-      }()));
-break;
-case 157:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0]);
-break;
-case 158:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () {
-        $$[$0].own = true;
-        return $$[$0];
-      }()));
-break;
-case 159:this.$ = $$[$0];
-break;
-case 160:this.$ = $$[$0];
-break;
-case 161:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
-break;
-case 162:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
-break;
-case 163:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);
-break;
-case 164:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([$$[$0-2], $$[$0]]);
-break;
-case 165:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({
-          source: $$[$0]
-        });
-break;
-case 166:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({
-          source: $$[$0],
-          object: true
-        });
-break;
-case 167:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({
-          source: $$[$0-2],
-          guard: $$[$0]
-        });
-break;
-case 168:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({
-          source: $$[$0-2],
-          guard: $$[$0],
-          object: true
-        });
-break;
-case 169:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({
-          source: $$[$0-2],
-          step: $$[$0]
-        });
-break;
-case 170:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({
-          source: $$[$0-4],
-          guard: $$[$0-2],
-          step: $$[$0]
-        });
-break;
-case 171:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({
-          source: $$[$0-4],
-          step: $$[$0-2],
-          guard: $$[$0]
-        });
-break;
-case 172:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Switch($$[$0-3], $$[$0-1]));
-break;
-case 173:this.$ = yy.addLocationDataFn(_$[$0-6], _$[$0])(new yy.Switch($$[$0-5], $$[$0-3], $$[$0-1]));
-break;
-case 174:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Switch(null, $$[$0-1]));
-break;
-case 175:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])(new yy.Switch(null, $$[$0-3], $$[$0-1]));
-break;
-case 176:this.$ = $$[$0];
-break;
-case 177:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].concat($$[$0]));
-break;
-case 178:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([[$$[$0-1], $$[$0]]]);
-break;
-case 179:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])([[$$[$0-2], $$[$0-1]]]);
-break;
-case 180:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0-1], $$[$0], {
-          type: $$[$0-2]
-        }));
-break;
-case 181:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])($$[$0-4].addElse(new yy.If($$[$0-1], $$[$0], {
-          type: $$[$0-2]
-        })));
-break;
-case 182:this.$ = $$[$0];
-break;
-case 183:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].addElse($$[$0]));
-break;
-case 184:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0], yy.addLocationDataFn(_$[$0-2])(yy.Block.wrap([$$[$0-2]])), {
-          type: $$[$0-1],
-          statement: true
-        }));
-break;
-case 185:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0], yy.addLocationDataFn(_$[$0-2])(yy.Block.wrap([$$[$0-2]])), {
-          type: $$[$0-1],
-          statement: true
-        }));
-break;
-case 186:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op($$[$0-1], $$[$0]));
-break;
-case 187:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('-', $$[$0]));
-break;
-case 188:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('+', $$[$0]));
-break;
-case 189:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('--', $$[$0]));
-break;
-case 190:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('++', $$[$0]));
-break;
-case 191:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('--', $$[$0-1], null, true));
-break;
-case 192:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('++', $$[$0-1], null, true));
-break;
-case 193:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Existence($$[$0-1]));
-break;
-case 194:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op('+', $$[$0-2], $$[$0]));
-break;
-case 195:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op('-', $$[$0-2], $$[$0]));
-break;
-case 196:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));
-break;
-case 197:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));
-break;
-case 198:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));
-break;
-case 199:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));
-break;
-case 200:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () {
-        if ($$[$0-1].charAt(0) === '!') {
-          return new yy.Op($$[$0-1].slice(1), $$[$0-2], $$[$0]).invert();
-        } else {
-          return new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
-        }
-      }()));
-break;
-case 201:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign($$[$0-2], $$[$0], $$[$0-1]));
-break;
-case 202:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign($$[$0-4], $$[$0-1], $$[$0-3]));
-break;
-case 203:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Assign($$[$0-3], $$[$0], $$[$0-2]));
-break;
-case 204:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Extends($$[$0-2], $$[$0]));
-break;
-}
-},
-table: [{1:[2,1],3:1,4:2,5:3,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[3]},{1:[2,2],6:[1,74]},{6:[1,75]},{1:[2,4],6:[2,4],26:[2,4],102:[2,4]},{4:77,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[1,76],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,7],6:[2,7],26:[2,7],102:[2,7],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,8],6:[2,8],26:[2,8],102:[2,8],103:90,104:[1,65],106:[1,66],109:91,110:[1,68],111:69,126:[1,89]},{1:[2,12],6:[2,12],25:[2,12],26:[2,12],49:[2,12],54:[2,12],57:[2,12],62:93,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],73:[2,12],74:[1,101],78:[2,12],81:92,84:[1,94],85:[2,108],86:[2,12],91:[2,12],93:[2,12],102:[2,12],104:[2,12],105:[2,12],106:[2,12],110:[2,12],118:[2,12],126:[2,12],128:[2,12],129:[2,12],132:[2,12],133:[2,12],134:[2,12],135:[2,12],136:[2,12],137:[2,12]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],49:[2,13],54:[2,13],57:[2,13],62:103,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],73:[2,13],74:[1,101],78:[2,13],81:102,84:[1,94],85:[2,108],86:[2,13],91:[2,13],93:[2,13],102:[2,13],104:[2,13],105:[2,13],106:[2,13],110:[2,13],118:[2,13],126:[2,13],128:[2,13],129:[2,13],132:[2,13],133:[2,13],134:[2,13],135:[2,13],136:[2,13],137:[2,13]},{1:[2,14],6:[2,14],25:[2,14],26:[2,14],49:[2,14],54:[2,14],57:[2,14],73:[2,14],78:[2,14],86:[2,14],91:[2,14],93:[2,14],102:[2,14],104:[2,14],105:[2,14],106:[2,14],110:[2,14],118:[2,14],126:[2,14],128:[2,14],129:[2,14],132:[2,14],133:[2,14],134:[2,14],135:[2,14],136:[2,14],137:[2,14]},{1:[2,15],6:[2,15],25:[2,15],26:[2,15],49:[2,15],54:[2,15],57:[2,15],73:[2,15],78:[2,15],86:[2,15],91:[2,15],93:[2,15],102:[2,15],104:[2,15],105:[2,15],106:[2,15],110:[2,15],118:[2,15],126:[2,15],128:[2,15],129:[2,15],132:[2,15],133:[2,15],134:[2,15],135:[2,15],136:[2,15],137:[2,15]},{1:[2,16],6:[2,16],25:[2,16],26:[2,16],49:[2,16],54:[2,16],57:[2,16],73:[2,16],78:[2,16],86:[2,16],91:[2,16],93:[2,16],102:[2,16],104:[2,16],105:[2,16],106:[2,16],110:[2,16],118:[2,16],126:[2,16],128:[2,16],129:[2,16],132:[2,16],133:[2,16],134:[2,16],135:[2,16],136:[2,16],137:[2,16]},{1:[2,17],6:[2,17],25:[2,17],26:[2,17],49:[2,17],54:[2,17],57:[2,17],73:[2,17],78:[2,17],86:[2,17],91:[2,17],93:[2,17],102:[2,17],104:[2,17],105:[2,17],106:[2,17],110:[2,17],118:[2,17],126:[2,17],128:[2,17],129:[2,17],132:[2,17],133:[2,17],134:[2,17],135:[2,17],136:[2,17],137:[2,17]},{1:[2,18],6:[2,18],25:[2,18],26:[2,18],49:[2,18],54:[2,18],57:[2,18],73:[2,18],78:[2,18],86:[2,18],91:[2,18],93:[2,18],102:[2,18],104:[2,18],105:[2,18],106:[2,18],110:[2,18],118:[2,18],126:[2,18],128:[2,18],129:[2,18],132:[2,18],133:[2,18],134:[2,18],135:[2,18],136:[2,18],137:[2,18]},{1:[2,19],6:[2,19],25:[2,19],26:[2,19],49:[2,19],54:[2,19],57:[2,19],73:[2,19],78:[2,19],86:[2,19],91:[2,19],93:[2,19],102:[2,19],104:[2,19],105:[2,19],106:[2,19],110:[2,19],118:[2,19],126:[2,19],128:[2,19],129:[2,19],132:[2,19],133:[2,19],134:[2,19],135:[2,19],136:[2,19],137:[2,19]},{1:[2,20],6:[2,20],25:[2,20],26:[2,20],49:[2,20],54:[2,20],57:[2,20],73:[2,20],78:[2,20],86:[2,20],91:[2,20],93:[2,20],102:[2,20],104:[2,20],105:[2,20],106:[2,20],110:[2,20],118:[2,20],126:[2,20],128:[2,20],129:[2,20],132:[2,20],133:[2,20],134:[2,20],135:[2,20],136:[2,20],137:[2,20]},{1:[2,21],6:[2,21],25:[2,21],26:[2,21],49:[2,21],54:[2,21],57:[2,21],73:[2,21],78:[2,21],86:[2,21],91:[2,21],93:[2,21],102:[2,21],104:[2,21],105:[2,21],106:[2,21],110:[2,21],118:[2,21],126:[2,21],128:[2,21],129:[2,21],132:[2,21],133:[2,21],134:[2,21],135:[2,21],136:[2,21],137:[2,21]},{1:[2,22],6:[2,22],25:[2,22],26:[2,22],49:[2,22],54:[2,22],57:[2,22],73:[2,22],78:[2,22],86:[2,22],91:[2,22],93:[2,22],102:[2,22],104:[2,22],105:[2,22],106:[2,22],110:[2,22],118:[2,22],126:[2,22],128:[2,22],129:[2,22],132:[2,22],133:[2,22],134:[2,22],135:[2,22],136:[2,22],137:[2,22]},{1:[2,23],6:[2,23],25:[2,23],26:[2,23],49:[2,23],54:[2,23],57:[2,23],73:[2,23],78:[2,23],86:[2,23],91:[2,23],93:[2,23],102:[2,23],104:[2,23],105:[2,23],106:[2,23],110:[2,23],118:[2,23],126:[2,23],128:[2,23],129:[2,23],132:[2,23],133:[2,23],134:[2,23],135:[2,23],136:[2,23],137:[2,23]},{1:[2,9],6:[2,9],26:[2,9],102:[2,9],104:[2,9],106:[2,9],110:[2,9],126:[2,9]},{1:[2,10],6:[2,10],26:[2,10],102:[2,10],104:[2,10],106:[2,10],110:[2,10],126:[2,10]},{1:[2,11],6:[2,11],26:[2,11],102:[2,11],104:[2,11],106:[2,11],110:[2,11],126:[2,11]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],40:[1,104],49:[2,75],54:[2,75],57:[2,75],66:[2,75],67:[2,75],68:[2,75],69:[2,75],71:[2,75],73:[2,75],74:[2,75],78:[2,75],84:[2,75],85:[2,75],86:[2,75],91:[2,75],93:[2,75],102:[2,75],104:[2,75],105:[2,75],106:[2,75],110:[2,75],118:[2,75],126:[2,75],128:[2,75],129:[2,75],132:[2,75],133:[2,75],134:[2,75],135:[2,75],136:[2,75],137:[2,75]},{1:[2,76],6:[2,76],25:[2,76],26:[2,76],49:[2,76],54:[2,76],57:[2,76],66:[2,76],67:[2,76],68:[2,76],69:[2,76],71:[2,76],73:[2,76],74:[2,76],78:[2,76],84:[2,76],85:[2,76],86:[2,76],91:[2,76],93:[2,76],102:[2,76],104:[2,76],105:[2,76],106:[2,76],110:[2,76],118:[2,76],126:[2,76],128:[2,76],129:[2,76],132:[2,76],133:[2,76],134:[2,76],135:[2,76],136:[2,76],137:[2,76]},{1:[2,77],6:[2,77],25:[2,77],26:[2,77],49:[2,77],54:[2,77],57:[2,77],66:[2,77],67:[2,77],68:[2,77],69:[2,77],71:[2,77],73:[2,77],74:[2,77],78:[2,77],84:[2,77],85:[2,77],86:[2,77],91:[2,77],93:[2,77],102:[2,77],104:[2,77],105:[2,77],106:[2,77],110:[2,77],118:[2,77],126:[2,77],128:[2,77],129:[2,77],132:[2,77],133:[2,77],134:[2,77],135:[2,77],136:[2,77],137:[2,77]},{1:[2,78],6:[2,78],25:[2,78],26:[2,78],49:[2,78],54:[2,78],57:[2,78],66:[2,78],67:[2,78],68:[2,78],69:[2,78],71:[2,78],73:[2,78],74:[2,78],78:[2,78],84:[2,78],85:[2,78],86:[2,78],91:[2,78],93:[2,78],102:[2,78],104:[2,78],105:[2,78],106:[2,78],110:[2,78],118:[2,78],126:[2,78],128:[2,78],129:[2,78],132:[2,78],133:[2,78],134:[2,78],135:[2,78],136:[2,78],137:[2,78]},{1:[2,79],6:[2,79],25:[2,79],26:[2,79],49:[2,79],54:[2,79],57:[2,79],66:[2,79],67:[2,79],68:[2,79],69:[2,79],71:[2,79],73:[2,79],74:[2,79],78:[2,79],84:[2,79],85:[2,79],86:[2,79],91:[2,79],93:[2,79],102:[2,79],104:[2,79],105:[2,79],106:[2,79],110:[2,79],118:[2,79],126:[2,79],128:[2,79],129:[2,79],132:[2,79],133:[2,79],134:[2,79],135:[2,79],136:[2,79],137:[2,79]},{1:[2,106],6:[2,106],25:[2,106],26:[2,106],49:[2,106],54:[2,106],57:[2,106],66:[2,106],67:[2,106],68:[2,106],69:[2,106],71:[2,106],73:[2,106],74:[2,106],78:[2,106],82:105,84:[2,106],85:[1,106],86:[2,106],91:[2,106],93:[2,106],102:[2,106],104:[2,106],105:[2,106],106:[2,106],110:[2,106],118:[2,106],126:[2,106],128:[2,106],129:[2,106],132:[2,106],133:[2,106],134:[2,106],135:[2,106],136:[2,106],137:[2,106]},{6:[2,55],25:[2,55],27:110,28:[1,73],44:111,48:107,49:[2,55],54:[2,55],55:108,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{5:116,25:[1,5]},{8:117,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:119,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:120,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{13:122,14:123,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:124,44:63,58:47,59:48,61:121,63:25,64:26,65:27,76:[1,70],83:[1,28],88:[1,58],89:[1,59],90:[1,57],101:[1,56]},{13:122,14:123,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:124,44:63,58:47,59:48,61:125,63:25,64:26,65:27,76:[1,70],83:[1,28],88:[1,58],89:[1,59],90:[1,57],101:[1,56]},{1:[2,72],6:[2,72],25:[2,72],26:[2,72],40:[2,72],49:[2,72],54:[2,72],57:[2,72],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,72],74:[2,72],78:[2,72],80:[1,129],84:[2,72],85:[2,72],86:[2,72],91:[2,72],93:[2,72],102:[2,72],104:[2,72],105:[2,72],106:[2,72],110:[2,72],118:[2,72],126:[2,72],128:[2,72],129:[2,72],130:[1,126],131:[1,127],132:[2,72],133:[2,72],134:[2,72],135:[2,72],136:[2,72],137:[2,72],138:[1,128]},{1:[2,182],6:[2,182],25:[2,182],26:[2,182],49:[2,182],54:[2,182],57:[2,182],73:[2,182],78:[2,182],86:[2,182],91:[2,182],93:[2,182],102:[2,182],104:[2,182],105:[2,182],106:[2,182],110:[2,182],118:[2,182],121:[1,130],126:[2,182],128:[2,182],129:[2,182],132:[2,182],133:[2,182],134:[2,182],135:[2,182],136:[2,182],137:[2,182]},{5:131,25:[1,5]},{5:132,25:[1,5]},{1:[2,149],6:[2,149],25:[2,149],26:[2,149],49:[2,149],54:[2,149],57:[2,149],73:[2,149],78:[2,149],86:[2,149],91:[2,149],93:[2,149],102:[2,149],104:[2,149],105:[2,149],106:[2,149],110:[2,149],118:[2,149],126:[2,149],128:[2,149],129:[2,149],132:[2,149],133:[2,149],134:[2,149],135:[2,149],136:[2,149],137:[2,149]},{5:133,25:[1,5]},{8:134,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,135],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,96],5:136,6:[2,96],13:122,14:123,25:[1,5],26:[2,96],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:124,44:63,49:[2,96],54:[2,96],57:[2,96],58:47,59:48,61:138,63:25,64:26,65:27,73:[2,96],76:[1,70],78:[2,96],80:[1,137],83:[1,28],86:[2,96],88:[1,58],89:[1,59],90:[1,57],91:[2,96],93:[2,96],101:[1,56],102:[2,96],104:[2,96],105:[2,96],106:[2,96],110:[2,96],118:[2,96],126:[2,96],128:[2,96],129:[2,96],132:[2,96],133:[2,96],134:[2,96],135:[2,96],136:[2,96],137:[2,96]},{8:139,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,47],6:[2,47],8:140,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,47],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],102:[2,47],103:39,104:[2,47],106:[2,47],107:40,108:[1,67],109:41,110:[2,47],111:69,119:[1,42],124:37,125:[1,64],126:[2,47],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,48],6:[2,48],25:[2,48],26:[2,48],54:[2,48],78:[2,48],102:[2,48],104:[2,48],106:[2,48],110:[2,48],126:[2,48]},{1:[2,73],6:[2,73],25:[2,73],26:[2,73],40:[2,73],49:[2,73],54:[2,73],57:[2,73],66:[2,73],67:[2,73],68:[2,73],69:[2,73],71:[2,73],73:[2,73],74:[2,73],78:[2,73],84:[2,73],85:[2,73],86:[2,73],91:[2,73],93:[2,73],102:[2,73],104:[2,73],105:[2,73],106:[2,73],110:[2,73],118:[2,73],126:[2,73],128:[2,73],129:[2,73],132:[2,73],133:[2,73],134:[2,73],135:[2,73],136:[2,73],137:[2,73]},{1:[2,74],6:[2,74],25:[2,74],26:[2,74],40:[2,74],49:[2,74],54:[2,74],57:[2,74],66:[2,74],67:[2,74],68:[2,74],69:[2,74],71:[2,74],73:[2,74],74:[2,74],78:[2,74],84:[2,74],85:[2,74],86:[2,74],91:[2,74],93:[2,74],102:[2,74],104:[2,74],105:[2,74],106:[2,74],110:[2,74],118:[2,74],126:[2,74],128:[2,74],129:[2,74],132:[2,74],133:[2,74],134:[2,74],135:[2,74],136:[2,74],137:[2,74]},{1:[2,29],6:[2,29],25:[2,29],26:[2,29],49:[2,29],54:[2,29],57:[2,29],66:[2,29],67:[2,29],68:[2,29],69:[2,29],71:[2,29],73:[2,29],74:[2,29],78:[2,29],84:[2,29],85:[2,29],86:[2,29],91:[2,29],93:[2,29],102:[2,29],104:[2,29],105:[2,29],106:[2,29],110:[2,29],118:[2,29],126:[2,29],128:[2,29],129:[2,29],132:[2,29],133:[2,29],134:[2,29],135:[2,29],136:[2,29],137:[2,29]},{1:[2,30],6:[2,30],25:[2,30],26:[2,30],49:[2,30],54:[2,30],57:[2,30],66:[2,30],67:[2,30],68:[2,30],69:[2,30],71:[2,30],73:[2,30],74:[2,30],78:[2,30],84:[2,30],85:[2,30],86:[2,30],91:[2,30],93:[2,30],102:[2,30],104:[2,30],105:[2,30],106:[2,30],110:[2,30],118:[2,30],126:[2,30],128:[2,30],129:[2,30],132:[2,30],133:[2,30],134:[2,30],135:[2,30],136:[2,30],137:[2,30]},{1:[2,31],6:[2,31],25:[2,31],26:[2,31],49:[2,31],54:[2,31],57:[2,31],66:[2,31],67:[2,31],68:[2,31],69:[2,31],71:[2,31],73:[2,31],74:[2,31],78:[2,31],84:[2,31],85:[2,31],86:[2,31],91:[2,31],93:[2,31],102:[2,31],104:[2,31],105:[2,31],106:[2,31],110:[2,31],118:[2,31],126:[2,31],128:[2,31],129:[2,31],132:[2,31],133:[2,31],134:[2,31],135:[2,31],136:[2,31],137:[2,31]},{1:[2,32],6:[2,32],25:[2,32],26:[2,32],49:[2,32],54:[2,32],57:[2,32],66:[2,32],67:[2,32],68:[2,32],69:[2,32],71:[2,32],73:[2,32],74:[2,32],78:[2,32],84:[2,32],85:[2,32],86:[2,32],91:[2,32],93:[2,32],102:[2,32],104:[2,32],105:[2,32],106:[2,32],110:[2,32],118:[2,32],126:[2,32],128:[2,32],129:[2,32],132:[2,32],133:[2,32],134:[2,32],135:[2,32],136:[2,32],137:[2,32]},{1:[2,33],6:[2,33],25:[2,33],26:[2,33],49:[2,33],54:[2,33],57:[2,33],66:[2,33],67:[2,33],68:[2,33],69:[2,33],71:[2,33],73:[2,33],74:[2,33],78:[2,33],84:[2,33],85:[2,33],86:[2,33],91:[2,33],93:[2,33],102:[2,33],104:[2,33],105:[2,33],106:[2,33],110:[2,33],118:[2,33],126:[2,33],128:[2,33],129:[2,33],132:[2,33],133:[2,33],134:[2,33],135:[2,33],136:[2,33],137:[2,33]},{1:[2,34],6:[2,34],25:[2,34],26:[2,34],49:[2,34],54:[2,34],57:[2,34],66:[2,34],67:[2,34],68:[2,34],69:[2,34],71:[2,34],73:[2,34],74:[2,34],78:[2,34],84:[2,34],85:[2,34],86:[2,34],91:[2,34],93:[2,34],102:[2,34],104:[2,34],105:[2,34],106:[2,34],110:[2,34],118:[2,34],126:[2,34],128:[2,34],129:[2,34],132:[2,34],133:[2,34],134:[2,34],135:[2,34],136:[2,34],137:[2,34]},{1:[2,35],6:[2,35],25:[2,35],26:[2,35],49:[2,35],54:[2,35],57:[2,35],66:[2,35],67:[2,35],68:[2,35],69:[2,35],71:[2,35],73:[2,35],74:[2,35],78:[2,35],84:[2,35],85:[2,35],86:[2,35],91:[2,35],93:[2,35],102:[2,35],104:[2,35],105:[2,35],106:[2,35],110:[2,35],118:[2,35],126:[2,35],128:[2,35],129:[2,35],132:[2,35],133:[2,35],134:[2,35],135:[2,35],136:[2,35],137:[2,35]},{4:141,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,142],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:143,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:145,88:[1,58],89:[1,59],90:[1,57],91:[1,144],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,112],6:[2,112],25:[2,112],26:[2,112],49:[2,112],54:[2,112],57:[2,112],66:[2,112],67:[2,112],68:[2,112],69:[2,112],71:[2,112],73:[2,112],74:[2,112],78:[2,112],84:[2,112],85:[2,112],86:[2,112],91:[2,112],93:[2,112],102:[2,112],104:[2,112],105:[2,112],106:[2,112],110:[2,112],118:[2,112],126:[2,112],128:[2,112],129:[2,112],132:[2,112],133:[2,112],134:[2,112],135:[2,112],136:[2,112],137:[2,112]},{1:[2,113],6:[2,113],25:[2,113],26:[2,113],27:149,28:[1,73],49:[2,113],54:[2,113],57:[2,113],66:[2,113],67:[2,113],68:[2,113],69:[2,113],71:[2,113],73:[2,113],74:[2,113],78:[2,113],84:[2,113],85:[2,113],86:[2,113],91:[2,113],93:[2,113],102:[2,113],104:[2,113],105:[2,113],106:[2,113],110:[2,113],118:[2,113],126:[2,113],128:[2,113],129:[2,113],132:[2,113],133:[2,113],134:[2,113],135:[2,113],136:[2,113],137:[2,113]},{25:[2,51]},{25:[2,52]},{1:[2,68],6:[2,68],25:[2,68],26:[2,68],40:[2,68],49:[2,68],54:[2,68],57:[2,68],66:[2,68],67:[2,68],68:[2,68],69:[2,68],71:[2,68],73:[2,68],74:[2,68],78:[2,68],80:[2,68],84:[2,68],85:[2,68],86:[2,68],91:[2,68],93:[2,68],102:[2,68],104:[2,68],105:[2,68],106:[2,68],110:[2,68],118:[2,68],126:[2,68],128:[2,68],129:[2,68],130:[2,68],131:[2,68],132:[2,68],133:[2,68],134:[2,68],135:[2,68],136:[2,68],137:[2,68],138:[2,68]},{1:[2,71],6:[2,71],25:[2,71],26:[2,71],40:[2,71],49:[2,71],54:[2,71],57:[2,71],66:[2,71],67:[2,71],68:[2,71],69:[2,71],71:[2,71],73:[2,71],74:[2,71],78:[2,71],80:[2,71],84:[2,71],85:[2,71],86:[2,71],91:[2,71],93:[2,71],102:[2,71],104:[2,71],105:[2,71],106:[2,71],110:[2,71],118:[2,71],126:[2,71],128:[2,71],129:[2,71],130:[2,71],131:[2,71],132:[2,71],133:[2,71],134:[2,71],135:[2,71],136:[2,71],137:[2,71],138:[2,71]},{8:150,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:151,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:152,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{5:153,8:154,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{27:159,28:[1,73],44:160,58:161,59:162,64:155,76:[1,70],89:[1,114],90:[1,57],113:156,114:[1,157],115:158},{112:163,116:[1,164],117:[1,165]},{6:[2,91],11:169,25:[2,91],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:167,42:168,44:172,46:[1,46],54:[2,91],77:166,78:[2,91],89:[1,114]},{1:[2,27],6:[2,27],25:[2,27],26:[2,27],43:[2,27],49:[2,27],54:[2,27],57:[2,27],66:[2,27],67:[2,27],68:[2,27],69:[2,27],71:[2,27],73:[2,27],74:[2,27],78:[2,27],84:[2,27],85:[2,27],86:[2,27],91:[2,27],93:[2,27],102:[2,27],104:[2,27],105:[2,27],106:[2,27],110:[2,27],118:[2,27],126:[2,27],128:[2,27],129:[2,27],132:[2,27],133:[2,27],134:[2,27],135:[2,27],136:[2,27],137:[2,27]},{1:[2,28],6:[2,28],25:[2,28],26:[2,28],43:[2,28],49:[2,28],54:[2,28],57:[2,28],66:[2,28],67:[2,28],68:[2,28],69:[2,28],71:[2,28],73:[2,28],74:[2,28],78:[2,28],84:[2,28],85:[2,28],86:[2,28],91:[2,28],93:[2,28],102:[2,28],104:[2,28],105:[2,28],106:[2,28],110:[2,28],118:[2,28],126:[2,28],128:[2,28],129:[2,28],132:[2,28],133:[2,28],134:[2,28],135:[2,28],136:[2,28],137:[2,28]},{1:[2,26],6:[2,26],25:[2,26],26:[2,26],40:[2,26],43:[2,26],49:[2,26],54:[2,26],57:[2,26],66:[2,26],67:[2,26],68:[2,26],69:[2,26],71:[2,26],73:[2,26],74:[2,26],78:[2,26],80:[2,26],84:[2,26],85:[2,26],86:[2,26],91:[2,26],93:[2,26],102:[2,26],104:[2,26],105:[2,26],106:[2,26],110:[2,26],116:[2,26],117:[2,26],118:[2,26],126:[2,26],128:[2,26],129:[2,26],130:[2,26],131:[2,26],132:[2,26],133:[2,26],134:[2,26],135:[2,26],136:[2,26],137:[2,26],138:[2,26]},{1:[2,6],6:[2,6],7:173,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,6],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],102:[2,6],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,3]},{1:[2,24],6:[2,24],25:[2,24],26:[2,24],49:[2,24],54:[2,24],57:[2,24],73:[2,24],78:[2,24],86:[2,24],91:[2,24],93:[2,24],98:[2,24],99:[2,24],102:[2,24],104:[2,24],105:[2,24],106:[2,24],110:[2,24],118:[2,24],121:[2,24],123:[2,24],126:[2,24],128:[2,24],129:[2,24],132:[2,24],133:[2,24],134:[2,24],135:[2,24],136:[2,24],137:[2,24]},{6:[1,74],26:[1,174]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],49:[2,193],54:[2,193],57:[2,193],73:[2,193],78:[2,193],86:[2,193],91:[2,193],93:[2,193],102:[2,193],104:[2,193],105:[2,193],106:[2,193],110:[2,193],118:[2,193],126:[2,193],128:[2,193],129:[2,193],132:[2,193],133:[2,193],134:[2,193],135:[2,193],136:[2,193],137:[2,193]},{8:175,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:176,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:177,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:178,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:179,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:180,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:181,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:182,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,148],6:[2,148],25:[2,148],26:[2,148],49:[2,148],54:[2,148],57:[2,148],73:[2,148],78:[2,148],86:[2,148],91:[2,148],93:[2,148],102:[2,148],104:[2,148],105:[2,148],106:[2,148],110:[2,148],118:[2,148],126:[2,148],128:[2,148],129:[2,148],132:[2,148],133:[2,148],134:[2,148],135:[2,148],136:[2,148],137:[2,148]},{1:[2,153],6:[2,153],25:[2,153],26:[2,153],49:[2,153],54:[2,153],57:[2,153],73:[2,153],78:[2,153],86:[2,153],91:[2,153],93:[2,153],102:[2,153],104:[2,153],105:[2,153],106:[2,153],110:[2,153],118:[2,153],126:[2,153],128:[2,153],129:[2,153],132:[2,153],133:[2,153],134:[2,153],135:[2,153],136:[2,153],137:[2,153]},{8:183,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,147],6:[2,147],25:[2,147],26:[2,147],49:[2,147],54:[2,147],57:[2,147],73:[2,147],78:[2,147],86:[2,147],91:[2,147],93:[2,147],102:[2,147],104:[2,147],105:[2,147],106:[2,147],110:[2,147],118:[2,147],126:[2,147],128:[2,147],129:[2,147],132:[2,147],133:[2,147],134:[2,147],135:[2,147],136:[2,147],137:[2,147]},{1:[2,152],6:[2,152],25:[2,152],26:[2,152],49:[2,152],54:[2,152],57:[2,152],73:[2,152],78:[2,152],86:[2,152],91:[2,152],93:[2,152],102:[2,152],104:[2,152],105:[2,152],106:[2,152],110:[2,152],118:[2,152],126:[2,152],128:[2,152],129:[2,152],132:[2,152],133:[2,152],134:[2,152],135:[2,152],136:[2,152],137:[2,152]},{82:184,85:[1,106]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],40:[2,69],49:[2,69],54:[2,69],57:[2,69],66:[2,69],67:[2,69],68:[2,69],69:[2,69],71:[2,69],73:[2,69],74:[2,69],78:[2,69],80:[2,69],84:[2,69],85:[2,69],86:[2,69],91:[2,69],93:[2,69],102:[2,69],104:[2,69],105:[2,69],106:[2,69],110:[2,69],118:[2,69],126:[2,69],128:[2,69],129:[2,69],130:[2,69],131:[2,69],132:[2,69],133:[2,69],134:[2,69],135:[2,69],136:[2,69],137:[2,69],138:[2,69]},{85:[2,109]},{27:185,28:[1,73]},{27:186,28:[1,73]},{1:[2,84],6:[2,84],25:[2,84],26:[2,84],27:187,28:[1,73],40:[2,84],49:[2,84],54:[2,84],57:[2,84],66:[2,84],67:[2,84],68:[2,84],69:[2,84],71:[2,84],73:[2,84],74:[2,84],78:[2,84],80:[2,84],84:[2,84],85:[2,84],86:[2,84],91:[2,84],93:[2,84],102:[2,84],104:[2,84],105:[2,84],106:[2,84],110:[2,84],118:[2,84],126:[2,84],128:[2,84],129:[2,84],130:[2,84],131:[2,84],132:[2,84],133:[2,84],134:[2,84],135:[2,84],136:[2,84],137:[2,84],138:[2,84]},{27:188,28:[1,73]},{1:[2,85],6:[2,85],25:[2,85],26:[2,85],40:[2,85],49:[2,85],54:[2,85],57:[2,85],66:[2,85],67:[2,85],68:[2,85],69:[2,85],71:[2,85],73:[2,85],74:[2,85],78:[2,85],80:[2,85],84:[2,85],85:[2,85],86:[2,85],91:[2,85],93:[2,85],102:[2,85],104:[2,85],105:[2,85],106:[2,85],110:[2,85],118:[2,85],126:[2,85],128:[2,85],129:[2,85],130:[2,85],131:[2,85],132:[2,85],133:[2,85],134:[2,85],135:[2,85],136:[2,85],137:[2,85],138:[2,85]},{8:190,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],57:[1,194],58:47,59:48,61:36,63:25,64:26,65:27,72:189,75:191,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],92:192,93:[1,193],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{70:195,71:[1,100],74:[1,101]},{82:196,85:[1,106]},{1:[2,70],6:[2,70],25:[2,70],26:[2,70],40:[2,70],49:[2,70],54:[2,70],57:[2,70],66:[2,70],67:[2,70],68:[2,70],69:[2,70],71:[2,70],73:[2,70],74:[2,70],78:[2,70],80:[2,70],84:[2,70],85:[2,70],86:[2,70],91:[2,70],93:[2,70],102:[2,70],104:[2,70],105:[2,70],106:[2,70],110:[2,70],118:[2,70],126:[2,70],128:[2,70],129:[2,70],130:[2,70],131:[2,70],132:[2,70],133:[2,70],134:[2,70],135:[2,70],136:[2,70],137:[2,70],138:[2,70]},{6:[1,198],8:197,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,199],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,107],6:[2,107],25:[2,107],26:[2,107],49:[2,107],54:[2,107],57:[2,107],66:[2,107],67:[2,107],68:[2,107],69:[2,107],71:[2,107],73:[2,107],74:[2,107],78:[2,107],84:[2,107],85:[2,107],86:[2,107],91:[2,107],93:[2,107],102:[2,107],104:[2,107],105:[2,107],106:[2,107],110:[2,107],118:[2,107],126:[2,107],128:[2,107],129:[2,107],132:[2,107],133:[2,107],134:[2,107],135:[2,107],136:[2,107],137:[2,107]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],86:[1,200],87:201,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],49:[1,203],53:205,54:[1,204]},{6:[2,56],25:[2,56],26:[2,56],49:[2,56],54:[2,56]},{6:[2,60],25:[2,60],26:[2,60],40:[1,207],49:[2,60],54:[2,60],57:[1,206]},{6:[2,63],25:[2,63],26:[2,63],40:[2,63],49:[2,63],54:[2,63],57:[2,63]},{6:[2,64],25:[2,64],26:[2,64],40:[2,64],49:[2,64],54:[2,64],57:[2,64]},{6:[2,65],25:[2,65],26:[2,65],40:[2,65],49:[2,65],54:[2,65],57:[2,65]},{6:[2,66],25:[2,66],26:[2,66],40:[2,66],49:[2,66],54:[2,66],57:[2,66]},{27:149,28:[1,73]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:145,88:[1,58],89:[1,59],90:[1,57],91:[1,144],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,50],6:[2,50],25:[2,50],26:[2,50],49:[2,50],54:[2,50],57:[2,50],73:[2,50],78:[2,50],86:[2,50],91:[2,50],93:[2,50],102:[2,50],104:[2,50],105:[2,50],106:[2,50],110:[2,50],118:[2,50],126:[2,50],128:[2,50],129:[2,50],132:[2,50],133:[2,50],134:[2,50],135:[2,50],136:[2,50],137:[2,50]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],49:[2,186],54:[2,186],57:[2,186],73:[2,186],78:[2,186],86:[2,186],91:[2,186],93:[2,186],102:[2,186],103:87,104:[2,186],105:[2,186],106:[2,186],109:88,110:[2,186],111:69,118:[2,186],126:[2,186],128:[2,186],129:[2,186],132:[1,78],133:[2,186],134:[2,186],135:[2,186],136:[2,186],137:[2,186]},{103:90,104:[1,65],106:[1,66],109:91,110:[1,68],111:69,126:[1,89]},{1:[2,187],6:[2,187],25:[2,187],26:[2,187],49:[2,187],54:[2,187],57:[2,187],73:[2,187],78:[2,187],86:[2,187],91:[2,187],93:[2,187],102:[2,187],103:87,104:[2,187],105:[2,187],106:[2,187],109:88,110:[2,187],111:69,118:[2,187],126:[2,187],128:[2,187],129:[2,187],132:[1,78],133:[2,187],134:[2,187],135:[2,187],136:[2,187],137:[2,187]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],49:[2,188],54:[2,188],57:[2,188],73:[2,188],78:[2,188],86:[2,188],91:[2,188],93:[2,188],102:[2,188],103:87,104:[2,188],105:[2,188],106:[2,188],109:88,110:[2,188],111:69,118:[2,188],126:[2,188],128:[2,188],129:[2,188],132:[1,78],133:[2,188],134:[2,188],135:[2,188],136:[2,188],137:[2,188]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],49:[2,189],54:[2,189],57:[2,189],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,189],74:[2,72],78:[2,189],84:[2,72],85:[2,72],86:[2,189],91:[2,189],93:[2,189],102:[2,189],104:[2,189],105:[2,189],106:[2,189],110:[2,189],118:[2,189],126:[2,189],128:[2,189],129:[2,189],132:[2,189],133:[2,189],134:[2,189],135:[2,189],136:[2,189],137:[2,189]},{62:93,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],74:[1,101],81:92,84:[1,94],85:[2,108]},{62:103,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],74:[1,101],81:102,84:[1,94],85:[2,108]},{66:[2,75],67:[2,75],68:[2,75],69:[2,75],71:[2,75],74:[2,75],84:[2,75],85:[2,75]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],49:[2,190],54:[2,190],57:[2,190],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,190],74:[2,72],78:[2,190],84:[2,72],85:[2,72],86:[2,190],91:[2,190],93:[2,190],102:[2,190],104:[2,190],105:[2,190],106:[2,190],110:[2,190],118:[2,190],126:[2,190],128:[2,190],129:[2,190],132:[2,190],133:[2,190],134:[2,190],135:[2,190],136:[2,190],137:[2,190]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],49:[2,191],54:[2,191],57:[2,191],73:[2,191],78:[2,191],86:[2,191],91:[2,191],93:[2,191],102:[2,191],104:[2,191],105:[2,191],106:[2,191],110:[2,191],118:[2,191],126:[2,191],128:[2,191],129:[2,191],132:[2,191],133:[2,191],134:[2,191],135:[2,191],136:[2,191],137:[2,191]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],49:[2,192],54:[2,192],57:[2,192],73:[2,192],78:[2,192],86:[2,192],91:[2,192],93:[2,192],102:[2,192],104:[2,192],105:[2,192],106:[2,192],110:[2,192],118:[2,192],126:[2,192],128:[2,192],129:[2,192],132:[2,192],133:[2,192],134:[2,192],135:[2,192],136:[2,192],137:[2,192]},{6:[1,210],8:208,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,209],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:211,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{5:212,25:[1,5],125:[1,213]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],49:[2,133],54:[2,133],57:[2,133],73:[2,133],78:[2,133],86:[2,133],91:[2,133],93:[2,133],97:214,98:[1,215],99:[1,216],102:[2,133],104:[2,133],105:[2,133],106:[2,133],110:[2,133],118:[2,133],126:[2,133],128:[2,133],129:[2,133],132:[2,133],133:[2,133],134:[2,133],135:[2,133],136:[2,133],137:[2,133]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],49:[2,146],54:[2,146],57:[2,146],73:[2,146],78:[2,146],86:[2,146],91:[2,146],93:[2,146],102:[2,146],104:[2,146],105:[2,146],106:[2,146],110:[2,146],118:[2,146],126:[2,146],128:[2,146],129:[2,146],132:[2,146],133:[2,146],134:[2,146],135:[2,146],136:[2,146],137:[2,146]},{1:[2,154],6:[2,154],25:[2,154],26:[2,154],49:[2,154],54:[2,154],57:[2,154],73:[2,154],78:[2,154],86:[2,154],91:[2,154],93:[2,154],102:[2,154],104:[2,154],105:[2,154],106:[2,154],110:[2,154],118:[2,154],126:[2,154],128:[2,154],129:[2,154],132:[2,154],133:[2,154],134:[2,154],135:[2,154],136:[2,154],137:[2,154]},{25:[1,217],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{120:218,122:219,123:[1,220]},{1:[2,97],6:[2,97],25:[2,97],26:[2,97],49:[2,97],54:[2,97],57:[2,97],73:[2,97],78:[2,97],86:[2,97],91:[2,97],93:[2,97],102:[2,97],104:[2,97],105:[2,97],106:[2,97],110:[2,97],118:[2,97],126:[2,97],128:[2,97],129:[2,97],132:[2,97],133:[2,97],134:[2,97],135:[2,97],136:[2,97],137:[2,97]},{8:221,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,100],5:222,6:[2,100],25:[1,5],26:[2,100],49:[2,100],54:[2,100],57:[2,100],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,100],74:[2,72],78:[2,100],80:[1,223],84:[2,72],85:[2,72],86:[2,100],91:[2,100],93:[2,100],102:[2,100],104:[2,100],105:[2,100],106:[2,100],110:[2,100],118:[2,100],126:[2,100],128:[2,100],129:[2,100],132:[2,100],133:[2,100],134:[2,100],135:[2,100],136:[2,100],137:[2,100]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],49:[2,139],54:[2,139],57:[2,139],73:[2,139],78:[2,139],86:[2,139],91:[2,139],93:[2,139],102:[2,139],103:87,104:[2,139],105:[2,139],106:[2,139],109:88,110:[2,139],111:69,118:[2,139],126:[2,139],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,46],6:[2,46],26:[2,46],102:[2,46],103:87,104:[2,46],106:[2,46],109:88,110:[2,46],111:69,126:[2,46],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,74],102:[1,224]},{4:225,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,129],25:[2,129],54:[2,129],57:[1,227],91:[2,129],92:226,93:[1,193],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,115],6:[2,115],25:[2,115],26:[2,115],40:[2,115],49:[2,115],54:[2,115],57:[2,115],66:[2,115],67:[2,115],68:[2,115],69:[2,115],71:[2,115],73:[2,115],74:[2,115],78:[2,115],84:[2,115],85:[2,115],86:[2,115],91:[2,115],93:[2,115],102:[2,115],104:[2,115],105:[2,115],106:[2,115],110:[2,115],116:[2,115],117:[2,115],118:[2,115],126:[2,115],128:[2,115],129:[2,115],132:[2,115],133:[2,115],134:[2,115],135:[2,115],136:[2,115],137:[2,115]},{6:[2,53],25:[2,53],53:228,54:[1,229],91:[2,53]},{6:[2,124],25:[2,124],26:[2,124],54:[2,124],86:[2,124],91:[2,124]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:230,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,130],25:[2,130],26:[2,130],54:[2,130],86:[2,130],91:[2,130]},{1:[2,114],6:[2,114],25:[2,114],26:[2,114],40:[2,114],43:[2,114],49:[2,114],54:[2,114],57:[2,114],66:[2,114],67:[2,114],68:[2,114],69:[2,114],71:[2,114],73:[2,114],74:[2,114],78:[2,114],80:[2,114],84:[2,114],85:[2,114],86:[2,114],91:[2,114],93:[2,114],102:[2,114],104:[2,114],105:[2,114],106:[2,114],110:[2,114],116:[2,114],117:[2,114],118:[2,114],126:[2,114],128:[2,114],129:[2,114],130:[2,114],131:[2,114],132:[2,114],133:[2,114],134:[2,114],135:[2,114],136:[2,114],137:[2,114],138:[2,114]},{5:231,25:[1,5],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],49:[2,142],54:[2,142],57:[2,142],73:[2,142],78:[2,142],86:[2,142],91:[2,142],93:[2,142],102:[2,142],103:87,104:[1,65],105:[1,232],106:[1,66],109:88,110:[1,68],111:69,118:[2,142],126:[2,142],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],49:[2,144],54:[2,144],57:[2,144],73:[2,144],78:[2,144],86:[2,144],91:[2,144],93:[2,144],102:[2,144],103:87,104:[1,65],105:[1,233],106:[1,66],109:88,110:[1,68],111:69,118:[2,144],126:[2,144],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,150],6:[2,150],25:[2,150],26:[2,150],49:[2,150],54:[2,150],57:[2,150],73:[2,150],78:[2,150],86:[2,150],91:[2,150],93:[2,150],102:[2,150],104:[2,150],105:[2,150],106:[2,150],110:[2,150],118:[2,150],126:[2,150],128:[2,150],129:[2,150],132:[2,150],133:[2,150],134:[2,150],135:[2,150],136:[2,150],137:[2,150]},{1:[2,151],6:[2,151],25:[2,151],26:[2,151],49:[2,151],54:[2,151],57:[2,151],73:[2,151],78:[2,151],86:[2,151],91:[2,151],93:[2,151],102:[2,151],103:87,104:[1,65],105:[2,151],106:[1,66],109:88,110:[1,68],111:69,118:[2,151],126:[2,151],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,155],6:[2,155],25:[2,155],26:[2,155],49:[2,155],54:[2,155],57:[2,155],73:[2,155],78:[2,155],86:[2,155],91:[2,155],93:[2,155],102:[2,155],104:[2,155],105:[2,155],106:[2,155],110:[2,155],118:[2,155],126:[2,155],128:[2,155],129:[2,155],132:[2,155],133:[2,155],134:[2,155],135:[2,155],136:[2,155],137:[2,155]},{116:[2,157],117:[2,157]},{27:159,28:[1,73],44:160,58:161,59:162,76:[1,70],89:[1,114],90:[1,115],113:234,115:158},{54:[1,235],116:[2,163],117:[2,163]},{54:[2,159],116:[2,159],117:[2,159]},{54:[2,160],116:[2,160],117:[2,160]},{54:[2,161],116:[2,161],117:[2,161]},{54:[2,162],116:[2,162],117:[2,162]},{1:[2,156],6:[2,156],25:[2,156],26:[2,156],49:[2,156],54:[2,156],57:[2,156],73:[2,156],78:[2,156],86:[2,156],91:[2,156],93:[2,156],102:[2,156],104:[2,156],105:[2,156],106:[2,156],110:[2,156],118:[2,156],126:[2,156],128:[2,156],129:[2,156],132:[2,156],133:[2,156],134:[2,156],135:[2,156],136:[2,156],137:[2,156]},{8:236,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:237,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],53:238,54:[1,239],78:[2,53]},{6:[2,92],25:[2,92],26:[2,92],54:[2,92],78:[2,92]},{6:[2,39],25:[2,39],26:[2,39],43:[1,240],54:[2,39],78:[2,39]},{6:[2,42],25:[2,42],26:[2,42],54:[2,42],78:[2,42]},{6:[2,43],25:[2,43],26:[2,43],43:[2,43],54:[2,43],78:[2,43]},{6:[2,44],25:[2,44],26:[2,44],43:[2,44],54:[2,44],78:[2,44]},{6:[2,45],25:[2,45],26:[2,45],43:[2,45],54:[2,45],78:[2,45]},{1:[2,5],6:[2,5],26:[2,5],102:[2,5]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],49:[2,25],54:[2,25],57:[2,25],73:[2,25],78:[2,25],86:[2,25],91:[2,25],93:[2,25],98:[2,25],99:[2,25],102:[2,25],104:[2,25],105:[2,25],106:[2,25],110:[2,25],118:[2,25],121:[2,25],123:[2,25],126:[2,25],128:[2,25],129:[2,25],132:[2,25],133:[2,25],134:[2,25],135:[2,25],136:[2,25],137:[2,25]},{1:[2,194],6:[2,194],25:[2,194],26:[2,194],49:[2,194],54:[2,194],57:[2,194],73:[2,194],78:[2,194],86:[2,194],91:[2,194],93:[2,194],102:[2,194],103:87,104:[2,194],105:[2,194],106:[2,194],109:88,110:[2,194],111:69,118:[2,194],126:[2,194],128:[2,194],129:[2,194],132:[1,78],133:[1,81],134:[2,194],135:[2,194],136:[2,194],137:[2,194]},{1:[2,195],6:[2,195],25:[2,195],26:[2,195],49:[2,195],54:[2,195],57:[2,195],73:[2,195],78:[2,195],86:[2,195],91:[2,195],93:[2,195],102:[2,195],103:87,104:[2,195],105:[2,195],106:[2,195],109:88,110:[2,195],111:69,118:[2,195],126:[2,195],128:[2,195],129:[2,195],132:[1,78],133:[1,81],134:[2,195],135:[2,195],136:[2,195],137:[2,195]},{1:[2,196],6:[2,196],25:[2,196],26:[2,196],49:[2,196],54:[2,196],57:[2,196],73:[2,196],78:[2,196],86:[2,196],91:[2,196],93:[2,196],102:[2,196],103:87,104:[2,196],105:[2,196],106:[2,196],109:88,110:[2,196],111:69,118:[2,196],126:[2,196],128:[2,196],129:[2,196],132:[1,78],133:[2,196],134:[2,196],135:[2,196],136:[2,196],137:[2,196]},{1:[2,197],6:[2,197],25:[2,197],26:[2,197],49:[2,197],54:[2,197],57:[2,197],73:[2,197],78:[2,197],86:[2,197],91:[2,197],93:[2,197],102:[2,197],103:87,104:[2,197],105:[2,197],106:[2,197],109:88,110:[2,197],111:69,118:[2,197],126:[2,197],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[2,197],135:[2,197],136:[2,197],137:[2,197]},{1:[2,198],6:[2,198],25:[2,198],26:[2,198],49:[2,198],54:[2,198],57:[2,198],73:[2,198],78:[2,198],86:[2,198],91:[2,198],93:[2,198],102:[2,198],103:87,104:[2,198],105:[2,198],106:[2,198],109:88,110:[2,198],111:69,118:[2,198],126:[2,198],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[2,198],136:[2,198],137:[1,85]},{1:[2,199],6:[2,199],25:[2,199],26:[2,199],49:[2,199],54:[2,199],57:[2,199],73:[2,199],78:[2,199],86:[2,199],91:[2,199],93:[2,199],102:[2,199],103:87,104:[2,199],105:[2,199],106:[2,199],109:88,110:[2,199],111:69,118:[2,199],126:[2,199],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[2,199],137:[1,85]},{1:[2,200],6:[2,200],25:[2,200],26:[2,200],49:[2,200],54:[2,200],57:[2,200],73:[2,200],78:[2,200],86:[2,200],91:[2,200],93:[2,200],102:[2,200],103:87,104:[2,200],105:[2,200],106:[2,200],109:88,110:[2,200],111:69,118:[2,200],126:[2,200],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[2,200],136:[2,200],137:[2,200]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],49:[2,185],54:[2,185],57:[2,185],73:[2,185],78:[2,185],86:[2,185],91:[2,185],93:[2,185],102:[2,185],103:87,104:[1,65],105:[2,185],106:[1,66],109:88,110:[1,68],111:69,118:[2,185],126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],49:[2,184],54:[2,184],57:[2,184],73:[2,184],78:[2,184],86:[2,184],91:[2,184],93:[2,184],102:[2,184],103:87,104:[1,65],105:[2,184],106:[1,66],109:88,110:[1,68],111:69,118:[2,184],126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,104],6:[2,104],25:[2,104],26:[2,104],49:[2,104],54:[2,104],57:[2,104],66:[2,104],67:[2,104],68:[2,104],69:[2,104],71:[2,104],73:[2,104],74:[2,104],78:[2,104],84:[2,104],85:[2,104],86:[2,104],91:[2,104],93:[2,104],102:[2,104],104:[2,104],105:[2,104],106:[2,104],110:[2,104],118:[2,104],126:[2,104],128:[2,104],129:[2,104],132:[2,104],133:[2,104],134:[2,104],135:[2,104],136:[2,104],137:[2,104]},{1:[2,80],6:[2,80],25:[2,80],26:[2,80],40:[2,80],49:[2,80],54:[2,80],57:[2,80],66:[2,80],67:[2,80],68:[2,80],69:[2,80],71:[2,80],73:[2,80],74:[2,80],78:[2,80],80:[2,80],84:[2,80],85:[2,80],86:[2,80],91:[2,80],93:[2,80],102:[2,80],104:[2,80],105:[2,80],106:[2,80],110:[2,80],118:[2,80],126:[2,80],128:[2,80],129:[2,80],130:[2,80],131:[2,80],132:[2,80],133:[2,80],134:[2,80],135:[2,80],136:[2,80],137:[2,80],138:[2,80]},{1:[2,81],6:[2,81],25:[2,81],26:[2,81],40:[2,81],49:[2,81],54:[2,81],57:[2,81],66:[2,81],67:[2,81],68:[2,81],69:[2,81],71:[2,81],73:[2,81],74:[2,81],78:[2,81],80:[2,81],84:[2,81],85:[2,81],86:[2,81],91:[2,81],93:[2,81],102:[2,81],104:[2,81],105:[2,81],106:[2,81],110:[2,81],118:[2,81],126:[2,81],128:[2,81],129:[2,81],130:[2,81],131:[2,81],132:[2,81],133:[2,81],134:[2,81],135:[2,81],136:[2,81],137:[2,81],138:[2,81]},{1:[2,82],6:[2,82],25:[2,82],26:[2,82],40:[2,82],49:[2,82],54:[2,82],57:[2,82],66:[2,82],67:[2,82],68:[2,82],69:[2,82],71:[2,82],73:[2,82],74:[2,82],78:[2,82],80:[2,82],84:[2,82],85:[2,82],86:[2,82],91:[2,82],93:[2,82],102:[2,82],104:[2,82],105:[2,82],106:[2,82],110:[2,82],118:[2,82],126:[2,82],128:[2,82],129:[2,82],130:[2,82],131:[2,82],132:[2,82],133:[2,82],134:[2,82],135:[2,82],136:[2,82],137:[2,82],138:[2,82]},{1:[2,83],6:[2,83],25:[2,83],26:[2,83],40:[2,83],49:[2,83],54:[2,83],57:[2,83],66:[2,83],67:[2,83],68:[2,83],69:[2,83],71:[2,83],73:[2,83],74:[2,83],78:[2,83],80:[2,83],84:[2,83],85:[2,83],86:[2,83],91:[2,83],93:[2,83],102:[2,83],104:[2,83],105:[2,83],106:[2,83],110:[2,83],118:[2,83],126:[2,83],128:[2,83],129:[2,83],130:[2,83],131:[2,83],132:[2,83],133:[2,83],134:[2,83],135:[2,83],136:[2,83],137:[2,83],138:[2,83]},{73:[1,241]},{57:[1,194],73:[2,88],92:242,93:[1,193],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{73:[2,89]},{8:243,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,73:[2,123],76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{12:[2,117],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],73:[2,117],76:[2,117],79:[2,117],83:[2,117],88:[2,117],89:[2,117],90:[2,117],96:[2,117],100:[2,117],101:[2,117],104:[2,117],106:[2,117],108:[2,117],110:[2,117],119:[2,117],125:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117],131:[2,117]},{12:[2,118],28:[2,118],30:[2,118],31:[2,118],33:[2,118],34:[2,118],35:[2,118],36:[2,118],37:[2,118],38:[2,118],45:[2,118],46:[2,118],47:[2,118],51:[2,118],52:[2,118],73:[2,118],76:[2,118],79:[2,118],83:[2,118],88:[2,118],89:[2,118],90:[2,118],96:[2,118],100:[2,118],101:[2,118],104:[2,118],106:[2,118],108:[2,118],110:[2,118],119:[2,118],125:[2,118],127:[2,118],128:[2,118],129:[2,118],130:[2,118],131:[2,118]},{1:[2,87],6:[2,87],25:[2,87],26:[2,87],40:[2,87],49:[2,87],54:[2,87],57:[2,87],66:[2,87],67:[2,87],68:[2,87],69:[2,87],71:[2,87],73:[2,87],74:[2,87],78:[2,87],80:[2,87],84:[2,87],85:[2,87],86:[2,87],91:[2,87],93:[2,87],102:[2,87],104:[2,87],105:[2,87],106:[2,87],110:[2,87],118:[2,87],126:[2,87],128:[2,87],129:[2,87],130:[2,87],131:[2,87],132:[2,87],133:[2,87],134:[2,87],135:[2,87],136:[2,87],137:[2,87],138:[2,87]},{1:[2,105],6:[2,105],25:[2,105],26:[2,105],49:[2,105],54:[2,105],57:[2,105],66:[2,105],67:[2,105],68:[2,105],69:[2,105],71:[2,105],73:[2,105],74:[2,105],78:[2,105],84:[2,105],85:[2,105],86:[2,105],91:[2,105],93:[2,105],102:[2,105],104:[2,105],105:[2,105],106:[2,105],110:[2,105],118:[2,105],126:[2,105],128:[2,105],129:[2,105],132:[2,105],133:[2,105],134:[2,105],135:[2,105],136:[2,105],137:[2,105]},{1:[2,36],6:[2,36],25:[2,36],26:[2,36],49:[2,36],54:[2,36],57:[2,36],73:[2,36],78:[2,36],86:[2,36],91:[2,36],93:[2,36],102:[2,36],103:87,104:[2,36],105:[2,36],106:[2,36],109:88,110:[2,36],111:69,118:[2,36],126:[2,36],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:244,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:245,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,110],6:[2,110],25:[2,110],26:[2,110],49:[2,110],54:[2,110],57:[2,110],66:[2,110],67:[2,110],68:[2,110],69:[2,110],71:[2,110],73:[2,110],74:[2,110],78:[2,110],84:[2,110],85:[2,110],86:[2,110],91:[2,110],93:[2,110],102:[2,110],104:[2,110],105:[2,110],106:[2,110],110:[2,110],118:[2,110],126:[2,110],128:[2,110],129:[2,110],132:[2,110],133:[2,110],134:[2,110],135:[2,110],136:[2,110],137:[2,110]},{6:[2,53],25:[2,53],53:246,54:[1,229],86:[2,53]},{6:[2,129],25:[2,129],26:[2,129],54:[2,129],57:[1,247],86:[2,129],91:[2,129],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{50:248,51:[1,60],52:[1,61]},{6:[2,54],25:[2,54],26:[2,54],27:110,28:[1,73],44:111,55:249,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[1,250],25:[1,251]},{6:[2,61],25:[2,61],26:[2,61],49:[2,61],54:[2,61]},{8:252,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,201],6:[2,201],25:[2,201],26:[2,201],49:[2,201],54:[2,201],57:[2,201],73:[2,201],78:[2,201],86:[2,201],91:[2,201],93:[2,201],102:[2,201],103:87,104:[2,201],105:[2,201],106:[2,201],109:88,110:[2,201],111:69,118:[2,201],126:[2,201],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:253,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:254,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,204],6:[2,204],25:[2,204],26:[2,204],49:[2,204],54:[2,204],57:[2,204],73:[2,204],78:[2,204],86:[2,204],91:[2,204],93:[2,204],102:[2,204],103:87,104:[2,204],105:[2,204],106:[2,204],109:88,110:[2,204],111:69,118:[2,204],126:[2,204],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],49:[2,183],54:[2,183],57:[2,183],73:[2,183],78:[2,183],86:[2,183],91:[2,183],93:[2,183],102:[2,183],104:[2,183],105:[2,183],106:[2,183],110:[2,183],118:[2,183],126:[2,183],128:[2,183],129:[2,183],132:[2,183],133:[2,183],134:[2,183],135:[2,183],136:[2,183],137:[2,183]},{8:255,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],49:[2,134],54:[2,134],57:[2,134],73:[2,134],78:[2,134],86:[2,134],91:[2,134],93:[2,134],98:[1,256],102:[2,134],104:[2,134],105:[2,134],106:[2,134],110:[2,134],118:[2,134],126:[2,134],128:[2,134],129:[2,134],132:[2,134],133:[2,134],134:[2,134],135:[2,134],136:[2,134],137:[2,134]},{5:257,25:[1,5]},{27:258,28:[1,73],59:259,76:[1,70]},{120:260,122:219,123:[1,220]},{26:[1,261],121:[1,262],122:263,123:[1,220]},{26:[2,176],121:[2,176],123:[2,176]},{8:265,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],95:264,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,98],5:266,6:[2,98],25:[1,5],26:[2,98],49:[2,98],54:[2,98],57:[2,98],73:[2,98],78:[2,98],86:[2,98],91:[2,98],93:[2,98],102:[2,98],103:87,104:[1,65],105:[2,98],106:[1,66],109:88,110:[1,68],111:69,118:[2,98],126:[2,98],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,101],6:[2,101],25:[2,101],26:[2,101],49:[2,101],54:[2,101],57:[2,101],73:[2,101],78:[2,101],86:[2,101],91:[2,101],93:[2,101],102:[2,101],104:[2,101],105:[2,101],106:[2,101],110:[2,101],118:[2,101],126:[2,101],128:[2,101],129:[2,101],132:[2,101],133:[2,101],134:[2,101],135:[2,101],136:[2,101],137:[2,101]},{8:267,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],49:[2,140],54:[2,140],57:[2,140],66:[2,140],67:[2,140],68:[2,140],69:[2,140],71:[2,140],73:[2,140],74:[2,140],78:[2,140],84:[2,140],85:[2,140],86:[2,140],91:[2,140],93:[2,140],102:[2,140],104:[2,140],105:[2,140],106:[2,140],110:[2,140],118:[2,140],126:[2,140],128:[2,140],129:[2,140],132:[2,140],133:[2,140],134:[2,140],135:[2,140],136:[2,140],137:[2,140]},{6:[1,74],26:[1,268]},{8:269,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,67],12:[2,118],25:[2,67],28:[2,118],30:[2,118],31:[2,118],33:[2,118],34:[2,118],35:[2,118],36:[2,118],37:[2,118],38:[2,118],45:[2,118],46:[2,118],47:[2,118],51:[2,118],52:[2,118],54:[2,67],76:[2,118],79:[2,118],83:[2,118],88:[2,118],89:[2,118],90:[2,118],91:[2,67],96:[2,118],100:[2,118],101:[2,118],104:[2,118],106:[2,118],108:[2,118],110:[2,118],119:[2,118],125:[2,118],127:[2,118],128:[2,118],129:[2,118],130:[2,118],131:[2,118]},{6:[1,271],25:[1,272],91:[1,270]},{6:[2,54],8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[2,54],26:[2,54],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],86:[2,54],88:[1,58],89:[1,59],90:[1,57],91:[2,54],94:273,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],26:[2,53],53:274,54:[1,229]},{1:[2,180],6:[2,180],25:[2,180],26:[2,180],49:[2,180],54:[2,180],57:[2,180],73:[2,180],78:[2,180],86:[2,180],91:[2,180],93:[2,180],102:[2,180],104:[2,180],105:[2,180],106:[2,180],110:[2,180],118:[2,180],121:[2,180],126:[2,180],128:[2,180],129:[2,180],132:[2,180],133:[2,180],134:[2,180],135:[2,180],136:[2,180],137:[2,180]},{8:275,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:276,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{116:[2,158],117:[2,158]},{27:159,28:[1,73],44:160,58:161,59:162,76:[1,70],89:[1,114],90:[1,115],115:277},{1:[2,165],6:[2,165],25:[2,165],26:[2,165],49:[2,165],54:[2,165],57:[2,165],73:[2,165],78:[2,165],86:[2,165],91:[2,165],93:[2,165],102:[2,165],103:87,104:[2,165],105:[1,278],106:[2,165],109:88,110:[2,165],111:69,118:[1,279],126:[2,165],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],49:[2,166],54:[2,166],57:[2,166],73:[2,166],78:[2,166],86:[2,166],91:[2,166],93:[2,166],102:[2,166],103:87,104:[2,166],105:[1,280],106:[2,166],109:88,110:[2,166],111:69,118:[2,166],126:[2,166],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,282],25:[1,283],78:[1,281]},{6:[2,54],11:169,25:[2,54],26:[2,54],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:284,42:168,44:172,46:[1,46],78:[2,54],89:[1,114]},{8:285,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,286],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,86],6:[2,86],25:[2,86],26:[2,86],40:[2,86],49:[2,86],54:[2,86],57:[2,86],66:[2,86],67:[2,86],68:[2,86],69:[2,86],71:[2,86],73:[2,86],74:[2,86],78:[2,86],80:[2,86],84:[2,86],85:[2,86],86:[2,86],91:[2,86],93:[2,86],102:[2,86],104:[2,86],105:[2,86],106:[2,86],110:[2,86],118:[2,86],126:[2,86],128:[2,86],129:[2,86],130:[2,86],131:[2,86],132:[2,86],133:[2,86],134:[2,86],135:[2,86],136:[2,86],137:[2,86],138:[2,86]},{8:287,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,73:[2,121],76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{73:[2,122],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,37],6:[2,37],25:[2,37],26:[2,37],49:[2,37],54:[2,37],57:[2,37],73:[2,37],78:[2,37],86:[2,37],91:[2,37],93:[2,37],102:[2,37],103:87,104:[2,37],105:[2,37],106:[2,37],109:88,110:[2,37],111:69,118:[2,37],126:[2,37],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{26:[1,288],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,271],25:[1,272],86:[1,289]},{6:[2,67],25:[2,67],26:[2,67],54:[2,67],86:[2,67],91:[2,67]},{5:290,25:[1,5]},{6:[2,57],25:[2,57],26:[2,57],49:[2,57],54:[2,57]},{27:110,28:[1,73],44:111,55:291,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[2,55],25:[2,55],26:[2,55],27:110,28:[1,73],44:111,48:292,54:[2,55],55:108,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[2,62],25:[2,62],26:[2,62],49:[2,62],54:[2,62],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{26:[1,293],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,203],6:[2,203],25:[2,203],26:[2,203],49:[2,203],54:[2,203],57:[2,203],73:[2,203],78:[2,203],86:[2,203],91:[2,203],93:[2,203],102:[2,203],103:87,104:[2,203],105:[2,203],106:[2,203],109:88,110:[2,203],111:69,118:[2,203],126:[2,203],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{5:294,25:[1,5],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{5:295,25:[1,5]},{1:[2,135],6:[2,135],25:[2,135],26:[2,135],49:[2,135],54:[2,135],57:[2,135],73:[2,135],78:[2,135],86:[2,135],91:[2,135],93:[2,135],102:[2,135],104:[2,135],105:[2,135],106:[2,135],110:[2,135],118:[2,135],126:[2,135],128:[2,135],129:[2,135],132:[2,135],133:[2,135],134:[2,135],135:[2,135],136:[2,135],137:[2,135]},{5:296,25:[1,5]},{5:297,25:[1,5]},{26:[1,298],121:[1,299],122:263,123:[1,220]},{1:[2,174],6:[2,174],25:[2,174],26:[2,174],49:[2,174],54:[2,174],57:[2,174],73:[2,174],78:[2,174],86:[2,174],91:[2,174],93:[2,174],102:[2,174],104:[2,174],105:[2,174],106:[2,174],110:[2,174],118:[2,174],126:[2,174],128:[2,174],129:[2,174],132:[2,174],133:[2,174],134:[2,174],135:[2,174],136:[2,174],137:[2,174]},{5:300,25:[1,5]},{26:[2,177],121:[2,177],123:[2,177]},{5:301,25:[1,5],54:[1,302]},{25:[2,131],54:[2,131],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,99],6:[2,99],25:[2,99],26:[2,99],49:[2,99],54:[2,99],57:[2,99],73:[2,99],78:[2,99],86:[2,99],91:[2,99],93:[2,99],102:[2,99],104:[2,99],105:[2,99],106:[2,99],110:[2,99],118:[2,99],126:[2,99],128:[2,99],129:[2,99],132:[2,99],133:[2,99],134:[2,99],135:[2,99],136:[2,99],137:[2,99]},{1:[2,102],5:303,6:[2,102],25:[1,5],26:[2,102],49:[2,102],54:[2,102],57:[2,102],73:[2,102],78:[2,102],86:[2,102],91:[2,102],93:[2,102],102:[2,102],103:87,104:[1,65],105:[2,102],106:[1,66],109:88,110:[1,68],111:69,118:[2,102],126:[2,102],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{102:[1,304]},{91:[1,305],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,116],6:[2,116],25:[2,116],26:[2,116],40:[2,116],49:[2,116],54:[2,116],57:[2,116],66:[2,116],67:[2,116],68:[2,116],69:[2,116],71:[2,116],73:[2,116],74:[2,116],78:[2,116],84:[2,116],85:[2,116],86:[2,116],91:[2,116],93:[2,116],102:[2,116],104:[2,116],105:[2,116],106:[2,116],110:[2,116],116:[2,116],117:[2,116],118:[2,116],126:[2,116],128:[2,116],129:[2,116],132:[2,116],133:[2,116],134:[2,116],135:[2,116],136:[2,116],137:[2,116]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],94:306,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:307,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,125],25:[2,125],26:[2,125],54:[2,125],86:[2,125],91:[2,125]},{6:[1,271],25:[1,272],26:[1,308]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],49:[2,143],54:[2,143],57:[2,143],73:[2,143],78:[2,143],86:[2,143],91:[2,143],93:[2,143],102:[2,143],103:87,104:[1,65],105:[2,143],106:[1,66],109:88,110:[1,68],111:69,118:[2,143],126:[2,143],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],49:[2,145],54:[2,145],57:[2,145],73:[2,145],78:[2,145],86:[2,145],91:[2,145],93:[2,145],102:[2,145],103:87,104:[1,65],105:[2,145],106:[1,66],109:88,110:[1,68],111:69,118:[2,145],126:[2,145],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{116:[2,164],117:[2,164]},{8:309,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:310,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:311,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,90],6:[2,90],25:[2,90],26:[2,90],40:[2,90],49:[2,90],54:[2,90],57:[2,90],66:[2,90],67:[2,90],68:[2,90],69:[2,90],71:[2,90],73:[2,90],74:[2,90],78:[2,90],84:[2,90],85:[2,90],86:[2,90],91:[2,90],93:[2,90],102:[2,90],104:[2,90],105:[2,90],106:[2,90],110:[2,90],116:[2,90],117:[2,90],118:[2,90],126:[2,90],128:[2,90],129:[2,90],132:[2,90],133:[2,90],134:[2,90],135:[2,90],136:[2,90],137:[2,90]},{11:169,27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:312,42:168,44:172,46:[1,46],89:[1,114]},{6:[2,91],11:169,25:[2,91],26:[2,91],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:167,42:168,44:172,46:[1,46],54:[2,91],77:313,89:[1,114]},{6:[2,93],25:[2,93],26:[2,93],54:[2,93],78:[2,93]},{6:[2,40],25:[2,40],26:[2,40],54:[2,40],78:[2,40],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:314,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{73:[2,120],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,38],6:[2,38],25:[2,38],26:[2,38],49:[2,38],54:[2,38],57:[2,38],73:[2,38],78:[2,38],86:[2,38],91:[2,38],93:[2,38],102:[2,38],104:[2,38],105:[2,38],106:[2,38],110:[2,38],118:[2,38],126:[2,38],128:[2,38],129:[2,38],132:[2,38],133:[2,38],134:[2,38],135:[2,38],136:[2,38],137:[2,38]},{1:[2,111],6:[2,111],25:[2,111],26:[2,111],49:[2,111],54:[2,111],57:[2,111],66:[2,111],67:[2,111],68:[2,111],69:[2,111],71:[2,111],73:[2,111],74:[2,111],78:[2,111],84:[2,111],85:[2,111],86:[2,111],91:[2,111],93:[2,111],102:[2,111],104:[2,111],105:[2,111],106:[2,111],110:[2,111],118:[2,111],126:[2,111],128:[2,111],129:[2,111],132:[2,111],133:[2,111],134:[2,111],135:[2,111],136:[2,111],137:[2,111]},{1:[2,49],6:[2,49],25:[2,49],26:[2,49],49:[2,49],54:[2,49],57:[2,49],73:[2,49],78:[2,49],86:[2,49],91:[2,49],93:[2,49],102:[2,49],104:[2,49],105:[2,49],106:[2,49],110:[2,49],118:[2,49],126:[2,49],128:[2,49],129:[2,49],132:[2,49],133:[2,49],134:[2,49],135:[2,49],136:[2,49],137:[2,49]},{6:[2,58],25:[2,58],26:[2,58],49:[2,58],54:[2,58]},{6:[2,53],25:[2,53],26:[2,53],53:315,54:[1,204]},{1:[2,202],6:[2,202],25:[2,202],26:[2,202],49:[2,202],54:[2,202],57:[2,202],73:[2,202],78:[2,202],86:[2,202],91:[2,202],93:[2,202],102:[2,202],104:[2,202],105:[2,202],106:[2,202],110:[2,202],118:[2,202],126:[2,202],128:[2,202],129:[2,202],132:[2,202],133:[2,202],134:[2,202],135:[2,202],136:[2,202],137:[2,202]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],49:[2,181],54:[2,181],57:[2,181],73:[2,181],78:[2,181],86:[2,181],91:[2,181],93:[2,181],102:[2,181],104:[2,181],105:[2,181],106:[2,181],110:[2,181],118:[2,181],121:[2,181],126:[2,181],128:[2,181],129:[2,181],132:[2,181],133:[2,181],134:[2,181],135:[2,181],136:[2,181],137:[2,181]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],49:[2,136],54:[2,136],57:[2,136],73:[2,136],78:[2,136],86:[2,136],91:[2,136],93:[2,136],102:[2,136],104:[2,136],105:[2,136],106:[2,136],110:[2,136],118:[2,136],126:[2,136],128:[2,136],129:[2,136],132:[2,136],133:[2,136],134:[2,136],135:[2,136],136:[2,136],137:[2,136]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],49:[2,137],54:[2,137],57:[2,137],73:[2,137],78:[2,137],86:[2,137],91:[2,137],93:[2,137],98:[2,137],102:[2,137],104:[2,137],105:[2,137],106:[2,137],110:[2,137],118:[2,137],126:[2,137],128:[2,137],129:[2,137],132:[2,137],133:[2,137],134:[2,137],135:[2,137],136:[2,137],137:[2,137]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],49:[2,138],54:[2,138],57:[2,138],73:[2,138],78:[2,138],86:[2,138],91:[2,138],93:[2,138],98:[2,138],102:[2,138],104:[2,138],105:[2,138],106:[2,138],110:[2,138],118:[2,138],126:[2,138],128:[2,138],129:[2,138],132:[2,138],133:[2,138],134:[2,138],135:[2,138],136:[2,138],137:[2,138]},{1:[2,172],6:[2,172],25:[2,172],26:[2,172],49:[2,172],54:[2,172],57:[2,172],73:[2,172],78:[2,172],86:[2,172],91:[2,172],93:[2,172],102:[2,172],104:[2,172],105:[2,172],106:[2,172],110:[2,172],118:[2,172],126:[2,172],128:[2,172],129:[2,172],132:[2,172],133:[2,172],134:[2,172],135:[2,172],136:[2,172],137:[2,172]},{5:316,25:[1,5]},{26:[1,317]},{6:[1,318],26:[2,178],121:[2,178],123:[2,178]},{8:319,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,103],6:[2,103],25:[2,103],26:[2,103],49:[2,103],54:[2,103],57:[2,103],73:[2,103],78:[2,103],86:[2,103],91:[2,103],93:[2,103],102:[2,103],104:[2,103],105:[2,103],106:[2,103],110:[2,103],118:[2,103],126:[2,103],128:[2,103],129:[2,103],132:[2,103],133:[2,103],134:[2,103],135:[2,103],136:[2,103],137:[2,103]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],49:[2,141],54:[2,141],57:[2,141],66:[2,141],67:[2,141],68:[2,141],69:[2,141],71:[2,141],73:[2,141],74:[2,141],78:[2,141],84:[2,141],85:[2,141],86:[2,141],91:[2,141],93:[2,141],102:[2,141],104:[2,141],105:[2,141],106:[2,141],110:[2,141],118:[2,141],126:[2,141],128:[2,141],129:[2,141],132:[2,141],133:[2,141],134:[2,141],135:[2,141],136:[2,141],137:[2,141]},{1:[2,119],6:[2,119],25:[2,119],26:[2,119],49:[2,119],54:[2,119],57:[2,119],66:[2,119],67:[2,119],68:[2,119],69:[2,119],71:[2,119],73:[2,119],74:[2,119],78:[2,119],84:[2,119],85:[2,119],86:[2,119],91:[2,119],93:[2,119],102:[2,119],104:[2,119],105:[2,119],106:[2,119],110:[2,119],118:[2,119],126:[2,119],128:[2,119],129:[2,119],132:[2,119],133:[2,119],134:[2,119],135:[2,119],136:[2,119],137:[2,119]},{6:[2,126],25:[2,126],26:[2,126],54:[2,126],86:[2,126],91:[2,126]},{6:[2,53],25:[2,53],26:[2,53],53:320,54:[1,229]},{6:[2,127],25:[2,127],26:[2,127],54:[2,127],86:[2,127],91:[2,127]},{1:[2,167],6:[2,167],25:[2,167],26:[2,167],49:[2,167],54:[2,167],57:[2,167],73:[2,167],78:[2,167],86:[2,167],91:[2,167],93:[2,167],102:[2,167],103:87,104:[2,167],105:[2,167],106:[2,167],109:88,110:[2,167],111:69,118:[1,321],126:[2,167],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,169],6:[2,169],25:[2,169],26:[2,169],49:[2,169],54:[2,169],57:[2,169],73:[2,169],78:[2,169],86:[2,169],91:[2,169],93:[2,169],102:[2,169],103:87,104:[2,169],105:[1,322],106:[2,169],109:88,110:[2,169],111:69,118:[2,169],126:[2,169],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,168],6:[2,168],25:[2,168],26:[2,168],49:[2,168],54:[2,168],57:[2,168],73:[2,168],78:[2,168],86:[2,168],91:[2,168],93:[2,168],102:[2,168],103:87,104:[2,168],105:[2,168],106:[2,168],109:88,110:[2,168],111:69,118:[2,168],126:[2,168],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[2,94],25:[2,94],26:[2,94],54:[2,94],78:[2,94]},{6:[2,53],25:[2,53],26:[2,53],53:323,54:[1,239]},{26:[1,324],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,250],25:[1,251],26:[1,325]},{26:[1,326]},{1:[2,175],6:[2,175],25:[2,175],26:[2,175],49:[2,175],54:[2,175],57:[2,175],73:[2,175],78:[2,175],86:[2,175],91:[2,175],93:[2,175],102:[2,175],104:[2,175],105:[2,175],106:[2,175],110:[2,175],118:[2,175],126:[2,175],128:[2,175],129:[2,175],132:[2,175],133:[2,175],134:[2,175],135:[2,175],136:[2,175],137:[2,175]},{26:[2,179],121:[2,179],123:[2,179]},{25:[2,132],54:[2,132],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,271],25:[1,272],26:[1,327]},{8:328,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:329,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[1,282],25:[1,283],26:[1,330]},{6:[2,41],25:[2,41],26:[2,41],54:[2,41],78:[2,41]},{6:[2,59],25:[2,59],26:[2,59],49:[2,59],54:[2,59]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],49:[2,173],54:[2,173],57:[2,173],73:[2,173],78:[2,173],86:[2,173],91:[2,173],93:[2,173],102:[2,173],104:[2,173],105:[2,173],106:[2,173],110:[2,173],118:[2,173],126:[2,173],128:[2,173],129:[2,173],132:[2,173],133:[2,173],134:[2,173],135:[2,173],136:[2,173],137:[2,173]},{6:[2,128],25:[2,128],26:[2,128],54:[2,128],86:[2,128],91:[2,128]},{1:[2,170],6:[2,170],25:[2,170],26:[2,170],49:[2,170],54:[2,170],57:[2,170],73:[2,170],78:[2,170],86:[2,170],91:[2,170],93:[2,170],102:[2,170],103:87,104:[2,170],105:[2,170],106:[2,170],109:88,110:[2,170],111:69,118:[2,170],126:[2,170],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,171],6:[2,171],25:[2,171],26:[2,171],49:[2,171],54:[2,171],57:[2,171],73:[2,171],78:[2,171],86:[2,171],91:[2,171],93:[2,171],102:[2,171],103:87,104:[2,171],105:[2,171],106:[2,171],109:88,110:[2,171],111:69,118:[2,171],126:[2,171],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[2,95],25:[2,95],26:[2,95],54:[2,95],78:[2,95]}],
-defaultActions: {60:[2,51],61:[2,52],75:[2,3],94:[2,109],191:[2,89]},
-parseError: function parseError(str, hash) {
-    throw new Error(str);
-},
-parse: function parse(input) {
-    var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;
-    this.lexer.setInput(input);
-    this.lexer.yy = this.yy;
-    this.yy.lexer = this.lexer;
-    this.yy.parser = this;
-    if (typeof this.lexer.yylloc == "undefined")
-        this.lexer.yylloc = {};
-    var yyloc = this.lexer.yylloc;
-    lstack.push(yyloc);
-    var ranges = this.lexer.options && this.lexer.options.ranges;
-    if (typeof this.yy.parseError === "function")
-        this.parseError = this.yy.parseError;
-    function popStack(n) {
-        stack.length = stack.length - 2 * n;
-        vstack.length = vstack.length - n;
-        lstack.length = lstack.length - n;
-    }
-    function lex() {
-        var token;
-        token = self.lexer.lex() || 1;
-        if (typeof token !== "number") {
-            token = self.symbols_[token] || token;
-        }
-        return token;
-    }
-    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;
-    while (true) {
-        state = stack[stack.length - 1];
-        if (this.defaultActions[state]) {
-            action = this.defaultActions[state];
-        } else {
-            if (symbol === null || typeof symbol == "undefined") {
-                symbol = lex();
-            }
-            action = table[state] && table[state][symbol];
-        }
-        if (typeof action === "undefined" || !action.length || !action[0]) {
-            var errStr = "";
-            if (!recovering) {
-                expected = [];
-                for (p in table[state])
-                    if (this.terminals_[p] && p > 2) {
-                        expected.push("'" + this.terminals_[p] + "'");
-                    }
-                if (this.lexer.showPosition) {
-                    errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
-                } else {
-                    errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1?"end of input":"'" + (this.terminals_[symbol] || symbol) + "'");
-                }
-                this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});
-            }
-        }
-        if (action[0] instanceof Array && action.length > 1) {
-            throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
-        }
-        switch (action[0]) {
-        case 1:
-            stack.push(symbol);
-            vstack.push(this.lexer.yytext);
-            lstack.push(this.lexer.yylloc);
-            stack.push(action[1]);
-            symbol = null;
-            if (!preErrorSymbol) {
-                yyleng = this.lexer.yyleng;
-                yytext = this.lexer.yytext;
-                yylineno = this.lexer.yylineno;
-                yyloc = this.lexer.yylloc;
-                if (recovering > 0)
-                    recovering--;
-            } else {
-                symbol = preErrorSymbol;
-                preErrorSymbol = null;
-            }
-            break;
-        case 2:
-            len = this.productions_[action[1]][1];
-            yyval.$ = vstack[vstack.length - len];
-            yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column};
-            if (ranges) {
-                yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];
-            }
-            r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
-            if (typeof r !== "undefined") {
-                return r;
-            }
-            if (len) {
-                stack = stack.slice(0, -1 * len * 2);
-                vstack = vstack.slice(0, -1 * len);
-                lstack = lstack.slice(0, -1 * len);
-            }
-            stack.push(this.productions_[action[1]][0]);
-            vstack.push(yyval.$);
-            lstack.push(yyval._$);
-            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
-            stack.push(newState);
-            break;
-        case 3:
-            return true;
-        }
-    }
-    return true;
-}
-};
-undefined
-function Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser;
-return new Parser;
-})();
-if (typeof require !== 'undefined' && typeof exports !== 'undefined') {
-exports.parser = parser;
-exports.Parser = parser.Parser;
-exports.parse = function () { return parser.parse.apply(parser, arguments); };
-exports.main = function commonjsMain(args) {
-    if (!args[1]) {
-        console.log('Usage: '+args[0]+' FILE');
-        process.exit(1);
-    }
-    var source = require('fs').readFileSync(require('path').normalize(args[1]), "utf8");
-    return exports.parser.parse(source);
-};
-if (typeof module !== 'undefined' && require.main === module) {
-  exports.main(process.argv.slice(1));
-}
-}
\ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/repl.js b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/repl.js
deleted file mode 100755
index 37894a9b..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/repl.js
+++ /dev/null
@@ -1,104 +0,0 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var CoffeeScript, addMultilineHandler, merge, nodeREPL, replDefaults, vm;
-
-  vm = require('vm');
-
-  nodeREPL = require('repl');
-
-  CoffeeScript = require('./coffee-script');
-
-  merge = require('./helpers').merge;
-
-  replDefaults = {
-    prompt: 'coffee> ',
-    "eval": function(input, context, filename, cb) {
-      var js;
-      input = input.replace(/\uFF00/g, '\n');
-      input = input.replace(/(^|[\r\n]+)(\s*)##?(?:[^#\r\n][^\r\n]*|)($|[\r\n])/, '$1$2$3');
-      if (/^(\s*|\(\s*\))$/.test(input)) {
-        return cb(null);
-      }
-      try {
-        js = CoffeeScript.compile("_=(" + input + "\n)", {
-          filename: filename,
-          bare: true
-        });
-        return cb(null, vm.runInContext(js, context, filename));
-      } catch (err) {
-        return cb(err);
-      }
-    }
-  };
-
-  addMultilineHandler = function(repl) {
-    var inputStream, multiline, nodeLineListener, outputStream, rli;
-    rli = repl.rli, inputStream = repl.inputStream, outputStream = repl.outputStream;
-    multiline = {
-      enabled: false,
-      initialPrompt: repl.prompt.replace(/^[^> ]*/, function(x) {
-        return x.replace(/./g, '-');
-      }),
-      prompt: repl.prompt.replace(/^[^> ]*>?/, function(x) {
-        return x.replace(/./g, '.');
-      }),
-      buffer: ''
-    };
-    nodeLineListener = rli.listeners('line')[0];
-    rli.removeListener('line', nodeLineListener);
-    rli.on('line', function(cmd) {
-      if (multiline.enabled) {
-        multiline.buffer += "" + cmd + "\n";
-        rli.setPrompt(multiline.prompt);
-        rli.prompt(true);
-      } else {
-        nodeLineListener(cmd);
-      }
-    });
-    return inputStream.on('keypress', function(char, key) {
-      if (!(key && key.ctrl && !key.meta && !key.shift && key.name === 'v')) {
-        return;
-      }
-      if (multiline.enabled) {
-        if (!multiline.buffer.match(/\n/)) {
-          multiline.enabled = !multiline.enabled;
-          rli.setPrompt(repl.prompt);
-          rli.prompt(true);
-          return;
-        }
-        if ((rli.line != null) && !rli.line.match(/^\s*$/)) {
-          return;
-        }
-        multiline.enabled = !multiline.enabled;
-        rli.line = '';
-        rli.cursor = 0;
-        rli.output.cursorTo(0);
-        rli.output.clearLine(1);
-        multiline.buffer = multiline.buffer.replace(/\n/g, '\uFF00');
-        rli.emit('line', multiline.buffer);
-        multiline.buffer = '';
-      } else {
-        multiline.enabled = !multiline.enabled;
-        rli.setPrompt(multiline.initialPrompt);
-        rli.prompt(true);
-      }
-    });
-  };
-
-  module.exports = {
-    start: function(opts) {
-      var repl;
-      if (opts == null) {
-        opts = {};
-      }
-      opts = merge(replDefaults, opts);
-      repl = nodeREPL.start(opts);
-      repl.on('exit', function() {
-        return repl.outputStream.write('\n');
-      });
-      addMultilineHandler(repl);
-      return repl;
-    }
-  };
-
-}).call(this);
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/rewriter.js b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/rewriter.js
deleted file mode 100755
index b582bb29..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/rewriter.js
+++ /dev/null
@@ -1,478 +0,0 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var BALANCED_PAIRS, EXPRESSION_CLOSE, EXPRESSION_END, EXPRESSION_START, IMPLICIT_BLOCK, IMPLICIT_CALL, IMPLICIT_END, IMPLICIT_FUNC, IMPLICIT_UNSPACED_CALL, INVERSES, LINEBREAKS, SINGLE_CLOSERS, SINGLE_LINERS, generate, left, rite, _i, _len, _ref,
-    __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;
-
-  generate = function(tag, value) {
-    var tok;
-    tok = [tag, value];
-    tok.generated = true;
-    return tok;
-  };
-
-  exports.Rewriter = (function() {
-
-    function Rewriter() {}
-
-    Rewriter.prototype.rewrite = function(tokens) {
-      this.tokens = tokens;
-      this.removeLeadingNewlines();
-      this.removeMidExpressionNewlines();
-      this.closeOpenCalls();
-      this.closeOpenIndexes();
-      this.addImplicitIndentation();
-      this.tagPostfixConditionals();
-      this.addImplicitBracesAndParens();
-      this.addLocationDataToGeneratedTokens();
-      return this.tokens;
-    };
-
-    Rewriter.prototype.scanTokens = function(block) {
-      var i, token, tokens;
-      tokens = this.tokens;
-      i = 0;
-      while (token = tokens[i]) {
-        i += block.call(this, token, i, tokens);
-      }
-      return true;
-    };
-
-    Rewriter.prototype.detectEnd = function(i, condition, action) {
-      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 (_ref = token[0], __indexOf.call(EXPRESSION_START, _ref) >= 0) {
-          levels += 1;
-        } else if (_ref1 = token[0], __indexOf.call(EXPRESSION_END, _ref1) >= 0) {
-          levels -= 1;
-        }
-        i += 1;
-      }
-      return i - 1;
-    };
-
-    Rewriter.prototype.removeLeadingNewlines = function() {
-      var i, tag, _i, _len, _ref;
-      _ref = this.tokens;
-      for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
-        tag = _ref[i][0];
-        if (tag !== 'TERMINATOR') {
-          break;
-        }
-      }
-      if (i) {
-        return this.tokens.splice(0, i);
-      }
-    };
-
-    Rewriter.prototype.removeMidExpressionNewlines = function() {
-      return this.scanTokens(function(token, i, tokens) {
-        var _ref;
-        if (!(token[0] === 'TERMINATOR' && (_ref = this.tag(i + 1), __indexOf.call(EXPRESSION_CLOSE, _ref) >= 0))) {
-          return 1;
-        }
-        tokens.splice(i, 1);
-        return 0;
-      });
-    };
-
-    Rewriter.prototype.closeOpenCalls = function() {
-      var action, condition;
-      condition = function(token, i) {
-        var _ref;
-        return ((_ref = token[0]) === ')' || _ref === 'CALL_END') || token[0] === 'OUTDENT' && this.tag(i - 1) === ')';
-      };
-      action = function(token, i) {
-        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);
-        }
-        return 1;
-      });
-    };
-
-    Rewriter.prototype.closeOpenIndexes = function() {
-      var action, condition;
-      condition = function(token, i) {
-        var _ref;
-        return (_ref = token[0]) === ']' || _ref === 'INDEX_END';
-      };
-      action = function(token, i) {
-        return token[0] = 'INDEX_END';
-      };
-      return this.scanTokens(function(token, i) {
-        if (token[0] === 'INDEX_START') {
-          this.detectEnd(i + 1, condition, action);
-        }
-        return 1;
-      });
-    };
-
-    Rewriter.prototype.matchTags = function() {
-      var fuzz, i, j, pattern, _i, _ref, _ref1;
-      i = arguments[0], pattern = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
-      fuzz = 0;
-      for (j = _i = 0, _ref = pattern.length; 0 <= _ref ? _i < _ref : _i > _ref; j = 0 <= _ref ? ++_i : --_i) {
-        while (this.tag(i + j + fuzz) === 'HERECOMMENT') {
-          fuzz += 2;
-        }
-        if (pattern[j] == null) {
-          continue;
-        }
-        if (typeof pattern[j] === 'string') {
-          pattern[j] = [pattern[j]];
-        }
-        if (_ref1 = this.tag(i + j + fuzz), __indexOf.call(pattern[j], _ref1) < 0) {
-          return false;
-        }
-      }
-      return true;
-    };
-
-    Rewriter.prototype.looksObjectish = function(j) {
-      return this.matchTags(j, '@', null, ':') || this.matchTags(j, null, ':');
-    };
-
-    Rewriter.prototype.findTagsBackwards = function(i, tags) {
-      var backStack, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;
-      backStack = [];
-      while (i >= 0 && (backStack.length || (_ref2 = this.tag(i), __indexOf.call(tags, _ref2) < 0) && ((_ref3 = this.tag(i), __indexOf.call(EXPRESSION_START, _ref3) < 0) || this.tokens[i].generated) && (_ref4 = this.tag(i), __indexOf.call(LINEBREAKS, _ref4) < 0))) {
-        if (_ref = this.tag(i), __indexOf.call(EXPRESSION_END, _ref) >= 0) {
-          backStack.push(this.tag(i));
-        }
-        if ((_ref1 = this.tag(i), __indexOf.call(EXPRESSION_START, _ref1) >= 0) && backStack.length) {
-          backStack.pop();
-        }
-        i -= 1;
-      }
-      return _ref5 = this.tag(i), __indexOf.call(tags, _ref5) >= 0;
-    };
-
-    Rewriter.prototype.addImplicitBracesAndParens = function() {
-      var stack;
-      stack = [];
-      return this.scanTokens(function(token, i, tokens) {
-        var endImplicitCall, endImplicitObject, forward, inImplicit, inImplicitCall, inImplicitControl, inImplicitObject, nextTag, offset, prevTag, s, sameLine, stackIdx, stackTag, stackTop, startIdx, startImplicitCall, startImplicitObject, startsLine, tag, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;
-        tag = token[0];
-        prevTag = (i > 0 ? tokens[i - 1] : [])[0];
-        nextTag = (i < tokens.length - 1 ? tokens[i + 1] : [])[0];
-        stackTop = function() {
-          return stack[stack.length - 1];
-        };
-        startIdx = i;
-        forward = function(n) {
-          return i - startIdx + n;
-        };
-        inImplicit = function() {
-          var _ref, _ref1;
-          return (_ref = stackTop()) != null ? (_ref1 = _ref[2]) != null ? _ref1.ours : void 0 : void 0;
-        };
-        inImplicitCall = function() {
-          var _ref;
-          return inImplicit() && ((_ref = stackTop()) != null ? _ref[0] : void 0) === '(';
-        };
-        inImplicitObject = function() {
-          var _ref;
-          return inImplicit() && ((_ref = stackTop()) != null ? _ref[0] : void 0) === '{';
-        };
-        inImplicitControl = function() {
-          var _ref;
-          return inImplicit && ((_ref = stackTop()) != null ? _ref[0] : void 0) === 'CONTROL';
-        };
-        startImplicitCall = function(j) {
-          var idx;
-          idx = j != null ? j : i;
-          stack.push([
-            '(', idx, {
-              ours: true
-            }
-          ]);
-          tokens.splice(idx, 0, generate('CALL_START', '('));
-          if (j == null) {
-            return i += 1;
-          }
-        };
-        endImplicitCall = function() {
-          stack.pop();
-          tokens.splice(i, 0, generate('CALL_END', ')'));
-          return i += 1;
-        };
-        startImplicitObject = function(j, startsLine) {
-          var idx;
-          if (startsLine == null) {
-            startsLine = true;
-          }
-          idx = j != null ? j : i;
-          stack.push([
-            '{', idx, {
-              sameLine: true,
-              startsLine: startsLine,
-              ours: true
-            }
-          ]);
-          tokens.splice(idx, 0, generate('{', generate(new String('{'))));
-          if (j == null) {
-            return i += 1;
-          }
-        };
-        endImplicitObject = function(j) {
-          j = j != null ? j : i;
-          stack.pop();
-          tokens.splice(j, 0, generate('}', '}'));
-          return i += 1;
-        };
-        if (inImplicitCall() && (tag === 'IF' || tag === 'TRY' || tag === 'FINALLY' || tag === 'CATCH' || tag === 'CLASS' || tag === 'SWITCH')) {
-          stack.push([
-            'CONTROL', i, {
-              ours: true
-            }
-          ]);
-          return forward(1);
-        }
-        if (tag === 'INDENT' && inImplicit()) {
-          if (prevTag !== '=>' && prevTag !== '->' && prevTag !== '[' && prevTag !== '(' && prevTag !== ',' && prevTag !== '{' && prevTag !== 'TRY' && prevTag !== 'ELSE' && prevTag !== '=') {
-            while (inImplicitCall()) {
-              endImplicitCall();
-            }
-          }
-          if (inImplicitControl()) {
-            stack.pop();
-          }
-          stack.push([tag, i]);
-          return forward(1);
-        }
-        if (__indexOf.call(EXPRESSION_START, tag) >= 0) {
-          stack.push([tag, i]);
-          return forward(1);
-        }
-        if (__indexOf.call(EXPRESSION_END, tag) >= 0) {
-          while (inImplicit()) {
-            if (inImplicitCall()) {
-              endImplicitCall();
-            } else if (inImplicitObject()) {
-              endImplicitObject();
-            } else {
-              stack.pop();
-            }
-          }
-          stack.pop();
-        }
-        if ((__indexOf.call(IMPLICIT_FUNC, tag) >= 0 && token.spaced || tag === '?' && i > 0 && !tokens[i - 1].spaced) && (__indexOf.call(IMPLICIT_CALL, nextTag) >= 0 || __indexOf.call(IMPLICIT_UNSPACED_CALL, nextTag) >= 0 && !((_ref = tokens[i + 1]) != null ? _ref.spaced : void 0) && !((_ref1 = tokens[i + 1]) != null ? _ref1.newLine : void 0))) {
-          if (tag === '?') {
-            tag = token[0] = 'FUNC_EXIST';
-          }
-          startImplicitCall(i + 1);
-          return forward(2);
-        }
-        if (this.matchTags(i, IMPLICIT_FUNC, 'INDENT', null, ':') && !this.findTagsBackwards(i, ['CLASS', 'EXTENDS', 'IF', 'CATCH', 'SWITCH', 'LEADING_WHEN', 'FOR', 'WHILE', 'UNTIL'])) {
-          startImplicitCall(i + 1);
-          stack.push(['INDENT', i + 2]);
-          return forward(3);
-        }
-        if (tag === ':') {
-          if (this.tag(i - 2) === '@') {
-            s = i - 2;
-          } else {
-            s = i - 1;
-          }
-          while (this.tag(s - 2) === 'HERECOMMENT') {
-            s -= 2;
-          }
-          startsLine = s === 0 || (_ref2 = this.tag(s - 1), __indexOf.call(LINEBREAKS, _ref2) >= 0) || tokens[s - 1].newLine;
-          if (stackTop()) {
-            _ref3 = stackTop(), stackTag = _ref3[0], stackIdx = _ref3[1];
-            if ((stackTag === '{' || stackTag === 'INDENT' && this.tag(stackIdx - 1) === '{') && (startsLine || this.tag(s - 1) === ',' || this.tag(s - 1) === '{')) {
-              return forward(1);
-            }
-          }
-          startImplicitObject(s, !!startsLine);
-          return forward(2);
-        }
-        if (prevTag === 'OUTDENT' && inImplicitCall() && (tag === '.' || tag === '?.' || tag === '::' || tag === '?::')) {
-          endImplicitCall();
-          return forward(1);
-        }
-        if (inImplicitObject() && __indexOf.call(LINEBREAKS, tag) >= 0) {
-          stackTop()[2].sameLine = false;
-        }
-        if (__indexOf.call(IMPLICIT_END, tag) >= 0) {
-          while (inImplicit()) {
-            _ref4 = stackTop(), stackTag = _ref4[0], stackIdx = _ref4[1], (_ref5 = _ref4[2], sameLine = _ref5.sameLine, startsLine = _ref5.startsLine);
-            if (inImplicitCall() && prevTag !== ',') {
-              endImplicitCall();
-            } else if (inImplicitObject() && sameLine && !startsLine) {
-              endImplicitObject();
-            } else if (inImplicitObject() && tag === 'TERMINATOR' && prevTag !== ',' && !(startsLine && this.looksObjectish(i + 1))) {
-              endImplicitObject();
-            } else {
-              break;
-            }
-          }
-        }
-        if (tag === ',' && !this.looksObjectish(i + 1) && inImplicitObject() && (nextTag !== 'TERMINATOR' || !this.looksObjectish(i + 2))) {
-          offset = nextTag === 'OUTDENT' ? 1 : 0;
-          while (inImplicitObject()) {
-            endImplicitObject(i + offset);
-          }
-        }
-        return forward(1);
-      });
-    };
-
-    Rewriter.prototype.addLocationDataToGeneratedTokens = function() {
-      return this.scanTokens(function(token, i, tokens) {
-        var last_column, last_line, _ref, _ref1, _ref2;
-        if (token[2]) {
-          return 1;
-        }
-        if (!(token.generated || token.explicit)) {
-          return 1;
-        }
-        _ref2 = (_ref = (_ref1 = tokens[i - 1]) != null ? _ref1[2] : void 0) != null ? _ref : {
-          last_line: 0,
-          last_column: 0
-        }, last_line = _ref2.last_line, last_column = _ref2.last_column;
-        token[2] = {
-          first_line: last_line,
-          first_column: last_column,
-          last_line: last_line,
-          last_column: last_column
-        };
-        return 1;
-      });
-    };
-
-    Rewriter.prototype.addImplicitIndentation = function() {
-      var action, condition, indent, outdent, starter;
-      starter = indent = outdent = null;
-      condition = function(token, i) {
-        var _ref;
-        return token[1] !== ';' && (_ref = token[0], __indexOf.call(SINGLE_CLOSERS, _ref) >= 0) && !(token[0] === 'ELSE' && (starter !== 'IF' && starter !== 'THEN'));
-      };
-      action = function(token, i) {
-        return this.tokens.splice((this.tag(i - 1) === ',' ? i - 1 : i), 0, outdent);
-      };
-      return this.scanTokens(function(token, i, tokens) {
-        var tag, _ref, _ref1;
-        tag = token[0];
-        if (tag === 'TERMINATOR' && this.tag(i + 1) === 'THEN') {
-          tokens.splice(i, 1);
-          return 0;
-        }
-        if (tag === 'ELSE' && this.tag(i - 1) !== 'OUTDENT') {
-          tokens.splice.apply(tokens, [i, 0].concat(__slice.call(this.indentation(token))));
-          return 2;
-        }
-        if (tag === 'CATCH' && ((_ref = this.tag(i + 2)) === 'OUTDENT' || _ref === 'TERMINATOR' || _ref === 'FINALLY')) {
-          tokens.splice.apply(tokens, [i + 2, 0].concat(__slice.call(this.indentation(token))));
-          return 4;
-        }
-        if (__indexOf.call(SINGLE_LINERS, tag) >= 0 && this.tag(i + 1) !== 'INDENT' && !(tag === 'ELSE' && this.tag(i + 1) === 'IF')) {
-          starter = tag;
-          _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);
-          }
-          return 1;
-        }
-        return 1;
-      });
-    };
-
-    Rewriter.prototype.tagPostfixConditionals = function() {
-      var action, condition, original;
-      original = null;
-      condition = function(token, i) {
-        var _ref;
-        return (_ref = token[0]) === 'TERMINATOR' || _ref === 'INDENT';
-      };
-      action = function(token, i) {
-        if (token[0] !== 'INDENT' || (token.generated && !token.fromThen)) {
-          return original[0] = 'POST_' + original[0];
-        }
-      };
-      return this.scanTokens(function(token, i) {
-        if (token[0] !== 'IF') {
-          return 1;
-        }
-        original = token;
-        this.detectEnd(i + 1, condition, action);
-        return 1;
-      });
-    };
-
-    Rewriter.prototype.indentation = function(token, implicit) {
-      var indent, outdent;
-      if (implicit == null) {
-        implicit = false;
-      }
-      indent = ['INDENT', 2];
-      outdent = ['OUTDENT', 2];
-      if (implicit) {
-        indent.generated = outdent.generated = true;
-      }
-      if (!implicit) {
-        indent.explicit = outdent.explicit = true;
-      }
-      return [indent, outdent];
-    };
-
-    Rewriter.prototype.generate = generate;
-
-    Rewriter.prototype.tag = function(i) {
-      var _ref;
-      return (_ref = this.tokens[i]) != null ? _ref[0] : void 0;
-    };
-
-    return Rewriter;
-
-  })();
-
-  BALANCED_PAIRS = [['(', ')'], ['[', ']'], ['{', '}'], ['INDENT', 'OUTDENT'], ['CALL_START', 'CALL_END'], ['PARAM_START', 'PARAM_END'], ['INDEX_START', 'INDEX_END']];
-
-  exports.INVERSES = INVERSES = {};
-
-  EXPRESSION_START = [];
-
-  EXPRESSION_END = [];
-
-  for (_i = 0, _len = BALANCED_PAIRS.length; _i < _len; _i++) {
-    _ref = BALANCED_PAIRS[_i], left = _ref[0], rite = _ref[1];
-    EXPRESSION_START.push(INVERSES[rite] = left);
-    EXPRESSION_END.push(INVERSES[left] = rite);
-  }
-
-  EXPRESSION_CLOSE = ['CATCH', 'WHEN', 'ELSE', 'FINALLY'].concat(EXPRESSION_END);
-
-  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', 'NULL', 'UNDEFINED', 'UNARY', 'SUPER', '@', '->', '=>', '[', '(', '{', '--', '++'];
-
-  IMPLICIT_UNSPACED_CALL = ['+', '-'];
-
-  IMPLICIT_BLOCK = ['->', '=>', '{', '[', ','];
-
-  IMPLICIT_END = ['POST_IF', 'FOR', 'WHILE', 'UNTIL', 'WHEN', 'BY', 'LOOP', 'TERMINATOR'];
-
-  SINGLE_LINERS = ['ELSE', '->', '=>', 'TRY', 'FINALLY', 'THEN'];
-
-  SINGLE_CLOSERS = ['TERMINATOR', 'CATCH', 'FINALLY', 'ELSE', 'OUTDENT', 'LEADING_WHEN'];
-
-  LINEBREAKS = ['TERMINATOR', 'INDENT', 'OUTDENT'];
-
-}).call(this);
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/scope.js b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/scope.js
deleted file mode 100755
index 41281734..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/scope.js
+++ /dev/null
@@ -1,147 +0,0 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var Scope, extend, last, _ref;
-
-  _ref = require('./helpers'), extend = _ref.extend, last = _ref.last;
-
-  exports.Scope = Scope = (function() {
-
-    Scope.root = null;
-
-    function Scope(parent, expressions, method) {
-      this.parent = parent;
-      this.expressions = expressions;
-      this.method = method;
-      this.variables = [
-        {
-          name: 'arguments',
-          type: 'arguments'
-        }
-      ];
-      this.positions = {};
-      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 (Object.prototype.hasOwnProperty.call(this.positions, name)) {
-        return this.variables[this.positions[name]].type = type;
-      } else {
-        return this.positions[name] = this.variables.push({
-          name: name,
-          type: type
-        }) - 1;
-      }
-    };
-
-    Scope.prototype.namedMethod = function() {
-      var _ref1;
-      if (((_ref1 = this.method) != null ? _ref1.name : void 0) || !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;
-      }
-      return this.add(name, 'param');
-    };
-
-    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 - 1 : '');
-      } else {
-        return '_' + (index + parseInt(name, 36)).toString(36).replace(/\d/g, 'a');
-      }
-    };
-
-    Scope.prototype.type = function(name) {
-      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;
-      }
-      index = 0;
-      while (this.check((temp = this.temporary(name, index)))) {
-        index++;
-      }
-      if (reserve) {
-        this.add(temp, 'var', true);
-      }
-      return temp;
-    };
-
-    Scope.prototype.assign = function(name, value) {
-      this.add(name, {
-        value: value,
-        assigned: true
-      }, true);
-      return this.hasAssignments = true;
-    };
-
-    Scope.prototype.hasDeclarations = function() {
-      return !!this.declaredVariables().length;
-    };
-
-    Scope.prototype.declaredVariables = function() {
-      var realVars, tempVars, v, _i, _len, _ref1;
-      realVars = [];
-      tempVars = [];
-      _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);
-        }
-      }
-      return realVars.sort().concat(tempVars.sort());
-    };
-
-    Scope.prototype.assignedVariables = function() {
-      var v, _i, _len, _ref1, _results;
-      _ref1 = this.variables;
-      _results = [];
-      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;
-    };
-
-    return Scope;
-
-  })();
-
-}).call(this);
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/sourcemap.js b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/sourcemap.js
deleted file mode 100755
index 245da945..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/lib/coffee-script/sourcemap.js
+++ /dev/null
@@ -1,237 +0,0 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var BASE64_CHARS, LineMapping, MAX_BASE64_VALUE, VLQ_CONTINUATION_BIT, VLQ_SHIFT, VLQ_VALUE_MASK, decodeBase64Char, encodeBase64Char;
-
-  LineMapping = (function() {
-
-    function LineMapping(generatedLine) {
-      this.generatedLine = generatedLine;
-      this.columnMap = {};
-      this.columnMappings = [];
-    }
-
-    LineMapping.prototype.addMapping = function(generatedColumn, _arg, options) {
-      var sourceColumn, sourceLine;
-      sourceLine = _arg[0], sourceColumn = _arg[1];
-      if (options == null) {
-        options = {};
-      }
-      if (this.columnMap[generatedColumn] && options.noReplace) {
-        return;
-      }
-      this.columnMap[generatedColumn] = {
-        generatedLine: this.generatedLine,
-        generatedColumn: generatedColumn,
-        sourceLine: sourceLine,
-        sourceColumn: sourceColumn
-      };
-      this.columnMappings.push(this.columnMap[generatedColumn]);
-      return this.columnMappings.sort(function(a, b) {
-        return a.generatedColumn - b.generatedColumn;
-      });
-    };
-
-    LineMapping.prototype.getSourcePosition = function(generatedColumn) {
-      var answer, columnMapping, lastColumnMapping, _i, _len, _ref;
-      answer = null;
-      lastColumnMapping = null;
-      _ref = this.columnMappings;
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        columnMapping = _ref[_i];
-        if (columnMapping.generatedColumn > generatedColumn) {
-          break;
-        } else {
-          lastColumnMapping = columnMapping;
-        }
-      }
-      if (lastColumnMapping) {
-        return answer = [lastColumnMapping.sourceLine, lastColumnMapping.sourceColumn];
-      }
-    };
-
-    return LineMapping;
-
-  })();
-
-  exports.SourceMap = (function() {
-
-    function SourceMap() {
-      this.generatedLines = [];
-    }
-
-    SourceMap.prototype.addMapping = function(sourceLocation, generatedLocation, options) {
-      var generatedColumn, generatedLine, lineMapping;
-      if (options == null) {
-        options = {};
-      }
-      generatedLine = generatedLocation[0], generatedColumn = generatedLocation[1];
-      lineMapping = this.generatedLines[generatedLine];
-      if (!lineMapping) {
-        lineMapping = this.generatedLines[generatedLine] = new LineMapping(generatedLine);
-      }
-      return lineMapping.addMapping(generatedColumn, sourceLocation, options);
-    };
-
-    SourceMap.prototype.getSourcePosition = function(_arg) {
-      var answer, generatedColumn, generatedLine, lineMapping;
-      generatedLine = _arg[0], generatedColumn = _arg[1];
-      answer = null;
-      lineMapping = this.generatedLines[generatedLine];
-      if (!lineMapping) {
-
-      } else {
-        answer = lineMapping.getSourcePosition(generatedColumn);
-      }
-      return answer;
-    };
-
-    SourceMap.prototype.forEachMapping = function(fn) {
-      var columnMapping, generatedLineNumber, lineMapping, _i, _len, _ref, _results;
-      _ref = this.generatedLines;
-      _results = [];
-      for (generatedLineNumber = _i = 0, _len = _ref.length; _i < _len; generatedLineNumber = ++_i) {
-        lineMapping = _ref[generatedLineNumber];
-        if (lineMapping) {
-          _results.push((function() {
-            var _j, _len1, _ref1, _results1;
-            _ref1 = lineMapping.columnMappings;
-            _results1 = [];
-            for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
-              columnMapping = _ref1[_j];
-              _results1.push(fn(columnMapping));
-            }
-            return _results1;
-          })());
-        } else {
-          _results.push(void 0);
-        }
-      }
-      return _results;
-    };
-
-    return SourceMap;
-
-  })();
-
-  exports.generateV3SourceMap = function(sourceMap, sourceFile, generatedFile) {
-    var answer, lastGeneratedColumnWritten, lastSourceColumnWritten, lastSourceLineWritten, mappings, needComma, writingGeneratedLine;
-    if (sourceFile == null) {
-      sourceFile = null;
-    }
-    if (generatedFile == null) {
-      generatedFile = null;
-    }
-    writingGeneratedLine = 0;
-    lastGeneratedColumnWritten = 0;
-    lastSourceLineWritten = 0;
-    lastSourceColumnWritten = 0;
-    needComma = false;
-    mappings = "";
-    sourceMap.forEachMapping(function(mapping) {
-      while (writingGeneratedLine < mapping.generatedLine) {
-        lastGeneratedColumnWritten = 0;
-        needComma = false;
-        mappings += ";";
-        writingGeneratedLine++;
-      }
-      if (needComma) {
-        mappings += ",";
-        needComma = false;
-      }
-      mappings += exports.vlqEncodeValue(mapping.generatedColumn - lastGeneratedColumnWritten);
-      lastGeneratedColumnWritten = mapping.generatedColumn;
-      mappings += exports.vlqEncodeValue(0);
-      mappings += exports.vlqEncodeValue(mapping.sourceLine - lastSourceLineWritten);
-      lastSourceLineWritten = mapping.sourceLine;
-      mappings += exports.vlqEncodeValue(mapping.sourceColumn - lastSourceColumnWritten);
-      lastSourceColumnWritten = mapping.sourceColumn;
-      return needComma = true;
-    });
-    answer = {
-      version: 3,
-      file: generatedFile,
-      sourceRoot: "",
-      sources: sourceFile ? [sourceFile] : [],
-      names: [],
-      mappings: mappings
-    };
-    return JSON.stringify(answer, null, 2);
-  };
-
-  exports.loadV3SourceMap = function(sourceMap) {
-    return todo();
-  };
-
-  BASE64_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
-
-  MAX_BASE64_VALUE = BASE64_CHARS.length - 1;
-
-  encodeBase64Char = function(value) {
-    if (value > MAX_BASE64_VALUE) {
-      throw new Error("Cannot encode value " + value + " > " + MAX_BASE64_VALUE);
-    } else if (value < 0) {
-      throw new Error("Cannot encode value " + value + " < 0");
-    }
-    return BASE64_CHARS[value];
-  };
-
-  decodeBase64Char = function(char) {
-    var value;
-    value = BASE64_CHARS.indexOf(char);
-    if (value === -1) {
-      throw new Error("Invalid Base 64 character: " + char);
-    }
-    return value;
-  };
-
-  VLQ_SHIFT = 5;
-
-  VLQ_CONTINUATION_BIT = 1 << VLQ_SHIFT;
-
-  VLQ_VALUE_MASK = VLQ_CONTINUATION_BIT - 1;
-
-  exports.vlqEncodeValue = function(value) {
-    var answer, nextVlqChunk, signBit, valueToEncode;
-    signBit = value < 0 ? 1 : 0;
-    valueToEncode = (Math.abs(value) << 1) + signBit;
-    answer = "";
-    while (valueToEncode || !answer) {
-      nextVlqChunk = valueToEncode & VLQ_VALUE_MASK;
-      valueToEncode = valueToEncode >> VLQ_SHIFT;
-      if (valueToEncode) {
-        nextVlqChunk |= VLQ_CONTINUATION_BIT;
-      }
-      answer += encodeBase64Char(nextVlqChunk);
-    }
-    return answer;
-  };
-
-  exports.vlqDecodeValue = function(str, offset) {
-    var consumed, continuationShift, done, nextChunkValue, nextVlqChunk, position, signBit, value;
-    if (offset == null) {
-      offset = 0;
-    }
-    position = offset;
-    done = false;
-    value = 0;
-    continuationShift = 0;
-    while (!done) {
-      nextVlqChunk = decodeBase64Char(str[position]);
-      position += 1;
-      nextChunkValue = nextVlqChunk & VLQ_VALUE_MASK;
-      value += nextChunkValue << continuationShift;
-      if (!(nextVlqChunk & VLQ_CONTINUATION_BIT)) {
-        done = true;
-      }
-      continuationShift += VLQ_SHIFT;
-    }
-    consumed = position - offset;
-    signBit = value & 1;
-    value = value >> 1;
-    if (signBit) {
-      value = -value;
-    }
-    return [value, consumed];
-  };
-
-}).call(this);
diff --git a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/package.json b/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/package.json
deleted file mode 100755
index e1aea0c9..00000000
--- a/wqflask/wqflask/static/new/javascript/node_modules/coffee-script/package.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
-  "name": "coffee-script",
-  "description": "Unfancy JavaScript",
-  "keywords": [
-    "javascript",
-    "language",
-    "coffeescript",
-    "compiler"
-  ],
-  "author": {
-    "name": "Jeremy Ashkenas"
-  },
-  "version": "1.6.1",
-  "licenses": [
-    {
-      "type": "MIT",
-      "url": "https://raw.github.com/jashkenas/coffee-script/master/LICENSE"
-    }
-  ],
-  "engines": {
-    "node": ">=0.4.0"
-  },
-  "directories": {
-    "lib": "./lib/coffee-script"
-  },
-  "main": "./lib/coffee-script/coffee-script",
-  "bin": {
-    "coffee": "./bin/coffee",
-    "cake": "./bin/cake"
-  },
-  "scripts": {
-    "test": "node ./bin/cake test"
-  },
-  "homepage": "http://coffeescript.org",
-  "bugs": {
-    "name": "https://github.com/jashkenas/coffee-script/issues"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/jashkenas/coffee-script.git"
-  },
-  "devDependencies": {
-    "uglify-js": "~2.2",
-    "jison": ">=0.2.0"
-  },
-  "_id": "coffee-script@1.6.1",
-  "dependencies": {},
-  "optionalDependencies": {},
-  "_engineSupported": true,
-  "_npmVersion": "1.1.4",
-  "_nodeVersion": "v0.6.12",
-  "_defaultsLoaded": true,
-  "dist": {
-    "shasum": "05d88f953bcd2e72d53bff583c9318a9572a386d"
-  },
-  "_from": "coffee-script"
-}
diff --git a/wqflask/wqflask/static/new/javascript/password_strength.js b/wqflask/wqflask/static/new/javascript/password_strength.js
index 166e1125..a6d90861 100755
--- a/wqflask/wqflask/static/new/javascript/password_strength.js
+++ b/wqflask/wqflask/static/new/javascript/password_strength.js
@@ -1,42 +1,38 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-
-  $(function() {
-    var word_score;
-    $("#password").keyup(function() {
-      var crack_time, display, passtext, result, word;
-      passtext = $(this).val();
-      result = zxcvbn(passtext);
-      if (passtext.length < 6) {
-        $("#password_strength").html('');
-        return $("#password_alert").fadeOut();
-      } else {
-        word = word_score(result.score);
-        crack_time = result.crack_time_display;
-        if (crack_time === "instant") {
-          crack_time = "a second";
-        }
-        display = "This is " + word + " password. It can be cracked in " + crack_time + ".";
-        $("#password_strength").html(display);
-        return $("#password_alert").fadeIn();
+// Generated by CoffeeScript 1.7.1
+$(function() {
+  var word_score;
+  $("#password").keyup(function() {
+    var crack_time, display, passtext, result, word;
+    passtext = $(this).val();
+    result = zxcvbn(passtext);
+    if (passtext.length < 6) {
+      $("#password_strength").html('');
+      return $("#password_alert").fadeOut();
+    } else {
+      word = word_score(result.score);
+      crack_time = result.crack_time_display;
+      if (crack_time === "instant") {
+        crack_time = "a second";
       }
-    });
-    return word_score = function(num_score) {
-      var mapping, result;
-      num_score = parseInt(num_score);
-      console.log("num_score is:", num_score);
-      mapping = {
-        0: "a <strong>terrible</strong>",
-        1: "a <strong>bad</strong>",
-        2: "a <strong>mediocre</strong>",
-        3: "a <strong>good</strong>",
-        4: "an <strong>excellent</strong>"
-      };
-      console.log("mapping is:", mapping);
-      result = mapping[num_score];
-      console.log("result is:", result);
-      return result;
-    };
+      display = "This is " + word + " password. It can be cracked in " + crack_time + ".";
+      $("#password_strength").html(display);
+      return $("#password_alert").fadeIn();
+    }
   });
-
-}).call(this);
+  return word_score = function(num_score) {
+    var mapping, result;
+    num_score = parseInt(num_score);
+    console.log("num_score is:", num_score);
+    mapping = {
+      0: "a <strong>terrible</strong>",
+      1: "a <strong>bad</strong>",
+      2: "a <strong>mediocre</strong>",
+      3: "a <strong>good</strong>",
+      4: "an <strong>excellent</strong>"
+    };
+    console.log("mapping is:", mapping);
+    result = mapping[num_score];
+    console.log("result is:", result);
+    return result;
+  };
+});
diff --git a/wqflask/wqflask/static/new/javascript/scatterplot.js b/wqflask/wqflask/static/new/javascript/scatterplot.js
index ac32301b..96607cbb 100644
--- a/wqflask/wqflask/static/new/javascript/scatterplot.js
+++ b/wqflask/wqflask/static/new/javascript/scatterplot.js
@@ -1,413 +1,410 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var root, scatterplot;
+// Generated by CoffeeScript 1.7.1
+var root, scatterplot;
 
-  root = typeof exports !== "undefined" && exports !== null ? exports : this;
+root = typeof exports !== "undefined" && exports !== null ? exports : this;
 
-  scatterplot = function() {
-    var axispos, chart, dataByInd, height, margin, nxticks, nyticks, pointcolor, pointsSelect, pointsize, pointstroke, rectcolor, rotate_ylab, title, titlepos, width, xNA, xlab, xlim, xscale, xticks, xvar, yNA, ylab, ylim, yscale, yticks, yvar;
-    width = 800;
-    height = 600;
-    margin = {
-      left: 60,
-      top: 40,
-      right: 40,
-      bottom: 40,
-      inner: 5
-    };
-    axispos = {
-      xtitle: 25,
-      ytitle: 45,
-      xlabel: 5,
-      ylabel: 5
-    };
-    titlepos = 20;
-    xNA = {
-      handle: true,
-      force: false,
-      width: 15,
-      gap: 10
-    };
-    yNA = {
-      handle: true,
-      force: false,
-      width: 15,
-      gap: 10
-    };
-    xlim = null;
-    ylim = null;
-    nxticks = 5;
-    xticks = null;
-    nyticks = 5;
-    yticks = null;
-    rectcolor = d3.rgb(230, 230, 230);
-    pointcolor = null;
-    pointstroke = "black";
-    pointsize = 3;
-    title = "Correlation Scatterplot";
-    xlab = "X";
-    ylab = "Y";
-    rotate_ylab = null;
-    yscale = d3.scale.linear();
-    xscale = d3.scale.linear();
-    xvar = 0;
-    yvar = 1;
-    pointsSelect = null;
-    dataByInd = false;
-    chart = function(selection) {
-      return selection.each(function(data) {
-        var g, gEnter, group, i, indID, indtip, na_value, ngroup, panelheight, paneloffset, panelwidth, points, svg, titlegrp, x, xaxis, xrange, xs, y, yaxis, yrange, ys, _i, _ref, _ref1, _ref2, _results;
-        if (dataByInd) {
-          x = data.data.map(function(d) {
-            return d[xvar];
-          });
-          y = data.data.map(function(d) {
-            return d[yvar];
-          });
-        } else {
-          x = data.data[xvar];
-          y = data.data[yvar];
-        }
-        console.log("x:", x);
-        console.log("y:", y);
-        indID = (_ref = data != null ? data.indID : void 0) != null ? _ref : null;
-        indID = indID != null ? indID : (function() {
-          _results = [];
-          for (var _i = 1, _ref1 = x.length; 1 <= _ref1 ? _i <= _ref1 : _i >= _ref1; 1 <= _ref1 ? _i++ : _i--){ _results.push(_i); }
-          return _results;
-        }).apply(this);
-        console.log("indID:", indID);
-        group = (_ref2 = data != null ? data.group : void 0) != null ? _ref2 : (function() {
-          var _j, _len, _results1;
-          _results1 = [];
-          for (_j = 0, _len = x.length; _j < _len; _j++) {
-            i = x[_j];
-            _results1.push(1);
-          }
-          return _results1;
-        })();
-        ngroup = d3.max(group);
-        group = (function() {
-          var _j, _len, _results1;
-          _results1 = [];
-          for (_j = 0, _len = group.length; _j < _len; _j++) {
-            g = group[_j];
-            _results1.push(g - 1);
-          }
-          return _results1;
-        })();
-        pointcolor = pointcolor != null ? pointcolor : selectGroupColors(ngroup, "dark");
-        pointcolor = expand2vector(pointcolor, ngroup);
-        if (x.every(function(v) {
-          return (v != null) && !xNA.force;
-        })) {
-          xNA.handle = false;
-        }
-        if (y.every(function(v) {
-          return (v != null) && !yNA.force;
-        })) {
-          yNA.handle = false;
-        }
-        if (xNA.handle) {
-          paneloffset = xNA.width + xNA.gap;
-          panelwidth = width - paneloffset;
-        } else {
-          paneloffset = 0;
-          panelwidth = width;
-        }
-        if (yNA.handle) {
-          panelheight = height - (yNA.width + yNA.gap);
-        } else {
-          panelheight = height;
-        }
-        xlim = xlim != null ? xlim : d3.extent(x);
-        ylim = ylim != null ? ylim : d3.extent(y);
-        na_value = d3.min(x.concat(y)) - 100;
-        svg = d3.select(this).selectAll("svg").data([data]);
-        gEnter = svg.enter().append("svg").append("g");
-        svg.attr("width", width + margin.left + margin.right).attr("height", height + margin.top + margin.bottom);
-        g = svg.select("g");
-        g.append("rect").attr("x", paneloffset + margin.left).attr("y", margin.top).attr("height", panelheight).attr("width", panelwidth).attr("fill", rectcolor).attr("stroke", "none");
-        if (xNA.handle) {
-          g.append("rect").attr("x", margin.left).attr("y", margin.top).attr("height", panelheight).attr("width", xNA.width).attr("fill", rectcolor).attr("stroke", "none");
-        }
-        if (xNA.handle && yNA.handle) {
-          g.append("rect").attr("x", margin.left).attr("y", margin.top + height - yNA.width).attr("height", yNA.width).attr("width", xNA.width).attr("fill", rectcolor).attr("stroke", "none");
-        }
-        if (yNA.handle) {
-          g.append("rect").attr("x", margin.left + paneloffset).attr("y", margin.top + height - yNA.width).attr("height", yNA.width).attr("width", panelwidth).attr("fill", rectcolor).attr("stroke", "none");
-        }
-        xrange = [margin.left + paneloffset + margin.inner, margin.left + paneloffset + panelwidth - margin.inner];
-        yrange = [margin.top + panelheight - margin.inner, margin.top + margin.inner];
-        xscale.domain(xlim).range(xrange);
-        yscale.domain(ylim).range(yrange);
-        xs = d3.scale.linear().domain(xlim).range(xrange);
-        ys = d3.scale.linear().domain(ylim).range(yrange);
-        if (xNA.handle) {
-          xscale.domain([na_value].concat(xlim)).range([margin.left + xNA.width / 2].concat(xrange));
-          x = x.map(function(e) {
-            if (e != null) {
-              return e;
-            } else {
-              return na_value;
-            }
-          });
-        }
-        if (yNA.handle) {
-          yscale.domain([na_value].concat(ylim)).range([height + margin.top - yNA.width / 2].concat(yrange));
-          y = y.map(function(e) {
-            if (e != null) {
-              return e;
-            } else {
-              return na_value;
-            }
-          });
-        }
-        yticks = yticks != null ? yticks : ys.ticks(nyticks);
-        xticks = xticks != null ? xticks : xs.ticks(nxticks);
-        titlegrp = g.append("g").attr("class", "title").append("text").attr("x", margin.left + width / 2).attr("y", margin.top - titlepos).text(title);
-        xaxis = g.append("g").attr("class", "x axis");
-        xaxis.selectAll("empty").data(xticks).enter().append("line").attr("x1", function(d) {
-          return xscale(d);
-        }).attr("x2", function(d) {
-          return xscale(d);
-        }).attr("y1", margin.top).attr("y2", margin.top + height).attr("fill", "none").attr("stroke", "white").attr("stroke-width", 1).style("pointer-events", "none");
-        xaxis.selectAll("empty").data(xticks).enter().append("text").attr("x", function(d) {
-          return xscale(d);
-        }).attr("y", margin.top + height + axispos.xlabel).text(function(d) {
-          return formatAxis(xticks)(d);
+scatterplot = function() {
+  var axispos, chart, dataByInd, height, margin, nxticks, nyticks, pointcolor, pointsSelect, pointsize, pointstroke, rectcolor, rotate_ylab, title, titlepos, width, xNA, xlab, xlim, xscale, xticks, xvar, yNA, ylab, ylim, yscale, yticks, yvar;
+  width = 800;
+  height = 600;
+  margin = {
+    left: 60,
+    top: 40,
+    right: 40,
+    bottom: 40,
+    inner: 5
+  };
+  axispos = {
+    xtitle: 25,
+    ytitle: 45,
+    xlabel: 5,
+    ylabel: 5
+  };
+  titlepos = 20;
+  xNA = {
+    handle: true,
+    force: false,
+    width: 15,
+    gap: 10
+  };
+  yNA = {
+    handle: true,
+    force: false,
+    width: 15,
+    gap: 10
+  };
+  xlim = null;
+  ylim = null;
+  nxticks = 5;
+  xticks = null;
+  nyticks = 5;
+  yticks = null;
+  rectcolor = d3.rgb(230, 230, 230);
+  pointcolor = null;
+  pointstroke = "black";
+  pointsize = 3;
+  title = "Correlation Scatterplot";
+  xlab = "X";
+  ylab = "Y";
+  rotate_ylab = null;
+  yscale = d3.scale.linear();
+  xscale = d3.scale.linear();
+  xvar = 0;
+  yvar = 1;
+  pointsSelect = null;
+  dataByInd = false;
+  chart = function(selection) {
+    return selection.each(function(data) {
+      var g, gEnter, group, i, indID, indtip, na_value, ngroup, panelheight, paneloffset, panelwidth, points, svg, titlegrp, x, xaxis, xrange, xs, y, yaxis, yrange, ys, _i, _ref, _ref1, _ref2, _results;
+      if (dataByInd) {
+        x = data.data.map(function(d) {
+          return d[xvar];
         });
-        xaxis.append("text").attr("class", "title").attr("x", margin.left + width / 2).attr("y", margin.top + height + axispos.xtitle).text(xlab);
-        if (xNA.handle) {
-          xaxis.append("text").attr("x", margin.left + xNA.width / 2).attr("y", margin.top + height + axispos.xlabel).text("N/A");
-        }
-        rotate_ylab = rotate_ylab != null ? rotate_ylab : ylab.length > 1;
-        yaxis = g.append("g").attr("class", "y axis");
-        yaxis.selectAll("empty").data(yticks).enter().append("line").attr("y1", function(d) {
-          return yscale(d);
-        }).attr("y2", function(d) {
-          return yscale(d);
-        }).attr("x1", margin.left).attr("x2", margin.left + width).attr("fill", "none").attr("stroke", "white").attr("stroke-width", 1).style("pointer-events", "none");
-        yaxis.selectAll("empty").data(yticks).enter().append("text").attr("y", function(d) {
-          return yscale(d);
-        }).attr("x", margin.left - axispos.ylabel).text(function(d) {
-          return formatAxis(yticks)(d);
+        y = data.data.map(function(d) {
+          return d[yvar];
         });
-        yaxis.append("text").attr("class", "title").attr("y", margin.top + height / 2).attr("x", margin.left - axispos.ytitle).text(ylab).attr("transform", rotate_ylab ? "rotate(270," + (margin.left - axispos.ytitle) + "," + (margin.top + height / 2) + ")" : "");
-        if (yNA.handle) {
-          yaxis.append("text").attr("x", margin.left - axispos.ylabel).attr("y", margin.top + height - yNA.width / 2).text("N/A");
-        }
-        indtip = d3.tip().attr('class', 'd3-tip').html(function(d, i) {
-          return indID[i];
-        }).direction('e').offset([0, 10]);
-        svg.call(indtip);
-        points = g.append("g").attr("id", "points");
-        pointsSelect = points.selectAll("empty").data(d3.range(x.length)).enter().append("circle").attr("cx", function(d, i) {
-          return xscale(x[i]);
-        }).attr("cy", function(d, i) {
-          return yscale(y[i]);
-        }).attr("class", function(d, i) {
-          return "pt" + i;
-        }).attr("r", pointsize).attr("fill", function(d, i) {
-          return pointcolor[group[i]];
-        }).attr("stroke", pointstroke).attr("stroke-width", "1").attr("opacity", function(d, i) {
-          if (((x[i] != null) || xNA.handle) && ((y[i] != null) || yNA.handle)) {
-            return 1;
-          }
-          return 0;
-        }).on("mouseover.paneltip", indtip.show).on("mouseout.paneltip", indtip.hide);
-        g.append("rect").attr("x", margin.left + paneloffset).attr("y", margin.top).attr("height", panelheight).attr("width", panelwidth).attr("fill", "none").attr("stroke", "black").attr("stroke-width", "none");
-        if (xNA.handle) {
-          g.append("rect").attr("x", margin.left).attr("y", margin.top).attr("height", panelheight).attr("width", xNA.width).attr("fill", "none").attr("stroke", "black").attr("stroke-width", "none");
-        }
-        if (xNA.handle && yNA.handle) {
-          g.append("rect").attr("x", margin.left).attr("y", margin.top + height - yNA.width).attr("height", yNA.width).attr("width", xNA.width).attr("fill", "none").attr("stroke", "black").attr("stroke-width", "none");
+      } else {
+        x = data.data[xvar];
+        y = data.data[yvar];
+      }
+      console.log("x:", x);
+      console.log("y:", y);
+      indID = (_ref = data != null ? data.indID : void 0) != null ? _ref : null;
+      indID = indID != null ? indID : (function() {
+        _results = [];
+        for (var _i = 1, _ref1 = x.length; 1 <= _ref1 ? _i <= _ref1 : _i >= _ref1; 1 <= _ref1 ? _i++ : _i--){ _results.push(_i); }
+        return _results;
+      }).apply(this);
+      console.log("indID:", indID);
+      group = (_ref2 = data != null ? data.group : void 0) != null ? _ref2 : (function() {
+        var _j, _len, _results1;
+        _results1 = [];
+        for (_j = 0, _len = x.length; _j < _len; _j++) {
+          i = x[_j];
+          _results1.push(1);
         }
-        if (yNA.handle) {
-          return g.append("rect").attr("x", margin.left + paneloffset).attr("y", margin.top + height - yNA.width).attr("height", yNA.width).attr("width", panelwidth).attr("fill", "none").attr("stroke", "black").attr("stroke-width", "none");
+        return _results1;
+      })();
+      ngroup = d3.max(group);
+      group = (function() {
+        var _j, _len, _results1;
+        _results1 = [];
+        for (_j = 0, _len = group.length; _j < _len; _j++) {
+          g = group[_j];
+          _results1.push(g - 1);
         }
-      });
-    };
-    chart.width = function(value) {
-      if (!arguments.length) {
-        return width;
-      }
-      width = value;
-      return chart;
-    };
-    chart.height = function(value) {
-      if (!arguments.length) {
-        return height;
+        return _results1;
+      })();
+      pointcolor = pointcolor != null ? pointcolor : selectGroupColors(ngroup, "dark");
+      pointcolor = expand2vector(pointcolor, ngroup);
+      if (x.every(function(v) {
+        return (v != null) && !xNA.force;
+      })) {
+        xNA.handle = false;
       }
-      height = value;
-      return chart;
-    };
-    chart.margin = function(value) {
-      if (!arguments.length) {
-        return margin;
+      if (y.every(function(v) {
+        return (v != null) && !yNA.force;
+      })) {
+        yNA.handle = false;
       }
-      margin = value;
-      return chart;
-    };
-    chart.axispos = function(value) {
-      if (!arguments.length) {
-        return axispos;
+      if (xNA.handle) {
+        paneloffset = xNA.width + xNA.gap;
+        panelwidth = width - paneloffset;
+      } else {
+        paneloffset = 0;
+        panelwidth = width;
       }
-      axispos = value;
-      return chart;
-    };
-    chart.titlepos = function(value) {
-      if (!arguments.length) {
-        return titlepos;
+      if (yNA.handle) {
+        panelheight = height - (yNA.width + yNA.gap);
+      } else {
+        panelheight = height;
       }
-      titlepos;
-      return chart;
-    };
-    chart.xlim = function(value) {
-      if (!arguments.length) {
-        return xlim;
+      xlim = xlim != null ? xlim : d3.extent(x);
+      ylim = ylim != null ? ylim : d3.extent(y);
+      na_value = d3.min(x.concat(y)) - 100;
+      svg = d3.select(this).selectAll("svg").data([data]);
+      gEnter = svg.enter().append("svg").append("g");
+      svg.attr("width", width + margin.left + margin.right).attr("height", height + margin.top + margin.bottom);
+      g = svg.select("g");
+      g.append("rect").attr("x", paneloffset + margin.left).attr("y", margin.top).attr("height", panelheight).attr("width", panelwidth).attr("fill", rectcolor).attr("stroke", "none");
+      if (xNA.handle) {
+        g.append("rect").attr("x", margin.left).attr("y", margin.top).attr("height", panelheight).attr("width", xNA.width).attr("fill", rectcolor).attr("stroke", "none");
       }
-      xlim = value;
-      return chart;
-    };
-    chart.nxticks = function(value) {
-      if (!arguments.length) {
-        return nxticks;
+      if (xNA.handle && yNA.handle) {
+        g.append("rect").attr("x", margin.left).attr("y", margin.top + height - yNA.width).attr("height", yNA.width).attr("width", xNA.width).attr("fill", rectcolor).attr("stroke", "none");
       }
-      nxticks = value;
-      return chart;
-    };
-    chart.xticks = function(value) {
-      if (!arguments.length) {
-        return xticks;
+      if (yNA.handle) {
+        g.append("rect").attr("x", margin.left + paneloffset).attr("y", margin.top + height - yNA.width).attr("height", yNA.width).attr("width", panelwidth).attr("fill", rectcolor).attr("stroke", "none");
       }
-      xticks = value;
-      return chart;
-    };
-    chart.ylim = function(value) {
-      if (!arguments.length) {
-        return ylim;
-      }
-      ylim = value;
-      return chart;
-    };
-    chart.nyticks = function(value) {
-      if (!arguments.length) {
-        return nyticks;
-      }
-      nyticks = value;
-      return chart;
-    };
-    chart.yticks = function(value) {
-      if (!arguments.length) {
-        return yticks;
-      }
-      yticks = value;
-      return chart;
-    };
-    chart.rectcolor = function(value) {
-      if (!arguments.length) {
-        return rectcolor;
-      }
-      rectcolor = value;
-      return chart;
-    };
-    chart.pointcolor = function(value) {
-      if (!arguments.length) {
-        return pointcolor;
-      }
-      pointcolor = value;
-      return chart;
-    };
-    chart.pointsize = function(value) {
-      if (!arguments.length) {
-        return pointsize;
-      }
-      pointsize = value;
-      return chart;
-    };
-    chart.pointstroke = function(value) {
-      if (!arguments.length) {
-        return pointstroke;
-      }
-      pointstroke = value;
-      return chart;
-    };
-    chart.dataByInd = function(value) {
-      if (!arguments.length) {
-        return dataByInd;
-      }
-      dataByInd = value;
-      return chart;
-    };
-    chart.title = function(value) {
-      if (!arguments.length) {
-        return title;
-      }
-      title = value;
-      return chart;
-    };
-    chart.xlab = function(value) {
-      if (!arguments.length) {
-        return xlab;
+      xrange = [margin.left + paneloffset + margin.inner, margin.left + paneloffset + panelwidth - margin.inner];
+      yrange = [margin.top + panelheight - margin.inner, margin.top + margin.inner];
+      xscale.domain(xlim).range(xrange);
+      yscale.domain(ylim).range(yrange);
+      xs = d3.scale.linear().domain(xlim).range(xrange);
+      ys = d3.scale.linear().domain(ylim).range(yrange);
+      if (xNA.handle) {
+        xscale.domain([na_value].concat(xlim)).range([margin.left + xNA.width / 2].concat(xrange));
+        x = x.map(function(e) {
+          if (e != null) {
+            return e;
+          } else {
+            return na_value;
+          }
+        });
       }
-      xlab = value;
-      return chart;
-    };
-    chart.ylab = function(value) {
-      if (!arguments.length) {
-        return ylab;
+      if (yNA.handle) {
+        yscale.domain([na_value].concat(ylim)).range([height + margin.top - yNA.width / 2].concat(yrange));
+        y = y.map(function(e) {
+          if (e != null) {
+            return e;
+          } else {
+            return na_value;
+          }
+        });
       }
-      ylab = value;
-      return chart;
-    };
-    chart.rotate_ylab = function(value) {
-      if (!arguments.length) {
-        return rotate_ylab;
+      yticks = yticks != null ? yticks : ys.ticks(nyticks);
+      xticks = xticks != null ? xticks : xs.ticks(nxticks);
+      titlegrp = g.append("g").attr("class", "title").append("text").attr("x", margin.left + width / 2).attr("y", margin.top - titlepos).text(title);
+      xaxis = g.append("g").attr("class", "x axis");
+      xaxis.selectAll("empty").data(xticks).enter().append("line").attr("x1", function(d) {
+        return xscale(d);
+      }).attr("x2", function(d) {
+        return xscale(d);
+      }).attr("y1", margin.top).attr("y2", margin.top + height).attr("fill", "none").attr("stroke", "white").attr("stroke-width", 1).style("pointer-events", "none");
+      xaxis.selectAll("empty").data(xticks).enter().append("text").attr("x", function(d) {
+        return xscale(d);
+      }).attr("y", margin.top + height + axispos.xlabel).text(function(d) {
+        return formatAxis(xticks)(d);
+      });
+      xaxis.append("text").attr("class", "title").attr("x", margin.left + width / 2).attr("y", margin.top + height + axispos.xtitle).text(xlab);
+      if (xNA.handle) {
+        xaxis.append("text").attr("x", margin.left + xNA.width / 2).attr("y", margin.top + height + axispos.xlabel).text("N/A");
       }
-      rotate_ylab = value;
-      return chart;
-    };
-    chart.xvar = function(value) {
-      if (!arguments.length) {
-        return xvar;
+      rotate_ylab = rotate_ylab != null ? rotate_ylab : ylab.length > 1;
+      yaxis = g.append("g").attr("class", "y axis");
+      yaxis.selectAll("empty").data(yticks).enter().append("line").attr("y1", function(d) {
+        return yscale(d);
+      }).attr("y2", function(d) {
+        return yscale(d);
+      }).attr("x1", margin.left).attr("x2", margin.left + width).attr("fill", "none").attr("stroke", "white").attr("stroke-width", 1).style("pointer-events", "none");
+      yaxis.selectAll("empty").data(yticks).enter().append("text").attr("y", function(d) {
+        return yscale(d);
+      }).attr("x", margin.left - axispos.ylabel).text(function(d) {
+        return formatAxis(yticks)(d);
+      });
+      yaxis.append("text").attr("class", "title").attr("y", margin.top + height / 2).attr("x", margin.left - axispos.ytitle).text(ylab).attr("transform", rotate_ylab ? "rotate(270," + (margin.left - axispos.ytitle) + "," + (margin.top + height / 2) + ")" : "");
+      if (yNA.handle) {
+        yaxis.append("text").attr("x", margin.left - axispos.ylabel).attr("y", margin.top + height - yNA.width / 2).text("N/A");
       }
-      xvar = value;
-      return chart;
-    };
-    chart.yvar = function(value) {
-      if (!arguments.length) {
-        return yvar;
+      indtip = d3.tip().attr('class', 'd3-tip').html(function(d, i) {
+        return indID[i];
+      }).direction('e').offset([0, 10]);
+      svg.call(indtip);
+      points = g.append("g").attr("id", "points");
+      pointsSelect = points.selectAll("empty").data(d3.range(x.length)).enter().append("circle").attr("cx", function(d, i) {
+        return xscale(x[i]);
+      }).attr("cy", function(d, i) {
+        return yscale(y[i]);
+      }).attr("class", function(d, i) {
+        return "pt" + i;
+      }).attr("r", pointsize).attr("fill", function(d, i) {
+        return pointcolor[group[i]];
+      }).attr("stroke", pointstroke).attr("stroke-width", "1").attr("opacity", function(d, i) {
+        if (((x[i] != null) || xNA.handle) && ((y[i] != null) || yNA.handle)) {
+          return 1;
+        }
+        return 0;
+      }).on("mouseover.paneltip", indtip.show).on("mouseout.paneltip", indtip.hide);
+      g.append("rect").attr("x", margin.left + paneloffset).attr("y", margin.top).attr("height", panelheight).attr("width", panelwidth).attr("fill", "none").attr("stroke", "black").attr("stroke-width", "none");
+      if (xNA.handle) {
+        g.append("rect").attr("x", margin.left).attr("y", margin.top).attr("height", panelheight).attr("width", xNA.width).attr("fill", "none").attr("stroke", "black").attr("stroke-width", "none");
       }
-      yvar = value;
-      return chart;
-    };
-    chart.xNA = function(value) {
-      if (!arguments.length) {
-        return xNA;
+      if (xNA.handle && yNA.handle) {
+        g.append("rect").attr("x", margin.left).attr("y", margin.top + height - yNA.width).attr("height", yNA.width).attr("width", xNA.width).attr("fill", "none").attr("stroke", "black").attr("stroke-width", "none");
       }
-      xNA = value;
-      return chart;
-    };
-    chart.yNA = function(value) {
-      if (!arguments.length) {
-        return yNA;
+      if (yNA.handle) {
+        return g.append("rect").attr("x", margin.left + paneloffset).attr("y", margin.top + height - yNA.width).attr("height", yNA.width).attr("width", panelwidth).attr("fill", "none").attr("stroke", "black").attr("stroke-width", "none");
       }
-      yNA = value;
-      return chart;
-    };
-    chart.yscale = function() {
-      return yscale;
-    };
-    chart.xscale = function() {
-      return xscale;
-    };
-    chart.pointsSelect = function() {
-      return pointsSelect;
-    };
+    });
+  };
+  chart.width = function(value) {
+    if (!arguments.length) {
+      return width;
+    }
+    width = value;
     return chart;
   };
+  chart.height = function(value) {
+    if (!arguments.length) {
+      return height;
+    }
+    height = value;
+    return chart;
+  };
+  chart.margin = function(value) {
+    if (!arguments.length) {
+      return margin;
+    }
+    margin = value;
+    return chart;
+  };
+  chart.axispos = function(value) {
+    if (!arguments.length) {
+      return axispos;
+    }
+    axispos = value;
+    return chart;
+  };
+  chart.titlepos = function(value) {
+    if (!arguments.length) {
+      return titlepos;
+    }
+    titlepos;
+    return chart;
+  };
+  chart.xlim = function(value) {
+    if (!arguments.length) {
+      return xlim;
+    }
+    xlim = value;
+    return chart;
+  };
+  chart.nxticks = function(value) {
+    if (!arguments.length) {
+      return nxticks;
+    }
+    nxticks = value;
+    return chart;
+  };
+  chart.xticks = function(value) {
+    if (!arguments.length) {
+      return xticks;
+    }
+    xticks = value;
+    return chart;
+  };
+  chart.ylim = function(value) {
+    if (!arguments.length) {
+      return ylim;
+    }
+    ylim = value;
+    return chart;
+  };
+  chart.nyticks = function(value) {
+    if (!arguments.length) {
+      return nyticks;
+    }
+    nyticks = value;
+    return chart;
+  };
+  chart.yticks = function(value) {
+    if (!arguments.length) {
+      return yticks;
+    }
+    yticks = value;
+    return chart;
+  };
+  chart.rectcolor = function(value) {
+    if (!arguments.length) {
+      return rectcolor;
+    }
+    rectcolor = value;
+    return chart;
+  };
+  chart.pointcolor = function(value) {
+    if (!arguments.length) {
+      return pointcolor;
+    }
+    pointcolor = value;
+    return chart;
+  };
+  chart.pointsize = function(value) {
+    if (!arguments.length) {
+      return pointsize;
+    }
+    pointsize = value;
+    return chart;
+  };
+  chart.pointstroke = function(value) {
+    if (!arguments.length) {
+      return pointstroke;
+    }
+    pointstroke = value;
+    return chart;
+  };
+  chart.dataByInd = function(value) {
+    if (!arguments.length) {
+      return dataByInd;
+    }
+    dataByInd = value;
+    return chart;
+  };
+  chart.title = function(value) {
+    if (!arguments.length) {
+      return title;
+    }
+    title = value;
+    return chart;
+  };
+  chart.xlab = function(value) {
+    if (!arguments.length) {
+      return xlab;
+    }
+    xlab = value;
+    return chart;
+  };
+  chart.ylab = function(value) {
+    if (!arguments.length) {
+      return ylab;
+    }
+    ylab = value;
+    return chart;
+  };
+  chart.rotate_ylab = function(value) {
+    if (!arguments.length) {
+      return rotate_ylab;
+    }
+    rotate_ylab = value;
+    return chart;
+  };
+  chart.xvar = function(value) {
+    if (!arguments.length) {
+      return xvar;
+    }
+    xvar = value;
+    return chart;
+  };
+  chart.yvar = function(value) {
+    if (!arguments.length) {
+      return yvar;
+    }
+    yvar = value;
+    return chart;
+  };
+  chart.xNA = function(value) {
+    if (!arguments.length) {
+      return xNA;
+    }
+    xNA = value;
+    return chart;
+  };
+  chart.yNA = function(value) {
+    if (!arguments.length) {
+      return yNA;
+    }
+    yNA = value;
+    return chart;
+  };
+  chart.yscale = function() {
+    return yscale;
+  };
+  chart.xscale = function() {
+    return xscale;
+  };
+  chart.pointsSelect = function() {
+    return pointsSelect;
+  };
+  return chart;
+};
 
-  root.scatterplot = scatterplot;
-
-}).call(this);
+root.scatterplot = scatterplot;
diff --git a/wqflask/wqflask/static/new/javascript/search_results.js b/wqflask/wqflask/static/new/javascript/search_results.js
index 477c9b94..e6f55624 100755
--- a/wqflask/wqflask/static/new/javascript/search_results.js
+++ b/wqflask/wqflask/static/new/javascript/search_results.js
@@ -1,105 +1,101 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-
-  $(function() {
-    var add, change_buttons, checked_traits, deselect_all, invert, remove, removed_traits, select_all;
-    checked_traits = null;
-    select_all = function() {
-      console.log("selected_all");
-      return $(".trait_checkbox").prop('checked', true);
-    };
-    deselect_all = function() {
-      return $(".trait_checkbox").prop('checked', false);
-    };
-    invert = function() {
-      return $(".trait_checkbox").trigger('click');
-    };
-    add = function() {
-      var traits;
-      traits = $("#trait_table input:checked").map(function() {
-        return $(this).val();
-      }).get();
-      console.log("checked length is:", traits.length);
-      console.log("checked is:", traits);
-      return $.colorbox({
-        href: "/collections/add?traits=" + traits
-      });
-    };
-    removed_traits = function() {
-      console.log('in removed_traits with checked_traits:', checked_traits);
-      return checked_traits.closest("tr").fadeOut();
-    };
-    change_buttons = function() {
-      var button, buttons, item, num_checked, text, _i, _j, _k, _l, _len, _len1, _len2, _len3, _results, _results1;
-      buttons = ["#add", "#remove"];
-      num_checked = $('.trait_checkbox:checked').length;
-      console.log("num_checked is:", num_checked);
-      if (num_checked === 0) {
-        for (_i = 0, _len = buttons.length; _i < _len; _i++) {
-          button = buttons[_i];
-          $(button).prop("disabled", true);
-        }
-      } else {
-        for (_j = 0, _len1 = buttons.length; _j < _len1; _j++) {
-          button = buttons[_j];
-          $(button).prop("disabled", false);
-        }
+// Generated by CoffeeScript 1.7.1
+$(function() {
+  var add, change_buttons, checked_traits, deselect_all, invert, remove, removed_traits, select_all;
+  checked_traits = null;
+  select_all = function() {
+    console.log("selected_all");
+    return $(".trait_checkbox").prop('checked', true);
+  };
+  deselect_all = function() {
+    return $(".trait_checkbox").prop('checked', false);
+  };
+  invert = function() {
+    return $(".trait_checkbox").trigger('click');
+  };
+  add = function() {
+    var traits;
+    traits = $("#trait_table input:checked").map(function() {
+      return $(this).val();
+    }).get();
+    console.log("checked length is:", traits.length);
+    console.log("checked is:", traits);
+    return $.colorbox({
+      href: "/collections/add?traits=" + traits
+    });
+  };
+  removed_traits = function() {
+    console.log('in removed_traits with checked_traits:', checked_traits);
+    return checked_traits.closest("tr").fadeOut();
+  };
+  change_buttons = function() {
+    var button, buttons, item, num_checked, text, _i, _j, _k, _l, _len, _len1, _len2, _len3, _results, _results1;
+    buttons = ["#add", "#remove"];
+    num_checked = $('.trait_checkbox:checked').length;
+    console.log("num_checked is:", num_checked);
+    if (num_checked === 0) {
+      for (_i = 0, _len = buttons.length; _i < _len; _i++) {
+        button = buttons[_i];
+        $(button).prop("disabled", true);
       }
-      if (num_checked > 1) {
-        console.log("in loop");
-        _results = [];
-        for (_k = 0, _len2 = buttons.length; _k < _len2; _k++) {
-          item = buttons[_k];
-          console.log("  processing item:", item);
-          text = $(item).html();
-          if (text.indexOf("Records") === -1) {
-            text = text.replace("Record", "Records");
-            _results.push($(item).html(text));
-          } else {
-            _results.push(void 0);
-          }
-        }
-        return _results;
-      } else {
-        console.log("in loop");
-        _results1 = [];
-        for (_l = 0, _len3 = buttons.length; _l < _len3; _l++) {
-          item = buttons[_l];
-          console.log("  processing item:", item);
-          text = $(item).html();
-          text = text.replace("Records", "Record");
-          _results1.push($(item).html(text));
+    } else {
+      for (_j = 0, _len1 = buttons.length; _j < _len1; _j++) {
+        button = buttons[_j];
+        $(button).prop("disabled", false);
+      }
+    }
+    if (num_checked > 1) {
+      console.log("in loop");
+      _results = [];
+      for (_k = 0, _len2 = buttons.length; _k < _len2; _k++) {
+        item = buttons[_k];
+        console.log("  processing item:", item);
+        text = $(item).html();
+        if (text.indexOf("Records") === -1) {
+          text = text.replace("Record", "Records");
+          _results.push($(item).html(text));
+        } else {
+          _results.push(void 0);
         }
-        return _results1;
       }
-    };
-    remove = function() {
-      var traits, uc_id;
-      checked_traits = $("#trait_table input:checked");
-      traits = checked_traits.map(function() {
-        return $(this).val();
-      }).get();
-      console.log("checked length is:", traits.length);
-      console.log("checked is:", traits);
-      uc_id = $("#uc_id").val();
-      console.log("uc.id is:", uc_id);
-      return $.ajax({
-        type: "POST",
-        url: "/collections/remove",
-        data: {
-          uc_id: uc_id,
-          traits: traits
-        },
-        success: removed_traits
-      });
-    };
-    $("#select_all").click(select_all);
-    $("#deselect_all").click(deselect_all);
-    $("#invert").click(invert);
-    $("#add").click(add);
-    $("#remove").click(remove);
-    $('.trait_checkbox').click(change_buttons);
-    return $('.btn').click(change_buttons);
-  });
-
-}).call(this);
+      return _results;
+    } else {
+      console.log("in loop");
+      _results1 = [];
+      for (_l = 0, _len3 = buttons.length; _l < _len3; _l++) {
+        item = buttons[_l];
+        console.log("  processing item:", item);
+        text = $(item).html();
+        text = text.replace("Records", "Record");
+        _results1.push($(item).html(text));
+      }
+      return _results1;
+    }
+  };
+  remove = function() {
+    var traits, uc_id;
+    checked_traits = $("#trait_table input:checked");
+    traits = checked_traits.map(function() {
+      return $(this).val();
+    }).get();
+    console.log("checked length is:", traits.length);
+    console.log("checked is:", traits);
+    uc_id = $("#uc_id").val();
+    console.log("uc.id is:", uc_id);
+    return $.ajax({
+      type: "POST",
+      url: "/collections/remove",
+      data: {
+        uc_id: uc_id,
+        traits: traits
+      },
+      success: removed_traits
+    });
+  };
+  $("#select_all").click(select_all);
+  $("#deselect_all").click(deselect_all);
+  $("#invert").click(invert);
+  $("#add").click(add);
+  $("#remove").click(remove);
+  $('.trait_checkbox').click(change_buttons);
+  return $('.btn').click(change_buttons);
+});
diff --git a/wqflask/wqflask/static/new/javascript/show_trait.js b/wqflask/wqflask/static/new/javascript/show_trait.js
index e1dc9e76..5f452f32 100755
--- a/wqflask/wqflask/static/new/javascript/show_trait.js
+++ b/wqflask/wqflask/static/new/javascript/show_trait.js
@@ -1,417 +1,424 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var Stat_Table_Rows, is_number, root,
-    __hasProp = {}.hasOwnProperty,
-    __slice = [].slice;
+// Generated by CoffeeScript 1.7.1
+var Stat_Table_Rows, is_number, root,
+  __hasProp = {}.hasOwnProperty,
+  __slice = [].slice;
 
-  root = typeof exports !== "undefined" && exports !== null ? exports : this;
+root = typeof exports !== "undefined" && exports !== null ? exports : this;
 
-  console.log("start_b");
+console.log("start_b");
 
-  is_number = function(o) {
-    return !isNaN((o - 0) && o !== null);
-  };
+is_number = function(o) {
+  return !isNaN((o - 0) && o !== null);
+};
 
-  Stat_Table_Rows = [
-    {
-      vn: "n_of_samples",
-      pretty: "N of Samples",
-      digits: 0
-    }, {
-      vn: "mean",
-      pretty: "Mean",
-      digits: 2
-    }, {
-      vn: "median",
-      pretty: "Median",
-      digits: 2
-    }, {
-      vn: "std_error",
-      pretty: "Standard Error (SE)",
-      digits: 2
-    }, {
-      vn: "std_dev",
-      pretty: "Standard Deviation (SD)",
-      digits: 2
-    }, {
-      vn: "min",
-      pretty: "Minimum",
-      digits: 2
-    }, {
-      vn: "max",
-      pretty: "Maximum",
-      digits: 2
-    }, {
-      vn: "range",
-      pretty: "Range (log2)",
-      digits: 2
-    }, {
-      vn: "range_fold",
-      pretty: "Range (fold)",
-      digits: 2
-    }, {
-      vn: "interquartile",
-      pretty: "Interquartile Range",
-      url: "/glossary.html#Interquartile",
-      digits: 2
-    }
-  ];
+Stat_Table_Rows = [
+  {
+    vn: "n_of_samples",
+    pretty: "N of Samples",
+    digits: 0
+  }, {
+    vn: "mean",
+    pretty: "Mean",
+    digits: 2
+  }, {
+    vn: "median",
+    pretty: "Median",
+    digits: 2
+  }, {
+    vn: "std_error",
+    pretty: "Standard Error (SE)",
+    digits: 2
+  }, {
+    vn: "std_dev",
+    pretty: "Standard Deviation (SD)",
+    digits: 2
+  }, {
+    vn: "min",
+    pretty: "Minimum",
+    digits: 2
+  }, {
+    vn: "max",
+    pretty: "Maximum",
+    digits: 2
+  }, {
+    vn: "range",
+    pretty: "Range (log2)",
+    digits: 2
+  }, {
+    vn: "range_fold",
+    pretty: "Range (fold)",
+    digits: 2
+  }, {
+    vn: "interquartile",
+    pretty: "Interquartile Range",
+    url: "/glossary.html#Interquartile",
+    digits: 2
+  }
+];
 
-  $(function() {
-    var block_by_attribute_value, block_by_index, block_outliers, change_stats_value, create_value_dropdown, edit_data_change, export_sample_table_data, get_sample_table_data, hide_no_value, hide_tabs, make_table, on_corr_method_change, open_trait_selection, populate_sample_attributes_values_dropdown, process_id, reset_samples_table, sample_group_types, sample_lists, show_hide_outliers, stats_mdp_change, update_stat_values,
-      _this = this;
-    sample_lists = js_data.sample_lists;
-    sample_group_types = js_data.sample_group_types;
-    root.bar_chart = new Bar_Chart(sample_lists[0]);
-    root.histogram = new Histogram(sample_lists[0]);
-    new Box_Plot(sample_lists[0]);
-    $('.bar_chart_samples_group').change(function() {
-      var all_samples, group;
-      $('#bar_chart').remove();
-      $('#bar_chart_container').append('<div id="bar_chart"></div>');
-      group = $(this).val();
-      if (group === "samples_primary") {
-        return root.bar_chart = new Bar_Chart(sample_lists[0]);
-      } else if (group === "samples_other") {
-        return root.bar_chart = new Bar_Chart(sample_lists[1]);
-      } else if (group === "samples_all") {
-        all_samples = sample_lists[0].concat(sample_lists[1]);
-        return root.bar_chart = new Bar_Chart(all_samples);
-      }
-    });
-    $('.box_plot_samples_group').change(function() {
-      var all_samples, group;
-      $('#box_plot').remove();
-      $('#box_plot_container').append('<div id="box_plot"></div>');
-      group = $(this).val();
-      if (group === "samples_primary") {
-        return new Box_Plot(sample_lists[0]);
-      } else if (group === "samples_other") {
-        return new Box_Plot(sample_lists[1]);
-      } else if (group === "samples_all") {
-        all_samples = sample_lists[0].concat(sample_lists[1]);
-        return new Box_Plot(all_samples);
-      }
-    });
-    d3.select("#select_compare_trait").on("click", function() {
+$(function() {
+  var block_by_attribute_value, block_by_index, block_outliers, change_stats_value, create_value_dropdown, edit_data_change, export_sample_table_data, get_sample_table_data, hide_no_value, hide_tabs, make_table, on_corr_method_change, open_trait_selection, populate_sample_attributes_values_dropdown, process_id, reset_samples_table, sample_group_types, sample_lists, show_hide_outliers, stats_mdp_change, update_stat_values;
+  sample_lists = js_data.sample_lists;
+  sample_group_types = js_data.sample_group_types;
+  root.bar_chart = new Bar_Chart(sample_lists[0]);
+  root.histogram = new Histogram(sample_lists[0]);
+  new Box_Plot(sample_lists[0]);
+  $('.bar_chart_samples_group').change(function() {
+    var all_samples, group;
+    $('#bar_chart').remove();
+    $('#bar_chart_container').append('<div id="bar_chart"></div>');
+    group = $(this).val();
+    if (group === "samples_primary") {
+      return root.bar_chart = new Bar_Chart(sample_lists[0]);
+    } else if (group === "samples_other") {
+      return root.bar_chart = new Bar_Chart(sample_lists[1]);
+    } else if (group === "samples_all") {
+      all_samples = sample_lists[0].concat(sample_lists[1]);
+      return root.bar_chart = new Bar_Chart(all_samples);
+    }
+  });
+  $('.box_plot_samples_group').change(function() {
+    var all_samples, group;
+    $('#box_plot').remove();
+    $('#box_plot_container').append('<div id="box_plot"></div>');
+    group = $(this).val();
+    if (group === "samples_primary") {
+      return new Box_Plot(sample_lists[0]);
+    } else if (group === "samples_other") {
+      return new Box_Plot(sample_lists[1]);
+    } else if (group === "samples_all") {
+      all_samples = sample_lists[0].concat(sample_lists[1]);
+      return new Box_Plot(all_samples);
+    }
+  });
+  d3.select("#select_compare_trait").on("click", (function(_this) {
+    return function() {
       $('.qtlcharts').empty();
       return open_trait_selection();
-    });
-    d3.select("#clear_compare_trait").on("click", function() {
+    };
+  })(this));
+  d3.select("#clear_compare_trait").on("click", (function(_this) {
+    return function() {
       return $('.qtlcharts').empty();
-    });
-    open_trait_selection = function() {
-      var _this = this;
-      return $('#collections_holder').load('/collections/list?color_by_trait #collections_list', function() {
+    };
+  })(this));
+  open_trait_selection = function() {
+    return $('#collections_holder').load('/collections/list?color_by_trait #collections_list', (function(_this) {
+      return function() {
         $.colorbox({
           inline: true,
           href: "#collections_holder"
         });
         return $('a.collection_name').attr('onClick', 'return false');
-      });
-    };
-    hide_tabs = function(start) {
-      var x, _i, _results;
-      _results = [];
-      for (x = _i = start; start <= 10 ? _i <= 10 : _i >= 10; x = start <= 10 ? ++_i : --_i) {
-        _results.push($("#stats_tabs" + x).hide());
-      }
-      return _results;
-    };
-    stats_mdp_change = function() {
-      var selected;
-      selected = $(this).val();
-      hide_tabs(0);
-      return $("#stats_tabs" + selected).show();
-    };
-    change_stats_value = function(sample_sets, category, value_type, decimal_places) {
-      var current_value, id, in_box, the_value, title_value;
-      id = "#" + process_id(category, value_type);
-      console.log("the_id:", id);
-      in_box = $(id).html;
-      current_value = parseFloat($(in_box)).toFixed(decimal_places);
-      the_value = sample_sets[category][value_type]();
-      console.log("After running sample_sets, the_value is:", the_value);
-      if (decimal_places > 0) {
-        title_value = the_value.toFixed(decimal_places * 2);
-        the_value = the_value.toFixed(decimal_places);
+      };
+    })(this));
+  };
+  hide_tabs = function(start) {
+    var x, _i, _results;
+    _results = [];
+    for (x = _i = start; start <= 10 ? _i <= 10 : _i >= 10; x = start <= 10 ? ++_i : --_i) {
+      _results.push($("#stats_tabs" + x).hide());
+    }
+    return _results;
+  };
+  stats_mdp_change = function() {
+    var selected;
+    selected = $(this).val();
+    hide_tabs(0);
+    return $("#stats_tabs" + selected).show();
+  };
+  change_stats_value = function(sample_sets, category, value_type, decimal_places) {
+    var current_value, id, in_box, the_value, title_value;
+    id = "#" + process_id(category, value_type);
+    console.log("the_id:", id);
+    in_box = $(id).html;
+    current_value = parseFloat($(in_box)).toFixed(decimal_places);
+    the_value = sample_sets[category][value_type]();
+    console.log("After running sample_sets, the_value is:", the_value);
+    if (decimal_places > 0) {
+      title_value = the_value.toFixed(decimal_places * 2);
+      the_value = the_value.toFixed(decimal_places);
+    } else {
+      title_value = null;
+    }
+    console.log("*-* the_value:", the_value);
+    console.log("*-* current_value:", current_value);
+    if (the_value !== current_value) {
+      console.log("object:", $(id).html(the_value));
+      $(id).html(the_value).effect("highlight");
+    }
+    if (title_value) {
+      return $(id).attr('title', title_value);
+    }
+  };
+  update_stat_values = function(sample_sets) {
+    var category, row, _i, _len, _ref, _results;
+    _ref = ['samples_primary', 'samples_other', 'samples_all'];
+    _results = [];
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      category = _ref[_i];
+      _results.push((function() {
+        var _j, _len1, _results1;
+        _results1 = [];
+        for (_j = 0, _len1 = Stat_Table_Rows.length; _j < _len1; _j++) {
+          row = Stat_Table_Rows[_j];
+          console.log("Calling change_stats_value");
+          _results1.push(change_stats_value(sample_sets, category, row.vn, row.digits));
+        }
+        return _results1;
+      })());
+    }
+    return _results;
+  };
+  make_table = function() {
+    var header, key, row, row_line, table, the_id, the_rows, value, _i, _len, _ref, _ref1;
+    header = "<thead><tr><th>&nbsp;</th>";
+    console.log("js_data.sample_group_types:", js_data.sample_group_types);
+    _ref = js_data.sample_group_types;
+    for (key in _ref) {
+      if (!__hasProp.call(_ref, key)) continue;
+      value = _ref[key];
+      console.log("aa key:", key);
+      console.log("aa value:", value);
+      the_id = process_id("column", key);
+      header += "<th id=\"" + the_id + "\">" + value + "</th>";
+    }
+    header += "</thead>";
+    console.log("windex header is:", header);
+    the_rows = "<tbody>";
+    for (_i = 0, _len = Stat_Table_Rows.length; _i < _len; _i++) {
+      row = Stat_Table_Rows[_i];
+      console.log("rowing");
+      row_line = "<tr>";
+      if (row.url != null) {
+        row_line += "<td id=\"" + row.vn + "\"><a href=\"" + row.url + "\">" + row.pretty + "</a></td>";
       } else {
-        title_value = null;
-      }
-      console.log("*-* the_value:", the_value);
-      console.log("*-* current_value:", current_value);
-      if (the_value !== current_value) {
-        console.log("object:", $(id).html(the_value));
-        $(id).html(the_value).effect("highlight");
-      }
-      if (title_value) {
-        return $(id).attr('title', title_value);
+        row_line += "<td id=\"" + row.vn + "\">" + row.pretty + "</td>";
       }
-    };
-    update_stat_values = function(sample_sets) {
-      var category, row, _i, _len, _ref, _results;
-      _ref = ['samples_primary', 'samples_other', 'samples_all'];
-      _results = [];
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        category = _ref[_i];
-        _results.push((function() {
-          var _j, _len1, _results1;
-          _results1 = [];
-          for (_j = 0, _len1 = Stat_Table_Rows.length; _j < _len1; _j++) {
-            row = Stat_Table_Rows[_j];
-            console.log("Calling change_stats_value");
-            _results1.push(change_stats_value(sample_sets, category, row.vn, row.digits));
-          }
-          return _results1;
-        })());
-      }
-      return _results;
-    };
-    make_table = function() {
-      var header, key, row, row_line, table, the_id, the_rows, value, _i, _len, _ref, _ref1;
-      header = "<thead><tr><th>&nbsp;</th>";
-      console.log("js_data.sample_group_types:", js_data.sample_group_types);
-      _ref = js_data.sample_group_types;
-      for (key in _ref) {
-        if (!__hasProp.call(_ref, key)) continue;
-        value = _ref[key];
-        console.log("aa key:", key);
-        console.log("aa value:", value);
-        the_id = process_id("column", key);
-        header += "<th id=\"" + the_id + "\">" + value + "</th>";
+      console.log("box - js_data.sample_group_types:", js_data.sample_group_types);
+      _ref1 = js_data.sample_group_types;
+      for (key in _ref1) {
+        if (!__hasProp.call(_ref1, key)) continue;
+        value = _ref1[key];
+        console.log("apple key:", key);
+        the_id = process_id(key, row.vn);
+        console.log("the_id:", the_id);
+        row_line += "<td id=\"" + the_id + "\">foo</td>";
       }
-      header += "</thead>";
-      console.log("windex header is:", header);
-      the_rows = "<tbody>";
-      for (_i = 0, _len = Stat_Table_Rows.length; _i < _len; _i++) {
-        row = Stat_Table_Rows[_i];
-        console.log("rowing");
-        row_line = "<tr>";
-        if (row.url != null) {
-          row_line += "<td id=\"" + row.vn + "\"><a href=\"" + row.url + "\">" + row.pretty + "</a></td>";
-        } else {
-          row_line += "<td id=\"" + row.vn + "\">" + row.pretty + "</td>";
-        }
-        console.log("box - js_data.sample_group_types:", js_data.sample_group_types);
-        _ref1 = js_data.sample_group_types;
-        for (key in _ref1) {
-          if (!__hasProp.call(_ref1, key)) continue;
-          value = _ref1[key];
-          console.log("apple key:", key);
-          the_id = process_id(key, row.vn);
-          console.log("the_id:", the_id);
-          row_line += "<td id=\"" + the_id + "\">foo</td>";
-        }
-        row_line += "</tr>";
-        console.log("row line:", row_line);
-        the_rows += row_line;
-      }
-      the_rows += "</tbody>";
-      table = header + the_rows;
-      console.log("table is:", table);
-      return $("#stats_table").append(table);
-    };
-    process_id = function() {
-      var processed, value, values, _i, _len;
-      values = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
-      /* Make an id or a class valid javascript by, for example, eliminating spaces
-      */
+      row_line += "</tr>";
+      console.log("row line:", row_line);
+      the_rows += row_line;
+    }
+    the_rows += "</tbody>";
+    table = header + the_rows;
+    console.log("table is:", table);
+    return $("#stats_table").append(table);
+  };
+  process_id = function() {
+    var processed, value, values, _i, _len;
+    values = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
 
-      processed = "";
-      for (_i = 0, _len = values.length; _i < _len; _i++) {
-        value = values[_i];
-        console.log("value:", value);
-        value = value.replace(" ", "_");
-        if (processed.length) {
-          processed += "-";
-        }
-        processed += value;
+    /* Make an id or a class valid javascript by, for example, eliminating spaces */
+    processed = "";
+    for (_i = 0, _len = values.length; _i < _len; _i++) {
+      value = values[_i];
+      console.log("value:", value);
+      value = value.replace(" ", "_");
+      if (processed.length) {
+        processed += "-";
       }
-      return processed;
+      processed += value;
+    }
+    return processed;
+  };
+  edit_data_change = function() {
+    var already_seen, checkbox, checked, name, real_value, row, rows, sample_sets, table, tables, _i, _j, _len, _len1;
+    already_seen = {};
+    sample_sets = {
+      samples_primary: new Stats([]),
+      samples_other: new Stats([]),
+      samples_all: new Stats([])
     };
-    edit_data_change = function() {
-      var already_seen, checkbox, checked, name, real_value, row, rows, sample_sets, table, tables, _i, _j, _len, _len1;
-      already_seen = {};
-      sample_sets = {
-        samples_primary: new Stats([]),
-        samples_other: new Stats([]),
-        samples_all: new Stats([])
-      };
-      console.log("at beginning:", sample_sets);
-      tables = ['samples_primary', 'samples_other'];
-      for (_i = 0, _len = tables.length; _i < _len; _i++) {
-        table = tables[_i];
-        rows = $("#" + table).find('tr');
-        for (_j = 0, _len1 = rows.length; _j < _len1; _j++) {
-          row = rows[_j];
-          name = $(row).find('.edit_sample_sample_name').html();
-          name = $.trim(name);
-          real_value = $(row).find('.edit_sample_value').val();
-          console.log("real_value:", real_value);
-          checkbox = $(row).find(".edit_sample_checkbox");
-          checked = $(checkbox).attr('checked');
-          if (checked && is_number(real_value) && real_value !== "") {
-            console.log("in the iffy if");
-            real_value = parseFloat(real_value);
-            sample_sets[table].add_value(real_value);
-            console.log("checking name of:", name);
-            if (!(name in already_seen)) {
-              console.log("haven't seen");
-              sample_sets['samples_all'].add_value(real_value);
-              already_seen[name] = true;
-            }
+    console.log("at beginning:", sample_sets);
+    tables = ['samples_primary', 'samples_other'];
+    for (_i = 0, _len = tables.length; _i < _len; _i++) {
+      table = tables[_i];
+      rows = $("#" + table).find('tr');
+      for (_j = 0, _len1 = rows.length; _j < _len1; _j++) {
+        row = rows[_j];
+        name = $(row).find('.edit_sample_sample_name').html();
+        name = $.trim(name);
+        real_value = $(row).find('.edit_sample_value').val();
+        console.log("real_value:", real_value);
+        checkbox = $(row).find(".edit_sample_checkbox");
+        checked = $(checkbox).attr('checked');
+        if (checked && is_number(real_value) && real_value !== "") {
+          console.log("in the iffy if");
+          real_value = parseFloat(real_value);
+          sample_sets[table].add_value(real_value);
+          console.log("checking name of:", name);
+          if (!(name in already_seen)) {
+            console.log("haven't seen");
+            sample_sets['samples_all'].add_value(real_value);
+            already_seen[name] = true;
           }
         }
       }
-      console.log("towards end:", sample_sets);
-      return update_stat_values(sample_sets);
-    };
-    show_hide_outliers = function() {
-      var label;
-      console.log("FOOBAR in beginning of show_hide_outliers");
-      label = $('#show_hide_outliers').val();
-      console.log("lable is:", label);
-      if (label === "Hide Outliers") {
-        return $('#show_hide_outliers').val("Show Outliers");
-      } else if (label === "Show Outliers") {
-        console.log("Found Show Outliers");
-        $('#show_hide_outliers').val("Hide Outliers");
-        return console.log("Should be now Hide Outliers");
-      }
-    };
-    on_corr_method_change = function() {
-      var corr_method;
-      console.log("in beginning of on_corr_method_change");
-      corr_method = $('select[name=corr_method]').val();
-      console.log("corr_method is:", corr_method);
-      $('.correlation_desc').hide();
-      $('#' + corr_method + "_r_desc").show().effect("highlight");
-      if (corr_method === "lit") {
-        return $("#corr_sample_method_options").hide();
-      } else {
-        return $("#corr_sample_method_options").show();
-      }
-    };
-    $('select[name=corr_method]').change(on_corr_method_change);
-    create_value_dropdown = function(value) {
-      return "<option val=" + value + ">" + value + "</option>";
-    };
-    populate_sample_attributes_values_dropdown = function() {
-      var attribute_info, key, sample_attributes, selected_attribute, value, _i, _len, _ref, _ref1, _results;
-      console.log("in beginning of psavd");
-      $('#attribute_values').empty();
-      sample_attributes = {};
-      _ref = js_data.attribute_names;
-      for (key in _ref) {
-        if (!__hasProp.call(_ref, key)) continue;
-        attribute_info = _ref[key];
-        sample_attributes[attribute_info.name] = attribute_info.distinct_values;
-      }
-      console.log("[visa] attributes is:", sample_attributes);
-      selected_attribute = $('#exclude_menu').val().replace("_", " ");
-      console.log("selected_attribute is:", selected_attribute);
-      _ref1 = sample_attributes[selected_attribute];
-      _results = [];
-      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
-        value = _ref1[_i];
-        _results.push($(create_value_dropdown(value)).appendTo($('#attribute_values')));
-      }
-      return _results;
-    };
-    if (js_data.attribute_names.length > 0) {
-      populate_sample_attributes_values_dropdown();
     }
-    $('#exclude_menu').change(populate_sample_attributes_values_dropdown);
-    block_by_attribute_value = function() {
-      var attribute_name, cell_class, exclude_by_value,
-        _this = this;
-      attribute_name = $('#exclude_menu').val();
-      exclude_by_value = $('#attribute_values').val();
-      cell_class = ".column_name-" + attribute_name;
-      return $(cell_class).each(function(index, element) {
+    console.log("towards end:", sample_sets);
+    return update_stat_values(sample_sets);
+  };
+  show_hide_outliers = function() {
+    var label;
+    console.log("FOOBAR in beginning of show_hide_outliers");
+    label = $('#show_hide_outliers').val();
+    console.log("lable is:", label);
+    if (label === "Hide Outliers") {
+      return $('#show_hide_outliers').val("Show Outliers");
+    } else if (label === "Show Outliers") {
+      console.log("Found Show Outliers");
+      $('#show_hide_outliers').val("Hide Outliers");
+      return console.log("Should be now Hide Outliers");
+    }
+  };
+  on_corr_method_change = function() {
+    var corr_method;
+    console.log("in beginning of on_corr_method_change");
+    corr_method = $('select[name=corr_method]').val();
+    console.log("corr_method is:", corr_method);
+    $('.correlation_desc').hide();
+    $('#' + corr_method + "_r_desc").show().effect("highlight");
+    if (corr_method === "lit") {
+      return $("#corr_sample_method_options").hide();
+    } else {
+      return $("#corr_sample_method_options").show();
+    }
+  };
+  $('select[name=corr_method]').change(on_corr_method_change);
+  create_value_dropdown = function(value) {
+    return "<option val=" + value + ">" + value + "</option>";
+  };
+  populate_sample_attributes_values_dropdown = function() {
+    var attribute_info, key, sample_attributes, selected_attribute, value, _i, _len, _ref, _ref1, _results;
+    console.log("in beginning of psavd");
+    $('#attribute_values').empty();
+    sample_attributes = {};
+    _ref = js_data.attribute_names;
+    for (key in _ref) {
+      if (!__hasProp.call(_ref, key)) continue;
+      attribute_info = _ref[key];
+      sample_attributes[attribute_info.name] = attribute_info.distinct_values;
+    }
+    console.log("[visa] attributes is:", sample_attributes);
+    selected_attribute = $('#exclude_menu').val().replace("_", " ");
+    console.log("selected_attribute is:", selected_attribute);
+    _ref1 = sample_attributes[selected_attribute];
+    _results = [];
+    for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
+      value = _ref1[_i];
+      _results.push($(create_value_dropdown(value)).appendTo($('#attribute_values')));
+    }
+    return _results;
+  };
+  if (js_data.attribute_names.length > 0) {
+    populate_sample_attributes_values_dropdown();
+  }
+  $('#exclude_menu').change(populate_sample_attributes_values_dropdown);
+  block_by_attribute_value = function() {
+    var attribute_name, cell_class, exclude_by_value;
+    attribute_name = $('#exclude_menu').val();
+    exclude_by_value = $('#attribute_values').val();
+    cell_class = ".column_name-" + attribute_name;
+    return $(cell_class).each((function(_this) {
+      return function(index, element) {
         var row;
         if ($.trim($(element).text()) === exclude_by_value) {
           row = $(element).parent('tr');
           return $(row).find(".trait_value_input").val("x");
         }
-      });
-    };
-    $('#exclude_group').click(block_by_attribute_value);
-    block_by_index = function() {
-      var end_index, index, index_list, index_set, index_string, start_index, _i, _j, _k, _len, _len1, _ref, _results;
-      index_string = $('#remove_samples_field').val();
-      index_list = [];
-      _ref = index_string.split(",");
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        index_set = _ref[_i];
-        if (index_set.indexOf('-') !== -1) {
-          try {
-            start_index = parseInt(index_set.split("-")[0]);
-            end_index = parseInt(index_set.split("-")[1]);
-            for (index = _j = start_index; start_index <= end_index ? _j <= end_index : _j >= end_index; index = start_index <= end_index ? ++_j : --_j) {
-              index_list.push(index);
-            }
-          } catch (error) {
-            alert("Syntax error");
+      };
+    })(this));
+  };
+  $('#exclude_group').click(block_by_attribute_value);
+  block_by_index = function() {
+    var end_index, error, index, index_list, index_set, index_string, start_index, _i, _j, _k, _len, _len1, _ref, _results;
+    index_string = $('#remove_samples_field').val();
+    index_list = [];
+    _ref = index_string.split(",");
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      index_set = _ref[_i];
+      if (index_set.indexOf('-') !== -1) {
+        try {
+          start_index = parseInt(index_set.split("-")[0]);
+          end_index = parseInt(index_set.split("-")[1]);
+          for (index = _j = start_index; start_index <= end_index ? _j <= end_index : _j >= end_index; index = start_index <= end_index ? ++_j : --_j) {
+            index_list.push(index);
           }
-        } else {
-          index = parseInt(index_set);
-          console.log("index:", index);
-          index_list.push(index);
+        } catch (_error) {
+          error = _error;
+          alert("Syntax error");
         }
+      } else {
+        index = parseInt(index_set);
+        console.log("index:", index);
+        index_list.push(index);
       }
-      console.log("index_list:", index_list);
-      _results = [];
-      for (_k = 0, _len1 = index_list.length; _k < _len1; _k++) {
-        index = index_list[_k];
-        if ($('#block_group').val() === "primary") {
-          console.log("block_group:", $('#block_group').val());
-          console.log("row:", $('#Primary_' + index.toString()));
-          _results.push($('#Primary_' + index.toString()).find('.trait_value_input').val("x"));
-        } else if ($('#block_group').val() === "other") {
-          console.log("block_group:", $('#block_group').val());
-          console.log("row:", $('#Other_' + index.toString()));
-          _results.push($('#Other_' + index.toString()).find('.trait_value_input').val("x"));
-        } else {
-          _results.push(void 0);
-        }
+    }
+    console.log("index_list:", index_list);
+    _results = [];
+    for (_k = 0, _len1 = index_list.length; _k < _len1; _k++) {
+      index = index_list[_k];
+      if ($('#block_group').val() === "primary") {
+        console.log("block_group:", $('#block_group').val());
+        console.log("row:", $('#Primary_' + index.toString()));
+        _results.push($('#Primary_' + index.toString()).find('.trait_value_input').val("x"));
+      } else if ($('#block_group').val() === "other") {
+        console.log("block_group:", $('#block_group').val());
+        console.log("row:", $('#Other_' + index.toString()));
+        _results.push($('#Other_' + index.toString()).find('.trait_value_input').val("x"));
+      } else {
+        _results.push(void 0);
       }
-      return _results;
-    };
-    $('#block_by_index').click(block_by_index);
-    hide_no_value = function() {
-      var _this = this;
-      return $('.value_se').each(function(_index, element) {
+    }
+    return _results;
+  };
+  $('#block_by_index').click(block_by_index);
+  hide_no_value = function() {
+    return $('.value_se').each((function(_this) {
+      return function(_index, element) {
         if ($(element).find('.trait_value_input').val() === 'x') {
           return $(element).hide();
         }
-      });
-    };
-    $('#hide_no_value').click(hide_no_value);
-    block_outliers = function() {
-      var _this = this;
-      return $('.outlier').each(function(_index, element) {
+      };
+    })(this));
+  };
+  $('#hide_no_value').click(hide_no_value);
+  block_outliers = function() {
+    return $('.outlier').each((function(_this) {
+      return function(_index, element) {
         return $(element).find('.trait_value_input').val('x');
-      });
-    };
-    $('#block_outliers').click(block_outliers);
-    reset_samples_table = function() {
-      var _this = this;
-      return $('.trait_value_input').each(function(_index, element) {
+      };
+    })(this));
+  };
+  $('#block_outliers').click(block_outliers);
+  reset_samples_table = function() {
+    return $('.trait_value_input').each((function(_this) {
+      return function(_index, element) {
         console.log("value is:", $(element).val());
         $(element).val($(element).data('value'));
         console.log("data-value is:", $(element).data('value'));
         return $(element).parents('.value_se').show();
-      });
-    };
-    $('#reset').click(reset_samples_table);
-    get_sample_table_data = function() {
-      var other_samples, primary_samples, samples,
-        _this = this;
-      samples = {};
-      primary_samples = [];
-      other_samples = [];
-      $('#sortable1').find('.value_se').each(function(_index, element) {
+      };
+    })(this));
+  };
+  $('#reset').click(reset_samples_table);
+  get_sample_table_data = function() {
+    var other_samples, primary_samples, samples;
+    samples = {};
+    primary_samples = [];
+    other_samples = [];
+    $('#sortable1').find('.value_se').each((function(_this) {
+      return function(_index, element) {
         var attribute_info, key, row_data, _ref;
         row_data = {};
         row_data.name = $.trim($(element).find('.column_name-Sample').text());
@@ -427,39 +434,38 @@
         }
         console.log("row_data is:", row_data);
         return primary_samples.push(row_data);
-      });
-      console.log("primary_samples is:", primary_samples);
-      samples.primary_samples = primary_samples;
-      samples.other_samples = other_samples;
-      return samples;
-    };
-    export_sample_table_data = function() {
-      var format, json_sample_data, sample_data;
-      sample_data = get_sample_table_data();
-      console.log("sample_data is:", sample_data);
-      json_sample_data = JSON.stringify(sample_data);
-      console.log("json_sample_data is:", json_sample_data);
-      $('input[name=export_data]').val(json_sample_data);
-      console.log("export_data is", $('input[name=export_data]').val());
-      format = $('#export_format').val();
-      if (format === "excel") {
-        $('#trait_data_form').attr('action', '/export_trait_excel');
-      } else {
-        $('#trait_data_form').attr('action', '/export_trait_csv');
-      }
-      console.log("action is:", $('#trait_data_form').attr('action'));
-      return $('#trait_data_form').submit();
-    };
-    $('#export').click(export_sample_table_data);
-    console.log("before registering block_outliers");
-    $('#block_outliers').click(block_outliers);
-    console.log("after registering block_outliers");
-    _.mixin(_.str.exports());
-    $('#edit_sample_lists').change(edit_data_change);
-    console.log("loaded");
-    make_table();
-    edit_data_change();
-    return console.log("end");
-  });
-
-}).call(this);
+      };
+    })(this));
+    console.log("primary_samples is:", primary_samples);
+    samples.primary_samples = primary_samples;
+    samples.other_samples = other_samples;
+    return samples;
+  };
+  export_sample_table_data = function() {
+    var format, json_sample_data, sample_data;
+    sample_data = get_sample_table_data();
+    console.log("sample_data is:", sample_data);
+    json_sample_data = JSON.stringify(sample_data);
+    console.log("json_sample_data is:", json_sample_data);
+    $('input[name=export_data]').val(json_sample_data);
+    console.log("export_data is", $('input[name=export_data]').val());
+    format = $('#export_format').val();
+    if (format === "excel") {
+      $('#trait_data_form').attr('action', '/export_trait_excel');
+    } else {
+      $('#trait_data_form').attr('action', '/export_trait_csv');
+    }
+    console.log("action is:", $('#trait_data_form').attr('action'));
+    return $('#trait_data_form').submit();
+  };
+  $('#export').click(export_sample_table_data);
+  console.log("before registering block_outliers");
+  $('#block_outliers').click(block_outliers);
+  console.log("after registering block_outliers");
+  _.mixin(_.str.exports());
+  $('#edit_sample_lists').change(edit_data_change);
+  console.log("loaded");
+  make_table();
+  edit_data_change();
+  return console.log("end");
+});
diff --git a/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js b/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js
index 9b9070ba..1a2ad637 100755
--- a/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js
+++ b/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js
@@ -1,52 +1,50 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var root;
+// Generated by CoffeeScript 1.7.1
+var root;
 
-  root = typeof exports !== "undefined" && exports !== null ? exports : this;
+root = typeof exports !== "undefined" && exports !== null ? exports : this;
 
-  $(function() {
-    var composite_mapping_fields, get_progress, mapping_method_fields, submit_special, toggle_enable_disable, update_time_remaining,
-      _this = this;
-    submit_special = function() {
-      var url;
-      console.log("In submit_special");
-      console.log("this is:", this);
-      console.log("$(this) is:", $(this));
-      url = $(this).data("url");
-      console.log("url is:", url);
-      $("#trait_data_form").attr("action", url);
-      return $("#trait_data_form").submit();
-    };
-    update_time_remaining = function(percent_complete) {
-      var minutes_remaining, now, period, total_seconds_remaining;
-      now = new Date();
-      period = now.getTime() - root.start_time;
-      console.log("period is:", period);
-      if (period > 8000) {
-        total_seconds_remaining = (period / percent_complete * (100 - percent_complete)) / 1000;
-        minutes_remaining = Math.round(total_seconds_remaining / 60);
-        if (minutes_remaining < 3) {
-          return $('#time_remaining').text(Math.round(total_seconds_remaining) + " seconds remaining");
-        } else {
-          return $('#time_remaining').text(minutes_remaining + " minutes remaining");
-        }
+$(function() {
+  var composite_mapping_fields, get_progress, mapping_method_fields, submit_special, toggle_enable_disable, update_time_remaining;
+  submit_special = function() {
+    var url;
+    console.log("In submit_special");
+    console.log("this is:", this);
+    console.log("$(this) is:", $(this));
+    url = $(this).data("url");
+    console.log("url is:", url);
+    $("#trait_data_form").attr("action", url);
+    return $("#trait_data_form").submit();
+  };
+  update_time_remaining = function(percent_complete) {
+    var minutes_remaining, now, period, total_seconds_remaining;
+    now = new Date();
+    period = now.getTime() - root.start_time;
+    console.log("period is:", period);
+    if (period > 8000) {
+      total_seconds_remaining = (period / percent_complete * (100 - percent_complete)) / 1000;
+      minutes_remaining = Math.round(total_seconds_remaining / 60);
+      if (minutes_remaining < 3) {
+        return $('#time_remaining').text(Math.round(total_seconds_remaining) + " seconds remaining");
+      } else {
+        return $('#time_remaining').text(minutes_remaining + " minutes remaining");
       }
+    }
+  };
+  get_progress = function() {
+    var params, params_str, temp_uuid, url;
+    console.log("temp_uuid:", $("#temp_uuid").val());
+    temp_uuid = $("#temp_uuid").val();
+    params = {
+      key: temp_uuid
     };
-    get_progress = function() {
-      var params, params_str, temp_uuid, url,
-        _this = this;
-      console.log("temp_uuid:", $("#temp_uuid").val());
-      temp_uuid = $("#temp_uuid").val();
-      params = {
-        key: temp_uuid
-      };
-      params_str = $.param(params);
-      url = "/get_temp_data?" + params_str;
-      console.log("url:", url);
-      $.ajax({
-        type: "GET",
-        url: url,
-        success: function(progress_data) {
+    params_str = $.param(params);
+    url = "/get_temp_data?" + params_str;
+    console.log("url:", url);
+    $.ajax({
+      type: "GET",
+      url: url,
+      success: (function(_this) {
+        return function(progress_data) {
           var percent_complete;
           percent_complete = progress_data['percent_complete'];
           console.log("in get_progress data:", progress_data);
@@ -58,11 +56,13 @@
           } else {
             return root.start_time = new Date().getTime();
           }
-        }
-      });
-      return false;
-    };
-    $("#interval_mapping_compute").click(function() {
+        };
+      })(this)
+    });
+    return false;
+  };
+  $("#interval_mapping_compute").click((function(_this) {
+    return function() {
       var form_data, url;
       console.log("In interval mapping");
       $("#progress_bar_container").modal();
@@ -92,17 +92,21 @@
       console.log("settingInterval");
       _this.my_timer = setInterval(get_progress, 1000);
       return false;
-    });
-    $('#suggestive').hide();
-    $('input[name=display_all]').change(function() {
+    };
+  })(this));
+  $('#suggestive').hide();
+  $('input[name=display_all]').change((function(_this) {
+    return function() {
       console.log("check");
       if ($('input[name=display_all]:checked').val() === "False") {
         return $('#suggestive').show();
       } else {
         return $('#suggestive').hide();
       }
-    });
-    $("#marker_regression_compute").click(function() {
+    };
+  })(this));
+  $("#marker_regression_compute").click((function(_this) {
+    return function() {
       var form_data, url;
       $("#progress_bar_container").modal();
       url = "/marker_regression";
@@ -129,8 +133,10 @@
       console.log("settingInterval");
       _this.my_timer = setInterval(get_progress, 1000);
       return false;
-    });
-    $("#plink_compute").click(function() {
+    };
+  })(this));
+  $("#plink_compute").click((function(_this) {
+    return function() {
       var form_data, url;
       $("#static_progress_bar_container").modal();
       url = "/marker_regression";
@@ -160,8 +166,10 @@
       console.log("settingInterval");
       _this.my_timer = setInterval(get_progress, 1000);
       return false;
-    });
-    $("#gemma_compute").click(function() {
+    };
+  })(this));
+  $("#gemma_compute").click((function(_this) {
+    return function() {
       var form_data, url;
       $("#static_progress_bar_container").modal();
       url = "/marker_regression";
@@ -191,24 +199,23 @@
       console.log("settingInterval");
       _this.my_timer = setInterval(get_progress, 1000);
       return false;
-    });
-    composite_mapping_fields = function() {
-      return $(".composite_fields").toggle();
     };
-    mapping_method_fields = function() {
-      return $(".mapping_method_fields").toggle();
-    };
-    $("#use_composite_choice").change(composite_mapping_fields);
-    $("#mapping_method_choice").change(mapping_method_fields);
-    toggle_enable_disable = function(elem) {
-      return $(elem).prop("disabled", !$(elem).prop("disabled"));
-    };
-    $("#choose_closet_control").change(function() {
-      return toggle_enable_disable("#control_locus");
-    });
-    return $("#display_all_lrs").change(function() {
-      return toggle_enable_disable("#suggestive_lrs");
-    });
+  })(this));
+  composite_mapping_fields = function() {
+    return $(".composite_fields").toggle();
+  };
+  mapping_method_fields = function() {
+    return $(".mapping_method_fields").toggle();
+  };
+  $("#use_composite_choice").change(composite_mapping_fields);
+  $("#mapping_method_choice").change(mapping_method_fields);
+  toggle_enable_disable = function(elem) {
+    return $(elem).prop("disabled", !$(elem).prop("disabled"));
+  };
+  $("#choose_closet_control").change(function() {
+    return toggle_enable_disable("#control_locus");
   });
-
-}).call(this);
+  return $("#display_all_lrs").change(function() {
+    return toggle_enable_disable("#suggestive_lrs");
+  });
+});
diff --git a/wqflask/wqflask/static/new/javascript/stats.js b/wqflask/wqflask/static/new/javascript/stats.js
index d874995f..6f67fcbe 100755
--- a/wqflask/wqflask/static/new/javascript/stats.js
+++ b/wqflask/wqflask/static/new/javascript/stats.js
@@ -1,110 +1,106 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-  var Stats, bxd_only;
+// Generated by CoffeeScript 1.7.1
+var Stats, bxd_only;
+
+Stats = (function() {
+  function Stats(the_values) {
+    this.the_values = the_values;
+  }
+
+  Stats.prototype.add_value = function(value) {
+    return this.the_values.push(value);
+  };
+
+  Stats.prototype.n_of_samples = function() {
+    return this.the_values.length;
+  };
+
+  Stats.prototype.sum = function() {
+    var total, value, _i, _len, _ref;
+    total = 0;
+    _ref = this.the_values;
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      value = _ref[_i];
+      total += value;
+    }
+    return total;
+  };
+
+  Stats.prototype.mean = function() {
+    return this.sum() / this.n_of_samples();
+  };
+
+  Stats.prototype.median = function() {
+    var is_odd, median_position, the_values_sorted;
+    is_odd = this.the_values.length % 2;
+    median_position = Math.floor(this.the_values.length / 2);
+    the_values_sorted = this.the_values.sort(function(a, b) {
+      return a - b;
+    });
+    if (is_odd) {
+      return the_values_sorted[median_position];
+    } else {
+      return (the_values_sorted[median_position] + the_values_sorted[median_position - 1]) / 2;
+    }
+  };
+
+  Stats.prototype.std_dev = function() {
+    var step_a, step_b, sum, value, _i, _len, _ref;
+    sum = 0;
+    _ref = this.the_values;
+    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+      value = _ref[_i];
+      step_a = Math.pow(value - this.mean(), 2);
+      sum += step_a;
+    }
+    step_b = sum / this.the_values.length;
+    return Math.sqrt(step_b);
+  };
 
-  Stats = (function() {
+  Stats.prototype.std_error = function() {
+    return this.std_dev() / Math.sqrt(this.n_of_samples());
+  };
 
-    function Stats(the_values) {
-      this.the_values = the_values;
-    }
+  Stats.prototype.min = function() {
+    return Math.min.apply(Math, this.the_values);
+  };
+
+  Stats.prototype.max = function() {
+    return Math.max.apply(Math, this.the_values);
+  };
+
+  Stats.prototype.range = function() {
+    return this.max() - this.min();
+  };
+
+  Stats.prototype.range_fold = function() {
+    return Math.pow(2, this.range());
+  };
+
+  Stats.prototype.interquartile = function() {
+    var iq, length, q1, q3;
+    length = this.the_values.length;
+    console.log("in interquartile the_values are:", this.the_values);
+    console.log("length is:", length);
+    q1 = this.the_values[Math.floor(length * .25)];
+    q3 = this.the_values[Math.floor(length * .75)];
+    iq = q3 - q1;
+    return Math.pow(2, iq);
+  };
+
+  return Stats;
+
+})();
+
+bxd_only = new Stats([3, 5, 7, 8]);
+
+console.log("[xred] bxd_only mean:", bxd_only.mean());
+
+console.log("[xgreen] bxd_only median:", bxd_only.median());
+
+console.log("[xpurple] bxd_only std_dev:", bxd_only.std_dev());
+
+console.log("[xmagenta] bxd_only std_error:", bxd_only.std_error());
+
+console.log("[xyellow] bxd_only min:", bxd_only.min());
 
-    Stats.prototype.add_value = function(value) {
-      return this.the_values.push(value);
-    };
-
-    Stats.prototype.n_of_samples = function() {
-      return this.the_values.length;
-    };
-
-    Stats.prototype.sum = function() {
-      var total, value, _i, _len, _ref;
-      total = 0;
-      _ref = this.the_values;
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        value = _ref[_i];
-        total += value;
-      }
-      return total;
-    };
-
-    Stats.prototype.mean = function() {
-      return this.sum() / this.n_of_samples();
-    };
-
-    Stats.prototype.median = function() {
-      var is_odd, median_position, the_values_sorted;
-      is_odd = this.the_values.length % 2;
-      median_position = Math.floor(this.the_values.length / 2);
-      the_values_sorted = this.the_values.sort(function(a, b) {
-        return a - b;
-      });
-      if (is_odd) {
-        return the_values_sorted[median_position];
-      } else {
-        return (the_values_sorted[median_position] + the_values_sorted[median_position - 1]) / 2;
-      }
-    };
-
-    Stats.prototype.std_dev = function() {
-      var step_a, step_b, sum, value, _i, _len, _ref;
-      sum = 0;
-      _ref = this.the_values;
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        value = _ref[_i];
-        step_a = Math.pow(value - this.mean(), 2);
-        sum += step_a;
-      }
-      step_b = sum / this.the_values.length;
-      return Math.sqrt(step_b);
-    };
-
-    Stats.prototype.std_error = function() {
-      return this.std_dev() / Math.sqrt(this.n_of_samples());
-    };
-
-    Stats.prototype.min = function() {
-      return Math.min.apply(Math, this.the_values);
-    };
-
-    Stats.prototype.max = function() {
-      return Math.max.apply(Math, this.the_values);
-    };
-
-    Stats.prototype.range = function() {
-      return this.max() - this.min();
-    };
-
-    Stats.prototype.range_fold = function() {
-      return Math.pow(2, this.range());
-    };
-
-    Stats.prototype.interquartile = function() {
-      var iq, length, q1, q3;
-      length = this.the_values.length;
-      console.log("in interquartile the_values are:", this.the_values);
-      console.log("length is:", length);
-      q1 = this.the_values[Math.floor(length * .25)];
-      q3 = this.the_values[Math.floor(length * .75)];
-      iq = q3 - q1;
-      return Math.pow(2, iq);
-    };
-
-    return Stats;
-
-  })();
-
-  bxd_only = new Stats([3, 5, 7, 8]);
-
-  console.log("[xred] bxd_only mean:", bxd_only.mean());
-
-  console.log("[xgreen] bxd_only median:", bxd_only.median());
-
-  console.log("[xpurple] bxd_only std_dev:", bxd_only.std_dev());
-
-  console.log("[xmagenta] bxd_only std_error:", bxd_only.std_error());
-
-  console.log("[xyellow] bxd_only min:", bxd_only.min());
-
-  window.Stats = Stats;
-
-}).call(this);
+window.Stats = Stats;
diff --git a/wqflask/wqflask/static/new/javascript/thank_you.js b/wqflask/wqflask/static/new/javascript/thank_you.js
index bffff179..c0a4f34b 100755
--- a/wqflask/wqflask/static/new/javascript/thank_you.js
+++ b/wqflask/wqflask/static/new/javascript/thank_you.js
@@ -1,10 +1,6 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-
-  $(function() {
-    console.log("Starting transform");
-    $('#login_out').text('Sign out').attr('href', '/logout').removeClass('modalize');
-    return console.log("Transformed to sign out I hope");
-  });
-
-}).call(this);
+// Generated by CoffeeScript 1.7.1
+$(function() {
+  console.log("Starting transform");
+  $('#login_out').text('Sign out').attr('href', '/logout').removeClass('modalize');
+  return console.log("Transformed to sign out I hope");
+});
diff --git a/wqflask/wqflask/static/new/javascript/validation.js b/wqflask/wqflask/static/new/javascript/validation.js
index 275bcaa0..9536491b 100755
--- a/wqflask/wqflask/static/new/javascript/validation.js
+++ b/wqflask/wqflask/static/new/javascript/validation.js
@@ -1,51 +1,47 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-
-  $(function() {
-    var remove_samples_is_valid, validate_remove_samples;
-    remove_samples_is_valid = function(input) {
-      var new_splats, pattern, splat, splats, _i, _len;
-      if (_.trim(input).length === 0) {
-        return true;
-      }
-      splats = input.split(",");
-      new_splats = (function() {
-        var _i, _len, _results;
-        _results = [];
-        for (_i = 0, _len = splats.length; _i < _len; _i++) {
-          input = splats[_i];
-          _results.push(_.trim(input));
-        }
-        return _results;
-      })();
-      console.log("new_splats:", new_splats);
-      pattern = /^\d+\s*(?:-\s*\d+)?\s*$/;
-      for (_i = 0, _len = new_splats.length; _i < _len; _i++) {
-        splat = new_splats[_i];
-        console.log("splat is:", splat);
-        if (!splat.match(pattern)) {
-          return false;
-        }
-      }
+// Generated by CoffeeScript 1.7.1
+$(function() {
+  var remove_samples_is_valid, validate_remove_samples;
+  remove_samples_is_valid = function(input) {
+    var new_splats, pattern, splat, splats, _i, _len;
+    if (_.trim(input).length === 0) {
       return true;
-    };
-    validate_remove_samples = function() {
-      /*
-      Check if input for the remove samples function is valid and notify the user if not
-      */
-
-      var input;
-      input = $('#remove_samples_field').val();
-      console.log("input is:", input);
-      if (remove_samples_is_valid(input)) {
-        console.log("input is valid");
-        return $('#remove_samples_invalid').hide();
-      } else {
-        console.log("input isn't valid");
-        return $('#remove_samples_invalid').show();
+    }
+    splats = input.split(",");
+    new_splats = (function() {
+      var _i, _len, _results;
+      _results = [];
+      for (_i = 0, _len = splats.length; _i < _len; _i++) {
+        input = splats[_i];
+        _results.push(_.trim(input));
+      }
+      return _results;
+    })();
+    console.log("new_splats:", new_splats);
+    pattern = /^\d+\s*(?:-\s*\d+)?\s*$/;
+    for (_i = 0, _len = new_splats.length; _i < _len; _i++) {
+      splat = new_splats[_i];
+      console.log("splat is:", splat);
+      if (!splat.match(pattern)) {
+        return false;
       }
-    };
-    return $('#remove_samples_field').change(validate_remove_samples);
-  });
+    }
+    return true;
+  };
+  validate_remove_samples = function() {
 
-}).call(this);
+    /*
+    Check if input for the remove samples function is valid and notify the user if not
+     */
+    var input;
+    input = $('#remove_samples_field').val();
+    console.log("input is:", input);
+    if (remove_samples_is_valid(input)) {
+      console.log("input is valid");
+      return $('#remove_samples_invalid').hide();
+    } else {
+      console.log("input isn't valid");
+      return $('#remove_samples_invalid').show();
+    }
+  };
+  return $('#remove_samples_field').change(validate_remove_samples);
+});
diff --git a/wqflask/wqflask/templates/interval_mapping.html b/wqflask/wqflask/templates/interval_mapping.html
index ad174b7b..25ee22ac 100755
--- a/wqflask/wqflask/templates/interval_mapping.html
+++ b/wqflask/wqflask/templates/interval_mapping.html
@@ -5,6 +5,7 @@
     <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />

     <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" />

     <link rel="stylesheet" type="text/css" href="/static/packages/TableTools/media/css/TableTools.css" />

+    <link rel="stylesheet" type="text/css" href="/static/new/css/interval_mapping.css" />

     <link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" />

     <link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" />

 {% endblock %}

@@ -18,9 +19,16 @@
             <h2>

                 Whole Genome Mapping

             </h2>

+            <form id="exportform" action="export" method="post">

+              <input type="hidden" id="data" name="data" value="">

+              <input type="hidden" id="filename" name="filename" value="">

+              <input type="submit" id="export" value="Download SVG">

+            </form>

         </div>

-        <div class="qtlcharts" id="topchart">

-            

+        <div id="chart_container">

+            <div class="qtlcharts" id="topchart">

+                

+            </div>

         </div>

         <div>

             <h2>

@@ -32,12 +40,10 @@
                 <tr>

                     <td>Index</td>

                     <td>LRS Score</td>

-                    {% if method == "qtl_reaper" %}

-                    <td>Additive Effect</td>

-                    {% endif %}

                     <td>Chr</td>

                     <td>Mb</td>

                     <td>Locus</td>

+                    <td>Additive Effect</td>

                 </tr>

             </thead>

             <tbody>

@@ -45,12 +51,10 @@
                 <tr>

                     <td>{{ loop.index }}</td>

                     <td>{{ marker.lrs_value|float }}</td>

-                    {% if method == "qtl_reaper" %}

-                    <td>{{ marker.additive|float }}</td>

-                    {% endif %}

                     <td>{{ marker.chr|int }}</td>

                     <td>{{ marker.Mb|float  }}</td>

                     <td>{{ marker.name }}</td>

+                    <td>{{ marker.additive|float }}</td>

                 </tr>

                 {% endfor %}

             </tbody>

@@ -73,8 +77,9 @@
     <script language="javascript" type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>

     <script language="javascript" type="text/javascript" src="/static/new/js_external/d3-tip.min.js"></script>

     <script language="javascript" type="text/javascript" src="/static/new/javascript/panelutil.js"></script>

+    <script language="javascript" type="text/javascript" src="/static/new/javascript/chr_interval_map.js"></script>

     <script language="javascript" type="text/javascript" src="/static/new/javascript/lod_chart.js"></script>

-    <script language="javascript" type="text/javascript" src="/static/new/javascript/interval_map_new.js"></script>

+    <script language="javascript" type="text/javascript" src="/static/new/javascript/create_interval_map.js"></script>

     <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.js"></script>

     <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.dataTables.min.js"></script>

     <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.scientific.js"></script>

diff --git a/wqflask/wqflask/templates/marker_regression.html b/wqflask/wqflask/templates/marker_regression.html
index defcd929..3dce5266 100755
--- a/wqflask/wqflask/templates/marker_regression.html
+++ b/wqflask/wqflask/templates/marker_regression.html
@@ -1,106 +1,121 @@
-{% extends "base.html" %}
-{% block title %}Marker Regression{% endblock %}
-{% block css %}
-    <link rel="stylesheet" type="text/css" href="/static/packages/jqplot/jquery.jqplot.min.css" />
-    <link rel="stylesheet" type="text/css" href="/static/new/css/marker_regression.css" />
-    <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />
-    <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" />
-    <link rel="stylesheet" type="text/css" href="/static/packages/TableTools/media/css/TableTools.css" />
-{% endblock %}
-{% block content %} <!-- Start of body -->
-
-    {{ header("Marker Regression",
-        '{}: {}'.format(this_trait.name, this_trait.description_fmt)) }}
-
-    <div class="container">
-        <div>
-            <h2>
-                Manhattan Plot
-            </h2>
-        </div>
-        <div id="manhattan_plot_container" class="manhattan_plot_container">
-            <div id="manhattan_plot" class="manhattan_plots">
-                
-            </div>
-        </div>
-        <div>
-            <h2>
-                Genome Association Results
-            </h2>
-        </div>
-
-        <table cellpadding="0" cellspacing="0" border="0" id="qtl_results" class="table table-hover table-striped table-bordered">
-            <thead>
-                <tr>
-                    <td>Index</td>
-                    <td>LOD Score</td>
-                    <td>Chr</td>
-                    <td>Mb</td>
-                    <td>Locus</td>
-                </tr>
-            </thead>
-            <tbody>
-                {% for marker in filtered_markers %}
-                    {% if marker.lod_score > lod_cutoff %}
-                    <tr>
-                        <td>{{loop.index}}</td>
-                        <td>{{marker.lod_score}}</td>
-                        <td>{{marker.chr}}</td>
-                        <td>{{marker.Mb}}</td>
-                        <td>{{marker.name}}</td>
-                    </tr>
-                    {% endif %}
-                {% endfor %}
-            </tbody>
-        </table>
-    </div>
-
-    <!-- End of body -->
-
-{% endblock %}
-
-{% block js %}  
-    <script>
-        js_data = {{ js_data | safe }}
-    </script>
-
-    <!--[if lt IE 9]>
-<!--        <script language="javascript" type="text/javascript" src="/static/packages/jqplot/excanvas.js"></script>-->
-    <![endif]-->
-    <script language="javascript" type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>
-    <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.js"></script>
-    <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.dataTables.min.js"></script>
-    <script language="javascript" type="text/javascript" src="/static/packages/DT_bootstrap/DT_bootstrap.js"></script>
-    <script language="javascript" type="text/javascript" src="/static/packages/TableTools/media/js/TableTools.min.js"></script>
-    <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
-    <script language="javascript" type="text/javascript" src="/static/new/javascript/chr_manhattan_plot.js"></script>
-    <script language="javascript" type="text/javascript" src="/static/new/javascript/marker_regression.js"></script>
-
-    
-    <script type="text/javascript" charset="utf-8">
-        $(document).ready( function () {
-            console.time("Creating table");
-            $('#qtl_results').dataTable( {
-                //"sDom": "<<'span3'l><'span3'T><'span4'f>'row-fluid'r>t<'row-fluid'<'span6'i><'span6'p>>",
-                "sDom": "lTftipr",
-                "oTableTools": {
-                    "aButtons": [
-                        "copy",
-                        "print",
-                        {
-                            "sExtends":    "collection",
-                            "sButtonText": 'Save <span class="caret" />',
-                            "aButtons":    [ "csv", "xls", "pdf" ]
-                        }
-                    ],
-                    "sSwfPath": "/static/packages/TableTools/media/swf/copy_csv_xls_pdf.swf"
-                },
-                "iDisplayLength": 50,
-                "bLengthChange": true,
-                "bDeferRender": true,
-                "bSortClasses": false
-            } );
-            console.timeEnd("Creating table");
-        });
-    </script>
+{% extends "base.html" %}

+{% block title %}Interval Mapping{% endblock %}

+{% block css %}

+<!--    <link rel="stylesheet" type="text/css" href="/static/new/css/interval_mapping.css" />-->

+    <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />

+    <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" />

+    <link rel="stylesheet" type="text/css" href="/static/packages/TableTools/media/css/TableTools.css" />

+    <link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" />

+    <link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" />

+{% endblock %}

+{% block content %} <!-- Start of body -->

+

+    {{ header("Mapping",

+        '{}: {}'.format(this_trait.name, this_trait.description_fmt)) }}

+

+    <div class="container">

+        <div>

+            <h2>

+                Whole Genome Mapping

+            </h2>

+            <form id="exportform" action="export" method="post">

+              <input type="hidden" id="data" name="data" value="">

+              <input type="hidden" id="filename" name="filename" value="">

+              <input type="submit" id="export" value="Download SVG">

+            </form>

+<!--            <button id="export_pdf" class="btn">Export PDF</button>-->

+        </div>

+        <div id="chart_container">

+            <div class="qtlcharts" id="topchart">

+                

+            </div>

+        </div>

+        <div>

+            <h2>

+                Results

+            </h2>

+        </div>

+        <table cellpadding="0" cellspacing="0" border="0" id="qtl_results" class="table table-hover table-striped table-bordered">

+            <thead>

+                <tr>

+                    <td>Index</td>

+                    <td>LOD Score</td>

+                    <td>Chr</td>

+                    <td>Mb</td>

+                    <td>Locus</td>

+                </tr>

+            </thead>

+            <tbody>

+                {% for marker in filtered_markers %}

+                    {% if marker.lod_score > lod_cutoff %}

+                    <tr>

+                        <td>{{loop.index}}</td>

+                        <td>{{marker.lod_score}}</td>

+                        <td>{{marker.chr}}</td>

+                        <td>{{marker.Mb}}</td>

+                        <td>{{marker.name}}</td>

+                    </tr>

+                    {% endif %}

+                {% endfor %}

+            </tbody>

+        </table>

+    

+    </div>

+

+    <!-- End of body -->

+

+{% endblock %}

+

+{% block js %}  

+    <script>

+        js_data = {{ js_data | safe }}

+    </script>

+

+    <!--[if lt IE 9]>

+<!--        <script language="javascript" type="text/javascript" src="/static/packages/jqplot/excanvas.js"></script>-->

+    <![endif]-->

+    <script language="javascript" type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>

+    <script language="javascript" type="text/javascript" src="/static/new/js_external/d3-tip.min.js"></script>

+<!--    <script language="javascript" type="text/javascript" src="/static/new/packages/jsPDF/jspdf.js"></script>

+    <script language="javascript" type="text/javascript" src="/static/new/packages/jsPDF/libs/FileSaver.js/FileSaver.js"></script>

+    <script language="javascript" type="text/javascript" src="/static/new/packages/jsPDF/libs/Blob.js/BlobBuilder.js"></script>

+    <script language="javascript" type="text/javascript" src="/static/new/packages/jsPDF/jspdf.plugin.standard_fonts_metrics.js"></script>

+    <script language="javascript" type="text/javascript" src="/static/new/packages/jsPDF/jspdf.plugin.from_html.js"></script>-->

+    <script language="javascript" type="text/javascript" src="/static/new/javascript/panelutil.js"></script>

+    <script language="javascript" type="text/javascript" src="/static/new/javascript/chr_manhattan_plot.js"></script>

+    <script language="javascript" type="text/javascript" src="/static/new/javascript/manhattan_plot.js"></script>

+    <script language="javascript" type="text/javascript" src="/static/new/javascript/create_manhattan_plot.js"></script>

+    <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.js"></script>

+    <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.dataTables.min.js"></script>

+    <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.scientific.js"></script>

+    <script language="javascript" type="text/javascript" src="/static/packages/DT_bootstrap/DT_bootstrap.js"></script>

+    <script language="javascript" type="text/javascript" src="/static/packages/TableTools/media/js/TableTools.min.js"></script>

+    <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>

+

+    <script type="text/javascript" charset="utf-8">

+        $(document).ready( function () {

+            console.time("Creating table");

+            $('#qtl_results').dataTable( {

+                //"sDom": "<<'span3'l><'span3'T><'span4'f>'row-fluid'r>t<'row-fluid'<'span6'i><'span6'p>>",

+                "sDom": "lTftipr",

+                "oTableTools": {

+                    "aButtons": [

+                        "copy",

+                        "print",

+                        {

+                            "sExtends":    "collection",

+                            "sButtonText": 'Save <span class="caret" />',

+                            "aButtons":    [ "csv", "xls", "pdf" ]

+                        }

+                    ],

+                    "sSwfPath": "/static/packages/TableTools/media/swf/copy_csv_xls_pdf.swf"

+                },

+                "iDisplayLength": 50,

+                "bLengthChange": true,

+                "bDeferRender": true,

+                "bSortClasses": false

+            } );

+            console.timeEnd("Creating table");

+        });

+    </script>

 {% endblock %}
\ No newline at end of file
diff --git a/wqflask/wqflask/templates/show_trait.html b/wqflask/wqflask/templates/show_trait.html
index ae4adf25..f20d66ed 100755
--- a/wqflask/wqflask/templates/show_trait.html
+++ b/wqflask/wqflask/templates/show_trait.html
@@ -2,7 +2,6 @@
 {% block title %}Trait Data and Analysis{% endblock %}
 {% block css %}
     <link rel="stylesheet" type="text/css" href="/static/new/css/marker_regression.css" />
-    <link rel="stylesheet" type="text/css" href="/static/new/css/interval_mapping.css" />
     <link rel="stylesheet" type="text/css" href="/static/new/css/bar_chart.css" />
     <link rel="stylesheet" type="text/css" href="/static/new/css/box_plot.css" />
     <link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" />
diff --git a/wqflask/wqflask/templates/show_trait_mapping_tools.html b/wqflask/wqflask/templates/show_trait_mapping_tools.html
index 07f33d28..f8542c78 100755
--- a/wqflask/wqflask/templates/show_trait_mapping_tools.html
+++ b/wqflask/wqflask/templates/show_trait_mapping_tools.html
@@ -9,12 +9,14 @@
                 <li>
                     <a href="#pylmm" data-toggle="tab">pyLMM</a>
                 </li>
+                {% if dataset.group.species == 'human' %}
                 <li>
                     <a href="#plink" data-toggle="tab">PLINK</a>
                 </li>
                 <li>
                     <a href="#gemma" data-toggle="tab">GEMMA</a>
                 </li>
+                {% endif %}
                 <!--<li>
                     <a href="#pair_scan" data-toggle="tab">Pair Scan</a>
                 </li>-->
@@ -22,7 +24,7 @@
 
             <div class="tab-content">
                 <div class="tab-pane active" id="interval_mapping">
-                    <div class="control-group">
+<!--                <div class="control-group">
                         <label for="mapping_method" class="control-label">Mapping Method</label>
                         <div class="controls" id="mapping_method_choice">
                             <select name="mapping_method">
@@ -42,7 +44,7 @@
                                 {% endfor %}
                             </select>
                         </div>
-                    </div>
+                    </div>-->
     
                     <div class="control-group mapping_method_fields">
                         <label for="mapping_permutations" class="control-label">Permutations (n)</label>
@@ -75,7 +77,7 @@
                         </div>
                     </div>
 
-                    <div class="control-group mapping_method_fields">
+<!--                    <div class="control-group mapping_method_fields">
                         <label class="control-label"><b>Composite Mapping</b></label>
                         <div class="controls" id="use_composite_choice">                      
                             <label class="radio inline">
@@ -113,7 +115,7 @@
                             <input name="control_locus" placeholder="rs12345" id="control_locus"
                                     type="text" disabled />
                         </div>
-                    </div>
+                    </div>-->
 
                     <div class="control-group">
                         <div class="controls">
@@ -149,7 +151,7 @@
                         </div>
                     </div>
                     
-<!--                    <div class="control-group">
+<!--                <div class="control-group">
                         <label for="marker_reg_permutations" class="control-label">Permutations (n)</label>
                         <div class="controls">
                             <input name="num_perm" value="2000" type="text" />
@@ -169,6 +171,7 @@
                     
                 </div>
                 
+                {% if dataset.group.species == 'human' %}
                 <div class="tab-pane" id="plink">
                     <div class="control-group" id="display_all_div">
                         <label class="control-label">Display all</label>
@@ -250,9 +253,8 @@
                             </button>
                         </div>
                     </div>
-                    
                 </div>
-
+                {% endif %}
             </div>
         </div>
     </div>
diff --git a/wqflask/wqflask/user_manager.py b/wqflask/wqflask/user_manager.py
index 2ee5bbca..12ff851e 100755
--- a/wqflask/wqflask/user_manager.py
+++ b/wqflask/wqflask/user_manager.py
@@ -164,7 +164,6 @@ class UsersManager(object):
         print("Users are:", self.users)
 
 
-
 class UserManager(object):
     def __init__(self, kw):
         self.user_id = kw['user_id']
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index 7a484898..6315260d 100755
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -260,6 +260,16 @@ def marker_regression_page():
 
     return rendered_template
 
+@app.route("/export", methods = ('POST',))
+def export():
+    print("request.form:", request.form)
+    svg_xml = request.form.get("data", "Invalid data")
+    filename = request.form.get("filename", "manhattan_plot_snp")
+    response = Response(svg_xml, mimetype="image/svg+xml")
+    response.headers["Content-Disposition"] = "attchment; filename=%s"%filename
+    return response
+
+
 @app.route("/interval_mapping", methods=('POST',))
 def interval_mapping_page():
     initial_start_vars = request.form