├── c-preload ├── .gitignore ├── tests │ ├── bad-includes │ └── testfile ├── compiler-wrapper ├── Makefile └── preload.c ├── public ├── favicon.ico ├── apple-touch-icon.png ├── apple-touch-icon-precomposed.png ├── apple-touch-icon-57x57-precomposed.png ├── apple-touch-icon-72x72-precomposed.png ├── apple-touch-icon-114x114-precomposed.png ├── apple-touch-icon-144x144-precomposed.png ├── code │ ├── helloworld.html │ ├── loop.html │ ├── bubble.html │ └── recursion.html ├── stylesheets │ ├── style.styl │ ├── style.css │ ├── sh_style.css │ └── bootstrap.min.css ├── javascripts │ ├── sh_asm.js │ ├── vendor │ │ ├── bootstrap.min.js │ │ ├── modernizr-2.6.1-respond-1.1.0.min.js │ │ └── raphael-min.js │ ├── sh_cpp.min.js │ ├── sh_main.min.js │ ├── app.coffee │ └── app.js └── index.html ├── .gitignore ├── package.json ├── README.md ├── app.coffee ├── routes └── index.coffee └── views └── 404.ejs /c-preload/.gitignore: -------------------------------------------------------------------------------- 1 | libpreload.so 2 | -------------------------------------------------------------------------------- /c-preload/tests/bad-includes: -------------------------------------------------------------------------------- 1 | #define DOTDOTFILE "../../../etc/passwd" 2 | #include DOTDOTFILE 3 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ynh-zz/cpp-to-assembly/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ynh-zz/cpp-to-assembly/HEAD/public/apple-touch-icon.png -------------------------------------------------------------------------------- /c-preload/tests/testfile: -------------------------------------------------------------------------------- 1 | // I am a test C++ program 2 | #include 3 | 4 | int foo() { 5 | return 1; 6 | } 7 | -------------------------------------------------------------------------------- /public/apple-touch-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ynh-zz/cpp-to-assembly/HEAD/public/apple-touch-icon-precomposed.png -------------------------------------------------------------------------------- /public/apple-touch-icon-57x57-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ynh-zz/cpp-to-assembly/HEAD/public/apple-touch-icon-57x57-precomposed.png -------------------------------------------------------------------------------- /public/apple-touch-icon-72x72-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ynh-zz/cpp-to-assembly/HEAD/public/apple-touch-icon-72x72-precomposed.png -------------------------------------------------------------------------------- /public/apple-touch-icon-114x114-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ynh-zz/cpp-to-assembly/HEAD/public/apple-touch-icon-114x114-precomposed.png -------------------------------------------------------------------------------- /public/apple-touch-icon-144x144-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ynh-zz/cpp-to-assembly/HEAD/public/apple-touch-icon-144x144-precomposed.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | lib-cov 2 | *.seed 3 | *.log 4 | *.csv 5 | *.dat 6 | *.out 7 | *.pid 8 | *.gz 9 | 10 | pids 11 | logs 12 | results 13 | 14 | node_modules 15 | npm-debug.log -------------------------------------------------------------------------------- /public/code/helloworld.html: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int main(void) 5 | { 6 | puts("Hello World!"); /* prints Hello World! */ 7 | return EXIT_SUCCESS; 8 | } 9 | -------------------------------------------------------------------------------- /c-preload/compiler-wrapper: -------------------------------------------------------------------------------- 1 | #/bin/sh 2 | 3 | export LD_PRELOAD=$(dirname $0)/libpreload.so 4 | export ALLOWED_FOR_CREATE=/tmp 5 | export ALLOWED_FOR_READ=/usr/local/include:/usr/include:/usr/lib:/usr/msp430:/usr/arm-linux-gnueabi/include:/tmp 6 | 7 | "$@" 8 | -------------------------------------------------------------------------------- /public/code/loop.html: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int main(void) 5 | { 6 | int i = 2, j; 7 | i = i * 20 + 2; 8 | for (j = 0; j < 100; j++) 9 | { 10 | i += j; 11 | } 12 | printf("The result is: %d\n", i); // 4992 13 | 14 | return EXIT_SUCCESS; 15 | } 16 | -------------------------------------------------------------------------------- /public/code/bubble.html: -------------------------------------------------------------------------------- 1 | void bubbleSort(int numbers[], int array_size) 2 | { 3 | int i, j, temp; 4 | 5 | for (i = (array_size - 1); i > 0; i--) 6 | { 7 | for (j = 1; j <= i; j++) 8 | { 9 | if (numbers[j-1] > numbers[j]) 10 | { 11 | temp = numbers[j-1]; 12 | numbers[j-1] = numbers[j]; 13 | numbers[j] = temp; 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Assembly", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "start": "forever start -c coffee app.coffee", 7 | "stop": "forever stop -c coffee app.coffee" 8 | }, 9 | "dependencies": { 10 | "express": "3.0.0rc4", 11 | "sys":"*", 12 | "forever":"*", 13 | "coffee-script":"*", 14 | "cluster":"*", 15 | 16 | "ejs": "*", 17 | "stylus": "*" 18 | } 19 | } -------------------------------------------------------------------------------- /public/code/recursion.html: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | // With tail recursion 5 | /* 6 | uint64_t fact_tail(int number, uint64_t accumulator) 7 | { 8 | if (number == 0) 9 | return accumulator; 10 | 11 | return fact_tail(number-1, number*accumulator); 12 | } 13 | uint64_t fact(int number) 14 | { 15 | return fact_tail(number, 1); 16 | } 17 | */ 18 | // Plain simple method 19 | uint64_t fact(int number) 20 | { 21 | if (number == 0) 22 | return 1; 23 | 24 | return number*fact(number-1); 25 | } 26 | 27 | int main() 28 | { 29 | printf("Factorial of 15: %lld\n", fact(15)); 30 | } 31 | -------------------------------------------------------------------------------- /public/stylesheets/style.styl: -------------------------------------------------------------------------------- 1 | body 2 | padding: 50px 3 | font: 14px "Lucida Grande", Helvetica, Arial, sans-serif 4 | a 5 | color: #00B7FF 6 | #connection 7 | position: absolute 8 | z-index:-9 9 | #connection svg 10 | z-index:-9 11 | #pconnection 12 | position: absolute 13 | z-index:-10 14 | #pconnection svg 15 | z-index:-10 16 | #code 17 | position:relative 18 | pre.pglow 19 | background: #B8FF79 20 | pre.glow 21 | background: #ffee79 22 | 23 | pre 24 | z-index:10 25 | border:0 26 | pre.sh_asm 27 | font-size:12px 28 | 29 | form 30 | h4 31 | float: left 32 | margin-top: 4px 33 | margin-bottom: 15px 34 | margin-right: 12px 35 | pre.sh_asm 36 | padding-top: 0px 37 | padding-bottom: 0px 38 | margin-bottom: 0px -------------------------------------------------------------------------------- /c-preload/Makefile: -------------------------------------------------------------------------------- 1 | all: libpreload.so 2 | 3 | libpreload.so: preload.c 4 | $(CC) -std=c99 -shared -O1 -fPIC $^ -o $@ -ldl 5 | 6 | .PHONY: test clean 7 | test: libpreload.so 8 | -@rm -f /tmp/allowed 9 | cat tests/testfile | ./compiler-wrapper g++ -std=c++0x -S -o /tmp/allowed -x c++ - 10 | @if [ ! -s /tmp/allowed ]; then echo "/tmp/allowed should exist"; false; fi 11 | -@rm -f /tmp/allowed 12 | cat tests/bad-includes | ./compiler-wrapper g++ -std=c++0x -S -o /tmp/allowed -x c++ - 2>&1 | grep 'Denying' 13 | @if [ -s /tmp/allowed ]; then echo "/tmp/allowed should not exist"; false; fi 14 | -@rm -f not-allowed 15 | cat tests/testfile | ./compiler-wrapper g++ -std=c++0x -S -o not-allowed -x c++ - 2>&1 | grep 'Denying' 16 | @if [ -e not-allowed ]; then echo "not-allowed should not exist"; false; fi 17 | 18 | clean: 19 | rm -f libpreload.so 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | C/C++ to assembly visualizer 2 | =============== 3 | 4 | C/C++ to assembly visualizer calls the command `gcc -c -Wa,-ahldn -g file.cpp`, then visualizes the interleaved C/C++ and assembly code on a fancy HTML web interface. 5 | 6 | **See Demo [assembly.ynh.io](http://assembly.ynh.io/)** 7 | 8 | Quick start 9 | ----------- 10 | 11 | 1. Clone the repo, `git clone https://github.com/ynh/cpp-to-assembly.git`, or [download as ZIP](https://github.com/ynh/cpp-to-assembly/zipball/master). 12 | 13 | 2. Install the application 14 | ```sh 15 | $ git clone https://github.com/ynh/cpp-to-assembly.git 16 | $ cd cpp-to-assembly 17 | $ npm install -d 18 | $ npm install coffee-script 19 | ``` 20 | 21 | 3. Start the server 22 | ```sh 23 | $ npm start 24 | ``` 25 | 26 | 4. Visit [localhost:8080](http://localhost:8080) 27 | 28 | Licence 29 | ------- 30 | GPL 3 or later 31 | 32 | http://gplv3.fsf.org/ 33 | -------------------------------------------------------------------------------- /public/stylesheets/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding: 50px; 3 | font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; 4 | } 5 | a { 6 | color: #00b7ff; 7 | } 8 | #connection { 9 | position: absolute; 10 | z-index: -9; 11 | } 12 | #connection svg { 13 | z-index: -9; 14 | } 15 | #pconnection { 16 | position: absolute; 17 | z-index: -10; 18 | } 19 | #pconnection svg { 20 | z-index: -10; 21 | } 22 | #code { 23 | position: relative; 24 | } 25 | #code pre.pglow { 26 | background: #b8ff79; 27 | } 28 | #code pre.glow { 29 | background: #ffee79; 30 | } 31 | #code pre { 32 | z-index: 10; 33 | border: 0; 34 | } 35 | #code pre.sh_asm { 36 | font-size: 12px; 37 | } 38 | form h4 { 39 | float: left; 40 | margin-top: 4px; 41 | margin-bottom: 15px; 42 | margin-right: 12px; 43 | } 44 | pre.sh_asm { 45 | padding-top: 0px; 46 | padding-bottom: 0px; 47 | margin-bottom: 0px; 48 | } 49 | -------------------------------------------------------------------------------- /app.coffee: -------------------------------------------------------------------------------- 1 | cluster = require('cluster') 2 | numCPUs = require('os').cpus().length 3 | 4 | if cluster.isMaster 5 | for i in [1..numCPUs] 6 | cluster.fork() 7 | else 8 | express = require('express') 9 | routes = require('./routes') 10 | http = require('http') 11 | path = require('path') 12 | 13 | app = express() 14 | 15 | app.configure ()-> 16 | app.set('port', process.env.PORT || 8080) 17 | app.set('views', __dirname + '/views') 18 | app.set('view engine', 'ejs') 19 | app.use(express.favicon()) 20 | # app.use(express.logger('dev')) 21 | app.use(express.bodyParser()) 22 | app.use(express.methodOverride()) 23 | app.use(express.cookieParser('your secret here')) 24 | app.use(express.session()) 25 | app.use(app.router) 26 | app.use(require('stylus').middleware(__dirname + '/public')) 27 | app.use(express.static(path.join(__dirname, 'public'))) 28 | app.use routes.error404 29 | 30 | #app.configure 'development', ()-> 31 | # app.use(express.errorHandler()) 32 | 33 | app.post '/compile', routes.indexpost 34 | 35 | http.createServer(app).listen app.get('port'), ()-> 36 | console.log("Express server listening on port " + app.get('port')) 37 | -------------------------------------------------------------------------------- /public/javascripts/sh_asm.js: -------------------------------------------------------------------------------- 1 | if (! this.sh_languages) { 2 | this.sh_languages = {}; 3 | } 4 | sh_languages['asm'] = [ 5 | [ 6 | [ 7 | /\b(?:external|open|include|[A-Z][\w']*(?=\.))\b/g, 8 | 'sh_preproc', 9 | -1 10 | ], 11 | [ 12 | /\t\t(?:[^ .%$-]*)/g, 13 | 'sh_function', 14 | -1 15 | ], 16 | [ 17 | /(?:[%][^\),]*)/g, 18 | 'sh_todo', 19 | -1 20 | ], 21 | [ 22 | /(?:[0-9A-F]+)\b/gi, 23 | 'sh_comment', 24 | -1 25 | ], 26 | [ 27 | /(?:[$]?[-]?[0-9]+)\b/g, 28 | 'sh_number', 29 | -1 30 | ], 31 | 32 | [ 33 | /"/g, 34 | 'sh_string', 35 | 1 36 | ], 37 | 38 | 39 | [ 40 | /(?:[$]?[\.]?[^ \t\:]*:)\b/g, 41 | 'sh_keyword', 42 | -1 43 | ], 44 | 45 | [ 46 | /(?:[$]?[\.][^ \t\:]*[:]?)/g, 47 | 'sh_type', 48 | -1 49 | ], 50 | [ 51 | /\(\*/g, 52 | 'sh_comment', 53 | 2 54 | ], 55 | 56 | 57 | [ 58 | /\{|\}/g, 59 | 'sh_cbracket', 60 | -1 61 | ] 62 | ], 63 | [ 64 | [ 65 | /$/g, 66 | null, 67 | -2 68 | ], 69 | [ 70 | /\\(?:\\|")/g, 71 | null, 72 | -1 73 | ], 74 | [ 75 | /"/g, 76 | 'sh_string', 77 | -2 78 | ] 79 | ], 80 | [ 81 | [ 82 | /\*\)/g, 83 | 'sh_comment', 84 | -2 85 | ], 86 | [ 87 | /\(\*/g, 88 | 'sh_comment', 89 | 2 90 | ] 91 | ] 92 | ]; 93 | -------------------------------------------------------------------------------- /c-preload/preload.c: -------------------------------------------------------------------------------- 1 | //Copied https://github.com/mattgodbolt/gcc-explorer/tree/master/c-preload 2 | #define _GNU_SOURCE 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | #ifndef O_CREAT 14 | #define O_CREAT 0100 15 | #endif 16 | 17 | static int allowed_env(const char* pathname, const char* envvar) { 18 | char* dirpathbuf = strdup(pathname); 19 | char* dirpath = dirname(dirpathbuf); 20 | 21 | char resolvedBuf[PATH_MAX]; 22 | char* resolved = realpath(dirpath, resolvedBuf); 23 | free(dirpathbuf); 24 | if (resolved == NULL) { 25 | return 0; 26 | } 27 | 28 | const char* okpath = getenv(envvar); 29 | if (okpath == NULL) { 30 | errno = EINVAL; 31 | return 0; 32 | } 33 | 34 | while (*okpath) { 35 | const char* end = strchrnul(okpath, ':'); 36 | if (strncmp(okpath, resolved, end - okpath) == 0) return 1; 37 | okpath = end; 38 | while (*okpath == ':') ++okpath; 39 | } 40 | 41 | //fprintf(stderr, "Access to \"%s\" denied by gcc-explorer policy\n", pathname); 42 | errno = EACCES; 43 | return 0; 44 | } 45 | 46 | static int allowed(const char* pathname, int flags) { 47 | if (flags & O_CREAT) 48 | return allowed_env(pathname, "ALLOWED_FOR_CREATE"); 49 | else 50 | return allowed_env(pathname, "ALLOWED_FOR_READ"); 51 | } 52 | 53 | int open(const char *pathname, int flags, mode_t mode) { 54 | static int (*real_open)(const char*, int, mode_t) = NULL; 55 | if (!real_open) real_open = dlsym(RTLD_NEXT, "open"); 56 | 57 | if (!allowed(pathname, flags)) { 58 | return -1; 59 | } 60 | 61 | return real_open(pathname, flags, mode); 62 | } 63 | 64 | int creat(const char *pathname, mode_t mode) { 65 | static int (*real_creat)(const char*, mode_t) = NULL; 66 | if (!real_creat) real_creat = dlsym(RTLD_NEXT, "creat"); 67 | 68 | if (!allowed(pathname, O_CREAT)) { 69 | return -1; 70 | } 71 | 72 | return real_creat(pathname, mode); 73 | } 74 | 75 | FILE* fopen(const char* name, const char* mode) { 76 | static FILE* (*real_fopen)(const char*, const char*) = NULL; 77 | if (!real_fopen) real_fopen = dlsym(RTLD_NEXT, "fopen"); 78 | 79 | if (!allowed(name, (mode[0] == 'r') ? 0 : O_CREAT)) { 80 | return NULL; 81 | } 82 | 83 | return real_fopen(name, mode); 84 | } 85 | -------------------------------------------------------------------------------- /public/javascripts/vendor/bootstrap.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bootstrap.js by @fat & @mdo 3 | * plugins: bootstrap-button.js 4 | * Copyright 2012 Twitter, Inc. 5 | * http://www.apache.org/licenses/LICENSE-2.0.txt 6 | */ 7 | !function(a){var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.button.defaults,c)};b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.data(),e=c.is("input")?"val":"html";a+="Text",d.resetText||c.data("resetText",c[e]()),c[e](d[a]||this.options[a]),setTimeout(function(){a=="loadingText"?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.closest('[data-toggle="buttons-radio"]');a&&a.find(".active").removeClass("active"),this.$element.toggleClass("active")},a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("button"),f=typeof c=="object"&&c;e||d.data("button",e=new b(this,f)),c=="toggle"?e.toggle():c&&e.setState(c)})},a.fn.button.defaults={loadingText:"loading..."},a.fn.button.Constructor=b,a(function(){a("body").on("click.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle")})})}(window.jQuery) 8 | !function(a){function d(){e(a(b)).removeClass("open")}function e(b){var c=b.attr("data-target"),d;return c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,"")),d=a(c),d.length||(d=b.parent()),d}var b="[data-toggle=dropdown]",c=function(b){var c=a(b).on("click.dropdown.data-api",this.toggle);a("html").on("click.dropdown.data-api",function(){c.parent().removeClass("open")})};c.prototype={constructor:c,toggle:function(b){var c=a(this),f,g;if(c.is(".disabled, :disabled"))return;return f=e(c),g=f.hasClass("open"),d(),g||(f.toggleClass("open"),c.focus()),!1},keydown:function(b){var c,d,f,g,h,i;if(!/(38|40|27)/.test(b.keyCode))return;c=a(this),b.preventDefault(),b.stopPropagation();if(c.is(".disabled, :disabled"))return;g=e(c),h=g.hasClass("open");if(!h||h&&b.keyCode==27)return c.click();d=a("[role=menu] li:not(.divider) a",g);if(!d.length)return;i=d.index(d.filter(":focus")),b.keyCode==38&&i>0&&i--,b.keyCode==40&&i 6 | # split input 7 | asm_lines = asm.split("\n") 8 | code_lines = code.split("\n") 9 | labels={} 10 | label_data={} 11 | currentlabel=null 12 | files=[] 13 | readmode=false 14 | currentline=0 15 | 16 | for asline in asm_lines 17 | linedata=/^[ ]+[0-9]+ (.*)/m.exec(asline) 18 | if linedata? 19 | # parse file start markers '.file "filename"' 20 | file=/^[ \t]*\.file[ \t]+([0-9]*)?[ ]?\"([^"]*)"/m.exec(linedata[1]) 21 | if file? 22 | fid=if file[1] then file[1] else 0 23 | 24 | fname=file[2] 25 | files[parseInt(fid)]= /(^test|\/test)/.test(fname) 26 | readmode=files[parseInt(fid)] 27 | currentline=0 28 | else 29 | # scan for labels 30 | label=/\.([^ :]*):/m.exec(linedata[1]) 31 | if label? 32 | if labels[label[1]]? 33 | labels[label[1]]++ 34 | else 35 | if currentlabel? and currentlabel < 1 36 | delete label_data[currentlabel] 37 | 38 | labels[label[1]]= 0 39 | label_data[label[1]]= {0:linedata[1]+"\n"} 40 | currentlabel=label[1] 41 | else if currentlabel? 42 | # parse .loc 43 | loc= /^[ \t]*.loc ([0-9]+) ([0-9]+)/.exec(linedata[1]) 44 | if loc? 45 | readmode=files[parseInt(loc[1])] 46 | currentline=if readmode then parseInt(loc[2]) else 0 47 | else 48 | if not label_data[currentlabel][currentline]? 49 | label_data[currentlabel][currentline]="" 50 | label_data[currentlabel][currentline]+= linedata[1]+"\n" 51 | if readmode 52 | labels[currentlabel]++ 53 | 54 | if currentlabel? and currentlabel < 1 55 | delete label_data[currentlabel] 56 | {code:code_lines,asm:label_data} 57 | 58 | 59 | exports.error404 = (req, res)-> 60 | res.status(404) 61 | res.render('404', { title: 'C/C++ to Assembly' }) 62 | 63 | exports.indexpost = (req, res)-> 64 | optimize=if req.body.optimize? then "-O2" else "" 65 | lang=if req.body.language=="c" then "c" else "cpp" 66 | 67 | # generate file name 68 | fileid=Math.floor(Math.random()*1000000001) 69 | compiler=if req.body.arm then "arm-linux-gnueabi-g++-4.6" else "gcc" 70 | asm=if req.body.intel_asm then "-masm=intel" else "" 71 | 72 | allowedstandards = [ 73 | 'c++11' 74 | 'c++14' 75 | 'c99' 76 | ] 77 | 78 | if allowedstandards.indexOf(req.body.standard) > -1 79 | standard = req.body.standard 80 | else 81 | standard = 'c99' 82 | 83 | #Write input to file 84 | fs.writeFile "/tmp/test#{fileid}.#{lang}", req.body.ccode, (err)-> 85 | if err 86 | res.json({error:"Server Error: unable to write to temp directory"}) 87 | else 88 | # execute GCC 89 | compilecmd = "c-preload/compiler-wrapper #{compiler} #{asm} " + 90 | "-std=#{standard} -c #{optimize} -Wa,-ald " + 91 | "-g /tmp/test#{fileid}.#{lang}" 92 | exec compilecmd, 93 | {timeout:10000,maxBuffer: 1024 * 1024*10}, 94 | (error, stdout, stderr)-> 95 | if error? 96 | # send error message to the client 97 | res.json({error:error.toString()}) 98 | fs.unlink("/tmp/test#{fileid}.#{lang}") 99 | fs.unlink("test#{fileid}.o") 100 | else 101 | # parse standard output 102 | blocks=decodeCode(stdout,req.body.ccode) 103 | 104 | # send result as json to the client 105 | res.json(blocks) 106 | 107 | # clean up 108 | fs.unlink("/tmp/test#{fileid}.#{lang}") 109 | fs.unlink("test#{fileid}.o") 110 | -------------------------------------------------------------------------------- /public/stylesheets/sh_style.css: -------------------------------------------------------------------------------- 1 | pre.sh_sourceCode { 2 | background-color: white; 3 | color: black; 4 | font-style: normal; 5 | font-weight: normal; 6 | } 7 | 8 | pre.sh_sourceCode .sh_keyword { color: blue; font-weight: bold; } /* language keywords */ 9 | pre.sh_sourceCode .sh_type { color: darkgreen; } /* basic types */ 10 | pre.sh_sourceCode .sh_usertype { color: teal; } /* user defined types */ 11 | pre.sh_sourceCode .sh_string { color: red; font-family: monospace; } /* strings and chars */ 12 | pre.sh_sourceCode .sh_regexp { color: orange; font-family: monospace; } /* regular expressions */ 13 | pre.sh_sourceCode .sh_specialchar { color: pink; font-family: monospace; } /* e.g., \n, \t, \\ */ 14 | pre.sh_sourceCode .sh_comment { color: brown; font-style: italic; } /* comments */ 15 | pre.sh_sourceCode .sh_number { color: purple; } /* literal numbers */ 16 | pre.sh_sourceCode .sh_preproc { color: darkblue; font-weight: bold; } /* e.g., #include, import */ 17 | pre.sh_sourceCode .sh_symbol { color: darkred; } /* e.g., <, >, + */ 18 | pre.sh_sourceCode .sh_function { color: black; font-weight: bold; } /* function calls and declarations */ 19 | pre.sh_sourceCode .sh_cbracket { color: red; } /* block brackets (e.g., {, }) */ 20 | pre.sh_sourceCode .sh_todo { font-weight: bold; background-color: cyan; } /* TODO and FIXME */ 21 | 22 | /* Predefined variables and functions (for instance glsl) */ 23 | pre.sh_sourceCode .sh_predef_var { color: darkblue; } 24 | pre.sh_sourceCode .sh_predef_func { color: darkblue; font-weight: bold; } 25 | 26 | /* for OOP */ 27 | pre.sh_sourceCode .sh_classname { color: teal; } 28 | 29 | /* line numbers (not yet implemented) */ 30 | pre.sh_sourceCode .sh_linenum { color: black; font-family: monospace; } 31 | 32 | /* Internet related */ 33 | pre.sh_sourceCode .sh_url { color: blue; text-decoration: underline; font-family: monospace; } 34 | 35 | /* for ChangeLog and Log files */ 36 | pre.sh_sourceCode .sh_date { color: blue; font-weight: bold; } 37 | pre.sh_sourceCode .sh_time, pre.sh_sourceCode .sh_file { color: darkblue; font-weight: bold; } 38 | pre.sh_sourceCode .sh_ip, pre.sh_sourceCode .sh_name { color: darkgreen; } 39 | 40 | /* for Prolog, Perl... */ 41 | pre.sh_sourceCode .sh_variable { color: darkgreen; } 42 | 43 | /* for LaTeX */ 44 | pre.sh_sourceCode .sh_italics { color: darkgreen; font-style: italic; } 45 | pre.sh_sourceCode .sh_bold { color: darkgreen; font-weight: bold; } 46 | pre.sh_sourceCode .sh_underline { color: darkgreen; text-decoration: underline; } 47 | pre.sh_sourceCode .sh_fixed { color: green; font-family: monospace; } 48 | pre.sh_sourceCode .sh_argument { color: darkgreen; } 49 | pre.sh_sourceCode .sh_optionalargument { color: purple; } 50 | pre.sh_sourceCode .sh_math { color: orange; } 51 | pre.sh_sourceCode .sh_bibtex { color: blue; } 52 | 53 | /* for diffs */ 54 | pre.sh_sourceCode .sh_oldfile { color: orange; } 55 | pre.sh_sourceCode .sh_newfile { color: darkgreen; } 56 | pre.sh_sourceCode .sh_difflines { color: blue; } 57 | 58 | /* for css */ 59 | pre.sh_sourceCode .sh_selector { color: purple; } 60 | pre.sh_sourceCode .sh_property { color: blue; } 61 | pre.sh_sourceCode .sh_value { color: darkgreen; font-style: italic; } 62 | 63 | /* other */ 64 | pre.sh_sourceCode .sh_section { color: black; font-weight: bold; } 65 | pre.sh_sourceCode .sh_paren { color: red; } 66 | pre.sh_sourceCode .sh_attribute { color: darkgreen; } 67 | -------------------------------------------------------------------------------- /public/javascripts/sh_cpp.min.js: -------------------------------------------------------------------------------- 1 | if(!this.sh_languages){this.sh_languages={}}sh_languages.cpp=[[[/(\b(?:class|struct|typename))([ \t]+)([A-Za-z0-9_]+)/g,["sh_keyword","sh_normal","sh_classname"],-1],[/\b(?:class|const_cast|delete|dynamic_cast|explicit|false|friend|inline|mutable|namespace|new|operator|private|protected|public|reinterpret_cast|static_cast|template|this|throw|true|try|typeid|typename|using|virtual)\b/g,"sh_keyword",-1],[/\/\/\//g,"sh_comment",1],[/\/\//g,"sh_comment",7],[/\/\*\*/g,"sh_comment",8],[/\/\*/g,"sh_comment",9],[/(\bstruct)([ \t]+)([A-Za-z0-9_]+)/g,["sh_keyword","sh_normal","sh_classname"],-1],[/^[ \t]*#(?:[ \t]*include)/g,"sh_preproc",10,1],[/^[ \t]*#(?:[ \t]*[A-Za-z0-9_]*)/g,"sh_preproc",-1],[/\b[+-]?(?:(?:0x[A-Fa-f0-9]+)|(?:(?:[\d]*\.)?[\d]+(?:[eE][+-]?[\d]+)?))u?(?:(?:int(?:8|16|32|64))|L)?\b/g,"sh_number",-1],[/"/g,"sh_string",13],[/'/g,"sh_string",14],[/\b(?:__asm|__cdecl|__declspec|__export|__far16|__fastcall|__fortran|__import|__pascal|__rtti|__stdcall|_asm|_cdecl|__except|_export|_far16|_fastcall|__finally|_fortran|_import|_pascal|_stdcall|__thread|__try|asm|auto|break|case|catch|cdecl|const|continue|default|do|else|enum|extern|for|goto|if|pascal|register|return|sizeof|static|struct|switch|typedef|union|volatile|while)\b/g,"sh_keyword",-1],[/\b(?:bool|char|double|float|int|long|short|signed|unsigned|void|wchar_t)\b/g,"sh_type",-1],[/~|!|%|\^|\*|\(|\)|-|\+|=|\[|\]|\\|:|;|,|\.|\/|\?|&|<|>|\|/g,"sh_symbol",-1],[/\{|\}/g,"sh_cbracket",-1],[/(?:[A-Za-z]|_)[A-Za-z0-9_]*(?=[ \t]*\()/g,"sh_function",-1],[/([A-Za-z](?:[^`~!@#$%&*()_=+{}|;:",<.>\/?'\\[\]\^\-\s]|[_])*)((?:<.*>)?)(\s+(?=[*&]*[A-Za-z][^`~!@#$%&*()_=+{}|;:",<.>\/?'\\[\]\^\-\s]*\s*[`~!@#$%&*()_=+{}|;:",<.>\/?'\\[\]\^\-\[\]]+))/g,["sh_usertype","sh_usertype","sh_normal"],-1]],[[/$/g,null,-2],[/(?:?)|(?:?)/g,"sh_url",-1],[/<\?xml/g,"sh_preproc",2,1],[//g,"sh_keyword",-1],[/<(?:\/)?[A-Za-z](?:[A-Za-z0-9_:.-]*)/g,"sh_keyword",6,1],[/&(?:[A-Za-z0-9]+);/g,"sh_preproc",-1],[/<(?:\/)?[A-Za-z][A-Za-z0-9]*(?:\/)?>/g,"sh_keyword",-1],[/<(?:\/)?[A-Za-z][A-Za-z0-9]*/g,"sh_keyword",6,1],[/@[A-Za-z]+/g,"sh_type",-1],[/(?:TODO|FIXME|BUG)(?:[:]?)/g,"sh_todo",-1]],[[/\?>/g,"sh_preproc",-2],[/([^=" \t>]+)([ \t]*)(=?)/g,["sh_type","sh_normal","sh_symbol"],-1],[/"/g,"sh_string",3]],[[/\\(?:\\|")/g,null,-1],[/"/g,"sh_string",-2]],[[/>/g,"sh_preproc",-2],[/([^=" \t>]+)([ \t]*)(=?)/g,["sh_type","sh_normal","sh_symbol"],-1],[/"/g,"sh_string",3]],[[/-->/g,"sh_comment",-2],[/ 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | C/C++ to Assembly 12 | 13 | 14 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 29 | 30 |
31 | 32 |
33 |

C/C++ to Assembly v2

34 |

35 | Just paste your C or C++ code and see how each line is translated into assembly by gcc (GNU Compiler Collection). 36 |

37 |

38 | The source code is available on GitHub 39 |

40 | 42 |
43 | 44 |

Paste your own code or

45 | 46 | 51 |
52 | 53 | Current compilation command: 54 | 57 | 59 | 61 | 62 | 63 | 71 |
72 | 73 |
74 |
75 |
76 |
77 |
78 |

79 | © ynh - Powered by Node.js 80 |

81 |
82 |
83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /public/javascripts/app.coffee: -------------------------------------------------------------------------------- 1 | class CodeBlock 2 | constructor:(@el,@c_codecode,@normaloff)-> 3 | getPos:()-> 4 | x: 0, 5 | y1: $(@el).offset().top-@normaloff, 6 | y2: $(@el).outerHeight()+$(@el).offset().top-@normaloff 7 | 8 | class AsmBlock 9 | constructor:(@el,@c_codecode,@normaloff)-> 10 | getPos:()-> 11 | start=$(@el).offset().top-@normaloff 12 | return { 13 | x: @parent.gap + 2, 14 | y1: start, 15 | y2: start+$(@el).outerHeight() 16 | } 17 | update:()-> 18 | right=@getPos() 19 | left=@parent.left.getPos() 20 | @path.attr("path","M" + (left.x) + " " + (left.y1) + " C " + ((right.x - left.x) / 2) + " " + (left.y1) + " " + ((right.x - left.x) / 2) + " " + (right.y1) + " " + (right.x) + " " + (right.y1) + " L " + (right.x) + " " + (right.y2) + " C " + ((right.x - left.x) / 2) + " " + (right.y2) + " " + ((right.x - left.x) / 2) + " " + (left.y2) + " " + (left.x) + " " + (left.y2) + " z") 21 | return 22 | 23 | class LineCanvas 24 | constructor:(@paper,@left,@max,@gap)-> 25 | @container=[] 26 | @paper.setSize(@gap,@max) 27 | add:(item)-> 28 | @container.push(item) 29 | update:()-> 30 | item.update() for item in @container 31 | return 32 | pcodeb=null; 33 | codeb=null; 34 | link=(asm_code,c_codecode,current,permanent)-> 35 | prefix=if permanent then "p" else "" 36 | color= if permanent then "#B8FF79" else "#ffee79" 37 | $(".#{prefix}glow").removeClass("#{prefix}glow") 38 | $("##{prefix}connection").remove() 39 | 40 | gap=asm_code.offset().left-c_codecode.offset().left-$(current).outerWidth()+4 41 | connection=$ """
""" 42 | $(current).parent().append(connection) 43 | connection.css 44 | "margin-left":$(current).outerWidth()-1 45 | top:c_codecode.offset().top-$(current).parent().parent().offset().top 46 | normaloff=c_codecode.offset().top 47 | max=Math.min(c_codecode.height(),asm_code.height()) 48 | #Create SVG canvas using Raphael.js 49 | paper = Raphael("#{prefix}connection", gap, max); 50 | lcanvas=new LineCanvas(paper,new CodeBlock(current, gap,normaloff),max,gap) 51 | $(current).addClass("#{prefix}glow") 52 | k2=$(current).data("id")+1 53 | $(".link#{k2}").each ()-> 54 | 55 | $(this).addClass("#{prefix}glow") 56 | asmb=new AsmBlock($(this),gap,normaloff) 57 | asmb.path= paper.path("M 0 0 1 1 z" ); 58 | asmb.path.attr({stroke: "none", fill: color}); 59 | asmb.parent=lcanvas; 60 | asmb.update() 61 | lcanvas.add(asmb) 62 | return 63 | if permanent 64 | pcodeb=lcanvas 65 | else 66 | codeb=lcanvas 67 | 68 | return 69 | render=(data)-> 70 | #if error message recived 71 | if data.error? 72 | #clean code block 73 | $("#code").html("") 74 | #reset submit button 75 | $("#compile").button('reset') 76 | #show error message 77 | $("#error").text(data.error).show() 78 | #scroll to error message 79 | $('html, body').animate { 80 | scrollTop: $("#error").offset().top-100 81 | }, 380 82 | else if data.code? 83 | #clean error message 84 | $("#error").text("").hide() 85 | #clean code block 86 | $("#code").html("

Code Comparison

") 87 | c_codecode=$("""
""") 88 | asm_code=$("""
""") 89 | asm_code.css 90 | "overflow":"auto" 91 | height:$(window).height()-100 92 | pcodeb=null 93 | codeb=null 94 | c_codecode.css 95 | "overflow":"auto" 96 | height:$(window).height()-100 97 | asm_code.scroll ()-> 98 | if codeb? 99 | codeb.update() 100 | if pcodeb? 101 | pcodeb.update() 102 | 103 | c_codecode.scroll ()-> 104 | if codeb? 105 | codeb.update() 106 | if pcodeb? 107 | pcodeb.update() 108 | $("#code").append c_codecode 109 | $("#code").append asm_code 110 | #render each recived data block 111 | $.each data.code, (k,v)-> 112 | code_block= $ """
"""
113 |       code_block.data "id",k
114 |       code_block.attr "id","code#{k}"
115 |       code_block.text(v)
116 |       code_block.addClass "sh_cpp code#{k}"
117 |       c_codecode.append code_block
118 |       return
119 |     $.each data.asm, (k,v)->
120 |       $.each v, (k2,v2)->
121 |         asm_block= $ """
"""
122 |  
123 |         asm_block.text(v2)
124 |         asm_block.addClass "sh_asm link#{k2}"
125 |         asm_code.append asm_block
126 |       return
127 |     c_codecode.find("pre").click ()->
128 |           link(asm_code,c_codecode,this,true)
129 |           k2=$(this).data("id")+1
130 |           el=this
131 |           first=$(".link#{k2}").first()
132 |           if first.length>0
133 |               asm_code.animate {
134 |                     scrollTop: first.offset().top-asm_code.offset().top+asm_code.scrollTop()-$(this).offset().top+asm_code.offset().top
135 |                }, 1
136 | 
137 |     c_codecode.find("pre").hover ()->
138 |           link(asm_code,c_codecode,this,false)
139 |         ,
140 |         ()->
141 |           codeb=null
142 |           $(".glow").removeClass("glow")
143 |           $("#connection").remove()
144 |           return
145 |       
146 |     sh_highlightDocument()
147 |     $("#compile").button('reset')
148 |     $('html, body').animate {
149 |           scrollTop: $("#code").offset().top-10
150 |     }, 380
151 | 
152 | #On page load
153 | $ ()->
154 |   #bind load sample code
155 |   $("#fileselect").dropdown()
156 |   $("#fileselect li a").click (event)->
157 |       event.preventDefault()
158 |       $("#loadcode").button('loading')
159 |       programm=$(this).data("programm")
160 |       lang=$(this).data("lang")
161 |       $("#lang_#{lang}").attr("checked", "checked")
162 |       $.get "code/#{programm}.html", (data)->
163 |         $("#ccode").val(data)
164 |         $("#loadcode").button('reset')
165 | 
166 |   #bind submit button
167 |   $("#compile").click (e)->
168 |     #Disable submit button
169 |     $(this).button('loading')
170 |     #start ajax request
171 |     $.post "/compile", $("form").serialize(), ( response )->
172 |       render(response)  
173 |     false
174 |   return
175 |  
176 |  


--------------------------------------------------------------------------------
/public/javascripts/app.js:
--------------------------------------------------------------------------------
  1 | var AsmBlock, CodeBlock, LineCanvas, codeb, link, pcodeb, render, updateCompileString;
  2 | 
  3 | CodeBlock = (function() {
  4 | 
  5 |   function CodeBlock(el, c_codecode, normaloff) {
  6 |     this.el = el;
  7 |     this.c_codecode = c_codecode;
  8 |     this.normaloff = normaloff;
  9 |   }
 10 | 
 11 |   CodeBlock.prototype.getPos = function() {
 12 |     return {
 13 |       x: 0,
 14 |       y1: $(this.el).offset().top - this.normaloff,
 15 |       y2: $(this.el).outerHeight() + $(this.el).offset().top - this.normaloff
 16 |     };
 17 |   };
 18 | 
 19 |   return CodeBlock;
 20 | 
 21 | })();
 22 | 
 23 | AsmBlock = (function() {
 24 | 
 25 |   function AsmBlock(el, c_codecode, normaloff) {
 26 |     this.el = el;
 27 |     this.c_codecode = c_codecode;
 28 |     this.normaloff = normaloff;
 29 |   }
 30 | 
 31 |   AsmBlock.prototype.getPos = function() {
 32 |     var start;
 33 |     start = $(this.el).offset().top - this.normaloff;
 34 |     return {
 35 |       x: this.parent.gap + 2,
 36 |       y1: start,
 37 |       y2: start + $(this.el).outerHeight()
 38 |     };
 39 |   };
 40 | 
 41 |   AsmBlock.prototype.update = function() {
 42 |     var left, right;
 43 |     right = this.getPos();
 44 |     left = this.parent.left.getPos();
 45 |     this.path.attr("path", "M" + left.x + " " + left.y1 + " C " + ((right.x - left.x) / 2) + " " + left.y1 + " " + ((right.x - left.x) / 2) + " " + right.y1 + " " + right.x + " " + right.y1 + " L " + right.x + " " + right.y2 + " C " + ((right.x - left.x) / 2) + " " + right.y2 + " " + ((right.x - left.x) / 2) + " " + left.y2 + " " + left.x + " " + left.y2 + " z");
 46 |   };
 47 | 
 48 |   return AsmBlock;
 49 | 
 50 | })();
 51 | 
 52 | LineCanvas = (function() {
 53 | 
 54 |   function LineCanvas(paper, left, max, gap) {
 55 |     this.paper = paper;
 56 |     this.left = left;
 57 |     this.max = max;
 58 |     this.gap = gap;
 59 |     this.container = [];
 60 |     this.paper.setSize(this.gap, this.max);
 61 |   }
 62 | 
 63 |   LineCanvas.prototype.add = function(item) {
 64 |     return this.container.push(item);
 65 |   };
 66 | 
 67 |   LineCanvas.prototype.update = function() {
 68 |     var item, _i, _len, _ref;
 69 |     _ref = this.container;
 70 |     for (_i = 0, _len = _ref.length; _i < _len; _i++) {
 71 |       item = _ref[_i];
 72 |       item.update();
 73 |     }
 74 |   };
 75 | 
 76 |   return LineCanvas;
 77 | 
 78 | })();
 79 | 
 80 | pcodeb = null;
 81 | 
 82 | codeb = null;
 83 | 
 84 | link = function(asm_code, c_codecode, current, permanent) {
 85 |   var color, connection, gap, k2, lcanvas, max, normaloff, paper, prefix;
 86 |   prefix = permanent ? "p" : "";
 87 |   color = permanent ? "#B8FF79" : "#ffee79";
 88 |   $("." + prefix + "glow").removeClass("" + prefix + "glow");
 89 |   $("#" + prefix + "connection").remove();
 90 |   gap = asm_code.offset().left - c_codecode.offset().left - $(current).outerWidth() + 4;
 91 |   connection = $("
"); 92 | $(current).parent().append(connection); 93 | connection.css({ 94 | "margin-left": $(current).outerWidth() - 1, 95 | top: c_codecode.offset().top - $(current).parent().parent().offset().top 96 | }); 97 | normaloff = c_codecode.offset().top; 98 | max = Math.min(c_codecode.height(), asm_code.height()); 99 | paper = Raphael("" + prefix + "connection", gap, max); 100 | lcanvas = new LineCanvas(paper, new CodeBlock(current, gap, normaloff), max, gap); 101 | $(current).addClass("" + prefix + "glow"); 102 | k2 = $(current).data("id") + 1; 103 | $(".link" + k2).each(function() { 104 | var asmb; 105 | $(this).addClass("" + prefix + "glow"); 106 | asmb = new AsmBlock($(this), gap, normaloff); 107 | asmb.path = paper.path("M 0 0 1 1 z"); 108 | asmb.path.attr({ 109 | stroke: "none", 110 | fill: color 111 | }); 112 | asmb.parent = lcanvas; 113 | asmb.update(); 114 | lcanvas.add(asmb); 115 | }); 116 | if (permanent) { 117 | pcodeb = lcanvas; 118 | } else { 119 | codeb = lcanvas; 120 | } 121 | }; 122 | 123 | render = function(data) { 124 | var asm_code, c_codecode; 125 | if (data.error != null) { 126 | $("#code").html(""); 127 | $("#compile").button('reset'); 128 | $("#error").text(data.error).show(); 129 | $('html, body').animate({ 130 | scrollTop: $("#error").offset().top - 100 131 | }, 380); 132 | } else if (data.code != null) { 133 | $("#error").text("").hide(); 134 | $("#code").html("

Code Comparison

"); 135 | c_codecode = $("
"); 136 | asm_code = $("
"); 137 | asm_code.css({ 138 | "overflow": "auto", 139 | height: $(window).height() - 100 140 | }); 141 | pcodeb = null; 142 | codeb = null; 143 | c_codecode.css({ 144 | "overflow": "auto", 145 | height: $(window).height() - 100 146 | }); 147 | asm_code.scroll(function() { 148 | if (codeb != null) codeb.update(); 149 | if (pcodeb != null) return pcodeb.update(); 150 | }); 151 | c_codecode.scroll(function() { 152 | if (codeb != null) codeb.update(); 153 | if (pcodeb != null) return pcodeb.update(); 154 | }); 155 | $("#code").append(c_codecode); 156 | $("#code").append(asm_code); 157 | $.each(data.code, function(k, v) { 158 | var code_block; 159 | code_block = $("
");
160 |       code_block.data("id", k);
161 |       code_block.attr("id", "code" + k);
162 |       code_block.text(v);
163 |       code_block.addClass("sh_cpp code" + k);
164 |       c_codecode.append(code_block);
165 |     });
166 |     $.each(data.asm, function(k, v) {
167 |       $.each(v, function(k2, v2) {
168 |         var asm_block;
169 |         asm_block = $("
");
170 |         asm_block.text(v2);
171 |         asm_block.addClass("sh_asm link" + k2);
172 |         return asm_code.append(asm_block);
173 |       });
174 |     });
175 |     c_codecode.find("pre").click(function() {
176 |       var el, first, k2;
177 |       link(asm_code, c_codecode, this, true);
178 |       k2 = $(this).data("id") + 1;
179 |       el = this;
180 |       first = $(".link" + k2).first();
181 |       if (first.length > 0) {
182 |         return asm_code.animate({
183 |           scrollTop: first.offset().top - asm_code.offset().top + asm_code.scrollTop() - $(this).offset().top + asm_code.offset().top
184 |         }, 1);
185 |       }
186 |     });
187 |   }
188 |   c_codecode.find("pre").hover(function() {
189 |     return link(asm_code, c_codecode, this, false);
190 |   }, function() {
191 |     codeb = null;
192 |     $(".glow").removeClass("glow");
193 |     $("#connection").remove();
194 |   });
195 |   sh_highlightDocument();
196 |   $("#compile").button('reset');
197 |   return $('html, body').animate({
198 |     scrollTop: $("#code").offset().top - 10
199 |   }, 380);
200 | };
201 | 
202 | updateCompileString = function() {
203 |   var compilestring = '';
204 |   compilestring += $("input[name=arm]").is(":checked") ? "arm-linux-gnueabi-g++-4.6 " : "gcc ";
205 |   compilestring += $("input[name='intel_asm']").is(":checked") ? "-masm=intel " : "";
206 |   compilestring += "-std=" + $("select[name='standard']").val() + " ";
207 |   compilestring += "-c ";
208 |   compilestring += $("input[name='optimize']").is(":checked") ? "-O2 " : "";
209 |   compilestring += "-Wa,-ald -g ";
210 |   compilestring += "myCode." + $("input[name=language]:checked").val();
211 | 
212 |   $('#compilation_string').html(compilestring);
213 | };
214 | 
215 | $(function() {
216 |   $("#fileselect").dropdown();
217 |   $("#fileselect li a").click(function(event) {
218 |     var lang, programm;
219 |     event.preventDefault();
220 |     $("#loadcode").button('loading');
221 |     programm = $(this).data("programm");
222 |     lang = $(this).data("lang");
223 |     $("#lang_" + lang).attr("checked", "checked");
224 |     return $.get("code/" + programm + ".html", function(data) {
225 |       $("#ccode").val(data);
226 |       return $("#loadcode").button('reset');
227 |     });
228 |   });
229 |   $("#compile").click(function(e) {
230 |     $(this).button('loading');
231 |     $.post("/compile", $("form").serialize(), function(response) {
232 |       return render(response);
233 |     });
234 |     return false;
235 |   });
236 |   updateCompileString();
237 |   $("#compilation-form").change(updateCompileString);
238 | });
239 | 


--------------------------------------------------------------------------------
/public/javascripts/vendor/modernizr-2.6.1-respond-1.1.0.min.js:
--------------------------------------------------------------------------------
 1 | /* Modernizr 2.6.1 (Custom Build) | MIT & BSD
 2 |  * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load
 3 |  */
 4 | ;window.Modernizr=function(a,b,c){function D(a){j.cssText=a}function E(a,b){return D(n.join(a+";")+(b||""))}function F(a,b){return typeof a===b}function G(a,b){return!!~(""+a).indexOf(b)}function H(a,b){for(var d in a){var e=a[d];if(!G(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function I(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:F(f,"function")?f.bind(d||b):f}return!1}function J(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return F(b,"string")||F(b,"undefined")?H(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),I(e,b,c))}function K(){e.input=function(c){for(var d=0,e=c.length;d',a,""].join(""),k.id=h,(l?k:m).innerHTML+=f,m.appendChild(k),l||(m.style.background="",g.appendChild(m)),i=c(k,a),l?k.parentNode.removeChild(k):m.parentNode.removeChild(m),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=F(e[d],"function"),F(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return J("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=function(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return J("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(['#modernizr:after{content:"',l,'";visibility:hidden}'].join(""),function(b){a=b.offsetHeight>=1}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var L in s)C(s,L)&&(x=L.toLowerCase(),e[x]=s[L](),v.push((e[x]?"":"no-")+x));return e.input||K(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},D(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return o.call(a)=="[object Function]"}function e(a){return typeof a=="string"}function f(){}function g(a){return!a||a=="loaded"||a=="complete"||a=="uninitialized"}function h(){var a=p.shift();q=1,a?a.t?m(function(){(a.t=="c"?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){a!="img"&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l={},o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};y[c]===1&&(r=1,y[c]=[],l=b.createElement(a)),a=="object"?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),a!="img"&&(r||y[c]===2?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i(b=="c"?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),p.length==1&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&o.call(a.opera)=="[object Opera]",l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return o.call(a)=="[object Array]"},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f #mq-test-1 { width: 42px; }';a.insertBefore(d,b);c=g.offsetWidth==42;a.removeChild(d);return{matches:c,media:h}}})(document);
 9 | 
10 | /*! Respond.js v1.1.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs  */
11 | (function(e){e.respond={};respond.update=function(){};respond.mediaQueriesSupported=e.matchMedia&&e.matchMedia("only all").matches;if(respond.mediaQueriesSupported){return}var w=e.document,s=w.documentElement,i=[],k=[],q=[],o={},h=30,f=w.getElementsByTagName("head")[0]||s,g=w.getElementsByTagName("base")[0],b=f.getElementsByTagName("link"),d=[],a=function(){var D=b,y=D.length,B=0,A,z,C,x;for(;B-1,minw:F.match(/\(min\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:F.match(/\(max\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}}j()},l,r,v=function(){var z,A=w.createElement("div"),x=w.body,y=false;A.style.cssText="position:absolute;font-size:1em;width:1em";if(!x){x=y=w.createElement("body");x.style.background="none"}x.appendChild(A);s.insertBefore(x,s.firstChild);z=A.offsetWidth;if(y){s.removeChild(x)}else{x.removeChild(A)}z=p=parseFloat(z);return z},p,j=function(I){var x="clientWidth",B=s[x],H=w.compatMode==="CSS1Compat"&&B||w.body[x]||B,D={},G=b[b.length-1],z=(new Date()).getTime();if(I&&l&&z-l-1?(p||v()):1)}if(!!J){J=parseFloat(J)*(J.indexOf(y)>-1?(p||v()):1)}if(!K.hasquery||(!A||!L)&&(A||H>=C)&&(L||H<=J)){if(!D[K.media]){D[K.media]=[]}D[K.media].push(k[K.rules])}}for(var E in q){if(q[E]&&q[E].parentNode===f){f.removeChild(q[E])}}for(var E in D){var M=w.createElement("style"),F=D[E].join("\n");M.type="text/css";M.media=E;f.insertBefore(M,G.nextSibling);if(M.styleSheet){M.styleSheet.cssText=F}else{M.appendChild(w.createTextNode(F))}q.push(M)}},n=function(x,z){var y=c();if(!y){return}y.open("GET",x,true);y.onreadystatechange=function(){if(y.readyState!=4||y.status!=200&&y.status!=304){return}z(y.responseText)};if(y.readyState==4){return}y.send(null)},c=(function(){var x=false;try{x=new XMLHttpRequest()}catch(y){x=new ActiveXObject("Microsoft.XMLHTTP")}return function(){return x}})();a();respond.update=a;function t(){j(true)}if(e.addEventListener){e.addEventListener("resize",t,false)}else{if(e.attachEvent){e.attachEvent("onresize",t)}}})(this);


--------------------------------------------------------------------------------
/public/stylesheets/bootstrap.min.css:
--------------------------------------------------------------------------------
  1 | /*!
  2 |  * Bootstrap v2.1.1
  3 |  *
  4 |  * Copyright 2012 Twitter, Inc
  5 |  * Licensed under the Apache License v2.0
  6 |  * http://www.apache.org/licenses/LICENSE-2.0
  7 |  *
  8 |  * Designed and built with all the love in the world @twitter by @mdo and @fat.
  9 |  */
 10 | .clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0;}
 11 | .clearfix:after{clear:both;}
 12 | .hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;}
 13 | .input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}
 14 | article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;}
 15 | audio,canvas,video{display:inline-block;*display:inline;*zoom:1;}
 16 | audio:not([controls]){display:none;}
 17 | html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;}
 18 | a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
 19 | a:hover,a:active{outline:0;}
 20 | sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;}
 21 | sup{top:-0.5em;}
 22 | sub{bottom:-0.25em;}
 23 | img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic;}
 24 | #map_canvas img{max-width:none;}
 25 | button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;}
 26 | button,input{*overflow:visible;line-height:normal;}
 27 | button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;}
 28 | button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;}
 29 | input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield;}
 30 | input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;}
 31 | textarea{overflow:auto;vertical-align:top;}
 32 | body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333333;background-color:#ffffff;}
 33 | a{color:#0088cc;text-decoration:none;}
 34 | a:hover{color:#005580;text-decoration:underline;}
 35 | .img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}
 36 | .img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);}
 37 | .img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px;}
 38 | .row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;}
 39 | .row:after{clear:both;}
 40 | [class*="span"]{float:left;min-height:1px;margin-left:20px;}
 41 | .container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;}
 42 | .span12{width:940px;}
 43 | .span11{width:860px;}
 44 | .span10{width:780px;}
 45 | .span9{width:700px;}
 46 | .span8{width:620px;}
 47 | .span7{width:540px;}
 48 | .span6{width:460px;}
 49 | .span5{width:380px;}
 50 | .span4{width:300px;}
 51 | .span3{width:220px;}
 52 | .span2{width:140px;}
 53 | .span1{width:60px;}
 54 | .offset12{margin-left:980px;}
 55 | .offset11{margin-left:900px;}
 56 | .offset10{margin-left:820px;}
 57 | .offset9{margin-left:740px;}
 58 | .offset8{margin-left:660px;}
 59 | .offset7{margin-left:580px;}
 60 | .offset6{margin-left:500px;}
 61 | .offset5{margin-left:420px;}
 62 | .offset4{margin-left:340px;}
 63 | .offset3{margin-left:260px;}
 64 | .offset2{margin-left:180px;}
 65 | .offset1{margin-left:100px;}
 66 | .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;}
 67 | .row-fluid:after{clear:both;}
 68 | .row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;}
 69 | .row-fluid [class*="span"]:first-child{margin-left:0;}
 70 | .row-fluid .span12{width:100%;*width:99.94680851063829%;}
 71 | .row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%;}
 72 | .row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%;}
 73 | .row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%;}
 74 | .row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%;}
 75 | .row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%;}
 76 | .row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%;}
 77 | .row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%;}
 78 | .row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%;}
 79 | .row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%;}
 80 | .row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%;}
 81 | .row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%;}
 82 | .row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%;}
 83 | .row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%;}
 84 | .row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%;}
 85 | .row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%;}
 86 | .row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%;}
 87 | .row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%;}
 88 | .row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%;}
 89 | .row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%;}
 90 | .row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%;}
 91 | .row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%;}
 92 | .row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%;}
 93 | .row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%;}
 94 | .row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%;}
 95 | .row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%;}
 96 | .row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%;}
 97 | .row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%;}
 98 | .row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%;}
 99 | .row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%;}
100 | .row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%;}
101 | .row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%;}
102 | .row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%;}
103 | .row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%;}
104 | .row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%;}
105 | .row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%;}
106 | [class*="span"].hide,.row-fluid [class*="span"].hide{display:none;}
107 | [class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right;}
108 | .container{margin-right:auto;margin-left:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";line-height:0;}
109 | .container:after{clear:both;}
110 | .container-fluid{padding-right:20px;padding-left:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";line-height:0;}
111 | .container-fluid:after{clear:both;}
112 | p{margin:0 0 10px;}
113 | .lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px;}
114 | small{font-size:85%;}
115 | strong{font-weight:bold;}
116 | em{font-style:italic;}
117 | cite{font-style:normal;}
118 | .muted{color:#999999;}
119 | .text-warning{color:#c09853;}
120 | .text-error{color:#b94a48;}
121 | .text-info{color:#3a87ad;}
122 | .text-success{color:#468847;}
123 | h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:1;color:inherit;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999999;}
124 | h1{font-size:36px;line-height:40px;}
125 | h2{font-size:30px;line-height:40px;}
126 | h3{font-size:24px;line-height:40px;}
127 | h4{font-size:18px;line-height:20px;}
128 | h5{font-size:14px;line-height:20px;}
129 | h6{font-size:12px;line-height:20px;}
130 | h1 small{font-size:24px;}
131 | h2 small{font-size:18px;}
132 | h3 small{font-size:14px;}
133 | h4 small{font-size:14px;}
134 | .page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eeeeee;}
135 | ul,ol{padding:0;margin:0 0 10px 25px;}
136 | ul ul,ul ol,ol ol,ol ul{margin-bottom:0;}
137 | li{line-height:20px;}
138 | ul.unstyled,ol.unstyled{margin-left:0;list-style:none;}
139 | dl{margin-bottom:20px;}
140 | dt,dd{line-height:20px;}
141 | dt{font-weight:bold;}
142 | dd{margin-left:10px;}
143 | .dl-horizontal{*zoom:1;}.dl-horizontal:before,.dl-horizontal:after{display:table;content:"";line-height:0;}
144 | .dl-horizontal:after{clear:both;}
145 | .dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
146 | .dl-horizontal dd{margin-left:180px;}
147 | hr{margin:20px 0;border:0;border-top:1px solid #eeeeee;border-bottom:1px solid #ffffff;}
148 | abbr[title]{cursor:help;border-bottom:1px dotted #999999;}
149 | abbr.initialism{font-size:90%;text-transform:uppercase;}
150 | blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:25px;}
151 | blockquote small{display:block;line-height:20px;color:#999999;}blockquote small:before{content:'\2014 \00A0';}
152 | blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eeeeee;border-left:0;}blockquote.pull-right p,blockquote.pull-right small{text-align:right;}
153 | blockquote.pull-right small:before{content:'';}
154 | blockquote.pull-right small:after{content:'\00A0 \2014';}
155 | q:before,q:after,blockquote:before,blockquote:after{content:"";}
156 | address{display:block;margin-bottom:20px;font-style:normal;line-height:20px;}
157 | code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
158 | code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;}
159 | pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}pre.prettyprint{margin-bottom:20px;}
160 | pre code{padding:0;color:inherit;background-color:transparent;border:0;}
161 | .pre-scrollable{max-height:340px;overflow-y:scroll;}
162 | .label,.badge{font-size:11.844px;font-weight:bold;line-height:14px;color:#ffffff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#999999;}
163 | .label{padding:1px 4px 2px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
164 | .badge{padding:1px 9px 2px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px;}
165 | a.label:hover,a.badge:hover{color:#ffffff;text-decoration:none;cursor:pointer;}
166 | .label-important,.badge-important{background-color:#b94a48;}
167 | .label-important[href],.badge-important[href]{background-color:#953b39;}
168 | .label-warning,.badge-warning{background-color:#f89406;}
169 | .label-warning[href],.badge-warning[href]{background-color:#c67605;}
170 | .label-success,.badge-success{background-color:#468847;}
171 | .label-success[href],.badge-success[href]{background-color:#356635;}
172 | .label-info,.badge-info{background-color:#3a87ad;}
173 | .label-info[href],.badge-info[href]{background-color:#2d6987;}
174 | .label-inverse,.badge-inverse{background-color:#333333;}
175 | .label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a;}
176 | .btn .label,.btn .badge{position:relative;top:-1px;}
177 | .btn-mini .label,.btn-mini .badge{top:0;}
178 | form{margin:0 0 20px;}
179 | fieldset{padding:0;margin:0;border:0;}
180 | legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333333;border:0;border-bottom:1px solid #e5e5e5;}legend small{font-size:15px;color:#999999;}
181 | label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px;}
182 | input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;}
183 | label{display:block;margin-bottom:5px;}
184 | select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:9px;font-size:14px;line-height:20px;color:#555555;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
185 | input,textarea,.uneditable-input{width:206px;}
186 | textarea{height:auto;}
187 | textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#ffffff;border:1px solid #cccccc;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear .2s, box-shadow linear .2s;-moz-transition:border linear .2s, box-shadow linear .2s;-o-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82, 168, 236, 0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);}
188 | input[type="radio"],input[type="checkbox"]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;line-height:normal;cursor:pointer;}
189 | input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto;}
190 | select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px;}
191 | select{width:220px;border:1px solid #cccccc;background-color:#ffffff;}
192 | select[multiple],select[size]{height:auto;}
193 | select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
194 | .uneditable-input,.uneditable-textarea{color:#999999;background-color:#fcfcfc;border-color:#cccccc;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;}
195 | .uneditable-input{overflow:hidden;white-space:nowrap;}
196 | .uneditable-textarea{width:auto;height:auto;}
197 | input:-moz-placeholder,textarea:-moz-placeholder{color:#999999;}
198 | input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999999;}
199 | input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999999;}
200 | .radio,.checkbox{min-height:18px;padding-left:18px;}
201 | .radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px;}
202 | .controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;}
203 | .radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle;}
204 | .radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;}
205 | .input-mini{width:60px;}
206 | .input-small{width:90px;}
207 | .input-medium{width:150px;}
208 | .input-large{width:210px;}
209 | .input-xlarge{width:270px;}
210 | .input-xxlarge{width:530px;}
211 | input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0;}
212 | .input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block;}
213 | input,textarea,.uneditable-input{margin-left:0;}
214 | .controls-row [class*="span"]+[class*="span"]{margin-left:20px;}
215 | input.span12, textarea.span12, .uneditable-input.span12{width:926px;}
216 | input.span11, textarea.span11, .uneditable-input.span11{width:846px;}
217 | input.span10, textarea.span10, .uneditable-input.span10{width:766px;}
218 | input.span9, textarea.span9, .uneditable-input.span9{width:686px;}
219 | input.span8, textarea.span8, .uneditable-input.span8{width:606px;}
220 | input.span7, textarea.span7, .uneditable-input.span7{width:526px;}
221 | input.span6, textarea.span6, .uneditable-input.span6{width:446px;}
222 | input.span5, textarea.span5, .uneditable-input.span5{width:366px;}
223 | input.span4, textarea.span4, .uneditable-input.span4{width:286px;}
224 | input.span3, textarea.span3, .uneditable-input.span3{width:206px;}
225 | input.span2, textarea.span2, .uneditable-input.span2{width:126px;}
226 | input.span1, textarea.span1, .uneditable-input.span1{width:46px;}
227 | .controls-row{*zoom:1;}.controls-row:before,.controls-row:after{display:table;content:"";line-height:0;}
228 | .controls-row:after{clear:both;}
229 | .controls-row [class*="span"]{float:left;}
230 | input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eeeeee;}
231 | input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent;}
232 | .control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853;}
233 | .control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;}
234 | .control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;}
235 | .control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853;}
236 | .control-group.error>label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48;}
237 | .control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;}
238 | .control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;}
239 | .control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48;}
240 | .control-group.success>label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847;}
241 | .control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;}
242 | .control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;}
243 | .control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847;}
244 | .control-group.info>label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad;}
245 | .control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad;}
246 | .control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;}
247 | .control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad;}
248 | input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;}
249 | .form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1;}.form-actions:before,.form-actions:after{display:table;content:"";line-height:0;}
250 | .form-actions:after{clear:both;}
251 | .help-block,.help-inline{color:#595959;}
252 | .help-block{display:block;margin-bottom:10px;}
253 | .help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px;}
254 | .input-append,.input-prepend{margin-bottom:5px;font-size:0;white-space:nowrap;}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;font-size:14px;vertical-align:top;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2;}
255 | .input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#eeeeee;border:1px solid #ccc;}
256 | .input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
257 | .input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546;}
258 | .input-prepend .add-on,.input-prepend .btn{margin-right:-1px;}
259 | .input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;}
260 | .input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;}
261 | .input-append .add-on,.input-append .btn{margin-left:-1px;}
262 | .input-append .add-on:last-child,.input-append .btn:last-child{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}
263 | .input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
264 | .input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;}
265 | .input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}
266 | input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;}
267 | .form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
268 | .form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px;}
269 | .form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;}
270 | .form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;}
271 | .form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px;}
272 | .form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;*zoom:1;margin-bottom:0;vertical-align:middle;}
273 | .form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none;}
274 | .form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block;}
275 | .form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0;}
276 | .form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle;}
277 | .form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0;}
278 | .control-group{margin-bottom:10px;}
279 | legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate;}
280 | .form-horizontal .control-group{margin-bottom:20px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";line-height:0;}
281 | .form-horizontal .control-group:after{clear:both;}
282 | .form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right;}
283 | .form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0;}.form-horizontal .controls:first-child{*padding-left:180px;}
284 | .form-horizontal .help-block{margin-bottom:0;}
285 | .form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block{margin-top:10px;}
286 | .form-horizontal .form-actions{padding-left:180px;}
287 | .btn{display:inline-block;*display:inline;*zoom:1;padding:4px 14px;margin-bottom:0;font-size:14px;line-height:20px;*line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333333;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(to bottom, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #bbbbbb;*border:0;border-bottom-color:#a2a2a2;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333333;background-color:#e6e6e6;*background-color:#d9d9d9;}
288 | .btn:active,.btn.active{background-color:#cccccc \9;}
289 | .btn:first-child{*margin-left:0;}
290 | .btn:hover{color:#333333;text-decoration:none;background-color:#e6e6e6;*background-color:#d9d9d9;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;}
291 | .btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
292 | .btn.active,.btn:active{background-color:#e6e6e6;background-color:#d9d9d9 \9;background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);}
293 | .btn.disabled,.btn[disabled]{cursor:default;background-color:#e6e6e6;background-image:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
294 | .btn-large{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;}
295 | .btn-large [class^="icon-"]{margin-top:2px;}
296 | .btn-small{padding:3px 9px;font-size:12px;line-height:18px;}
297 | .btn-small [class^="icon-"]{margin-top:0;}
298 | .btn-mini{padding:2px 6px;font-size:11px;line-height:17px;}
299 | .btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}
300 | .btn-block+.btn-block{margin-top:5px;}
301 | input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%;}
302 | .btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255, 255, 255, 0.75);}
303 | .btn{border-color:#c5c5c5;border-color:rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25);}
304 | .btn-primary{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #0088cc, #0044cc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));background-image:-webkit-linear-gradient(top, #0088cc, #0044cc);background-image:-o-linear-gradient(top, #0088cc, #0044cc);background-image:linear-gradient(to bottom, #0088cc, #0044cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);border-color:#0044cc #0044cc #002a80;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#0044cc;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#ffffff;background-color:#0044cc;*background-color:#003bb3;}
305 | .btn-primary:active,.btn-primary.active{background-color:#003399 \9;}
306 | .btn-warning{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#ffffff;background-color:#f89406;*background-color:#df8505;}
307 | .btn-warning:active,.btn-warning.active{background-color:#c67605 \9;}
308 | .btn-danger{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(to bottom, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#ffffff;background-color:#bd362f;*background-color:#a9302a;}
309 | .btn-danger:active,.btn-danger.active{background-color:#942a25 \9;}
310 | .btn-success{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(to bottom, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#ffffff;background-color:#51a351;*background-color:#499249;}
311 | .btn-success:active,.btn-success.active{background-color:#408140 \9;}
312 | .btn-info{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(to bottom, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#ffffff;background-color:#2f96b4;*background-color:#2a85a0;}
313 | .btn-info:active,.btn-info.active{background-color:#24748c \9;}
314 | .btn-inverse{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#363636;background-image:-moz-linear-gradient(top, #444444, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));background-image:-webkit-linear-gradient(top, #444444, #222222);background-image:-o-linear-gradient(top, #444444, #222222);background-image:linear-gradient(to bottom, #444444, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#222222;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#ffffff;background-color:#222222;*background-color:#151515;}
315 | .btn-inverse:active,.btn-inverse.active{background-color:#080808 \9;}
316 | button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;}
317 | button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px;}
318 | button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px;}
319 | button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px;}
320 | .btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
321 | .btn-link{border-color:transparent;cursor:pointer;color:#0088cc;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
322 | .btn-link:hover{color:#005580;text-decoration:underline;background-color:transparent;}
323 | .btn-link[disabled]:hover{color:#333333;text-decoration:none;}
324 | .hero-unit{padding:60px;margin-bottom:30px;background-color:#eeeeee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px;}
325 | .hero-unit p{font-size:18px;font-weight:200;line-height:30px;color:inherit;}
326 | .hidden{display:none;visibility:hidden;}
327 | .visible-phone{display:none !important;}
328 | .visible-tablet{display:none !important;}
329 | .hidden-desktop{display:none !important;}
330 | .visible-desktop{display:inherit !important;}
331 | .alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;color:#c09853;}
332 | .alert h4{margin:0;}
333 | .alert .close{position:relative;top:-2px;right:-21px;line-height:20px;}
334 | .alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#468847;}
335 | .alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;color:#b94a48;}
336 | .alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3a87ad;}
337 | .alert-block{padding-top:14px;padding-bottom:14px;}
338 | .alert-block>p,.alert-block>ul{margin-bottom:0;}
339 | .btn-group{position:relative;font-size:0;vertical-align:middle;white-space:nowrap;*margin-left:.3em;}.btn-group:first-child{*margin-left:0;}
340 | .btn-group+.btn-group{margin-left:5px;}
341 | .btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px;}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1;}
342 | .btn-toolbar .btn+.btn,.btn-toolbar .btn-group+.btn,.btn-toolbar .btn+.btn-group{margin-left:5px;}
343 | .btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
344 | .btn-group>.btn+.btn{margin-left:-1px;}
345 | .btn-group>.btn,.btn-group>.dropdown-menu{font-size:14px;}
346 | .btn-group>.btn-mini{font-size:11px;}
347 | .btn-group>.btn-small{font-size:12px;}
348 | .btn-group>.btn-large{font-size:16px;}
349 | .btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;}
350 | .btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;}
351 | .btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;}
352 | .btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;}
353 | .btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2;}
354 | .btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;}
355 | .btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);*padding-top:5px;*padding-bottom:5px;}
356 | .btn-group>.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:2px;*padding-bottom:2px;}
357 | .btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px;}
358 | .btn-group>.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px;*padding-top:7px;*padding-bottom:7px;}
359 | .btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);}
360 | .btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6;}
361 | .btn-group.open .btn-primary.dropdown-toggle{background-color:#0044cc;}
362 | .btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406;}
363 | .btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f;}
364 | .btn-group.open .btn-success.dropdown-toggle{background-color:#51a351;}
365 | .btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4;}
366 | .btn-group.open .btn-inverse.dropdown-toggle{background-color:#222222;}
367 | .btn .caret{margin-top:8px;margin-left:0;}
368 | .btn-mini .caret,.btn-small .caret,.btn-large .caret{margin-top:6px;}
369 | .btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-width:5px;}
370 | .dropup .btn-large .caret{border-bottom:5px solid #000000;border-top:0;}
371 | .btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;}
372 | .btn-group-vertical{display:inline-block;*display:inline;*zoom:1;}
373 | .btn-group-vertical .btn{display:block;float:none;width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
374 | .btn-group-vertical .btn+.btn{margin-left:0;margin-top:-1px;}
375 | .btn-group-vertical .btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}
376 | .btn-group-vertical .btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}
377 | .btn-group-vertical .btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0;}
378 | .btn-group-vertical .btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;}
379 | .dropup,.dropdown{position:relative;}
380 | .dropdown-toggle{*margin-bottom:-3px;}
381 | .dropdown-toggle:active,.open .dropdown-toggle{outline:0;}
382 | .caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000000;border-right:4px solid transparent;border-left:4px solid transparent;content:"";}
383 | .dropdown .caret{margin-top:8px;margin-left:2px;}
384 | .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#ffffff;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;}.dropdown-menu.pull-right{right:0;left:auto;}
385 | .dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;}
386 | .dropdown-menu a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333333;white-space:nowrap;}
387 | .dropdown-menu li>a:hover,.dropdown-menu li>a:focus,.dropdown-submenu:hover>a{text-decoration:none;color:#ffffff;background-color:#0088cc;background-color:#0081c2;background-image:-moz-linear-gradient(top, #0088cc, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));background-image:-webkit-linear-gradient(top, #0088cc, #0077b3);background-image:-o-linear-gradient(top, #0088cc, #0077b3);background-image:linear-gradient(to bottom, #0088cc, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);}
388 | .dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#ffffff;text-decoration:none;outline:0;background-color:#0088cc;background-color:#0081c2;background-image:-moz-linear-gradient(top, #0088cc, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));background-image:-webkit-linear-gradient(top, #0088cc, #0077b3);background-image:-o-linear-gradient(top, #0088cc, #0077b3);background-image:linear-gradient(to bottom, #0088cc, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);}
389 | .dropdown-menu .disabled>a,.dropdown-menu .disabled>a:hover{color:#999999;}
390 | .dropdown-menu .disabled>a:hover{text-decoration:none;background-color:transparent;cursor:default;}
391 | .open{*z-index:1000;}.open >.dropdown-menu{display:block;}
392 | .pull-right>.dropdown-menu{right:0;left:auto;}
393 | .dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000000;content:"";}
394 | .dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px;}
395 | .dropdown-submenu{position:relative;}
396 | .dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px;}
397 | .dropdown-submenu:hover>.dropdown-menu{display:block;}
398 | .dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#cccccc;margin-top:5px;margin-right:-10px;}
399 | .dropdown-submenu:hover>a:after{border-left-color:#ffffff;}
400 | .dropdown .dropdown-menu .nav-header{padding-left:20px;padding-right:20px;}
401 | .typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
402 | .alert-block p+p{margin-top:5px;}
403 | @media (min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit !important;} .visible-desktop{display:none !important ;} .visible-tablet{display:inherit !important;} .hidden-tablet{display:none !important;}}@media (max-width:767px){.hidden-desktop{display:inherit !important;} .visible-desktop{display:none !important;} .visible-phone{display:inherit !important;} .hidden-phone{display:none !important;}}@media (max-width:767px){body{padding-left:20px;padding-right:20px;} .navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-left:-20px;margin-right:-20px;} .container-fluid{padding:0;} .dl-horizontal dt{float:none;clear:none;width:auto;text-align:left;} .dl-horizontal dd{margin-left:0;} .container{width:auto;} .row-fluid{width:100%;} .row,.thumbnails{margin-left:0;} .thumbnails>li{float:none;margin-left:0;} [class*="span"],.row-fluid [class*="span"]{float:none;display:block;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} .span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} .input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} .input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto;} .controls-row [class*="span"]+[class*="span"]{margin-left:0;} .modal{position:fixed;top:20px;left:20px;right:20px;width:auto;margin:0;}.modal.fade.in{top:auto;}}@media (max-width:480px){.nav-collapse{-webkit-transform:translate3d(0, 0, 0);} .page-header h1 small{display:block;line-height:20px;} input[type="checkbox"],input[type="radio"]{border:1px solid #ccc;} .form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left;} .form-horizontal .controls{margin-left:0;} .form-horizontal .control-list{padding-top:0;} .form-horizontal .form-actions{padding-left:10px;padding-right:10px;} .modal{top:10px;left:10px;right:10px;} .modal-header .close{padding:10px;margin:-10px;} .carousel-caption{position:static;}}@media (min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;} .row:after{clear:both;} [class*="span"]{float:left;min-height:1px;margin-left:20px;} .container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px;} .span12{width:724px;} .span11{width:662px;} .span10{width:600px;} .span9{width:538px;} .span8{width:476px;} .span7{width:414px;} .span6{width:352px;} .span5{width:290px;} .span4{width:228px;} .span3{width:166px;} .span2{width:104px;} .span1{width:42px;} .offset12{margin-left:764px;} .offset11{margin-left:702px;} .offset10{margin-left:640px;} .offset9{margin-left:578px;} .offset8{margin-left:516px;} .offset7{margin-left:454px;} .offset6{margin-left:392px;} .offset5{margin-left:330px;} .offset4{margin-left:268px;} .offset3{margin-left:206px;} .offset2{margin-left:144px;} .offset1{margin-left:82px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;} .row-fluid:after{clear:both;} .row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;} .row-fluid [class*="span"]:first-child{margin-left:0;} .row-fluid .span12{width:100%;*width:99.94680851063829%;} .row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%;} .row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%;} .row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%;} .row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%;} .row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%;} .row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%;} .row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%;} .row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%;} .row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%;} .row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%;} .row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%;} .row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%;} .row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%;} .row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%;} .row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%;} .row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%;} .row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%;} .row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%;} .row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%;} .row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%;} .row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%;} .row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%;} .row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%;} .row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%;} .row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%;} .row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%;} .row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%;} .row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%;} .row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%;} .row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%;} .row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%;} .row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%;} .row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%;} .row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%;} .row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%;} input,textarea,.uneditable-input{margin-left:0;} .controls-row [class*="span"]+[class*="span"]{margin-left:20px;} input.span12, textarea.span12, .uneditable-input.span12{width:710px;} input.span11, textarea.span11, .uneditable-input.span11{width:648px;} input.span10, textarea.span10, .uneditable-input.span10{width:586px;} input.span9, textarea.span9, .uneditable-input.span9{width:524px;} input.span8, textarea.span8, .uneditable-input.span8{width:462px;} input.span7, textarea.span7, .uneditable-input.span7{width:400px;} input.span6, textarea.span6, .uneditable-input.span6{width:338px;} input.span5, textarea.span5, .uneditable-input.span5{width:276px;} input.span4, textarea.span4, .uneditable-input.span4{width:214px;} input.span3, textarea.span3, .uneditable-input.span3{width:152px;} input.span2, textarea.span2, .uneditable-input.span2{width:90px;} input.span1, textarea.span1, .uneditable-input.span1{width:28px;}}@media (min-width:1200px){.row{margin-left:-30px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;} .row:after{clear:both;} [class*="span"]{float:left;min-height:1px;margin-left:30px;} .container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px;} .span12{width:1170px;} .span11{width:1070px;} .span10{width:970px;} .span9{width:870px;} .span8{width:770px;} .span7{width:670px;} .span6{width:570px;} .span5{width:470px;} .span4{width:370px;} .span3{width:270px;} .span2{width:170px;} .span1{width:70px;} .offset12{margin-left:1230px;} .offset11{margin-left:1130px;} .offset10{margin-left:1030px;} .offset9{margin-left:930px;} .offset8{margin-left:830px;} .offset7{margin-left:730px;} .offset6{margin-left:630px;} .offset5{margin-left:530px;} .offset4{margin-left:430px;} .offset3{margin-left:330px;} .offset2{margin-left:230px;} .offset1{margin-left:130px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;} .row-fluid:after{clear:both;} .row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;} .row-fluid [class*="span"]:first-child{margin-left:0;} .row-fluid .span12{width:100%;*width:99.94680851063829%;} .row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%;} .row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%;} .row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%;} .row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%;} .row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%;} .row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%;} .row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%;} .row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%;} .row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%;} .row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%;} .row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%;} .row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%;} .row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%;} .row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%;} .row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%;} .row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%;} .row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%;} .row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%;} .row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%;} .row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%;} .row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%;} .row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%;} .row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%;} .row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%;} .row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%;} .row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%;} .row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%;} .row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%;} .row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%;} .row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%;} .row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%;} .row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%;} .row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%;} .row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%;} .row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%;} input,textarea,.uneditable-input{margin-left:0;} .controls-row [class*="span"]+[class*="span"]{margin-left:30px;} input.span12, textarea.span12, .uneditable-input.span12{width:1156px;} input.span11, textarea.span11, .uneditable-input.span11{width:1056px;} input.span10, textarea.span10, .uneditable-input.span10{width:956px;} input.span9, textarea.span9, .uneditable-input.span9{width:856px;} input.span8, textarea.span8, .uneditable-input.span8{width:756px;} input.span7, textarea.span7, .uneditable-input.span7{width:656px;} input.span6, textarea.span6, .uneditable-input.span6{width:556px;} input.span5, textarea.span5, .uneditable-input.span5{width:456px;} input.span4, textarea.span4, .uneditable-input.span4{width:356px;} input.span3, textarea.span3, .uneditable-input.span3{width:256px;} input.span2, textarea.span2, .uneditable-input.span2{width:156px;} input.span1, textarea.span1, .uneditable-input.span1{width:56px;} .thumbnails{margin-left:-30px;} .thumbnails>li{margin-left:30px;} .row-fluid .thumbnails{margin-left:0;}}@media (max-width:979px){body{padding-top:0;} .navbar-fixed-top,.navbar-fixed-bottom{position:static;} .navbar-fixed-top{margin-bottom:20px;} .navbar-fixed-bottom{margin-top:20px;} .navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px;} .navbar .container{width:auto;padding:0;} .navbar .brand{padding-left:10px;padding-right:10px;margin:0 0 0 -5px;} .nav-collapse{clear:both;} .nav-collapse .nav{float:none;margin:0 0 10px;} .nav-collapse .nav>li{float:none;} .nav-collapse .nav>li>a{margin-bottom:2px;} .nav-collapse .nav>.divider-vertical{display:none;} .nav-collapse .nav .nav-header{color:#777777;text-shadow:none;} .nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} .nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} .nav-collapse .dropdown-menu li+li a{margin-bottom:2px;} .nav-collapse .nav>li>a:hover,.nav-collapse .dropdown-menu a:hover{background-color:#f2f2f2;} .navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:hover{background-color:#111111;} .nav-collapse.in .btn-group{margin-top:5px;padding:0;} .nav-collapse .dropdown-menu{position:static;top:auto;left:auto;float:none;display:block;max-width:none;margin:0 15px;padding:0;background-color:transparent;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} .nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none;} .nav-collapse .dropdown-menu .divider{display:none;} .nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none;} .nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);} .navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111111;border-bottom-color:#111111;} .navbar .nav-collapse .nav.pull-right{float:none;margin-left:0;} .nav-collapse,.nav-collapse.collapse{overflow:hidden;height:0;} .navbar .btn-navbar{display:block;} .navbar-static .navbar-inner{padding-left:10px;padding-right:10px;}}@media (min-width:980px){.nav-collapse.collapse{height:auto !important;overflow:visible !important;}}
404 | 


--------------------------------------------------------------------------------
/public/javascripts/vendor/raphael-min.js:
--------------------------------------------------------------------------------
 1 | // ┌────────────────────────────────────────────────────────────────────┐ \\
 2 | // │ Raphaël 2.1.0 - JavaScript Vector Library                          │ \\
 3 | // ├────────────────────────────────────────────────────────────────────┤ \\
 4 | // │ Copyright © 2008-2012 Dmitry Baranovskiy (http://raphaeljs.com)    │ \\
 5 | // │ Copyright © 2008-2012 Sencha Labs (http://sencha.com)              │ \\
 6 | // ├────────────────────────────────────────────────────────────────────┤ \\
 7 | // │ Licensed under the MIT (http://raphaeljs.com/license.html) license.│ \\
 8 | // └────────────────────────────────────────────────────────────────────┘ \\
 9 | 
10 | (function(a){var b="0.3.4",c="hasOwnProperty",d=/[\.\/]/,e="*",f=function(){},g=function(a,b){return a-b},h,i,j={n:{}},k=function(a,b){var c=j,d=i,e=Array.prototype.slice.call(arguments,2),f=k.listeners(a),l=0,m=!1,n,o=[],p={},q=[],r=h,s=[];h=a,i=0;for(var t=0,u=f.length;tf*b.top){e=b.percents[y],p=b.percents[y-1]||0,t=t/b.top*(e-p),o=b.percents[y+1],j=b.anim[e];break}f&&d.attr(b.anim[b.percents[y]])}if(!!j){if(!k){for(var A in j)if(j[g](A))if(U[g](A)||d.paper.customAttributes[g](A)){u[A]=d.attr(A),u[A]==null&&(u[A]=T[A]),v[A]=j[A];switch(U[A]){case C:w[A]=(v[A]-u[A])/t;break;case"colour":u[A]=a.getRGB(u[A]);var B=a.getRGB(v[A]);w[A]={r:(B.r-u[A].r)/t,g:(B.g-u[A].g)/t,b:(B.b-u[A].b)/t};break;case"path":var D=bR(u[A],v[A]),E=D[1];u[A]=D[0],w[A]=[];for(y=0,z=u[A].length;yd)return d;while(cf?c=e:d=e,e=(d-c)/2+c}return e}function n(a,b){var c=o(a,b);return((l*c+k)*c+j)*c}function m(a){return((i*a+h)*a+g)*a}var g=3*b,h=3*(d-b)-g,i=1-g-h,j=3*c,k=3*(e-c)-j,l=1-j-k;return n(a,1/(200*f))}function cq(){return this.x+q+this.y+q+this.width+" × "+this.height}function cp(){return this.x+q+this.y}function cb(a,b,c,d,e,f){a!=null?(this.a=+a,this.b=+b,this.c=+c,this.d=+d,this.e=+e,this.f=+f):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)}function bH(b,c,d){b=a._path2curve(b),c=a._path2curve(c);var e,f,g,h,i,j,k,l,m,n,o=d?0:[];for(var p=0,q=b.length;p=0&&y<=1&&A>=0&&A<=1&&(d?n++:n.push({x:x.x,y:x.y,t1:y,t2:A}))}}return n}function bF(a,b){return bG(a,b,1)}function bE(a,b){return bG(a,b)}function bD(a,b,c,d,e,f,g,h){if(!(x(a,c)x(e,g)||x(b,d)x(f,h))){var i=(a*d-b*c)*(e-g)-(a-c)*(e*h-f*g),j=(a*d-b*c)*(f-h)-(b-d)*(e*h-f*g),k=(a-c)*(f-h)-(b-d)*(e-g);if(!k)return;var l=i/k,m=j/k,n=+l.toFixed(2),o=+m.toFixed(2);if(n<+y(a,c).toFixed(2)||n>+x(a,c).toFixed(2)||n<+y(e,g).toFixed(2)||n>+x(e,g).toFixed(2)||o<+y(b,d).toFixed(2)||o>+x(b,d).toFixed(2)||o<+y(f,h).toFixed(2)||o>+x(f,h).toFixed(2))return;return{x:l,y:m}}}function bC(a,b,c,d,e,f,g,h,i){if(!(i<0||bB(a,b,c,d,e,f,g,h)n)k/=2,l+=(m1?1:i<0?0:i;var j=i/2,k=12,l=[-0.1252,.1252,-0.3678,.3678,-0.5873,.5873,-0.7699,.7699,-0.9041,.9041,-0.9816,.9816],m=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],n=0;for(var o=0;od;d+=2){var f=[{x:+a[d-2],y:+a[d-1]},{x:+a[d],y:+a[d+1]},{x:+a[d+2],y:+a[d+3]},{x:+a[d+4],y:+a[d+5]}];b?d?e-4==d?f[3]={x:+a[0],y:+a[1]}:e-2==d&&(f[2]={x:+a[0],y:+a[1]},f[3]={x:+a[2],y:+a[3]}):f[0]={x:+a[e-2],y:+a[e-1]}:e-4==d?f[3]=f[2]:d||(f[0]={x:+a[d],y:+a[d+1]}),c.push(["C",(-f[0].x+6*f[1].x+f[2].x)/6,(-f[0].y+6*f[1].y+f[2].y)/6,(f[1].x+6*f[2].x-f[3].x)/6,(f[1].y+6*f[2].y-f[3].y)/6,f[2].x,f[2].y])}return c}function bx(){return this.hex}function bv(a,b,c){function d(){var e=Array.prototype.slice.call(arguments,0),f=e.join("␀"),h=d.cache=d.cache||{},i=d.count=d.count||[];if(h[g](f)){bu(i,f);return c?c(h[f]):h[f]}i.length>=1e3&&delete h[i.shift()],i.push(f),h[f]=a[m](b,e);return c?c(h[f]):h[f]}return d}function bu(a,b){for(var c=0,d=a.length;c',bl=bk.firstChild,bl.style.behavior="url(#default#VML)";if(!bl||typeof bl.adj!="object")return a.type=p;bk=null}a.svg=!(a.vml=a.type=="VML"),a._Paper=j,a.fn=k=j.prototype=a.prototype,a._id=0,a._oid=0,a.is=function(a,b){b=v.call(b);if(b=="finite")return!M[g](+a);if(b=="array")return a instanceof Array;return b=="null"&&a===null||b==typeof a&&a!==null||b=="object"&&a===Object(a)||b=="array"&&Array.isArray&&Array.isArray(a)||H.call(a).slice(8,-1).toLowerCase()==b},a.angle=function(b,c,d,e,f,g){if(f==null){var h=b-d,i=c-e;if(!h&&!i)return 0;return(180+w.atan2(-i,-h)*180/B+360)%360}return a.angle(b,c,f,g)-a.angle(d,e,f,g)},a.rad=function(a){return a%360*B/180},a.deg=function(a){return a*180/B%360},a.snapTo=function(b,c,d){d=a.is(d,"finite")?d:10;if(a.is(b,E)){var e=b.length;while(e--)if(z(b[e]-c)<=d)return b[e]}else{b=+b;var f=c%b;if(fb-d)return c-f+b}return c};var bn=a.createUUID=function(a,b){return function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(a,b).toUpperCase()}}(/[xy]/g,function(a){var b=w.random()*16|0,c=a=="x"?b:b&3|8;return c.toString(16)});a.setWindow=function(b){eve("raphael.setWindow",a,h.win,b),h.win=b,h.doc=h.win.document,a._engine.initWin&&a._engine.initWin(h.win)};var bo=function(b){if(a.vml){var c=/^\s+|\s+$/g,d;try{var e=new ActiveXObject("htmlfile");e.write(""),e.close(),d=e.body}catch(f){d=createPopup().document.body}var g=d.createTextRange();bo=bv(function(a){try{d.style.color=r(a).replace(c,p);var b=g.queryCommandValue("ForeColor");b=(b&255)<<16|b&65280|(b&16711680)>>>16;return"#"+("000000"+b.toString(16)).slice(-6)}catch(e){return"none"}})}else{var i=h.doc.createElement("i");i.title="Raphaël Colour Picker",i.style.display="none",h.doc.body.appendChild(i),bo=bv(function(a){i.style.color=a;return h.doc.defaultView.getComputedStyle(i,p).getPropertyValue("color")})}return bo(b)},bp=function(){return"hsb("+[this.h,this.s,this.b]+")"},bq=function(){return"hsl("+[this.h,this.s,this.l]+")"},br=function(){return this.hex},bs=function(b,c,d){c==null&&a.is(b,"object")&&"r"in b&&"g"in b&&"b"in b&&(d=b.b,c=b.g,b=b.r);if(c==null&&a.is(b,D)){var e=a.getRGB(b);b=e.r,c=e.g,d=e.b}if(b>1||c>1||d>1)b/=255,c/=255,d/=255;return[b,c,d]},bt=function(b,c,d,e){b*=255,c*=255,d*=255;var f={r:b,g:c,b:d,hex:a.rgb(b,c,d),toString:br};a.is(e,"finite")&&(f.opacity=e);return f};a.color=function(b){var c;a.is(b,"object")&&"h"in b&&"s"in b&&"b"in b?(c=a.hsb2rgb(b),b.r=c.r,b.g=c.g,b.b=c.b,b.hex=c.hex):a.is(b,"object")&&"h"in b&&"s"in b&&"l"in b?(c=a.hsl2rgb(b),b.r=c.r,b.g=c.g,b.b=c.b,b.hex=c.hex):(a.is(b,"string")&&(b=a.getRGB(b)),a.is(b,"object")&&"r"in b&&"g"in b&&"b"in b?(c=a.rgb2hsl(b),b.h=c.h,b.s=c.s,b.l=c.l,c=a.rgb2hsb(b),b.v=c.b):(b={hex:"none"},b.r=b.g=b.b=b.h=b.s=b.v=b.l=-1)),b.toString=br;return b},a.hsb2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"b"in a&&(c=a.b,b=a.s,a=a.h,d=a.o),a*=360;var e,f,g,h,i;a=a%360/60,i=c*b,h=i*(1-z(a%2-1)),e=f=g=c-i,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a];return bt(e,f,g,d)},a.hsl2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"l"in a&&(c=a.l,b=a.s,a=a.h);if(a>1||b>1||c>1)a/=360,b/=100,c/=100;a*=360;var e,f,g,h,i;a=a%360/60,i=2*b*(c<.5?c:1-c),h=i*(1-z(a%2-1)),e=f=g=c-i/2,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a];return bt(e,f,g,d)},a.rgb2hsb=function(a,b,c){c=bs(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g;f=x(a,b,c),g=f-y(a,b,c),d=g==0?null:f==a?(b-c)/g:f==b?(c-a)/g+2:(a-b)/g+4,d=(d+360)%6*60/360,e=g==0?0:g/f;return{h:d,s:e,b:f,toString:bp}},a.rgb2hsl=function(a,b,c){c=bs(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g,h,i;g=x(a,b,c),h=y(a,b,c),i=g-h,d=i==0?null:g==a?(b-c)/i:g==b?(c-a)/i+2:(a-b)/i+4,d=(d+360)%6*60/360,f=(g+h)/2,e=i==0?0:f<.5?i/(2*f):i/(2-2*f);return{h:d,s:e,l:f,toString:bq}},a._path2string=function(){return this.join(",").replace(Y,"$1")};var bw=a._preload=function(a,b){var c=h.doc.createElement("img");c.style.cssText="position:absolute;left:-9999em;top:-9999em",c.onload=function(){b.call(this),this.onload=null,h.doc.body.removeChild(this)},c.onerror=function(){h.doc.body.removeChild(this)},h.doc.body.appendChild(c),c.src=a};a.getRGB=bv(function(b){if(!b||!!((b=r(b)).indexOf("-")+1))return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:bx};if(b=="none")return{r:-1,g:-1,b:-1,hex:"none",toString:bx};!X[g](b.toLowerCase().substring(0,2))&&b.charAt()!="#"&&(b=bo(b));var c,d,e,f,h,i,j,k=b.match(L);if(k){k[2]&&(f=R(k[2].substring(5),16),e=R(k[2].substring(3,5),16),d=R(k[2].substring(1,3),16)),k[3]&&(f=R((i=k[3].charAt(3))+i,16),e=R((i=k[3].charAt(2))+i,16),d=R((i=k[3].charAt(1))+i,16)),k[4]&&(j=k[4][s](W),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),k[1].toLowerCase().slice(0,4)=="rgba"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100));if(k[5]){j=k[5][s](W),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),(j[0].slice(-3)=="deg"||j[0].slice(-1)=="°")&&(d/=360),k[1].toLowerCase().slice(0,4)=="hsba"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100);return a.hsb2rgb(d,e,f,h)}if(k[6]){j=k[6][s](W),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),(j[0].slice(-3)=="deg"||j[0].slice(-1)=="°")&&(d/=360),k[1].toLowerCase().slice(0,4)=="hsla"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100);return a.hsl2rgb(d,e,f,h)}k={r:d,g:e,b:f,toString:bx},k.hex="#"+(16777216|f|e<<8|d<<16).toString(16).slice(1),a.is(h,"finite")&&(k.opacity=h);return k}return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:bx}},a),a.hsb=bv(function(b,c,d){return a.hsb2rgb(b,c,d).hex}),a.hsl=bv(function(b,c,d){return a.hsl2rgb(b,c,d).hex}),a.rgb=bv(function(a,b,c){return"#"+(16777216|c|b<<8|a<<16).toString(16).slice(1)}),a.getColor=function(a){var b=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||.75},c=this.hsb2rgb(b.h,b.s,b.b);b.h+=.075,b.h>1&&(b.h=0,b.s-=.2,b.s<=0&&(this.getColor.start={h:0,s:1,b:b.b}));return c.hex},a.getColor.reset=function(){delete this.start},a.parsePathString=function(b){if(!b)return null;var c=bz(b);if(c.arr)return bJ(c.arr);var d={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},e=[];a.is(b,E)&&a.is(b[0],E)&&(e=bJ(b)),e.length||r(b).replace(Z,function(a,b,c){var f=[],g=b.toLowerCase();c.replace(_,function(a,b){b&&f.push(+b)}),g=="m"&&f.length>2&&(e.push([b][n](f.splice(0,2))),g="l",b=b=="m"?"l":"L");if(g=="r")e.push([b][n](f));else while(f.length>=d[g]){e.push([b][n](f.splice(0,d[g])));if(!d[g])break}}),e.toString=a._path2string,c.arr=bJ(e);return e},a.parseTransformString=bv(function(b){if(!b)return null;var c={r:3,s:4,t:2,m:6},d=[];a.is(b,E)&&a.is(b[0],E)&&(d=bJ(b)),d.length||r(b).replace($,function(a,b,c){var e=[],f=v.call(b);c.replace(_,function(a,b){b&&e.push(+b)}),d.push([b][n](e))}),d.toString=a._path2string;return d});var bz=function(a){var b=bz.ps=bz.ps||{};b[a]?b[a].sleep=100:b[a]={sleep:100},setTimeout(function(){for(var c in b)b[g](c)&&c!=a&&(b[c].sleep--,!b[c].sleep&&delete b[c])});return b[a]};a.findDotsAtSegment=function(a,b,c,d,e,f,g,h,i){var j=1-i,k=A(j,3),l=A(j,2),m=i*i,n=m*i,o=k*a+l*3*i*c+j*3*i*i*e+n*g,p=k*b+l*3*i*d+j*3*i*i*f+n*h,q=a+2*i*(c-a)+m*(e-2*c+a),r=b+2*i*(d-b)+m*(f-2*d+b),s=c+2*i*(e-c)+m*(g-2*e+c),t=d+2*i*(f-d)+m*(h-2*f+d),u=j*a+i*c,v=j*b+i*d,x=j*e+i*g,y=j*f+i*h,z=90-w.atan2(q-s,r-t)*180/B;(q>s||r=a.x&&b<=a.x2&&c>=a.y&&c<=a.y2},a.isBBoxIntersect=function(b,c){var d=a.isPointInsideBBox;return d(c,b.x,b.y)||d(c,b.x2,b.y)||d(c,b.x,b.y2)||d(c,b.x2,b.y2)||d(b,c.x,c.y)||d(b,c.x2,c.y)||d(b,c.x,c.y2)||d(b,c.x2,c.y2)||(b.xc.x||c.xb.x)&&(b.yc.y||c.yb.y)},a.pathIntersection=function(a,b){return bH(a,b)},a.pathIntersectionNumber=function(a,b){return bH(a,b,1)},a.isPointInsidePath=function(b,c,d){var e=a.pathBBox(b);return a.isPointInsideBBox(e,c,d)&&bH(b,[["M",c,d],["H",e.x2+10]],1)%2==1},a._removedFactory=function(a){return function(){eve("raphael.log",null,"Raphaël: you are calling to method “"+a+"” of removed object",a)}};var bI=a.pathBBox=function(a){var b=bz(a);if(b.bbox)return b.bbox;if(!a)return{x:0,y:0,width:0,height:0,x2:0,y2:0};a=bR(a);var c=0,d=0,e=[],f=[],g;for(var h=0,i=a.length;h1&&(v=w.sqrt(v),c=v*c,d=v*d);var x=c*c,y=d*d,A=(f==g?-1:1)*w.sqrt(z((x*y-x*u*u-y*t*t)/(x*u*u+y*t*t))),C=A*c*u/d+(a+h)/2,D=A*-d*t/c+(b+i)/2,E=w.asin(((b-D)/d).toFixed(9)),F=w.asin(((i-D)/d).toFixed(9));E=aF&&(E=E-B*2),!g&&F>E&&(F=F-B*2)}else E=j[0],F=j[1],C=j[2],D=j[3];var G=F-E;if(z(G)>k){var H=F,I=h,J=i;F=E+k*(g&&F>E?1:-1),h=C+c*w.cos(F),i=D+d*w.sin(F),m=bO(h,i,c,d,e,0,g,I,J,[F,H,C,D])}G=F-E;var K=w.cos(E),L=w.sin(E),M=w.cos(F),N=w.sin(F),O=w.tan(G/4),P=4/3*c*O,Q=4/3*d*O,R=[a,b],S=[a+P*L,b-Q*K],T=[h+P*N,i-Q*M],U=[h,i];S[0]=2*R[0]-S[0],S[1]=2*R[1]-S[1];if(j)return[S,T,U][n](m);m=[S,T,U][n](m).join()[s](",");var V=[];for(var W=0,X=m.length;W"1e12"&&(l=.5),z(n)>"1e12"&&(n=.5),l>0&&l<1&&(q=bP(a,b,c,d,e,f,g,h,l),p.push(q.x),o.push(q.y)),n>0&&n<1&&(q=bP(a,b,c,d,e,f,g,h,n),p.push(q.x),o.push(q.y)),i=f-2*d+b-(h-2*f+d),j=2*(d-b)-2*(f-d),k=b-d,l=(-j+w.sqrt(j*j-4*i*k))/2/i,n=(-j-w.sqrt(j*j-4*i*k))/2/i,z(l)>"1e12"&&(l=.5),z(n)>"1e12"&&(n=.5),l>0&&l<1&&(q=bP(a,b,c,d,e,f,g,h,l),p.push(q.x),o.push(q.y)),n>0&&n<1&&(q=bP(a,b,c,d,e,f,g,h,n),p.push(q.x),o.push(q.y));return{min:{x:y[m](0,p),y:y[m](0,o)},max:{x:x[m](0,p),y:x[m](0,o)}}}),bR=a._path2curve=bv(function(a,b){var c=!b&&bz(a);if(!b&&c.curve)return bJ(c.curve);var d=bL(a),e=b&&bL(b),f={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},g={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},h=function(a,b){var c,d;if(!a)return["C",b.x,b.y,b.x,b.y,b.x,b.y];!(a[0]in{T:1,Q:1})&&(b.qx=b.qy=null);switch(a[0]){case"M":b.X=a[1],b.Y=a[2];break;case"A":a=["C"][n](bO[m](0,[b.x,b.y][n](a.slice(1))));break;case"S":c=b.x+(b.x-(b.bx||b.x)),d=b.y+(b.y-(b.by||b.y)),a=["C",c,d][n](a.slice(1));break;case"T":b.qx=b.x+(b.x-(b.qx||b.x)),b.qy=b.y+(b.y-(b.qy||b.y)),a=["C"][n](bN(b.x,b.y,b.qx,b.qy,a[1],a[2]));break;case"Q":b.qx=a[1],b.qy=a[2],a=["C"][n](bN(b.x,b.y,a[1],a[2],a[3],a[4]));break;case"L":a=["C"][n](bM(b.x,b.y,a[1],a[2]));break;case"H":a=["C"][n](bM(b.x,b.y,a[1],b.y));break;case"V":a=["C"][n](bM(b.x,b.y,b.x,a[1]));break;case"Z":a=["C"][n](bM(b.x,b.y,b.X,b.Y))}return a},i=function(a,b){if(a[b].length>7){a[b].shift();var c=a[b];while(c.length)a.splice(b++,0,["C"][n](c.splice(0,6)));a.splice(b,1),l=x(d.length,e&&e.length||0)}},j=function(a,b,c,f,g){a&&b&&a[g][0]=="M"&&b[g][0]!="M"&&(b.splice(g,0,["M",f.x,f.y]),c.bx=0,c.by=0,c.x=a[g][1],c.y=a[g][2],l=x(d.length,e&&e.length||0))};for(var k=0,l=x(d.length,e&&e.length||0);ke){if(c&&!l.start){m=cs(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),k+=["C"+m.start.x,m.start.y,m.m.x,m.m.y,m.x,m.y];if(f)return k;l.start=k,k=["M"+m.x,m.y+"C"+m.n.x,m.n.y,m.end.x,m.end.y,i[5],i[6]].join(),n+=j,g=+i[5],h=+i[6];continue}if(!b&&!c){m=cs(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n);return{x:m.x,y:m.y,alpha:m.alpha}}}n+=j,g=+i[5],h=+i[6]}k+=i.shift()+i}l.end=k,m=b?n:c?l:a.findDotsAtSegment(g,h,i[0],i[1],i[2],i[3],i[4],i[5],1),m.alpha&&(m={x:m.x,y:m.y,alpha:m.alpha});return m}},cu=ct(1),cv=ct(),cw=ct(0,1);a.getTotalLength=cu,a.getPointAtLength=cv,a.getSubpath=function(a,b,c){if(this.getTotalLength(a)-c<1e-6)return cw(a,b).end;var d=cw(a,c,1);return b?cw(d,b).end:d},cl.getTotalLength=function(){if(this.type=="path"){if(this.node.getTotalLength)return this.node.getTotalLength();return cu(this.attrs.path)}},cl.getPointAtLength=function(a){if(this.type=="path")return cv(this.attrs.path,a)},cl.getSubpath=function(b,c){if(this.type=="path")return a.getSubpath(this.attrs.path,b,c)};var cx=a.easing_formulas={linear:function(a){return a},"<":function(a){return A(a,1.7)},">":function(a){return A(a,.48)},"<>":function(a){var b=.48-a/1.04,c=w.sqrt(.1734+b*b),d=c-b,e=A(z(d),1/3)*(d<0?-1:1),f=-c-b,g=A(z(f),1/3)*(f<0?-1:1),h=e+g+.5;return(1-h)*3*h*h+h*h*h},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a=a-1;var b=1.70158;return a*a*((b+1)*a+b)+1},elastic:function(a){if(a==!!a)return a;return A(2,-10*a)*w.sin((a-.075)*2*B/.3)+1},bounce:function(a){var b=7.5625,c=2.75,d;a<1/c?d=b*a*a:a<2/c?(a-=1.5/c,d=b*a*a+.75):a<2.5/c?(a-=2.25/c,d=b*a*a+.9375):(a-=2.625/c,d=b*a*a+.984375);return d}};cx.easeIn=cx["ease-in"]=cx["<"],cx.easeOut=cx["ease-out"]=cx[">"],cx.easeInOut=cx["ease-in-out"]=cx["<>"],cx["back-in"]=cx.backIn,cx["back-out"]=cx.backOut;var cy=[],cz=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){setTimeout(a,16)},cA=function(){var b=+(new Date),c=0;for(;c1&&!d.next){for(s in k)k[g](s)&&(r[s]=d.totalOrigin[s]);d.el.attr(r),cE(d.anim,d.el,d.anim.percents[0],null,d.totalOrigin,d.repeat-1)}d.next&&!d.stop&&cE(d.anim,d.el,d.next,null,d.totalOrigin,d.repeat)}}a.svg&&m&&m.paper&&m.paper.safari(),cy.length&&cz(cA)},cB=function(a){return a>255?255:a<0?0:a};cl.animateWith=function(b,c,d,e,f,g){var h=this;if(h.removed){g&&g.call(h);return h}var i=d instanceof cD?d:a.animation(d,e,f,g),j,k;cE(i,h,i.percents[0],null,h.attr());for(var l=0,m=cy.length;l.5)*2-1;i(m-.5,2)+i(n-.5,2)>.25&&(n=f.sqrt(.25-i(m-.5,2))*e+.5)&&n!=.5&&(n=n.toFixed(5)-1e-5*e)}return l}),e=e.split(/\s*\-\s*/);if(j=="linear"){var t=e.shift();t=-d(t);if(isNaN(t))return null;var u=[0,0,f.cos(a.rad(t)),f.sin(a.rad(t))],v=1/(g(h(u[2]),h(u[3]))||1);u[2]*=v,u[3]*=v,u[2]<0&&(u[0]=-u[2],u[2]=0),u[3]<0&&(u[1]=-u[3],u[3]=0)}var w=a._parseDots(e);if(!w)return null;k=k.replace(/[\(\)\s,\xb0#]/g,"_"),b.gradient&&k!=b.gradient.id&&(p.defs.removeChild(b.gradient),delete b.gradient);if(!b.gradient){s=q(j+"Gradient",{id:k}),b.gradient=s,q(s,j=="radial"?{fx:m,fy:n}:{x1:u[0],y1:u[1],x2:u[2],y2:u[3],gradientTransform:b.matrix.invert()}),p.defs.appendChild(s);for(var x=0,y=w.length;x1?G.opacity/100:G.opacity});case"stroke":G=a.getRGB(p),i.setAttribute(o,G.hex),o=="stroke"&&G[b]("opacity")&&q(i,{"stroke-opacity":G.opacity>1?G.opacity/100:G.opacity}),o=="stroke"&&d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1));break;case"gradient":(d.type=="circle"||d.type=="ellipse"||c(p).charAt()!="r")&&r(d,p);break;case"opacity":k.gradient&&!k[b]("stroke-opacity")&&q(i,{"stroke-opacity":p>1?p/100:p});case"fill-opacity":if(k.gradient){H=a._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l)),H&&(I=H.getElementsByTagName("stop"),q(I[I.length-1],{"stop-opacity":p}));break};default:o=="font-size"&&(p=e(p,10)+"px");var J=o.replace(/(\-.)/g,function(a){return a.substring(1).toUpperCase()});i.style[J]=p,d._.dirty=1,i.setAttribute(o,p)}}y(d,f),i.style.visibility=m},x=1.2,y=function(d,f){if(d.type=="text"&&!!(f[b]("text")||f[b]("font")||f[b]("font-size")||f[b]("x")||f[b]("y"))){var g=d.attrs,h=d.node,i=h.firstChild?e(a._g.doc.defaultView.getComputedStyle(h.firstChild,l).getPropertyValue("font-size"),10):10;if(f[b]("text")){g.text=f.text;while(h.firstChild)h.removeChild(h.firstChild);var j=c(f.text).split("\n"),k=[],m;for(var n=0,o=j.length;n"));var $=X.getBoundingClientRect();t.W=m.w=($.right-$.left)/Y,t.H=m.h=($.bottom-$.top)/Y,t.X=m.x,t.Y=m.y+t.H/2,("x"in i||"y"in i)&&(t.path.v=a.format("m{0},{1}l{2},{1}",f(m.x*u),f(m.y*u),f(m.x*u)+1));var _=["x","y","text","font","font-family","font-weight","font-style","font-size"];for(var ba=0,bb=_.length;ba.25&&(c=e.sqrt(.25-i(b-.5,2))*((c>.5)*2-1)+.5),m=b+n+c);return o}),f=f.split(/\s*\-\s*/);if(l=="linear"){var p=f.shift();p=-d(p);if(isNaN(p))return null}var q=a._parseDots(f);if(!q)return null;b=b.shape||b.node;if(q.length){b.removeChild(g),g.on=!0,g.method="none",g.color=q[0].color,g.color2=q[q.length-1].color;var r=[];for(var s=0,t=q.length;s')}}catch(c){F=function(a){return b.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}},a._engine.initWin(a._g.win),a._engine.create=function(){var b=a._getContainer.apply(0,arguments),c=b.container,d=b.height,e,f=b.width,g=b.x,h=b.y;if(!c)throw new Error("VML container not found.");var i=new a._Paper,j=i.canvas=a._g.doc.createElement("div"),k=j.style;g=g||0,h=h||0,f=f||512,d=d||342,i.width=f,i.height=d,f==+f&&(f+="px"),d==+d&&(d+="px"),i.coordsize=u*1e3+n+u*1e3,i.coordorigin="0 0",i.span=a._g.doc.createElement("span"),i.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;",j.appendChild(i.span),k.cssText=a.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",f,d),c==1?(a._g.doc.body.appendChild(j),k.left=g+"px",k.top=h+"px",k.position="absolute"):c.firstChild?c.insertBefore(j,c.firstChild):c.appendChild(j),i.renderfix=function(){};return i},a.prototype.clear=function(){a.eve("raphael.clear",this),this.canvas.innerHTML=o,this.span=a._g.doc.createElement("span"),this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;",this.canvas.appendChild(this.span),this.bottom=this.top=null},a.prototype.remove=function(){a.eve("raphael.remove",this),this.canvas.parentNode.removeChild(this.canvas);for(var b in this)this[b]=typeof this[b]=="function"?a._removedFactory(b):null;return!0};var G=a.st;for(var H in E)E[b](H)&&!G[b](H)&&(G[H]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(H))}(window.Raphael)


--------------------------------------------------------------------------------