├── examples ├── javascript │ ├── README │ ├── globals.html │ ├── ajax.html │ ├── scope.html │ └── simpleAjax.html ├── phpThings │ ├── jfb.txt │ ├── justinsspecialfile.txt │ ├── theHeader.php │ ├── includeExample.php │ ├── requireExample.php │ ├── includeMissExample.php │ ├── requireMissExample.php │ └── filewrite.php ├── greetMe.php ├── README ├── phpinfo.php ├── helloworld.php ├── helloworld2.php ├── postit.php ├── forms.html ├── userinputs │ ├── forms.html │ ├── insertValues.html │ ├── greetMe.php │ └── insertit.php ├── sessionsExample │ ├── login.php │ ├── header.php │ ├── index.php │ ├── db.php │ └── question.php ├── mysql_examples.txt ├── otherThings.php ├── htmlExamples │ ├── style.css │ ├── simpleCSS.html │ ├── htmlInputs.html │ └── simpleJS.html ├── classes.php ├── testmysql.php ├── uploads │ └── fileUpload.php ├── cars.sql └── explore_cars.php ├── DockerThings ├── my.cnf ├── start-mysqld.sh ├── start-apache2.sh ├── supervisord-mysqld.conf ├── supervisord-apache2.conf ├── import_sql.sh ├── import_sql.she ├── run.sh ├── run.she ├── apache_default ├── create_mysql_admin_user.sh ├── 000-default.conf ├── Dockerfile ├── README.md └── index.txt ├── users ├── tgree ├── cmuthyal ├── jbrunelle ├── mgunnam ├── rrachama ├── rgudipati ├── ssangam.txt └── mkukunooru ├── cs518DockerServerDeployment ├── update.js ├── logs.php ├── checkAccessibility.php ├── cs418deployment.css ├── README ├── README~ ├── cs418deployment.js ├── cs418repopuller.py ├── cs418repopuller.py~ ├── index.php ├── index.php~ └── jquery-1.11.2.min.js ├── user_credentials.txt ├── import_sql.sh ├── testmysql.php ├── README.md ├── README.md~ ├── milestone1dump.sql ├── index.html ├── cs518fall2017syllabus.txt └── cs518fall2017syllabus.html /examples/javascript/README: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /examples/phpThings/jfb.txt: -------------------------------------------------------------------------------- 1 | hello justins cs518 class -------------------------------------------------------------------------------- /DockerThings/my.cnf: -------------------------------------------------------------------------------- 1 | [mysqld] 2 | bind-address=0.0.0.0 3 | -------------------------------------------------------------------------------- /users/tgree: -------------------------------------------------------------------------------- 1 | https://github.com/tgree056/CS418tgree 2 | -------------------------------------------------------------------------------- /users/cmuthyal: -------------------------------------------------------------------------------- 1 | https://github.com/cmuth001/Web-programming 2 | -------------------------------------------------------------------------------- /users/jbrunelle: -------------------------------------------------------------------------------- 1 | https://github.com/jbrunelle/ODUCS418F17 2 | -------------------------------------------------------------------------------- /users/mgunnam: -------------------------------------------------------------------------------- 1 | https://github.com/mgunn001/CS518_Project 2 | -------------------------------------------------------------------------------- /users/rrachama: -------------------------------------------------------------------------------- 1 | https://github.com/rahul-racha/CS518-Project 2 | -------------------------------------------------------------------------------- /DockerThings/start-mysqld.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | exec mysqld_safe 3 | -------------------------------------------------------------------------------- /examples/phpThings/justinsspecialfile.txt: -------------------------------------------------------------------------------- 1 | hello justins cs518 class -------------------------------------------------------------------------------- /users/rgudipati: -------------------------------------------------------------------------------- 1 | https://github.com/rohila95/WebProgramming-CS518 2 | -------------------------------------------------------------------------------- /examples/greetMe.php: -------------------------------------------------------------------------------- 1 | Hello, ! 2 | -------------------------------------------------------------------------------- /users/ssangam.txt: -------------------------------------------------------------------------------- 1 | https://github.com/sukeshsangam/CS-518-Web-Programming- -------------------------------------------------------------------------------- /examples/README: -------------------------------------------------------------------------------- 1 | Examples from http://www.cs.odu.edu/~jbrunelle/cs518/examples/ 2 | -------------------------------------------------------------------------------- /users/mkukunooru: -------------------------------------------------------------------------------- 1 | https://github.com/maheshreddykukunooru/WebProgrammingProject_cs518 2 | -------------------------------------------------------------------------------- /examples/phpThings/theHeader.php: -------------------------------------------------------------------------------- 1 | This is a header!!"; 3 | ?> 4 | -------------------------------------------------------------------------------- /DockerThings/start-apache2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source /etc/apache2/envvars 3 | exec apache2 -D FOREGROUND 4 | -------------------------------------------------------------------------------- /DockerThings/supervisord-mysqld.conf: -------------------------------------------------------------------------------- 1 | [program:mysqld] 2 | command=/start-mysqld.sh 3 | numprocs=1 4 | autostart=true 5 | autorestart=true 6 | -------------------------------------------------------------------------------- /cs518DockerServerDeployment/update.js: -------------------------------------------------------------------------------- 1 | //$(document).ready(function(){ 2 | // window.setTimeout(checkAccessibility,1000); 3 | // 4 | //}); 5 | -------------------------------------------------------------------------------- /DockerThings/supervisord-apache2.conf: -------------------------------------------------------------------------------- 1 | [program:apache2] 2 | command=/start-apache2.sh 3 | numprocs=1 4 | autostart=true 5 | autorestart=true 6 | -------------------------------------------------------------------------------- /examples/phpinfo.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | PHP Test 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /examples/helloworld.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | PHP Test 4 | 5 | 6 | Hello World!

'; ?> 7 | 8 | 9 | -------------------------------------------------------------------------------- /examples/phpThings/includeExample.php: -------------------------------------------------------------------------------- 1 | This is an include example 2 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /examples/phpThings/requireExample.php: -------------------------------------------------------------------------------- 1 | This is a require example 2 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /examples/helloworld2.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | PHP Test 6 | 7 | 8 | 9 | 10 |

Hello World a different way!

11 | 12 | 13 | 14 | 15 | EOL; 16 | ?> 17 | -------------------------------------------------------------------------------- /examples/phpThings/includeMissExample.php: -------------------------------------------------------------------------------- 1 | This is an include example 2 | 3 | NOTE appear above!"; 5 | ?> 6 | 7 | 8 | -------------------------------------------------------------------------------- /examples/postit.php: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 |

6 | " . $_POST['username'] . ""; 8 | ?> 9 |
10 | 11 | -------------------------------------------------------------------------------- /examples/forms.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | PHP Test 4 | 5 | 6 |
7 | Enter your name: 8 | 9 |
10 | 11 | -------------------------------------------------------------------------------- /cs518DockerServerDeployment/logs.php: -------------------------------------------------------------------------------- 1 | ",shell_exec('docker logs ODUCS418_'.$username.' 2>&1')); 8 | echo $output; 9 | ?> -------------------------------------------------------------------------------- /examples/userinputs/forms.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | PHP Test 4 | 5 | 6 |
7 | Enter your name: 8 | 9 |
10 | 11 | -------------------------------------------------------------------------------- /user_credentials.txt: -------------------------------------------------------------------------------- 1 | Tow Mater: mater@rsprings.gov; @mater 2 | Sally Carrera: porsche@rsprings.gov; @sally 3 | Doc Hudson: hornet@rsprings.gov; @doc 4 | Finn McMissile: topsecret@agent.org; @mcmissile 5 | Lightning McQueen: kachow@rusteze.com; @mcqueen 6 | 7 | New users: 8 | Chick Hicks: chinga@cars.com; @chick 9 | -------------------------------------------------------------------------------- /examples/phpThings/requireMissExample.php: -------------------------------------------------------------------------------- 1 | This is a require example 2 | 3 | NOTE appear above!"; 11 | ?> 12 | 13 | 14 | -------------------------------------------------------------------------------- /import_sql.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | RET=1 4 | while [[ RET -ne 0 ]]; do 5 | echo "=> Waiting for MySQL to start" 6 | sleep 5 7 | mysql -uroot -e "status" > /dev/null 2>&1 8 | RET=$? 9 | done 10 | 11 | echo "=> MySQL Started" 12 | 13 | echo "=> Importing SQL file" 14 | mysql -uroot --force --verbose < /app/milestone1dump.sql 15 | 16 | echo "=> All done" 17 | 18 | -------------------------------------------------------------------------------- /DockerThings/import_sql.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "jfb test 1" 4 | 5 | RET=1 6 | while [[ RET -ne 0 ]]; do 7 | echo "=> Waiting for MySQL to start" 8 | sleep 5 9 | mysql -uroot -e "status" > /dev/null 2>&1 10 | RET=$? 11 | done 12 | 13 | echo "=> MySQL Started" 14 | 15 | echo "=> Importing SQL file" 16 | mysql -uroot --force --verbose < /app/milestone2dump.sql 17 | 18 | echo "=> All done" 19 | 20 | -------------------------------------------------------------------------------- /DockerThings/import_sql.she: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "jfb test 1" 4 | 5 | RET=1 6 | while [[ RET -ne 0 ]]; do 7 | echo "=> Waiting for MySQL to start" 8 | sleep 5 9 | mysql -uroot -e "status" > /dev/null 2>&1 10 | RET=$? 11 | done 12 | 13 | echo "=> MySQL Started" 14 | 15 | echo "=> Importing SQL file" 16 | mysql -uroot --force --verbose < /app/milestone2dump.sql 17 | 18 | echo "=> All done" 19 | 20 | -------------------------------------------------------------------------------- /examples/userinputs/insertValues.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | PHP Test 4 | 5 | 6 |
7 | ID:
8 | Opponent:
9 | visitor score:
10 | odu score:
11 | date:
12 | 13 |
14 | 15 | -------------------------------------------------------------------------------- /examples/phpThings/filewrite.php: -------------------------------------------------------------------------------- 1 |
"; 11 | 12 | file_put_contents($filename, "hello justins cs518 class"); 13 | 14 | /** 15 | $file = fopen($filename, 'w') of die("can't open $filename"); 16 | 17 | fwrite ($file, "Hello justin's cs518"); 18 | fclose($file); 19 | /**/ 20 | echo "DONE!"; 21 | 22 | 23 | ?> 24 | -------------------------------------------------------------------------------- /examples/sessionsExample/login.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | Sessions Example - CS418 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | -------------------------------------------------------------------------------- /examples/mysql_examples.txt: -------------------------------------------------------------------------------- 1 | examples: 2 | 3 | login: mysql -u root -p 4 | create DB: create database mysqltest; 5 | change DB: use mysqltest 6 | create table: 7 | CREATE TABLE oduScores ( 8 | id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY, 9 | opponent VARCHAR(30) NOT NULL, 10 | visitorPoints INTEGER NOT NULL, 11 | oduPoints INTEGER NOT NULL, 12 | notes TIMESTAMP 13 | ); 14 | describe: desc oduScores; 15 | insert: insert into oduScores values (1, "Hampton", 13, 38, (select now())); 16 | select: select * from oduScores; 17 | -------------------------------------------------------------------------------- /examples/otherThings.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | PHP Test 4 | 5 | 6 | 7 |
VariableValue 8 |
$_SERVER['HTTP_USER_AGENT'] 9 |
strlen($_SERVER['HTTP_USER_AGENT']) 10 |
print_r($_GET); 11 |
$_GET['justin']; 12 |
print_r($_GET); 13 |
print_r($_GET); 14 |
15 | 16 | 17 | -------------------------------------------------------------------------------- /cs518DockerServerDeployment/checkAccessibility.php: -------------------------------------------------------------------------------- 1 | 21 | -------------------------------------------------------------------------------- /examples/sessionsExample/header.php: -------------------------------------------------------------------------------- 1 |
"; 17 | echo "the session variable contents:
"; 18 | print_r($_SESSION); 19 | }else { 20 | echo "You're not logged in"; 21 | echo "

the session variable contents:
"; 22 | print_r($_SESSION); 23 | } 24 | 25 | ?> 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /examples/userinputs/greetMe.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | Hello,
"; 12 | 13 | if(empty($input)){ 14 | echo "You have an empty string!"; 15 | } 16 | elseif(is_numeric($input)){ 17 | echo "This is a number!"; 18 | } 19 | 20 | print "

Here's sanitized input:
"; 21 | print "escapeshellarg: " . escapeshellarg($input) . "
"; 22 | print "htmlspecialchars: " . htmlspecialchars($input) . "
"; 23 | print "mysqli_real_escape_string (note that this needs a $conn variable):
" 24 | . mysqli_real_escape_string($conn, $input) . "
"; 25 | 26 | print "urlencode: " . urlencode($input) . "
"; 27 | 28 | ?> 29 | -------------------------------------------------------------------------------- /examples/htmlExamples/style.css: -------------------------------------------------------------------------------- 1 | body {font-family: Perpetua, Baskerville, "Big Caslon", "Palatino Linotype", Palatino, "URW Palladio L", "Nimbus Roman No9 L", serif; font-size: 16px; max-width:900px; text-align:left; margin-left:auto; margin-right:auto;} 2 | p {font-family: Corbel, Arial, Helvetica, "Nimbus Sans L", "Liberation Sans", sans-serif; } 3 | #section1 {color: green; background-color: red;} 4 | #section2 {color: #fee; text-transform: uppercase; background-color: black;} 5 | table {width: 100%; border: 1px solid #999;} 6 | table, tr, th, td {border: 1px solid #999; border-collapse: collapse; vertical-align: top;} 7 | table tr th {background-color: #eee; text-align: left;} 8 | table td:nth-child(1) {width: 10%;} 9 | table td:nth-child(2) {width: 20%;} 10 | table td:nth-child(3) {width: 50%;} 11 | table td:nth-child(4) {width: 20%;} 12 | -------------------------------------------------------------------------------- /examples/classes.php: -------------------------------------------------------------------------------- 1 | name = $name; 5 | } 6 | function whatDoYouDo(){ 7 | echo $this->name." dances!"; 8 | } 9 | } 10 | 11 | class Programmer extends Person { 12 | function startCoding($language){ 13 | echo $this->name." is coding in ".$language."!"; 14 | } 15 | function whatDoYouDo(){ 16 | echo $this->name." codes!"; 17 | } 18 | } 19 | 20 | $mary = new Person("Mary"); 21 | $john = new Programmer("John"); 22 | 23 | ?> 24 | 25 | 26 | 27 | 28 | PHP Test 29 | 30 | 31 | 32 |
VariableValue 33 |
Mary->whatDoYouDo whatDoYouDo(); ?> 34 |
John->whatDoYouDowhatDoYouDo(); ?> 35 |
John->startCoding startCoding("PHP"); ?> 36 |
37 | 38 | 39 | -------------------------------------------------------------------------------- /DockerThings/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | VOLUME_HOME="/var/lib/mysql" 4 | 5 | sed -ri -e "s/^upload_max_filesize.*/upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}/" \ 6 | -e "s/^post_max_size.*/post_max_size = ${PHP_POST_MAX_SIZE}/" /etc/php5/apache2/php.ini 7 | if [[ ! -d $VOLUME_HOME/mysql ]]; then 8 | echo "=> An empty or uninitialized MySQL volume is detected in $VOLUME_HOME" 9 | echo "=> Installing MySQL ..." 10 | mysql_install_db > /dev/null 2>&1 11 | echo "=> Done!" 12 | /create_mysql_admin_user.sh 13 | else 14 | echo "=> Using an existing volume of MySQL" 15 | fi 16 | 17 | #sleep 5 18 | 19 | mysqlFile="/app/milestone2dump.sql" 20 | if [ -f $mysqlFile ]; then 21 | echo "Importing MySQL data from $mysqlFile" 22 | /import_sql.sh & 23 | # mysql -u root -p < $mysqlFile 24 | else 25 | echo "I could not find $mysqlFile" 26 | ls -l /app 27 | fi 28 | 29 | #ls -l /var/www/html/* 30 | 31 | exec supervisord -n 32 | 33 | -------------------------------------------------------------------------------- /DockerThings/run.she: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | VOLUME_HOME="/var/lib/mysql" 4 | 5 | sed -ri -e "s/^upload_max_filesize.*/upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}/" \ 6 | -e "s/^post_max_size.*/post_max_size = ${PHP_POST_MAX_SIZE}/" /etc/php5/apache2/php.ini 7 | if [[ ! -d $VOLUME_HOME/mysql ]]; then 8 | echo "=> An empty or uninitialized MySQL volume is detected in $VOLUME_HOME" 9 | echo "=> Installing MySQL ..." 10 | mysql_install_db > /dev/null 2>&1 11 | echo "=> Done!" 12 | /create_mysql_admin_user.sh 13 | else 14 | echo "=> Using an existing volume of MySQL" 15 | fi 16 | 17 | #sleep 5 18 | 19 | mysqlFile="/app/milestone2dump.sql" 20 | if [ -f $mysqlFile ]; then 21 | echo "Importing MySQL data from $mysqlFile" 22 | /import_sql.sh & 23 | # mysql -u root -p < $mysqlFile 24 | else 25 | echo "I could not find $mysqlFile" 26 | ls -l /app 27 | fi 28 | 29 | #ls -l /var/www/html/* 30 | 31 | exec supervisord -n 32 | 33 | -------------------------------------------------------------------------------- /examples/sessionsExample/index.php: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | Homepage 21 | 22 | 23 | 24 |

Welcome ! (log out)

25 | 26 |

These are your session variable parts:

27 |

28 |

"; 31 | ?> 32 | 33 |

Check out these questions!

34 | 35 | "; 41 | foreach($qs as $id=>$q){ 42 | $str .= "
  • $q
  • "; 43 | 44 | } 45 | $str .= ""; 46 | 47 | echo $str; 48 | 49 | ?> 50 | 51 | 52 | -------------------------------------------------------------------------------- /cs518DockerServerDeployment/cs418deployment.css: -------------------------------------------------------------------------------- 1 | form { 2 | width: 455px; 3 | padding: 1em; 4 | } 5 | 6 | label { 7 | display: block; 8 | float: left; 9 | padding: 1px 5px 1px 0px; 10 | text-align: right; 11 | clear: both; 12 | } 13 | input[type='text'], input[type='password'] { 14 | font: 1em sans-serif; 15 | 16 | width: 300px; 17 | -moz-box-sizing: border-box; 18 | box-sizing: border-box; 19 | 20 | border: 1px solid #999; 21 | float: left; 22 | display: block; 23 | text-align: right; 24 | } 25 | 26 | input[type='button'], input[type='submit']{ 27 | width : auto; 28 | float: right; 29 | margin: 0.5em auto 3.0em auto; 30 | clear: both; 31 | } 32 | 33 | input:focus { 34 | border-color: #000; 35 | } 36 | 37 | h2 {clear: both;} 38 | 39 | #srcRepo {font-style: italic;} 40 | #srcRepo.ok {color: green; font-style: normal;} 41 | #srcRepo.invalid {color: red; font-style: normal;} 42 | 43 | dl {background-color: #eee; padding: 5px; border: 1px solid #999; border-radius: 5px;} 44 | -------------------------------------------------------------------------------- /examples/testmysql.php: -------------------------------------------------------------------------------- 1 | connect_error) { 13 | die("Connection failed: " . $conn->connect_error); 14 | } 15 | 16 | $sql = "SELECT * FROM oduScores;"; 17 | $result = $conn->query($sql); 18 | 19 | echo "\n"; 20 | 21 | if ($result->num_rows > 0) { 22 | echo "\n"; 23 | echo "\s*$/g,rb={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"
    IDopponentvisitor pointsodu pointsdate\n"; 24 | // output data of each row 25 | while($row = $result->fetch_assoc()) { 26 | echo "" . $row["id"] . "" . $row["opponent"] . "" . $row["visitorPoints"] . "" . $row["oduPoints"] . "" . $row["notes"] . "\n"; 27 | } 28 | } else { 29 | echo "0 results"; 30 | } 31 | $conn->close(); 32 | echo ""; 33 | ?> 34 | -------------------------------------------------------------------------------- /testmysql.php: -------------------------------------------------------------------------------- 1 | connect_error) { 13 | die("Connection failed: " . $conn->connect_error); 14 | } 15 | 16 | $sql = "SELECT * FROM oduScores;"; 17 | $result = $conn->query($sql); 18 | 19 | echo "\n"; 20 | 21 | if ($result->num_rows > 0) { 22 | echo "\n"; 23 | echo "
    IDopponentvisitor pointsodu pointsdate\n"; 24 | // output data of each row 25 | while($row = $result->fetch_assoc()) { 26 | echo "
    " . $row["id"] . "" . $row["opponent"] . "" . $row["visitorPoints"] . "" . $row["oduPoints"] . "" . $row["notes"] . "\n"; 27 | } 28 | } else { 29 | echo "0 results"; 30 | } 31 | echo "
    \n"; 32 | $conn->close(); 33 | echo ""; 34 | ?> 35 | -------------------------------------------------------------------------------- /DockerThings/apache_default: -------------------------------------------------------------------------------- 1 | 2 | ServerAdmin webmaster@localhost 3 | 4 | DocumentRoot /var/www/html 5 | 6 | Options FollowSymLinks 7 | AllowOverride All 8 | 9 | 10 | Options Indexes FollowSymLinks MultiViews 11 | # To make wordpress .htaccess work 12 | AllowOverride All 13 | Order allow,deny 14 | allow from all 15 | 16 | 17 | ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 18 | 19 | AllowOverride All 20 | Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 21 | Order allow,deny 22 | Allow from all 23 | 24 | 25 | ErrorLog ${APACHE_LOG_DIR}/error.log 26 | 27 | # Possible values include: debug, info, notice, warn, error, crit, 28 | # alert, emerg. 29 | LogLevel warn 30 | 31 | CustomLog ${APACHE_LOG_DIR}/access.log combined 32 | 33 | 34 | -------------------------------------------------------------------------------- /cs518DockerServerDeployment/README: -------------------------------------------------------------------------------- 1 | 2 | Running students' deployments 3 | ----------------------------------- 4 | 5 | First, I download all student repos using cs418repopuller.py 6 | 7 | Note that you need to add your SSH key to your github account, and enter the following (with your personal data) into ~/.ssh/config: 8 | 9 | Host github.com 10 | User git 11 | Hostname github.com 12 | PreferredAuthentications publickey 13 | Port 22 14 | IdentityFile /location/of/your/rsa/key 15 | 16 | To enable easier cloning. Be sure not to point this at your public key. This means you need to enter your password for each repo, but works well enough for now. 17 | 18 | Next, I go into ./demos/CSUSERNAME (e.g., ./demos/jbrunelle/) and deploy the files to a new docker instance running the same image: 19 | 20 | docker run --network nginx-proxy -e VIRTUAL_HOST=jbrunelle.cs518.cs.odu.edu -v /path/to/demos/directory/demos/jbrunelle:/var/www/html jbrunelle/oducs518f17 21 | 22 | This creates the student's deployment at jbrunelle.cs518.cs.odu.edu (or whatever the CSUSERNAME.cs518.cs.odu.edu will be). 23 | 24 | 25 | 26 | UNDER CONSTRUCTION!!! 27 | -------------------------------------------------------------------------------- /cs518DockerServerDeployment/README~: -------------------------------------------------------------------------------- 1 | 2 | Running students' deployments 3 | ----------------------------------- 4 | 5 | First, I download all student repos using cs418repopuller.py 6 | 7 | Note that you need to add your SSH key to your github account, and enter the following (with your personal data) into ~/.ssh/config: 8 | 9 | Host github.com 10 | User git 11 | Hostname github.com 12 | PreferredAuthentications publickey 13 | Port 22 14 | IdentityFile /location/of/your/rsa/key 15 | 16 | To enable easier cloning. Be sure not to point this at your public key. This means you need to enter your password for each repo, but works well enough for now. 17 | 18 | Next, I go into ./demos/CSUSERNAME (e.g., ./demos/jbrunelle/) and deploy the files to a new docker instance running the same image: 19 | 20 | docker run --network nginx-proxy -e VIRTUAL_HOST=jbrunelle.cs518.cs.odu.edu -v /path/to/demos/directory/demos/jbrunelle:/var/www/html jbrunelle/oducs518f16 21 | 22 | This creates the student's deployment at jbrunelle.cs518.cs.odu.edu (or whatever the CSUSERNAME.cs518.cs.odu.edu will be). 23 | 24 | 25 | 26 | UNDER CONSTRUCTION!!! 27 | -------------------------------------------------------------------------------- /examples/htmlExamples/simpleCSS.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | My Web Page 6 | 7 | 8 | 9 |
    10 |

    My Web Page

    11 |

    Home to my stuff

    12 |
    13 | 20 |
    21 |

    Welcome to Section 1!

    22 |

    A section of content!

    23 |
    24 |










    25 |
    26 |

    Welcome to Section 2!

    27 |

    moar content!

    28 |
    29 |










    30 |
    31 |

    Welcome to Section 3!

    32 |

    yet another content section!

    33 |
    34 |










    35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /examples/javascript/globals.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | JavaScript Scope Example 4 | 5 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 24 | 33 | 43 |
    CodeOutput 23 |
    25 | window.myVariable = myGlobal; 26 | 27 | 31 | 32 |
    34 | var myVariable1 = myGlobal; 35 | 36 | 40 | 41 | 42 |
    44 | myVariable2 = myGlobal; 45 | 46 | 50 | 51 | 52 | 53 | 54 | 55 |
    56 | 57 |

    58 |
    Errors show up here!
    59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /DockerThings/create_mysql_admin_user.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | /usr/bin/mysqld_safe > /dev/null 2>&1 & 4 | 5 | RET=1 6 | while [[ RET -ne 0 ]]; do 7 | echo "=> Waiting for confirmation of MySQL service startup" 8 | sleep 5 9 | mysql -uroot -e "status" > /dev/null 2>&1 10 | RET=$? 11 | done 12 | 13 | #PASS=${MYSQL_PASS:-$(pwgen -s 12 1)} 14 | PASS="M0n@rch$" 15 | _word=$( [ ${MYSQL_PASS} ] && echo "preset" || echo "random" ) 16 | #echo "=> Creating MySQL admin user with ${_word} password" 17 | echo "===>> Creating MySQL admin user with $PASS password" 18 | 19 | mysql -uroot -e "CREATE USER 'admin'@'%' IDENTIFIED BY '$PASS'" 20 | mysql -uroot -e "GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION" 21 | 22 | 23 | echo "=> Done!" 24 | 25 | echo "========================================================================" 26 | echo "You can now connect to this MySQL Server using:" 27 | echo "" 28 | echo " mysql -u admin -p $PASS -h -P" 29 | echo "" 30 | echo "Please remember to change the above password as soon as possible!" 31 | echo "MySQL user 'root' has no password but only allows local connections" 32 | echo "========================================================================" 33 | 34 | mysqladmin -uroot shutdown 35 | -------------------------------------------------------------------------------- /examples/sessionsExample/db.php: -------------------------------------------------------------------------------- 1 | 'cs518pa$$', 7 | 'jbrunelle' => 'M0n@rch$', 8 | 'pvenkman' => 'imadoctor', 9 | 'dbarrett' => 'fr1ed3GGS', 10 | 'ltully' => ' 96 |

    CS418 Docker Deployment System

    97 | 98 |

    This system is setup for students' use in testing the development of their projects for CS418 on a system that uses Docker (which is also used on Demo Day). To use the system:

    99 | 100 |
    101 |
    Enter your CS user id.
    102 |
    This is used to pull the repository you specified in Assignment 1 from the users directory in the class repository.
    103 | 104 |
    Authenticate
    105 |
    This will allow the system to deploy your code from GitHub.
    106 | 107 |
    Deploy your code
    108 |
    If authentication is successful, a "Dockerize my code" button will appear. Press it to deploy the code from your master branch.
    109 | 110 |
    Access & Test your code
    111 |
    The system will return a URI where your deployed code can be accessed and a means to kill the instance.
    112 |
    113 | 114 |
    115 | 116 | 117 |
    118 | 119 | 120 | 121 | 122 |

    Source Repository: none

    123 | 124 | $_GET['code'], 134 | 'client_id' => $clientId, 135 | 'client_secret' => $clientSecret 136 | 137 | )) 138 | ); 139 | curl_setopt($ch, CURLOPT_HTTPHEADER,array("Accept: application/json")); 140 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 141 | $server_output = curl_exec ($ch); 142 | curl_close ($ch); 143 | 144 | 145 | $json = json_decode($server_output,true); 146 | 147 | if( !$json || 148 | !isset($json['access_token']) || 149 | strpos($json['access_token'],' ') !== FALSE){echo "Bad access token. Reload the page. Try again.";die();} 150 | 151 | $accessToken = json_decode($server_output,true)["access_token"]; 152 | 153 | if($_COOKIE && isset($_COOKIE['dockerdeploy'])){ 154 | //echo "Already have cookie: ".$_COOKIE['dockerdeploy']; 155 | 156 | }else { 157 | //echo "setting cookie"; 158 | setcookie("dockerdeploy",$accessToken); 159 | } 160 | 161 | ?> 162 | 163 |
    164 | 165 | 166 | 167 |
    168 | Authenticate with GitHub"; 172 | } 173 | ?> 174 | 175 | 176 | 177 | -------------------------------------------------------------------------------- /cs518DockerServerDeployment/index.php: -------------------------------------------------------------------------------- 1 | "; 59 | $output = shell_exec($deleteOldRepoContents); 60 | echo "
      "; 61 | echo "
    • Deleting local working copy of repo.
    • "; 62 | $output = shell_exec($cloneRepo); 63 | echo "
    • Cloning current repo. $output
    • "; 64 | $output = shell_exec($killOldInstance); 65 | echo "
    • Killing any previous docker instances you've launched.
    • "; 66 | $output = shell_exec($removeOldInstance); 67 | echo "
    • Removing any previous docker instance.
    • "; 68 | $output = shell_exec($launchNewDocker); 69 | echo "
    • Launching new docker instance with your code at http://wsdl-docker.cs.odu.edu:".$destinationPort." in the next 10 seconds.
    • "; 70 | echo "
    • See the Docker logs for debugging."; 71 | echo "
    "; 72 | 73 | $output = shell_exec("find /tmp/".$username." -type d -exec chmod 777 {} \;"); 74 | 75 | echo ""; 76 | die(); 77 | }elseif(empty($_GET["username"])){ 78 | http_response_code($HTTPSTATUS_BADREQUEST); 79 | } 80 | 81 | 82 | $state = $_GET['csusername']; 83 | if($_GET && isset($_GET['state'])){$state = $_GET['state'];} 84 | 85 | ?> 86 | 87 | 88 | 89 | 90 | CS418 Docker deployment system 91 | 92 | 93 | 99 | 100 | 101 | 102 |

    CS418 Docker Deployment System

    103 | 104 |

    This system is setup for students' use in testing the development of their projects for CS418 on a system that uses Docker (which is also used on Demo Day). To use the system:

    105 | 106 |
    107 |
    Enter your CS user id.
    108 |
    This is used to pull the repository you specified in Assignment 1 from the users directory in the class repository.
    109 | 110 |
    Authenticate
    111 |
    This will allow the system to deploy your code from GitHub.
    112 | 113 |
    Deploy your code
    114 |
    If authentication is successful, a "Dockerize my code" button will appear. Press it to deploy the code from your master branch.
    115 | 116 |
    Access & Test your code
    117 |
    The system will return a URI where your deployed code can be accessed and a means to kill the instance.
    118 |
    119 | 120 |
    121 | 122 |
    123 | 124 |
    125 | 126 | 127 | 128 | 129 |

    Source Repository: none

    130 | 131 | $_GET['code'], 141 | 'client_id' => $clientId, 142 | 'client_secret' => $clientSecret 143 | 144 | )) 145 | ); 146 | curl_setopt($ch, CURLOPT_HTTPHEADER,array("Accept: application/json")); 147 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 148 | $server_output = curl_exec ($ch); 149 | curl_close ($ch); 150 | 151 | 152 | $json = json_decode($server_output,true); 153 | echo print_r($json); 154 | if( !$json || 155 | !isset($json['access_token']) || 156 | strpos($json['access_token'],' ') !== FALSE){echo "Bad access token. Reload the page. Try again.";die();} 157 | 158 | $accessToken = json_decode($server_output,true)["access_token"]; 159 | 160 | if($_COOKIE && isset($_COOKIE['dockerdeploy'])){ 161 | //echo "Already have cookie: ".$_COOKIE['dockerdeploy']; 162 | 163 | }else { 164 | //echo "setting cookie"; 165 | setcookie("dockerdeploy",$accessToken); 166 | } 167 | 168 | ?> 169 | 170 |
    171 | 172 | 173 | 174 |
    175 | Authenticate with GitHub"; 179 | } 180 | ?> 181 | 182 | 183 | 184 | -------------------------------------------------------------------------------- /cs518DockerServerDeployment/index.php~: -------------------------------------------------------------------------------- 1 | "; 59 | $output = shell_exec($deleteOldRepoContents); 60 | echo "
      "; 61 | echo "
    • Deleting local working copy of repo.
    • "; 62 | $output = shell_exec($cloneRepo); 63 | echo "
    • Cloning current repo. $output
    • "; 64 | $output = shell_exec($killOldInstance); 65 | echo "
    • Killing any previous docker instances you've launched.
    • "; 66 | $output = shell_exec($removeOldInstance); 67 | echo "
    • Removing any previous docker instance.
    • "; 68 | $output = shell_exec($launchNewDocker); 69 | echo "
    • Launching new docker instance with your code at http://wsdl-docker.cs.odu.edu:".$destinationPort." in the next 10 seconds.
    • "; 70 | echo "
    • See the Docker logs for debugging."; 71 | echo "
    "; 72 | 73 | $output = shell_exec("find /tmp/".$username." -type d -exec chmod 777 {} \;"); 74 | 75 | echo ""; 76 | die(); 77 | }elseif(empty($_GET["username"])){ 78 | http_response_code($HTTPSTATUS_BADREQUEST); 79 | } 80 | 81 | 82 | $state = $_GET['csusername']; 83 | if($_GET && isset($_GET['state'])){$state = $_GET['state'];} 84 | 85 | ?> 86 | 87 | 88 | 89 | 90 | CS418 Docker deployment system 91 | 92 | 93 | 99 | 100 | 101 | 102 |

    CS418 Docker Deployment System

    103 | 104 |

    This system is setup for students' use in testing the development of their projects for CS418 on a system that uses Docker (which is also used on Demo Day). To use the system:

    105 | 106 |
    107 |
    Enter your CS user id.
    108 |
    This is used to pull the repository you specified in Assignment 1 from the users directory in the class repository.
    109 | 110 |
    Authenticate
    111 |
    This will allow the system to deploy your code from GitHub.
    112 | 113 |
    Deploy your code
    114 |
    If authentication is successful, a "Dockerize my code" button will appear. Press it to deploy the code from your master branch.
    115 | 116 |
    Access & Test your code
    117 |
    The system will return a URI where your deployed code can be accessed and a means to kill the instance.
    118 |
    119 | 120 |
    121 | 122 |
    123 | 124 |
    125 | 126 | 127 | 128 | 129 |

    Source Repository: none

    130 | 131 | $_GET['code'], 141 | 'client_id' => $clientId, 142 | 'client_secret' => $clientSecret 143 | 144 | )) 145 | ); 146 | curl_setopt($ch, CURLOPT_HTTPHEADER,array("Accept: application/json")); 147 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 148 | $server_output = curl_exec ($ch); 149 | curl_close ($ch); 150 | 151 | 152 | $json = json_decode($server_output,true); 153 | echo print_r($json); 154 | if( !$json || 155 | !isset($json['access_token']) || 156 | strpos($json['access_token'],' ') !== FALSE){echo "Bad access token. Reload the page. Try again.";die();} 157 | 158 | $accessToken = json_decode($server_output,true)["access_token"]; 159 | 160 | if($_COOKIE && isset($_COOKIE['dockerdeploy'])){ 161 | //echo "Already have cookie: ".$_COOKIE['dockerdeploy']; 162 | 163 | }else { 164 | //echo "setting cookie"; 165 | setcookie("dockerdeploy",$accessToken); 166 | } 167 | 168 | ?> 169 | 170 |
    171 | 172 | 173 | 174 |
    175 | Authenticate with GitHub"; 179 | } 180 | ?> 181 | 182 | 183 | 184 | -------------------------------------------------------------------------------- /cs518fall2017syllabus.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CS418/518 - Web Programming, Fall 2017, Old Dominion University 6 | 7 | 8 | 9 |
    10 |

    CS418/518 - Web Programming

    11 |

    Meeting time Tuesday 4:20-7:00, Location Dragas 1117

    12 |

    Fall 2017

    13 |

    Old Dominion University Department of Computer Science

    14 |

    Lecturer: Dr. Justin F. Brunelle (jbrunelle@cs.odu.edu)

    15 |

    Office Hours: Friday afternoons (please schedule an appointment)
    E&CS: TBD

    16 |
    17 | 18 |
    19 |

    Course Overview

    20 | 21 | This class will introduce Web Programming; the process of writing interactive applications accessible through the WWW. We will develop in the LAMP environment: Linux, Apache, MySQL and PHP. Emphasis will be on the integration of these components for a useful application; none will be exhaustively covered. Lectures will provide the overview of various concepts and the class will be centered around development of a semester-long project. Prerequisites include Web familiarity, programming knowledge and database experience. We will only use very simple databases, so that knowledge can be acquired during the class. 22 | 23 |

    Requirements

    24 | 25 | 26 | CS330 Object-Oriented Programming and Design 27 | 28 |

    Academic Integrity / Honor Code

    29 | 30 | By attending Old Dominion University you have accepted the responsibility to abide by the ODU Honor Code. If you are uncertain about how the honor code applies to any course activity, you should request clarification from the instructor. The honor pledge is as follows: 31 |

    32 | "I pledge to support the Honor System of Old Dominion University. I will refrain from any form of academic dishonesty or deception, such as cheating or plagiarism. I am aware that as a member of the academic community, it is my responsibility to turn in all suspected violators of the Honor Code. I will report to a hearing if summoned." 33 | 34 |

    35 | In particular, submitting anything that is not your own work without proper attribution (giving credit to the original author) is plagiarism and is considered to be an honor code violation. It is not acceptable to copy source code or written work from any other source (including other students), unless explicitly allowed in the assignment statement. In cases where using resources such as the Internet is allowed, proper attribution must be given. 36 | 37 |

    38 | Any evidence of an honor code violation (cheating) will result in a 0 grade for the assignment/exam, and the incident will be submitted to the Department of Computer Science for further review. Note that honor code violations can result in a permanent notation being placed on the student's transcript. Evidence of cheating may include a student being unable to satisfactorily answer questions asked by the instructor about a submitted solution. Cheating includes not only receiving unauthorized assistance, but also giving unauthorized assistance. For class files kept in Unix space, students are expected to use Unix file permission protections (chmod) to keep other students from accessing the files. Failure to adequately protect files may result in a student being held responsible for giving unauthorized assistance, even if not directly aware of it. 39 | 40 |

    41 | Students may still provide legitimate assistance to one another through the course mailing list. You are encouraged to form study groups to discuss course topics. Students should avoid discussions of solutions to ongoing assignments and should not, under any circumstances, show or share code solutions for an ongoing assignment. 42 | 43 |

    44 | All students are responsible for knowing the rules. If you are unclear about whether a certain activity is allowed or not, please contact the instructor. 45 | 46 |

    Course Policies

    47 | 48 | All assignments will be performed as a group or individually. All students must attend all presentations by their peers to receive full credit for their presentation grade. 49 | 50 |

    Grading

    51 | 52 | Your grade in the class will be comprised of 4 assignments worth 25 points each: 53 |
      54 |
    • 15 points - project requirements 55 |
    • 3 points - brief project writeup - how is each requirement met, design decisions, programming tricks, helpful resources consulted 56 |
    • 3 points - website usability - how easy is the site to use 57 |
    • 2 points - website aesthetics - how nice does the site look 58 |
    • 2 points - midway status report - 3-4 min presentation on assignment progress 59 |
    60 | 61 | Each assignment will be demoed in class on the due date and then checked by the TA. Late assignments are not accepted. 62 | 63 |

    64 | The grading scale is as follows (+ and - modifiers will be applied as appropriate): 65 |
      66 |
    • 90-100 A-, A 67 |
    • 80-89 B-, B, B+ 68 |
    • 70-79 C-, C, C+ 69 |
    • 60-69 D 70 |
    • 0-59 F 71 |
    72 |

    Attendance

    73 | 74 | I expect you to attend class and to arrive on time. Your grade may be affected if you are consistently tardy. If you have to miss a class, you are responsible checking the course website to find any assignments or notes you may have missed. Students may leave after 15 minutes if the instructor or a guest lecturer does not arrive in that time. Students will also be required to attend all midway and milestone presentations from their peers to receive full presentation credit. 75 | 76 |

    Email

    77 | 78 | Students should signup for the class email and slack lists. You do not have to use an ODU email address -- sign up with any email address that you would check daily. I will use both the list and slack channel to send out important updates (assignment deadline changes, class cancellations, office hours cancellations, etc.). 79 | 80 |

    Classroom Conduct

    81 | 82 | Please be respectful of your classmates and instructor by minimizing distractions during class. Cell phones must be turned off during class. 83 | 84 |

    Make-up Work

    85 | 86 | Make-ups for graded activities are possible only with a valid written medical or university excuse. It is the student's responsibility to give the instructor the written excuse and to arrange for any makeup work to be done. 87 | 88 |

    Disability Services

    89 | 90 | In compliance with PL94-142 and more recent federal legislation affirming the rights of disabled individuals, provisions will be made for students with special needs on an individual basis. The student must have been identified as special needs by the university and an appropriate letter must be provided to the course instructor. Provision will be made based upon written guidelines from the University's Office of Educational Accessibility. All students are expected to fulfill all course requirements. 91 | 92 |

    Seeking Help

    93 | 94 | The course website should be your first reference for questions about the class. The schedule will be updated throughout the semester with links to assigned readings. Announcements and frequently asked questions (FAQ) will also be posted to the course website. 95 | The best way to get help is to come to office hours. If you cannot make the regularly scheduled office hours, please send an email to setup an appointment. 96 | I am available via email, but do not expect or rely on an immediate response. 97 |
    98 | 99 | -------------------------------------------------------------------------------- /cs518DockerServerDeployment/jquery-1.11.2.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery v1.11.2 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ 2 | !function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.2",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; 3 | return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
    a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/
    ","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:k.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("